api-hal-light.c 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #include <api-hal-light.h>
  2. #include <stm32wbxx_ll_gpio.h>
  3. // LCD backlight
  4. #define BOOT_LCD_BL_PORT GPIOA
  5. #define BOOT_LCD_BL_PIN LL_GPIO_PIN_15
  6. // LEDs
  7. #define LED_RED_PORT GPIOA
  8. #define LED_RED_PIN LL_GPIO_PIN_1
  9. #define LED_GREEN_PORT GPIOA
  10. #define LED_GREEN_PIN LL_GPIO_PIN_2
  11. #define LED_BLUE_PORT GPIOA
  12. #define LED_BLUE_PIN LL_GPIO_PIN_3
  13. static void api_hal_light_gpio_set(GPIO_TypeDef* port, uint32_t pin, uint8_t value) {
  14. if (value) {
  15. LL_GPIO_ResetOutputPin(port, pin);
  16. } else {
  17. LL_GPIO_SetOutputPin(port, pin);
  18. }
  19. }
  20. void api_hal_light_init() {
  21. LL_GPIO_SetPinMode(BOOT_LCD_BL_PORT, BOOT_LCD_BL_PIN, LL_GPIO_MODE_OUTPUT);
  22. LL_GPIO_SetPinSpeed(BOOT_LCD_BL_PORT, BOOT_LCD_BL_PIN, LL_GPIO_SPEED_FREQ_LOW);
  23. LL_GPIO_SetPinOutputType(BOOT_LCD_BL_PORT, BOOT_LCD_BL_PIN, LL_GPIO_OUTPUT_PUSHPULL);
  24. LL_GPIO_SetPinMode(LED_RED_PORT, LED_RED_PIN, LL_GPIO_MODE_OUTPUT);
  25. LL_GPIO_SetPinOutputType(LED_RED_PORT, LED_RED_PIN, LL_GPIO_OUTPUT_OPENDRAIN);
  26. LL_GPIO_SetPinMode(LED_GREEN_PORT, LED_GREEN_PIN, LL_GPIO_MODE_OUTPUT);
  27. LL_GPIO_SetPinOutputType(LED_GREEN_PORT, LED_GREEN_PIN, LL_GPIO_OUTPUT_OPENDRAIN);
  28. LL_GPIO_SetPinMode(LED_BLUE_PORT, LED_BLUE_PIN, LL_GPIO_MODE_OUTPUT);
  29. LL_GPIO_SetPinOutputType(LED_BLUE_PORT, LED_BLUE_PIN, LL_GPIO_OUTPUT_OPENDRAIN);
  30. }
  31. void api_hal_light_set(Light light, uint8_t value) {
  32. switch(light) {
  33. case LightRed:
  34. api_hal_light_gpio_set(LED_RED_PORT, LED_RED_PIN, value);
  35. break;
  36. case LightGreen:
  37. api_hal_light_gpio_set(LED_GREEN_PORT, LED_GREEN_PIN, value);
  38. break;
  39. case LightBlue:
  40. api_hal_light_gpio_set(LED_BLUE_PORT, LED_BLUE_PIN, value);
  41. break;
  42. case LightBacklight:
  43. api_hal_light_gpio_set(BOOT_LCD_BL_PORT, BOOT_LCD_BL_PIN, !value);
  44. break;
  45. default:
  46. break;
  47. }
  48. }