diff --git a/applications/main/subghz/scenes/subghz_scene_need_saving.c b/applications/main/subghz/scenes/subghz_scene_need_saving.c index 1fa81b09a..53bffedc8 100644 --- a/applications/main/subghz/scenes/subghz_scene_need_saving.c +++ b/applications/main/subghz/scenes/subghz_scene_need_saving.c @@ -50,8 +50,8 @@ bool subghz_scene_need_saving_on_event(void* context, SceneManagerEvent event) { subghz->txrx->rx_key_state = SubGhzRxKeyStateIDLE; subghz_preset_init( subghz, - string_get_cstr(subghz->last_setting->preset_name), - subghz->last_setting->frequency, + "AM650", + subghz_setting_get_default_frequency(subghz->setting), NULL, 0); scene_manager_search_and_switch_to_previous_scene( diff --git a/applications/main/subghz/scenes/subghz_scene_read_raw.c b/applications/main/subghz/scenes/subghz_scene_read_raw.c index 86c9d88e5..60783b060 100644 --- a/applications/main/subghz/scenes/subghz_scene_read_raw.c +++ b/applications/main/subghz/scenes/subghz_scene_read_raw.c @@ -113,12 +113,6 @@ bool subghz_scene_read_raw_on_event(void* context, SceneManagerEvent event) { if(event.type == SceneManagerEventTypeCustom) { switch(event.event) { case SubGhzCustomEventViewReadRAWBack: - // Check if return from config save values - if(subghz->current_scene == SubGhzSceneReceiverConfig) { - //FURI_LOG_I(TAG, "Raw value: %d", subghz->last_setting->detect_raw); - subghz_last_setting_save( - subghz->last_setting, EXT_PATH("subghz/assets/last_used.txt")); - } //Stop TX if(subghz->txrx->txrx_state == SubGhzTxRxStateTx) { subghz_tx_stop(subghz); @@ -137,14 +131,13 @@ bool subghz_scene_read_raw_on_event(void* context, SceneManagerEvent event) { if((subghz->txrx->rx_key_state == SubGhzRxKeyStateAddKey) || (subghz->txrx->rx_key_state == SubGhzRxKeyStateBack)) { subghz->txrx->rx_key_state = SubGhzRxKeyStateExit; - subghz->current_scene = SubGhzSceneNeedSaving; scene_manager_next_scene(subghz->scene_manager, SubGhzSceneNeedSaving); } else { //Restore default setting subghz_preset_init( subghz, - string_get_cstr(subghz->last_setting->preset_name), - subghz->last_setting->frequency, + "AM650", + subghz_setting_get_default_frequency(subghz->setting), NULL, 0); if(!scene_manager_search_and_switch_to_previous_scene( @@ -153,11 +146,7 @@ bool subghz_scene_read_raw_on_event(void* context, SceneManagerEvent event) { subghz->scene_manager, SubGhzSceneStart)) { scene_manager_stop(subghz->scene_manager); view_dispatcher_stop(subghz->view_dispatcher); - } else { - subghz->current_scene = SubGhzSceneStart; } - } else { - subghz->current_scene = SubGhzSceneSaved; } } consumed = true; @@ -181,8 +170,6 @@ bool subghz_scene_read_raw_on_event(void* context, SceneManagerEvent event) { case SubGhzCustomEventViewReadRAWConfig: scene_manager_set_scene_state( subghz->scene_manager, SubGhzSceneReadRAW, SubGhzCustomEventManagerSet); - subghz->current_scene = SubGhzSceneReceiverConfig; - //FURI_LOG_I(TAG, "Raw value: %d", subghz->last_setting->detect_raw); scene_manager_next_scene(subghz->scene_manager, SubGhzSceneReceiverConfig); consumed = true; break; @@ -204,7 +191,6 @@ bool subghz_scene_read_raw_on_event(void* context, SceneManagerEvent event) { scene_manager_set_scene_state( subghz->scene_manager, SubGhzSceneReadRAW, SubGhzCustomEventManagerSet); subghz->txrx->rx_key_state = SubGhzRxKeyStateRAWLoad; - subghz->current_scene = SubGhzSceneMoreRAW; scene_manager_next_scene(subghz->scene_manager, SubGhzSceneMoreRAW); consumed = true; } else { @@ -224,7 +210,6 @@ bool subghz_scene_read_raw_on_event(void* context, SceneManagerEvent event) { (subghz->txrx->txrx_state == SubGhzTxRxStateSleep)) { if(!subghz_tx_start(subghz, subghz->txrx->fff_data)) { subghz->txrx->rx_key_state = SubGhzRxKeyStateBack; - subghz->current_scene = SubGhzSceneShowOnlyRx; scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowOnlyRx); } else { DOLPHIN_DEED(DolphinDeedSubGhzSend); @@ -284,7 +269,6 @@ bool subghz_scene_read_raw_on_event(void* context, SceneManagerEvent event) { case SubGhzCustomEventViewReadRAWREC: if(subghz->txrx->rx_key_state != SubGhzRxKeyStateIDLE) { - subghz->current_scene = SubGhzSceneNeedSaving; scene_manager_next_scene(subghz->scene_manager, SubGhzSceneNeedSaving); } else { //subghz_get_preset_name(subghz, subghz->error_str); @@ -305,7 +289,6 @@ bool subghz_scene_read_raw_on_event(void* context, SceneManagerEvent event) { subghz->txrx->rx_key_state = SubGhzRxKeyStateAddKey; } else { string_set_str(subghz->error_str, "Function requires\nan SD card."); - subghz->current_scene = SubGhzSceneShowError; scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowError); } } @@ -317,7 +300,6 @@ bool subghz_scene_read_raw_on_event(void* context, SceneManagerEvent event) { scene_manager_set_scene_state( subghz->scene_manager, SubGhzSceneReadRAW, SubGhzCustomEventManagerSetRAW); subghz->txrx->rx_key_state = SubGhzRxKeyStateBack; - subghz->current_scene = SubGhzSceneSaveName; scene_manager_next_scene(subghz->scene_manager, SubGhzSceneSaveName); } consumed = true; diff --git a/applications/main/subghz/scenes/subghz_scene_receiver.c b/applications/main/subghz/scenes/subghz_scene_receiver.c index 2d0fcd861..a58777d15 100644 --- a/applications/main/subghz/scenes/subghz_scene_receiver.c +++ b/applications/main/subghz/scenes/subghz_scene_receiver.c @@ -1,8 +1,6 @@ #include "../subghz_i.h" #include "../views/receiver.h" -#define TAG "SubGhzSceneReceiver" - const NotificationSequence subghz_sequence_rx = { &message_green_255, @@ -100,18 +98,12 @@ static void subghz_scene_add_to_history_callback( void subghz_scene_receiver_on_enter(void* context) { SubGhz* subghz = context; - subghz_last_setting_set_receiver_values(subghz->last_setting, subghz->txrx->receiver); - string_t str_buff; string_init(str_buff); if(subghz->txrx->rx_key_state == SubGhzRxKeyStateIDLE) { subghz_preset_init( - subghz, - string_get_cstr(subghz->last_setting->preset_name), - subghz->last_setting->frequency, - NULL, - 0); + subghz, "AM650", subghz_setting_get_default_frequency(subghz->setting), NULL, 0); subghz_history_reset(subghz->txrx->history); subghz->txrx->rx_key_state = SubGhzRxKeyStateStart; } @@ -143,8 +135,6 @@ void subghz_scene_receiver_on_enter(void* context) { } if((subghz->txrx->txrx_state == SubGhzTxRxStateIDLE) || (subghz->txrx->txrx_state == SubGhzTxRxStateSleep)) { - // Set values that can be reset after using DetectRAW Scene - subghz_last_setting_set_receiver_values(subghz->last_setting, subghz->txrx->receiver); subghz_begin( subghz, subghz_setting_get_preset_data_by_name( @@ -162,12 +152,6 @@ bool subghz_scene_receiver_on_event(void* context, SceneManagerEvent event) { if(event.type == SceneManagerEventTypeCustom) { switch(event.event) { case SubGhzCustomEventViewReceiverBack: - // Check if return from config save values - if(subghz->current_scene == SubGhzSceneReceiverConfig) { - //FURI_LOG_I(TAG, "Raw value: %d", subghz->last_setting->detect_raw); - subghz_last_setting_save( - subghz->last_setting, EXT_PATH("subghz/assets/last_used.txt")); - } // Stop CC1101 Rx subghz->state_notifications = SubGhzNotificationStateIDLE; if(subghz->txrx->txrx_state == SubGhzTxRxStateRx) { @@ -180,17 +164,15 @@ bool subghz_scene_receiver_on_event(void* context, SceneManagerEvent event) { if(subghz->txrx->rx_key_state == SubGhzRxKeyStateAddKey) { subghz->txrx->rx_key_state = SubGhzRxKeyStateExit; - subghz->current_scene = SubGhzSceneNeedSaving; scene_manager_next_scene(subghz->scene_manager, SubGhzSceneNeedSaving); } else { subghz->txrx->rx_key_state = SubGhzRxKeyStateIDLE; subghz_preset_init( subghz, - string_get_cstr(subghz->last_setting->preset_name), - subghz->last_setting->frequency, + "AM650", + subghz_setting_get_default_frequency(subghz->setting), NULL, 0); - subghz->current_scene = SubGhzSceneStart; scene_manager_search_and_switch_to_previous_scene( subghz->scene_manager, SubGhzSceneStart); } @@ -199,7 +181,6 @@ bool subghz_scene_receiver_on_event(void* context, SceneManagerEvent event) { case SubGhzCustomEventViewReceiverOK: subghz->txrx->idx_menu_chosen = subghz_view_receiver_get_idx_menu(subghz->subghz_receiver); - subghz->current_scene = SubGhzSceneReceiverInfo; scene_manager_next_scene(subghz->scene_manager, SubGhzSceneReceiverInfo); consumed = true; break; @@ -207,10 +188,6 @@ bool subghz_scene_receiver_on_event(void* context, SceneManagerEvent event) { subghz->state_notifications = SubGhzNotificationStateIDLE; subghz->txrx->idx_menu_chosen = subghz_view_receiver_get_idx_menu(subghz->subghz_receiver); - scene_manager_set_scene_state( - subghz->scene_manager, SubGhzViewIdReceiver, SubGhzCustomEventManagerSet); - subghz->current_scene = SubGhzSceneReceiverConfig; - //FURI_LOG_I(TAG, "Raw value: %d", subghz->last_setting->detect_raw); scene_manager_next_scene(subghz->scene_manager, SubGhzSceneReceiverConfig); consumed = true; break; @@ -250,8 +227,5 @@ bool subghz_scene_receiver_on_event(void* context, SceneManagerEvent event) { } void subghz_scene_receiver_on_exit(void* context) { - SubGhz* subghz = context; - - //filter restoration - subghz_receiver_set_filter(subghz->txrx->receiver, SubGhzProtocolFlag_Decodable); + UNUSED(context); } diff --git a/applications/main/subghz/scenes/subghz_scene_receiver_config.c b/applications/main/subghz/scenes/subghz_scene_receiver_config.c index d5fc9fd75..f33d06377 100644 --- a/applications/main/subghz/scenes/subghz_scene_receiver_config.c +++ b/applications/main/subghz/scenes/subghz_scene_receiver_config.c @@ -2,8 +2,6 @@ #include -#define TAG "SubGhzSceneReceiverConfig" - enum SubGhzSettingIndex { SubGhzSettingIndexFrequency, SubGhzSettingIndexHopping, @@ -147,8 +145,6 @@ static void subghz_scene_receiver_config_set_frequency(VariableItem* item) { (subghz_setting_get_frequency(subghz->setting, index) % 1000000) / 10000); variable_item_set_current_value_text(item, text_buf); subghz->txrx->preset->frequency = subghz_setting_get_frequency(subghz->setting, index); - subghz->last_setting->frequency = subghz->txrx->preset->frequency; - subghz_setting_set_default_frequency(subghz->setting, subghz->txrx->preset->frequency); } else { variable_item_set_current_value_index( item, subghz_setting_get_frequency_default_index(subghz->setting)); @@ -158,13 +154,11 @@ static void subghz_scene_receiver_config_set_frequency(VariableItem* item) { static void subghz_scene_receiver_config_set_preset(VariableItem* item) { SubGhz* subghz = variable_item_get_context(item); uint8_t index = variable_item_get_current_value_index(item); - const char* preset_name = subghz_setting_get_preset_name(subghz->setting, index); - variable_item_set_current_value_text(item, preset_name); - string_set_str(subghz->last_setting->preset_name, preset_name); - + variable_item_set_current_value_text( + item, subghz_setting_get_preset_name(subghz->setting, index)); subghz_preset_init( subghz, - preset_name, + subghz_setting_get_preset_name(subghz->setting, index), subghz->txrx->preset->frequency, subghz_setting_get_preset_data(subghz->setting, index), subghz_setting_get_preset_data_size(subghz->setting, index)); @@ -179,7 +173,6 @@ static void subghz_scene_receiver_config_set_rssi_threshold(VariableItem* item) subghz_receiver_search_decoder_base_by_name( subghz->txrx->receiver, SUBGHZ_PROTOCOL_RAW_NAME), rssi_threshold_value[index]); - subghz->last_setting->rssi_threshold = rssi_threshold_value[index]; } static void subghz_scene_receiver_config_set_detect_raw(VariableItem* item) { @@ -188,7 +181,6 @@ static void subghz_scene_receiver_config_set_detect_raw(VariableItem* item) { variable_item_set_current_value_text(item, detect_raw_text[index]); subghz_receiver_set_filter(subghz->txrx->receiver, detect_raw_value[index]); - subghz->last_setting->detect_raw = detect_raw_value[index]; subghz_protocol_decoder_raw_set_auto_mode( subghz_receiver_search_decoder_base_by_name( @@ -230,7 +222,6 @@ static void subghz_scene_receiver_config_set_hopping_running(VariableItem* item) } subghz->txrx->hopper_state = hopping_value[index]; - subghz->last_setting->hopping = hopping_value[index]; } static void subghz_scene_receiver_config_var_list_enter_callback(void* context, uint32_t index) { @@ -244,9 +235,6 @@ static void subghz_scene_receiver_config_var_list_enter_callback(void* context, void subghz_scene_receiver_config_on_enter(void* context) { SubGhz* subghz = context; - - subghz_last_setting_set_receiver_values(subghz->last_setting, subghz->txrx->receiver); - VariableItem* item; uint8_t value_index; @@ -270,6 +258,20 @@ void subghz_scene_receiver_config_on_enter(void* context) { (subghz_setting_get_frequency(subghz->setting, value_index) % 1000000) / 10000); variable_item_set_current_value_text(item, text_buf); + if(scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneReadRAW) != + SubGhzCustomEventManagerSet) { + item = variable_item_list_add( + subghz->variable_item_list, + "Hopping:", + HOPPING_COUNT, + subghz_scene_receiver_config_set_hopping_running, + subghz); + value_index = subghz_scene_receiver_config_hopper_value_index( + subghz->txrx->hopper_state, hopping_value, HOPPING_COUNT, subghz); + variable_item_set_current_value_index(item, value_index); + variable_item_set_current_value_text(item, hopping_text[value_index]); + } + item = variable_item_list_add( subghz->variable_item_list, "Modulation:", @@ -284,17 +286,6 @@ void subghz_scene_receiver_config_on_enter(void* context) { if(scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneReadRAW) != SubGhzCustomEventManagerSet) { - item = variable_item_list_add( - subghz->variable_item_list, - "Hopping:", - HOPPING_COUNT, - subghz_scene_receiver_config_set_hopping_running, - subghz); - value_index = subghz_scene_receiver_config_hopper_value_index( - subghz->txrx->hopper_state, hopping_value, HOPPING_COUNT, subghz); - variable_item_set_current_value_index(item, value_index); - variable_item_set_current_value_text(item, hopping_text[value_index]); - item = variable_item_list_add( subghz->variable_item_list, "Detect Raw:", @@ -307,7 +298,10 @@ void subghz_scene_receiver_config_on_enter(void* context) { DETECT_RAW_COUNT); variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_text(item, detect_raw_text[value_index]); + } + if(scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneReadRAW) != + SubGhzCustomEventManagerSet) { item = variable_item_list_add( subghz->variable_item_list, "RSSI for Raw:", @@ -321,7 +315,10 @@ void subghz_scene_receiver_config_on_enter(void* context) { RSSI_THRESHOLD_COUNT); variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_text(item, rssi_threshold_text[value_index]); + } + if(scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneReadRAW) != + SubGhzCustomEventManagerSet) { variable_item_list_add(subghz->variable_item_list, "Lock Keyboard", 1, NULL, NULL); variable_item_list_set_enter_callback( subghz->variable_item_list, diff --git a/applications/main/subghz/subghz.c b/applications/main/subghz/subghz.c index 84c775c3a..08de91f91 100644 --- a/applications/main/subghz/subghz.c +++ b/applications/main/subghz/subghz.c @@ -174,25 +174,16 @@ SubGhz* subghz_alloc() { subghz->setting = subghz_setting_alloc(); subghz_setting_load(subghz->setting, EXT_PATH("subghz/assets/setting_user")); - // Load last used values for Read, Read RAW, etc. or default - subghz->last_setting = subghz_last_setting_alloc(); - subghz_last_setting_load(subghz->last_setting, EXT_PATH("subghz/assets/last_used.txt")); - subghz_setting_set_default_frequency(subghz->setting, subghz->last_setting->frequency); - //init Worker & Protocol & History & KeyBoard subghz->lock = SubGhzLockOff; subghz->txrx = malloc(sizeof(SubGhzTxRx)); subghz->txrx->preset = malloc(sizeof(SubGhzPresetDefinition)); string_init(subghz->txrx->preset->name); subghz_preset_init( - subghz, - string_get_cstr(subghz->last_setting->preset_name), - subghz->last_setting->frequency, - NULL, - 0); + subghz, "AM650", subghz_setting_get_default_frequency(subghz->setting), NULL, 0); subghz->txrx->txrx_state = SubGhzTxRxStateSleep; - subghz->txrx->hopper_state = subghz->last_setting->hopping; + subghz->txrx->hopper_state = SubGhzHopperStateOFF; subghz->txrx->rx_key_state = SubGhzRxKeyStateIDLE; subghz->txrx->history = subghz_history_alloc(); subghz->txrx->worker = subghz_worker_alloc(); @@ -205,8 +196,6 @@ SubGhz* subghz_alloc() { subghz_environment_set_nice_flor_s_rainbow_table_file_name( subghz->txrx->environment, EXT_PATH("subghz/assets/nice_flor_s")); subghz->txrx->receiver = subghz_receiver_alloc_init(subghz->txrx->environment); - - // Setup values subghz_receiver_set_filter(subghz->txrx->receiver, SubGhzProtocolFlag_Decodable); subghz_worker_set_overrun_callback( @@ -299,9 +288,6 @@ void subghz_free(SubGhz* subghz) { //setting subghz_setting_free(subghz->setting); - // Last setting - subghz_last_setting_free(subghz->last_setting); - //Worker & Protocol & History subghz_receiver_free(subghz->txrx->receiver); subghz_environment_free(subghz->txrx->environment); diff --git a/applications/main/subghz/subghz_history.c b/applications/main/subghz/subghz_history.c index a4906eb73..0af8c0a15 100644 --- a/applications/main/subghz/subghz_history.c +++ b/applications/main/subghz/subghz_history.c @@ -1,5 +1,7 @@ #include "subghz_history.h" #include +#include +#include #define SUBGHZ_HISTORY_MAX 65 #define TAG "SubGhzHistory" @@ -37,9 +39,15 @@ SubGhzHistory* subghz_history_alloc(void) { void subghz_history_free(SubGhzHistory* instance) { furi_assert(instance); - - // Call method instead of code duplicate - subghz_history_reset(instance); + string_clear(instance->tmp_string); + for + M_EACH(item, instance->history->data, SubGhzHistoryItemArray_t) { + string_clear(item->item_str); + string_clear(item->preset->name); + free(item->preset); + flipper_format_free(item->flipper_string); + item->type = 0; + } SubGhzHistoryItemArray_clear(instance->history->data); free(instance->history); free(instance); @@ -133,22 +141,16 @@ bool subghz_history_add_to_history( furi_assert(instance); furi_assert(context); - if(instance->last_index_write >= SUBGHZ_HISTORY_MAX) { - FURI_LOG_W(TAG, "Out of history slots!"); - return false; - } + if(instance->last_index_write >= SUBGHZ_HISTORY_MAX) return false; SubGhzProtocolDecoderBase* decoder_base = context; if((instance->code_last_hash_data == subghz_protocol_decoder_base_get_hash_data(decoder_base)) && ((furi_get_tick() - instance->last_update_timestamp) < 500)) { - //FURI_LOG_W(TAG, "Too short period for add"); instance->last_update_timestamp = furi_get_tick(); return false; } - //FURI_LOG_I(TAG, "Add to history. Total: %d", instance->last_index_write + 1); - instance->code_last_hash_data = subghz_protocol_decoder_base_get_hash_data(decoder_base); instance->last_update_timestamp = furi_get_tick(); diff --git a/applications/main/subghz/subghz_i.h b/applications/main/subghz/subghz_i.h index 16c3838c5..945228a45 100644 --- a/applications/main/subghz/subghz_i.h +++ b/applications/main/subghz/subghz_i.h @@ -33,7 +33,6 @@ #include "subghz_history.h" #include "subghz_setting.h" -#include "subghz_last_setting.h" #include #include @@ -101,11 +100,10 @@ struct SubGhz { SubGhzTestPacket* subghz_test_packet; string_t error_str; SubGhzSetting* setting; - SubGhzLastSetting* last_setting; SubGhzLock lock; bool in_decoder_scene; - SubGhzScene current_scene; + void* rpc_ctx; }; diff --git a/applications/main/subghz/subghz_setting.c b/applications/main/subghz/subghz_setting.c index b065f4ab3..b8f3794eb 100644 --- a/applications/main/subghz/subghz_setting.c +++ b/applications/main/subghz/subghz_setting.c @@ -260,7 +260,13 @@ void subghz_setting_load(SubGhzSetting* instance, const char* file_path) { break; } if(flipper_format_read_uint32(fff_data_file, "Default_frequency", &temp_data32, 1)) { - subghz_setting_set_default_frequency(instance, temp_data32); + for + M_EACH(frequency, instance->frequencies, FrequencyList_t) { + *frequency &= FREQUENCY_MASK; + if(*frequency == temp_data32) { + *frequency |= FREQUENCY_FLAG_DEFAULT; + } + } } // custom preset (optional) @@ -288,16 +294,6 @@ void subghz_setting_load(SubGhzSetting* instance, const char* file_path) { } } -void subghz_setting_set_default_frequency(SubGhzSetting* instance, uint32_t frequency_to_setup) { - for - M_EACH(frequency, instance->frequencies, FrequencyList_t) { - *frequency &= FREQUENCY_MASK; - if(*frequency == frequency_to_setup) { - *frequency |= FREQUENCY_FLAG_DEFAULT; - } - } -} - size_t subghz_setting_get_frequency_count(SubGhzSetting* instance) { furi_assert(instance); return FrequencyList_size(instance->frequencies); diff --git a/applications/main/subghz/subghz_setting.h b/applications/main/subghz/subghz_setting.h index 2f3d6eb36..0590cf499 100644 --- a/applications/main/subghz/subghz_setting.h +++ b/applications/main/subghz/subghz_setting.h @@ -46,5 +46,3 @@ uint32_t subghz_setting_get_hopper_frequency(SubGhzSetting* instance, size_t idx uint32_t subghz_setting_get_frequency_default_index(SubGhzSetting* instance); uint32_t subghz_setting_get_default_frequency(SubGhzSetting* instance); - -void subghz_setting_set_default_frequency(SubGhzSetting* instance, uint32_t frequency_to_setup); \ No newline at end of file diff --git a/applications/main/subghz/views/receiver.c b/applications/main/subghz/views/receiver.c index dd141084a..5736ceb7a 100644 --- a/applications/main/subghz/views/receiver.c +++ b/applications/main/subghz/views/receiver.c @@ -340,7 +340,6 @@ bool subghz_view_receiver_input(InputEvent* event, void* context) { return true; }); } else if(event->key == InputKeyLeft && event->type == InputTypeShort) { - //Config receiver subghz_receiver->callback(SubGhzCustomEventViewReceiverConfig, subghz_receiver->context); } else if(event->key == InputKeyOk && event->type == InputTypeShort) { with_view_model(