Skip to content

Commit b62b795

Browse files
authored
Merge pull request #80 from derskythe/fix-read-in-readraw-crash
Fix-read-in-readraw-crash
2 parents 87a14b9 + dce5af5 commit b62b795

26 files changed

+736
-221
lines changed

applications/main/subghz/helpers/subghz_types.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,3 +86,5 @@ typedef enum {
8686
SubGhzViewReceiverModeLive,
8787
SubGhzViewReceiverModeFile,
8888
} SubGhzViewReceiverMode;
89+
90+
#define SUBGHZ_HISTORY_REMOVE_SAVED_ITEMS 1

applications/main/subghz/scenes/subghz_scene_config.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,12 @@ ADD_SCENE(subghz, show_only_rx, ShowOnlyRx)
1212
ADD_SCENE(subghz, saved_menu, SavedMenu)
1313
ADD_SCENE(subghz, delete, Delete)
1414
ADD_SCENE(subghz, delete_success, DeleteSuccess)
15+
#if FURI_DEBUG
1516
ADD_SCENE(subghz, test, Test)
1617
ADD_SCENE(subghz, test_static, TestStatic)
1718
ADD_SCENE(subghz, test_carrier, TestCarrier)
1819
ADD_SCENE(subghz, test_packet, TestPacket)
20+
#endif
1921
ADD_SCENE(subghz, set_type, SetType)
2022
ADD_SCENE(subghz, set_fix_faac_868, SetFixFaac868)
2123
ADD_SCENE(subghz, set_cnt_faac_868, SetCntFaac868)

applications/main/subghz/scenes/subghz_scene_frequency_analyzer.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ bool subghz_scene_frequency_analyzer_on_event(void* context, SceneManagerEvent e
3131
return true;
3232
} else if(event.event == SubGhzCustomEventViewReceiverUnlock) {
3333
// Don't need to save, we already saved on short event
34-
#if FURI_DEBUG
34+
#ifdef FURI_DEBUG
3535
FURI_LOG_W(TAG, "Goto next scene!");
3636
#endif
3737
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneReceiver);

applications/main/subghz/scenes/subghz_scene_read_raw.c

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -134,12 +134,22 @@ bool subghz_scene_read_raw_on_event(void* context, SceneManagerEvent event) {
134134
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneNeedSaving);
135135
} else {
136136
//Restore default setting
137-
subghz_preset_init(
138-
subghz,
139-
subghz_setting_get_preset_name(subghz->setting, subghz->last_settings->preset),
140-
subghz->last_settings->frequency,
141-
NULL,
142-
0);
137+
if(subghz->raw_send_only) {
138+
subghz_preset_init(
139+
subghz,
140+
"AM650",
141+
subghz_setting_get_default_frequency(subghz->setting),
142+
NULL,
143+
0);
144+
} else {
145+
subghz_preset_init(
146+
subghz,
147+
subghz_setting_get_preset_name(
148+
subghz->setting, subghz->last_settings->preset),
149+
subghz->last_settings->frequency,
150+
NULL,
151+
0);
152+
}
143153
if(!scene_manager_search_and_switch_to_previous_scene(
144154
subghz->scene_manager, SubGhzSceneSaved)) {
145155
if(!scene_manager_search_and_switch_to_previous_scene(
@@ -340,6 +350,10 @@ void subghz_scene_read_raw_on_exit(void* context) {
340350
subghz->state_notifications = SubGhzNotificationStateIDLE;
341351
notification_message(subghz->notifications, &sequence_reset_rgb);
342352

343-
//filter restoration
353+
//filter restoration
354+
#ifdef SUBGHZ_SAVE_DETECT_RAW_SETTING
355+
subghz_last_settings_set_detect_raw_values(subghz);
356+
#else
344357
subghz_receiver_set_filter(subghz->txrx->receiver, SubGhzProtocolFlag_Decodable);
358+
#endif
345359
}

applications/main/subghz/scenes/subghz_scene_receiver.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,7 @@ bool subghz_scene_receiver_on_event(void* context, SceneManagerEvent event) {
185185
consumed = true;
186186
break;
187187
case SubGhzCustomEventViewReceiverOK:
188+
// Show file info, scene: receiver_info
188189
subghz->txrx->idx_menu_chosen =
189190
subghz_view_receiver_get_idx_menu(subghz->subghz_receiver);
190191
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneReceiverInfo);

applications/main/subghz/scenes/subghz_scene_receiver_config.c

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,12 @@ const char* const detect_raw_text[DETECT_RAW_COUNT] = {
2929
"ON",
3030
};
3131

32+
#ifndef SUBGHZ_SAVE_DETECT_RAW_SETTING
3233
const SubGhzProtocolFlag detect_raw_value[DETECT_RAW_COUNT] = {
3334
SubGhzProtocolFlag_Decodable,
3435
SubGhzProtocolFlag_Decodable | SubGhzProtocolFlag_RAW,
3536
};
37+
#endif
3638

3739
#define RSSI_THRESHOLD_COUNT 7
3840
const char* const rssi_threshold_text[RSSI_THRESHOLD_COUNT] = {
@@ -105,6 +107,7 @@ uint8_t subghz_scene_receiver_config_hopper_value_index(
105107
}
106108
}
107109

110+
#ifndef SUBGHZ_SAVE_DETECT_RAW_SETTING
108111
uint8_t subghz_scene_receiver_config_detect_raw_value_index(
109112
const SubGhzProtocolFlag value,
110113
const SubGhzProtocolFlag values[],
@@ -118,6 +121,7 @@ uint8_t subghz_scene_receiver_config_detect_raw_value_index(
118121
}
119122
return index;
120123
}
124+
#endif
121125

122126
uint8_t subghz_scene_receiver_config_rssi_threshold_value_index(
123127
const int value,
@@ -186,12 +190,18 @@ static void subghz_scene_receiver_config_set_detect_raw(VariableItem* item) {
186190
uint8_t index = variable_item_get_current_value_index(item);
187191

188192
variable_item_set_current_value_text(item, detect_raw_text[index]);
193+
#ifdef SUBGHZ_SAVE_DETECT_RAW_SETTING
194+
subghz->last_settings->detect_raw = index;
195+
196+
subghz_last_settings_set_detect_raw_values(subghz);
197+
#else
189198
subghz_receiver_set_filter(subghz->txrx->receiver, detect_raw_value[index]);
190199

191200
subghz_protocol_decoder_raw_set_auto_mode(
192201
subghz_receiver_search_decoder_base_by_name(
193202
subghz->txrx->receiver, SUBGHZ_PROTOCOL_RAW_NAME),
194203
(index == 1));
204+
#endif
195205
}
196206

197207
static void subghz_scene_receiver_config_set_hopping_running(VariableItem* item) {
@@ -244,10 +254,10 @@ void subghz_scene_receiver_config_on_enter(void* context) {
244254
VariableItem* item;
245255
uint8_t value_index;
246256

247-
#if FURI_DEBUG
257+
#ifdef FURI_DEBUG
248258
FURI_LOG_D(
249259
TAG,
250-
"last frequency: %d, preset: %d",
260+
"Last frequency: %d, Preset: %d",
251261
subghz->last_settings->frequency,
252262
subghz->last_settings->preset);
253263
#endif
@@ -304,10 +314,14 @@ void subghz_scene_receiver_config_on_enter(void* context) {
304314
DETECT_RAW_COUNT,
305315
subghz_scene_receiver_config_set_detect_raw,
306316
subghz);
317+
#ifdef SUBGHZ_SAVE_DETECT_RAW_SETTING
318+
value_index = subghz->last_settings->detect_raw;
319+
#else
307320
value_index = subghz_scene_receiver_config_detect_raw_value_index(
308321
subghz_receiver_get_filter(subghz->txrx->receiver),
309322
detect_raw_value,
310323
DETECT_RAW_COUNT);
324+
#endif
311325
variable_item_set_current_value_index(item, value_index);
312326
variable_item_set_current_value_text(item, detect_raw_text[value_index]);
313327

applications/main/subghz/scenes/subghz_scene_receiver_info.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ static bool subghz_scene_receiver_info_update_parser(void* context) {
2626
subghz->txrx->receiver,
2727
subghz_history_get_protocol_name(subghz->txrx->history, subghz->txrx->idx_menu_chosen));
2828
if(subghz->txrx->decoder_result) {
29+
// In this case flipper format was changed to short file content
2930
subghz_protocol_decoder_base_deserialize(
3031
subghz->txrx->decoder_result,
3132
subghz_history_get_raw_data(subghz->txrx->history, subghz->txrx->idx_menu_chosen));

applications/main/subghz/scenes/subghz_scene_rpc.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
#include "../subghz_i.h"
2+
#include <lib/subghz/protocols/keeloq.h>
3+
#include <lib/subghz/protocols/star_line.h>
24

35
typedef enum {
46
SubGhzRpcStateIdle,
@@ -97,4 +99,9 @@ void subghz_scene_rpc_on_exit(void* context) {
9799
popup_set_header(popup, NULL, 0, 0, AlignCenter, AlignBottom);
98100
popup_set_text(popup, NULL, 0, 0, AlignCenter, AlignTop);
99101
popup_set_icon(popup, 0, 0, NULL);
102+
103+
keeloq_reset_mfname();
104+
keeloq_reset_kl_type();
105+
star_line_reset_mfname();
106+
star_line_reset_kl_type();
100107
}

applications/main/subghz/scenes/subghz_scene_start.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,15 @@ void subghz_scene_start_on_enter(void* context) {
2121
if(subghz->state_notifications == SubGhzNotificationStateStarting) {
2222
subghz->state_notifications = SubGhzNotificationStateIDLE;
2323
}
24+
#ifdef SUBGHZ_SAVE_DETECT_RAW_SETTING
25+
subghz_last_settings_set_detect_raw_values(subghz);
26+
#else
2427
subghz_protocol_decoder_raw_set_auto_mode(
2528
subghz_receiver_search_decoder_base_by_name(
2629
subghz->txrx->receiver, SUBGHZ_PROTOCOL_RAW_NAME),
2730
false);
2831
subghz_receiver_set_filter(subghz->txrx->receiver, SubGhzProtocolFlag_Decodable);
32+
#endif
2933

3034
submenu_add_item(
3135
subghz->submenu, "Read", SubmenuIndexRead, subghz_scene_start_submenu_callback, subghz);
@@ -49,10 +53,12 @@ void subghz_scene_start_on_enter(void* context) {
4953
SubmenuIndexFrequencyAnalyzer,
5054
subghz_scene_start_submenu_callback,
5155
subghz);
56+
#if FURI_DEBUG
5257
if(furi_hal_rtc_is_flag_set(FuriHalRtcFlagDebug)) {
5358
submenu_add_item(
5459
subghz->submenu, "Test", SubmenuIndexTest, subghz_scene_start_submenu_callback, subghz);
5560
}
61+
#endif
5662
submenu_set_selected_item(
5763
subghz->submenu, scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneStart));
5864

@@ -93,12 +99,16 @@ bool subghz_scene_start_on_event(void* context, SceneManagerEvent event) {
9399
subghz->scene_manager, SubGhzSceneStart, SubmenuIndexFrequencyAnalyzer);
94100
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneFrequencyAnalyzer);
95101
return true;
96-
} else if(event.event == SubmenuIndexTest) {
102+
103+
}
104+
#if FURI_DEBUG
105+
else if(event.event == SubmenuIndexTest) {
97106
scene_manager_set_scene_state(
98107
subghz->scene_manager, SubGhzSceneStart, SubmenuIndexTest);
99108
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneTest);
100109
return true;
101110
}
111+
#endif
102112
}
103113
return false;
104114
}

applications/main/subghz/scenes/subghz_scene_test.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#if FURI_DEBUG
12
#include "../subghz_i.h"
23

34
enum SubmenuIndex {
@@ -59,3 +60,4 @@ void subghz_scene_test_on_exit(void* context) {
5960
SubGhz* subghz = context;
6061
submenu_reset(subghz->submenu);
6162
}
63+
#endif

0 commit comments

Comments
 (0)