Skip to content

Commit

Permalink
[FL-2459, FL-2469]SubGhz: displaying a long name in RAW, launching fi…
Browse files Browse the repository at this point in the history
…les from subfolders, bugfix (#1125)

* SubGhz: fix the RAW file is not restored when it is launched from under the folder
* SubGhz: fix does not fit long RAW file name
* SubGhz: fix Read not cleared after file rename
* SubGhz: fix restore default frequency and modulation on output
* SubGhz: fix long name output in RAW
  • Loading branch information
Skorpionm authored Apr 20, 2022
1 parent 9351076 commit d530d16
Show file tree
Hide file tree
Showing 12 changed files with 37 additions and 13 deletions.
2 changes: 1 addition & 1 deletion applications/subghz/scenes/subghz_scene_delete_raw.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ void subghz_scene_delete_raw_on_enter(void* context) {
string_init(frequency_str);
string_init(modulation_str);

char delete_str[64];
char delete_str[256];
snprintf(delete_str, sizeof(delete_str), "\e#Delete %s?\e#", subghz->file_name);
widget_add_text_box_element(
subghz->widget, 0, 0, 128, 23, AlignCenter, AlignCenter, delete_str, false);
Expand Down
2 changes: 2 additions & 0 deletions applications/subghz/scenes/subghz_scene_need_saving.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@ 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;
scene_manager_search_and_switch_to_previous_scene(
subghz->scene_manager, SubGhzSceneStart);
} else {
Expand Down
3 changes: 2 additions & 1 deletion applications/subghz/scenes/subghz_scene_read_raw.c
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,8 @@ bool subghz_scene_read_raw_on_event(void* context, SceneManagerEvent event) {
};
subghz_protocol_raw_save_to_file_stop(
(SubGhzProtocolDecoderRAW*)subghz->txrx->decoder_result);
subghz_protocol_raw_gen_fff_data(subghz->txrx->fff_data, RAW_FILE_NAME);
subghz_protocol_raw_gen_fff_data(
subghz->txrx->fff_data, SUBGHZ_APP_FOLDER, RAW_FILE_NAME);
subghz->state_notifications = SubGhzNotificationStateIDLE;

subghz->txrx->rx_key_state = SubGhzRxKeyStateAddKey;
Expand Down
8 changes: 6 additions & 2 deletions applications/subghz/scenes/subghz_scene_receiver.c
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,10 @@ 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_history_reset(subghz->txrx->history);
subghz->txrx->rx_key_state = SubGhzRxKeyStateStart;
}

//Load history to receiver
Expand Down Expand Up @@ -120,15 +123,16 @@ bool subghz_scene_receiver_on_event(void* context, SceneManagerEvent event) {
subghz_sleep(subghz);
};
subghz->txrx->hopper_state = SubGhzHopperStateOFF;
subghz->txrx->frequency = subghz_setting_get_default_frequency(subghz->setting);
subghz->txrx->preset = FuriHalSubGhzPresetOok650Async;
subghz->txrx->idx_menu_chosen = 0;
subghz_receiver_set_rx_callback(subghz->txrx->receiver, NULL, subghz);

if(subghz->txrx->rx_key_state == SubGhzRxKeyStateAddKey) {
subghz->txrx->rx_key_state = SubGhzRxKeyStateExit;
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;
scene_manager_search_and_switch_to_previous_scene(
subghz->scene_manager, SubGhzSceneStart);
}
Expand Down
3 changes: 2 additions & 1 deletion applications/subghz/scenes/subghz_scene_save_name.c
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,8 @@ bool subghz_scene_save_name_on_event(void* context, SceneManagerEvent event) {

if(scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneReadRAW) !=
SubGhzCustomEventManagerNoSet) {
subghz_protocol_raw_gen_fff_data(subghz->txrx->fff_data, subghz->file_name);
subghz_protocol_raw_gen_fff_data(
subghz->txrx->fff_data, SUBGHZ_APP_FOLDER, subghz->file_name);
scene_manager_set_scene_state(
subghz->scene_manager, SubGhzSceneReadRAW, SubGhzCustomEventManagerNoSet);
} else {
Expand Down
1 change: 1 addition & 0 deletions applications/subghz/scenes/subghz_scene_save_success.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ bool subghz_scene_save_success_on_event(void* context, SceneManagerEvent event)
subghz->txrx->rx_key_state = SubGhzRxKeyStateRAWSave;
if(!scene_manager_search_and_switch_to_previous_scene(
subghz->scene_manager, SubGhzSceneReadRAW)) {
subghz->txrx->rx_key_state = SubGhzRxKeyStateIDLE;
if(!scene_manager_search_and_switch_to_previous_scene(
subghz->scene_manager, SubGhzSceneSaved)) {
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSaved);
Expand Down
4 changes: 3 additions & 1 deletion applications/subghz/scenes/subghz_scene_transmitter.c
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,8 @@ bool subghz_scene_transmitter_on_event(void* context, SceneManagerEvent event) {

void subghz_scene_transmitter_on_exit(void* context) {
SubGhz* subghz = context;

//Restore default setting
subghz->txrx->frequency = subghz_setting_get_default_frequency(subghz->setting);
subghz->txrx->preset = FuriHalSubGhzPresetOok650Async;
subghz->state_notifications = SubGhzNotificationStateIDLE;
}
7 changes: 6 additions & 1 deletion applications/subghz/subghz_i.c
Original file line number Diff line number Diff line change
Expand Up @@ -279,8 +279,13 @@ bool subghz_key_load(SubGhz* subghz, const char* file_path) {
//if RAW
string_t file_name;
string_init(file_name);
string_t path;
string_init(path);
path_extract_filename_no_ext(file_path, file_name);
subghz_protocol_raw_gen_fff_data(subghz->txrx->fff_data, string_get_cstr(file_name));
path_extract_dirname(file_path, path);
subghz_protocol_raw_gen_fff_data(
subghz->txrx->fff_data, string_get_cstr(path), string_get_cstr(file_name));
string_clear(path);
string_clear(file_name);

} else {
Expand Down
3 changes: 2 additions & 1 deletion applications/subghz/subghz_i.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@

#include <gui/modules/variable_item_list.h>

#define SUBGHZ_MAX_LEN_NAME 40
#define SUBGHZ_MAX_LEN_NAME 128

/** SubGhzNotification state */
typedef enum {
Expand Down Expand Up @@ -66,6 +66,7 @@ typedef enum {
SubGhzRxKeyStateNoSave,
SubGhzRxKeyStateNeedSave,
SubGhzRxKeyStateBack,
SubGhzRxKeyStateStart,
SubGhzRxKeyStateAddKey,
SubGhzRxKeyStateExit,
SubGhzRxKeyStateRAWLoad,
Expand Down
4 changes: 2 additions & 2 deletions applications/subghz/views/subghz_read_raw.c
Original file line number Diff line number Diff line change
Expand Up @@ -238,9 +238,9 @@ void subghz_read_raw_draw(Canvas* canvas, SubGhzReadRAWModel* model) {
elements_text_box(
canvas,
4,
12,
20,
110,
44,
30,
AlignCenter,
AlignCenter,
string_get_cstr(model->file_name),
Expand Down
7 changes: 5 additions & 2 deletions lib/subghz/protocols/raw.c
Original file line number Diff line number Diff line change
Expand Up @@ -293,7 +293,10 @@ static bool subghz_protocol_encoder_raw_worker_init(SubGhzProtocolEncoderRAW* in
return instance->is_runing;
}

void subghz_protocol_raw_gen_fff_data(FlipperFormat* flipper_format, const char* file_name) {
void subghz_protocol_raw_gen_fff_data(
FlipperFormat* flipper_format,
const char* path,
const char* file_name) {
string_t temp_str;
string_init(temp_str);
do {
Expand All @@ -302,7 +305,7 @@ void subghz_protocol_raw_gen_fff_data(FlipperFormat* flipper_format, const char*
FURI_LOG_E(TAG, "Unable to add Protocol");
break;
}
string_printf(temp_str, "%s/%s%s", SUBGHZ_APP_FOLDER, file_name, SUBGHZ_APP_EXTENSION);
string_printf(temp_str, "%s/%s%s", path, file_name, SUBGHZ_APP_EXTENSION);

if(!flipper_format_write_string_cstr(
flipper_format, "File_name", string_get_cstr(temp_str))) {
Expand Down
6 changes: 5 additions & 1 deletion lib/subghz/protocols/raw.h
Original file line number Diff line number Diff line change
Expand Up @@ -113,9 +113,13 @@ void subghz_protocol_raw_file_encoder_worker_set_callback_end(
/**
* File generation for RAW work.
* @param flipper_format Pointer to a FlipperFormat instance
* @param path File path
* @param file_name File name
*/
void subghz_protocol_raw_gen_fff_data(FlipperFormat* flipper_format, const char* file_name);
void subghz_protocol_raw_gen_fff_data(
FlipperFormat* flipper_format,
const char* path,
const char* file_name);

/**
* Deserialize and generating an upload to send.
Expand Down

0 comments on commit d530d16

Please sign in to comment.