subghz_scene_read.c 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #include "../subghz_i.h"
  2. #define GUBGHZ_READ_CUSTOM_EVENT (10UL)
  3. void subghz_read_protocol_callback(SubGhzProtocolCommon* parser, void* context) {
  4. furi_assert(context);
  5. SubGhz* subghz = context;
  6. subghz->protocol_result = parser;
  7. view_dispatcher_send_custom_event(subghz->view_dispatcher, GUBGHZ_READ_CUSTOM_EVENT);
  8. }
  9. void subghz_scene_read_callback(DialogExResult result, void* context) {
  10. SubGhz* subghz = context;
  11. view_dispatcher_send_custom_event(subghz->view_dispatcher, result);
  12. }
  13. const void subghz_scene_read_on_enter(void* context) {
  14. SubGhz* subghz = context;
  15. // Setup view
  16. DialogEx* dialog_ex = subghz->dialog_ex;
  17. dialog_ex_set_header(dialog_ex, "SubGhz 433.92", 36, 6, AlignLeft, AlignCenter);
  18. dialog_ex_set_icon(dialog_ex, 10, 12, &I_RFIDDolphinReceive_97x61);
  19. //Start CC1101 rx
  20. subghz_begin(FuriHalSubGhzPresetOokAsync);
  21. subghz_rx(433920000);
  22. furi_hal_subghz_start_async_rx(subghz_worker_rx_callback, subghz->worker);
  23. subghz_worker_start(subghz->worker);
  24. subghz_protocol_enable_dump(subghz->protocol, subghz_read_protocol_callback, subghz);
  25. view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewDialogEx);
  26. }
  27. const bool subghz_scene_read_on_event(void* context, SceneManagerEvent event) {
  28. SubGhz* subghz = context;
  29. if(event.type == SceneManagerEventTypeCustom) {
  30. if(event.event == GUBGHZ_READ_CUSTOM_EVENT) {
  31. scene_manager_next_scene(subghz->scene_manager, SubGhzViewReceiver);
  32. return true;
  33. }
  34. }
  35. return false;
  36. }
  37. const void subghz_scene_read_on_exit(void* context) {
  38. SubGhz* subghz = context;
  39. //Stop CC1101
  40. subghz_worker_stop(subghz->worker);
  41. furi_hal_subghz_stop_async_rx();
  42. subghz_end();
  43. DialogEx* dialog_ex = subghz->dialog_ex;
  44. dialog_ex_set_header(dialog_ex, NULL, 0, 0, AlignCenter, AlignCenter);
  45. dialog_ex_set_icon(dialog_ex, 0, 0, NULL);
  46. }