subghz_scene_read.c 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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, SubGhzSceneReceiver);
  32. notification_message(subghz->notifications, &sequence_success);
  33. return true;
  34. }
  35. } else if(event.type == SceneManagerEventTypeTick) {
  36. notification_message(subghz->notifications, &sequence_blink_blue_10);
  37. return true;
  38. }
  39. return false;
  40. }
  41. const void subghz_scene_read_on_exit(void* context) {
  42. SubGhz* subghz = context;
  43. // Stop CC1101
  44. subghz_worker_stop(subghz->worker);
  45. furi_hal_subghz_stop_async_rx();
  46. subghz_end();
  47. DialogEx* dialog_ex = subghz->dialog_ex;
  48. dialog_ex_set_header(dialog_ex, NULL, 0, 0, AlignCenter, AlignCenter);
  49. dialog_ex_set_icon(dialog_ex, 0, 0, NULL);
  50. }