Commit d0becdd9b7f50bba6c4c1bca8dcfa55633a031d0

Authored by Imanol-Mikel Barba Sabariego
1 parent 97bb483f

--no commit message

Project/applications/smartcities/callbacks.c
@@ -8,14 +8,23 @@ void dhcp_connect_result_cb(int result) @@ -8,14 +8,23 @@ void dhcp_connect_result_cb(int result)
8 libwismart_GetCurrentIP(&ip,NULL,NULL); 8 libwismart_GetCurrentIP(&ip,NULL,NULL);
9 printf("IP: %d.%d.%d.%d \r\n",ip.addr[3],ip.addr[2],ip.addr[1],ip.addr[0]); 9 printf("IP: %d.%d.%d.%d \r\n",ip.addr[3],ip.addr[2],ip.addr[1],ip.addr[0]);
10 connected = 1; 10 connected = 1;
  11 + retries = 0;
11 } 12 }
12 else if(result==LIBWISMART_DHCP_TIMEOUT) 13 else if(result==LIBWISMART_DHCP_TIMEOUT)
13 { 14 {
14 printf("DHCP timeout\r\n"); 15 printf("DHCP timeout\r\n");
  16 + if(++retries == MAX_RETRIES)
  17 + {
  18 + timeout = 1;
  19 + }
15 } 20 }
16 else 21 else
17 { 22 {
18 printf("DHCP error\r\n"); 23 printf("DHCP error\r\n");
  24 + if(++retries == MAX_RETRIES)
  25 + {
  26 + timeout = 1;
  27 + }
19 } 28 }
20 29
21 } 30 }
@@ -25,7 +34,20 @@ void wifi_connect_result_cb(int result) @@ -25,7 +34,20 @@ void wifi_connect_result_cb(int result)
25 if(result==WISMART_WIFI_CONN_TIMEOUT){ 34 if(result==WISMART_WIFI_CONN_TIMEOUT){
26 timeout=1; 35 timeout=1;
27 } 36 }
28 - printf("WiFi Connect indication: %s\r\n", (result == WISMART_WIFI_CONNECTED) ? "Connected": "Failed\r\n"); 37 + printf("WiFi Connect indication: ");
  38 + if(result == WISMART_WIFI_CONNECTED)
  39 + {
  40 + printf("Connected\r\n");
  41 + retries = 0;
  42 + }
  43 + else
  44 + {
  45 + printf("Failed\r\n");
  46 + if(++retries == MAX_RETRIES)
  47 + {
  48 + timeout = 1;
  49 + }
  50 + }
29 } 51 }
30 52
31 void wifi_connect_ap_result_cb(int result) 53 void wifi_connect_ap_result_cb(int result)
Project/applications/smartcities/configServer.c
@@ -56,9 +56,11 @@ void configServer_setClientParameters() @@ -56,9 +56,11 @@ void configServer_setClientParameters()
56 CONFIG_SERVER_DBG("radPass : %s\r\n",arg_radPassStr); 56 CONFIG_SERVER_DBG("radPass : %s\r\n",arg_radPassStr);
57 CONFIG_SERVER_DBG("geoloc : %s\r\n",arg_geoLocalizationStr); 57 CONFIG_SERVER_DBG("geoloc : %s\r\n",arg_geoLocalizationStr);
58 58
59 - char localization[32];  
60 - strcpy(localization,arg_geoLocalizationStr);  
61 - libwismart_RegistrySet(&geo,&localization[0]); 59 + config_params_t config;
  60 + strcpy(config.user,arg_radUserStr);
  61 + strcpy(config.password,arg_radPassStr);
  62 + strcpy(config.localization,arg_geoLocalizationStr);
  63 + libwismart_RegistrySet(&geo,&config);
62 64
63 /* Value validation */ 65 /* Value validation */
64 if((strlen((char*)arg_networkNameStr) > 32) || (strlen((char*)arg_networkNameStr) == 0)) 66 if((strlen((char*)arg_networkNameStr) > 32) || (strlen((char*)arg_networkNameStr) == 0))
@@ -85,8 +87,6 @@ void configServer_setClientParameters() @@ -85,8 +87,6 @@ void configServer_setClientParameters()
85 libwismart_ProfileSet_Str("wepkey", (char*)arg_passphraseStr); 87 libwismart_ProfileSet_Str("wepkey", (char*)arg_passphraseStr);
86 libwismart_ProfileSet_Str("passphrase", (char*)arg_passphraseStr); 88 libwismart_ProfileSet_Str("passphrase", (char*)arg_passphraseStr);
87 libwismart_ProfileSet_Int("security", (uint16_t) PROFILE_SECURITY_WPA_WPA2); 89 libwismart_ProfileSet_Int("security", (uint16_t) PROFILE_SECURITY_WPA_WPA2);
88 - libwismart_ProfileSet_Str("gateway", (char*)arg_radUserStr); //NO ME ARREPIENTO DE ESTO  
89 - libwismart_ProfileSet_Str("netmask", (char*)arg_radPassStr); //NI DE ESTO  
90 } 90 }
91 else 91 else
92 { 92 {
@@ -173,8 +173,8 @@ uint32_t configServer_dynamicCb(char* varName, char** varValue, uint8_t* varAllo @@ -173,8 +173,8 @@ uint32_t configServer_dynamicCb(char* varName, char** varValue, uint8_t* varAllo
173 173
174 libwismart_ProfileGet_Int("profile_enabled", &profile_enabled); 174 libwismart_ProfileGet_Int("profile_enabled", &profile_enabled);
175 175
176 - if(strcmp((char*)varName,"WIFI_MODE") == 0){  
177 - uint16_t wifi_mode; 176 + if(strcmp((char*)varName,"WIFI_SECURITY") == 0){
  177 + uint16_t security;
178 178
179 /* Alocate space for the value */ 179 /* Alocate space for the value */
180 value = chHeapAlloc(NULL, 100); 180 value = chHeapAlloc(NULL, 100);
@@ -182,16 +182,19 @@ uint32_t configServer_dynamicCb(char* varName, char** varValue, uint8_t* varAllo @@ -182,16 +182,19 @@ uint32_t configServer_dynamicCb(char* varName, char** varValue, uint8_t* varAllo
182 return WISMART_SERVER_ERR_MEM; 182 return WISMART_SERVER_ERR_MEM;
183 } 183 }
184 184
185 - if(profile_enabled == PROFILE_ENABLED) {  
186 - libwismart_ProfileGet_Int("wifi_mode", &wifi_mode);  
187 - if(wifi_mode == PROFILE_WIFI_MODE_SOFTAP){  
188 - strcpy((char*)value, "SoftAp");  
189 - }else{  
190 - strcpy((char*)value, "Client"); 185 + libwismart_ProfileGet_Int("security", &security);
  186 + if(security == PROFILE_SECURITY_OPEN)
  187 + {
  188 + strcpy(value,"Open");
  189 + }
  190 + else if(security == PROFILE_SECURITY_WPA_WPA2)
  191 + {
  192 + strcpy(value,"WPA/WPA2");
  193 + }
  194 + else
  195 + {
  196 + strcpy(value,"WEP");
191 } 197 }
192 - }else{  
193 - strcpy((char*)value, "N/A");  
194 - }  
195 198
196 /* 199 /*
197 * Instruct server to automatically free the memory by calling the 200 * Instruct server to automatically free the memory by calling the
@@ -211,12 +214,8 @@ uint32_t configServer_dynamicCb(char* varName, char** varValue, uint8_t* varAllo @@ -211,12 +214,8 @@ uint32_t configServer_dynamicCb(char* varName, char** varValue, uint8_t* varAllo
211 return WISMART_SERVER_ERR_MEM; 214 return WISMART_SERVER_ERR_MEM;
212 } 215 }
213 216
214 - if(profile_enabled == PROFILE_ENABLED) {  
215 - libwismart_ProfileGet_Str("ssid", (char*)value);  
216 - }else{  
217 - strcpy((char*)value, "N/A");  
218 - }  
219 - 217 + libwismart_ProfileGet_Str("ssid", (char*)value);
  218 +
220 /* 219 /*
221 * Instruct server to automatically free the memory by calling the 220 * Instruct server to automatically free the memory by calling the
222 * appropriate free() function when the request is replied. 221 * appropriate free() function when the request is replied.
@@ -259,6 +258,65 @@ uint32_t configServer_dynamicCb(char* varName, char** varValue, uint8_t* varAllo @@ -259,6 +258,65 @@ uint32_t configServer_dynamicCb(char* varName, char** varValue, uint8_t* varAllo
259 258
260 return WISMART_SERVER_ERR_OK; 259 return WISMART_SERVER_ERR_OK;
261 } 260 }
  261 +
  262 + if(strcmp((char*)varName,"WIFI_RADUSER") == 0){
  263 + /* Alocate space for the value */
  264 + value = chHeapAlloc(NULL, 100);
  265 + if(value == NULL){
  266 + return WISMART_SERVER_ERR_MEM;
  267 + }
  268 +
  269 + libwismart_ProfileGet_Str("gateway", (char*)value);
  270 +
  271 + /*
  272 + * Instruct server to automatically free the memory by calling the
  273 + * appropriate free() function when the request is replied.
  274 + */
  275 + *varAllocType = WISMART_SERVER_ALLOC_DYNAMIC;
  276 + (*varValue) = value;
  277 +
  278 + return WISMART_SERVER_ERR_OK;
  279 + }
  280 +
  281 + if(strcmp((char*)varName,"WIFI_RADPASS") == 0){
  282 + /* Alocate space for the value */
  283 + value = chHeapAlloc(NULL, 100);
  284 + if(value == NULL){
  285 + return WISMART_SERVER_ERR_MEM;
  286 + }
  287 +
  288 + libwismart_ProfileGet_Str("netmask", (char*)value);
  289 +
  290 + /*
  291 + * Instruct server to automatically free the memory by calling the
  292 + * appropriate free() function when the request is replied.
  293 + */
  294 + *varAllocType = WISMART_SERVER_ALLOC_DYNAMIC;
  295 + (*varValue) = value;
  296 +
  297 + return WISMART_SERVER_ERR_OK;
  298 + }
  299 +
  300 + if(strcmp((char*)varName,"WIFI_GEOLOC") == 0){
  301 + /* Alocate space for the value */
  302 + value = chHeapAlloc(NULL, 100);
  303 + char geoloc[32];
  304 + if(value == NULL){
  305 + return WISMART_SERVER_ERR_MEM;
  306 + }
  307 +
  308 + libwismart_RegistryGet(&geo,&geoloc);
  309 + strcpy(value,geoloc);
  310 +
  311 + /*
  312 + * Instruct server to automatically free the memory by calling the
  313 + * appropriate free() function when the request is replied.
  314 + */
  315 + *varAllocType = WISMART_SERVER_ALLOC_DYNAMIC;
  316 + (*varValue) = value;
  317 +
  318 + return WISMART_SERVER_ERR_OK;
  319 + }
262 320
263 321
264 /* We should never reach here */ 322 /* We should never reach here */
Project/applications/smartcities/include/callbacks.h
@@ -7,6 +7,7 @@ @@ -7,6 +7,7 @@
7 7
8 #define WIFI_MODE_CLIENT 1 8 #define WIFI_MODE_CLIENT 1
9 #define WIFI_MODE_SOFTAP 2 9 #define WIFI_MODE_SOFTAP 2
  10 +#define MAX_RETRIES 5
10 11
11 void dhcp_connect_result_cb(int result); 12 void dhcp_connect_result_cb(int result);
12 void wifi_connect_result_cb(int result); 13 void wifi_connect_result_cb(int result);
@@ -19,5 +20,6 @@ void printWifiInfo(uint8_t wifiMode); @@ -19,5 +20,6 @@ void printWifiInfo(uint8_t wifiMode);
19 20
20 extern uint8_t connected; 21 extern uint8_t connected;
21 extern uint8_t timeout; 22 extern uint8_t timeout;
  23 +extern uint8_t retries;
22 24
23 #endif 25 #endif
24 \ No newline at end of file 26 \ No newline at end of file
Project/applications/smartcities/include/configServer.h
@@ -24,6 +24,12 @@ void configServer_rebootTimerHandler(void *arg); @@ -24,6 +24,12 @@ void configServer_rebootTimerHandler(void *arg);
24 int configServer_hex2bin(char *hex, char *buf, size_t hexLen); 24 int configServer_hex2bin(char *hex, char *buf, size_t hexLen);
25 uint32_t configServer_dynamicCb(char* varName, char** varValue, uint8_t* varAllocType); 25 uint32_t configServer_dynamicCb(char* varName, char** varValue, uint8_t* varAllocType);
26 26
  27 +typedef struct {
  28 + char user[64];
  29 + char password[64];
  30 + char localization[32];
  31 +} config_params_t;
  32 +
27 extern wismart_registryKey_t geo; 33 extern wismart_registryKey_t geo;
28 34
29 #define SECURITY_TYPE_OPEN "open" 35 #define SECURITY_TYPE_OPEN "open"
Project/applications/smartcities/makefsdata/fs/en_index.html
@@ -27,9 +27,12 @@ @@ -27,9 +27,12 @@
27 27
28 <div style="margin:auto;font-size:100%;color:black;width:400px;"> 28 <div style="margin:auto;font-size:100%;color:black;width:400px;">
29 <div style="width:400px;padding-bottom:5px;color:rgb(55,49,36);font-size:150%;">Registry Configuration:</div> 29 <div style="width:400px;padding-bottom:5px;color:rgb(55,49,36);font-size:150%;">Registry Configuration:</div>
30 - <div style="width:150px;float:left;color:rgb(55,49,36);">Mode:</div><div style="width:250px;float:left;color:black;">$_DYNAMIC[WIFI_MODE]</div><div style="clear:both;"></div> 30 + <div style="width:150px;float:left;color:rgb(55,49,36);">Mode:</div><div style="width:250px;float:left;color:black;">$_DYNAMIC[WIFI_SECURITY]</div><div style="clear:both;"></div>
31 <div style="width:150px;float:left;color:rgb(55,49,36);">Network Name:</div><div style="width:250px;float:left;color:black;">$_DYNAMIC[WIFI_SSID]</div><div style="clear:both;"></div> 31 <div style="width:150px;float:left;color:rgb(55,49,36);">Network Name:</div><div style="width:250px;float:left;color:black;">$_DYNAMIC[WIFI_SSID]</div><div style="clear:both;"></div>
32 <div style="width:150px;float:left;color:rgb(55,49,36);">Passphrase:</div><div style="width:250px;float:left;color:black;">$_DYNAMIC[WIFI_PASSPHRASE]</div><div style="clear:both;"></div> 32 <div style="width:150px;float:left;color:rgb(55,49,36);">Passphrase:</div><div style="width:250px;float:left;color:black;">$_DYNAMIC[WIFI_PASSPHRASE]</div><div style="clear:both;"></div>
  33 + <div style="width:150px;float:left;color:rgb(55,49,36);">RADIUS User:</div><div style="width:250px;float:left;color:black;">$_DYNAMIC[WIFI_RADUSER]</div><div style="clear:both;"></div>
  34 + <div style="width:150px;float:left;color:rgb(55,49,36);">RADIUS Pass:</div><div style="width:250px;float:left;color:black;">$_DYNAMIC[WIFI_RADPASS]</div><div style="clear:both;"></div>
  35 + <div style="width:150px;float:left;color:rgb(55,49,36);">Coordinates:</div><div style="width:250px;float:left;color:black;">$_DYNAMIC[WIFI_GEOLOC]</div><div style="clear:both;"></div>
33 </div> 36 </div>
34 37
35 </div> 38 </div>
Project/applications/smartcities/makefsdata/fsdata.c
@@ -915,7 +915,26 @@ static const char data_en_index_html[] = { @@ -915,7 +915,26 @@ static const char data_en_index_html[] = {
915 0x3a, 0x6c, 0x65, 0x66, 0x74, 0x3b, 0x63, 0x6f, 0x6c, 0x6f, 915 0x3a, 0x6c, 0x65, 0x66, 0x74, 0x3b, 0x63, 0x6f, 0x6c, 0x6f,
916 0x72, 0x3a, 0x62, 0x6c, 0x61, 0x63, 0x6b, 0x3b, 0x22, 0x3e, 916 0x72, 0x3a, 0x62, 0x6c, 0x61, 0x63, 0x6b, 0x3b, 0x22, 0x3e,
917 0x24, 0x5f, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x5b, 917 0x24, 0x5f, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x5b,
918 - 0x57, 0x49, 0x46, 0x49, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x5d, 918 + 0x57, 0x49, 0x46, 0x49, 0x5f, 0x53, 0x45, 0x43, 0x55, 0x52,
  919 + 0x49, 0x54, 0x59, 0x5d, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e,
  920 + 0x3c, 0x64, 0x69, 0x76, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65,
  921 + 0x3d, 0x22, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x3a, 0x62, 0x6f,
  922 + 0x74, 0x68, 0x3b, 0x22, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76,
  923 + 0x3e, 0xd, 0xa, 0x9, 0x9, 0x3c, 0x64, 0x69, 0x76, 0x20,
  924 + 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64,
  925 + 0x74, 0x68, 0x3a, 0x31, 0x35, 0x30, 0x70, 0x78, 0x3b, 0x66,
  926 + 0x6c, 0x6f, 0x61, 0x74, 0x3a, 0x6c, 0x65, 0x66, 0x74, 0x3b,
  927 + 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x72, 0x67, 0x62, 0x28,
  928 + 0x35, 0x35, 0x2c, 0x34, 0x39, 0x2c, 0x33, 0x36, 0x29, 0x3b,
  929 + 0x22, 0x3e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20,
  930 + 0x4e, 0x61, 0x6d, 0x65, 0x3a, 0x3c, 0x2f, 0x64, 0x69, 0x76,
  931 + 0x3e, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x73, 0x74, 0x79, 0x6c,
  932 + 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x32,
  933 + 0x35, 0x30, 0x70, 0x78, 0x3b, 0x66, 0x6c, 0x6f, 0x61, 0x74,
  934 + 0x3a, 0x6c, 0x65, 0x66, 0x74, 0x3b, 0x63, 0x6f, 0x6c, 0x6f,
  935 + 0x72, 0x3a, 0x62, 0x6c, 0x61, 0x63, 0x6b, 0x3b, 0x22, 0x3e,
  936 + 0x24, 0x5f, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x5b,
  937 + 0x57, 0x49, 0x46, 0x49, 0x5f, 0x53, 0x53, 0x49, 0x44, 0x5d,
919 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x64, 0x69, 0x76, 938 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x64, 0x69, 0x76,
920 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x63, 0x6c, 939 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x63, 0x6c,
921 0x65, 0x61, 0x72, 0x3a, 0x62, 0x6f, 0x74, 0x68, 0x3b, 0x22, 940 0x65, 0x61, 0x72, 0x3a, 0x62, 0x6f, 0x74, 0x68, 0x3b, 0x22,
@@ -925,16 +944,54 @@ static const char data_en_index_html[] = { @@ -925,16 +944,54 @@ static const char data_en_index_html[] = {
925 0x35, 0x30, 0x70, 0x78, 0x3b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 944 0x35, 0x30, 0x70, 0x78, 0x3b, 0x66, 0x6c, 0x6f, 0x61, 0x74,
926 0x3a, 0x6c, 0x65, 0x66, 0x74, 0x3b, 0x63, 0x6f, 0x6c, 0x6f, 945 0x3a, 0x6c, 0x65, 0x66, 0x74, 0x3b, 0x63, 0x6f, 0x6c, 0x6f,
927 0x72, 0x3a, 0x72, 0x67, 0x62, 0x28, 0x35, 0x35, 0x2c, 0x34, 946 0x72, 0x3a, 0x72, 0x67, 0x62, 0x28, 0x35, 0x35, 0x2c, 0x34,
928 - 0x39, 0x2c, 0x33, 0x36, 0x29, 0x3b, 0x22, 0x3e, 0x4e, 0x65,  
929 - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x20, 0x4e, 0x61, 0x6d, 0x65,  
930 - 0x3a, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x64, 0x69,  
931 - 0x76, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x77,  
932 - 0x69, 0x64, 0x74, 0x68, 0x3a, 0x32, 0x35, 0x30, 0x70, 0x78,  
933 - 0x3b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x3a, 0x6c, 0x65, 0x66,  
934 - 0x74, 0x3b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x62, 0x6c,  
935 - 0x61, 0x63, 0x6b, 0x3b, 0x22, 0x3e, 0x24, 0x5f, 0x44, 0x59,  
936 - 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x5b, 0x57, 0x49, 0x46, 0x49,  
937 - 0x5f, 0x53, 0x53, 0x49, 0x44, 0x5d, 0x3c, 0x2f, 0x64, 0x69, 947 + 0x39, 0x2c, 0x33, 0x36, 0x29, 0x3b, 0x22, 0x3e, 0x50, 0x61,
  948 + 0x73, 0x73, 0x70, 0x68, 0x72, 0x61, 0x73, 0x65, 0x3a, 0x3c,
  949 + 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x64, 0x69, 0x76, 0x20,
  950 + 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64,
  951 + 0x74, 0x68, 0x3a, 0x32, 0x35, 0x30, 0x70, 0x78, 0x3b, 0x66,
  952 + 0x6c, 0x6f, 0x61, 0x74, 0x3a, 0x6c, 0x65, 0x66, 0x74, 0x3b,
  953 + 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x62, 0x6c, 0x61, 0x63,
  954 + 0x6b, 0x3b, 0x22, 0x3e, 0x24, 0x5f, 0x44, 0x59, 0x4e, 0x41,
  955 + 0x4d, 0x49, 0x43, 0x5b, 0x57, 0x49, 0x46, 0x49, 0x5f, 0x50,
  956 + 0x41, 0x53, 0x53, 0x50, 0x48, 0x52, 0x41, 0x53, 0x45, 0x5d,
  957 + 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x64, 0x69, 0x76,
  958 + 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x63, 0x6c,
  959 + 0x65, 0x61, 0x72, 0x3a, 0x62, 0x6f, 0x74, 0x68, 0x3b, 0x22,
  960 + 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0xd, 0xa, 0x9,
  961 + 0x9, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x73, 0x74, 0x79, 0x6c,
  962 + 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x31,
  963 + 0x35, 0x30, 0x70, 0x78, 0x3b, 0x66, 0x6c, 0x6f, 0x61, 0x74,
  964 + 0x3a, 0x6c, 0x65, 0x66, 0x74, 0x3b, 0x63, 0x6f, 0x6c, 0x6f,
  965 + 0x72, 0x3a, 0x72, 0x67, 0x62, 0x28, 0x35, 0x35, 0x2c, 0x34,
  966 + 0x39, 0x2c, 0x33, 0x36, 0x29, 0x3b, 0x22, 0x3e, 0x52, 0x41,
  967 + 0x44, 0x49, 0x55, 0x53, 0x20, 0x55, 0x73, 0x65, 0x72, 0x3a,
  968 + 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x64, 0x69, 0x76,
  969 + 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x77, 0x69,
  970 + 0x64, 0x74, 0x68, 0x3a, 0x32, 0x35, 0x30, 0x70, 0x78, 0x3b,
  971 + 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x3a, 0x6c, 0x65, 0x66, 0x74,
  972 + 0x3b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x62, 0x6c, 0x61,
  973 + 0x63, 0x6b, 0x3b, 0x22, 0x3e, 0x24, 0x5f, 0x44, 0x59, 0x4e,
  974 + 0x41, 0x4d, 0x49, 0x43, 0x5b, 0x57, 0x49, 0x46, 0x49, 0x5f,
  975 + 0x52, 0x41, 0x44, 0x55, 0x53, 0x45, 0x52, 0x5d, 0x3c, 0x2f,
  976 + 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x73,
  977 + 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x63, 0x6c, 0x65, 0x61,
  978 + 0x72, 0x3a, 0x62, 0x6f, 0x74, 0x68, 0x3b, 0x22, 0x3e, 0x3c,
  979 + 0x2f, 0x64, 0x69, 0x76, 0x3e, 0xd, 0xa, 0x9, 0x9, 0x3c,
  980 + 0x64, 0x69, 0x76, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d,
  981 + 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x31, 0x35, 0x30,
  982 + 0x70, 0x78, 0x3b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x3a, 0x6c,
  983 + 0x65, 0x66, 0x74, 0x3b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a,
  984 + 0x72, 0x67, 0x62, 0x28, 0x35, 0x35, 0x2c, 0x34, 0x39, 0x2c,
  985 + 0x33, 0x36, 0x29, 0x3b, 0x22, 0x3e, 0x52, 0x41, 0x44, 0x49,
  986 + 0x55, 0x53, 0x20, 0x50, 0x61, 0x73, 0x73, 0x3a, 0x3c, 0x2f,
  987 + 0x64, 0x69, 0x76, 0x3e, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x73,
  988 + 0x74, 0x79, 0x6c, 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74,
  989 + 0x68, 0x3a, 0x32, 0x35, 0x30, 0x70, 0x78, 0x3b, 0x66, 0x6c,
  990 + 0x6f, 0x61, 0x74, 0x3a, 0x6c, 0x65, 0x66, 0x74, 0x3b, 0x63,
  991 + 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x62, 0x6c, 0x61, 0x63, 0x6b,
  992 + 0x3b, 0x22, 0x3e, 0x24, 0x5f, 0x44, 0x59, 0x4e, 0x41, 0x4d,
  993 + 0x49, 0x43, 0x5b, 0x57, 0x49, 0x46, 0x49, 0x5f, 0x52, 0x41,
  994 + 0x44, 0x50, 0x41, 0x53, 0x53, 0x5d, 0x3c, 0x2f, 0x64, 0x69,
938 0x76, 0x3e, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x73, 0x74, 0x79, 995 0x76, 0x3e, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x73, 0x74, 0x79,
939 0x6c, 0x65, 0x3d, 0x22, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x3a, 996 0x6c, 0x65, 0x3d, 0x22, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x3a,
940 0x62, 0x6f, 0x74, 0x68, 0x3b, 0x22, 0x3e, 0x3c, 0x2f, 0x64, 997 0x62, 0x6f, 0x74, 0x68, 0x3b, 0x22, 0x3e, 0x3c, 0x2f, 0x64,
@@ -944,32 +1001,32 @@ static const char data_en_index_html[] = { @@ -944,32 +1001,32 @@ static const char data_en_index_html[] = {
944 0x3b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x3a, 0x6c, 0x65, 0x66, 1001 0x3b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x3a, 0x6c, 0x65, 0x66,
945 0x74, 0x3b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x72, 0x67, 1002 0x74, 0x3b, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x3a, 0x72, 0x67,
946 0x62, 0x28, 0x35, 0x35, 0x2c, 0x34, 0x39, 0x2c, 0x33, 0x36, 1003 0x62, 0x28, 0x35, 0x35, 0x2c, 0x34, 0x39, 0x2c, 0x33, 0x36,
947 - 0x29, 0x3b, 0x22, 0x3e, 0x50, 0x61, 0x73, 0x73, 0x70, 0x68,  
948 - 0x72, 0x61, 0x73, 0x65, 0x3a, 0x3c, 0x2f, 0x64, 0x69, 0x76,  
949 - 0x3e, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x73, 0x74, 0x79, 0x6c,  
950 - 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a, 0x32,  
951 - 0x35, 0x30, 0x70, 0x78, 0x3b, 0x66, 0x6c, 0x6f, 0x61, 0x74,  
952 - 0x3a, 0x6c, 0x65, 0x66, 0x74, 0x3b, 0x63, 0x6f, 0x6c, 0x6f,  
953 - 0x72, 0x3a, 0x62, 0x6c, 0x61, 0x63, 0x6b, 0x3b, 0x22, 0x3e,  
954 - 0x24, 0x5f, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, 0x5b,  
955 - 0x57, 0x49, 0x46, 0x49, 0x5f, 0x50, 0x41, 0x53, 0x53, 0x50,  
956 - 0x48, 0x52, 0x41, 0x53, 0x45, 0x5d, 0x3c, 0x2f, 0x64, 0x69, 1004 + 0x29, 0x3b, 0x22, 0x3e, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69,
  1005 + 0x6e, 0x61, 0x74, 0x65, 0x73, 0x3a, 0x3c, 0x2f, 0x64, 0x69,
957 0x76, 0x3e, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x73, 0x74, 0x79, 1006 0x76, 0x3e, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x73, 0x74, 0x79,
958 - 0x6c, 0x65, 0x3d, 0x22, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x3a,  
959 - 0x62, 0x6f, 0x74, 0x68, 0x3b, 0x22, 0x3e, 0x3c, 0x2f, 0x64,  
960 - 0x69, 0x76, 0x3e, 0xd, 0xa, 0x9, 0x3c, 0x2f, 0x64, 0x69,  
961 - 0x76, 0x3e, 0xd, 0xa, 0xd, 0xa, 0x3c, 0x2f, 0x64, 0x69,  
962 - 0x76, 0x3e, 0xd, 0xa, 0x9, 0xd, 0xa, 0x3c, 0x64, 0x69,  
963 - 0x76, 0x20, 0x69, 0x64, 0x3d, 0x22, 0x66, 0x6f, 0x6f, 0x74,  
964 - 0x65, 0x72, 0x22, 0x3e, 0xd, 0xa, 0x3c, 0x64, 0x69, 0x76,  
965 - 0x20, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6d, 0x65,  
966 - 0x64, 0x46, 0x6f, 0x6e, 0x74, 0x22, 0x3e, 0x43, 0x6f, 0x70,  
967 - 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x26, 0x63, 0x6f, 0x70,  
968 - 0x79, 0x3b, 0x32, 0x30, 0x31, 0x33, 0x3c, 0x2f, 0x64, 0x69,  
969 - 0x76, 0x3e, 0xd, 0xa, 0xd, 0xa, 0x3c, 0x2f, 0x64, 0x69,  
970 - 0x76, 0x3e, 0xd, 0xa, 0xd, 0xa, 0xd, 0xa, 0x3c, 0x2f,  
971 - 0x62, 0x6f, 0x64, 0x79, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x68,  
972 - 0x74, 0x6d, 0x6c, 0x3e, 0xd, 0xa, 0xd, 0xa, }; 1007 + 0x6c, 0x65, 0x3d, 0x22, 0x77, 0x69, 0x64, 0x74, 0x68, 0x3a,
  1008 + 0x32, 0x35, 0x30, 0x70, 0x78, 0x3b, 0x66, 0x6c, 0x6f, 0x61,
  1009 + 0x74, 0x3a, 0x6c, 0x65, 0x66, 0x74, 0x3b, 0x63, 0x6f, 0x6c,
  1010 + 0x6f, 0x72, 0x3a, 0x62, 0x6c, 0x61, 0x63, 0x6b, 0x3b, 0x22,
  1011 + 0x3e, 0x24, 0x5f, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43,
  1012 + 0x5b, 0x57, 0x49, 0x46, 0x49, 0x5f, 0x47, 0x45, 0x4f, 0x4c,
  1013 + 0x4f, 0x43, 0x5d, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0x3c,
  1014 + 0x64, 0x69, 0x76, 0x20, 0x73, 0x74, 0x79, 0x6c, 0x65, 0x3d,
  1015 + 0x22, 0x63, 0x6c, 0x65, 0x61, 0x72, 0x3a, 0x62, 0x6f, 0x74,
  1016 + 0x68, 0x3b, 0x22, 0x3e, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e,
  1017 + 0xd, 0xa, 0x9, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0xd,
  1018 + 0xa, 0xd, 0xa, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0xd,
  1019 + 0xa, 0x9, 0xd, 0xa, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x69,
  1020 + 0x64, 0x3d, 0x22, 0x66, 0x6f, 0x6f, 0x74, 0x65, 0x72, 0x22,
  1021 + 0x3e, 0xd, 0xa, 0x3c, 0x64, 0x69, 0x76, 0x20, 0x63, 0x6c,
  1022 + 0x61, 0x73, 0x73, 0x3d, 0x22, 0x6d, 0x65, 0x64, 0x46, 0x6f,
  1023 + 0x6e, 0x74, 0x22, 0x3e, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69,
  1024 + 0x67, 0x68, 0x74, 0x26, 0x63, 0x6f, 0x70, 0x79, 0x3b, 0x32,
  1025 + 0x30, 0x31, 0x33, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0xd,
  1026 + 0xa, 0xd, 0xa, 0x3c, 0x2f, 0x64, 0x69, 0x76, 0x3e, 0xd,
  1027 + 0xa, 0xd, 0xa, 0xd, 0xa, 0x3c, 0x2f, 0x62, 0x6f, 0x64,
  1028 + 0x79, 0x3e, 0xd, 0xa, 0x3c, 0x2f, 0x68, 0x74, 0x6d, 0x6c,
  1029 + 0x3e, 0xd, 0xa, 0xd, 0xa, };
973 1030
974 static const char data_en_reboot_html[] = { 1031 static const char data_en_reboot_html[] = {
975 /* /en_reboot.html */ 1032 /* /en_reboot.html */