|
|
@@ -50,7 +50,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) {
|
|
|
FURI_LOG_E(TAG, "HelloWorldApp is NULL");
|
|
|
@@ -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) {
|
|
|
FURI_LOG_E(TAG, "HelloWorldApp is NULL");
|
|
|
@@ -178,7 +178,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)) {
|
|
|
start++;
|
|
|
@@ -193,7 +193,11 @@ 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) {
|
|
|
@@ -272,7 +276,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];
|
|
|
if(ssid_item == NULL) {
|
|
|
@@ -282,11 +287,11 @@ bool flip_wifi_handle_scan(FlipWiFiApp* app) {
|
|
|
char ssid[64];
|
|
|
snprintf(ssid, sizeof(ssid), "%s", ssid_item);
|
|
|
submenu_add_item(
|
|
|
- app->submenu_wifi_scan,
|
|
|
+ app_instance->submenu_wifi_scan,
|
|
|
ssid,
|
|
|
FlipWiFiSubmenuIndexWiFiScanStart + i,
|
|
|
callback_submenu_choices,
|
|
|
- app);
|
|
|
+ app_instance);
|
|
|
}
|
|
|
free(data_cstr);
|
|
|
furi_string_free(scan_data);
|
|
|
@@ -300,8 +305,29 @@ void callback_submenu_choices(void* context, uint32_t index) {
|
|
|
}
|
|
|
switch(index) {
|
|
|
case FlipWiFiSubmenuIndexWiFiScan:
|
|
|
+ // Popup
|
|
|
+ if(!app->popup) {
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ 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) {
|
|
|
- popup_set_header(app->popup, "[ERROR]", 0, 0, AlignLeft, AlignTop);
|
|
|
popup_set_text(
|
|
|
app->popup,
|
|
|
"WiFi Devboard Disconnected.\nPlease reconnect the board.",
|
|
|
@@ -309,66 +335,26 @@ void callback_submenu_choices(void* context, uint32_t index) {
|
|
|
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) {
|
|
|
- // Wait for the feed to be received
|
|
|
- furi_delay_ms(100);
|
|
|
- }
|
|
|
- furi_timer_stop(fhttp.get_timeout_timer);
|
|
|
- // set each SSID as a submenu item
|
|
|
- if(fhttp.state != IDLE) {
|
|
|
- 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
|
|
|
- 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);
|