Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FL-2459, FL-2469]SubGhz: displaying a long name in RAW, launching files from subfolders, bugfix #1125

Merged
merged 9 commits into from
Apr 20, 2022
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