mirror of
https://github.com/DarkFlippers/unleashed-firmware
synced 2024-11-23 21:13:16 +00:00
SubGhz: refactoring
This commit is contained in:
parent
f71900694b
commit
07203f0989
14 changed files with 162 additions and 127 deletions
|
@ -278,7 +278,7 @@ SubGhzFrequencyAnalyzerWorker* subghz_frequency_analyzer_worker_alloc(void* cont
|
||||||
furi_thread_set_callback(instance->thread, subghz_frequency_analyzer_worker_thread);
|
furi_thread_set_callback(instance->thread, subghz_frequency_analyzer_worker_thread);
|
||||||
|
|
||||||
SubGhz* subghz = context;
|
SubGhz* subghz = context;
|
||||||
instance->setting = subghz->txrx->setting;
|
instance->setting = subghz_txrx_get_setting(subghz->txrx);
|
||||||
instance->trigger_level = subghz->last_settings->frequency_analyzer_trigger;
|
instance->trigger_level = subghz->last_settings->frequency_analyzer_trigger;
|
||||||
//instance->trigger_level = SUBGHZ_FREQUENCY_ANALYZER_THRESHOLD;
|
//instance->trigger_level = SUBGHZ_FREQUENCY_ANALYZER_THRESHOLD;
|
||||||
return instance;
|
return instance;
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
static void subghz_scene_receiver_update_statusbar(void* context) {
|
static void subghz_scene_receiver_update_statusbar(void* context) {
|
||||||
SubGhz* subghz = context;
|
SubGhz* subghz = context;
|
||||||
FuriString* history_stat_str = furi_string_alloc();
|
FuriString* history_stat_str = furi_string_alloc();
|
||||||
if(!subghz_history_get_text_space_left(subghz->txrx->history, history_stat_str)) {
|
if(!subghz_history_get_text_space_left(subghz->history, history_stat_str)) {
|
||||||
FuriString* frequency_str = furi_string_alloc();
|
FuriString* frequency_str = furi_string_alloc();
|
||||||
FuriString* modulation_str = furi_string_alloc();
|
FuriString* modulation_str = furi_string_alloc();
|
||||||
|
|
||||||
|
@ -60,21 +60,22 @@ static void subghz_scene_add_to_history_callback(
|
||||||
SubGhz* subghz = context;
|
SubGhz* subghz = context;
|
||||||
FuriString* item_name = furi_string_alloc();
|
FuriString* item_name = furi_string_alloc();
|
||||||
FuriString* item_time = furi_string_alloc();
|
FuriString* item_time = furi_string_alloc();
|
||||||
uint16_t idx = subghz_history_get_item(subghz->txrx->history);
|
uint16_t idx = subghz_history_get_item(subghz->history);
|
||||||
|
SubGhzRadioPreset preset = subghz_get_preset(subghz->txrx);
|
||||||
|
|
||||||
if(subghz_history_add_to_history(subghz->txrx->history, decoder_base, subghz->txrx->preset)) {
|
if(subghz_history_add_to_history(subghz->history, decoder_base, &preset)) {
|
||||||
furi_string_reset(item_name);
|
furi_string_reset(item_name);
|
||||||
furi_string_reset(item_time);
|
furi_string_reset(item_time);
|
||||||
|
|
||||||
subghz->state_notifications = SubGhzNotificationStateRxDone;
|
subghz->state_notifications = SubGhzNotificationStateRxDone;
|
||||||
|
|
||||||
subghz_history_get_text_item_menu(subghz->txrx->history, item_name, idx);
|
subghz_history_get_text_item_menu(subghz->history, item_name, idx);
|
||||||
subghz_history_get_time_item_menu(subghz->txrx->history, item_time, idx);
|
subghz_history_get_time_item_menu(subghz->history, item_time, idx);
|
||||||
subghz_view_receiver_add_item_to_menu(
|
subghz_view_receiver_add_item_to_menu(
|
||||||
subghz->subghz_receiver,
|
subghz->subghz_receiver,
|
||||||
furi_string_get_cstr(item_name),
|
furi_string_get_cstr(item_name),
|
||||||
furi_string_get_cstr(item_time),
|
furi_string_get_cstr(item_time),
|
||||||
subghz_history_get_type_protocol(subghz->txrx->history, idx));
|
subghz_history_get_type_protocol(subghz->history, idx));
|
||||||
|
|
||||||
subghz_scene_receiver_update_statusbar(subghz);
|
subghz_scene_receiver_update_statusbar(subghz);
|
||||||
}
|
}
|
||||||
|
@ -173,7 +174,7 @@ void subghz_scene_decode_raw_on_enter(void* context) {
|
||||||
|
|
||||||
if(subghz->decode_raw_state == SubGhzDecodeRawStateStart) {
|
if(subghz->decode_raw_state == SubGhzDecodeRawStateStart) {
|
||||||
//Decode RAW to history
|
//Decode RAW to history
|
||||||
subghz_history_reset(subghz->txrx->history);
|
subghz_history_reset(subghz->history);
|
||||||
if(subghz_scene_decode_raw_start(subghz)) {
|
if(subghz_scene_decode_raw_start(subghz)) {
|
||||||
subghz->decode_raw_state = SubGhzDecodeRawStateLoading;
|
subghz->decode_raw_state = SubGhzDecodeRawStateLoading;
|
||||||
subghz->state_notifications = SubGhzNotificationStateRx;
|
subghz->state_notifications = SubGhzNotificationStateRx;
|
||||||
|
@ -181,16 +182,16 @@ void subghz_scene_decode_raw_on_enter(void* context) {
|
||||||
} else {
|
} else {
|
||||||
//Load history to receiver
|
//Load history to receiver
|
||||||
subghz_view_receiver_exit(subghz->subghz_receiver);
|
subghz_view_receiver_exit(subghz->subghz_receiver);
|
||||||
for(uint8_t i = 0; i < subghz_history_get_item(subghz->txrx->history); i++) {
|
for(uint8_t i = 0; i < subghz_history_get_item(subghz->history); i++) {
|
||||||
furi_string_reset(item_name);
|
furi_string_reset(item_name);
|
||||||
furi_string_reset(item_time);
|
furi_string_reset(item_time);
|
||||||
subghz_history_get_text_item_menu(subghz->txrx->history, item_name, i);
|
subghz_history_get_text_item_menu(subghz->history, item_name, i);
|
||||||
subghz_history_get_time_item_menu(subghz->txrx->history, item_time, i);
|
subghz_history_get_time_item_menu(subghz->history, item_time, i);
|
||||||
subghz_view_receiver_add_item_to_menu(
|
subghz_view_receiver_add_item_to_menu(
|
||||||
subghz->subghz_receiver,
|
subghz->subghz_receiver,
|
||||||
furi_string_get_cstr(item_name),
|
furi_string_get_cstr(item_name),
|
||||||
furi_string_get_cstr(item_time),
|
furi_string_get_cstr(item_time),
|
||||||
subghz_history_get_type_protocol(subghz->txrx->history, i));
|
subghz_history_get_type_protocol(subghz->history, i));
|
||||||
}
|
}
|
||||||
furi_string_free(item_name);
|
furi_string_free(item_name);
|
||||||
furi_string_free(item_time);
|
furi_string_free(item_time);
|
||||||
|
|
|
@ -48,7 +48,7 @@ bool subghz_scene_need_saving_on_event(void* context, SceneManagerEvent event) {
|
||||||
} else if(event.event == SubGhzCustomEventSceneExit) {
|
} else if(event.event == SubGhzCustomEventSceneExit) {
|
||||||
if(subghz_rx_key_state_get(subghz) == SubGhzRxKeyStateExit) {
|
if(subghz_rx_key_state_get(subghz) == SubGhzRxKeyStateExit) {
|
||||||
subghz_rx_key_state_set(subghz, SubGhzRxKeyStateIDLE);
|
subghz_rx_key_state_set(subghz, SubGhzRxKeyStateIDLE);
|
||||||
subghz_preset_init(
|
subghz_set_preset(
|
||||||
subghz->txrx, "AM650", subghz->last_settings->frequency, NULL, 0);
|
subghz->txrx, "AM650", subghz->last_settings->frequency, NULL, 0);
|
||||||
scene_manager_search_and_switch_to_previous_scene(
|
scene_manager_search_and_switch_to_previous_scene(
|
||||||
subghz->scene_manager, SubGhzSceneStart);
|
subghz->scene_manager, SubGhzSceneStart);
|
||||||
|
|
|
@ -42,6 +42,7 @@ static void subghz_scene_read_raw_update_statusbar(void* context) {
|
||||||
|
|
||||||
#ifdef SUBGHZ_EXT_PRESET_NAME
|
#ifdef SUBGHZ_EXT_PRESET_NAME
|
||||||
subghz_get_frequency_modulation(subghz->txrx, frequency_str, modulation_str, true);
|
subghz_get_frequency_modulation(subghz->txrx, frequency_str, modulation_str, true);
|
||||||
|
//TODO if need subghz_get_preset
|
||||||
//furi_string_printf(modulation_str, "%s", furi_string_get_cstr(subghz->txrx->preset->name));
|
//furi_string_printf(modulation_str, "%s", furi_string_get_cstr(subghz->txrx->preset->name));
|
||||||
#else
|
#else
|
||||||
subghz_get_frequency_modulation(subghz->txrx, frequency_str, modulation_str, false);
|
subghz_get_frequency_modulation(subghz->txrx, frequency_str, modulation_str, false);
|
||||||
|
@ -139,14 +140,15 @@ bool subghz_scene_read_raw_on_event(void* context, SceneManagerEvent event) {
|
||||||
} else {
|
} else {
|
||||||
//Restore default setting
|
//Restore default setting
|
||||||
if(subghz->raw_send_only) {
|
if(subghz->raw_send_only) {
|
||||||
subghz_preset_init(
|
subghz_set_preset(
|
||||||
subghz->txrx,
|
subghz->txrx,
|
||||||
"AM650",
|
"AM650",
|
||||||
subghz_setting_get_default_frequency(subghz->txrx->setting),
|
subghz_setting_get_default_frequency(
|
||||||
|
subghz_txrx_get_setting(subghz->txrx)),
|
||||||
NULL,
|
NULL,
|
||||||
0);
|
0);
|
||||||
} else {
|
} else {
|
||||||
subghz_preset_init(
|
subghz_set_preset(
|
||||||
subghz->txrx, "AM650", subghz->last_settings->frequency, NULL, 0);
|
subghz->txrx, "AM650", subghz->last_settings->frequency, NULL, 0);
|
||||||
}
|
}
|
||||||
if(!scene_manager_search_and_switch_to_previous_scene(
|
if(!scene_manager_search_and_switch_to_previous_scene(
|
||||||
|
@ -281,18 +283,13 @@ bool subghz_scene_read_raw_on_event(void* context, SceneManagerEvent event) {
|
||||||
if(subghz_rx_key_state_get(subghz) != SubGhzRxKeyStateIDLE) {
|
if(subghz_rx_key_state_get(subghz) != SubGhzRxKeyStateIDLE) {
|
||||||
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneNeedSaving);
|
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneNeedSaving);
|
||||||
} else {
|
} else {
|
||||||
|
SubGhzRadioPreset preset = subghz_get_preset(subghz->txrx);
|
||||||
if(subghz_protocol_raw_save_to_file_init(
|
if(subghz_protocol_raw_save_to_file_init(
|
||||||
(SubGhzProtocolDecoderRAW*)subghz_txrx_get_decoder(subghz->txrx),
|
(SubGhzProtocolDecoderRAW*)subghz_txrx_get_decoder(subghz->txrx),
|
||||||
RAW_FILE_NAME,
|
RAW_FILE_NAME,
|
||||||
subghz->txrx->preset)) {
|
&preset)) {
|
||||||
DOLPHIN_DEED(DolphinDeedSubGhzRawRec);
|
DOLPHIN_DEED(DolphinDeedSubGhzRawRec);
|
||||||
subghz_txrx_stop(subghz->txrx);
|
subghz_rx_start(subghz->txrx);
|
||||||
subghz_begin(
|
|
||||||
subghz->txrx,
|
|
||||||
subghz_setting_get_preset_data_by_name(
|
|
||||||
subghz->txrx->setting,
|
|
||||||
furi_string_get_cstr(subghz->txrx->preset->name)));
|
|
||||||
subghz_rx(subghz->txrx, subghz->txrx->preset->frequency);
|
|
||||||
|
|
||||||
subghz->state_notifications = SubGhzNotificationStateRx;
|
subghz->state_notifications = SubGhzNotificationStateRx;
|
||||||
subghz_rx_key_state_set(subghz, SubGhzRxKeyStateAddKey);
|
subghz_rx_key_state_set(subghz, SubGhzRxKeyStateAddKey);
|
||||||
|
|
|
@ -40,12 +40,12 @@ const NotificationSequence subghz_sequence_rx_locked = {
|
||||||
static void subghz_scene_receiver_update_statusbar(void* context) {
|
static void subghz_scene_receiver_update_statusbar(void* context) {
|
||||||
SubGhz* subghz = context;
|
SubGhz* subghz = context;
|
||||||
FuriString* history_stat_str = furi_string_alloc();
|
FuriString* history_stat_str = furi_string_alloc();
|
||||||
if(!subghz_history_get_text_space_left(subghz->txrx->history, history_stat_str)) {
|
if(!subghz_history_get_text_space_left(subghz->history, history_stat_str)) {
|
||||||
FuriString* frequency_str = furi_string_alloc();
|
FuriString* frequency_str = furi_string_alloc();
|
||||||
FuriString* modulation_str = furi_string_alloc();
|
FuriString* modulation_str = furi_string_alloc();
|
||||||
|
|
||||||
#ifdef SUBGHZ_EXT_PRESET_NAME
|
#ifdef SUBGHZ_EXT_PRESET_NAME
|
||||||
if(subghz_history_get_last_index(subghz->txrx->history) > 0) {
|
if(subghz_history_get_last_index(subghz->history) > 0) {
|
||||||
subghz_get_frequency_modulation(subghz->txrx, frequency_str, modulation_str, false);
|
subghz_get_frequency_modulation(subghz->txrx, frequency_str, modulation_str, false);
|
||||||
} else {
|
} else {
|
||||||
FuriString* temp_str = furi_string_alloc();
|
FuriString* temp_str = furi_string_alloc();
|
||||||
|
@ -94,21 +94,22 @@ static void subghz_scene_add_to_history_callback(
|
||||||
|
|
||||||
FuriString* item_name = furi_string_alloc();
|
FuriString* item_name = furi_string_alloc();
|
||||||
FuriString* item_time = furi_string_alloc();
|
FuriString* item_time = furi_string_alloc();
|
||||||
uint16_t idx = subghz_history_get_item(subghz->txrx->history);
|
uint16_t idx = subghz_history_get_item(subghz->history);
|
||||||
|
|
||||||
if(subghz_history_add_to_history(subghz->txrx->history, decoder_base, subghz->txrx->preset)) {
|
SubGhzRadioPreset preset = subghz_get_preset(subghz->txrx);
|
||||||
|
if(subghz_history_add_to_history(subghz->history, decoder_base, &preset)) {
|
||||||
furi_string_reset(item_name);
|
furi_string_reset(item_name);
|
||||||
furi_string_reset(item_time);
|
furi_string_reset(item_time);
|
||||||
|
|
||||||
subghz->state_notifications = SubGhzNotificationStateRxDone;
|
subghz->state_notifications = SubGhzNotificationStateRxDone;
|
||||||
|
|
||||||
subghz_history_get_text_item_menu(subghz->txrx->history, item_name, idx);
|
subghz_history_get_text_item_menu(subghz->history, item_name, idx);
|
||||||
subghz_history_get_time_item_menu(subghz->txrx->history, item_time, idx);
|
subghz_history_get_time_item_menu(subghz->history, item_time, idx);
|
||||||
subghz_view_receiver_add_item_to_menu(
|
subghz_view_receiver_add_item_to_menu(
|
||||||
subghz->subghz_receiver,
|
subghz->subghz_receiver,
|
||||||
furi_string_get_cstr(item_name),
|
furi_string_get_cstr(item_name),
|
||||||
furi_string_get_cstr(item_time),
|
furi_string_get_cstr(item_time),
|
||||||
subghz_history_get_type_protocol(subghz->txrx->history, idx));
|
subghz_history_get_type_protocol(subghz->history, idx));
|
||||||
|
|
||||||
subghz_scene_receiver_update_statusbar(subghz);
|
subghz_scene_receiver_update_statusbar(subghz);
|
||||||
}
|
}
|
||||||
|
@ -125,8 +126,8 @@ void subghz_scene_receiver_on_enter(void* context) {
|
||||||
FuriString* item_time = furi_string_alloc();
|
FuriString* item_time = furi_string_alloc();
|
||||||
|
|
||||||
if(subghz_rx_key_state_get(subghz) == SubGhzRxKeyStateIDLE) {
|
if(subghz_rx_key_state_get(subghz) == SubGhzRxKeyStateIDLE) {
|
||||||
subghz_preset_init(subghz->txrx, "AM650", subghz->last_settings->frequency, NULL, 0);
|
subghz_set_preset(subghz->txrx, "AM650", subghz->last_settings->frequency, NULL, 0);
|
||||||
subghz_history_reset(subghz->txrx->history);
|
subghz_history_reset(subghz->history);
|
||||||
subghz_rx_key_state_set(subghz, SubGhzRxKeyStateStart);
|
subghz_rx_key_state_set(subghz, SubGhzRxKeyStateStart);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -135,16 +136,16 @@ void subghz_scene_receiver_on_enter(void* context) {
|
||||||
|
|
||||||
//Load history to receiver
|
//Load history to receiver
|
||||||
subghz_view_receiver_exit(subghz->subghz_receiver);
|
subghz_view_receiver_exit(subghz->subghz_receiver);
|
||||||
for(uint8_t i = 0; i < subghz_history_get_item(subghz->txrx->history); i++) {
|
for(uint8_t i = 0; i < subghz_history_get_item(subghz->history); i++) {
|
||||||
furi_string_reset(item_name);
|
furi_string_reset(item_name);
|
||||||
furi_string_reset(item_time);
|
furi_string_reset(item_time);
|
||||||
subghz_history_get_text_item_menu(subghz->txrx->history, item_name, i);
|
subghz_history_get_text_item_menu(subghz->history, item_name, i);
|
||||||
subghz_history_get_time_item_menu(subghz->txrx->history, item_time, i);
|
subghz_history_get_time_item_menu(subghz->history, item_time, i);
|
||||||
subghz_view_receiver_add_item_to_menu(
|
subghz_view_receiver_add_item_to_menu(
|
||||||
subghz->subghz_receiver,
|
subghz->subghz_receiver,
|
||||||
furi_string_get_cstr(item_name),
|
furi_string_get_cstr(item_name),
|
||||||
furi_string_get_cstr(item_time),
|
furi_string_get_cstr(item_time),
|
||||||
subghz_history_get_type_protocol(subghz->txrx->history, i));
|
subghz_history_get_type_protocol(subghz->history, i));
|
||||||
subghz_rx_key_state_set(subghz, SubGhzRxKeyStateAddKey);
|
subghz_rx_key_state_set(subghz, SubGhzRxKeyStateAddKey);
|
||||||
}
|
}
|
||||||
furi_string_free(item_name);
|
furi_string_free(item_name);
|
||||||
|
@ -183,11 +184,7 @@ void subghz_scene_receiver_on_enter(void* context) {
|
||||||
|
|
||||||
subghz->state_notifications = SubGhzNotificationStateRx;
|
subghz->state_notifications = SubGhzNotificationStateRx;
|
||||||
subghz_txrx_stop(subghz->txrx);
|
subghz_txrx_stop(subghz->txrx);
|
||||||
subghz_begin(
|
subghz_rx_start(subghz->txrx);
|
||||||
subghz->txrx,
|
|
||||||
subghz_setting_get_preset_data_by_name(
|
|
||||||
subghz->txrx->setting, furi_string_get_cstr(subghz->txrx->preset->name)));
|
|
||||||
subghz_rx(subghz->txrx, subghz->txrx->preset->frequency);
|
|
||||||
subghz_view_receiver_set_idx_menu(subghz->subghz_receiver, subghz->idx_menu_chosen);
|
subghz_view_receiver_set_idx_menu(subghz->subghz_receiver, subghz->idx_menu_chosen);
|
||||||
|
|
||||||
//to use a universal decoder, we are looking for a link to it
|
//to use a universal decoder, we are looking for a link to it
|
||||||
|
@ -215,7 +212,7 @@ bool subghz_scene_receiver_on_event(void* context, SceneManagerEvent event) {
|
||||||
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneNeedSaving);
|
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneNeedSaving);
|
||||||
} else {
|
} else {
|
||||||
subghz_rx_key_state_set(subghz, SubGhzRxKeyStateIDLE);
|
subghz_rx_key_state_set(subghz, SubGhzRxKeyStateIDLE);
|
||||||
subghz_preset_init(
|
subghz_set_preset(
|
||||||
subghz->txrx, "AM650", subghz->last_settings->frequency, NULL, 0);
|
subghz->txrx, "AM650", subghz->last_settings->frequency, NULL, 0);
|
||||||
scene_manager_search_and_switch_to_previous_scene(
|
scene_manager_search_and_switch_to_previous_scene(
|
||||||
subghz->scene_manager, SubGhzSceneStart);
|
subghz->scene_manager, SubGhzSceneStart);
|
||||||
|
@ -232,7 +229,7 @@ bool subghz_scene_receiver_on_event(void* context, SceneManagerEvent event) {
|
||||||
case SubGhzCustomEventViewReceiverDeleteItem:
|
case SubGhzCustomEventViewReceiverDeleteItem:
|
||||||
subghz->idx_menu_chosen = subghz_view_receiver_get_idx_menu(subghz->subghz_receiver);
|
subghz->idx_menu_chosen = subghz_view_receiver_get_idx_menu(subghz->subghz_receiver);
|
||||||
|
|
||||||
subghz_history_delete_item(subghz->txrx->history, subghz->idx_menu_chosen);
|
subghz_history_delete_item(subghz->history, subghz->idx_menu_chosen);
|
||||||
subghz_view_receiver_delete_element_callback(subghz->subghz_receiver);
|
subghz_view_receiver_delete_element_callback(subghz->subghz_receiver);
|
||||||
|
|
||||||
subghz_scene_receiver_update_statusbar(subghz);
|
subghz_scene_receiver_update_statusbar(subghz);
|
||||||
|
|
|
@ -93,12 +93,15 @@ uint8_t subghz_scene_receiver_config_next_frequency(const uint32_t value, void*
|
||||||
furi_assert(context);
|
furi_assert(context);
|
||||||
SubGhz* subghz = context;
|
SubGhz* subghz = context;
|
||||||
uint8_t index = 0;
|
uint8_t index = 0;
|
||||||
for(uint8_t i = 0; i < subghz_setting_get_frequency_count(subghz->txrx->setting); i++) {
|
for(uint8_t i = 0;
|
||||||
if(value == subghz_setting_get_frequency(subghz->txrx->setting, i)) {
|
i < subghz_setting_get_frequency_count(subghz_txrx_get_setting(subghz->txrx));
|
||||||
|
i++) {
|
||||||
|
if(value == subghz_setting_get_frequency(subghz_txrx_get_setting(subghz->txrx), i)) {
|
||||||
index = i;
|
index = i;
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
index = subghz_setting_get_frequency_default_index(subghz->txrx->setting);
|
index =
|
||||||
|
subghz_setting_get_frequency_default_index(subghz_txrx_get_setting(subghz->txrx));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return index;
|
return index;
|
||||||
|
@ -108,12 +111,15 @@ uint8_t subghz_scene_receiver_config_next_preset(const char* preset_name, void*
|
||||||
furi_assert(context);
|
furi_assert(context);
|
||||||
SubGhz* subghz = context;
|
SubGhz* subghz = context;
|
||||||
uint8_t index = 0;
|
uint8_t index = 0;
|
||||||
for(uint8_t i = 0; i < subghz_setting_get_preset_count(subghz->txrx->setting); i++) {
|
for(uint8_t i = 0; i < subghz_setting_get_preset_count(subghz_txrx_get_setting(subghz->txrx));
|
||||||
if(!strcmp(subghz_setting_get_preset_name(subghz->txrx->setting, i), preset_name)) {
|
i++) {
|
||||||
|
if(!strcmp(
|
||||||
|
subghz_setting_get_preset_name(subghz_txrx_get_setting(subghz->txrx), i),
|
||||||
|
preset_name)) {
|
||||||
index = i;
|
index = i;
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
// index = subghz_setting_get_frequency_default_index(subghz->txrx->setting);
|
// index = subghz_setting_get_frequency_default_index(subghz_txrx_get_setting(subghz->txrx));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return index;
|
return index;
|
||||||
|
@ -149,33 +155,48 @@ static void subghz_scene_receiver_config_set_frequency(VariableItem* item) {
|
||||||
text_buf,
|
text_buf,
|
||||||
sizeof(text_buf),
|
sizeof(text_buf),
|
||||||
"%lu.%02lu",
|
"%lu.%02lu",
|
||||||
subghz_setting_get_frequency(subghz->txrx->setting, index) / 1000000,
|
subghz_setting_get_frequency(subghz_txrx_get_setting(subghz->txrx), index) / 1000000,
|
||||||
(subghz_setting_get_frequency(subghz->txrx->setting, index) % 1000000) / 10000);
|
(subghz_setting_get_frequency(subghz_txrx_get_setting(subghz->txrx), index) %
|
||||||
|
1000000) /
|
||||||
|
10000);
|
||||||
variable_item_set_current_value_text(item, text_buf);
|
variable_item_set_current_value_text(item, text_buf);
|
||||||
subghz->txrx->preset->frequency =
|
|
||||||
subghz_setting_get_frequency(subghz->txrx->setting, index);
|
SubGhzRadioPreset preset = subghz_get_preset(subghz->txrx);
|
||||||
subghz->last_settings->frequency = subghz->txrx->preset->frequency;
|
|
||||||
|
subghz_set_preset(
|
||||||
|
subghz->txrx,
|
||||||
|
furi_string_get_cstr(preset.name),
|
||||||
|
subghz_setting_get_frequency(subghz_txrx_get_setting(subghz->txrx), index),
|
||||||
|
preset.data,
|
||||||
|
preset.data_size);
|
||||||
|
|
||||||
|
preset = subghz_get_preset(subghz->txrx);
|
||||||
|
|
||||||
|
subghz->last_settings->frequency = preset.frequency;
|
||||||
subghz_setting_set_default_frequency(
|
subghz_setting_set_default_frequency(
|
||||||
subghz->txrx->setting, subghz->txrx->preset->frequency);
|
subghz_txrx_get_setting(subghz->txrx), preset.frequency);
|
||||||
} else {
|
} else {
|
||||||
variable_item_set_current_value_index(
|
variable_item_set_current_value_index(
|
||||||
item, subghz_setting_get_frequency_default_index(subghz->txrx->setting));
|
item,
|
||||||
|
subghz_setting_get_frequency_default_index(subghz_txrx_get_setting(subghz->txrx)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void subghz_scene_receiver_config_set_preset(VariableItem* item) {
|
static void subghz_scene_receiver_config_set_preset(VariableItem* item) {
|
||||||
SubGhz* subghz = variable_item_get_context(item);
|
SubGhz* subghz = variable_item_get_context(item);
|
||||||
uint8_t index = variable_item_get_current_value_index(item);
|
uint8_t index = variable_item_get_current_value_index(item);
|
||||||
const char* preset_name = subghz_setting_get_preset_name(subghz->txrx->setting, index);
|
const char* preset_name =
|
||||||
|
subghz_setting_get_preset_name(subghz_txrx_get_setting(subghz->txrx), index);
|
||||||
variable_item_set_current_value_text(item, preset_name);
|
variable_item_set_current_value_text(item, preset_name);
|
||||||
//subghz->last_settings->preset = index;
|
//subghz->last_settings->preset = index;
|
||||||
|
SubGhzRadioPreset preset = subghz_get_preset(subghz->txrx);
|
||||||
|
|
||||||
subghz_preset_init(
|
subghz_set_preset(
|
||||||
subghz->txrx,
|
subghz->txrx,
|
||||||
preset_name,
|
preset_name,
|
||||||
subghz->txrx->preset->frequency,
|
preset.frequency,
|
||||||
subghz_setting_get_preset_data(subghz->txrx->setting, index),
|
subghz_setting_get_preset_data(subghz_txrx_get_setting(subghz->txrx), index),
|
||||||
subghz_setting_get_preset_data_size(subghz->txrx->setting, index));
|
subghz_setting_get_preset_data_size(subghz_txrx_get_setting(subghz->txrx), index));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void subghz_scene_receiver_config_set_hopping_running(VariableItem* item) {
|
static void subghz_scene_receiver_config_set_hopping_running(VariableItem* item) {
|
||||||
|
@ -189,18 +210,25 @@ static void subghz_scene_receiver_config_set_hopping_running(VariableItem* item)
|
||||||
text_buf,
|
text_buf,
|
||||||
sizeof(text_buf),
|
sizeof(text_buf),
|
||||||
"%lu.%02lu",
|
"%lu.%02lu",
|
||||||
subghz_setting_get_default_frequency(subghz->txrx->setting) / 1000000,
|
subghz_setting_get_default_frequency(subghz_txrx_get_setting(subghz->txrx)) / 1000000,
|
||||||
(subghz_setting_get_default_frequency(subghz->txrx->setting) % 1000000) / 10000);
|
(subghz_setting_get_default_frequency(subghz_txrx_get_setting(subghz->txrx)) %
|
||||||
|
1000000) /
|
||||||
|
10000);
|
||||||
variable_item_set_current_value_text(
|
variable_item_set_current_value_text(
|
||||||
(VariableItem*)scene_manager_get_scene_state(
|
(VariableItem*)scene_manager_get_scene_state(
|
||||||
subghz->scene_manager, SubGhzSceneReceiverConfig),
|
subghz->scene_manager, SubGhzSceneReceiverConfig),
|
||||||
text_buf);
|
text_buf);
|
||||||
subghz->txrx->preset->frequency =
|
SubGhzRadioPreset preset = subghz_get_preset(subghz->txrx);
|
||||||
subghz_setting_get_default_frequency(subghz->txrx->setting);
|
subghz_set_preset(
|
||||||
|
subghz->txrx,
|
||||||
|
furi_string_get_cstr(preset.name),
|
||||||
|
subghz_setting_get_default_frequency(subghz_txrx_get_setting(subghz->txrx)),
|
||||||
|
preset.data,
|
||||||
|
preset.data_size);
|
||||||
variable_item_set_current_value_index(
|
variable_item_set_current_value_index(
|
||||||
(VariableItem*)scene_manager_get_scene_state(
|
(VariableItem*)scene_manager_get_scene_state(
|
||||||
subghz->scene_manager, SubGhzSceneReceiverConfig),
|
subghz->scene_manager, SubGhzSceneReceiverConfig),
|
||||||
subghz_setting_get_frequency_default_index(subghz->txrx->setting));
|
subghz_setting_get_frequency_default_index(subghz_txrx_get_setting(subghz->txrx)));
|
||||||
} else {
|
} else {
|
||||||
variable_item_set_current_value_text(
|
variable_item_set_current_value_text(
|
||||||
(VariableItem*)scene_manager_get_scene_state(
|
(VariableItem*)scene_manager_get_scene_state(
|
||||||
|
@ -209,7 +237,7 @@ static void subghz_scene_receiver_config_set_hopping_running(VariableItem* item)
|
||||||
variable_item_set_current_value_index(
|
variable_item_set_current_value_index(
|
||||||
(VariableItem*)scene_manager_get_scene_state(
|
(VariableItem*)scene_manager_get_scene_state(
|
||||||
subghz->scene_manager, SubGhzSceneReceiverConfig),
|
subghz->scene_manager, SubGhzSceneReceiverConfig),
|
||||||
subghz_setting_get_frequency_default_index(subghz->txrx->setting));
|
subghz_setting_get_frequency_default_index(subghz_txrx_get_setting(subghz->txrx)));
|
||||||
}
|
}
|
||||||
|
|
||||||
subghz_hopper_set_state(subghz->txrx, hopping_value[index]);
|
subghz_hopper_set_state(subghz->txrx, hopping_value[index]);
|
||||||
|
@ -277,15 +305,15 @@ void subghz_scene_receiver_config_on_enter(void* context) {
|
||||||
SubGhz* subghz = context;
|
SubGhz* subghz = context;
|
||||||
VariableItem* item;
|
VariableItem* item;
|
||||||
uint8_t value_index;
|
uint8_t value_index;
|
||||||
|
SubGhzRadioPreset preset = subghz_get_preset(subghz->txrx);
|
||||||
|
|
||||||
item = variable_item_list_add(
|
item = variable_item_list_add(
|
||||||
subghz->variable_item_list,
|
subghz->variable_item_list,
|
||||||
"Frequency:",
|
"Frequency:",
|
||||||
subghz_setting_get_frequency_count(subghz->txrx->setting),
|
subghz_setting_get_frequency_count(subghz_txrx_get_setting(subghz->txrx)),
|
||||||
subghz_scene_receiver_config_set_frequency,
|
subghz_scene_receiver_config_set_frequency,
|
||||||
subghz);
|
subghz);
|
||||||
value_index =
|
value_index = subghz_scene_receiver_config_next_frequency(preset.frequency, subghz);
|
||||||
subghz_scene_receiver_config_next_frequency(subghz->txrx->preset->frequency, subghz);
|
|
||||||
scene_manager_set_scene_state(
|
scene_manager_set_scene_state(
|
||||||
subghz->scene_manager, SubGhzSceneReceiverConfig, (uint32_t)item);
|
subghz->scene_manager, SubGhzSceneReceiverConfig, (uint32_t)item);
|
||||||
variable_item_set_current_value_index(item, value_index);
|
variable_item_set_current_value_index(item, value_index);
|
||||||
|
@ -294,21 +322,23 @@ void subghz_scene_receiver_config_on_enter(void* context) {
|
||||||
text_buf,
|
text_buf,
|
||||||
sizeof(text_buf),
|
sizeof(text_buf),
|
||||||
"%lu.%02lu",
|
"%lu.%02lu",
|
||||||
subghz_setting_get_frequency(subghz->txrx->setting, value_index) / 1000000,
|
subghz_setting_get_frequency(subghz_txrx_get_setting(subghz->txrx), value_index) / 1000000,
|
||||||
(subghz_setting_get_frequency(subghz->txrx->setting, value_index) % 1000000) / 10000);
|
(subghz_setting_get_frequency(subghz_txrx_get_setting(subghz->txrx), value_index) %
|
||||||
|
1000000) /
|
||||||
|
10000);
|
||||||
variable_item_set_current_value_text(item, text_buf);
|
variable_item_set_current_value_text(item, text_buf);
|
||||||
|
|
||||||
item = variable_item_list_add(
|
item = variable_item_list_add(
|
||||||
subghz->variable_item_list,
|
subghz->variable_item_list,
|
||||||
"Modulation:",
|
"Modulation:",
|
||||||
subghz_setting_get_preset_count(subghz->txrx->setting),
|
subghz_setting_get_preset_count(subghz_txrx_get_setting(subghz->txrx)),
|
||||||
subghz_scene_receiver_config_set_preset,
|
subghz_scene_receiver_config_set_preset,
|
||||||
subghz);
|
subghz);
|
||||||
value_index = subghz_scene_receiver_config_next_preset(
|
value_index =
|
||||||
furi_string_get_cstr(subghz->txrx->preset->name), subghz);
|
subghz_scene_receiver_config_next_preset(furi_string_get_cstr(preset.name), subghz);
|
||||||
variable_item_set_current_value_index(item, value_index);
|
variable_item_set_current_value_index(item, value_index);
|
||||||
variable_item_set_current_value_text(
|
variable_item_set_current_value_text(
|
||||||
item, subghz_setting_get_preset_name(subghz->txrx->setting, value_index));
|
item, subghz_setting_get_preset_name(subghz_txrx_get_setting(subghz->txrx), value_index));
|
||||||
|
|
||||||
if(scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneReadRAW) !=
|
if(scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneReadRAW) !=
|
||||||
SubGhzCustomEventManagerSet) {
|
SubGhzCustomEventManagerSet) {
|
||||||
|
|
|
@ -26,15 +26,15 @@ static bool subghz_scene_receiver_info_update_parser(void* context) {
|
||||||
|
|
||||||
if(subghz_txrx_load_decoder_by_name_protocol(
|
if(subghz_txrx_load_decoder_by_name_protocol(
|
||||||
subghz->txrx,
|
subghz->txrx,
|
||||||
subghz_history_get_protocol_name(subghz->txrx->history, subghz->idx_menu_chosen))) {
|
subghz_history_get_protocol_name(subghz->history, subghz->idx_menu_chosen))) {
|
||||||
//todo we are trying to deserialize without checking for errors, since it is assumed that we just received this chignal
|
//todo we are trying to deserialize without checking for errors, since it is assumed that we just received this chignal
|
||||||
subghz_protocol_decoder_base_deserialize(
|
subghz_protocol_decoder_base_deserialize(
|
||||||
subghz_txrx_get_decoder(subghz->txrx),
|
subghz_txrx_get_decoder(subghz->txrx),
|
||||||
subghz_history_get_raw_data(subghz->txrx->history, subghz->idx_menu_chosen));
|
subghz_history_get_raw_data(subghz->history, subghz->idx_menu_chosen));
|
||||||
|
|
||||||
SubGhzRadioPreset* preset =
|
SubGhzRadioPreset* preset =
|
||||||
subghz_history_get_radio_preset(subghz->txrx->history, subghz->idx_menu_chosen);
|
subghz_history_get_radio_preset(subghz->history, subghz->idx_menu_chosen);
|
||||||
subghz_preset_init(
|
subghz_set_preset(
|
||||||
subghz->txrx,
|
subghz->txrx,
|
||||||
furi_string_get_cstr(preset->name),
|
furi_string_get_cstr(preset->name),
|
||||||
preset->frequency,
|
preset->frequency,
|
||||||
|
@ -123,21 +123,14 @@ bool subghz_scene_receiver_info_on_event(void* context, SceneManagerEvent event)
|
||||||
//CC1101 Stop RX -> Start TX
|
//CC1101 Stop RX -> Start TX
|
||||||
subghz_subghz_hopper_set_pause(subghz->txrx);
|
subghz_subghz_hopper_set_pause(subghz->txrx);
|
||||||
|
|
||||||
subghz_txrx_stop(subghz->txrx);
|
|
||||||
|
|
||||||
if(!subghz_scene_receiver_info_update_parser(subghz)) {
|
if(!subghz_scene_receiver_info_update_parser(subghz)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!subghz_tx_start(
|
if(!subghz_tx_start(
|
||||||
subghz->txrx,
|
subghz->txrx,
|
||||||
subghz_history_get_raw_data(subghz->txrx->history, subghz->idx_menu_chosen))) {
|
subghz_history_get_raw_data(subghz->history, subghz->idx_menu_chosen))) {
|
||||||
subghz_txrx_stop(subghz->txrx);
|
subghz_rx_start(subghz->txrx);
|
||||||
subghz_begin(
|
|
||||||
subghz->txrx,
|
|
||||||
subghz_setting_get_preset_data_by_name(
|
|
||||||
subghz->txrx->setting, furi_string_get_cstr(subghz->txrx->preset->name)));
|
|
||||||
subghz_rx(subghz->txrx, subghz->txrx->preset->frequency);
|
|
||||||
subghz_hopper_remove_pause(subghz->txrx);
|
subghz_hopper_remove_pause(subghz->txrx);
|
||||||
subghz->state_notifications = SubGhzNotificationStateRx;
|
subghz->state_notifications = SubGhzNotificationStateRx;
|
||||||
} else {
|
} else {
|
||||||
|
@ -153,11 +146,7 @@ bool subghz_scene_receiver_info_on_event(void* context, SceneManagerEvent event)
|
||||||
|
|
||||||
subghz_txrx_stop(subghz->txrx);
|
subghz_txrx_stop(subghz->txrx);
|
||||||
if(!subghz->in_decoder_scene) {
|
if(!subghz->in_decoder_scene) {
|
||||||
subghz_begin(
|
subghz_rx_start(subghz->txrx);
|
||||||
subghz->txrx,
|
|
||||||
subghz_setting_get_preset_data_by_name(
|
|
||||||
subghz->txrx->setting, furi_string_get_cstr(subghz->txrx->preset->name)));
|
|
||||||
subghz_rx(subghz->txrx, subghz->txrx->preset->frequency);
|
|
||||||
|
|
||||||
subghz_hopper_remove_pause(subghz->txrx);
|
subghz_hopper_remove_pause(subghz->txrx);
|
||||||
subghz->state_notifications = SubGhzNotificationStateRx;
|
subghz->state_notifications = SubGhzNotificationStateRx;
|
||||||
|
|
|
@ -156,7 +156,7 @@ bool subghz_scene_save_name_on_event(void* context, SceneManagerEvent event) {
|
||||||
subghz_save_protocol_to_file(
|
subghz_save_protocol_to_file(
|
||||||
subghz,
|
subghz,
|
||||||
subghz_history_get_raw_data(
|
subghz_history_get_raw_data(
|
||||||
subghz->txrx->history, subghz->idx_menu_chosen),
|
subghz->history, subghz->idx_menu_chosen),
|
||||||
furi_string_get_cstr(subghz->file_path));
|
furi_string_get_cstr(subghz->file_path));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,7 +72,7 @@ bool subghz_scene_transmitter_on_event(void* context, SceneManagerEvent event) {
|
||||||
if(event.type == SceneManagerEventTypeCustom) {
|
if(event.type == SceneManagerEventTypeCustom) {
|
||||||
if(event.event == SubGhzCustomEventViewTransmitterSendStart) {
|
if(event.event == SubGhzCustomEventViewTransmitterSendStart) {
|
||||||
subghz->state_notifications = SubGhzNotificationStateIDLE;
|
subghz->state_notifications = SubGhzNotificationStateIDLE;
|
||||||
subghz_txrx_stop(subghz->txrx);
|
|
||||||
if(subghz_tx_start(subghz->txrx, subghz_txtx_get_fff_data(subghz->txrx))) {
|
if(subghz_tx_start(subghz->txrx, subghz_txtx_get_fff_data(subghz->txrx))) {
|
||||||
subghz->state_notifications = SubGhzNotificationStateTx;
|
subghz->state_notifications = SubGhzNotificationStateTx;
|
||||||
subghz_scene_transmitter_update_data_show(subghz);
|
subghz_scene_transmitter_update_data_show(subghz);
|
||||||
|
|
|
@ -272,9 +272,9 @@ SubGhz* subghz_alloc(bool alloc_for_tx_only) {
|
||||||
subghz->txrx->preset = malloc(sizeof(SubGhzRadioPreset));
|
subghz->txrx->preset = malloc(sizeof(SubGhzRadioPreset));
|
||||||
subghz->txrx->preset->name = furi_string_alloc();
|
subghz->txrx->preset->name = furi_string_alloc();
|
||||||
if(!alloc_for_tx_only) {
|
if(!alloc_for_tx_only) {
|
||||||
subghz_preset_init(subghz->txrx, "AM650", subghz->last_settings->frequency, NULL, 0);
|
subghz_set_preset(subghz->txrx, "AM650", subghz->last_settings->frequency, NULL, 0);
|
||||||
} else {
|
} else {
|
||||||
subghz_preset_init(
|
subghz_set_preset(
|
||||||
subghz->txrx,
|
subghz->txrx,
|
||||||
"AM650",
|
"AM650",
|
||||||
subghz_setting_get_default_frequency(subghz->txrx->setting),
|
subghz_setting_get_default_frequency(subghz->txrx->setting),
|
||||||
|
@ -287,7 +287,7 @@ SubGhz* subghz_alloc(bool alloc_for_tx_only) {
|
||||||
subghz_rx_key_state_set(subghz, SubGhzRxKeyStateIDLE);
|
subghz_rx_key_state_set(subghz, SubGhzRxKeyStateIDLE);
|
||||||
subghz->txrx->debug_pin_state = false;
|
subghz->txrx->debug_pin_state = false;
|
||||||
if(!alloc_for_tx_only) {
|
if(!alloc_for_tx_only) {
|
||||||
subghz->txrx->history = subghz_history_alloc();
|
subghz->history = subghz_history_alloc();
|
||||||
}
|
}
|
||||||
|
|
||||||
subghz->txrx->worker = subghz_worker_alloc();
|
subghz->txrx->worker = subghz_worker_alloc();
|
||||||
|
@ -333,6 +333,8 @@ void subghz_free(SubGhz* subghz, bool alloc_for_tx_only) {
|
||||||
}
|
}
|
||||||
|
|
||||||
subghz_speaker_off(subghz->txrx);
|
subghz_speaker_off(subghz->txrx);
|
||||||
|
subghz_txrx_stop(subghz->txrx);
|
||||||
|
subghz_sleep(subghz->txrx);
|
||||||
|
|
||||||
#if FURI_DEBUG
|
#if FURI_DEBUG
|
||||||
// Packet Test
|
// Packet Test
|
||||||
|
@ -421,7 +423,7 @@ void subghz_free(SubGhz* subghz, bool alloc_for_tx_only) {
|
||||||
|
|
||||||
flipper_format_free(subghz->txrx->fff_data);
|
flipper_format_free(subghz->txrx->fff_data);
|
||||||
if(!alloc_for_tx_only) {
|
if(!alloc_for_tx_only) {
|
||||||
subghz_history_free(subghz->txrx->history);
|
subghz_history_free(subghz->history);
|
||||||
}
|
}
|
||||||
furi_string_free(subghz->txrx->preset->name);
|
furi_string_free(subghz->txrx->preset->name);
|
||||||
free(subghz->txrx->preset);
|
free(subghz->txrx->preset);
|
||||||
|
|
|
@ -91,7 +91,7 @@ bool subghz_key_load(SubGhz* subghz, const char* file_path, bool show_dialog) {
|
||||||
}
|
}
|
||||||
|
|
||||||
furi_string_set_str(
|
furi_string_set_str(
|
||||||
temp_str, subghz_set_preset(subghz->txrx, furi_string_get_cstr(temp_str)));
|
temp_str, subghz_get_name_preset(subghz->txrx, furi_string_get_cstr(temp_str)));
|
||||||
if(temp_str == NULL) {
|
if(temp_str == NULL) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -112,7 +112,7 @@ bool subghz_key_load(SubGhz* subghz, const char* file_path, bool show_dialog) {
|
||||||
}
|
}
|
||||||
size_t preset_index = subghz_setting_get_inx_preset_by_name(
|
size_t preset_index = subghz_setting_get_inx_preset_by_name(
|
||||||
subghz_txrx_get_setting(subghz->txrx), furi_string_get_cstr(temp_str));
|
subghz_txrx_get_setting(subghz->txrx), furi_string_get_cstr(temp_str));
|
||||||
subghz_preset_init(
|
subghz_set_preset(
|
||||||
subghz->txrx,
|
subghz->txrx,
|
||||||
furi_string_get_cstr(temp_str),
|
furi_string_get_cstr(temp_str),
|
||||||
temp_data32,
|
temp_data32,
|
||||||
|
|
|
@ -111,6 +111,7 @@ struct SubGhz {
|
||||||
|
|
||||||
SubGhzThresholdRssi* threshold_rssi;
|
SubGhzThresholdRssi* threshold_rssi;
|
||||||
SubGhzRxKeyState rx_key_state;
|
SubGhzRxKeyState rx_key_state;
|
||||||
|
SubGhzHistory* history;
|
||||||
|
|
||||||
uint16_t idx_menu_chosen;
|
uint16_t idx_menu_chosen;
|
||||||
SubGhzLoadTypeFile load_type_file;
|
SubGhzLoadTypeFile load_type_file;
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
#define TAG "SubGhz"
|
#define TAG "SubGhz"
|
||||||
|
|
||||||
void subghz_preset_init(
|
void subghz_set_preset(
|
||||||
SubGhzTxRx* txrx,
|
SubGhzTxRx* txrx,
|
||||||
const char* preset_name,
|
const char* preset_name,
|
||||||
uint32_t frequency,
|
uint32_t frequency,
|
||||||
|
@ -37,7 +37,7 @@ void subghz_get_frequency_modulation(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* subghz_set_preset(SubGhzTxRx* txrx, const char* preset) {
|
const char* subghz_get_name_preset(SubGhzTxRx* txrx, const char* preset) {
|
||||||
UNUSED(txrx);
|
UNUSED(txrx);
|
||||||
const char* preset_name = NULL;
|
const char* preset_name = NULL;
|
||||||
if(!strcmp(preset, "FuriHalSubGhzPresetOok270Async")) {
|
if(!strcmp(preset, "FuriHalSubGhzPresetOok270Async")) {
|
||||||
|
@ -56,7 +56,12 @@ const char* subghz_set_preset(SubGhzTxRx* txrx, const char* preset) {
|
||||||
return preset_name;
|
return preset_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
void subghz_begin(SubGhzTxRx* txrx, uint8_t* preset_data) {
|
SubGhzRadioPreset subghz_get_preset(SubGhzTxRx* txrx) {
|
||||||
|
furi_assert(txrx);
|
||||||
|
return *txrx->preset;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void subghz_begin(SubGhzTxRx* txrx, uint8_t* preset_data) {
|
||||||
furi_assert(txrx);
|
furi_assert(txrx);
|
||||||
furi_hal_subghz_reset();
|
furi_hal_subghz_reset();
|
||||||
furi_hal_subghz_idle();
|
furi_hal_subghz_idle();
|
||||||
|
@ -65,7 +70,7 @@ void subghz_begin(SubGhzTxRx* txrx, uint8_t* preset_data) {
|
||||||
txrx->txrx_state = SubGhzTxRxStateIDLE;
|
txrx->txrx_state = SubGhzTxRxStateIDLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t subghz_rx(SubGhzTxRx* txrx, uint32_t frequency) {
|
static uint32_t subghz_rx(SubGhzTxRx* txrx, uint32_t frequency) {
|
||||||
furi_assert(txrx);
|
furi_assert(txrx);
|
||||||
if(!furi_hal_subghz_is_frequency_valid(frequency)) {
|
if(!furi_hal_subghz_is_frequency_valid(frequency)) {
|
||||||
furi_crash("SubGhz: Incorrect RX frequency.");
|
furi_crash("SubGhz: Incorrect RX frequency.");
|
||||||
|
@ -106,11 +111,11 @@ static void subghz_rx_end(SubGhzTxRx* txrx) {
|
||||||
txrx->txrx_state = SubGhzTxRxStateIDLE;
|
txrx->txrx_state = SubGhzTxRxStateIDLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// static void subghz_sleep(SubGhzTxRx* txrx) {
|
void subghz_sleep(SubGhzTxRx* txrx) {
|
||||||
// furi_assert(txrx);
|
furi_assert(txrx);
|
||||||
// furi_hal_subghz_sleep();
|
furi_hal_subghz_sleep();
|
||||||
// txrx->txrx_state = SubGhzTxRxStateSleep;
|
txrx->txrx_state = SubGhzTxRxStateSleep;
|
||||||
// }
|
}
|
||||||
|
|
||||||
static bool subghz_tx(SubGhzTxRx* txrx, uint32_t frequency) {
|
static bool subghz_tx(SubGhzTxRx* txrx, uint32_t frequency) {
|
||||||
furi_assert(txrx);
|
furi_assert(txrx);
|
||||||
|
@ -133,6 +138,9 @@ static bool subghz_tx(SubGhzTxRx* txrx, uint32_t frequency) {
|
||||||
|
|
||||||
bool subghz_tx_start(SubGhzTxRx* txrx, FlipperFormat* flipper_format) {
|
bool subghz_tx_start(SubGhzTxRx* txrx, FlipperFormat* flipper_format) {
|
||||||
furi_assert(txrx);
|
furi_assert(txrx);
|
||||||
|
furi_assert(flipper_format);
|
||||||
|
|
||||||
|
subghz_txrx_stop(txrx);
|
||||||
|
|
||||||
bool ret = false;
|
bool ret = false;
|
||||||
FuriString* temp_str = furi_string_alloc();
|
FuriString* temp_str = furi_string_alloc();
|
||||||
|
@ -200,6 +208,16 @@ bool subghz_tx_start(SubGhzTxRx* txrx, FlipperFormat* flipper_format) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void subghz_rx_start(SubGhzTxRx* txrx) {
|
||||||
|
furi_assert(txrx);
|
||||||
|
subghz_txrx_stop(txrx);
|
||||||
|
subghz_begin(
|
||||||
|
txrx,
|
||||||
|
subghz_setting_get_preset_data_by_name(
|
||||||
|
subghz_txrx_get_setting(txrx), furi_string_get_cstr(txrx->preset->name)));
|
||||||
|
subghz_rx(txrx, txrx->preset->frequency);
|
||||||
|
}
|
||||||
|
|
||||||
void subghz_txrx_need_save_callback_set(
|
void subghz_txrx_need_save_callback_set(
|
||||||
SubGhzTxRx* txrx,
|
SubGhzTxRx* txrx,
|
||||||
SubGhzTxRxNeedSaveCallback callback,
|
SubGhzTxRxNeedSaveCallback callback,
|
||||||
|
@ -449,7 +467,7 @@ bool subghz_gen_data_protocol(
|
||||||
|
|
||||||
bool res = false;
|
bool res = false;
|
||||||
|
|
||||||
subghz_preset_init(txrx, preset_name, frequency, NULL, 0);
|
subghz_set_preset(txrx, preset_name, frequency, NULL, 0);
|
||||||
txrx->decoder_result =
|
txrx->decoder_result =
|
||||||
subghz_receiver_search_decoder_base_by_name(txrx->receiver, protocol_name);
|
subghz_receiver_search_decoder_base_by_name(txrx->receiver, protocol_name);
|
||||||
|
|
||||||
|
@ -520,7 +538,7 @@ bool subghz_scene_set_type_submenu_gen_data_keeloq( //TODO rename
|
||||||
|
|
||||||
txrx->transmitter =
|
txrx->transmitter =
|
||||||
subghz_transmitter_alloc_init(txrx->environment, SUBGHZ_PROTOCOL_KEELOQ_NAME);
|
subghz_transmitter_alloc_init(txrx->environment, SUBGHZ_PROTOCOL_KEELOQ_NAME);
|
||||||
subghz_preset_init(txrx, preset_name, frequency, NULL, 0);
|
subghz_set_preset(txrx, preset_name, frequency, NULL, 0);
|
||||||
|
|
||||||
if(txrx->transmitter && subghz_protocol_keeloq_create_data(
|
if(txrx->transmitter && subghz_protocol_keeloq_create_data(
|
||||||
subghz_transmitter_get_protocol_instance(txrx->transmitter),
|
subghz_transmitter_get_protocol_instance(txrx->transmitter),
|
||||||
|
@ -552,7 +570,7 @@ bool subghz_scene_set_type_submenu_gen_data_keeloq_bft( //TODO rename
|
||||||
|
|
||||||
txrx->transmitter =
|
txrx->transmitter =
|
||||||
subghz_transmitter_alloc_init(txrx->environment, SUBGHZ_PROTOCOL_KEELOQ_NAME);
|
subghz_transmitter_alloc_init(txrx->environment, SUBGHZ_PROTOCOL_KEELOQ_NAME);
|
||||||
subghz_preset_init(txrx, preset_name, frequency, NULL, 0);
|
subghz_set_preset(txrx, preset_name, frequency, NULL, 0);
|
||||||
|
|
||||||
if(txrx->transmitter && subghz_protocol_keeloq_bft_create_data(
|
if(txrx->transmitter && subghz_protocol_keeloq_bft_create_data(
|
||||||
subghz_transmitter_get_protocol_instance(txrx->transmitter),
|
subghz_transmitter_get_protocol_instance(txrx->transmitter),
|
||||||
|
@ -596,7 +614,7 @@ bool subghz_scene_set_type_submenu_gen_data_nice_flor( //TODO rename
|
||||||
|
|
||||||
txrx->transmitter =
|
txrx->transmitter =
|
||||||
subghz_transmitter_alloc_init(txrx->environment, SUBGHZ_PROTOCOL_NICE_FLOR_S_NAME);
|
subghz_transmitter_alloc_init(txrx->environment, SUBGHZ_PROTOCOL_NICE_FLOR_S_NAME);
|
||||||
subghz_preset_init(txrx, preset_name, frequency, NULL, 0);
|
subghz_set_preset(txrx, preset_name, frequency, NULL, 0);
|
||||||
|
|
||||||
if(txrx->transmitter && subghz_protocol_nice_flor_s_create_data(
|
if(txrx->transmitter && subghz_protocol_nice_flor_s_create_data(
|
||||||
subghz_transmitter_get_protocol_instance(txrx->transmitter),
|
subghz_transmitter_get_protocol_instance(txrx->transmitter),
|
||||||
|
@ -629,7 +647,7 @@ bool subghz_scene_set_type_submenu_gen_data_faac_slh( //TODO rename
|
||||||
|
|
||||||
txrx->transmitter =
|
txrx->transmitter =
|
||||||
subghz_transmitter_alloc_init(txrx->environment, SUBGHZ_PROTOCOL_FAAC_SLH_NAME);
|
subghz_transmitter_alloc_init(txrx->environment, SUBGHZ_PROTOCOL_FAAC_SLH_NAME);
|
||||||
subghz_preset_init(txrx, preset_name, frequency, NULL, 0);
|
subghz_set_preset(txrx, preset_name, frequency, NULL, 0);
|
||||||
|
|
||||||
if(txrx->transmitter && subghz_protocol_faac_slh_create_data(
|
if(txrx->transmitter && subghz_protocol_faac_slh_create_data(
|
||||||
subghz_transmitter_get_protocol_instance(txrx->transmitter),
|
subghz_transmitter_get_protocol_instance(txrx->transmitter),
|
||||||
|
@ -670,7 +688,7 @@ bool subghz_scene_set_type_submenu_gen_data_alutech_at_4n( //TODO rename
|
||||||
|
|
||||||
txrx->transmitter =
|
txrx->transmitter =
|
||||||
subghz_transmitter_alloc_init(txrx->environment, SUBGHZ_PROTOCOL_ALUTECH_AT_4N_NAME);
|
subghz_transmitter_alloc_init(txrx->environment, SUBGHZ_PROTOCOL_ALUTECH_AT_4N_NAME);
|
||||||
subghz_preset_init(txrx, preset_name, frequency, NULL, 0);
|
subghz_set_preset(txrx, preset_name, frequency, NULL, 0);
|
||||||
|
|
||||||
if(txrx->transmitter && subghz_protocol_alutech_at_4n_create_data(
|
if(txrx->transmitter && subghz_protocol_alutech_at_4n_create_data(
|
||||||
subghz_transmitter_get_protocol_instance(txrx->transmitter),
|
subghz_transmitter_get_protocol_instance(txrx->transmitter),
|
||||||
|
@ -700,7 +718,7 @@ bool subghz_scene_set_type_submenu_gen_data_somfy_telis( //TODO rename
|
||||||
|
|
||||||
txrx->transmitter =
|
txrx->transmitter =
|
||||||
subghz_transmitter_alloc_init(txrx->environment, SUBGHZ_PROTOCOL_SOMFY_TELIS_NAME);
|
subghz_transmitter_alloc_init(txrx->environment, SUBGHZ_PROTOCOL_SOMFY_TELIS_NAME);
|
||||||
subghz_preset_init(txrx, preset_name, frequency, NULL, 0);
|
subghz_set_preset(txrx, preset_name, frequency, NULL, 0);
|
||||||
|
|
||||||
if(txrx->transmitter && subghz_protocol_somfy_telis_create_data(
|
if(txrx->transmitter && subghz_protocol_somfy_telis_create_data(
|
||||||
subghz_transmitter_get_protocol_instance(txrx->transmitter),
|
subghz_transmitter_get_protocol_instance(txrx->transmitter),
|
||||||
|
@ -729,7 +747,7 @@ bool subghz_gen_secplus_v2_protocol(
|
||||||
bool ret = false;
|
bool ret = false;
|
||||||
txrx->transmitter =
|
txrx->transmitter =
|
||||||
subghz_transmitter_alloc_init(txrx->environment, SUBGHZ_PROTOCOL_SECPLUS_V2_NAME);
|
subghz_transmitter_alloc_init(txrx->environment, SUBGHZ_PROTOCOL_SECPLUS_V2_NAME);
|
||||||
subghz_preset_init(txrx, name_preset, frequency, NULL, 0);
|
subghz_set_preset(txrx, name_preset, frequency, NULL, 0);
|
||||||
if(txrx->transmitter) {
|
if(txrx->transmitter) {
|
||||||
subghz_protocol_secplus_v2_create_data(
|
subghz_protocol_secplus_v2_create_data(
|
||||||
subghz_transmitter_get_protocol_instance(txrx->transmitter),
|
subghz_transmitter_get_protocol_instance(txrx->transmitter),
|
||||||
|
|
|
@ -21,7 +21,6 @@ struct SubGhzTxRx {
|
||||||
FlipperFormat* fff_data;
|
FlipperFormat* fff_data;
|
||||||
|
|
||||||
SubGhzRadioPreset* preset;
|
SubGhzRadioPreset* preset;
|
||||||
SubGhzHistory* history;
|
|
||||||
SubGhzSetting* setting;
|
SubGhzSetting* setting;
|
||||||
|
|
||||||
uint8_t hopper_timeout;
|
uint8_t hopper_timeout;
|
||||||
|
@ -40,26 +39,27 @@ struct SubGhzTxRx {
|
||||||
|
|
||||||
typedef struct SubGhzTxRx SubGhzTxRx;
|
typedef struct SubGhzTxRx SubGhzTxRx;
|
||||||
|
|
||||||
void subghz_preset_init(
|
void subghz_set_preset(
|
||||||
SubGhzTxRx* txrx,
|
SubGhzTxRx* txrx,
|
||||||
const char* preset_name,
|
const char* preset_name,
|
||||||
uint32_t frequency,
|
uint32_t frequency,
|
||||||
uint8_t* preset_data,
|
uint8_t* preset_data,
|
||||||
size_t preset_data_size);
|
size_t preset_data_size);
|
||||||
|
|
||||||
const char* subghz_set_preset(SubGhzTxRx* txrx, const char* preset);
|
const char* subghz_get_name_preset(SubGhzTxRx* txrx, const char* preset);
|
||||||
|
SubGhzRadioPreset subghz_get_preset(SubGhzTxRx* txrx);
|
||||||
|
|
||||||
void subghz_get_frequency_modulation(
|
void subghz_get_frequency_modulation(
|
||||||
SubGhzTxRx* txrx,
|
SubGhzTxRx* txrx,
|
||||||
FuriString* frequency,
|
FuriString* frequency,
|
||||||
FuriString* modulation,
|
FuriString* modulation,
|
||||||
bool long_name);
|
bool long_name);
|
||||||
void subghz_begin(SubGhzTxRx* txrx, uint8_t* preset_data);
|
|
||||||
uint32_t subghz_rx(SubGhzTxRx* txrx, uint32_t frequency);
|
|
||||||
bool subghz_tx_start(SubGhzTxRx* txrx, FlipperFormat* flipper_format);
|
bool subghz_tx_start(SubGhzTxRx* txrx, FlipperFormat* flipper_format);
|
||||||
//void subghz_rx_end(SubGhzTxRx* txrx); //depricated
|
//void subghz_rx_end(SubGhzTxRx* txrx); //depricated
|
||||||
//void subghz_sleep(SubGhzTxRx* txrx);
|
void subghz_rx_start(SubGhzTxRx* txrx);
|
||||||
|
|
||||||
void subghz_txrx_stop(SubGhzTxRx* txrx);
|
void subghz_txrx_stop(SubGhzTxRx* txrx);
|
||||||
|
void subghz_sleep(SubGhzTxRx* txrx);
|
||||||
|
|
||||||
SubGhzTxRxState subghz_txrx_get_state(SubGhzTxRx* txrx);
|
SubGhzTxRxState subghz_txrx_get_state(SubGhzTxRx* txrx);
|
||||||
|
|
||||||
void subghz_hopper_update(SubGhzTxRx* txrx);
|
void subghz_hopper_update(SubGhzTxRx* txrx);
|
||||||
|
|
Loading…
Reference in a new issue