@@ -416,7 +416,7 @@ MODEM_CMD_DIRECT_DEFINE(on_cmd_cwlap)
416416}
417417
418418/* +CWJAP:(ssid,bssid,channel,rssi) */
419- MODEM_CMD_DIRECT_DEFINE (on_cmd_cwjap )
419+ MODEM_CMD_DIRECT_DEFINE (on_cmd_cwjap_status )
420420{
421421struct esp_data * dev = CONTAINER_OF (data , struct esp_data ,
422422 cmd_handler_data );
@@ -483,6 +483,34 @@ MODEM_CMD_DIRECT_DEFINE(on_cmd_cwjap)
483483return str - cwjap_buf ;
484484}
485485
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+
486514static void esp_dns_work (struct k_work * work )
487515{
488516#if defined(ESP_MAX_DNS )
@@ -1032,7 +1060,7 @@ static void esp_mgmt_iface_status_work(struct k_work *work)
10321060struct wifi_iface_status * status = data -> wifi_status ;
10331061int ret ;
10341062static const struct modem_cmd cmds [] = {
1035- MODEM_CMD_DIRECT ("+CWJAP:" , on_cmd_cwjap ),
1063+ MODEM_CMD_DIRECT ("+CWJAP:" , on_cmd_cwjap_status ),
10361064};
10371065
10381066ret = esp_cmd_send (data , cmds , ARRAY_SIZE (cmds ), "AT+CWJAP?" ,
@@ -1144,6 +1172,7 @@ static void esp_mgmt_connect_work(struct k_work *work)
11441172int ret ;
11451173static const struct modem_cmd cmds [] = {
11461174MODEM_CMD ("FAIL" , on_cmd_fail , 0U , "" ),
1175+ MODEM_CMD ("+CWJAP:" , on_cmd_cwjap_connect , 1U , "" ),
11471176};
11481177
11491178dev = CONTAINER_OF (work , struct esp_data , connect_work );
@@ -1153,6 +1182,8 @@ static void esp_mgmt_connect_work(struct k_work *work)
11531182goto out ;
11541183}
11551184
1185+ dev -> conn_status = WIFI_STATUS_CONN_FAIL ;
1186+
11561187ret = esp_cmd_send (dev , cmds , ARRAY_SIZE (cmds ), dev -> conn_cmd ,
11571188 ESP_CONNECT_TIMEOUT );
11581189
@@ -1166,11 +1197,12 @@ static void esp_mgmt_connect_work(struct k_work *work)
116611970 );
11671198} else {
11681199wifi_mgmt_raise_connect_result_event (dev -> net_iface ,
1169- ret );
1200+ dev -> conn_status );
11701201}
11711202} else if (!esp_flags_are_set (dev , EDF_STA_CONNECTED )) {
11721203esp_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 );
11741206net_if_dormant_off (dev -> net_iface );
11751207}
11761208
0 commit comments