| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- #include "../esp_flasher_app_i.h"
- #include "../esp_flasher_worker.h"
- void esp_flasher_console_output_handle_rx_data_cb(uint8_t* buf, size_t len, void* context) {
- furi_assert(context);
- EspFlasherApp* app = context;
- // If text box store gets too big, then truncate it
- app->text_box_store_strlen += len;
- if(app->text_box_store_strlen >= ESP_FLASHER_TEXT_BOX_STORE_SIZE - 1) {
- furi_string_right(app->text_box_store, app->text_box_store_strlen / 2);
- app->text_box_store_strlen = furi_string_size(app->text_box_store) + len;
- }
- // Null-terminate buf and append to text box store
- buf[len] = '\0';
- furi_string_cat_printf(app->text_box_store, "%s", buf);
- view_dispatcher_send_custom_event(app->view_dispatcher, EspFlasherEventRefreshConsoleOutput);
- }
- void esp_flasher_scene_console_output_on_enter(void* context) {
- EspFlasherApp* app = context;
- // Reset text box and set font
- TextBox* text_box = app->text_box;
- text_box_reset(text_box);
- text_box_set_font(text_box, TextBoxFontText);
- // Set focus on end
- text_box_set_focus(text_box, TextBoxFocusEnd);
- // Set starting text
- text_box_set_text(app->text_box, furi_string_get_cstr(app->text_box_store));
- // Set scene state and switch view
- scene_manager_set_scene_state(app->scene_manager, EspFlasherSceneConsoleOutput, 0);
- view_dispatcher_switch_to_view(app->view_dispatcher, EspFlasherAppViewConsoleOutput);
- // Register callbacks to receive data
- // setup callback for general log rx thread
- esp_flasher_uart_set_handle_rx_data_cb(
- app->uart,
- esp_flasher_worker_handle_rx_data_cb); // setup callback for general log rx thread
- // Start flash worker
- esp_flasher_worker_start_thread(app);
- }
- bool esp_flasher_scene_console_output_on_event(void* context, SceneManagerEvent event) {
- EspFlasherApp* app = context;
- bool consumed = false;
- if(event.type == SceneManagerEventTypeCustom) {
- text_box_set_text(app->text_box, furi_string_get_cstr(app->text_box_store));
- consumed = true;
- } else if(event.type == SceneManagerEventTypeTick) {
- consumed = true;
- } else {
- if(app->flash_worker_busy) {
- // ignore button presses while flashing
- consumed = true;
- }
- }
- return consumed;
- }
- void esp_flasher_scene_console_output_on_exit(void* context) {
- EspFlasherApp* app = context;
- esp_flasher_worker_stop_thread(app);
- // Unregister rx callback
- esp_flasher_uart_set_handle_rx_data_cb(app->uart, NULL);
- }
|