backlight_driver_common.c 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #include "backlight.h"
  2. #include "backlight_driver_common.h"
  3. #include "gpio.h"
  4. #include "util.h"
  5. #if !defined(BACKLIGHT_PIN) && !defined(BACKLIGHT_PINS)
  6. # error "Backlight pin/pins not defined. Please configure."
  7. #endif
  8. #if defined(BACKLIGHT_PINS)
  9. static const pin_t backlight_pins[] = BACKLIGHT_PINS;
  10. # ifndef BACKLIGHT_LED_COUNT
  11. # define BACKLIGHT_LED_COUNT ARRAY_SIZE(backlight_pins)
  12. # endif
  13. # define FOR_EACH_LED(x) \
  14. for (uint8_t i = 0; i < BACKLIGHT_LED_COUNT; i++) { \
  15. pin_t backlight_pin = backlight_pins[i]; \
  16. { \
  17. x \
  18. } \
  19. }
  20. #else
  21. // we support only one backlight pin
  22. static const pin_t backlight_pin = BACKLIGHT_PIN;
  23. # define FOR_EACH_LED(x) x
  24. #endif
  25. static inline void backlight_on(pin_t backlight_pin) {
  26. #if BACKLIGHT_ON_STATE == 0
  27. gpio_write_pin_low(backlight_pin);
  28. #else
  29. gpio_write_pin_high(backlight_pin);
  30. #endif
  31. }
  32. static inline void backlight_off(pin_t backlight_pin) {
  33. #if BACKLIGHT_ON_STATE == 0
  34. gpio_write_pin_high(backlight_pin);
  35. #else
  36. gpio_write_pin_low(backlight_pin);
  37. #endif
  38. }
  39. void backlight_pins_init(void) {
  40. // Setup backlight pin as output and output to off state.
  41. FOR_EACH_LED(gpio_set_pin_output(backlight_pin); backlight_off(backlight_pin);)
  42. }
  43. void backlight_pins_on(void) {
  44. FOR_EACH_LED(backlight_on(backlight_pin);)
  45. }
  46. void backlight_pins_off(void) {
  47. FOR_EACH_LED(backlight_off(backlight_pin);)
  48. }