strobe.c 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #include <furi.h>
  2. #include <api-hal.h>
  3. #include <input.h>
  4. static void event_cb(const void* value, void* ctx) {
  5. const InputEvent* event = value;
  6. uint32_t* delay_time = acquire_mutex(ctx, 0);
  7. if(delay_time == NULL) return;
  8. if(event->key == InputKeyUp && *delay_time < 1000) {
  9. *delay_time += 5;
  10. }
  11. if(event->key == InputKeyDown && *delay_time > 10) {
  12. *delay_time -= 5;
  13. }
  14. release_mutex(ctx, delay_time);
  15. }
  16. void application_strobe(void* p) {
  17. // WAT
  18. osDelay(100);
  19. uint32_t delay_time_holder = 100;
  20. ValueMutex delay_mutex;
  21. init_mutex(&delay_mutex, &delay_time_holder, sizeof(delay_time_holder));
  22. PubSub* event_record = furi_record_open("input_events");
  23. subscribe_pubsub(event_record, event_cb, &delay_mutex);
  24. while(1) {
  25. uint32_t delay_time = 100;
  26. read_mutex_block(&delay_mutex, &delay_time, sizeof(delay_time));
  27. api_hal_light_set(LightRed, 0x00);
  28. api_hal_light_set(LightGreen, 0x00);
  29. api_hal_light_set(LightBlue, 0x00);
  30. osDelay(delay_time / 10);
  31. api_hal_light_set(LightRed, 0xFF);
  32. api_hal_light_set(LightGreen, 0xFF);
  33. api_hal_light_set(LightBlue, 0xFF);
  34. osDelay(delay_time);
  35. }
  36. }