diff options
author | Skorpionm <85568270+Skorpionm@users.noreply.github.com> | 2022-03-03 12:48:56 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-03 12:48:56 +0300 |
commit | 3164184bbcb0a31f6c510fbd0bdab94f6760b4e7 (patch) | |
tree | 49632f1269eb2af063c87aea3778a26834f4bb69 /applications/subghz/subghz.c | |
parent | 052237f8c9bb34bc244abcbf108cdf1ec6ec58ec (diff) |
[FL-2230] SubGhz: protocol API refactoring (#969)
* SubGhz: protocols library refactoring
* SubGhz: new architecture and refactoring
* SubGhz: simplify protocol structure, remove unused types
* SubGhz: rename Subghz to SubGhz
* SubGhz: add environment concept
Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
Co-authored-by: DrZlo13 <who.just.the.doctor@gmail.com>
Diffstat (limited to 'applications/subghz/subghz.c')
-rw-r--r-- | applications/subghz/subghz.c | 96 |
1 files changed, 52 insertions, 44 deletions
diff --git a/applications/subghz/subghz.c b/applications/subghz/subghz.c index 9a6809ea..c4324e7f 100644 --- a/applications/subghz/subghz.c +++ b/applications/subghz/subghz.c @@ -85,80 +85,80 @@ SubGhz* subghz_alloc() { // SubMenu subghz->submenu = submenu_alloc(); view_dispatcher_add_view( - subghz->view_dispatcher, SubGhzViewMenu, submenu_get_view(subghz->submenu)); + subghz->view_dispatcher, SubGhzViewIdMenu, submenu_get_view(subghz->submenu)); // Receiver - subghz->subghz_receiver = subghz_receiver_alloc(); + subghz->subghz_receiver = subghz_view_receiver_alloc(); view_dispatcher_add_view( subghz->view_dispatcher, - SubGhzViewReceiver, - subghz_receiver_get_view(subghz->subghz_receiver)); + SubGhzViewIdReceiver, + subghz_view_receiver_get_view(subghz->subghz_receiver)); // Popup subghz->popup = popup_alloc(); view_dispatcher_add_view( - subghz->view_dispatcher, SubGhzViewPopup, popup_get_view(subghz->popup)); + subghz->view_dispatcher, SubGhzViewIdPopup, 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)); + subghz->view_dispatcher, SubGhzViewIdTextInput, text_input_get_view(subghz->text_input)); // Custom Widget subghz->widget = widget_alloc(); view_dispatcher_add_view( - subghz->view_dispatcher, SubGhzViewWidget, widget_get_view(subghz->widget)); + subghz->view_dispatcher, SubGhzViewIdWidget, widget_get_view(subghz->widget)); //Dialog subghz->dialogs = furi_record_open("dialogs"); // Transmitter - subghz->subghz_transmitter = subghz_transmitter_alloc(); + subghz->subghz_transmitter = subghz_view_transmitter_alloc(); view_dispatcher_add_view( subghz->view_dispatcher, - SubGhzViewTransmitter, - subghz_transmitter_get_view(subghz->subghz_transmitter)); + SubGhzViewIdTransmitter, + subghz_view_transmitter_get_view(subghz->subghz_transmitter)); // Variable Item List subghz->variable_item_list = variable_item_list_alloc(); view_dispatcher_add_view( subghz->view_dispatcher, - SubGhzViewVariableItemList, + SubGhzViewIdVariableItemList, variable_item_list_get_view(subghz->variable_item_list)); // Frequency Analyzer subghz->subghz_frequency_analyzer = subghz_frequency_analyzer_alloc(); view_dispatcher_add_view( subghz->view_dispatcher, - SubGhzViewFrequencyAnalyzer, + SubGhzViewIdFrequencyAnalyzer, subghz_frequency_analyzer_get_view(subghz->subghz_frequency_analyzer)); // Read RAW subghz->subghz_read_raw = subghz_read_raw_alloc(); view_dispatcher_add_view( subghz->view_dispatcher, - SubGhzViewReadRAW, + SubGhzViewIdReadRAW, subghz_read_raw_get_view(subghz->subghz_read_raw)); // Carrier Test Module subghz->subghz_test_carrier = subghz_test_carrier_alloc(); view_dispatcher_add_view( subghz->view_dispatcher, - SubGhzViewTestCarrier, + SubGhzViewIdTestCarrier, subghz_test_carrier_get_view(subghz->subghz_test_carrier)); // Packet Test subghz->subghz_test_packet = subghz_test_packet_alloc(); view_dispatcher_add_view( subghz->view_dispatcher, - SubGhzViewTestPacket, + SubGhzViewIdTestPacket, subghz_test_packet_get_view(subghz->subghz_test_packet)); // Static send subghz->subghz_test_static = subghz_test_static_alloc(); view_dispatcher_add_view( subghz->view_dispatcher, - SubGhzViewStatic, + SubGhzViewIdStatic, subghz_test_static_get_view(subghz->subghz_test_static)); //init Worker & Protocol & History @@ -170,12 +170,21 @@ SubGhz* subghz_alloc() { subghz->txrx->rx_key_state = SubGhzRxKeyStateIDLE; subghz->txrx->history = subghz_history_alloc(); subghz->txrx->worker = subghz_worker_alloc(); - subghz->txrx->parser = subghz_parser_alloc(); + subghz->txrx->fff_data = flipper_format_string_alloc(); + + subghz->txrx->environment = subghz_environment_alloc(); + subghz_environment_set_came_atomo_rainbow_table_file_name( + subghz->txrx->environment, "/ext/subghz/assets/came_atomo"); + subghz_environment_set_nice_flor_s_rainbow_table_file_name( + subghz->txrx->environment, "/ext/subghz/assets/nice_flor_s"); + subghz->txrx->receiver = subghz_receiver_alloc(subghz->txrx->environment); + subghz_receiver_set_filter(subghz->txrx->receiver, SubGhzProtocolFlag_Decodable); + subghz_worker_set_overrun_callback( - subghz->txrx->worker, (SubGhzWorkerOverrunCallback)subghz_parser_reset); + subghz->txrx->worker, (SubGhzWorkerOverrunCallback)subghz_receiver_reset); subghz_worker_set_pair_callback( - subghz->txrx->worker, (SubGhzWorkerPairCallback)subghz_parser_parse); - subghz_worker_set_context(subghz->txrx->worker, subghz->txrx->parser); + subghz->txrx->worker, (SubGhzWorkerPairCallback)subghz_receiver_decode); + subghz_worker_set_context(subghz->txrx->worker, subghz->txrx->receiver); //Init Error_str string_init(subghz->error_str); @@ -187,54 +196,54 @@ void subghz_free(SubGhz* subghz) { furi_assert(subghz); // Packet Test - view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewTestPacket); + view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewIdTestPacket); subghz_test_packet_free(subghz->subghz_test_packet); // Carrier Test - view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewTestCarrier); + view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewIdTestCarrier); subghz_test_carrier_free(subghz->subghz_test_carrier); // Static - view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewStatic); + view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewIdStatic); subghz_test_static_free(subghz->subghz_test_static); // Receiver - view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewReceiver); - subghz_receiver_free(subghz->subghz_receiver); + view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewIdReceiver); + subghz_view_receiver_free(subghz->subghz_receiver); // TextInput - view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewTextInput); + view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewIdTextInput); text_input_free(subghz->text_input); // Custom Widget - view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewWidget); + view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewIdWidget); widget_free(subghz->widget); //Dialog furi_record_close("dialogs"); // Transmitter - view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewTransmitter); - subghz_transmitter_free(subghz->subghz_transmitter); + view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewIdTransmitter); + subghz_view_transmitter_free(subghz->subghz_transmitter); // Variable Item List - view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewVariableItemList); + view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewIdVariableItemList); variable_item_list_free(subghz->variable_item_list); // Frequency Analyzer - view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewFrequencyAnalyzer); + view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewIdFrequencyAnalyzer); subghz_frequency_analyzer_free(subghz->subghz_frequency_analyzer); // Read RAW - view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewReadRAW); + view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewIdReadRAW); subghz_read_raw_free(subghz->subghz_read_raw); // Submenu - view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewMenu); + view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewIdMenu); submenu_free(subghz->submenu); // Popup - view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewPopup); + view_dispatcher_remove_view(subghz->view_dispatcher, SubGhzViewIdPopup); popup_free(subghz->popup); // Scene manager @@ -248,8 +257,10 @@ void subghz_free(SubGhz* subghz) { subghz->gui = NULL; //Worker & Protocol & History - subghz_parser_free(subghz->txrx->parser); + subghz_receiver_free(subghz->txrx->receiver); + subghz_environment_free(subghz->txrx->environment); subghz_worker_free(subghz->txrx->worker); + flipper_format_free(subghz->txrx->fff_data); subghz_history_free(subghz->txrx->history); free(subghz->txrx); @@ -268,12 +279,10 @@ int32_t subghz_app(void* p) { SubGhz* subghz = subghz_alloc(); //Load database - bool load_database = - subghz_parser_load_keeloq_file(subghz->txrx->parser, "/ext/subghz/assets/keeloq_mfcodes"); - subghz_parser_load_keeloq_file(subghz->txrx->parser, "/ext/subghz/assets/keeloq_mfcodes_user"); - subghz_parser_load_nice_flor_s_file(subghz->txrx->parser, "/ext/subghz/assets/nice_flor_s_rx"); - subghz_parser_load_came_atomo_file(subghz->txrx->parser, "/ext/subghz/assets/came_atomo"); - + bool load_database = subghz_environment_load_keystore( + subghz->txrx->environment, "/ext/subghz/assets/keeloq_mfcodes"); + subghz_environment_load_keystore( + subghz->txrx->environment, "/ext/subghz/assets/keeloq_mfcodes_user"); // Check argument and run corresponding scene if(p && subghz_key_load(subghz, p)) { string_t filename; @@ -282,8 +291,7 @@ int32_t subghz_app(void* p) { path_extract_filename_no_ext(p, filename); strcpy(subghz->file_name, string_get_cstr(filename)); string_clear(filename); - - if((!strcmp(subghz->txrx->protocol_result->name, "RAW"))) { + if((!strcmp(subghz->txrx->decoder_result->protocol->name, "RAW"))) { //Load Raw TX subghz->txrx->rx_key_state = SubGhzRxKeyStateRAWLoad; scene_manager_next_scene(subghz->scene_manager, SubGhzSceneReadRAW); @@ -296,7 +304,7 @@ int32_t subghz_app(void* p) { scene_manager_next_scene(subghz->scene_manager, SubGhzSceneStart); } else { scene_manager_set_scene_state( - subghz->scene_manager, SubGhzSceneShowError, SubghzCustomEventManagerSet); + subghz->scene_manager, SubGhzSceneShowError, SubGhzCustomEventManagerSet); string_set( subghz->error_str, "No SD card or\ndatabase found.\nSome app function\nmay be reduced."); |