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>2022-07-26 17:16:59 +0300
committerGitHub <noreply@github.com>2022-07-26 17:16:59 +0300
commitec19c11dbe4a81147947cc3a8dd2d182374ed67a (patch)
tree860fb311a9f2ed87971b0fd81b316bf150288113
parented7db336c1ce537ee86af5df6b9512299e323db8 (diff)
[FL-2669] SubGhz: add support for loading custom presets (#1398)
* SubGhz: load custom -preset * SubGhz: fix error prt=0 * SubGhz: load custom preset * SubGhz: code refactoring to support custom preset * SubGhz: add custom presert refactoring * SubGhz: fix alloc history alloc preset * SubGhz: fix error load file * SubGhz: fix start custom preset * SubGhz: fix delete custom preset * SubGhz: add description Custom_preset_data for CC1101 * SubGhz: debug logging and buffer size rounding Co-authored-by: あく <alleteam@gmail.com> Co-authored-by: Aleksandr Kutuzov <aku@plooks.com>
-rw-r--r--applications/subghz/helpers/subghz_types.h13
-rw-r--r--applications/subghz/scenes/subghz_scene_need_saving.c8
-rw-r--r--applications/subghz/scenes/subghz_scene_read_raw.c16
-rw-r--r--applications/subghz/scenes/subghz_scene_receiver.c22
-rw-r--r--applications/subghz/scenes/subghz_scene_receiver_config.c64
-rw-r--r--applications/subghz/scenes/subghz_scene_receiver_info.c21
-rw-r--r--applications/subghz/scenes/subghz_scene_set_type.c86
-rw-r--r--applications/subghz/subghz.c9
-rw-r--r--applications/subghz/subghz_history.c30
-rw-r--r--applications/subghz/subghz_history.h13
-rw-r--r--applications/subghz/subghz_i.c91
-rw-r--r--applications/subghz/subghz_i.h15
-rw-r--r--applications/subghz/subghz_setting.c202
-rw-r--r--applications/subghz/subghz_setting.h22
-rw-r--r--assets/resources/subghz/assets/setting_user27
-rw-r--r--firmware/targets/f7/furi_hal/furi_hal_subghz.c53
-rw-r--r--firmware/targets/furi_hal_include/furi_hal_subghz.h11
-rw-r--r--lib/subghz/blocks/generic.c57
-rw-r--r--lib/subghz/blocks/generic.h16
-rw-r--r--lib/subghz/protocols/base.c6
-rw-r--r--lib/subghz/protocols/base.h6
-rw-r--r--lib/subghz/protocols/came.c5
-rw-r--r--lib/subghz/protocols/came.h6
-rw-r--r--lib/subghz/protocols/came_atomo.c5
-rw-r--r--lib/subghz/protocols/came_atomo.h6
-rw-r--r--lib/subghz/protocols/came_twee.c5
-rw-r--r--lib/subghz/protocols/came_twee.h6
-rw-r--r--lib/subghz/protocols/chamberlain_code.c5
-rw-r--r--lib/subghz/protocols/chamberlain_code.h6
-rw-r--r--lib/subghz/protocols/faac_slh.c5
-rw-r--r--lib/subghz/protocols/faac_slh.h6
-rw-r--r--lib/subghz/protocols/gate_tx.c5
-rw-r--r--lib/subghz/protocols/gate_tx.h6
-rw-r--r--lib/subghz/protocols/holtek.c5
-rw-r--r--lib/subghz/protocols/holtek.h6
-rw-r--r--lib/subghz/protocols/hormann.c5
-rw-r--r--lib/subghz/protocols/hormann.h6
-rw-r--r--lib/subghz/protocols/ido.c5
-rw-r--r--lib/subghz/protocols/ido.h6
-rw-r--r--lib/subghz/protocols/keeloq.c12
-rw-r--r--lib/subghz/protocols/keeloq.h12
-rw-r--r--lib/subghz/protocols/kia.c5
-rw-r--r--lib/subghz/protocols/kia.h6
-rw-r--r--lib/subghz/protocols/linear.c5
-rw-r--r--lib/subghz/protocols/linear.h6
-rw-r--r--lib/subghz/protocols/megacode.c5
-rw-r--r--lib/subghz/protocols/megacode.h6
-rw-r--r--lib/subghz/protocols/nero_radio.c5
-rw-r--r--lib/subghz/protocols/nero_radio.h6
-rw-r--r--lib/subghz/protocols/nero_sketch.c5
-rw-r--r--lib/subghz/protocols/nero_sketch.h6
-rw-r--r--lib/subghz/protocols/nice_flo.c5
-rw-r--r--lib/subghz/protocols/nice_flo.h6
-rw-r--r--lib/subghz/protocols/nice_flor_s.c5
-rw-r--r--lib/subghz/protocols/nice_flor_s.h6
-rw-r--r--lib/subghz/protocols/power_smart.c5
-rw-r--r--lib/subghz/protocols/power_smart.h6
-rw-r--r--lib/subghz/protocols/princeton.c6
-rw-r--r--lib/subghz/protocols/princeton.h6
-rw-r--r--lib/subghz/protocols/raw.c24
-rw-r--r--lib/subghz/protocols/raw.h6
-rw-r--r--lib/subghz/protocols/scher_khan.c5
-rw-r--r--lib/subghz/protocols/scher_khan.h6
-rw-r--r--lib/subghz/protocols/secplus_v1.c5
-rw-r--r--lib/subghz/protocols/secplus_v1.h6
-rw-r--r--lib/subghz/protocols/secplus_v2.c12
-rw-r--r--lib/subghz/protocols/secplus_v2.h12
-rw-r--r--lib/subghz/protocols/somfy_keytis.c6
-rw-r--r--lib/subghz/protocols/somfy_keytis.h6
-rw-r--r--lib/subghz/protocols/somfy_telis.c5
-rw-r--r--lib/subghz/protocols/somfy_telis.h6
-rw-r--r--lib/subghz/protocols/star_line.c6
-rw-r--r--lib/subghz/protocols/star_line.h6
-rw-r--r--lib/subghz/subghz_worker.c5
-rw-r--r--lib/subghz/types.h8
75 files changed, 681 insertions, 454 deletions
diff --git a/applications/subghz/helpers/subghz_types.h b/applications/subghz/helpers/subghz_types.h
index 8d2dcf17..1b9fe816 100644
--- a/applications/subghz/helpers/subghz_types.h
+++ b/applications/subghz/helpers/subghz_types.h
@@ -1,5 +1,9 @@
#pragma once
+#include "m-string.h"
+#include <furi.h>
+#include <furi_hal.h>
+
/** SubGhzNotification state */
typedef enum {
SubGhzNotificationStateStarting,
@@ -67,3 +71,12 @@ typedef enum {
SubGhzViewIdTestCarrier,
SubGhzViewIdTestPacket,
} SubGhzViewId;
+
+struct SubGhzPesetDefinition {
+ string_t name;
+ uint32_t frequency;
+ uint8_t* data;
+ size_t data_size;
+};
+
+typedef struct SubGhzPesetDefinition SubGhzPesetDefinition;
diff --git a/applications/subghz/scenes/subghz_scene_need_saving.c b/applications/subghz/scenes/subghz_scene_need_saving.c
index ae76fbb1..eb70223a 100644
--- a/applications/subghz/scenes/subghz_scene_need_saving.c
+++ b/applications/subghz/scenes/subghz_scene_need_saving.c
@@ -48,8 +48,12 @@ bool subghz_scene_need_saving_on_event(void* context, SceneManagerEvent event) {
} else if(event.event == SubGhzCustomEventSceneExit) {
if(subghz->txrx->rx_key_state == SubGhzRxKeyStateExit) {
subghz->txrx->rx_key_state = SubGhzRxKeyStateIDLE;
- subghz->txrx->frequency = subghz_setting_get_default_frequency(subghz->setting);
- subghz->txrx->preset = FuriHalSubGhzPresetOok650Async;
+ subghz_preset_init(
+ subghz,
+ "AM650",
+ subghz_setting_get_default_frequency(subghz->setting),
+ NULL,
+ 0);
scene_manager_search_and_switch_to_previous_scene(
subghz->scene_manager, SubGhzSceneStart);
} else {
diff --git a/applications/subghz/scenes/subghz_scene_read_raw.c b/applications/subghz/scenes/subghz_scene_read_raw.c
index 3552d044..38b73e07 100644
--- a/applications/subghz/scenes/subghz_scene_read_raw.c
+++ b/applications/subghz/scenes/subghz_scene_read_raw.c
@@ -131,8 +131,12 @@ bool subghz_scene_read_raw_on_event(void* context, SceneManagerEvent event) {
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneNeedSaving);
} else {
//Restore default setting
- subghz->txrx->frequency = subghz_setting_get_default_frequency(subghz->setting);
- subghz->txrx->preset = FuriHalSubGhzPresetOok650Async;
+ subghz_preset_init(
+ subghz,
+ "AM650",
+ subghz_setting_get_default_frequency(subghz->setting),
+ NULL,
+ 0);
if(!scene_manager_search_and_switch_to_previous_scene(
subghz->scene_manager, SubGhzSceneSaved)) {
if(!scene_manager_search_and_switch_to_previous_scene(
@@ -268,13 +272,15 @@ bool subghz_scene_read_raw_on_event(void* context, SceneManagerEvent event) {
if(subghz_protocol_raw_save_to_file_init(
(SubGhzProtocolDecoderRAW*)subghz->txrx->decoder_result,
RAW_FILE_NAME,
- subghz->txrx->frequency,
subghz->txrx->preset)) {
DOLPHIN_DEED(DolphinDeedSubGhzRawRec);
if((subghz->txrx->txrx_state == SubGhzTxRxStateIDLE) ||
(subghz->txrx->txrx_state == SubGhzTxRxStateSleep)) {
- subghz_begin(subghz, subghz->txrx->preset);
- subghz_rx(subghz, subghz->txrx->frequency);
+ subghz_begin(
+ subghz,
+ subghz_setting_get_preset_data_by_name(
+ subghz->setting, string_get_cstr(subghz->txrx->preset->name)));
+ subghz_rx(subghz, subghz->txrx->preset->frequency);
}
subghz->state_notifications = SubGhzNotificationStateRx;
subghz->txrx->rx_key_state = SubGhzRxKeyStateAddKey;
diff --git a/applications/subghz/scenes/subghz_scene_receiver.c b/applications/subghz/scenes/subghz_scene_receiver.c
index 55302b01..7c1f016d 100644
--- a/applications/subghz/scenes/subghz_scene_receiver.c
+++ b/applications/subghz/scenes/subghz_scene_receiver.c
@@ -75,8 +75,7 @@ static void subghz_scene_add_to_history_callback(
string_t str_buff;
string_init(str_buff);
- if(subghz_history_add_to_history(
- subghz->txrx->history, decoder_base, subghz->txrx->frequency, subghz->txrx->preset)) {
+ if(subghz_history_add_to_history(subghz->txrx->history, decoder_base, subghz->txrx->preset)) {
string_reset(str_buff);
subghz->state_notifications = SubGhzNotificationStateRxDone;
@@ -103,8 +102,8 @@ void subghz_scene_receiver_on_enter(void* context) {
string_init(str_buff);
if(subghz->txrx->rx_key_state == SubGhzRxKeyStateIDLE) {
- subghz->txrx->frequency = subghz_setting_get_default_frequency(subghz->setting);
- subghz->txrx->preset = FuriHalSubGhzPresetOok650Async;
+ subghz_preset_init(
+ subghz, "AM650", subghz_setting_get_default_frequency(subghz->setting), NULL, 0);
subghz_history_reset(subghz->txrx->history);
subghz->txrx->rx_key_state = SubGhzRxKeyStateStart;
}
@@ -135,8 +134,11 @@ void subghz_scene_receiver_on_enter(void* context) {
};
if((subghz->txrx->txrx_state == SubGhzTxRxStateIDLE) ||
(subghz->txrx->txrx_state == SubGhzTxRxStateSleep)) {
- subghz_begin(subghz, subghz->txrx->preset);
- subghz_rx(subghz, subghz->txrx->frequency);
+ subghz_begin(
+ subghz,
+ subghz_setting_get_preset_data_by_name(
+ subghz->setting, string_get_cstr(subghz->txrx->preset->name)));
+ subghz_rx(subghz, subghz->txrx->preset->frequency);
}
subghz_view_receiver_set_idx_menu(subghz->subghz_receiver, subghz->txrx->idx_menu_chosen);
@@ -164,8 +166,12 @@ bool subghz_scene_receiver_on_event(void* context, SceneManagerEvent event) {
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneNeedSaving);
} else {
subghz->txrx->rx_key_state = SubGhzRxKeyStateIDLE;
- subghz->txrx->frequency = subghz_setting_get_default_frequency(subghz->setting);
- subghz->txrx->preset = FuriHalSubGhzPresetOok650Async;
+ subghz_preset_init(
+ subghz,
+ "AM650",
+ subghz_setting_get_default_frequency(subghz->setting),
+ NULL,
+ 0);
scene_manager_search_and_switch_to_previous_scene(
subghz->scene_manager, SubGhzSceneStart);
}
diff --git a/applications/subghz/scenes/subghz_scene_receiver_config.c b/applications/subghz/scenes/subghz_scene_receiver_config.c
index cf31c1e9..590b51d1 100644
--- a/applications/subghz/scenes/subghz_scene_receiver_config.c
+++ b/applications/subghz/scenes/subghz_scene_receiver_config.c
@@ -7,20 +7,6 @@ enum SubGhzSettingIndex {
SubGhzSettingIndexLock,
};
-#define PRESET_COUNT 4
-const char* const preset_text[PRESET_COUNT] = {
- "AM270",
- "AM650",
- "FM238",
- "FM476",
-};
-const uint32_t preset_value[PRESET_COUNT] = {
- FuriHalSubGhzPresetOok270Async, /** OOK, bandwidth 270kHz, asynchronous */
- FuriHalSubGhzPresetOok650Async, /** OOK, bandwidth 650kHz, asynchronous */
- FuriHalSubGhzPreset2FSKDev238Async, /** FM, deviation 2.380371 kHz, asynchronous */
- FuriHalSubGhzPreset2FSKDev476Async, /** FM, deviation 4.760742 kHz, asynchronous */
-};
-
#define HOPPING_COUNT 2
const char* const hopping_text[HOPPING_COUNT] = {
"OFF",
@@ -31,32 +17,31 @@ const uint32_t hopping_value[HOPPING_COUNT] = {
SubGhzHopperStateRunnig,
};
-uint8_t subghz_scene_receiver_config_uint32_value_index(
- const uint32_t value,
- const uint32_t values[],
- uint8_t values_count) {
- int64_t last_value = INT64_MIN;
+uint8_t subghz_scene_receiver_config_next_frequency(const uint32_t value, void* context) {
+ furi_assert(context);
+ SubGhz* subghz = context;
uint8_t index = 0;
- for(uint8_t i = 0; i < values_count; i++) {
- if((value >= last_value) && (value <= values[i])) {
+ for(uint8_t i = 0; i < subghz_setting_get_frequency_count(subghz->setting); i++) {
+ if(value == subghz_setting_get_frequency(subghz->setting, i)) {
index = i;
break;
+ } else {
+ index = subghz_setting_get_frequency_default_index(subghz->setting);
}
- last_value = values[i];
}
return index;
}
-uint8_t subghz_scene_receiver_config_next_frequency(const uint32_t value, void* context) {
+uint8_t subghz_scene_receiver_config_next_preset(const char* preset_name, void* context) {
furi_assert(context);
SubGhz* subghz = context;
uint8_t index = 0;
- for(uint8_t i = 0; i < subghz_setting_get_frequency_count(subghz->setting); i++) {
- if(value == subghz_setting_get_frequency(subghz->setting, i)) {
+ for(uint8_t i = 0; i < subghz_setting_get_preset_count(subghz->setting); i++) {
+ if(!strcmp(subghz_setting_get_preset_name(subghz->setting, i), preset_name)) {
index = i;
break;
} else {
- index = subghz_setting_get_frequency_default_index(subghz->setting);
+ // index = subghz_setting_get_frequency_default_index(subghz->setting);
}
}
return index;
@@ -94,7 +79,7 @@ static void subghz_scene_receiver_config_set_frequency(VariableItem* item) {
subghz_setting_get_frequency(subghz->setting, index) / 1000000,
(subghz_setting_get_frequency(subghz->setting, index) % 1000000) / 10000);
variable_item_set_current_value_text(item, text_buf);
- subghz->txrx->frequency = subghz_setting_get_frequency(subghz->setting, index);
+ subghz->txrx->preset->frequency = subghz_setting_get_frequency(subghz->setting, index);
} else {
variable_item_set_current_value_index(
item, subghz_setting_get_frequency_default_index(subghz->setting));
@@ -104,9 +89,14 @@ static void subghz_scene_receiver_config_set_frequency(VariableItem* item) {
static void subghz_scene_receiver_config_set_preset(VariableItem* item) {
SubGhz* subghz = variable_item_get_context(item);
uint8_t index = variable_item_get_current_value_index(item);
-
- variable_item_set_current_value_text(item, preset_text[index]);
- subghz->txrx->preset = preset_value[index];
+ variable_item_set_current_value_text(
+ item, subghz_setting_get_preset_name(subghz->setting, index));
+ subghz_preset_init(
+ subghz,
+ subghz_setting_get_preset_name(subghz->setting, index),
+ subghz->txrx->preset->frequency,
+ subghz_setting_get_preset_data(subghz->setting, index),
+ subghz_setting_get_preset_data_size(subghz->setting, index));
}
static void subghz_scene_receiver_config_set_hopping_runing(VariableItem* item) {
@@ -125,7 +115,7 @@ static void subghz_scene_receiver_config_set_hopping_runing(VariableItem* item)
(VariableItem*)scene_manager_get_scene_state(
subghz->scene_manager, SubGhzSceneReceiverConfig),
text_buf);
- subghz->txrx->frequency = subghz_setting_get_default_frequency(subghz->setting);
+ subghz->txrx->preset->frequency = subghz_setting_get_default_frequency(subghz->setting);
variable_item_set_current_value_index(
(VariableItem*)scene_manager_get_scene_state(
subghz->scene_manager, SubGhzSceneReceiverConfig),
@@ -164,7 +154,8 @@ void subghz_scene_receiver_config_on_enter(void* context) {
subghz_setting_get_frequency_count(subghz->setting),
subghz_scene_receiver_config_set_frequency,
subghz);
- value_index = subghz_scene_receiver_config_next_frequency(subghz->txrx->frequency, subghz);
+ value_index =
+ subghz_scene_receiver_config_next_frequency(subghz->txrx->preset->frequency, subghz);
scene_manager_set_scene_state(
subghz->scene_manager, SubGhzSceneReceiverConfig, (uint32_t)item);
variable_item_set_current_value_index(item, value_index);
@@ -193,13 +184,14 @@ void subghz_scene_receiver_config_on_enter(void* context) {
item = variable_item_list_add(
subghz->variable_item_list,
"Modulation:",
- PRESET_COUNT,
+ subghz_setting_get_preset_count(subghz->setting),
subghz_scene_receiver_config_set_preset,
subghz);
- value_index = subghz_scene_receiver_config_uint32_value_index(
- subghz->txrx->preset, preset_value, PRESET_COUNT);
+ value_index = subghz_scene_receiver_config_next_preset(
+ string_get_cstr(subghz->txrx->preset->name), subghz);
variable_item_set_current_value_index(item, value_index);
- variable_item_set_current_value_text(item, preset_text[value_index]);
+ variable_item_set_current_value_text(
+ item, subghz_setting_get_preset_name(subghz->setting, value_index));
if(scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneReadRAW) !=
SubGhzCustomEventManagerSet) {
diff --git a/applications/subghz/scenes/subghz_scene_receiver_info.c b/applications/subghz/scenes/subghz_scene_receiver_info.c
index 31471184..40051eee 100644
--- a/applications/subghz/scenes/subghz_scene_receiver_info.c
+++ b/applications/subghz/scenes/subghz_scene_receiver_info.c
@@ -27,10 +27,16 @@ static bool subghz_scene_receiver_info_update_parser(void* context) {
subghz_protocol_decoder_base_deserialize(
subghz->txrx->decoder_result,
subghz_history_get_raw_data(subghz->txrx->history, subghz->txrx->idx_menu_chosen));
- subghz->txrx->frequency =
- subghz_history_get_frequency(subghz->txrx->history, subghz->txrx->idx_menu_chosen);
- subghz->txrx->preset =
- subghz_history_get_preset(subghz->txrx->history, subghz->txrx->idx_menu_chosen);
+
+ SubGhzPesetDefinition* preset =
+ subghz_history_get_presset(subghz->txrx->history, subghz->txrx->idx_menu_chosen);
+ subghz_preset_init(
+ subghz,
+ string_get_cstr(preset->name),
+ preset->frequency,
+ preset->data,
+ preset->data_size);
+
return true;
}
return false;
@@ -137,8 +143,11 @@ bool subghz_scene_receiver_info_on_event(void* context, SceneManagerEvent event)
subghz_tx_stop(subghz);
}
if(subghz->txrx->txrx_state == SubGhzTxRxStateIDLE) {
- subghz_begin(subghz, subghz->txrx->preset);
- subghz_rx(subghz, subghz->txrx->frequency);
+ subghz_begin(
+ subghz,
+ subghz_setting_get_preset_data_by_name(
+ subghz->setting, string_get_cstr(subghz->txrx->preset->name)));
+ subghz_rx(subghz, subghz->txrx->preset->frequency);
}
if(subghz->txrx->hopper_state == SubGhzHopperStatePause) {
subghz->txrx->hopper_state = SubGhzHopperStateRunnig;
diff --git a/applications/subghz/scenes/subghz_scene_set_type.c b/applications/subghz/scenes/subghz_scene_set_type.c
index 55db8011..1a359542 100644
--- a/applications/subghz/scenes/subghz_scene_set_type.c
+++ b/applications/subghz/scenes/subghz_scene_set_type.c
@@ -16,12 +16,13 @@ bool subghz_scene_set_type_submenu_gen_data_protocol(
uint64_t key,
uint32_t bit,
uint32_t frequency,
- FuriHalSubGhzPreset preset) {
+ const char* preset_name) {
furi_assert(context);
SubGhz* subghz = context;
bool res = false;
+ subghz_preset_init(subghz, preset_name, frequency, NULL, 0);
subghz->txrx->decoder_result =
subghz_receiver_search_decoder_base_by_name(subghz->txrx->receiver, protocol_name);
@@ -35,7 +36,7 @@ bool subghz_scene_set_type_submenu_gen_data_protocol(
Stream* fff_data_stream = flipper_format_get_raw_stream(subghz->txrx->fff_data);
stream_clean(fff_data_stream);
if(!subghz_protocol_decoder_base_serialize(
- subghz->txrx->decoder_result, subghz->txrx->fff_data, frequency, preset)) {
+ subghz->txrx->decoder_result, subghz->txrx->fff_data, subghz->txrx->preset)) {
FURI_LOG_E(TAG, "Unable to serialize");
break;
}
@@ -177,12 +178,7 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) {
case SubmenuIndexPricenton:
key = (key & 0x00FFFFF0) | 0x4; //btn 0x1, 0x2, 0x4, 0x8
if(subghz_scene_set_type_submenu_gen_data_protocol(
- subghz,
- SUBGHZ_PROTOCOL_PRINCETON_NAME,
- key,
- 24,
- 433920000,
- FuriHalSubGhzPresetOok650Async)) {
+ subghz, SUBGHZ_PROTOCOL_PRINCETON_NAME, key, 24, 433920000, "AM650")) {
uint32_t te = 400;
flipper_format_update_uint32(subghz->txrx->fff_data, "TE", (uint32_t*)&te, 1);
generated_protocol = true;
@@ -191,60 +187,35 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) {
case SubmenuIndexNiceFlo12bit:
key = (key & 0x0000FFF0) | 0x1; //btn 0x1, 0x2, 0x4
if(subghz_scene_set_type_submenu_gen_data_protocol(
- subghz,
- SUBGHZ_PROTOCOL_NICE_FLO_NAME,
- key,
- 12,
- 433920000,
- FuriHalSubGhzPresetOok650Async)) {
+ subghz, SUBGHZ_PROTOCOL_NICE_FLO_NAME, key, 12, 433920000, "AM650")) {
generated_protocol = true;
}
break;
case SubmenuIndexNiceFlo24bit:
key = (key & 0x00FFFFF0) | 0x4; //btn 0x1, 0x2, 0x4, 0x8
if(subghz_scene_set_type_submenu_gen_data_protocol(
- subghz,
- SUBGHZ_PROTOCOL_NICE_FLO_NAME,
- key,
- 24,
- 433920000,
- FuriHalSubGhzPresetOok650Async)) {
+ subghz, SUBGHZ_PROTOCOL_NICE_FLO_NAME, key, 24, 433920000, "AM650")) {
generated_protocol = true;
}
break;
case SubmenuIndexCAME12bit:
key = (key & 0x0000FFF0) | 0x1; //btn 0x1, 0x2, 0x4
if(subghz_scene_set_type_submenu_gen_data_protocol(
- subghz,
- SUBGHZ_PROTOCOL_CAME_NAME,
- key,
- 12,
- 433920000,
- FuriHalSubGhzPresetOok650Async)) {
+ subghz, SUBGHZ_PROTOCOL_CAME_NAME, key, 12, 433920000, "AM650")) {
generated_protocol = true;
}
break;
case SubmenuIndexCAME24bit:
key = (key & 0x00FFFFF0) | 0x4; //btn 0x1, 0x2, 0x4, 0x8
if(subghz_scene_set_type_submenu_gen_data_protocol(
- subghz,
- SUBGHZ_PROTOCOL_CAME_NAME,
- key,
- 24,
- 433920000,
- FuriHalSubGhzPresetOok650Async)) {
+ subghz, SUBGHZ_PROTOCOL_CAME_NAME, key, 24, 433920000, "AM650")) {
generated_protocol = true;
}
break;
case SubmenuIndexLinear_300_00:
key = (key & 0x3FF);
if(subghz_scene_set_type_submenu_gen_data_protocol(
- subghz,
- SUBGHZ_PROTOCOL_LINEAR_NAME,
- key,
- 10,
- 300000000,
- FuriHalSubGhzPresetOok650Async)) {
+ subghz, SUBGHZ_PROTOCOL_LINEAR_NAME, key, 10, 300000000, "AM650")) {
generated_protocol = true;
}
break;
@@ -252,12 +223,7 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) {
key = (key & 0x0FFFFFF0);
key = 0x003FFF7200000000 | (key ^ 0xE0E0E0EE);
if(subghz_scene_set_type_submenu_gen_data_protocol(
- subghz,
- SUBGHZ_PROTOCOL_CAME_TWEE_NAME,
- key,
- 54,
- 433920000,
- FuriHalSubGhzPresetOok650Async)) {
+ subghz, SUBGHZ_PROTOCOL_CAME_TWEE_NAME, key, 54, 433920000, "AM650")) {
generated_protocol = true;
}
break;
@@ -271,18 +237,15 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) {
key = (key & 0x00F0FF00) | 0xF << 16 | 0x40; //btn 0xF, 0xC, 0xA, 0x6 (?)
uint64_t rev_key = subghz_protocol_blocks_reverse_key(key, 24);
if(subghz_scene_set_type_submenu_gen_data_protocol(
- subghz,
- SUBGHZ_PROTOCOL_GATE_TX_NAME,
- rev_key,
- 24,
- 433920000,
- FuriHalSubGhzPresetOok650Async)) {
+ subghz, SUBGHZ_PROTOCOL_GATE_TX_NAME, rev_key, 24, 433920000, "AM650")) {
generated_protocol = true;
}
break;
case SubmenuIndexDoorHan_433_92:
subghz->txrx->transmitter = subghz_transmitter_alloc_init(
subghz->txrx->environment, SUBGHZ_PROTOCOL_KEELOQ_NAME);
+ subghz_preset_init(
+ subghz, "AM650", subghz_setting_get_default_frequency(subghz->setting), NULL, 0);
if(subghz->txrx->transmitter) {
subghz_protocol_keeloq_create_data(
subghz_transmitter_get_protocol_instance(subghz->txrx->transmitter),
@@ -291,8 +254,7 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) {
0x2,
0x0003,
"DoorHan",
- subghz_setting_get_default_frequency(subghz->setting),
- FuriHalSubGhzPresetOok650Async);
+ subghz->txrx->preset);
generated_protocol = true;
} else {
generated_protocol = false;
@@ -307,6 +269,7 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) {
case SubmenuIndexDoorHan_315_00:
subghz->txrx->transmitter = subghz_transmitter_alloc_init(
subghz->txrx->environment, SUBGHZ_PROTOCOL_KEELOQ_NAME);
+ subghz_preset_init(subghz, "AM650", 315000000, NULL, 0);
if(subghz->txrx->transmitter) {
subghz_protocol_keeloq_create_data(
subghz_transmitter_get_protocol_instance(subghz->txrx->transmitter),
@@ -315,8 +278,7 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) {
0x2,
0x0003,
"DoorHan",
- 315000000,
- FuriHalSubGhzPresetOok650Async);
+ subghz->txrx->preset);
generated_protocol = true;
} else {
generated_protocol = false;
@@ -338,7 +300,7 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) {
(uint64_t)key << 32 | 0xE6000000,
42,
315000000,
- FuriHalSubGhzPresetOok650Async)) {
+ "AM650")) {
generated_protocol = true;
}
break;
@@ -352,13 +314,14 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) {
(uint64_t)key << 32 | 0xE6000000,
42,
390000000,
- FuriHalSubGhzPresetOok650Async)) {
+ "AM650")) {
generated_protocol = true;
}
break;
case SubmenuIndexSecPlus_v2_310_00:
subghz->txrx->transmitter = subghz_transmitter_alloc_init(
subghz->txrx->environment, SUBGHZ_PROTOCOL_SECPLUS_V2_NAME);
+ subghz_preset_init(subghz, "AM650", 310000000, NULL, 0);
if(subghz->txrx->transmitter) {
subghz_protocol_secplus_v2_create_data(
subghz_transmitter_get_protocol_instance(subghz->txrx->transmitter),
@@ -366,8 +329,7 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) {
key,
0x68,
0xE500000,
- 310000000,
- FuriHalSubGhzPresetOok650Async);
+ subghz->txrx->preset);
generated_protocol = true;
} else {
generated_protocol = false;
@@ -377,6 +339,7 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) {
case SubmenuIndexSecPlus_v2_315_00:
subghz->txrx->transmitter = subghz_transmitter_alloc_init(
subghz->txrx->environment, SUBGHZ_PROTOCOL_SECPLUS_V2_NAME);
+ subghz_preset_init(subghz, "AM650", 315000000, NULL, 0);
if(subghz->txrx->transmitter) {
subghz_protocol_secplus_v2_create_data(
subghz_transmitter_get_protocol_instance(subghz->txrx->transmitter),
@@ -384,8 +347,7 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) {
key,
0x68,
0xE500000,
- 315000000,
- FuriHalSubGhzPresetOok650Async);
+ subghz->txrx->preset);
generated_protocol = true;
} else {
generated_protocol = false;
@@ -395,6 +357,7 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) {
case SubmenuIndexSecPlus_v2_390_00:
subghz->txrx->transmitter = subghz_transmitter_alloc_init(
subghz->txrx->environment, SUBGHZ_PROTOCOL_SECPLUS_V2_NAME);
+ subghz_preset_init(subghz, "AM650", 390000000, NULL, 0);
if(subghz->txrx->transmitter) {
subghz_protocol_secplus_v2_create_data(
subghz_transmitter_get_protocol_instance(subghz->txrx->transmitter),
@@ -402,8 +365,7 @@ bool subghz_scene_set_type_on_event(void* context, SceneManagerEvent event) {
key,
0x68,
0xE500000,
- 390000000,
- FuriHalSubGhzPresetOok650Async);
+ subghz->txrx->preset);
generated_protocol = true;
} else {
generated_protocol = false;
diff --git a/applications/subghz/subghz.c b/applications/subghz/subghz.c
index 26f1bbe9..271fe041 100644
--- a/applications/subghz/subghz.c
+++ b/applications/subghz/subghz.c
@@ -199,8 +199,11 @@ SubGhz* subghz_alloc() {
//init Worker & Protocol & History & KeyBoard
subghz->lock = SubGhzLockOff;
subghz->txrx = malloc(sizeof(SubGhzTxRx));
- subghz->txrx->frequency = subghz_setting_get_default_frequency(subghz->setting);
- subghz->txrx->preset = FuriHalSubGhzPresetOok650Async;
+ subghz->txrx->preset = malloc(sizeof(SubGhzPesetDefinition));
+ string_init(subghz->txrx->preset->name);
+ subghz_preset_init(
+ subghz, "AM650", subghz_setting_get_default_frequency(subghz->setting), NULL, 0);
+
subghz->txrx->txrx_state = SubGhzTxRxStateSleep;
subghz->txrx->hopper_state = SubGhzHopperStateOFF;
subghz->txrx->rx_key_state = SubGhzRxKeyStateIDLE;
@@ -308,6 +311,8 @@ void subghz_free(SubGhz* subghz) {
subghz_worker_free(subghz->txrx->worker);
flipper_format_free(subghz->txrx->fff_data);
subghz_history_free(subghz->txrx->history);
+ string_clear(subghz->txrx->preset->name);
+ free(subghz->txrx->preset);
free(subghz->txrx);
//Error string
diff --git a/applications/subghz/subghz_history.c b/applications/subghz/subghz_history.c
index 85578b99..f234f4c7 100644
--- a/applications/subghz/subghz_history.c
+++ b/applications/subghz/subghz_history.c
@@ -12,8 +12,7 @@ typedef struct {
string_t item_str;
FlipperFormat* flipper_string;
uint8_t type;
- FuriHalSubGhzPreset preset;
- uint32_t frequency;
+ SubGhzPesetDefinition* preset;
} SubGhzHistoryItem;
ARRAY_DEF(SubGhzHistoryItemArray, SubGhzHistoryItem, M_POD_OPLIST)
@@ -46,6 +45,8 @@ void subghz_history_free(SubGhzHistory* instance) {
for
M_EACH(item, instance->history->data, SubGhzHistoryItemArray_t) {
string_clear(item->item_str);
+ string_clear(item->preset->name);
+ free(item->preset);
flipper_format_free(item->flipper_string);
item->type = 0;
}
@@ -57,21 +58,29 @@ void subghz_history_free(SubGhzHistory* instance) {
uint32_t subghz_history_get_frequency(SubGhzHistory* instance, uint16_t idx) {
furi_assert(instance);
SubGhzHistoryItem* item = SubGhzHistoryItemArray_get(instance->history->data, idx);
- return item->frequency;
+ return item->preset->frequency;
}
-FuriHalSubGhzPreset subghz_history_get_preset(SubGhzHistory* instance, uint16_t idx) {
+SubGhzPesetDefinition* subghz_history_get_presset(SubGhzHistory* instance, uint16_t idx) {
furi_assert(instance);
SubGhzHistoryItem* item = SubGhzHistoryItemArray_get(instance->history->data, idx);
return item->preset;
}
+const char* subghz_history_get_preset(SubGhzHistory* instance, uint16_t idx) {
+ furi_assert(instance);
+ SubGhzHistoryItem* item = SubGhzHistoryItemArray_get(instance->history->data, idx);
+ return string_get_cstr(item->preset->name);
+}
+
void subghz_history_reset(SubGhzHistory* instance) {
furi_assert(instance);
string_reset(instance->tmp_string);
for
M_EACH(item, instance->history->data, SubGhzHistoryItemArray_t) {
string_clear(item->item_str);
+ string_clear(item->preset->name);
+ free(item->preset);
flipper_format_free(item->flipper_string);
item->type = 0;
}
@@ -130,8 +139,7 @@ void subghz_history_get_text_item_menu(SubGhzHistory* instance, string_t output,
bool subghz_history_add_to_history(
SubGhzHistory* instance,
void* context,
- uint32_t frequency,
- FuriHalSubGhzPreset preset) {
+ SubGhzPesetDefinition* preset) {
furi_assert(instance);
furi_assert(context);
@@ -151,13 +159,17 @@ bool subghz_history_add_to_history(
string_t text;
string_init(text);
SubGhzHistoryItem* item = SubGhzHistoryItemArray_push_raw(instance->history->data);
+ item->preset = malloc(sizeof(SubGhzPesetDefinition));
item->type = decoder_base->protocol->type;
- item->frequency = frequency;
- item->preset = preset;
+ item->preset->frequency = preset->frequency;
+ string_init(item->preset->name);
+ string_set(item->preset->name, preset->name);
+ item->preset->data = preset->data;
+ item->preset->data_size = preset->data_size;
string_init(item->item_str);
item->flipper_string = flipper_format_string_alloc();
- subghz_protocol_decoder_base_serialize(decoder_base, item->flipper_string, frequency, preset);
+ subghz_protocol_decoder_base_serialize(decoder_base, item->flipper_string, preset);
do {
if(!flipper_format_rewind(item->flipper_string)) {
diff --git a/applications/subghz/subghz_history.h b/applications/subghz/subghz_history.h
index f90b01d9..0af56a40 100644
--- a/applications/subghz/subghz_history.h
+++ b/applications/subghz/subghz_history.h
@@ -5,6 +5,7 @@
#include <furi.h>
#include <furi_hal.h>
#include <lib/flipper_format/flipper_format.h>
+#include "helpers/subghz_types.h"
typedef struct SubGhzHistory SubGhzHistory;
@@ -34,13 +35,15 @@ void subghz_history_reset(SubGhzHistory* instance);
*/
uint32_t subghz_history_get_frequency(SubGhzHistory* instance, uint16_t idx);
+SubGhzPesetDefinition* subghz_history_get_presset(SubGhzHistory* instance, uint16_t idx);
+
/** Get preset to history[idx]
*
* @param instance - SubGhzHistory instance
* @param idx - record index
- * @return preset - FuriHalSubGhzPreset preset
+ * @return preset - preset name
*/
-FuriHalSubGhzPreset subghz_history_get_preset(SubGhzHistory* instance, uint16_t idx);
+const char* subghz_history_get_preset(SubGhzHistory* instance, uint16_t idx);
/** Get history index write
*
@@ -85,15 +88,13 @@ bool subghz_history_get_text_space_left(SubGhzHistory* instance, string_t output
*
* @param instance - SubGhzHistory instance
* @param context - SubGhzProtocolCommon context
- * @param frequency - frequency Hz
- * @param preset - FuriHalSubGhzPreset preset
+ * @param preset - SubGhzPesetDefinition preset
* @return bool;
*/
bool subghz_history_add_to_history(
SubGhzHistory* instance,
void* context,
- uint32_t frequency,
- FuriHalSubGhzPreset preset);
+ SubGhzPesetDefinition* preset);
/** Get SubGhzProtocolCommonLoad to load into the protocol decoder bin data
*
diff --git a/applications/subghz/subghz_i.c b/applications/subghz/subghz_i.c
index 9c8a3fc4..b8232fdb 100644
--- a/applications/subghz/subghz_i.c
+++ b/applications/subghz/subghz_i.c
@@ -1,7 +1,6 @@
#include "subghz_i.h"
#include "assets_icons.h"
-#include "m-string.h"
#include "subghz/types.h"
#include <math.h>
#include <furi.h>
@@ -19,15 +18,31 @@
#define TAG "SubGhz"
+void subghz_preset_init(
+ void* context,
+ const char* preset_name,
+ uint32_t frequency,
+ uint8_t* preset_data,
+ size_t preset_data_size) {
+ furi_assert(context);
+ SubGhz* subghz = context;
+ string_set(subghz->txrx->preset->name, preset_name);
+ subghz->txrx->preset->frequency = frequency;
+ subghz->txrx->preset->data = preset_data;
+ subghz->txrx->preset->data_size = preset_data_size;
+}
+
bool subghz_set_preset(SubGhz* subghz, const char* preset) {
if(!strcmp(preset, "FuriHalSubGhzPresetOok270Async")) {
- subghz->txrx->preset = FuriHalSubGhzPresetOok270Async;
+ string_set(subghz->txrx->preset->name, "AM270");
} else if(!strcmp(preset, "FuriHalSubGhzPresetOok650Async")) {
- subghz->txrx->preset = FuriHalSubGhzPresetOok650Async;
+ string_set(subghz->txrx->preset->name, "AM650");
} else if(!strcmp(preset, "FuriHalSubGhzPreset2FSKDev238Async")) {
- subghz->txrx->preset = FuriHalSubGhzPreset2FSKDev238Async;
+ string_set(subghz->txrx->preset->name, "FM238");
} else if(!strcmp(preset, "FuriHalSubGhzPreset2FSKDev476Async")) {
- subghz->txrx->preset = FuriHalSubGhzPreset2FSKDev476Async;
+ string_set(subghz->txrx->preset->name, "FM476");
+ } else if(!strcmp(preset, "FuriHalSubGhzPresetCustom")) {
+ string_set(subghz->txrx->preset->name, "CUSTOM");
} else {
FURI_LOG_E(TAG, "Unknown preset");
return false;
@@ -41,29 +56,19 @@ void subghz_get_frequency_modulation(SubGhz* subghz, string_t frequency, string_
string_printf(
frequency,
"%03ld.%02ld",
- subghz->txrx->frequency / 1000000 % 1000,
- subghz->txrx->frequency / 10000 % 100);
+ subghz->txrx->preset->frequency / 1000000 % 1000,
+ subghz->txrx->preset->frequency / 10000 % 100);
}
-
if(modulation != NULL) {
- if(subghz->txrx->preset == FuriHalSubGhzPresetOok650Async ||
- subghz->txrx->preset == FuriHalSubGhzPresetOok270Async) {
- string_set_str(modulation, "AM");
- } else if(
- subghz->txrx->preset == FuriHalSubGhzPreset2FSKDev238Async ||
- subghz->txrx->preset == FuriHalSubGhzPreset2FSKDev476Async) {
- string_set_str(modulation, "FM");
- } else {
- furi_crash("SubGhz: Modulation is incorrect.");
- }
+ string_printf(modulation, "%0.2s", string_get_cstr(subghz->txrx->preset->name));
}
}
-void subghz_begin(SubGhz* subghz, FuriHalSubGhzPreset preset) {
+void subghz_begin(SubGhz* subghz, uint8_t* preset_data) {
furi_assert(subghz);
furi_hal_subghz_reset();
furi_hal_subghz_idle();
- furi_hal_subghz_load_preset(preset);
+ furi_hal_subghz_load_custom_preset(preset_data);
furi_hal_gpio_init(&gpio_cc1101_g0, GpioModeInput, GpioPullNo, GpioSpeedLow);
subghz->txrx->txrx_state = SubGhzTxRxStateIDLE;
}
@@ -155,13 +160,21 @@ bool subghz_tx_start(SubGhz* subghz, FlipperFormat* flipper_format) {
if(subghz->txrx->transmitter) {
if(subghz_transmitter_deserialize(subghz->txrx->transmitter, flipper_format)) {
- if(subghz->txrx->preset) {
- subghz_begin(subghz, subghz->txrx->preset);
+ if(strcmp(string_get_cstr(subghz->txrx->preset->name), "")) {
+ subghz_begin(
+ subghz,
+ subghz_setting_get_preset_data_by_name(
+ subghz->setting, string_get_cstr(subghz->txrx->preset->name)));
} else {
- subghz_begin(subghz, FuriHalSubGhzPresetOok270Async);
+ FURI_LOG_E(
+ TAG,
+ "Unknown name preset \" %s \"",
+ string_get_cstr(subghz->txrx->preset->name));
+ subghz_begin(
+ subghz, subghz_setting_get_preset_data_by_name(subghz->setting, "AM650"));
}
- if(subghz->txrx->frequency) {
- ret = subghz_tx(subghz, subghz->txrx->frequency);
+ if(subghz->txrx->preset->frequency) {
+ ret = subghz_tx(subghz, subghz->txrx->preset->frequency);
} else {
ret = subghz_tx(subghz, 433920000);
}
@@ -270,16 +283,38 @@ bool subghz_key_load(SubGhz* subghz, const char* file_path, bool show_dialog) {
load_key_state = SubGhzLoadKeyStateOnlyRx;
break;
}
- subghz->txrx->frequency = temp_data32;
+ subghz->txrx->preset->frequency = temp_data32;
if(!flipper_format_read_string(fff_data_file, "Preset", temp_str)) {
FURI_LOG_E(TAG, "Missing Preset");
break;
}
+
if(!subghz_set_preset(subghz, string_get_cstr(temp_str))) {
break;
}
+ if(!strcmp(string_get_cstr(temp_str), "FuriHalSubGhzPresetCustom")) {
+ //Todo add Custom_preset_module
+ //delete peset if it already exists
+ subghz_setting_delete_custom_preset(
+ subghz->setting, string_get_cstr(subghz->txrx->preset->name));
+ //load custom preset from file
+ if(!subghz_setting_load_custom_preset(
+ subghz->setting, string_get_cstr(subghz->txrx->preset->name), fff_data_file)) {
+ FURI_LOG_E(TAG, "Missing Custom preset");
+ break;
+ }
+ }
+ size_t preset_index = subghz_setting_get_inx_preset_by_name(
+ subghz->setting, string_get_cstr(subghz->txrx->preset->name));
+ subghz_preset_init(
+ subghz,
+ string_get_cstr(subghz->txrx->preset->name),
+ subghz->txrx->preset->frequency,
+ subghz_setting_get_preset_data(subghz->setting, preset_index),
+ subghz_setting_get_preset_data_size(subghz->setting, preset_index));
+
if(!flipper_format_read_string(fff_data_file, "Protocol", temp_str)) {
FURI_LOG_E(TAG, "Missing Protocol");
break;
@@ -541,8 +576,8 @@ void subghz_hopper_update(SubGhz* subghz) {
};
if(subghz->txrx->txrx_state == SubGhzTxRxStateIDLE) {
subghz_receiver_reset(subghz->txrx->receiver);
- subghz->txrx->frequency = subghz_setting_get_hopper_frequency(
+ subghz->txrx->preset->frequency = subghz_setting_get_hopper_frequency(
subghz->setting, subghz->txrx->hopper_idx_frequency);
- subghz_rx(subghz, subghz->txrx->frequency);
+ subghz_rx(subghz, subghz->txrx->preset->frequency);
}
}
diff --git a/applications/subghz/subghz_i.h b/applications/subghz/subghz_i.h
index 0a4bcf0b..52c3ba59 100644
--- a/applications/subghz/subghz_i.h
+++ b/applications/subghz/subghz_i.h
@@ -11,8 +11,8 @@
#include "views/subghz_test_carrier.h"
#include "views/subghz_test_packet.h"
-#include <furi.h>
-#include <furi_hal.h>
+// #include <furi.h>
+// #include <furi_hal.h>
#include <gui/gui.h>
#include <dialogs/dialogs.h>
#include <gui/scene_manager.h>
@@ -49,8 +49,7 @@ struct SubGhzTxRx {
SubGhzProtocolDecoderBase* decoder_result;
FlipperFormat* fff_data;
- uint32_t frequency;
- FuriHalSubGhzPreset preset;
+ SubGhzPesetDefinition* preset;
SubGhzHistory* history;
uint16_t idx_menu_chosen;
SubGhzTxRxState txrx_state;
@@ -97,9 +96,15 @@ struct SubGhz {
void* rpc_ctx;
};
+void subghz_preset_init(
+ void* context,
+ const char* preset_name,
+ uint32_t frequency,
+ uint8_t* preset_data,
+ size_t preset_data_size);
bool subghz_set_preset(SubGhz* subghz, const char* preset);
void subghz_get_frequency_modulation(SubGhz* subghz, string_t frequency, string_t modulation);
-void subghz_begin(SubGhz* subghz, FuriHalSubGhzPreset preset);
+void subghz_begin(SubGhz* subghz, uint8_t* preset_data);
uint32_t subghz_rx(SubGhz* subghz, uint32_t frequency);
void subghz_rx_end(SubGhz* subghz);
void subghz_sleep(SubGhz* subghz);
diff --git a/applications/subghz/subghz_setting.c b/applications/subghz/subghz_setting.c
index 7d688105..0a662f58 100644
--- a/applications/subghz/subghz_setting.c
+++ b/applications/subghz/subghz_setting.c
@@ -3,7 +3,7 @@
#include <furi.h>
#include <m-list.h>
-#include <lib/flipper_format/flipper_format.h>
+#include "furi_hal_subghz_configs.h"
#define TAG "SubGhzSetting"
@@ -157,29 +157,89 @@ static const uint32_t subghz_hopper_frequency_list_region_jp[] = {
0,
};
+typedef struct {
+ string_t custom_preset_name;
+ uint8_t* custom_preset_data;
+ size_t custom_preset_data_size;
+} SubGhzSettingCustomPresetItem;
+
+ARRAY_DEF(SubGhzSettingCustomPresetItemArray, SubGhzSettingCustomPresetItem, M_POD_OPLIST)
+
+#define M_OPL_SubGhzSettingCustomPresetItemArray_t() \
+ ARRAY_OPLIST(SubGhzSettingCustomPresetItemArray, M_POD_OPLIST)
+
LIST_DEF(FrequencyList, uint32_t)
#define M_OPL_FrequencyList_t() LIST_OPLIST(FrequencyList)
+typedef struct {
+ SubGhzSettingCustomPresetItemArray_t data;
+} SubGhzSettingCustomPresetStruct;
+
struct SubGhzSetting {
FrequencyList_t frequencies;
FrequencyList_t hopper_frequencies;
+ SubGhzSettingCustomPresetStruct* preset;
};
SubGhzSetting* subghz_setting_alloc(void) {
SubGhzSetting* instance = malloc(sizeof(SubGhzSetting));
FrequencyList_init(instance->frequencies);
FrequencyList_init(instance->hopper_frequencies);
+ instance->preset = malloc(sizeof(SubGhzSettingCustomPresetStruct));
+ SubGhzSettingCustomPresetItemArray_init(instance->preset->data);
return instance;
}
+static void subghz_setting_preset_reset(SubGhzSetting* instance) {
+ for
+ M_EACH(item, instance->preset->data, SubGhzSettingCustomPresetItemArray_t) {
+ string_clear(item->custom_preset_name);
+ free(item->custom_preset_data);
+ }
+ SubGhzSettingCustomPresetItemArray_reset(instance->preset->data);
+}
+
void subghz_setting_free(SubGhzSetting* instance) {
furi_assert(instance);
FrequencyList_clear(instance->frequencies);
FrequencyList_clear(instance->hopper_frequencies);
+ for
+ M_EACH(item, instance->preset->data, SubGhzSettingCustomPresetItemArray_t) {
+ string_clear(item->custom_preset_name);
+ free(item->custom_preset_data);
+ }
+ SubGhzSettingCustomPresetItemArray_clear(instance->preset->data);
+ free(instance->preset);
free(instance);
}
+static void subghz_setting_load_default_preset(
+ SubGhzSetting* instance,
+ const char* preset_name,
+ const uint8_t* preset_data,
+ const uint8_t preset_pa_table[8]) {
+ furi_assert(instance);
+ furi_assert(preset_data);
+ uint32_t preset_data_count = 0;
+ SubGhzSettingCustomPresetItem* item =
+ SubGhzSettingCustomPresetItemArray_push_raw(instance->preset->data);
+
+ string_init(item->custom_preset_name);
+ string_set(item->custom_preset_name, preset_name);
+
+ while(preset_data[preset_data_count]) {
+ preset_data_count += 2;
+ }
+ preset_data_count += 2;
+ item->custom_preset_data_size = sizeof(uint8_t) * preset_data_count + sizeof(uint8_t) * 8;
+ item->custom_preset_data = malloc(item->custom_preset_data_size);
+ //load preset register
+ memcpy(&item->custom_preset_data[0], &preset_data[0], preset_data_count);
+ //load pa table
+ memcpy(&item->custom_preset_data[preset_data_count], &preset_pa_table[0], 8);
+}
+
static void subghz_setting_load_default_region(
SubGhzSetting* instance,
const uint32_t frequencies[],
@@ -188,6 +248,7 @@ static void subghz_setting_load_default_region(
FrequencyList_reset(instance->frequencies);
FrequencyList_reset(instance->hopper_frequencies);
+ subghz_setting_preset_reset(instance);
while(*frequencies) {
FrequencyList_push_back(instance->frequencies, *frequencies);
@@ -198,6 +259,27 @@ static void subghz_setting_load_default_region(
FrequencyList_push_back(instance->hopper_frequencies, *hopper_frequencies);
hopper_frequencies++;
}
+
+ subghz_setting_load_default_preset(
+ instance,
+ "AM270",
+ (uint8_t*)furi_hal_subghz_preset_ook_270khz_async_regs,
+ furi_hal_subghz_preset_ook_async_patable);
+ subghz_setting_load_default_preset(
+ instance,
+ "AM650",
+ (uint8_t*)furi_hal_subghz_preset_ook_650khz_async_regs,
+ furi_hal_subghz_preset_ook_async_patable);
+ subghz_setting_load_default_preset(
+ instance,
+ "FM238",
+ (uint8_t*)furi_hal_subghz_preset_2fsk_dev2_38khz_async_regs,
+ furi_hal_subghz_preset_2fsk_async_patable);
+ subghz_setting_load_default_preset(
+ instance,
+ "FM476",
+ (uint8_t*)furi_hal_subghz_preset_2fsk_dev47_6khz_async_regs,
+ furi_hal_subghz_preset_2fsk_async_patable);
}
void subghz_setting_load_default(SubGhzSetting* instance) {
@@ -260,7 +342,7 @@ void subghz_setting_load(SubGhzSetting* instance, const char* file_path) {
// Standard frequencies (optional)
temp_bool = true;
- flipper_format_read_bool(fff_data_file, "add_standard_frequencies", &temp_bool, 1);
+ flipper_format_read_bool(fff_data_file, "Add_standard_frequencies", &temp_bool, 1);
if(!temp_bool) {
FURI_LOG_I(TAG, "Removing standard frequencies");
FrequencyList_reset(instance->frequencies);
@@ -275,7 +357,7 @@ void subghz_setting_load(SubGhzSetting* instance, const char* file_path) {
break;
}
while(flipper_format_read_uint32(
- fff_data_file, "frequency", (uint32_t*)&temp_data32, 1)) {
+ fff_data_file, "Frequency", (uint32_t*)&temp_data32, 1)) {
if(furi_hal_subghz_is_frequency_valid(temp_data32)) {
FURI_LOG_I(TAG, "Frequency loaded %lu", temp_data32);
FrequencyList_push_back(instance->frequencies, temp_data32);
@@ -290,7 +372,7 @@ void subghz_setting_load(SubGhzSetting* instance, const char* file_path) {
break;
}
while(flipper_format_read_uint32(
- fff_data_file, "hopper_frequency", (uint32_t*)&temp_data32, 1)) {
+ fff_data_file, "Hopper_frequency", (uint32_t*)&temp_data32, 1)) {
if(furi_hal_subghz_is_frequency_valid(temp_data32)) {
FURI_LOG_I(TAG, "Hopper frequency loaded %lu", temp_data32);
FrequencyList_push_back(instance->hopper_frequencies, temp_data32);
@@ -304,7 +386,7 @@ void subghz_setting_load(SubGhzSetting* instance, const char* file_path) {
FURI_LOG_E(TAG, "Rewind error");
break;
}
- if(flipper_format_read_uint32(fff_data_file, "default_frequency", &temp_data32, 1)) {
+ if(flipper_format_read_uint32(fff_data_file, "Default_frequency", &temp_data32, 1)) {
for
M_EACH(frequency, instance->frequencies, FrequencyList_t) {
*frequency &= FREQUENCY_MASK;
@@ -313,6 +395,18 @@ void subghz_setting_load(SubGhzSetting* instance, const char* file_path) {
}
}
}
+
+ // custom preset (optional)
+ if(!flipper_format_rewind(fff_data_file)) {
+ FURI_LOG_E(TAG, "Rewind error");
+ break;
+ }
+ while(flipper_format_read_string(fff_data_file, "Custom_preset_name", temp_str)) {
+ FURI_LOG_I(TAG, "Custom preset loaded %s", string_get_cstr(temp_str));
+ subghz_setting_load_custom_preset(
+ instance, string_get_cstr(temp_str), fff_data_file);
+ }
+
} while(false);
}
@@ -337,6 +431,104 @@ size_t subghz_setting_get_hopper_frequency_count(SubGhzSetting* instance) {
return FrequencyList_size(instance->hopper_frequencies);
}
+size_t subghz_setting_get_preset_count(SubGhzSetting* instance) {
+ furi_assert(instance);
+ return SubGhzSettingCustomPresetItemArray_size(instance->preset->data);
+}
+
+const char* subghz_setting_get_preset_name(SubGhzSetting* instance, size_t idx) {
+ furi_assert(instance);
+ SubGhzSettingCustomPresetItem* item =
+ SubGhzSettingCustomPresetItemArray_get(instance->preset->data, idx);
+ return string_get_cstr(item->custom_preset_name);
+}
+
+int subghz_setting_get_inx_preset_by_name(SubGhzSetting* instance, const char* preset_name) {
+ furi_assert(instance);
+ size_t idx = 0;
+ for
+ M_EACH(item, instance->preset->data, SubGhzSettingCustomPresetItemArray_t) {
+ if(strcmp(string_get_cstr(item->custom_preset_name), preset_name) == 0) {
+ return idx;
+ }
+ idx++;
+ }
+ furi_crash("SubGhz: No name preset.");
+ return -1;
+}
+
+bool subghz_setting_load_custom_preset(
+ SubGhzSetting* instance,
+ const char* preset_name,
+ FlipperFormat* fff_data_file) {
+ furi_assert(instance);
+ furi_assert(preset_name);
+ uint32_t temp_data32;
+ SubGhzSettingCustomPresetItem* item =
+ SubGhzSettingCustomPresetItemArray_push_raw(instance->preset->data);
+ string_init(item->custom_preset_name);
+ string_set(item->custom_preset_name, preset_name);
+ do {
+ if(!flipper_format_get_value_count(fff_data_file, "Custom_preset_data", &temp_data32))
+ break;
+ if(!temp_data32 || (temp_data32 % 2)) {
+ FURI_LOG_E(TAG, "Integrity error Custom_preset_data");
+ break;
+ }
+ item->custom_preset_data_size = sizeof(uint8_t) * temp_data32;
+ item->custom_preset_data = malloc(item->custom_preset_data_size);
+ if(!flipper_format_read_hex(
+ fff_data_file,
+ "Custom_preset_data",
+ item->custom_preset_data,
+ item->custom_preset_data_size)) {
+ FURI_LOG_E(TAG, "Missing Custom_preset_data");
+ break;
+ }
+ return true;
+ } while(true);
+ return false;
+}
+
+bool subghz_setting_delete_custom_preset(SubGhzSetting* instance, const char* preset_name) {
+ furi_assert(instance);
+ furi_assert(preset_name);
+ SubGhzSettingCustomPresetItemArray_it_t it;
+ SubGhzSettingCustomPresetItemArray_it_last(it, instance->preset->data);
+ while(!SubGhzSettingCustomPresetItemArray_end_p(it)) {
+ SubGhzSettingCustomPresetItem* item = SubGhzSettingCustomPresetItemArray_ref(it);
+ if(strcmp(string_get_cstr(item->custom_preset_name), preset_name) == 0) {
+ string_clear(item->custom_preset_name);
+ free(item->custom_preset_data);
+ SubGhzSettingCustomPresetItemArray_remove(instance->preset->data, it);
+ return true;
+ }
+ SubGhzSettingCustomPresetItemArray_previous(it);
+ }
+ return false;
+}
+
+uint8_t* subghz_setting_get_preset_data(SubGhzSetting* instance, size_t idx) {
+ furi_assert(instance);
+ SubGhzSettingCustomPresetItem* item =
+ SubGhzSettingCustomPresetItemArray_get(instance->preset->data, idx);
+ return item->custom_preset_data;
+}
+
+size_t subghz_setting_get_preset_data_size(SubGhzSetting* instance, size_t idx) {
+ furi_assert(instance);
+ SubGhzSettingCustomPresetItem* item =
+ SubGhzSettingCustomPresetItemArray_get(instance->preset->data, idx);
+ return item->custom_preset_data_size;
+}
+
+uint8_t* subghz_setting_get_preset_data_by_name(SubGhzSetting* instance, const char* preset_name) {
+ furi_assert(instance);
+ SubGhzSettingCustomPresetItem* item = SubGhzSettingCustomPresetItemArray_get(
+ instance->preset->data, subghz_setting_get_inx_preset_by_name(instance, preset_name));
+ return item->custom_preset_data;
+}
+
uint32_t subghz_setting_get_frequency(SubGhzSetting* instance, size_t idx) {
furi_assert(instance);
uint32_t* ret = FrequencyList_get(instance->frequencies, idx);
diff --git a/applications/subghz/subghz_setting.h b/applications/subghz/subghz_setting.h
index 58a898c5..0590cf49 100644
--- a/applications/subghz/subghz_setting.h
+++ b/applications/subghz/subghz_setting.h
@@ -4,6 +4,9 @@
#include <math.h>
#include <furi.h>
#include <furi_hal.h>
+#include <lib/flipper_format/flipper_format.h>
+
+#define SUBGHZ_SETTING_DEFAULT_PRESET_COUNT 4
typedef struct SubGhzSetting SubGhzSetting;
@@ -17,6 +20,25 @@ size_t subghz_setting_get_frequency_count(SubGhzSetting* instance);
size_t subghz_setting_get_hopper_frequency_count(SubGhzSetting* instance);
+size_t subghz_setting_get_preset_count(SubGhzSetting* instance);
+
+const char* subghz_setting_get_preset_name(SubGhzSetting* instance, size_t idx);
+
+int subghz_setting_get_inx_preset_by_name(SubGhzSetting* instance, const char* preset_name);
+
+uint8_t* subghz_setting_get_preset_data(SubGhzSetting* instance, size_t idx);
+
+size_t subghz_setting_get_preset_data_size(SubGhzSetting* instance, size_t idx);
+
+uint8_t* subghz_setting_get_preset_data_by_name(SubGhzSetting* instance, const char* preset_name);
+
+bool subghz_setting_load_custom_preset(
+ SubGhzSetting* instance,
+ const char* preset_name,
+ FlipperFormat* fff_data_file);
+
+bool subghz_setting_delete_custom_preset(SubGhzSetting* instance, const char* preset_name);
+
uint32_t subghz_setting_get_frequency(SubGhzSetting* instance, size_t idx);
uint32_t subghz_setting_get_hopper_frequency(SubGhzSetting* instance, size_t idx);
diff --git a/assets/resources/subghz/assets/setting_user b/assets/resources/subghz/assets/setting_user
index 413dbf31..1f37a2eb 100644
--- a/assets/resources/subghz/assets/setting_user
+++ b/assets/resources/subghz/assets/setting_user
@@ -2,17 +2,28 @@ Filetype: Flipper SubGhz Setting File
Version: 1
# Add Standard frequencies for your region
-#add_standard_frequencies: true
+#Add_standard_frequencies: true
# Default Frequency: used as default for "Read" and "Read Raw"
-#default_frequency: 433920000
+#Default_frequency: 433920000
# Frequencies used for "Read", "Read Raw" and "Frequency Analyzer"
-#frequency: 300000000
-#frequency: 310000000
-#frequency: 320000000
+#Frequency: 300000000
+#Frequency: 310000000
+#Frequency: 320000000
# Frequencies used for hopping mode (keep this list small or flipper will miss signal)
-#hopper_frequency: 300000000
-#hopper_frequency: 310000000
-#hopper_frequency: 310000000
+#Hopper_frequency: 300000000
+#Hopper_frequency: 310000000
+#Hopper_frequency: 310000000
+
+# Custom preset
+# format for CC1101 "Custom_preset_data:" XX YY XX YY .. 00 00 ZZ ZZ ZZ ZZ ZZ ZZ ZZ ZZ, where: XX-register, YY - register data, 00 00 - end load register, ZZ - 8 byte Pa table register
+
+#Custom_preset_name: AM_1
+#Custom_preset_module: CC1101
+#Custom_preset_data: 02 0D 03 07 08 32 0B 06 14 00 13 00 12 30 11 32 10 17 18 18 19 18 1D 91 1C 00 1B 07 20 FB 22 11 21 B6 00 00 00 C0 00 00 00 00 00 00
+
+#Custom_preset_name: AM_2
+#Custom_preset_module: CC1101
+#Custom_preset_data: 02 0D 03 07 08 32 0B 06 14 00 13 00 12 30 11 32 10 17 18 18 19 18 1D 91 1C 00 1B 07 20 FB 22 11 21 B6 00 00 00 C0 00 00 00 00 00 00
diff --git a/firmware/targets/f7/furi_hal/furi_hal_subghz.c b/firmware/targets/f7/furi_hal/furi_hal_subghz.c
index 5ad0d578..650f8ac3 100644
--- a/firmware/targets/f7/furi_hal/furi_hal_subghz.c
+++ b/firmware/targets/f7/furi_hal/furi_hal_subghz.c
@@ -100,22 +100,24 @@ void furi_hal_subghz_dump_state() {
void furi_hal_subghz_load_preset(FuriHalSubGhzPreset preset) {
if(preset == FuriHalSubGhzPresetOok650Async) {
- furi_hal_subghz_load_registers(furi_hal_subghz_preset_ook_650khz_async_regs);
+ furi_hal_subghz_load_registers((uint8_t*)furi_hal_subghz_preset_ook_650khz_async_regs);
furi_hal_subghz_load_patable(furi_hal_subghz_preset_ook_async_patable);
} else if(preset == FuriHalSubGhzPresetOok270Async) {
- furi_hal_subghz_load_registers(furi_hal_subghz_preset_ook_270khz_async_regs);
+ furi_hal_subghz_load_registers((uint8_t*)furi_hal_subghz_preset_ook_270khz_async_regs);
furi_hal_subghz_load_patable(furi_hal_subghz_preset_ook_async_patable);
} else if(preset == FuriHalSubGhzPreset2FSKDev238Async) {
- furi_hal_subghz_load_registers(furi_hal_subghz_preset_2fsk_dev2_38khz_async_regs);
+ furi_hal_subghz_load_registers(
+ (uint8_t*)furi_hal_subghz_preset_2fsk_dev2_38khz_async_regs);
furi_hal_subghz_load_patable(furi_hal_subghz_preset_2fsk_async_patable);
} else if(preset == FuriHalSubGhzPreset2FSKDev476Async) {
- furi_hal_subghz_load_registers(furi_hal_subghz_preset_2fsk_dev47_6khz_async_regs);
+ furi_hal_subghz_load_registers(
+ (uint8_t*)furi_hal_subghz_preset_2fsk_dev47_6khz_async_regs);
furi_hal_subghz_load_patable(furi_hal_subghz_preset_2fsk_async_patable);
} else if(preset == FuriHalSubGhzPresetMSK99_97KbAsync) {
- furi_hal_subghz_load_registers(furi_hal_subghz_preset_msk_99_97kb_async_regs);
+ furi_hal_subghz_load_registers((uint8_t*)furi_hal_subghz_preset_msk_99_97kb_async_regs);
furi_hal_subghz_load_patable(furi_hal_subghz_preset_msk_async_patable);
} else if(preset == FuriHalSubGhzPresetGFSK9_99KbAsync) {
- furi_hal_subghz_load_registers(furi_hal_subghz_preset_gfsk_9_99kb_async_regs);
+ furi_hal_subghz_load_registers((uint8_t*)furi_hal_subghz_preset_gfsk_9_99kb_async_regs);
furi_hal_subghz_load_patable(furi_hal_subghz_preset_gfsk_async_patable);
} else {
furi_crash("SubGhz: Missing config.");
@@ -123,13 +125,44 @@ void furi_hal_subghz_load_preset(FuriHalSubGhzPreset preset) {
furi_hal_subghz.preset = preset;
}
-void furi_hal_subghz_load_registers(const uint8_t data[][2]) {
+void furi_hal_subghz_load_custom_preset(uint8_t* preset_data) {
+ //load config
furi_hal_spi_acquire(&furi_hal_spi_bus_handle_subghz);
cc1101_reset(&furi_hal_spi_bus_handle_subghz);
uint32_t i = 0;
- while(data[i][0]) {
- cc1101_write_reg(&furi_hal_spi_bus_handle_subghz, data[i][0], data[i][1]);
- i++;
+ uint8_t pa[8] = {0};
+ while(preset_data[i]) {
+ cc1101_write_reg(&furi_hal_spi_bus_handle_subghz, preset_data[i], preset_data[i + 1]);
+ i += 2;
+ }
+ furi_hal_spi_release(&furi_hal_spi_bus_handle_subghz);
+
+ //load pa table
+ memcpy(&pa[0], &preset_data[i + 2], 8);
+ furi_hal_subghz_load_patable(pa);
+ furi_hal_subghz.preset = FuriHalSubGhzPresetCustom;
+
+ //show debug
+ if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) {
+ i = 0;
+ FURI_LOG_D(TAG, "Loading custom preset");
+ while(preset_data[i]) {
+ FURI_LOG_D(TAG, "Reg[%lu]: %02X=%02X", i, preset_data[i], preset_data[i + 1]);
+ i += 2;
+ }
+ for(uint8_t y = i; y < i + 10; y++) {
+ FURI_LOG_D(TAG, "PA[%lu]: %02X", y, preset_data[y]);
+ }
+ }
+}
+
+void furi_hal_subghz_load_registers(uint8_t* data) {
+ furi_hal_spi_acquire(&furi_hal_spi_bus_handle_subghz);
+ cc1101_reset(&furi_hal_spi_bus_handle_subghz);
+ uint32_t i = 0;
+ while(data[i]) {
+ cc1101_write_reg(&furi_hal_spi_bus_handle_subghz, data[i], data[i + 1]);
+ i += 2;
}
furi_hal_spi_release(&furi_hal_spi_bus_handle_subghz);
}
diff --git a/firmware/targets/furi_hal_include/furi_hal_subghz.h b/firmware/targets/furi_hal_include/furi_hal_subghz.h
index 4c5ad07f..b6d132ac 100644
--- a/firmware/targets/furi_hal_include/furi_hal_subghz.h
+++ b/firmware/targets/furi_hal_include/furi_hal_subghz.h
@@ -22,7 +22,8 @@ typedef enum {
FuriHalSubGhzPreset2FSKDev238Async, /**< FM, deviation 2.380371 kHz, asynchronous */
FuriHalSubGhzPreset2FSKDev476Async, /**< FM, deviation 47.60742 kHz, asynchronous */
FuriHalSubGhzPresetMSK99_97KbAsync, /**< MSK, deviation 47.60742 kHz, 99.97Kb/s, asynchronous */
- FuriHalSubGhzPresetGFSK9_99KbAsync /**< GFSK, deviation 19.042969 kHz, 9.996Kb/s, asynchronous */
+ FuriHalSubGhzPresetGFSK9_99KbAsync, /**< GFSK, deviation 19.042969 kHz, 9.996Kb/s, asynchronous */
+ FuriHalSubGhzPresetCustom, /**Custom Preset*/
} FuriHalSubGhzPreset;
/** Switchable Radio Paths */
@@ -74,11 +75,17 @@ void furi_hal_subghz_dump_state();
*/
void furi_hal_subghz_load_preset(FuriHalSubGhzPreset preset);
+/** Load custom registers from preset
+ *
+ * @param preset_data registers to load
+ */
+void furi_hal_subghz_load_custom_preset(uint8_t* preset_data);
+
/** Load registers
*
* @param data Registers data
*/
-void furi_hal_subghz_load_registers(const uint8_t data[][2]);
+void furi_hal_subghz_load_registers(uint8_t* data);
/** Load PATABLE
*
diff --git a/lib/subghz/blocks/generic.c b/lib/subghz/blocks/generic.c
index 811a5fa7..187c30e6 100644
--- a/lib/subghz/blocks/generic.c
+++ b/lib/subghz/blocks/generic.c
@@ -1,39 +1,29 @@
#include "generic.h"
-#include "../types.h"
#include <lib/toolbox/stream/stream.h>
#include <lib/flipper_format/flipper_format_i.h>
#define TAG "SubGhzBlockGeneric"
-bool subghz_block_generic_get_preset_name(FuriHalSubGhzPreset preset, string_t preset_str) {
- const char* preset_name;
- switch(preset) {
- case FuriHalSubGhzPresetOok270Async:
- preset_name = "FuriHalSubGhzPresetOok270Async";
- break;
- case FuriHalSubGhzPresetOok650Async:
- preset_name = "FuriHalSubGhzPresetOok650Async";
- break;
- case FuriHalSubGhzPreset2FSKDev238Async:
- preset_name = "FuriHalSubGhzPreset2FSKDev238Async";
- break;
- case FuriHalSubGhzPreset2FSKDev476Async:
- preset_name = "FuriHalSubGhzPreset2FSKDev476Async";
- break;
- default:
- FURI_LOG_E(TAG, "Unknown preset");
- return false;
- break;
+void subghz_block_generic_get_preset_name(const char* preset_name, string_t preset_str) {
+ const char* preset_name_temp;
+ if(!strcmp(preset_name, "AM270")) {
+ preset_name_temp = "FuriHalSubGhzPresetOok270Async";
+ } else if(!strcmp(preset_name, "AM650")) {
+ preset_name_temp = "FuriHalSubGhzPresetOok650Async";
+ } else if(!strcmp(preset_name, "FM238")) {
+ preset_name_temp = "FuriHalSubGhzPreset2FSKDev238Async";
+ } else if(!strcmp(preset_name, "FM476")) {
+ preset_name_temp = "FuriHalSubGhzPreset2FSKDev476Async";
+ } else {
+ preset_name_temp = "FuriHalSubGhzPresetCustom";
}
- string_set(preset_str, preset_name);
- return true;
+ string_set(preset_str, preset_name_temp);
}
bool subghz_block_generic_serialize(
SubGhzBlockGeneric* instance,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset) {
+ SubGhzPesetDefinition* preset) {
furi_assert(instance);
bool res = false;
string_t temp_str;
@@ -46,17 +36,28 @@ bool subghz_block_generic_serialize(
break;
}
- if(!flipper_format_write_uint32(flipper_format, "Frequency", &frequency, 1)) {
+ if(!flipper_format_write_uint32(flipper_format, "Frequency", &preset->frequency, 1)) {
FURI_LOG_E(TAG, "Unable to add Frequency");
break;
}
- if(!subghz_block_generic_get_preset_name(preset, temp_str)) {
- break;
- }
+
+ subghz_block_generic_get_preset_name(string_get_cstr(preset->name), temp_str);
if(!flipper_format_write_string_cstr(flipper_format, "Preset", string_get_cstr(temp_str))) {
FURI_LOG_E(TAG, "Unable to add Preset");
break;
}
+ if(!strcmp(string_get_cstr(temp_str), "FuriHalSubGhzPresetCustom")) {
+ if(!flipper_format_write_string_cstr(
+ flipper_format, "Custom_preset_module", "CC1101")) {
+ FURI_LOG_E(TAG, "Unable to add Custom_preset_module");
+ break;
+ }
+ if(!flipper_format_write_hex(
+ flipper_format, "Custom_preset_data", preset->data, preset->data_size)) {
+ FURI_LOG_E(TAG, "Unable to add Custom_preset_data");
+ break;
+ }
+ }
if(!flipper_format_write_string_cstr(flipper_format, "Protocol", instance->protocol_name)) {
FURI_LOG_E(TAG, "Unable to add Protocol");
break;
diff --git a/lib/subghz/blocks/generic.h b/lib/subghz/blocks/generic.h
index 1a7bca83..e1256ea4 100644
--- a/lib/subghz/blocks/generic.h
+++ b/lib/subghz/blocks/generic.h
@@ -7,6 +7,7 @@
#include <lib/flipper_format/flipper_format.h>
#include "furi.h"
#include "furi_hal.h"
+#include "../types.h"
typedef struct SubGhzBlockGeneric SubGhzBlockGeneric;
@@ -20,26 +21,23 @@ struct SubGhzBlockGeneric {
};
/**
- * Get modulation name.
- * @param preset modulation,FuriHalSubGhzPreset
- * @param preset_str Output modulation name
- * @return true On success
+ * Get name preset.
+ * @param preset_name name preset
+ * @param preset_str Output name preset
*/
-bool subghz_block_generic_get_preset_name(FuriHalSubGhzPreset preset, string_t preset_str);
+void subghz_block_generic_get_preset_name(const char* preset_name, string_t preset_str);
/**
* Serialize data SubGhzBlockGeneric.
* @param instance Pointer to a SubGhzBlockGeneric instance
* @param flipper_format Pointer to a FlipperFormat instance
- * @param frequency The frequency at which the signal was received, Hz
- * @param preset The modulation on which the signal was received, FuriHalSubGhzPreset
+ * @param preset The modulation on which the signal was received, SubGhzPesetDefinition
* @return true On success
*/
bool subghz_block_generic_serialize(
SubGhzBlockGeneric* instance,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset);
+ SubGhzPesetDefinition* preset);
/**
* Deserialize data SubGhzBlockGeneric.
diff --git a/lib/subghz/protocols/base.c b/lib/subghz/protocols/base.c
index 90096c2b..32c64cce 100644
--- a/lib/subghz/protocols/base.c
+++ b/lib/subghz/protocols/base.c
@@ -26,14 +26,12 @@ bool subghz_protocol_decoder_base_get_string(
bool subghz_protocol_decoder_base_serialize(
SubGhzProtocolDecoderBase* decoder_base,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset) {
+ SubGhzPesetDefinition* preset) {
bool status = false;
if(decoder_base->protocol && decoder_base->protocol->decoder &&
decoder_base->protocol->decoder->serialize) {
- status = decoder_base->protocol->decoder->serialize(
- decoder_base, flipper_format, frequency, preset);
+ status = decoder_base->protocol->decoder->serialize(decoder_base, flipper_format, preset);
}
return status;
diff --git a/lib/subghz/protocols/base.h b/lib/subghz/protocols/base.h
index 19d9c414..ad237bbe 100644
--- a/lib/subghz/protocols/base.h
+++ b/lib/subghz/protocols/base.h
@@ -43,15 +43,13 @@ bool subghz_protocol_decoder_base_get_string(
* Serialize data SubGhzProtocolDecoderBase.
* @param decoder_base Pointer to a SubGhzProtocolDecoderBase instance
* @param flipper_format Pointer to a FlipperFormat instance
- * @param frequency The frequency at which the signal was received, Hz
- * @param preset The modulation on which the signal was received, FuriHalSubGhzPreset
+ * @param preset The modulation on which the signal was received, SubGhzPesetDefinition
* @return true On success
*/
bool subghz_protocol_decoder_base_serialize(
SubGhzProtocolDecoderBase* decoder_base,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset);
+ SubGhzPesetDefinition* preset);
/**
* Deserialize data SubGhzProtocolDecoderBase.
diff --git a/lib/subghz/protocols/came.c b/lib/subghz/protocols/came.c
index 8817b380..1d2045ca 100644
--- a/lib/subghz/protocols/came.c
+++ b/lib/subghz/protocols/came.c
@@ -284,11 +284,10 @@ uint8_t subghz_protocol_decoder_came_get_hash_data(void* context) {
bool subghz_protocol_decoder_came_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset) {
+ SubGhzPesetDefinition* preset) {
furi_assert(context);
SubGhzProtocolDecoderCame* instance = context;
- return subghz_block_generic_serialize(&instance->generic, flipper_format, frequency, preset);
+ return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_came_deserialize(void* context, FlipperFormat* flipper_format) {
diff --git a/lib/subghz/protocols/came.h b/lib/subghz/protocols/came.h
index 2fd1b718..abd3044b 100644
--- a/lib/subghz/protocols/came.h
+++ b/lib/subghz/protocols/came.h
@@ -83,15 +83,13 @@ uint8_t subghz_protocol_decoder_came_get_hash_data(void* context);
* Serialize data SubGhzProtocolDecoderCame.
* @param context Pointer to a SubGhzProtocolDecoderCame instance
* @param flipper_format Pointer to a FlipperFormat instance
- * @param frequency The frequency at which the signal was received, Hz
- * @param preset The modulation on which the signal was received, FuriHalSubGhzPreset
+ * @param preset The modulation on which the signal was received, SubGhzPesetDefinition
* @return true On success
*/
bool subghz_protocol_decoder_came_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset);
+ SubGhzPesetDefinition* preset);
/**
* Deserialize data SubGhzProtocolDecoderCame.
diff --git a/lib/subghz/protocols/came_atomo.c b/lib/subghz/protocols/came_atomo.c
index ad98f83f..2178b4d1 100644
--- a/lib/subghz/protocols/came_atomo.c
+++ b/lib/subghz/protocols/came_atomo.c
@@ -301,11 +301,10 @@ uint8_t subghz_protocol_decoder_came_atomo_get_hash_data(void* context) {
bool subghz_protocol_decoder_came_atomo_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset) {
+ SubGhzPesetDefinition* preset) {
furi_assert(context);
SubGhzProtocolDecoderCameAtomo* instance = context;
- return subghz_block_generic_serialize(&instance->generic, flipper_format, frequency, preset);
+ return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_came_atomo_deserialize(void* context, FlipperFormat* flipper_format) {
diff --git a/lib/subghz/protocols/came_atomo.h b/lib/subghz/protocols/came_atomo.h
index d1c856e1..eaba74c8 100644
--- a/lib/subghz/protocols/came_atomo.h
+++ b/lib/subghz/protocols/came_atomo.h
@@ -48,15 +48,13 @@ uint8_t subghz_protocol_decoder_came_atomo_get_hash_data(void* context);
* Serialize data SubGhzProtocolDecoderCameAtomo.
* @param context Pointer to a SubGhzProtocolDecoderCameAtomo instance
* @param flipper_format Pointer to a FlipperFormat instance
- * @param frequency The frequency at which the signal was received, Hz
- * @param preset The modulation on which the signal was received, FuriHalSubGhzPreset
+ * @param preset The modulation on which the signal was received, SubGhzPesetDefinition
* @return true On success
*/
bool subghz_protocol_decoder_came_atomo_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset);
+ SubGhzPesetDefinition* preset);
/**
* Deserialize data SubGhzProtocolDecoderCameAtomo.
diff --git a/lib/subghz/protocols/came_twee.c b/lib/subghz/protocols/came_twee.c
index fa538c54..7310d6f9 100644
--- a/lib/subghz/protocols/came_twee.c
+++ b/lib/subghz/protocols/came_twee.c
@@ -418,11 +418,10 @@ uint8_t subghz_protocol_decoder_came_twee_get_hash_data(void* context) {
bool subghz_protocol_decoder_came_twee_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset) {
+ SubGhzPesetDefinition* preset) {
furi_assert(context);
SubGhzProtocolDecoderCameTwee* instance = context;
- return subghz_block_generic_serialize(&instance->generic, flipper_format, frequency, preset);
+ return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_came_twee_deserialize(void* context, FlipperFormat* flipper_format) {
diff --git a/lib/subghz/protocols/came_twee.h b/lib/subghz/protocols/came_twee.h
index 225f3c04..66a89423 100644
--- a/lib/subghz/protocols/came_twee.h
+++ b/lib/subghz/protocols/came_twee.h
@@ -83,15 +83,13 @@ uint8_t subghz_protocol_decoder_came_twee_get_hash_data(void* context);
* Serialize data SubGhzProtocolDecoderCameTwee.
* @param context Pointer to a SubGhzProtocolDecoderCameTwee instance
* @param flipper_format Pointer to a FlipperFormat instance
- * @param frequency The frequency at which the signal was received, Hz
- * @param preset The modulation on which the signal was received, FuriHalSubGhzPreset
+ * @param preset The modulation on which the signal was received, SubGhzPesetDefinition
* @return true On success
*/
bool subghz_protocol_decoder_came_twee_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset);
+ SubGhzPesetDefinition* preset);
/**
* Deserialize data SubGhzProtocolDecoderCameTwee.
diff --git a/lib/subghz/protocols/chamberlain_code.c b/lib/subghz/protocols/chamberlain_code.c
index 23ac8cc8..40958421 100644
--- a/lib/subghz/protocols/chamberlain_code.c
+++ b/lib/subghz/protocols/chamberlain_code.c
@@ -423,11 +423,10 @@ uint8_t subghz_protocol_decoder_chamb_code_get_hash_data(void* context) {
bool subghz_protocol_decoder_chamb_code_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset) {
+ SubGhzPesetDefinition* preset) {
furi_assert(context);
SubGhzProtocolDecoderChamb_Code* instance = context;
- return subghz_block_generic_serialize(&instance->generic, flipper_format, frequency, preset);
+ return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_chamb_code_deserialize(void* context, FlipperFormat* flipper_format) {
diff --git a/lib/subghz/protocols/chamberlain_code.h b/lib/subghz/protocols/chamberlain_code.h
index f6ef48fd..e25e54c2 100644
--- a/lib/subghz/protocols/chamberlain_code.h
+++ b/lib/subghz/protocols/chamberlain_code.h
@@ -83,15 +83,13 @@ uint8_t subghz_protocol_decoder_chamb_code_get_hash_data(void* context);
* Serialize data SubGhzProtocolDecoderChamb_Code.
* @param context Pointer to a SubGhzProtocolDecoderChamb_Code instance
* @param flipper_format Pointer to a FlipperFormat instance
- * @param frequency The frequency at which the signal was received, Hz
- * @param preset The modulation on which the signal was received, FuriHalSubGhzPreset
+ * @param preset The modulation on which the signal was received, SubGhzPesetDefinition
* @return true On success
*/
bool subghz_protocol_decoder_chamb_code_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset);
+ SubGhzPesetDefinition* preset);
/**
* Deserialize data SubGhzProtocolDecoderChamb_Code.
diff --git a/lib/subghz/protocols/faac_slh.c b/lib/subghz/protocols/faac_slh.c
index d5761831..caa8e5eb 100644
--- a/lib/subghz/protocols/faac_slh.c
+++ b/lib/subghz/protocols/faac_slh.c
@@ -183,11 +183,10 @@ uint8_t subghz_protocol_decoder_faac_slh_get_hash_data(void* context) {
bool subghz_protocol_decoder_faac_slh_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset) {
+ SubGhzPesetDefinition* preset) {
furi_assert(context);
SubGhzProtocolDecoderFaacSLH* instance = context;
- return subghz_block_generic_serialize(&instance->generic, flipper_format, frequency, preset);
+ return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_faac_slh_deserialize(void* context, FlipperFormat* flipper_format) {
diff --git a/lib/subghz/protocols/faac_slh.h b/lib/subghz/protocols/faac_slh.h
index 2575a5ff..f1ad1452 100644
--- a/lib/subghz/protocols/faac_slh.h
+++ b/lib/subghz/protocols/faac_slh.h
@@ -49,15 +49,13 @@ uint8_t subghz_protocol_decoder_faac_slh_get_hash_data(void* context);
* Serialize data SubGhzProtocolDecoderFaacSLH.
* @param context Pointer to a SubGhzProtocolDecoderFaacSLH instance
* @param flipper_format Pointer to a FlipperFormat instance
- * @param frequency The frequency at which the signal was received, Hz
- * @param preset The modulation on which the signal was received, FuriHalSubGhzPreset
+ * @param preset The modulation on which the signal was received, SubGhzPesetDefinition
* @return true On success
*/
bool subghz_protocol_decoder_faac_slh_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset);
+ SubGhzPesetDefinition* preset);
/**
* Deserialize data SubGhzProtocolDecoderFaacSLH.
diff --git a/lib/subghz/protocols/gate_tx.c b/lib/subghz/protocols/gate_tx.c
index 5f124c37..a172eb3c 100644
--- a/lib/subghz/protocols/gate_tx.c
+++ b/lib/subghz/protocols/gate_tx.c
@@ -289,11 +289,10 @@ uint8_t subghz_protocol_decoder_gate_tx_get_hash_data(void* context) {
bool subghz_protocol_decoder_gate_tx_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset) {
+ SubGhzPesetDefinition* preset) {
furi_assert(context);
SubGhzProtocolDecoderGateTx* instance = context;
- return subghz_block_generic_serialize(&instance->generic, flipper_format, frequency, preset);
+ return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_gate_tx_deserialize(void* context, FlipperFormat* flipper_format) {
diff --git a/lib/subghz/protocols/gate_tx.h b/lib/subghz/protocols/gate_tx.h
index 4b5f4d00..f296a27e 100644
--- a/lib/subghz/protocols/gate_tx.h
+++ b/lib/subghz/protocols/gate_tx.h
@@ -83,15 +83,13 @@ uint8_t subghz_protocol_decoder_gate_tx_get_hash_data(void* context);
* Serialize data SubGhzProtocolDecoderGateTx.
* @param context Pointer to a SubGhzProtocolDecoderGateTx instance
* @param flipper_format Pointer to a FlipperFormat instance
- * @param frequency The frequency at which the signal was received, Hz
- * @param preset The modulation on which the signal was received, FuriHalSubGhzPreset
+ * @param preset The modulation on which the signal was received, SubGhzPesetDefinition
* @return true On success
*/
bool subghz_protocol_decoder_gate_tx_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset);
+ SubGhzPesetDefinition* preset);
/**
* Deserialize data SubGhzProtocolDecoderGateTx.
diff --git a/lib/subghz/protocols/holtek.c b/lib/subghz/protocols/holtek.c
index 174d023e..c24bdf6f 100644
--- a/lib/subghz/protocols/holtek.c
+++ b/lib/subghz/protocols/holtek.c
@@ -322,11 +322,10 @@ uint8_t subghz_protocol_decoder_holtek_get_hash_data(void* context) {
bool subghz_protocol_decoder_holtek_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset) {
+ SubGhzPesetDefinition* preset) {
furi_assert(context);
SubGhzProtocolDecoderHoltek* instance = context;
- return subghz_block_generic_serialize(&instance->generic, flipper_format, frequency, preset);
+ return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_holtek_deserialize(void* context, FlipperFormat* flipper_format) {
diff --git a/lib/subghz/protocols/holtek.h b/lib/subghz/protocols/holtek.h
index 0110fdd3..cc962dcc 100644
--- a/lib/subghz/protocols/holtek.h
+++ b/lib/subghz/protocols/holtek.h
@@ -83,15 +83,13 @@ uint8_t subghz_protocol_decoder_holtek_get_hash_data(void* context);
* Serialize data SubGhzProtocolDecoderHoltek.
* @param context Pointer to a SubGhzProtocolDecoderHoltek instance
* @param flipper_format Pointer to a FlipperFormat instance
- * @param frequency The frequency at which the signal was received, Hz
- * @param preset The modulation on which the signal was received, FuriHalSubGhzPreset
+ * @param preset The modulation on which the signal was received, SubGhzPesetDefinition
* @return true On success
*/
bool subghz_protocol_decoder_holtek_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset);
+ SubGhzPesetDefinition* preset);
/**
* Deserialize data SubGhzProtocolDecoderHoltek.
diff --git a/lib/subghz/protocols/hormann.c b/lib/subghz/protocols/hormann.c
index 20ff50fc..696aaf61 100644
--- a/lib/subghz/protocols/hormann.c
+++ b/lib/subghz/protocols/hormann.c
@@ -310,11 +310,10 @@ uint8_t subghz_protocol_decoder_hormann_get_hash_data(void* context) {
bool subghz_protocol_decoder_hormann_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset) {
+ SubGhzPesetDefinition* preset) {
furi_assert(context);
SubGhzProtocolDecoderHormann* instance = context;
- return subghz_block_generic_serialize(&instance->generic, flipper_format, frequency, preset);
+ return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_hormann_deserialize(void* context, FlipperFormat* flipper_format) {
diff --git a/lib/subghz/protocols/hormann.h b/lib/subghz/protocols/hormann.h
index 2b09a065..04634ff0 100644
--- a/lib/subghz/protocols/hormann.h
+++ b/lib/subghz/protocols/hormann.h
@@ -83,15 +83,13 @@ uint8_t subghz_protocol_decoder_hormann_get_hash_data(void* context);
* Serialize data SubGhzProtocolDecoderHormann.
* @param context Pointer to a SubGhzProtocolDecoderHormann instance
* @param flipper_format Pointer to a FlipperFormat instance
- * @param frequency The frequency at which the signal was received, Hz
- * @param preset The modulation on which the signal was received, FuriHalSubGhzPreset
+ * @param preset The modulation on which the signal was received, SubGhzPesetDefinition
* @return true On success
*/
bool subghz_protocol_decoder_hormann_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset);
+ SubGhzPesetDefinition* preset);
/**
* Deserialize data SubGhzProtocolDecoderHormann.
diff --git a/lib/subghz/protocols/ido.c b/lib/subghz/protocols/ido.c
index 93693b68..2f5a9195 100644
--- a/lib/subghz/protocols/ido.c
+++ b/lib/subghz/protocols/ido.c
@@ -182,11 +182,10 @@ uint8_t subghz_protocol_decoder_ido_get_hash_data(void* context) {
bool subghz_protocol_decoder_ido_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset) {
+ SubGhzPesetDefinition* preset) {
furi_assert(context);
SubGhzProtocolDecoderIDo* instance = context;
- return subghz_block_generic_serialize(&instance->generic, flipper_format, frequency, preset);
+ return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_ido_deserialize(void* context, FlipperFormat* flipper_format) {
diff --git a/lib/subghz/protocols/ido.h b/lib/subghz/protocols/ido.h
index 266529e1..d2328218 100644
--- a/lib/subghz/protocols/ido.h
+++ b/lib/subghz/protocols/ido.h
@@ -49,15 +49,13 @@ uint8_t subghz_protocol_decoder_ido_get_hash_data(void* context);
* Serialize data SubGhzProtocolDecoderIDo.
* @param context Pointer to a SubGhzProtocolDecoderIDo instance
* @param flipper_format Pointer to a FlipperFormat instance
- * @param frequency The frequency at which the signal was received, Hz
- * @param preset The modulation on which the signal was received, FuriHalSubGhzPreset
+ * @param preset The modulation on which the signal was received, SubGhzPesetDefinition
* @return true On success
*/
bool subghz_protocol_decoder_ido_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset);
+ SubGhzPesetDefinition* preset);
/**
* Deserialize data SubGhzProtocolDecoderIDo.
diff --git a/lib/subghz/protocols/keeloq.c b/lib/subghz/protocols/keeloq.c
index 566ae576..de18e294 100644
--- a/lib/subghz/protocols/keeloq.c
+++ b/lib/subghz/protocols/keeloq.c
@@ -174,8 +174,7 @@ bool subghz_protocol_keeloq_create_data(
uint8_t btn,
uint16_t cnt,
const char* manufacture_name,
- uint32_t frequency,
- FuriHalSubGhzPreset preset) {
+ SubGhzPesetDefinition* preset) {
furi_assert(context);
SubGhzProtocolEncoderKeeloq* instance = context;
instance->generic.serial = serial;
@@ -184,8 +183,7 @@ bool subghz_protocol_keeloq_create_data(
instance->generic.data_count_bit = 64;
bool res = subghz_protocol_keeloq_gen_data(instance, btn);
if(res) {
- res =
- subghz_block_generic_serialize(&instance->generic, flipper_format, frequency, preset);
+ res = subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
return res;
}
@@ -633,15 +631,13 @@ uint8_t subghz_protocol_decoder_keeloq_get_hash_data(void* context) {
bool subghz_protocol_decoder_keeloq_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset) {
+ SubGhzPesetDefinition* preset) {
furi_assert(context);
SubGhzProtocolDecoderKeeloq* instance = context;
subghz_protocol_keeloq_check_remote_controller(
&instance->generic, instance->keystore, &instance->manufacture_name);
- bool res =
- subghz_block_generic_serialize(&instance->generic, flipper_format, frequency, preset);
+ bool res = subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
if(res && !flipper_format_write_string_cstr(
flipper_format, "Manufacture", instance->manufacture_name)) {
diff --git a/lib/subghz/protocols/keeloq.h b/lib/subghz/protocols/keeloq.h
index 72961ceb..2a590b0d 100644
--- a/lib/subghz/protocols/keeloq.h
+++ b/lib/subghz/protocols/keeloq.h
@@ -32,8 +32,7 @@ void subghz_protocol_encoder_keeloq_free(void* context);
* @param btn Button number, 4 bit
* @param cnt Container value, 16 bit
* @param manufacture_name Name of manufacturer's key
- * @param frequency Transmission frequency, Hz
- * @param preset Modulation, FuriHalSubGhzPreset
+ * @param preset Modulation, SubGhzPesetDefinition
* @return true On success
*/
bool subghz_protocol_keeloq_create_data(
@@ -43,8 +42,7 @@ bool subghz_protocol_keeloq_create_data(
uint8_t btn,
uint16_t cnt,
const char* manufacture_name,
- uint32_t frequency,
- FuriHalSubGhzPreset preset);
+ SubGhzPesetDefinition* preset);
/**
* Deserialize and generating an upload to send.
@@ -105,15 +103,13 @@ uint8_t subghz_protocol_decoder_keeloq_get_hash_data(void* context);
* Serialize data SubGhzProtocolDecoderKeeloq.
* @param context Pointer to a SubGhzProtocolDecoderKeeloq instance
* @param flipper_format Pointer to a FlipperFormat instance
- * @param frequency The frequency at which the signal was received, Hz
- * @param preset The modulation on which the signal was received, FuriHalSubGhzPreset
+ * @param preset The modulation on which the signal was received, SubGhzPesetDefinition
* @return true On success
*/
bool subghz_protocol_decoder_keeloq_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset);
+ SubGhzPesetDefinition* preset);
/**
* Deserialize data SubGhzProtocolDecoderKeeloq.
diff --git a/lib/subghz/protocols/kia.c b/lib/subghz/protocols/kia.c
index 5a89934b..069eb8f1 100644
--- a/lib/subghz/protocols/kia.c
+++ b/lib/subghz/protocols/kia.c
@@ -233,11 +233,10 @@ uint8_t subghz_protocol_decoder_kia_get_hash_data(void* context) {
bool subghz_protocol_decoder_kia_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset) {
+ SubGhzPesetDefinition* preset) {
furi_assert(context);
SubGhzProtocolDecoderKIA* instance = context;
- return subghz_block_generic_serialize(&instance->generic, flipper_format, frequency, preset);
+ return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_kia_deserialize(void* context, FlipperFormat* flipper_format) {
diff --git a/lib/subghz/protocols/kia.h b/lib/subghz/protocols/kia.h
index 40e49683..a3294046 100644
--- a/lib/subghz/protocols/kia.h
+++ b/lib/subghz/protocols/kia.h
@@ -49,15 +49,13 @@ uint8_t subghz_protocol_decoder_kia_get_hash_data(void* context);
* Serialize data SubGhzProtocolDecoderKIA.
* @param context Pointer to a SubGhzProtocolDecoderKIA instance
* @param flipper_format Pointer to a FlipperFormat instance
- * @param frequency The frequency at which the signal was received, Hz
- * @param preset The modulation on which the signal was received, FuriHalSubGhzPreset
+ * @param preset The modulation on which the signal was received, SubGhzPesetDefinition
* @return true On success
*/
bool subghz_protocol_decoder_kia_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset);
+ SubGhzPesetDefinition* preset);
/**
* Deserialize data SubGhzProtocolDecoderKIA.
diff --git a/lib/subghz/protocols/linear.c b/lib/subghz/protocols/linear.c
index 6b013278..a8c9dad6 100644
--- a/lib/subghz/protocols/linear.c
+++ b/lib/subghz/protocols/linear.c
@@ -299,11 +299,10 @@ uint8_t subghz_protocol_decoder_linear_get_hash_data(void* context) {
bool subghz_protocol_decoder_linear_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset) {
+ SubGhzPesetDefinition* preset) {
furi_assert(context);
SubGhzProtocolDecoderLinear* instance = context;
- return subghz_block_generic_serialize(&instance->generic, flipper_format, frequency, preset);
+ return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_linear_deserialize(void* context, FlipperFormat* flipper_format) {
diff --git a/lib/subghz/protocols/linear.h b/lib/subghz/protocols/linear.h
index 44f4e7dd..5060d444 100644
--- a/lib/subghz/protocols/linear.h
+++ b/lib/subghz/protocols/linear.h
@@ -83,15 +83,13 @@ uint8_t subghz_protocol_decoder_linear_get_hash_data(void* context);
* Serialize data SubGhzProtocolDecoderLinear.
* @param context Pointer to a SubGhzProtocolDecoderLinear instance
* @param flipper_format Pointer to a FlipperFormat instance
- * @param frequency The frequency at which the signal was received, Hz
- * @param preset The modulation on which the signal was received, FuriHalSubGhzPreset
+ * @param preset The modulation on which the signal was received, SubGhzPesetDefinition
* @return true On success
*/
bool subghz_protocol_decoder_linear_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset);
+ SubGhzPesetDefinition* preset);
/**
* Deserialize data SubGhzProtocolDecoderLinear.
diff --git a/lib/subghz/protocols/megacode.c b/lib/subghz/protocols/megacode.c
index f8d42b29..8a1f67b5 100644
--- a/lib/subghz/protocols/megacode.c
+++ b/lib/subghz/protocols/megacode.c
@@ -380,11 +380,10 @@ uint8_t subghz_protocol_decoder_megacode_get_hash_data(void* context) {
bool subghz_protocol_decoder_megacode_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset) {
+ SubGhzPesetDefinition* preset) {
furi_assert(context);
SubGhzProtocolDecoderMegaCode* instance = context;
- return subghz_block_generic_serialize(&instance->generic, flipper_format, frequency, preset);
+ return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_megacode_deserialize(void* context, FlipperFormat* flipper_format) {
diff --git a/lib/subghz/protocols/megacode.h b/lib/subghz/protocols/megacode.h
index 1a3cfd5d..f25011d7 100644
--- a/lib/subghz/protocols/megacode.h
+++ b/lib/subghz/protocols/megacode.h
@@ -83,15 +83,13 @@ uint8_t subghz_protocol_decoder_megacode_get_hash_data(void* context);
* Serialize data SubGhzProtocolDecoderMegaCode.
* @param context Pointer to a SubGhzProtocolDecoderMegaCode instance
* @param flipper_format Pointer to a FlipperFormat instance
- * @param frequency The frequency at which the signal was received, Hz
- * @param preset The modulation on which the signal was received, FuriHalSubGhzPreset
+ * @param preset The modulation on which the signal was received, SubGhzPesetDefinition
* @return true On success
*/
bool subghz_protocol_decoder_megacode_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset);
+ SubGhzPesetDefinition* preset);
/**
* Deserialize data SubGhzProtocolDecoderMegaCode.
diff --git a/lib/subghz/protocols/nero_radio.c b/lib/subghz/protocols/nero_radio.c
index 6797843f..7dcb5975 100644
--- a/lib/subghz/protocols/nero_radio.c
+++ b/lib/subghz/protocols/nero_radio.c
@@ -342,11 +342,10 @@ uint8_t subghz_protocol_decoder_nero_radio_get_hash_data(void* context) {
bool subghz_protocol_decoder_nero_radio_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset) {
+ SubGhzPesetDefinition* preset) {
furi_assert(context);
SubGhzProtocolDecoderNeroRadio* instance = context;
- return subghz_block_generic_serialize(&instance->generic, flipper_format, frequency, preset);
+ return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_nero_radio_deserialize(void* context, FlipperFormat* flipper_format) {
diff --git a/lib/subghz/protocols/nero_radio.h b/lib/subghz/protocols/nero_radio.h
index 46c80738..f1c540d5 100644
--- a/lib/subghz/protocols/nero_radio.h
+++ b/lib/subghz/protocols/nero_radio.h
@@ -83,15 +83,13 @@ uint8_t subghz_protocol_decoder_nero_radio_get_hash_data(void* context);
* Serialize data SubGhzProtocolDecoderNeroRadio.
* @param context Pointer to a SubGhzProtocolDecoderNeroRadio instance
* @param flipper_format Pointer to a FlipperFormat instance
- * @param frequency The frequency at which the signal was received, Hz
- * @param preset The modulation on which the signal was received, FuriHalSubGhzPreset
+ * @param preset The modulation on which the signal was received, SubGhzPesetDefinition
* @return true On success
*/
bool subghz_protocol_decoder_nero_radio_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset);
+ SubGhzPesetDefinition* preset);
/**
* Deserialize data SubGhzProtocolDecoderNeroRadio.
diff --git a/lib/subghz/protocols/nero_sketch.c b/lib/subghz/protocols/nero_sketch.c
index 1ba0cf86..a4e9f2cf 100644
--- a/lib/subghz/protocols/nero_sketch.c
+++ b/lib/subghz/protocols/nero_sketch.c
@@ -327,11 +327,10 @@ uint8_t subghz_protocol_decoder_nero_sketch_get_hash_data(void* context) {
bool subghz_protocol_decoder_nero_sketch_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset) {
+ SubGhzPesetDefinition* preset) {
furi_assert(context);
SubGhzProtocolDecoderNeroSketch* instance = context;
- return subghz_block_generic_serialize(&instance->generic, flipper_format, frequency, preset);
+ return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_nero_sketch_deserialize(void* context, FlipperFormat* flipper_format) {
diff --git a/lib/subghz/protocols/nero_sketch.h b/lib/subghz/protocols/nero_sketch.h
index e2b12f64..af93a9d9 100644
--- a/lib/subghz/protocols/nero_sketch.h
+++ b/lib/subghz/protocols/nero_sketch.h
@@ -83,15 +83,13 @@ uint8_t subghz_protocol_decoder_nero_sketch_get_hash_data(void* context);
* Serialize data SubGhzProtocolDecoderNeroSketch.
* @param context Pointer to a SubGhzProtocolDecoderNeroSketch instance
* @param flipper_format Pointer to a FlipperFormat instance
- * @param frequency The frequency at which the signal was received, Hz
- * @param preset The modulation on which the signal was received, FuriHalSubGhzPreset
+ * @param preset The modulation on which the signal was received, SubGhzPesetDefinition
* @return true On success
*/
bool subghz_protocol_decoder_nero_sketch_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset);
+ SubGhzPesetDefinition* preset);
/**
* Deserialize data SubGhzProtocolDecoderNeroSketch.
diff --git a/lib/subghz/protocols/nice_flo.c b/lib/subghz/protocols/nice_flo.c
index d2844dcd..1b8e0308 100644
--- a/lib/subghz/protocols/nice_flo.c
+++ b/lib/subghz/protocols/nice_flo.c
@@ -277,11 +277,10 @@ uint8_t subghz_protocol_decoder_nice_flo_get_hash_data(void* context) {
bool subghz_protocol_decoder_nice_flo_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset) {
+ SubGhzPesetDefinition* preset) {
furi_assert(context);
SubGhzProtocolDecoderNiceFlo* instance = context;
- return subghz_block_generic_serialize(&instance->generic, flipper_format, frequency, preset);
+ return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_nice_flo_deserialize(void* context, FlipperFormat* flipper_format) {
diff --git a/lib/subghz/protocols/nice_flo.h b/lib/subghz/protocols/nice_flo.h
index 430b111d..f7d48dfa 100644
--- a/lib/subghz/protocols/nice_flo.h
+++ b/lib/subghz/protocols/nice_flo.h
@@ -83,15 +83,13 @@ uint8_t subghz_protocol_decoder_nice_flo_get_hash_data(void* context);
* Serialize data SubGhzProtocolDecoderNiceFlo.
* @param context Pointer to a SubGhzProtocolDecoderNiceFlo instance
* @param flipper_format Pointer to a FlipperFormat instance
- * @param frequency The frequency at which the signal was received, Hz
- * @param preset The modulation on which the signal was received, FuriHalSubGhzPreset
+ * @param preset The modulation on which the signal was received, SubGhzPesetDefinition
* @return true On success
*/
bool subghz_protocol_decoder_nice_flo_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset);
+ SubGhzPesetDefinition* preset);
/**
* Deserialize data SubGhzProtocolDecoderNiceFlo.
diff --git a/lib/subghz/protocols/nice_flor_s.c b/lib/subghz/protocols/nice_flor_s.c
index 1fe5876d..381e7bd1 100644
--- a/lib/subghz/protocols/nice_flor_s.c
+++ b/lib/subghz/protocols/nice_flor_s.c
@@ -330,11 +330,10 @@ uint8_t subghz_protocol_decoder_nice_flor_s_get_hash_data(void* context) {
bool subghz_protocol_decoder_nice_flor_s_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset) {
+ SubGhzPesetDefinition* preset) {
furi_assert(context);
SubGhzProtocolDecoderNiceFlorS* instance = context;
- return subghz_block_generic_serialize(&instance->generic, flipper_format, frequency, preset);
+ return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_nice_flor_s_deserialize(void* context, FlipperFormat* flipper_format) {
diff --git a/lib/subghz/protocols/nice_flor_s.h b/lib/subghz/protocols/nice_flor_s.h
index d11264bc..fc27da38 100644
--- a/lib/subghz/protocols/nice_flor_s.h
+++ b/lib/subghz/protocols/nice_flor_s.h
@@ -49,15 +49,13 @@ uint8_t subghz_protocol_decoder_nice_flor_s_get_hash_data(void* context);
* Serialize data SubGhzProtocolDecoderNiceFlorS.
* @param context Pointer to a SubGhzProtocolDecoderNiceFlorS instance
* @param flipper_format Pointer to a FlipperFormat instance
- * @param frequency The frequency at which the signal was received, Hz
- * @param preset The modulation on which the signal was received, FuriHalSubGhzPreset
+ * @param preset The modulation on which the signal was received, SubGhzPesetDefinition
* @return true On success
*/
bool subghz_protocol_decoder_nice_flor_s_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset);
+ SubGhzPesetDefinition* preset);
/**
* Deserialize data SubGhzProtocolDecoderNiceFlorS.
diff --git a/lib/subghz/protocols/power_smart.c b/lib/subghz/protocols/power_smart.c
index 0dc81f2a..3c356ff8 100644
--- a/lib/subghz/protocols/power_smart.c
+++ b/lib/subghz/protocols/power_smart.c
@@ -345,11 +345,10 @@ uint8_t subghz_protocol_decoder_power_smart_get_hash_data(void* context) {
bool subghz_protocol_decoder_power_smart_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset) {
+ SubGhzPesetDefinition* preset) {
furi_assert(context);
SubGhzProtocolDecoderPowerSmart* instance = context;
- return subghz_block_generic_serialize(&instance->generic, flipper_format, frequency, preset);
+ return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_power_smart_deserialize(void* context, FlipperFormat* flipper_format) {
diff --git a/lib/subghz/protocols/power_smart.h b/lib/subghz/protocols/power_smart.h
index 346fe537..e6445ca4 100644
--- a/lib/subghz/protocols/power_smart.h
+++ b/lib/subghz/protocols/power_smart.h
@@ -83,15 +83,13 @@ uint8_t subghz_protocol_decoder_power_smart_get_hash_data(void* context);
* Serialize data SubGhzProtocolDecoderPowerSmart.
* @param context Pointer to a SubGhzProtocolDecoderPowerSmart instance
* @param flipper_format Pointer to a FlipperFormat instance
- * @param frequency The frequency at which the signal was received, Hz
- * @param preset The modulation on which the signal was received, FuriHalSubGhzPreset
+ * @param preset The modulation on which the signal was received, SubGhzPesetDefinition
* @return true On success
*/
bool subghz_protocol_decoder_power_smart_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset);
+ SubGhzPesetDefinition* preset);
/**
* Deserialize data SubGhzProtocolDecoderPowerSmart.
diff --git a/lib/subghz/protocols/princeton.c b/lib/subghz/protocols/princeton.c
index 046484c7..ce34d32c 100644
--- a/lib/subghz/protocols/princeton.c
+++ b/lib/subghz/protocols/princeton.c
@@ -300,12 +300,10 @@ uint8_t subghz_protocol_decoder_princeton_get_hash_data(void* context) {
bool subghz_protocol_decoder_princeton_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset) {
+ SubGhzPesetDefinition* preset) {
furi_assert(context);
SubGhzProtocolDecoderPrinceton* instance = context;
- bool res =
- subghz_block_generic_serialize(&instance->generic, flipper_format, frequency, preset);
+ bool res = subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
if(res && !flipper_format_write_uint32(flipper_format, "TE", &instance->te, 1)) {
FURI_LOG_E(TAG, "Unable to add TE");
res = false;
diff --git a/lib/subghz/protocols/princeton.h b/lib/subghz/protocols/princeton.h
index 129819c6..fb126f2d 100644
--- a/lib/subghz/protocols/princeton.h
+++ b/lib/subghz/protocols/princeton.h
@@ -83,15 +83,13 @@ uint8_t subghz_protocol_decoder_princeton_get_hash_data(void* context);
* Serialize data SubGhzProtocolDecoderPrinceton.
* @param context Pointer to a SubGhzProtocolDecoderPrinceton instance
* @param flipper_format Pointer to a FlipperFormat instance
- * @param frequency The frequency at which the signal was received, Hz
- * @param preset The modulation on which the signal was received, FuriHalSubGhzPreset
+ * @param preset The modulation on which the signal was received, SubGhzPesetDefinition
* @return true On success
*/
bool subghz_protocol_decoder_princeton_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset);
+ SubGhzPesetDefinition* preset);
/**
* Deserialize data SubGhzProtocolDecoderPrinceton.
diff --git a/lib/subghz/protocols/raw.c b/lib/subghz/protocols/raw.c
index 6a75d159..92f20438 100644
--- a/lib/subghz/protocols/raw.c
+++ b/lib/subghz/protocols/raw.c
@@ -83,8 +83,7 @@ const SubGhzProtocol subghz_protocol_raw = {
bool subghz_protocol_raw_save_to_file_init(
SubGhzProtocolDecoderRAW* instance,
const char* dev_name,
- uint32_t frequency,
- FuriHalSubGhzPreset preset) {
+ SubGhzPesetDefinition* preset) {
furi_assert(instance);
instance->storage = furi_record_open(RECORD_STORAGE);
@@ -124,19 +123,30 @@ bool subghz_protocol_raw_save_to_file_init(
break;
}
- if(!flipper_format_write_uint32(instance->flipper_file, "Frequency", &frequency, 1)) {
+ if(!flipper_format_write_uint32(
+ instance->flipper_file, "Frequency", &preset->frequency, 1)) {
FURI_LOG_E(TAG, "Unable to add Frequency");
break;
}
- if(!subghz_block_generic_get_preset_name(preset, temp_str)) {
- break;
- }
+
+ subghz_block_generic_get_preset_name(string_get_cstr(preset->name), temp_str);
if(!flipper_format_write_string_cstr(
instance->flipper_file, "Preset", string_get_cstr(temp_str))) {
FURI_LOG_E(TAG, "Unable to add Preset");
break;
}
-
+ if(!strcmp(string_get_cstr(temp_str), "FuriHalSubGhzPresetCustom")) {
+ if(!flipper_format_write_string_cstr(
+ instance->flipper_file, "Custom_preset_module", "CC1101")) {
+ FURI_LOG_E(TAG, "Unable to add Custom_preset_module");
+ break;
+ }
+ if(!flipper_format_write_hex(
+ instance->flipper_file, "Custom_preset_data", preset->data, preset->data_size)) {
+ FURI_LOG_E(TAG, "Unable to add Custom_preset_data");
+ break;
+ }
+ }
if(!flipper_format_write_string_cstr(
instance->flipper_file, "Protocol", instance->base.protocol->name)) {
FURI_LOG_E(TAG, "Unable to add Protocol");
diff --git a/lib/subghz/protocols/raw.h b/lib/subghz/protocols/raw.h
index 9e4931f9..a6435d33 100644
--- a/lib/subghz/protocols/raw.h
+++ b/lib/subghz/protocols/raw.h
@@ -17,15 +17,13 @@ extern const SubGhzProtocol subghz_protocol_raw;
* Open file for writing
* @param instance Pointer to a SubGhzProtocolDecoderRAW instance
* @param dev_name File name
- * @param frequency The frequency at which the signal was received, Hz
- * @param preset The modulation on which the signal was received, FuriHalSubGhzPreset
+ * @param preset The modulation on which the signal was received, SubGhzPesetDefinition
* @return true On success
*/
bool subghz_protocol_raw_save_to_file_init(
SubGhzProtocolDecoderRAW* instance,
const char* dev_name,
- uint32_t frequency,
- FuriHalSubGhzPreset preset);
+ SubGhzPesetDefinition* preset);
/**
* Stop writing file to flash
diff --git a/lib/subghz/protocols/scher_khan.c b/lib/subghz/protocols/scher_khan.c
index 233b9564..7c9aa6a7 100644
--- a/lib/subghz/protocols/scher_khan.c
+++ b/lib/subghz/protocols/scher_khan.c
@@ -251,11 +251,10 @@ uint8_t subghz_protocol_decoder_scher_khan_get_hash_data(void* context) {
bool subghz_protocol_decoder_scher_khan_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset) {
+ SubGhzPesetDefinition* preset) {
furi_assert(context);
SubGhzProtocolDecoderScherKhan* instance = context;
- return subghz_block_generic_serialize(&instance->generic, flipper_format, frequency, preset);
+ return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_scher_khan_deserialize(void* context, FlipperFormat* flipper_format) {
diff --git a/lib/subghz/protocols/scher_khan.h b/lib/subghz/protocols/scher_khan.h
index fa3f5147..b22e8934 100644
--- a/lib/subghz/protocols/scher_khan.h
+++ b/lib/subghz/protocols/scher_khan.h
@@ -49,15 +49,13 @@ uint8_t subghz_protocol_decoder_scher_khan_get_hash_data(void* context);
* Serialize data SubGhzProtocolDecoderScherKhan.
* @param context Pointer to a SubGhzProtocolDecoderScherKhan instance
* @param flipper_format Pointer to a FlipperFormat instance
- * @param frequency The frequency at which the signal was received, Hz
- * @param preset The modulation on which the signal was received, FuriHalSubGhzPreset
+ * @param preset The modulation on which the signal was received, SubGhzPesetDefinition
* @return true On success
*/
bool subghz_protocol_decoder_scher_khan_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset);
+ SubGhzPesetDefinition* preset);
/**
* Deserialize data SubGhzProtocolDecoderScherKhan.
diff --git a/lib/subghz/protocols/secplus_v1.c b/lib/subghz/protocols/secplus_v1.c
index b51179f4..119c0307 100644
--- a/lib/subghz/protocols/secplus_v1.c
+++ b/lib/subghz/protocols/secplus_v1.c
@@ -515,11 +515,10 @@ uint8_t subghz_protocol_decoder_secplus_v1_get_hash_data(void* context) {
bool subghz_protocol_decoder_secplus_v1_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset) {
+ SubGhzPesetDefinition* preset) {
furi_assert(context);
SubGhzProtocolDecoderSecPlus_v1* instance = context;
- return subghz_block_generic_serialize(&instance->generic, flipper_format, frequency, preset);
+ return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_secplus_v1_deserialize(void* context, FlipperFormat* flipper_format) {
diff --git a/lib/subghz/protocols/secplus_v1.h b/lib/subghz/protocols/secplus_v1.h
index 1c752df7..5447e3f8 100644
--- a/lib/subghz/protocols/secplus_v1.h
+++ b/lib/subghz/protocols/secplus_v1.h
@@ -82,15 +82,13 @@ uint8_t subghz_protocol_decoder_secplus_v1_get_hash_data(void* context);
* Serialize data SubGhzProtocolDecoderSecPlus_v1.
* @param context Pointer to a SubGhzProtocolDecoderSecPlus_v1 instance
* @param flipper_format Pointer to a FlipperFormat instance
- * @param frequency The frequency at which the signal was received, Hz
- * @param preset The modulation on which the signal was received, FuriHalSubGhzPreset
+ * @param preset The modulation on which the signal was received, SubGhzPesetDefinition
* @return true On success
*/
bool subghz_protocol_decoder_secplus_v1_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset);
+ SubGhzPesetDefinition* preset);
/**
* Deserialize data SubGhzProtocolDecoderSecPlus_v1.
diff --git a/lib/subghz/protocols/secplus_v2.c b/lib/subghz/protocols/secplus_v2.c
index 70ff19e4..837b2638 100644
--- a/lib/subghz/protocols/secplus_v2.c
+++ b/lib/subghz/protocols/secplus_v2.c
@@ -588,8 +588,7 @@ bool subghz_protocol_secplus_v2_create_data(
uint32_t serial,
uint8_t btn,
uint32_t cnt,
- uint32_t frequency,
- FuriHalSubGhzPreset preset) {
+ SubGhzPesetDefinition* preset) {
furi_assert(context);
SubGhzProtocolEncoderSecPlus_v2* instance = context;
instance->generic.serial = serial;
@@ -598,8 +597,7 @@ bool subghz_protocol_secplus_v2_create_data(
instance->generic.data_count_bit =
(uint8_t)subghz_protocol_secplus_v2_const.min_count_bit_for_found;
subghz_protocol_secplus_v2_encode(instance);
- bool res =
- subghz_block_generic_serialize(&instance->generic, flipper_format, frequency, preset);
+ bool res = subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
uint8_t key_data[sizeof(uint64_t)] = {0};
for(size_t i = 0; i < sizeof(uint64_t); i++) {
@@ -757,12 +755,10 @@ uint8_t subghz_protocol_decoder_secplus_v2_get_hash_data(void* context) {
bool subghz_protocol_decoder_secplus_v2_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset) {
+ SubGhzPesetDefinition* preset) {
furi_assert(context);
SubGhzProtocolDecoderSecPlus_v2* instance = context;
- bool res =
- subghz_block_generic_serialize(&instance->generic, flipper_format, frequency, preset);
+ bool res = subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
uint8_t key_data[sizeof(uint64_t)] = {0};
for(size_t i = 0; i < sizeof(uint64_t); i++) {
diff --git a/lib/subghz/protocols/secplus_v2.h b/lib/subghz/protocols/secplus_v2.h
index 3d695148..43bce629 100644
--- a/lib/subghz/protocols/secplus_v2.h
+++ b/lib/subghz/protocols/secplus_v2.h
@@ -52,8 +52,7 @@ LevelDuration subghz_protocol_encoder_secplus_v2_yield(void* context);
* @param btn Button number, 8 bit
* @param cnt Container value, 28 bit
* @param manufacture_name Name of manufacturer's key
- * @param frequency Transmission frequency, Hz
- * @param preset Modulation, FuriHalSubGhzPreset
+ * @param preset Modulation, SubGhzPesetDefinition
* @return true On success
*/
bool subghz_protocol_secplus_v2_create_data(
@@ -62,8 +61,7 @@ bool subghz_protocol_secplus_v2_create_data(
uint32_t serial,
uint8_t btn,
uint32_t cnt,
- uint32_t frequency,
- FuriHalSubGhzPreset preset);
+ SubGhzPesetDefinition* preset);
/**
* Allocate SubGhzProtocolDecoderSecPlus_v2.
@@ -103,15 +101,13 @@ uint8_t subghz_protocol_decoder_secplus_v2_get_hash_data(void* context);
* Serialize data SubGhzProtocolDecoderSecPlus_v2.
* @param context Pointer to a SubGhzProtocolDecoderSecPlus_v2 instance
* @param flipper_format Pointer to a FlipperFormat instance
- * @param frequency The frequency at which the signal was received, Hz
- * @param preset The modulation on which the signal was received, FuriHalSubGhzPreset
+ * @param preset The modulation on which the signal was received, SubGhzPesetDefinition
* @return true On success
*/
bool subghz_protocol_decoder_secplus_v2_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset);
+ SubGhzPesetDefinition* preset);
/**
* Deserialize data SubGhzProtocolDecoderSecPlus_v2.
diff --git a/lib/subghz/protocols/somfy_keytis.c b/lib/subghz/protocols/somfy_keytis.c
index 764e8147..d2df9eff 100644
--- a/lib/subghz/protocols/somfy_keytis.c
+++ b/lib/subghz/protocols/somfy_keytis.c
@@ -382,12 +382,10 @@ uint8_t subghz_protocol_decoder_somfy_keytis_get_hash_data(void* context) {
bool subghz_protocol_decoder_somfy_keytis_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset) {
+ SubGhzPesetDefinition* preset) {
furi_assert(context);
SubGhzProtocolDecoderSomfyKeytis* instance = context;
- bool res =
- subghz_block_generic_serialize(&instance->generic, flipper_format, frequency, preset);
+ bool res = subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
if(res && !flipper_format_write_uint32(
flipper_format, "Duration_Counter", &instance->press_duration_counter, 1)) {
FURI_LOG_E(TAG, "Unable to add Duration_Counter");
diff --git a/lib/subghz/protocols/somfy_keytis.h b/lib/subghz/protocols/somfy_keytis.h
index eea12f36..46193994 100644
--- a/lib/subghz/protocols/somfy_keytis.h
+++ b/lib/subghz/protocols/somfy_keytis.h
@@ -49,15 +49,13 @@ uint8_t subghz_protocol_decoder_somfy_keytis_get_hash_data(void* context);
* Serialize data SubGhzProtocolDecoderSomfyKeytis.
* @param context Pointer to a SubGhzProtocolDecoderSomfyKeytis instance
* @param flipper_format Pointer to a FlipperFormat instance
- * @param frequency The frequency at which the signal was received, Hz
- * @param preset The modulation on which the signal was received, FuriHalSubGhzPreset
+ * @param preset The modulation on which the signal was received, SubGhzPesetDefinition
* @return true On success
*/
bool subghz_protocol_decoder_somfy_keytis_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset);
+ SubGhzPesetDefinition* preset);
/**
* Deserialize data SubGhzProtocolDecoderSomfyKeytis.
diff --git a/lib/subghz/protocols/somfy_telis.c b/lib/subghz/protocols/somfy_telis.c
index 63407427..039cb8ee 100644
--- a/lib/subghz/protocols/somfy_telis.c
+++ b/lib/subghz/protocols/somfy_telis.c
@@ -339,11 +339,10 @@ uint8_t subghz_protocol_decoder_somfy_telis_get_hash_data(void* context) {
bool subghz_protocol_decoder_somfy_telis_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset) {
+ SubGhzPesetDefinition* preset) {
furi_assert(context);
SubGhzProtocolDecoderSomfyTelis* instance = context;
- return subghz_block_generic_serialize(&instance->generic, flipper_format, frequency, preset);
+ return subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
}
bool subghz_protocol_decoder_somfy_telis_deserialize(void* context, FlipperFormat* flipper_format) {
diff --git a/lib/subghz/protocols/somfy_telis.h b/lib/subghz/protocols/somfy_telis.h
index 3414de6f..ce474769 100644
--- a/lib/subghz/protocols/somfy_telis.h
+++ b/lib/subghz/protocols/somfy_telis.h
@@ -49,15 +49,13 @@ uint8_t subghz_protocol_decoder_somfy_telis_get_hash_data(void* context);
* Serialize data SubGhzProtocolDecoderSomfyTelis.
* @param context Pointer to a SubGhzProtocolDecoderSomfyTelis instance
* @param flipper_format Pointer to a FlipperFormat instance
- * @param frequency The frequency at which the signal was received, Hz
- * @param preset The modulation on which the signal was received, FuriHalSubGhzPreset
+ * @param preset The modulation on which the signal was received, SubGhzPesetDefinition
* @return true On success
*/
bool subghz_protocol_decoder_somfy_telis_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset);
+ SubGhzPesetDefinition* preset);
/**
* Deserialize data SubGhzProtocolDecoderSomfyTelis.
diff --git a/lib/subghz/protocols/star_line.c b/lib/subghz/protocols/star_line.c
index 7db33570..4492338a 100644
--- a/lib/subghz/protocols/star_line.c
+++ b/lib/subghz/protocols/star_line.c
@@ -320,14 +320,12 @@ uint8_t subghz_protocol_decoder_star_line_get_hash_data(void* context) {
bool subghz_protocol_decoder_star_line_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset) {
+ SubGhzPesetDefinition* preset) {
furi_assert(context);
SubGhzProtocolDecoderStarLine* instance = context;
subghz_protocol_star_line_check_remote_controller(
&instance->generic, instance->keystore, &instance->manufacture_name);
- bool res =
- subghz_block_generic_serialize(&instance->generic, flipper_format, frequency, preset);
+ bool res = subghz_block_generic_serialize(&instance->generic, flipper_format, preset);
if(res && !flipper_format_write_string_cstr(
flipper_format, "Manufacture", instance->manufacture_name)) {
diff --git a/lib/subghz/protocols/star_line.h b/lib/subghz/protocols/star_line.h
index 9253ff52..b48f1c21 100644
--- a/lib/subghz/protocols/star_line.h
+++ b/lib/subghz/protocols/star_line.h
@@ -49,15 +49,13 @@ uint8_t subghz_protocol_decoder_star_line_get_hash_data(void* context);
* Serialize data SubGhzProtocolDecoderStarLine.
* @param context Pointer to a SubGhzProtocolDecoderStarLine instance
* @param flipper_format Pointer to a FlipperFormat instance
- * @param frequency The frequency at which the signal was received, Hz
- * @param preset The modulation on which the signal was received, FuriHalSubGhzPreset
+ * @param preset The modulation on which the signal was received, SubGhzPesetDefinition
* @return true On success
*/
bool subghz_protocol_decoder_star_line_serialize(
void* context,
FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset);
+ SubGhzPesetDefinition* preset);
/**
* Deserialize data SubGhzProtocolDecoderStarLine.
diff --git a/lib/subghz/subghz_worker.c b/lib/subghz/subghz_worker.c
index dcebdfff..58db8ea5 100644
--- a/lib/subghz/subghz_worker.c
+++ b/lib/subghz/subghz_worker.c
@@ -57,7 +57,6 @@ static int32_t subghz_worker_thread_callback(void* context) {
if(ret == sizeof(LevelDuration)) {
if(level_duration_is_reset(level_duration)) {
FURI_LOG_E(TAG, "Overrun buffer");
- ;
if(instance->overrun_callback) instance->overrun_callback(instance->context);
} else {
bool level = level_duration_get_level(level_duration);
@@ -98,11 +97,11 @@ SubGhzWorker* subghz_worker_alloc() {
furi_thread_set_context(instance->thread, instance);
furi_thread_set_callback(instance->thread, subghz_worker_thread_callback);
- instance->stream = xStreamBufferCreate(sizeof(LevelDuration) * 2048, sizeof(LevelDuration));
+ instance->stream = xStreamBufferCreate(sizeof(LevelDuration) * 4096, sizeof(LevelDuration));
//setting filter
instance->filter_running = true;
- instance->filter_duration = 20;
+ instance->filter_duration = 30;
return instance;
}
diff --git a/lib/subghz/types.h b/lib/subghz/types.h
index 46e5ec24..41a04cb1 100644
--- a/lib/subghz/types.h
+++ b/lib/subghz/types.h
@@ -10,6 +10,7 @@
#include "environment.h"
#include <furi.h>
#include <furi_hal.h>
+#include <subghz/helpers/subghz_types.h>
#define SUBGHZ_APP_FOLDER ANY_PATH("subghz")
#define SUBGHZ_RAW_FOLDER EXT_PATH("subghz")
@@ -30,11 +31,8 @@ typedef void* (*SubGhzAlloc)(SubGhzEnvironment* environment);
typedef void (*SubGhzFree)(void* context);
// Serialize and Deserialize
-typedef bool (*SubGhzSerialize)(
- void* context,
- FlipperFormat* flipper_format,
- uint32_t frequency,
- FuriHalSubGhzPreset preset);
+typedef bool (
+ *SubGhzSerialize)(void* context, FlipperFormat* flipper_format, SubGhzPesetDefinition* preset);
typedef bool (*SubGhzDeserialize)(void* context, FlipperFormat* flipper_format);
// Decoder specific