@@ -416,7 +416,7 @@ MODEM_CMD_DIRECT_DEFINE(on_cmd_cwlap)
416
416
}
417
417
418
418
/* +CWJAP:(ssid,bssid,channel,rssi) */
419
- MODEM_CMD_DIRECT_DEFINE (on_cmd_cwjap )
419
+ MODEM_CMD_DIRECT_DEFINE (on_cmd_cwjap_status )
420
420
{
421
421
struct esp_data * dev = CONTAINER_OF (data , struct esp_data ,
422
422
cmd_handler_data );
@@ -483,6 +483,34 @@ MODEM_CMD_DIRECT_DEFINE(on_cmd_cwjap)
483
483
return str - cwjap_buf ;
484
484
}
485
485
486
+ /* +CWJAP:(error) */
487
+ MODEM_CMD_DEFINE (on_cmd_cwjap_connect )
488
+ {
489
+ struct esp_data * dev = CONTAINER_OF (data , struct esp_data ,
490
+ cmd_handler_data );
491
+ long errcode = strtol (argv [0 ], NULL , 10 );
492
+
493
+ switch (errcode ) {
494
+ case 1 :
495
+ dev -> conn_status = WIFI_STATUS_CONN_TIMEOUT ;
496
+ break ;
497
+ case 2 :
498
+ dev -> conn_status = WIFI_STATUS_CONN_WRONG_PASSWORD ;
499
+ break ;
500
+ case 3 :
501
+ dev -> conn_status = WIFI_STATUS_CONN_AP_NOT_FOUND ;
502
+ break ;
503
+ case 4 :
504
+ dev -> conn_status = WIFI_STATUS_CONN_FAIL ;
505
+ break ;
506
+ default :
507
+ LOG_WRN ("Unknown CWJAP error code: %ld" , errcode );
508
+ break ;
509
+ }
510
+
511
+ return 0 ;
512
+ }
513
+
486
514
static void esp_dns_work (struct k_work * work )
487
515
{
488
516
#if defined(ESP_MAX_DNS )
@@ -1032,7 +1060,7 @@ static void esp_mgmt_iface_status_work(struct k_work *work)
1032
1060
struct wifi_iface_status * status = data -> wifi_status ;
1033
1061
int ret ;
1034
1062
static const struct modem_cmd cmds [] = {
1035
- MODEM_CMD_DIRECT ("+CWJAP:" , on_cmd_cwjap ),
1063
+ MODEM_CMD_DIRECT ("+CWJAP:" , on_cmd_cwjap_status ),
1036
1064
};
1037
1065
1038
1066
ret = esp_cmd_send (data , cmds , ARRAY_SIZE (cmds ), "AT+CWJAP?" ,
@@ -1144,6 +1172,7 @@ static void esp_mgmt_connect_work(struct k_work *work)
1144
1172
int ret ;
1145
1173
static const struct modem_cmd cmds [] = {
1146
1174
MODEM_CMD ("FAIL" , on_cmd_fail , 0U , "" ),
1175
+ MODEM_CMD ("+CWJAP:" , on_cmd_cwjap_connect , 1U , "" ),
1147
1176
};
1148
1177
1149
1178
dev = CONTAINER_OF (work , struct esp_data , connect_work );
@@ -1153,6 +1182,8 @@ static void esp_mgmt_connect_work(struct k_work *work)
1153
1182
goto out ;
1154
1183
}
1155
1184
1185
+ dev -> conn_status = WIFI_STATUS_CONN_FAIL ;
1186
+
1156
1187
ret = esp_cmd_send (dev , cmds , ARRAY_SIZE (cmds ), dev -> conn_cmd ,
1157
1188
ESP_CONNECT_TIMEOUT );
1158
1189
@@ -1166,11 +1197,12 @@ static void esp_mgmt_connect_work(struct k_work *work)
1166
1197
0 );
1167
1198
} else {
1168
1199
wifi_mgmt_raise_connect_result_event (dev -> net_iface ,
1169
- ret );
1200
+ dev -> conn_status );
1170
1201
}
1171
1202
} else if (!esp_flags_are_set (dev , EDF_STA_CONNECTED )) {
1172
1203
esp_flags_set (dev , EDF_STA_CONNECTED );
1173
- wifi_mgmt_raise_connect_result_event (dev -> net_iface , 0 );
1204
+ wifi_mgmt_raise_connect_result_event (dev -> net_iface ,
1205
+ WIFI_STATUS_CONN_SUCCESS );
1174
1206
net_if_dormant_off (dev -> net_iface );
1175
1207
}
1176
1208
0 commit comments