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:
Diffstat (limited to 'applications/subghz/subghz_i.c')
-rw-r--r--applications/subghz/subghz_i.c91
1 files changed, 63 insertions, 28 deletions
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);
}
}