diff options
author | Skorpionm <85568270+Skorpionm@users.noreply.github.com> | 2021-10-10 17:35:10 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-10 17:35:10 +0300 |
commit | 4418e73b261969858f493402a30798f589e9df4f (patch) | |
tree | 45bd89b132bc178ed7cb3e304807adbf60f6915e /applications/subghz/scenes | |
parent | 5dbfe3d90afaad41d86ab4e6e402031b290d0c2e (diff) |
[FL-1912, FL-1939] Sub-GHz frequency analyzer and add new protocol (#746)
* ToolBox: add manchester-decoder and manchester-encoder
* SubGhz: add new FM config cc1101
* Subghz: add protocol Kia
* SubGhz: fix receiving the last packet Nero Radio
* SubGhz: app protocol CAME Twin (TW2EE/TW4EE)
* SubGhz: add protocol CAME Atomo (AT03EV/ AT04EV)
* F7: sync with F6
* SubGhz: add frequency analyzer
* SubGhz: remove space from file name
* SubGhz: frequency analyzer add filter and fix view
* [FL-1939] GubGhz: Frequency analyzer redesign
* SubGhz: fix incorrect subghz api call sequence in frequency analyzer worker
Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
Diffstat (limited to 'applications/subghz/scenes')
9 files changed, 76 insertions, 7 deletions
diff --git a/applications/subghz/scenes/subghz_scene_config.h b/applications/subghz/scenes/subghz_scene_config.h index 7958764d..eca3cc35 100644 --- a/applications/subghz/scenes/subghz_scene_config.h +++ b/applications/subghz/scenes/subghz_scene_config.h @@ -16,3 +16,4 @@ ADD_SCENE(subghz, test_static, TestStatic) ADD_SCENE(subghz, test_carrier, TestCarrier) ADD_SCENE(subghz, test_packet, TestPacket) ADD_SCENE(subghz, set_type, SetType) +ADD_SCENE(subghz, frequency_analyzer, FrequencyAnalyzer)
\ No newline at end of file diff --git a/applications/subghz/scenes/subghz_scene_delete.c b/applications/subghz/scenes/subghz_scene_delete.c index e97fd989..94782e88 100644 --- a/applications/subghz/scenes/subghz_scene_delete.c +++ b/applications/subghz/scenes/subghz_scene_delete.c @@ -28,7 +28,9 @@ void subghz_scene_delete_on_enter(void* context) { if(subghz->txrx->preset == FuriHalSubGhzPresetOok650Async || subghz->txrx->preset == FuriHalSubGhzPresetOok270Async) { snprintf(buffer_str, sizeof(buffer_str), "AM"); - } else if(subghz->txrx->preset == FuriHalSubGhzPreset2FSKAsync) { + } else if( + subghz->txrx->preset == FuriHalSubGhzPreset2FSKDev238Async || + subghz->txrx->preset == FuriHalSubGhzPreset2FSKDev476Async) { snprintf(buffer_str, sizeof(buffer_str), "FM"); } else { furi_crash(NULL); diff --git a/applications/subghz/scenes/subghz_scene_frequency_analyzer.c b/applications/subghz/scenes/subghz_scene_frequency_analyzer.c new file mode 100644 index 00000000..b67494f0 --- /dev/null +++ b/applications/subghz/scenes/subghz_scene_frequency_analyzer.c @@ -0,0 +1,30 @@ +#include "../subghz_i.h" +#include "../views/subghz_frequency_analyzer.h" + +void subghz_scene_frequency_analyzer_callback(SubghzFrequencyAnalyzerEvent event, void* context) { + furi_assert(context); + SubGhz* subghz = context; + view_dispatcher_send_custom_event(subghz->view_dispatcher, event); +} + +void subghz_scene_frequency_analyzer_on_enter(void* context) { + SubGhz* subghz = context; + subghz_frequency_analyzer_set_callback( + subghz->subghz_frequency_analyzer, subghz_scene_frequency_analyzer_callback, subghz); + view_dispatcher_switch_to_view(subghz->view_dispatcher, SubGhzViewFrequencyAnalyzer); +} + +bool subghz_scene_frequency_analyzer_on_event(void* context, SceneManagerEvent event) { + SubGhz* subghz = context; + if(event.type == SceneManagerEventTypeCustom) { + if(event.event == SubghzFrequencyAnalyzerEventOnlyRx) { + scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowOnlyRx); + return true; + } + } + return false; +} + +void subghz_scene_frequency_analyzer_on_exit(void* context) { + // SubGhz* subghz = context; +} diff --git a/applications/subghz/scenes/subghz_scene_receiver.c b/applications/subghz/scenes/subghz_scene_receiver.c index f2d66e6b..fe29c0cf 100644 --- a/applications/subghz/scenes/subghz_scene_receiver.c +++ b/applications/subghz/scenes/subghz_scene_receiver.c @@ -17,7 +17,9 @@ static void subghz_scene_receiver_update_statusbar(void* context) { if(subghz->txrx->preset == FuriHalSubGhzPresetOok650Async || subghz->txrx->preset == FuriHalSubGhzPresetOok270Async) { snprintf(preset_str, sizeof(preset_str), "AM"); - } else if(subghz->txrx->preset == FuriHalSubGhzPreset2FSKAsync) { + } else if( + subghz->txrx->preset == FuriHalSubGhzPreset2FSKDev238Async || + subghz->txrx->preset == FuriHalSubGhzPreset2FSKDev476Async) { snprintf(preset_str, sizeof(preset_str), "FM"); } else { furi_crash(NULL); diff --git a/applications/subghz/scenes/subghz_scene_receiver_config.c b/applications/subghz/scenes/subghz_scene_receiver_config.c index 9586c8f3..3991a999 100644 --- a/applications/subghz/scenes/subghz_scene_receiver_config.c +++ b/applications/subghz/scenes/subghz_scene_receiver_config.c @@ -1,15 +1,17 @@ #include "../subghz_i.h" -#define PRESET_COUNT 3 +#define PRESET_COUNT 4 const char* const preset_text[PRESET_COUNT] = { "AM270", "AM650", - "FM", + "FM238", + "FM476", }; const uint32_t preset_value[PRESET_COUNT] = { FuriHalSubGhzPresetOok270Async, /** OOK, bandwidth 270kHz, asynchronous */ FuriHalSubGhzPresetOok650Async, /** OOK, bandwidth 650kHz, asynchronous */ - FuriHalSubGhzPreset2FSKAsync, /** FM, asynchronous */ + FuriHalSubGhzPreset2FSKDev238Async, /** FM, deviation 2.380371 kHz, asynchronous */ + FuriHalSubGhzPreset2FSKDev476Async, /** FM, deviation 4.760742 kHz, asynchronous */ }; #define HOPPING_COUNT 2 diff --git a/applications/subghz/scenes/subghz_scene_receiver_info.c b/applications/subghz/scenes/subghz_scene_receiver_info.c index f3a75e54..6b33a686 100644 --- a/applications/subghz/scenes/subghz_scene_receiver_info.c +++ b/applications/subghz/scenes/subghz_scene_receiver_info.c @@ -57,7 +57,9 @@ void subghz_scene_receiver_info_on_enter(void* context) { if(subghz->txrx->preset == FuriHalSubGhzPresetOok650Async || subghz->txrx->preset == FuriHalSubGhzPresetOok270Async) { snprintf(buffer_str, sizeof(buffer_str), "AM"); - } else if(subghz->txrx->preset == FuriHalSubGhzPreset2FSKAsync) { + } else if( + subghz->txrx->preset == FuriHalSubGhzPreset2FSKDev238Async || + subghz->txrx->preset == FuriHalSubGhzPreset2FSKDev476Async) { snprintf(buffer_str, sizeof(buffer_str), "FM"); } else { furi_crash(NULL); diff --git a/applications/subghz/scenes/subghz_scene_set_type.c b/applications/subghz/scenes/subghz_scene_set_type.c index 4ec34e23..331b9dc2 100644 --- a/applications/subghz/scenes/subghz_scene_set_type.c +++ b/applications/subghz/scenes/subghz_scene_set_type.c @@ -7,6 +7,7 @@ enum SubmenuIndex { SubmenuIndexNiceFlo24bit, SubmenuIndexCAME12bit, SubmenuIndexCAME24bit, + SubmenuIndexCAMETwee, SubmenuIndexNeroSketch, SubmenuIndexNeroRadio, SubmenuIndexGateTX, @@ -62,6 +63,12 @@ void subghz_scene_set_type_on_enter(void* context) { SubmenuIndexCAME24bit, subghz_scene_set_type_submenu_callback, subghz); + submenu_add_item( + subghz->submenu, + "CAME TWEE", + SubmenuIndexCAMETwee, + subghz_scene_set_type_submenu_callback, + subghz); // submenu_add_item( // subghz->submenu, "Nero Sketch", SubmenuIndexNeroSketch, subghz_scene_set_type_submenu_callback, subghz); // submenu_add_item( @@ -132,6 +139,15 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) { generated_protocol = true; } break; + case SubmenuIndexCAMETwee: + if(subghz_scene_set_type_submenu_to_find_protocol(subghz, "CAME TWEE")) { + subghz->txrx->protocol_result->code_last_count_bit = 54; + key = (key & 0x0FFFFFF0); + subghz->txrx->protocol_result->code_last_found = 0x003FFF7200000000 | + (key ^ 0xE0E0E0EE); + generated_protocol = true; + } + break; // case SubmenuIndexNeroSketch: // /* code */ // break; diff --git a/applications/subghz/scenes/subghz_scene_start.c b/applications/subghz/scenes/subghz_scene_start.c index b3713873..c131a0a8 100644 --- a/applications/subghz/scenes/subghz_scene_start.c +++ b/applications/subghz/scenes/subghz_scene_start.c @@ -5,6 +5,7 @@ enum SubmenuIndex { SubmenuIndexSaved, SubmenuIndexTest, SubmenuIndexAddManualy, + SubmenuIndexFrequencyAnalyzer, }; void subghz_scene_start_submenu_callback(void* context, uint32_t index) { @@ -28,6 +29,12 @@ void subghz_scene_start_on_enter(void* context) { subghz_scene_start_submenu_callback, subghz); submenu_add_item( + subghz->submenu, + "Frequency Analyzer", + SubmenuIndexFrequencyAnalyzer, + subghz_scene_start_submenu_callback, + subghz); + submenu_add_item( subghz->submenu, "Test", SubmenuIndexTest, subghz_scene_start_submenu_callback, subghz); submenu_set_selected_item( @@ -55,6 +62,11 @@ bool subghz_scene_start_on_event(void* context, SceneManagerEvent event) { subghz->scene_manager, SubGhzSceneStart, SubmenuIndexAddManualy); scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSetType); return true; + } else if(event.event == SubmenuIndexFrequencyAnalyzer) { + scene_manager_set_scene_state( + subghz->scene_manager, SubGhzSceneStart, SubmenuIndexFrequencyAnalyzer); + scene_manager_next_scene(subghz->scene_manager, SubGhzSceneFrequencyAnalyzer); + return true; } else if(event.event == SubmenuIndexTest) { scene_manager_set_scene_state( subghz->scene_manager, SubGhzSceneStart, SubmenuIndexTest); diff --git a/applications/subghz/scenes/subghz_scene_transmitter.c b/applications/subghz/scenes/subghz_scene_transmitter.c index 85c61240..4aa5f87f 100644 --- a/applications/subghz/scenes/subghz_scene_transmitter.c +++ b/applications/subghz/scenes/subghz_scene_transmitter.c @@ -36,7 +36,9 @@ static void subghz_scene_transmitter_update_data_show(void* context) { if(subghz->txrx->preset == FuriHalSubGhzPresetOok650Async || subghz->txrx->preset == FuriHalSubGhzPresetOok270Async) { snprintf(preset_str, sizeof(preset_str), "AM"); - } else if(subghz->txrx->preset == FuriHalSubGhzPreset2FSKAsync) { + } else if( + subghz->txrx->preset == FuriHalSubGhzPreset2FSKDev238Async || + subghz->txrx->preset == FuriHalSubGhzPreset2FSKDev476Async) { snprintf(preset_str, sizeof(preset_str), "FM"); } else { furi_crash(NULL); |