diff options
author | Skorpionm <85568270+Skorpionm@users.noreply.github.com> | 2021-08-12 17:42:56 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-08-12 17:42:56 +0300 |
commit | 1cfa857f9831f6e056311cb26071e78dcd6f2c5c (patch) | |
tree | f4f5b27bae2faec19f065e911ff354026094d077 /applications/subghz/subghz.c | |
parent | 37d7870e52afc6918f4a7309f6084d5dd68a5547 (diff) |
[FL-1610] SubGhz: scene based application, PT save and replay (#630)
* SubGhz: scene based application
* SubGhz: encoder/decoder separation, DMA streaming, update app and cli.
* SubGhz: 2 stage async tx complete, minor cleanup
* SubGhz: 2 stage async tx complete, FIX state pin end transmit
* SubGhz: Pricenton, receive TE signal
* SubGhz: Pricenton, add save data, add load data
* SubGhz: Add Read scene, Fix pricenton save, load funtion
* SubGhz: Add Read, Receiver, SaveName scene
* SubGhz: Read and Save (pricenton)
* SubGhz: add Load scence
* SubGhz: Fix select file scene, add load scene, add transmitter view, add send tx pricenton
* SubGhz: Fix pricenton encoder, fix transmitter send
* SubGhz: modified Pricenton Encoder (added guard time at the beginning), modified CC1101 config, code refactoring
* SubGhz: Fix pricenton encoder defalut TE
* Archive: Fix path and name SubGhz
* Archive: Fix name app SubGhz
* GubGhz: Came: add Save, Load key
* GubGhz: GateTX: add Save, Load key
* GubGhz: NeroSketch: add Save, Load key
* Github: better linters triggers
* SubGhz: adding fast loading keys Archive -> Run in app
* GubGhz: KeeLog: add Save, Load key, key generation from the serial number of the meter and the button
* SubGhz: format sources and fix compilation
* FuriHal: add subghz configuration description for AGC section
* SubGhz: save only protocols that can be saved. Cleanup.
* Github: lint on pull requests
Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
Diffstat (limited to 'applications/subghz/subghz.c')
-rw-r--r-- | applications/subghz/subghz.c | 155 |
1 files changed, 118 insertions, 37 deletions
diff --git a/applications/subghz/subghz.c b/applications/subghz/subghz.c index 6190a72b..bf45208b 100644 --- a/applications/subghz/subghz.c +++ b/applications/subghz/subghz.c @@ -23,15 +23,22 @@ const uint32_t subghz_frequencies[] = { const uint32_t subghz_frequencies_count = sizeof(subghz_frequencies) / sizeof(uint32_t); const uint32_t subghz_frequencies_433_92 = 5; -void subghz_menu_callback(void* context, uint32_t index) { +bool subghz_custom_event_callback(void* context, uint32_t event) { furi_assert(context); SubGhz* subghz = context; + return scene_manager_handle_custom_event(subghz->scene_manager, event); +} - view_dispatcher_switch_to_view(subghz->view_dispatcher, index); +bool subghz_back_event_callback(void* context) { + furi_assert(context); + SubGhz* subghz = context; + return scene_manager_handle_back_event(subghz->scene_manager); } -uint32_t subghz_exit(void* context) { - return VIEW_NONE; +void subghz_tick_event_callback(void* context) { + furi_assert(context); + SubGhz* subghz = context; + scene_manager_handle_tick_event(subghz->scene_manager); } SubGhz* subghz_alloc() { @@ -46,33 +53,62 @@ SubGhz* subghz_alloc() { view_dispatcher_attach_to_gui( subghz->view_dispatcher, subghz->gui, ViewDispatcherTypeFullscreen); - // Menu + subghz->scene_manager = scene_manager_alloc(&subghz_scene_handlers, subghz); + view_dispatcher_set_event_callback_context(subghz->view_dispatcher, subghz); + view_dispatcher_set_custom_event_callback( + subghz->view_dispatcher, subghz_custom_event_callback); + view_dispatcher_set_navigation_event_callback( + subghz->view_dispatcher, subghz_back_event_callback); + view_dispatcher_set_tick_event_callback( + subghz->view_dispatcher, subghz_tick_event_callback, 100); + + // SubMenu subghz->submenu = submenu_alloc(); - submenu_add_item(subghz->submenu, "Capture", SubGhzViewCapture, subghz_menu_callback, subghz); - submenu_add_item( - subghz->submenu, "Basic Test", SubGhzViewTestBasic, subghz_menu_callback, subghz); - submenu_add_item( - subghz->submenu, "Packet Test", SubGhzViewTestPacket, subghz_menu_callback, subghz); - submenu_add_item( - subghz->submenu, "Static Code", SubGhzViewStatic, subghz_menu_callback, subghz); - - View* submenu_view = submenu_get_view(subghz->submenu); - view_set_previous_callback(submenu_view, subghz_exit); - view_dispatcher_add_view(subghz->view_dispatcher, SubGhzViewMenu, submenu_view); - - // Capture - subghz->subghz_capture = subghz_capture_alloc(); + view_dispatcher_add_view( + subghz->view_dispatcher, SubGhzViewMenu, submenu_get_view(subghz->submenu)); + + // Analyze + subghz->subghz_analyze = subghz_analyze_alloc(); + view_dispatcher_add_view( + subghz->view_dispatcher, + SubGhzViewAnalyze, + subghz_analyze_get_view(subghz->subghz_analyze)); + + // Receiver + subghz->subghz_receiver = subghz_receiver_alloc(); view_dispatcher_add_view( subghz->view_dispatcher, - SubGhzViewCapture, - subghz_capture_get_view(subghz->subghz_capture)); + SubGhzViewReceiver, + subghz_receiver_get_view(subghz->subghz_receiver)); - // Basic Test Module - subghz->subghz_test_basic = subghz_test_basic_alloc(); + // Dialog + subghz->dialog_ex = dialog_ex_alloc(); + view_dispatcher_add_view( + subghz->view_dispatcher, SubGhzViewDialogEx, dialog_ex_get_view(subghz->dialog_ex)); + + // Popup + subghz->popup = popup_alloc(); + view_dispatcher_add_view( + subghz->view_dispatcher, SubGhzViewPopup, popup_get_view(subghz->popup)); + + // Text Input + subghz->text_input = text_input_alloc(); + view_dispatcher_add_view( + subghz->view_dispatcher, SubGhzViewTextInput, text_input_get_view(subghz->text_input)); + + // Transmitter + subghz->subghz_transmitter = subghz_transmitter_alloc(); view_dispatcher_add_view( subghz->view_dispatcher, - SubGhzViewTestBasic, - subghz_test_basic_get_view(subghz->subghz_test_basic)); + SubGhzViewTransmitter, + subghz_transmitter_get_view(subghz->subghz_transmitter)); + + // Carrier Test Module + subghz->subghz_test_carrier = subghz_test_carrier_alloc(); + view_dispatcher_add_view( + subghz->view_dispatcher, + SubGhzViewTestCarrier, + subghz_test_carrier_get_view(subghz->subghz_test_carrier)); // Packet Test subghz->subghz_test_packet = subghz_test_packet_alloc(); @@ -86,8 +122,19 @@ SubGhz* subghz_alloc() { view_dispatcher_add_view( subghz->view_dispatcher, SubGhzViewStatic, subghz_static_get_view(subghz->subghz_static)); - // Switch to menu - view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewMenu); + //init Worker & Protocol + subghz->worker = subghz_worker_alloc(); + subghz->protocol = subghz_protocol_alloc(); + subghz_worker_set_overrun_callback( + subghz->worker, (SubGhzWorkerOverrunCallback)subghz_protocol_reset); + subghz_worker_set_pair_callback( + subghz->worker, (SubGhzWorkerPairCallback)subghz_protocol_parse); + subghz_worker_set_context(subghz->worker, subghz->protocol); + + subghz_protocol_load_keeloq_file(subghz->protocol, "/ext/assets/subghz/keeloq_mfcodes"); + subghz_protocol_load_nice_flor_s_file(subghz->protocol, "/ext/assets/subghz/nice_floor_s_rx"); + + //subghz_protocol_enable_dump_text(subghz->protocol, subghz_text_callback, subghz); return subghz; } @@ -96,24 +143,47 @@ void subghz_free(SubGhz* subghz) { furi_assert(subghz); // Packet Test + view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewTestPacket); + subghz_test_packet_free(subghz->subghz_test_packet); + + // Carrier Test + view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewTestCarrier); + subghz_test_carrier_free(subghz->subghz_test_carrier); + + // Static view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewStatic); subghz_static_free(subghz->subghz_static); - // Packet Test - view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewTestPacket); - subghz_test_packet_free(subghz->subghz_test_packet); + // Analyze + view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewAnalyze); + subghz_analyze_free(subghz->subghz_analyze); + + // Receiver + view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewReceiver); + subghz_receiver_free(subghz->subghz_receiver); + + // TextInput + view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewTextInput); + text_input_free(subghz->text_input); - // Basic Test - view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewTestBasic); - subghz_test_basic_free(subghz->subghz_test_basic); + // Receiver + view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewTransmitter); + subghz_transmitter_free(subghz->subghz_transmitter); // Submenu view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewMenu); submenu_free(subghz->submenu); - // Capture - view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewCapture); - subghz_capture_free(subghz->subghz_capture); + // DialogEx + view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewDialogEx); + dialog_ex_free(subghz->dialog_ex); + + // Popup + view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewPopup); + popup_free(subghz->popup); + + // Scene manager + scene_manager_free(subghz->scene_manager); // View Dispatcher view_dispatcher_free(subghz->view_dispatcher); @@ -122,13 +192,24 @@ void subghz_free(SubGhz* subghz) { furi_record_close("gui"); subghz->gui = NULL; + //Worker & Protocol + subghz_protocol_free(subghz->protocol); + subghz_worker_free(subghz->worker); + // The rest free(subghz); } -int32_t subghz_app(void* context) { +int32_t subghz_app(void* p) { SubGhz* subghz = subghz_alloc(); + // Check argument and run corresponding scene + if(p && subghz_key_load(subghz, p)) { + scene_manager_next_scene(subghz->scene_manager, SubGhzSceneTransmitter); + } else { + scene_manager_next_scene(subghz->scene_manager, SubGhzSceneStart); + } + view_dispatcher_run(subghz->view_dispatcher); subghz_free(subghz); |