From 718062ed6e7e6bb92e4be57b3b7bd7ac0c4a2579 Mon Sep 17 00:00:00 2001 From: lilvinz Date: Sun, 16 Sep 2012 18:19:27 +0200 Subject: [PATCH] pios_led: added support for active_high connected leds --- flight/PiOS/STM32F10x/pios_led.c | 20 ++++++++++++++++---- flight/PiOS/STM32F4xx/pios_led.c | 20 ++++++++++++++++---- flight/PiOS/inc/pios_led_priv.h | 1 + 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/flight/PiOS/STM32F10x/pios_led.c b/flight/PiOS/STM32F10x/pios_led.c index 30c6f1296..1714a9165 100644 --- a/flight/PiOS/STM32F10x/pios_led.c +++ b/flight/PiOS/STM32F10x/pios_led.c @@ -93,7 +93,10 @@ void PIOS_LED_On(uint32_t led_id) const struct pios_led * led = &(led_cfg->leds[led_id]); - GPIO_ResetBits(led->pin.gpio, led->pin.init.GPIO_Pin); + if (led->active_high) + GPIO_SetBits(led->pin.gpio, led->pin.init.GPIO_Pin); + else + GPIO_ResetBits(led->pin.gpio, led->pin.init.GPIO_Pin); } /** @@ -111,7 +114,10 @@ void PIOS_LED_Off(uint32_t led_id) const struct pios_led * led = &(led_cfg->leds[led_id]); - GPIO_SetBits(led->pin.gpio, led->pin.init.GPIO_Pin); + if (led->active_high) + GPIO_ResetBits(led->pin.gpio, led->pin.init.GPIO_Pin); + else + GPIO_SetBits(led->pin.gpio, led->pin.init.GPIO_Pin); } /** @@ -130,9 +136,15 @@ void PIOS_LED_Toggle(uint32_t led_id) const struct pios_led * led = &(led_cfg->leds[led_id]); if (GPIO_ReadOutputDataBit(led->pin.gpio, led->pin.init.GPIO_Pin) == Bit_SET) { - PIOS_LED_On(led_id); + if (led->active_high) + PIOS_LED_Off(led_id); + else + PIOS_LED_On(led_id); } else { - PIOS_LED_Off(led_id); + if (led->active_high) + PIOS_LED_On(led_id); + else + PIOS_LED_Off(led_id); } } diff --git a/flight/PiOS/STM32F4xx/pios_led.c b/flight/PiOS/STM32F4xx/pios_led.c index c73d37198..5a8d25d33 100644 --- a/flight/PiOS/STM32F4xx/pios_led.c +++ b/flight/PiOS/STM32F4xx/pios_led.c @@ -77,7 +77,10 @@ void PIOS_LED_On(uint32_t led_id) const struct pios_led * led = &(led_cfg->leds[led_id]); - GPIO_ResetBits(led->pin.gpio, led->pin.init.GPIO_Pin); + if (led->active_high) + GPIO_SetBits(led->pin.gpio, led->pin.init.GPIO_Pin); + else + GPIO_ResetBits(led->pin.gpio, led->pin.init.GPIO_Pin); } /** @@ -95,7 +98,10 @@ void PIOS_LED_Off(uint32_t led_id) const struct pios_led * led = &(led_cfg->leds[led_id]); - GPIO_SetBits(led->pin.gpio, led->pin.init.GPIO_Pin); + if (led->active_high) + GPIO_ResetBits(led->pin.gpio, led->pin.init.GPIO_Pin); + else + GPIO_SetBits(led->pin.gpio, led->pin.init.GPIO_Pin); } /** @@ -114,9 +120,15 @@ void PIOS_LED_Toggle(uint32_t led_id) const struct pios_led * led = &(led_cfg->leds[led_id]); if (GPIO_ReadOutputDataBit(led->pin.gpio, led->pin.init.GPIO_Pin) == Bit_SET) { - PIOS_LED_On(led_id); + if (led->active_high) + PIOS_LED_Off(led_id); + else + PIOS_LED_On(led_id); } else { - PIOS_LED_Off(led_id); + if (led->active_high) + PIOS_LED_On(led_id); + else + PIOS_LED_Off(led_id); } } diff --git a/flight/PiOS/inc/pios_led_priv.h b/flight/PiOS/inc/pios_led_priv.h index 20f09eafc..36a1ee3f7 100644 --- a/flight/PiOS/inc/pios_led_priv.h +++ b/flight/PiOS/inc/pios_led_priv.h @@ -37,6 +37,7 @@ struct pios_led { struct stm32_gpio pin; uint32_t remap; + bool active_high; }; struct pios_led_cfg {