@@ -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{
421421 struct esp_data * dev = CONTAINER_OF (data , struct esp_data ,
422422 cmd_handler_data );
@@ -483,6 +483,34 @@ MODEM_CMD_DIRECT_DEFINE(on_cmd_cwjap)
483483 return 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)
10321060 struct wifi_iface_status * status = data -> wifi_status ;
10331061 int ret ;
10341062 static const struct modem_cmd cmds [] = {
1035- MODEM_CMD_DIRECT ("+CWJAP:" , on_cmd_cwjap ),
1063+ MODEM_CMD_DIRECT ("+CWJAP:" , on_cmd_cwjap_status ),
10361064 };
10371065
10381066 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)
11441172 int ret ;
11451173 static const struct modem_cmd cmds [] = {
11461174 MODEM_CMD ("FAIL" , on_cmd_fail , 0U , "" ),
1175+ MODEM_CMD ("+CWJAP:" , on_cmd_cwjap_connect , 1U , "" ),
11471176 };
11481177
11491178 dev = CONTAINER_OF (work , struct esp_data , connect_work );
@@ -1153,6 +1182,8 @@ static void esp_mgmt_connect_work(struct k_work *work)
11531182 goto out ;
11541183 }
11551184
1185+ dev -> conn_status = WIFI_STATUS_CONN_FAIL ;
1186+
11561187 ret = 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)
11661197 0 );
11671198 } else {
11681199 wifi_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 )) {
11721203 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 );
11741206 net_if_dormant_off (dev -> net_iface );
11751207 }
11761208
0 commit comments