[FL-2100] SubGhz: GUI download and transfer RAW file (#881)

* SubGhz: fix exit subghz_chat
* SubGhz: refactoring GUI RAW

Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
Skorpionm 2021-12-08 19:00:54 +04:00 committed by GitHub
parent c6cb6ae810
commit 9f28338d9e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 39 additions and 6 deletions

View File

@ -27,7 +27,7 @@ static int32_t subghz_chat_worker_thread(void* context) {
event.event = SubghzChatEventUserEntrance; event.event = SubghzChatEventUserEntrance;
osMessageQueuePut(instance->event_queue, &event, 0, 0); osMessageQueuePut(instance->event_queue, &event, 0, 0);
while(instance->worker_running) { while(instance->worker_running) {
if(furi_hal_vcp_rx_with_timeout((uint8_t*)&c, 1, osWaitForever) == 1) { if(furi_hal_vcp_rx_with_timeout((uint8_t*)&c, 1, 1000) == 1) {
event.event = SubghzChatEventInputData; event.event = SubghzChatEventInputData;
event.c = c; event.c = c;
osMessageQueuePut(instance->event_queue, &event, 0, osWaitForever); osMessageQueuePut(instance->event_queue, &event, 0, osWaitForever);

View File

@ -41,9 +41,13 @@ void subghz_scene_read_raw_on_enter(void* context) {
SubGhz* subghz = context; SubGhz* subghz = context;
if(subghz->txrx->rx_key_state == SubGhzRxKeyStateBack) { if(subghz->txrx->rx_key_state == SubGhzRxKeyStateBack) {
subghz_read_raw_set_status(subghz->subghz_read_raw, SubghzReadRAWStatusIDLE); subghz_read_raw_set_status(subghz->subghz_read_raw, SubghzReadRAWStatusIDLE, "");
} else if(subghz->txrx->rx_key_state == SubGhzRxKeyStateRAWLoad) {
subghz_read_raw_set_status(
subghz->subghz_read_raw, SubghzReadRAWStatusTX, subghz->file_name);
subghz->txrx->rx_key_state = SubGhzRxKeyStateAddKey;
} else { } else {
subghz_read_raw_set_status(subghz->subghz_read_raw, SubghzReadRAWStatusStart); subghz_read_raw_set_status(subghz->subghz_read_raw, SubghzReadRAWStatusStart, "");
subghz->txrx->rx_key_state = SubGhzRxKeyStateIDLE; subghz->txrx->rx_key_state = SubGhzRxKeyStateIDLE;
} }

View File

@ -4,7 +4,12 @@ void subghz_scene_saved_on_enter(void* context) {
SubGhz* subghz = context; SubGhz* subghz = context;
if(subghz_load_protocol_from_file(subghz)) { if(subghz_load_protocol_from_file(subghz)) {
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSavedMenu); if((!strcmp(subghz->txrx->protocol_result->name, "RAW"))) {
subghz->txrx->rx_key_state = SubGhzRxKeyStateRAWLoad;
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneReadRAW);
} else {
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSavedMenu);
}
} else { } else {
scene_manager_search_and_switch_to_previous_scene(subghz->scene_manager, SubGhzSceneStart); scene_manager_search_and_switch_to_previous_scene(subghz->scene_manager, SubGhzSceneStart);
} }

View File

@ -73,6 +73,7 @@ typedef enum {
SubGhzRxKeyStateBack, SubGhzRxKeyStateBack,
SubGhzRxKeyStateAddKey, SubGhzRxKeyStateAddKey,
SubGhzRxKeyStateExit, SubGhzRxKeyStateExit,
SubGhzRxKeyStateRAWLoad,
} SubGhzRxKeyState; } SubGhzRxKeyState;
struct SubGhzTxRx { struct SubGhzTxRx {

View File

@ -21,6 +21,7 @@ typedef struct {
string_t frequency_str; string_t frequency_str;
string_t preset_str; string_t preset_str;
string_t sample_write; string_t sample_write;
string_t file_name;
uint8_t* rssi_history; uint8_t* rssi_history;
bool rssi_history_end; bool rssi_history_end;
uint8_t ind_write; uint8_t ind_write;
@ -224,6 +225,8 @@ void subghz_read_raw_draw(Canvas* canvas, SubghzReadRAWModel* model) {
elements_button_left(canvas, "Erase"); elements_button_left(canvas, "Erase");
elements_button_center(canvas, "Send"); elements_button_center(canvas, "Send");
elements_button_right(canvas, "Save"); elements_button_right(canvas, "Save");
canvas_draw_str_aligned(
canvas, 58, 28, AlignCenter, AlignTop, string_get_cstr(model->file_name));
} else if(model->satus == SubghzReadRAWStatusStart) { } else if(model->satus == SubghzReadRAWStatusStart) {
elements_button_left(canvas, "Config"); elements_button_left(canvas, "Config");
elements_button_center(canvas, "REC"); elements_button_center(canvas, "REC");
@ -297,6 +300,7 @@ bool subghz_read_raw_input(InputEvent* event, void* context) {
model->rssi_history_end = false; model->rssi_history_end = false;
model->ind_write = 0; model->ind_write = 0;
string_set(model->sample_write, "0 spl."); string_set(model->sample_write, "0 spl.");
string_reset(model->file_name);
instance->callback(SubghzCustomEventViewReadRAWErase, instance->context); instance->callback(SubghzCustomEventViewReadRAWErase, instance->context);
} }
return true; return true;
@ -332,7 +336,10 @@ bool subghz_read_raw_input(InputEvent* event, void* context) {
return true; return true;
} }
void subghz_read_raw_set_status(SubghzReadRAW* instance, SubghzReadRAWStatus satus) { void subghz_read_raw_set_status(
SubghzReadRAW* instance,
SubghzReadRAWStatus satus,
const char* file_name) {
furi_assert(instance); furi_assert(instance);
if(satus == SubghzReadRAWStatusStart) { if(satus == SubghzReadRAWStatusStart) {
with_view_model( with_view_model(
@ -340,6 +347,7 @@ void subghz_read_raw_set_status(SubghzReadRAW* instance, SubghzReadRAWStatus sat
model->satus = SubghzReadRAWStatusStart; model->satus = SubghzReadRAWStatusStart;
model->rssi_history_end = false; model->rssi_history_end = false;
model->ind_write = 0; model->ind_write = 0;
string_reset(model->file_name);
string_set(model->sample_write, "0 spl."); string_set(model->sample_write, "0 spl.");
return true; return true;
}); });
@ -349,6 +357,16 @@ void subghz_read_raw_set_status(SubghzReadRAW* instance, SubghzReadRAWStatus sat
model->satus = SubghzReadRAWStatusIDLE; model->satus = SubghzReadRAWStatusIDLE;
return true; return true;
}); });
} else if(satus == SubghzReadRAWStatusTX) {
with_view_model(
instance->view, (SubghzReadRAWModel * model) {
model->satus = SubghzReadRAWStatusIDLE;
model->rssi_history_end = false;
model->ind_write = 0;
string_set(model->file_name, file_name);
string_set(model->sample_write, "RAW");
return true;
});
} }
} }
@ -389,6 +407,7 @@ SubghzReadRAW* subghz_read_raw_alloc() {
string_init(model->frequency_str); string_init(model->frequency_str);
string_init(model->preset_str); string_init(model->preset_str);
string_init(model->sample_write); string_init(model->sample_write);
string_init(model->file_name);
model->rssi_history = furi_alloc(SUBGHZ_READ_RAW_RSSI_HISTORY_SIZE * sizeof(uint8_t)); model->rssi_history = furi_alloc(SUBGHZ_READ_RAW_RSSI_HISTORY_SIZE * sizeof(uint8_t));
return true; return true;
}); });
@ -404,6 +423,7 @@ void subghz_read_raw_free(SubghzReadRAW* instance) {
string_clear(model->frequency_str); string_clear(model->frequency_str);
string_clear(model->preset_str); string_clear(model->preset_str);
string_clear(model->sample_write); string_clear(model->sample_write);
string_clear(model->file_name);
free(model->rssi_history); free(model->rssi_history);
return true; return true;
}); });

View File

@ -37,6 +37,9 @@ void subghz_read_raw_update_sin(SubghzReadRAW* instance);
void subghz_read_raw_add_data_rssi(SubghzReadRAW* instance, float rssi); void subghz_read_raw_add_data_rssi(SubghzReadRAW* instance, float rssi);
void subghz_read_raw_set_status(SubghzReadRAW* instance, SubghzReadRAWStatus satus); void subghz_read_raw_set_status(
SubghzReadRAW* instance,
SubghzReadRAWStatus satus,
const char* file_name);
View* subghz_read_raw_get_view(SubghzReadRAW* subghz_static); View* subghz_read_raw_get_view(SubghzReadRAW* subghz_static);