Derek Jamison 1 год назад
Родитель
Сommit
5fa329d8fc
8 измененных файлов с 732 добавлено и 837 удалено
  1. 4 0
      CHANGELOG.md
  2. 80 84
      alloc/flip_library_alloc.c
  3. 35 0
      app.c
  4. 1 1
      application.fam
  5. 501 645
      callback/flip_library_callback.c
  6. 40 19
      callback/flip_library_callback.h
  7. 55 60
      flip_library.c
  8. 16 28
      flip_library.h

+ 4 - 0
CHANGELOG.md

@@ -1,3 +1,7 @@
+## v1.3
+- Improved displaying progress.
+- Reset wifi creds on startup.
+
 ## v1.2
 - Improved memory allocation.
 - Added in Dog Facts.

+ 80 - 84
alloc/flip_library_alloc.c

@@ -8,89 +8,83 @@ FlipLibraryApp *flip_library_app_alloc()
     Gui *gui = furi_record_open(RECORD_GUI);
 
     if (!flipper_http_init(flipper_http_rx_callback, app))
-    {
-        FURI_LOG_E(TAG, "Failed to initialize flipper http");
-        return NULL;
-    }
+        {
+            FURI_LOG_E(TAG, "Failed to initialize flipper http");
+            return NULL;
+        }
 
     // Allocate the text input buffer
     app->uart_text_input_buffer_size_ssid = 64;
     app->uart_text_input_buffer_size_password = 64;
-    app->uart_text_input_buffer_size_dictionary = 64;
+    app->uart_text_input_buffer_size_query = 64;
     if (!easy_flipper_set_buffer(&app->uart_text_input_buffer_ssid, app->uart_text_input_buffer_size_ssid))
-    {
-        return NULL;
-    }
+        {
+            return NULL;
+        }
     if (!easy_flipper_set_buffer(&app->uart_text_input_temp_buffer_ssid, app->uart_text_input_buffer_size_ssid))
-    {
-        return NULL;
-    }
+        {
+            return NULL;
+        }
     if (!easy_flipper_set_buffer(&app->uart_text_input_buffer_password, app->uart_text_input_buffer_size_password))
-    {
-        return NULL;
-    }
+        {
+            return NULL;
+        }
     if (!easy_flipper_set_buffer(&app->uart_text_input_temp_buffer_password, app->uart_text_input_buffer_size_password))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_buffer(&app->uart_text_input_buffer_dictionary, app->uart_text_input_buffer_size_dictionary))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_buffer(&app->uart_text_input_temp_buffer_dictionary, app->uart_text_input_buffer_size_dictionary))
-    {
-        return NULL;
-    }
+        {
+            return NULL;
+        }
+    if (!easy_flipper_set_buffer(&app->uart_text_input_buffer_query, app->uart_text_input_buffer_size_query))
+        {
+            return NULL;
+        }
+    if (!easy_flipper_set_buffer(&app->uart_text_input_temp_buffer_query, app->uart_text_input_buffer_size_query))
+        {
+            return NULL;
+        }
 
     // Allocate ViewDispatcher
     if (!easy_flipper_set_view_dispatcher(&app->view_dispatcher, gui, app))
-    {
-        return NULL;
-    }
+        {
+            return NULL;
+        }
+    view_dispatcher_set_custom_event_callback(app->view_dispatcher, flip_library_custom_event_callback);
 
     // Main view
-    if (!easy_flipper_set_view(&app->view_random_facts, FlipLibraryViewRandomFactsRun, view_draw_callback_random_facts, NULL, callback_to_random_facts, &app->view_dispatcher, app))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_view(&app->view_dictionary, FlipLibraryViewDictionaryRun, view_draw_callback_dictionary_run, NULL, callback_to_submenu, &app->view_dispatcher, app))
-    {
-        return NULL;
-    }
+    if (!easy_flipper_set_view(&app->view_loader, FlipLibraryViewLoader, flip_library_loader_draw_callback, NULL, callback_to_random_facts, &app->view_dispatcher, app))
+        {
+            return NULL;
+        }
+    flip_library_loader_init(app->view_loader);
 
     // Widget
-    if (!easy_flipper_set_widget(&app->widget, FlipLibraryViewAbout, "FlipLibrary v1.2\n-----\nDictionary, random facts, and\nmore.\n-----\nwww.github.com/jblanked", callback_to_submenu, &app->view_dispatcher))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_widget(&app->widget_random_fact, FlipLibraryViewRandomFactWidget, "Error, try again.", callback_to_random_facts, &app->view_dispatcher))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_widget(&app->widget_dictionary, FlipLibraryViewDictionaryWidget, "Error, try again.", callback_to_submenu, &app->view_dispatcher))
-    {
-        return NULL;
-    }
+    if (!easy_flipper_set_widget(&app->widget_about, FlipLibraryViewAbout, "FlipLibrary v1.3\n-----\nDictionary, random facts, and\nmore.\n-----\nwww.github.com/jblanked", callback_to_submenu, &app->view_dispatcher))
+        {
+            return NULL;
+        }
+    if (!easy_flipper_set_widget(&app->widget_result, FlipLibraryViewWidgetResult, "Error, try again.", callback_to_random_facts, &app->view_dispatcher))
+        {
+            return NULL;
+        }
 
     // Text Input
     if (!easy_flipper_set_uart_text_input(&app->uart_text_input_ssid, FlipLibraryViewTextInputSSID, "Enter SSID", app->uart_text_input_temp_buffer_ssid, app->uart_text_input_buffer_size_ssid, text_updated_ssid, callback_to_wifi_settings, &app->view_dispatcher, app))
-    {
-        return NULL;
-    }
+        {
+            return NULL;
+        }
     if (!easy_flipper_set_uart_text_input(&app->uart_text_input_password, FlipLibraryViewTextInputPassword, "Enter Password", app->uart_text_input_temp_buffer_password, app->uart_text_input_buffer_size_password, text_updated_password, callback_to_wifi_settings, &app->view_dispatcher, app))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_uart_text_input(&app->uart_text_input_dictionary, FlipLibraryViewDictionaryTextInput, "Enter a word", app->uart_text_input_temp_buffer_dictionary, app->uart_text_input_buffer_size_dictionary, text_updated_dictionary, callback_to_submenu, &app->view_dispatcher, app))
-    {
-        return NULL;
-    }
+        {
+            return NULL;
+        }
+    if (!easy_flipper_set_uart_text_input(&app->uart_text_input_query, FlipLibraryViewTextInputQuery, "Enter Query", app->uart_text_input_temp_buffer_query, app->uart_text_input_buffer_size_query, text_updated_query, callback_to_submenu, &app->view_dispatcher, app))
+        {
+            return NULL;
+        }
 
     // Variable Item List
     if (!easy_flipper_set_variable_item_list(&app->variable_item_list_wifi, FlipLibraryViewSettings, settings_item_selected, callback_to_submenu, &app->view_dispatcher, app))
-    {
-        return NULL;
-    }
+        {
+            return NULL;
+        }
 
     app->variable_item_ssid = variable_item_list_add(app->variable_item_list_wifi, "SSID", 0, NULL, NULL);
     app->variable_item_password = variable_item_list_add(app->variable_item_list_wifi, "Password", 0, NULL, NULL);
@@ -98,14 +92,14 @@ FlipLibraryApp *flip_library_app_alloc()
     variable_item_set_current_value_text(app->variable_item_password, "");
 
     // Submenu
-    if (!easy_flipper_set_submenu(&app->submenu_main, FlipLibraryViewSubmenuMain, "FlipLibrary v1.2", callback_exit_app, &app->view_dispatcher))
-    {
-        return NULL;
-    }
+    if (!easy_flipper_set_submenu(&app->submenu_main, FlipLibraryViewSubmenuMain, "FlipLibrary v1.3", callback_exit_app, &app->view_dispatcher))
+        {
+            return NULL;
+        }
     if (!easy_flipper_set_submenu(&app->submenu_random_facts, FlipLibraryViewRandomFacts, "Random Facts", callback_to_submenu, &app->view_dispatcher))
-    {
-        return NULL;
-    }
+        {
+            return NULL;
+        }
 
     submenu_add_item(app->submenu_main, "Random Fact", FlipLibrarySubmenuIndexRandomFacts, callback_submenu_choices, app);
     submenu_add_item(app->submenu_main, "Dictionary", FlipLibrarySubmenuIndexDictionary, callback_submenu_choices, app);
@@ -119,24 +113,26 @@ FlipLibraryApp *flip_library_app_alloc()
 
     // load settings
     if (load_settings(app->uart_text_input_buffer_ssid, app->uart_text_input_buffer_size_ssid, app->uart_text_input_buffer_password, app->uart_text_input_buffer_size_password))
-    {
-        // Update variable items
-        if (app->variable_item_ssid)
-            variable_item_set_current_value_text(app->variable_item_ssid, app->uart_text_input_buffer_ssid);
-        // dont show password
-
-        // Copy items into their temp buffers with safety checks
-        if (app->uart_text_input_buffer_ssid && app->uart_text_input_temp_buffer_ssid)
-        {
-            strncpy(app->uart_text_input_temp_buffer_ssid, app->uart_text_input_buffer_ssid, app->uart_text_input_buffer_size_ssid - 1);
-            app->uart_text_input_temp_buffer_ssid[app->uart_text_input_buffer_size_ssid - 1] = '\0';
-        }
-        if (app->uart_text_input_buffer_password && app->uart_text_input_temp_buffer_password)
         {
-            strncpy(app->uart_text_input_temp_buffer_password, app->uart_text_input_buffer_password, app->uart_text_input_buffer_size_password - 1);
-            app->uart_text_input_temp_buffer_password[app->uart_text_input_buffer_size_password - 1] = '\0';
+            // Update variable items
+            if (app->variable_item_ssid)
+                {
+                    variable_item_set_current_value_text(app->variable_item_ssid, app->uart_text_input_buffer_ssid);
+                }
+            // dont show password
+
+            // Copy items into their temp buffers with safety checks
+            if (app->uart_text_input_buffer_ssid && app->uart_text_input_temp_buffer_ssid)
+                {
+                    strncpy(app->uart_text_input_temp_buffer_ssid, app->uart_text_input_buffer_ssid, app->uart_text_input_buffer_size_ssid - 1);
+                    app->uart_text_input_temp_buffer_ssid[app->uart_text_input_buffer_size_ssid - 1] = '\0';
+                }
+            if (app->uart_text_input_buffer_password && app->uart_text_input_temp_buffer_password)
+                {
+                    strncpy(app->uart_text_input_temp_buffer_password, app->uart_text_input_buffer_password, app->uart_text_input_buffer_size_password - 1);
+                    app->uart_text_input_temp_buffer_password[app->uart_text_input_buffer_size_password - 1] = '\0';
+                }
         }
-    }
 
     // assign app instance
     app_instance = app;

+ 35 - 0
app.c

@@ -21,6 +21,41 @@ int32_t flip_library_app(void *p)
         return -1;
     }
 
+    if(app_instance->uart_text_input_buffer_ssid != NULL &&
+       app_instance->uart_text_input_buffer_password != NULL) {
+        // Try to wait for pong response.
+        uint8_t counter = 10;
+        while(fhttp.state == INACTIVE && --counter > 0) {
+            FURI_LOG_D(TAG, "Waiting for PONG");
+            furi_delay_ms(100);
+        }
+
+        FURI_LOG_E(TAG, "Counter: %d", counter);
+        if(counter == 0) {
+            DialogsApp* dialogs = furi_record_open(RECORD_DIALOGS);
+            DialogMessage* message = dialog_message_alloc();
+            dialog_message_set_header(
+                message, "WIFI NOT RESPONDING", 64, 0, AlignCenter, AlignTop);
+            dialog_message_set_text(
+                message,
+                "Ensure ESP32 is connected\nand latest FlipperHTTP\nfirmware is installed.",
+                0,
+                63,
+                AlignLeft,
+                AlignBottom);
+            dialog_message_show(dialogs, message);
+            dialog_message_free(message);
+            furi_record_close(RECORD_DIALOGS);
+        }
+
+        // Switch to application wifi settings
+        if(!flipper_http_save_wifi(
+               app_instance->uart_text_input_buffer_ssid,
+               app_instance->uart_text_input_buffer_password)) {
+            FURI_LOG_E(TAG, "Failed to save wifi settings");
+        }
+    }
+
     // Run the view dispatcher
     view_dispatcher_run(app_instance->view_dispatcher);
 

+ 1 - 1
application.fam

@@ -10,5 +10,5 @@ App(
     fap_description="Dictionary, random facts, and more.",
     fap_author="JBlanked",
     fap_weburl="https://github.com/jblanked/FlipLibrary",
-    fap_version = "1.2",
+    fap_version = "1.3",
 )

Разница между файлами не показана из-за своего большого размера
+ 501 - 645
callback/flip_library_callback.c


+ 40 - 19
callback/flip_library_callback.h

@@ -5,34 +5,55 @@
 
 #define MAX_TOKENS 512 // Adjust based on expected JSON size
 
+typedef enum FactState FactState;
+enum FactState
+{
+    FactStateInitial,
+    FactStateRequested,
+    FactStateReceived,
+    FactStateParsed,
+    FactStateParseError,
+    FactStateError,
+};
+
+typedef enum FlipLibraryCustomEvent FlipLibraryCustomEvent;
+enum FlipLibraryCustomEvent
+{
+    FlipLibraryCustomEventProcess,
+};
+
+typedef struct FactLoaderModel FactLoaderModel;
+typedef bool (*FactLoaderFetch)(FactLoaderModel *model);
+typedef char *(*FactLoaderParser)(FactLoaderModel *model);
+struct FactLoaderModel
+{
+    char *title;
+    char *fact_text;
+    FactState fact_state;
+    FactLoaderFetch fetcher;
+    FactLoaderParser parser;
+    void *parser_context;
+    size_t request_index;
+    size_t request_count;
+    ViewNavigationCallback back_callback;
+    FuriTimer *timer;
+};
+
 extern uint32_t random_facts_index;
 extern bool sent_random_fact_request;
 extern bool random_fact_request_success;
 extern bool random_fact_request_success_all;
 extern char *random_fact;
 
-// Parse JSON to find the "text" key
-char *flip_library_parse_random_fact();
-
-char *flip_library_parse_cat_fact();
-
-char *flip_library_parse_dog_fact();
-
-char *flip_library_parse_quote();
-
-char *flip_library_parse_dictionary();
-
-void flip_library_request_error(Canvas *canvas);
+void flip_library_generic_switch_to_view(FlipLibraryApp *app, char *title, FactLoaderFetch fetcher, FactLoaderParser parser, size_t request_count, ViewNavigationCallback back, uint32_t view_id);
 
-void flip_library_draw_fact(char *message, Widget **widget);
+void flip_library_loader_draw_callback(Canvas *canvas, void *model);
 
-// Callback for drawing the main screen
-void view_draw_callback_random_facts(Canvas *canvas, void *model);
+void flip_library_loader_init(View *view);
 
-void view_draw_callback_dictionary_run(Canvas *canvas, void *model);
+void flip_library_loader_free_model(View *view);
 
-// Input callback for the view (async input handling)
-bool view_input_callback_random_facts(InputEvent *event, void *context);
+bool flip_library_custom_event_callback(void *context, uint32_t index);
 
 void callback_submenu_choices(void *context, uint32_t index);
 
@@ -40,7 +61,7 @@ void text_updated_ssid(void *context);
 
 void text_updated_password(void *context);
 
-void text_updated_dictionary(void *context);
+void text_updated_query(void *context);
 
 uint32_t callback_to_submenu(void *context);
 

+ 55 - 60
flip_library.c

@@ -2,96 +2,91 @@
 
 FlipLibraryApp *app_instance = NULL;
 
+void flip_library_loader_free_model(View* view);
+
 // Function to free the resources used by FlipLibraryApp
 void flip_library_app_free(FlipLibraryApp *app)
 {
     if (!app)
-    {
-        FURI_LOG_E(TAG, "FlipLibraryApp is NULL");
-        return;
-    }
+        {
+            FURI_LOG_E(TAG, "FlipLibraryApp is NULL");
+            return;
+        }
 
     // Free View(s)
-    if (app->view_random_facts)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, FlipLibraryViewRandomFactsRun);
-        view_free(app->view_random_facts);
-    }
-    if (app->view_dictionary)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, FlipLibraryViewDictionaryRun);
-        view_free(app->view_dictionary);
-    }
+    if (app->view_loader)
+        {
+            view_dispatcher_remove_view(app->view_dispatcher, FlipLibraryViewLoader);
+            flip_library_loader_free_model(app->view_loader);
+            view_free(app->view_loader);
+        }
 
     // Free Submenu(s)
     if (app->submenu_main)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, FlipLibraryViewSubmenuMain);
-        submenu_free(app->submenu_main);
-    }
+        {
+            view_dispatcher_remove_view(app->view_dispatcher, FlipLibraryViewSubmenuMain);
+            submenu_free(app->submenu_main);
+        }
     if (app->submenu_random_facts)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, FlipLibraryViewRandomFacts);
-        submenu_free(app->submenu_random_facts);
-    }
+        {
+            view_dispatcher_remove_view(app->view_dispatcher, FlipLibraryViewRandomFacts);
+            submenu_free(app->submenu_random_facts);
+        }
 
     // Free Widget(s)
-    if (app->widget)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, FlipLibraryViewAbout);
-        widget_free(app->widget);
-    }
-    if (app->widget_random_fact)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, FlipLibraryViewRandomFactWidget);
-        widget_free(app->widget_random_fact);
-    }
-    if (app->widget_dictionary)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, FlipLibraryViewDictionaryWidget);
-        widget_free(app->widget_dictionary);
-    }
+    if (app->widget_about)
+        {
+            view_dispatcher_remove_view(app->view_dispatcher, FlipLibraryViewAbout);
+            widget_free(app->widget_about);
+        }
+    if (app->widget_result)
+        {
+            view_dispatcher_remove_view(app->view_dispatcher, FlipLibraryViewWidgetResult);
+            widget_free(app->widget_result);
+        }
 
     // Free Variable Item List(s)
     if (app->variable_item_list_wifi)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, FlipLibraryViewSettings);
-        variable_item_list_free(app->variable_item_list_wifi);
-    }
+        {
+            view_dispatcher_remove_view(app->view_dispatcher, FlipLibraryViewSettings);
+            variable_item_list_free(app->variable_item_list_wifi);
+        }
 
     // Free Text Input(s)
     if (app->uart_text_input_ssid)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, FlipLibraryViewTextInputSSID);
-        uart_text_input_free(app->uart_text_input_ssid);
-    }
+        {
+            view_dispatcher_remove_view(app->view_dispatcher, FlipLibraryViewTextInputSSID);
+            uart_text_input_free(app->uart_text_input_ssid);
+        }
     if (app->uart_text_input_password)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, FlipLibraryViewTextInputPassword);
-        uart_text_input_free(app->uart_text_input_password);
-    }
-    if (app->uart_text_input_dictionary)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, FlipLibraryViewDictionaryTextInput);
-        uart_text_input_free(app->uart_text_input_dictionary);
-    }
+        {
+            view_dispatcher_remove_view(app->view_dispatcher, FlipLibraryViewTextInputPassword);
+            uart_text_input_free(app->uart_text_input_password);
+        }
+    if (app->uart_text_input_query)
+        {
+            view_dispatcher_remove_view(app->view_dispatcher, FlipLibraryViewTextInputQuery);
+            uart_text_input_free(app->uart_text_input_query);
+        }
 
     // deinitalize flipper http
     flipper_http_deinit();
 
     // free the view dispatcher
     if (app->view_dispatcher)
-        view_dispatcher_free(app->view_dispatcher);
+        {
+            view_dispatcher_free(app->view_dispatcher);
+        }
 
     // close the gui
     furi_record_close(RECORD_GUI);
 
     if (app_instance)
-    {
-        // free the app instance
-        free(app_instance);
-        app_instance = NULL;
-    }
+        {
+            // free the app instance
+            free(app_instance);
+            app_instance = NULL;
+        }
     // free the app
     free(app);
 }

+ 16 - 28
flip_library.h

@@ -33,44 +33,32 @@ typedef enum
 typedef enum
 {
     FlipLibraryViewRandomFacts = 7,        // The random facts main screen
-    FlipLibraryViewRandomFactsRun = 8,     // The random facts widget that displays the random fact
-    FlipLibraryViewSubmenuMain = 9,        // The submenu screen
-    FlipLibraryViewAbout = 10,             // The about screen
-    FlipLibraryViewSettings = 11,          // The settings screen
-    FlipLibraryViewTextInputSSID = 12,     // The text input screen (SSID)
-    FlipLibraryViewTextInputPassword = 13, // The text input screen (password)
-    FlipLibraryViewDictionary = 14,        // The dictionary submenu screen
-    //
-    FlipLibraryViewDictionaryTextInput = 15,
-    FlipLibraryViewDictionaryRun = 16,
-    //
-    FlipLibraryViewRandomFactsCats = 17,
-    FlipLibraryViewRandomFactsDogs = 18,
-    FlipLibraryViewRandomFactsQuotes = 19,
-    FlipLibraryViewRandomFactsAll = 20,
-    //
-    FlipLibraryViewRandomFactWidget = 21, // The text box that displays the random fact
-    FlipLibraryViewDictionaryWidget = 22, // The text box that displays the dictionary
+    FlipLibraryViewLoader,                // The loader screen retrieves data from the internet
+    FlipLibraryViewSubmenuMain,           // The submenu screen
+    FlipLibraryViewAbout,                 // The about screen
+    FlipLibraryViewSettings,              // The settings screen
+    FlipLibraryViewTextInputSSID,         // The text input screen (SSID)
+    FlipLibraryViewTextInputPassword,     // The text input screen (password)
+    FlipLibraryViewTextInputQuery,        // Query the user for information
+    FlipLibraryViewWidgetResult,          // The text box that displays the random fact
 } FlipLibraryView;
 
 // Each screen will have its own view
 typedef struct
 {
     ViewDispatcher *view_dispatcher;            // Switches between our views
-    View *view_random_facts;                    // The main screen that displays the random fact
-    View *view_dictionary;                      // The dictionary screen
+    View *view_loader;                          // The screen that loads data from internet
     Submenu *submenu_main;                      // The submenu for the main screen
     Submenu *submenu_random_facts;              // The submenu for the random facts screen
-    Widget *widget;                             // The widget
+    Widget *widget_about;                       // The widget for the about screen
     VariableItemList *variable_item_list_wifi;  // The variable item list (WiFi settings)
     VariableItem *variable_item_ssid;           // The variable item (SSID)
     VariableItem *variable_item_password;       // The variable item (password)
     UART_TextInput *uart_text_input_ssid;       // The text input for the SSID
     UART_TextInput *uart_text_input_password;   // The text input for the password
-    UART_TextInput *uart_text_input_dictionary; // The text input for the dictionary
+    UART_TextInput *uart_text_input_query;      // The text input for querying information
     //
-    Widget *widget_random_fact; // The text box that displays the random fact
-    Widget *widget_dictionary;  // The text box that displays the dictionary
+    Widget *widget_result;      // The text box that displays the result
 
     char *uart_text_input_buffer_ssid;         // Buffer for the text input (SSID)
     char *uart_text_input_temp_buffer_ssid;    // Temporary buffer for the text input (SSID)
@@ -80,12 +68,12 @@ typedef struct
     char *uart_text_input_temp_buffer_password;    // Temporary buffer for the text input (password)
     uint32_t uart_text_input_buffer_size_password; // Size of the text input buffer (password)
 
-    char *uart_text_input_buffer_dictionary;         // Buffer for the text input (dictionary)
-    char *uart_text_input_temp_buffer_dictionary;    // Temporary buffer for the text input (dictionary)
-    uint32_t uart_text_input_buffer_size_dictionary; // Size of the text input buffer (dictionary)
+    char *uart_text_input_buffer_query; // Buffer for the text input (query)
+    char *uart_text_input_temp_buffer_query; // Temporary buffer for the text input (query)
+    uint32_t uart_text_input_buffer_size_query; // Size of the text input buffer (query)
 } FlipLibraryApp;
 
 // Function to free the resources used by FlipLibraryApp
 void flip_library_app_free(FlipLibraryApp *app);
 extern FlipLibraryApp *app_instance;
-#endif // FLIP_LIBRARY_E_H
+#endif // FLIP_LIBRARY_E_H

Некоторые файлы не были показаны из-за большого количества измененных файлов