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;
}