diff --git a/conf/airframes/ENAC/rover_ostrich.xml b/conf/airframes/ENAC/rover_ostrich.xml index 78955ee99c..23ea1addbf 100644 --- a/conf/airframes/ENAC/rover_ostrich.xml +++ b/conf/airframes/ENAC/rover_ostrich.xml @@ -40,6 +40,14 @@ + + + + + + + + diff --git a/sw/airborne/boards/chimera/chibios/v1.0/chimera.h b/sw/airborne/boards/chimera/chibios/v1.0/chimera.h index 2d8654f9a8..310ca4eade 100644 --- a/sw/airborne/boards/chimera/chibios/v1.0/chimera.h +++ b/sw/airborne/boards/chimera/chibios/v1.0/chimera.h @@ -575,5 +575,19 @@ #define ActuatorsDefaultInit() ActuatorsPwmInit() #define ActuatorsDefaultCommit() ActuatorsPwmCommit() +/** + * For WS2812 + */ +#define WS2812D1_GPIO GPIOC +#define WS2812D1_PIN GPIO6 +#define WS2812D1_AF 3 +#define WS2812D1_CFG_DEF { \ + .dma_stream = STM32_PWM8_UP_DMA_STREAM, \ + .dma_channel = STM32_PWM8_UP_DMA_CHANNEL, \ + .dma_priority = STM32_PWM8_UP_DMA_PRIORITY, \ + .pwm_channel = 0, \ + .pwmp = &PWMD8 \ +} + #endif /* CONFIG_CHIMERA_1_00_H */ diff --git a/sw/airborne/boards/chimera/chibios/v1.0/mcuconf.h b/sw/airborne/boards/chimera/chibios/v1.0/mcuconf.h index 93a7f7a587..c2323bef21 100644 --- a/sw/airborne/boards/chimera/chibios/v1.0/mcuconf.h +++ b/sw/airborne/boards/chimera/chibios/v1.0/mcuconf.h @@ -317,7 +317,9 @@ #define STM32_PWM_USE_TIM4 TRUE #endif #define STM32_PWM_USE_TIM5 FALSE +#ifndef STM32_PWM_USE_TIM8 #define STM32_PWM_USE_TIM8 FALSE +#endif #define STM32_PWM_USE_TIM9 FALSE #define STM32_PWM_USE_TIM10 FALSE #define STM32_PWM_USE_TIM11 FALSE @@ -328,6 +330,11 @@ #define STM32_PWM_USE_TIM16 FALSE #define STM32_PWM_USE_TIM17 FALSE +#define STM32_PWM8_UP_DMA_STREAM STM32_DMA_STREAM_ID(2, 1) +#define STM32_PWM8_UP_DMA_CHANNEL 7 +#define STM32_PWM8_UP_DMA_IRQ_PRIORITY 6 +#define STM32_PWM8_UP_DMA_PRIORITY 2 + /* * RTC driver system settings. */ diff --git a/sw/airborne/modules/light/light_scheduler.c b/sw/airborne/modules/light/light_scheduler.c index d81cf42892..090c6dae19 100644 --- a/sw/airborne/modules/light/light_scheduler.c +++ b/sw/airborne/modules/light/light_scheduler.c @@ -41,8 +41,18 @@ void light_scheduler_periodic(void) { uint32_t n, s0; for (n = 0; n < WS2812_NB_LEDS; n++) { - s0 = s + 10 * n; - light_ws2812_arch_set(n, s0 % 255, (s0 + 85) % 255, (s0 + 170) % 255); + if (WS2812_NB_LEDS == 32) { + if (n<=7) light_ws2812_arch_set(n, 0,255,0); // LEFT = GREEN + else if (n<=15) + light_ws2812_arch_set(n, 0,0,255); // BACK = BLUE + else if (n<=23) + light_ws2812_arch_set(n, 255,0,0); // RIGHT = RED + else + light_ws2812_arch_set(n, 255,255,255); // FRONT = WHITE + } else { + s0 = s + 10 * n; + light_ws2812_arch_set(n, s0 % 255, (s0 + 85) % 255, (s0 + 170) % 255); + } } s += 10; }