Merge remote-tracking branch 'origin/master'
[fw/altos] / src / drivers / ao_pca9922.c
index dc006f55eaf47311a3a1025b821b0cb5f2e3c522..fe070b884909260b028ee53930b2698d59186c71 100644 (file)
@@ -30,9 +30,12 @@ ao_led_apply(void)
        /* Don't try the SPI bus during initialization */
        if (!ao_cur_task)
                return;
-       ao_spi_get_bit(AO_PCA9922_CS_PORT, AO_PCA9922_CS_PIN, AO_PCA9922_CS, AO_PCA9922_SPI_BUS, AO_SPI_SPEED_FAST);
+       ao_mutex_get(&ao_spi_mutex);
+       ao_spi_set_speed(AO_SPI_SPEED_FAST);
+       AO_PCA9922_CS = 1;
        ao_spi_send(&ao_led_state, 1, AO_PCA9922_SPI_BUS);
-       ao_spi_put_bit(AO_PCA9922_CS_PORT, AO_PCA9922_CS_PIN, AO_PCA9922_CS, AO_PCA9922_SPI_BUS);
+       AO_PCA9922_CS = 0;
+       ao_mutex_put(&ao_spi_mutex);
 }
 
 void
@@ -56,6 +59,13 @@ ao_led_set(uint8_t colors)
        ao_led_apply();
 }
 
+void
+ao_led_set_mask(uint8_t colors, uint8_t mask)
+{
+       ao_led_state = (ao_led_state & ~mask) | (colors & mask);
+       ao_led_apply();
+}
+
 void
 ao_led_toggle(uint8_t colors)
 {
@@ -74,5 +84,6 @@ ao_led_for(uint8_t colors, uint16_t ticks) __reentrant
 void
 ao_led_init(uint8_t enable)
 {
+       (void) enable;
        ao_enable_output(AO_PCA9922_CS_PORT, AO_PCA9922_CS_PIN, AO_PCA9922_CS, 1);
 }