|
|
@@ -48,7 +48,7 @@ uint32_t callback_to_submenu_saved(void *context)
|
|
|
ssid_index = 0;
|
|
|
return FlipWiFiViewSubmenuSaved;
|
|
|
}
|
|
|
-void popup_callback_saved(void *context)
|
|
|
+static void popup_callback_saved(void *context)
|
|
|
{
|
|
|
FlipWiFiApp *app = (FlipWiFiApp *)context;
|
|
|
if (!app)
|
|
|
@@ -58,7 +58,7 @@ void popup_callback_saved(void *context)
|
|
|
}
|
|
|
view_dispatcher_switch_to_view(app->view_dispatcher, FlipWiFiViewSubmenuSaved);
|
|
|
}
|
|
|
-void popup_callback_main(void *context)
|
|
|
+static void popup_callback_main(void *context)
|
|
|
{
|
|
|
FlipWiFiApp *app = (FlipWiFiApp *)context;
|
|
|
if (!app)
|
|
|
@@ -180,7 +180,7 @@ bool flip_wifi_view_input_callback_saved(InputEvent *event, void *context)
|
|
|
|
|
|
// Function to trim leading and trailing whitespace
|
|
|
// Returns the trimmed start pointer and updates the length
|
|
|
-char *trim_whitespace(char *start, size_t *length)
|
|
|
+static char *trim_whitespace(char *start, size_t *length)
|
|
|
{
|
|
|
// Trim leading whitespace
|
|
|
while (*length > 0 && isspace((unsigned char)*start))
|
|
|
@@ -198,8 +198,13 @@ char *trim_whitespace(char *start, size_t *length)
|
|
|
return start;
|
|
|
}
|
|
|
|
|
|
-bool flip_wifi_handle_scan(FlipWiFiApp *app)
|
|
|
+static bool flip_wifi_handle_scan()
|
|
|
{
|
|
|
+ if (!app_instance)
|
|
|
+ {
|
|
|
+ FURI_LOG_E(TAG, "FlipWiFiApp is NULL");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
// load the received data from the saved file
|
|
|
FuriString *scan_data = flipper_http_load_from_file(fhttp.file_path);
|
|
|
if (scan_data == NULL)
|
|
|
@@ -287,7 +292,8 @@ bool flip_wifi_handle_scan(FlipWiFiApp *app)
|
|
|
}
|
|
|
|
|
|
// Add each SSID as a submenu item
|
|
|
- submenu_set_header(app->submenu_wifi_scan, "WiFi Nearby");
|
|
|
+ submenu_reset(app_instance->submenu_wifi_scan);
|
|
|
+ submenu_set_header(app_instance->submenu_wifi_scan, "WiFi Nearby");
|
|
|
for (uint32_t i = 0; i < ssid_count; i++)
|
|
|
{
|
|
|
char *ssid_item = ssid_list[i];
|
|
|
@@ -298,7 +304,7 @@ bool flip_wifi_handle_scan(FlipWiFiApp *app)
|
|
|
}
|
|
|
char ssid[64];
|
|
|
snprintf(ssid, sizeof(ssid), "%s", ssid_item);
|
|
|
- submenu_add_item(app->submenu_wifi_scan, ssid, FlipWiFiSubmenuIndexWiFiScanStart + i, callback_submenu_choices, app);
|
|
|
+ submenu_add_item(app_instance->submenu_wifi_scan, ssid, FlipWiFiSubmenuIndexWiFiScanStart + i, callback_submenu_choices, app_instance);
|
|
|
}
|
|
|
free(data_cstr);
|
|
|
furi_string_free(scan_data);
|
|
|
@@ -315,67 +321,30 @@ void callback_submenu_choices(void *context, uint32_t index)
|
|
|
switch (index)
|
|
|
{
|
|
|
case FlipWiFiSubmenuIndexWiFiScan:
|
|
|
- if (fhttp.state == INACTIVE)
|
|
|
- {
|
|
|
- popup_set_header(app->popup, "[ERROR]", 0, 0, AlignLeft, AlignTop);
|
|
|
- popup_set_text(app->popup, "WiFi Devboard Disconnected.\nPlease reconnect the board.", 0, 40, AlignLeft, AlignTop);
|
|
|
- view_set_previous_callback(popup_get_view(app->popup), callback_to_submenu_main);
|
|
|
- popup_set_callback(app->popup, popup_callback_main);
|
|
|
- // switch to the popup view
|
|
|
- view_dispatcher_switch_to_view(app->view_dispatcher, FlipWiFiViewPopup);
|
|
|
- }
|
|
|
- // scan for wifi
|
|
|
- if (!flipper_http_scan_wifi())
|
|
|
- {
|
|
|
- FURI_LOG_E(TAG, "Failed to scan for WiFi");
|
|
|
- fhttp.state = ISSUE;
|
|
|
- return;
|
|
|
- }
|
|
|
- else // start the async feed request
|
|
|
- {
|
|
|
- furi_timer_start(fhttp.get_timeout_timer, TIMEOUT_DURATION_TICKS);
|
|
|
- fhttp.state = RECEIVING;
|
|
|
- }
|
|
|
- while (fhttp.state == RECEIVING && furi_timer_is_running(fhttp.get_timeout_timer) > 0)
|
|
|
+ // Popup
|
|
|
+ if (!app->popup)
|
|
|
{
|
|
|
- // Wait for the feed to be received
|
|
|
- furi_delay_ms(100);
|
|
|
+ if (!easy_flipper_set_popup(&app->popup, FlipWiFiViewPopup, "Success", 0, 0, "The WiFi setting has been set.", 0, 10, popup_callback_saved, callback_to_submenu_saved, &app->view_dispatcher, app))
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
}
|
|
|
- furi_timer_stop(fhttp.get_timeout_timer);
|
|
|
- // set each SSID as a submenu item
|
|
|
- if (fhttp.state != IDLE)
|
|
|
+ popup_set_header(app->popup, "[ERROR]", 0, 0, AlignLeft, AlignTop);
|
|
|
+ view_set_previous_callback(popup_get_view(app->popup), callback_to_submenu_main);
|
|
|
+ popup_set_callback(app->popup, popup_callback_main);
|
|
|
+
|
|
|
+ if (fhttp.state == INACTIVE)
|
|
|
{
|
|
|
- fhttp.state = ISSUE;
|
|
|
- FURI_LOG_E(TAG, "Failed to receive WiFi scan");
|
|
|
- popup_set_header(app->popup, "[ERROR]", 0, 0, AlignLeft, AlignTop);
|
|
|
- popup_set_text(app->popup, "Failed to scan...\nTry reconnecting the board!", 0, 40, AlignLeft, AlignTop);
|
|
|
- view_set_previous_callback(popup_get_view(app->popup), callback_to_submenu_main);
|
|
|
- popup_set_callback(app->popup, popup_callback_main);
|
|
|
- // switch to the popup view
|
|
|
+ popup_set_text(app->popup, "WiFi Devboard Disconnected.\nPlease reconnect the board.", 0, 40, AlignLeft, AlignTop);
|
|
|
view_dispatcher_switch_to_view(app->view_dispatcher, FlipWiFiViewPopup);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- submenu_reset(app->submenu_wifi_scan);
|
|
|
- submenu_set_header(app->submenu_wifi_scan, "WiFi Nearby");
|
|
|
- if (flip_wifi_handle_scan(app))
|
|
|
- {
|
|
|
- // switch to the submenu
|
|
|
- view_dispatcher_switch_to_view(app->view_dispatcher, FlipWiFiViewSubmenuScan);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- fhttp.state = ISSUE;
|
|
|
- FURI_LOG_E(TAG, "Failed to handle WiFi scan");
|
|
|
- popup_set_header(app->popup, "[ERROR]", 0, 0, AlignLeft, AlignTop);
|
|
|
- popup_set_text(app->popup, "Failed to scan...\nTry reconnecting the board!", 0, 40, AlignLeft, AlignTop);
|
|
|
- view_set_previous_callback(popup_get_view(app->popup), callback_to_submenu_main);
|
|
|
- popup_set_callback(app->popup, popup_callback_main);
|
|
|
- // switch to the popup view
|
|
|
- view_dispatcher_switch_to_view(app->view_dispatcher, FlipWiFiViewPopup);
|
|
|
- }
|
|
|
return;
|
|
|
}
|
|
|
+
|
|
|
+ // update the text in case the loading task fails
|
|
|
+ popup_set_text(app->popup, "Failed to scan...\nTry reconnecting the board!", 0, 40, AlignLeft, AlignTop);
|
|
|
+
|
|
|
+ // scan for wifi ad parse the results
|
|
|
+ flipper_http_loading_task(flipper_http_scan_wifi, flip_wifi_handle_scan, FlipWiFiViewSubmenuScan, FlipWiFiViewPopup, &app->view_dispatcher);
|
|
|
break;
|
|
|
case FlipWiFiSubmenuIndexWiFiSaved:
|
|
|
view_dispatcher_switch_to_view(app->view_dispatcher, FlipWiFiViewSubmenuSaved);
|