Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ClusterM/flipperzero-firmware.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSkorpionm <85568270+Skorpionm@users.noreply.github.com>2021-10-10 17:35:10 +0300
committerGitHub <noreply@github.com>2021-10-10 17:35:10 +0300
commit4418e73b261969858f493402a30798f589e9df4f (patch)
tree45bd89b132bc178ed7cb3e304807adbf60f6915e /applications/subghz/scenes
parent5dbfe3d90afaad41d86ab4e6e402031b290d0c2e (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')
-rw-r--r--applications/subghz/scenes/subghz_scene_config.h1
-rw-r--r--applications/subghz/scenes/subghz_scene_delete.c4
-rw-r--r--applications/subghz/scenes/subghz_scene_frequency_analyzer.c30
-rw-r--r--applications/subghz/scenes/subghz_scene_receiver.c4
-rw-r--r--applications/subghz/scenes/subghz_scene_receiver_config.c8
-rw-r--r--applications/subghz/scenes/subghz_scene_receiver_info.c4
-rw-r--r--applications/subghz/scenes/subghz_scene_set_type.c16
-rw-r--r--applications/subghz/scenes/subghz_scene_start.c12
-rw-r--r--applications/subghz/scenes/subghz_scene_transmitter.c4
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);