Skip to content

Commit 8a814e8

Browse files
committed
Fix du crash lors de la sauvegarde de nouveaux paramètres wifi
1 parent d72025b commit 8a814e8

File tree

4 files changed

+33
-17
lines changed

4 files changed

+33
-17
lines changed

lightkit/software/data/wifi_settings.html

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ <h2>Wifi</h2>
7777
<!-- Client -->
7878
<div id="wifiClientForm">
7979
<p class="classic_form_help">
80-
Le module se connecte à un réseau wifi existant grâce au SSID et mode passe wifi.
80+
Le module se connecte à un réseau wifi existant grâce au SSID et mot de passe wifi.
8181
</p>
8282

8383
<label for="wifiClientSSID">SSID :</label><br>
@@ -132,8 +132,8 @@ <h2>Wifi</h2>
132132

133133
function write_wifi_form(json)
134134
{
135-
document.getElementById('wifiModeAP').checked = (json["mode"] == MODE_AP);
136-
document.getElementById('wifiModeClient').checked = (json["mode"] == MODE_CLIENT);
135+
document.getElementById('wifiModeAP').checked = (json["userMode"] == MODE_AP);
136+
document.getElementById('wifiModeClient').checked = (json["userMode"] == MODE_CLIENT);
137137
document.getElementById('wifiAPSSID').value = json["ap"]["ssid"];
138138
document.getElementById('wifiAPPassword').value = json["ap"]["password"];
139139
document.getElementById('wifiAPIP').value = json["ap"]["ip"];
@@ -154,11 +154,11 @@ <h2>Wifi</h2>
154154
json["use_default"] = false;
155155

156156
if (document.getElementById('wifiModeAP').checked) {
157-
json["mode"] = MODE_AP;
157+
json["userMode"] = MODE_AP;
158158
} else if (document.getElementById('wifiModeClient').checked) {
159-
json["mode"] = MODE_CLIENT;
159+
json["userMode"] = MODE_CLIENT;
160160
} else {
161-
json["mode"] = MODE_NONE;
161+
json["userMode"] = MODE_NONE;
162162
}
163163
json["ap"] = {};
164164
json["ap"]["ssid"] = document.getElementById('wifiAPSSID').value;

lightkit/software/src/web/web_server.cpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,7 @@ void handle_get_wifi_settings(void)
396396

397397
wifiHandle = wifi_get_handle();
398398

399-
json["mode"] = wifiHandle->mode;
399+
json["userMode"] = wifiHandle->userMode;
400400
json["ap"]["ssid"] = wifiHandle->ap.ssid;
401401
json["ap"]["password"] = wifiHandle->ap.password;
402402
json["ap"]["channel"] = wifiHandle->ap.channel;
@@ -420,12 +420,9 @@ void handle_set_wifi_settings(void)
420420
{
421421
String reason = "";
422422
int32_t ret = 0;
423-
wifi_handle_t * wifiHandle;
424423
wifi_handle_t wifiHandleTmp;
425424
DynamicJsonDocument json(1024);
426425

427-
wifiHandle = wifi_get_handle();
428-
429426
if (!server.hasArg("v")) {
430427
handle_bad_parameter();
431428
return;
@@ -434,10 +431,10 @@ void handle_set_wifi_settings(void)
434431
deserializeJson(json, server.arg("v"));
435432

436433
if (json["use_default"] == true) {
437-
ret = wifi_use_default_settings(reason);
434+
ret = wifi_use_default_settings();
438435
} else {
439436
// Copy data
440-
wifiHandleTmp.mode = json["mode"];
437+
wifiHandleTmp.userMode = json["userMode"];
441438
strncpy(wifiHandleTmp.ap.ssid, json["ap"]["ssid"].as<char*>(), WIFI_SSID_MAX_LEN);
442439
strncpy(wifiHandleTmp.ap.password, json["ap"]["password"].as<char*>(), WIFI_PASSWORD_MAX_LEN);
443440
wifiHandleTmp.ap.channel = json["ap"]["channel"];
@@ -454,8 +451,10 @@ void handle_set_wifi_settings(void)
454451
}
455452

456453
if (ret == 0) {
454+
log_info("Using new wifi settings");
457455
server.send(200, "text/plain", "ok");
458456
} else {
457+
log_info("Failed to update wifi settings: %s", reason.c_str());
459458
server.send(200, "text/plain", reason);
460459
}
461460
}

lightkit/software/src/wifi/wifi.cpp

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -98,10 +98,20 @@ static int wifi_client_init(void)
9898
return 0;
9999
}
100100

101+
/**
102+
* @brief Check if pWifiHandle contains valid data
103+
*
104+
* @param pWifiHandle Data to check
105+
* @param reason Text message containing the reason of not valid
106+
* @warning This text message appears in the webserver, it has to be
107+
* written using the appropriate language
108+
*
109+
* @return boolean
110+
*/
101111
static bool wifi_is_handle_valid(wifi_handle_t * pWifiHandle, String &reason)
102112
{
103-
if (pWifiHandle->mode >= MODE_MAX) {
104-
reason = "Mauvais mode";
113+
if (pWifiHandle->userMode >= MODE_MAX) {
114+
reason = "Mauvais mode wifi";
105115
return false;
106116
}
107117

@@ -153,7 +163,9 @@ int32_t wifi_use_new_settings(wifi_handle_t * pWifiHandle, String &reason)
153163
{
154164
if (wifi_is_handle_valid(pWifiHandle, reason)) {
155165
// Copy new data to handle
156-
memcpy(&wifiHandle, pWifiHandle, sizeof(wifi_handle_t));
166+
memcpy(wifiHandle, pWifiHandle, sizeof(wifi_handle_t));
167+
wifiHandle->forcedMode = MODE_NONE;
168+
wifiHandle->mode = MODE_NONE;
157169

158170
// Save handle to flash
159171
return flash_write();
@@ -165,8 +177,9 @@ int32_t wifi_use_new_settings(wifi_handle_t * pWifiHandle, String &reason)
165177
/**
166178
* @brief Use default settings for wifi module
167179
*/
168-
int32_t wifi_use_default_settings(String &reason)
180+
int32_t wifi_use_default_settings(void)
169181
{
182+
String reason;
170183
return wifi_use_new_settings(&defaultWifiSettings, reason);
171184
}
172185

@@ -204,6 +217,10 @@ int wifi_init(void)
204217
wifi_print();
205218
} else {
206219
log_error("Wifi mode not supported: %d", wifiHandle->mode);
220+
221+
// Somehow, we managed to save a wrong configuration
222+
// Use default for next reset
223+
wifi_use_default_settings();
207224
}
208225

209226
// Check error

lightkit/software/src/wifi/wifi.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ typedef struct {
7676
// PROTOTYPES
7777
wifi_handle_t * wifi_get_handle(void);
7878
int32_t wifi_use_new_settings(wifi_handle_t * pWifiHandle, String &reason);
79-
int32_t wifi_use_default_settings(String &reason);
79+
int32_t wifi_use_default_settings(void);
8080
int wifi_init(void);
8181
void wifi_main(void);
8282

0 commit comments

Comments
 (0)