backlight-control.c 916 B

123456789101112131415161718192021222324252627282930313233
  1. #include <furi.h>
  2. #define BACKLIGHT_TIME 10000
  3. #define BACKLIGHT_FLAG_ACTIVITY 0x00000001U
  4. static void event_cb(const void* value, void* ctx) {
  5. osThreadFlagsSet((osThreadId_t)ctx, BACKLIGHT_FLAG_ACTIVITY);
  6. }
  7. int32_t backlight_control(void* p) {
  8. // TODO open record
  9. const GpioPin* backlight_record = &backlight_gpio;
  10. // configure pin
  11. gpio_init(backlight_record, GpioModeOutputPushPull);
  12. gpio_write(backlight_record, true);
  13. // open record
  14. PubSub* event_record = furi_record_open("input_events");
  15. subscribe_pubsub(event_record, event_cb, (void*)osThreadGetId());
  16. while(1) {
  17. // wait for event
  18. if(osThreadFlagsWait(BACKLIGHT_FLAG_ACTIVITY, osFlagsWaitAny, BACKLIGHT_TIME) ==
  19. BACKLIGHT_FLAG_ACTIVITY) {
  20. gpio_write(backlight_record, true);
  21. } else {
  22. gpio_write(backlight_record, false);
  23. }
  24. }
  25. return 0;
  26. }