flipper-zero-tutorials/js/flipboard/modules/js_rgbleds/led_driver_i.h
2024-04-19 18:00:58 -05:00

26 lines
839 B
C

#pragma once
#include <stm32wbxx_ll_dma.h>
#include "led_driver.h"
#define MAX_LED_COUNT 16
// We store the HIGH/LOW durations (2 values) for each color bit (24 bits per LED)
#define LED_DRIVER_BUFFER_SIZE (MAX_LED_COUNT * 2 * 24)
// We use a setinel value to figure out when the timer is complete.
#define LED_DRIVER_TIMER_SETINEL 0xFFFFU
/** 64 transitions per us @ 64MHz. Our timing is in NANO_SECONDS */
#define LED_DRIVER_TIMER_NANOSECOND (1000U / (SystemCoreClock / 1000000U))
// Timings for WS2812B
#define LED_DRIVER_T0H 400U
#define LED_DRIVER_T1H 800U
#define LED_DRIVER_T0L 850U
#define LED_DRIVER_T1L 450U
#define LED_DRIVER_TRESETL 55 * 1000U
#define LED_DRIVER_TDONE 2000U
// Max wait for the DMA to complete. NOTE: 4000 leds*(850ns+450ns)*24 = 124.8ms + 50ms blanking = 174.8ms
#define LED_DRIVER_SETINEL_WAIT_MS 200