Skip to content

Commit 9e7aca5

Browse files
committed
drivers: wifi: esp_hosted: Add support for the latest firmware.
Add support for esp-hosted v1.0.0.0.0 firmware. Signed-off-by: Ibrahim Abdalkader <[email protected]>
1 parent a654c61 commit 9e7aca5

File tree

4 files changed

+64
-13
lines changed

4 files changed

+64
-13
lines changed

drivers/wifi/esp_hosted/Kconfig.esp_hosted

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ if WIFI_ESP_HOSTED
2222
config WIFI_ESP_HOSTED_DEBUG
2323
bool "Extra debugging messages"
2424

25+
config WIFI_ESP_HOSTED_LEGACY
26+
bool
27+
default $(dt_compat_any_has_prop,$(DT_COMPAT_ESPRESSIF_ESP_HOSTED),legacy-protocol,True)
28+
2529
config WIFI_ESP_HOSTED_EVENT_TASK_PRIORITY
2630
int "Event task priority"
2731
default 4

drivers/wifi/esp_hosted/esp_hosted_util.h

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,12 +132,25 @@ static inline int esp_hosted_ctrl_response(CtrlMsg *ctrl_msg)
132132
return ctrl_msg->resp_get_wifi_curr_tx_power.resp;
133133
case CtrlMsgId_Resp_ConfigHeartbeat:
134134
return ctrl_msg->resp_config_heartbeat.resp;
135+
#if !defined(CONFIG_WIFI_ESP_HOSTED_LEGACY)
136+
case CtrlMsgId_Resp_EnableDisable:
137+
return ctrl_msg->resp_enable_disable_feat.resp;
138+
case CtrlMsgId_Resp_GetFwVersion:
139+
return ctrl_msg->resp_get_fw_version.resp;
140+
case CtrlMsgId_Resp_SetCountryCode:
141+
return ctrl_msg->resp_set_country_code.resp;
142+
case CtrlMsgId_Resp_GetCountryCode:
143+
return ctrl_msg->resp_get_country_code.resp;
144+
case CtrlMsgId_Resp_Custom_RPC_Unserialised_Msg:
145+
return ctrl_msg->resp_custom_rpc_unserialised_msg.resp;
146+
#endif /* !CONFIG_WIFI_ESP_HOSTED_LEGACY */
147+
135148
default:
136149
return -1;
137150
}
138151
}
139152

140-
#if CONFIG_WIFI_ESP_HOSTED_DEBUG
153+
#if defined(CONFIG_WIFI_ESP_HOSTED_DEBUG)
141154
static void esp_hosted_frame_dump(esp_frame_t *frame)
142155
{
143156
static const char *const if_strs[] = {"STA", "AP", "SERIAL", "HCI", "PRIV", "TEST"};

drivers/wifi/esp_hosted/esp_hosted_wifi.c

Lines changed: 38 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@
66

77
#include <pb_encode.h>
88
#include <pb_decode.h>
9+
#if defined(CONFIG_WIFI_ESP_HOSTED_LEGACY)
910
#include <esp_hosted_legacy.pb.h>
11+
#else
12+
#include <esp_hosted_latest.pb.h>
13+
#endif
1014

1115
#include <esp_hosted_wifi.h>
1216
#include <esp_hosted_hal.h>
@@ -204,7 +208,7 @@ static void esp_hosted_event_task(const struct device *dev, void *p2, void *p3)
204208
continue;
205209
}
206210

207-
#if CONFIG_WIFI_ESP_HOSTED_DEBUG
211+
#if defined(CONFIG_WIFI_ESP_HOSTED_DEBUG)
208212
esp_hosted_frame_dump(&frame);
209213
#endif
210214

@@ -220,6 +224,14 @@ static void esp_hosted_event_task(const struct device *dev, void *p2, void *p3)
220224
case CtrlMsgId_Event_Heartbeat:
221225
data->last_hb_ms = k_uptime_get();
222226
continue;
227+
#if !defined(CONFIG_WIFI_ESP_HOSTED_LEGACY)
228+
case CtrlMsgId_Event_StationConnectedToAP: {
229+
data->state[ESP_HOSTED_STA_IF] = WIFI_STATE_COMPLETED;
230+
net_if_dormant_off(data->iface[ESP_HOSTED_STA_IF]);
231+
wifi_mgmt_raise_connect_result_event(data->iface[ESP_HOSTED_STA_IF], 0);
232+
continue;
233+
}
234+
#endif /* CONFIG_WIFI_ESP_HOSTED_LEGACY */
223235
case CtrlMsgId_Event_StationDisconnectFromAP:
224236
data->state[ESP_HOSTED_STA_IF] = WIFI_STATE_DISCONNECTED;
225237
net_if_dormant_on(data->iface[ESP_HOSTED_STA_IF]);
@@ -238,16 +250,6 @@ static void esp_hosted_event_task(const struct device *dev, void *p2, void *p3)
238250
&sta_info);
239251
continue;
240252
}
241-
case CtrlMsgId_Resp_ConnectAP: {
242-
int ret = esp_hosted_ctrl_response(&ctrl_msg);
243-
244-
if (!ret) {
245-
data->state[ESP_HOSTED_STA_IF] = WIFI_STATE_COMPLETED;
246-
net_if_dormant_off(data->iface[ESP_HOSTED_STA_IF]);
247-
}
248-
wifi_mgmt_raise_connect_result_event(data->iface[ESP_HOSTED_STA_IF], ret);
249-
continue;
250-
}
251253
default: /* Unhandled events/responses will be queued. */
252254
break;
253255
}
@@ -298,9 +300,18 @@ static int esp_hosted_connect(const struct device *dev, struct wifi_connect_req_
298300
strncpy(ctrl_msg.req_connect_ap.ssid, params->ssid, ESP_HOSTED_MAX_SSID_LEN);
299301
esp_hosted_mac_to_str(params->bssid, ctrl_msg.req_connect_ap.bssid.bytes);
300302

301-
if (esp_hosted_ctrl(dev, CtrlMsgId_Req_ConnectAP, &ctrl_msg, 0)) {
303+
if (esp_hosted_ctrl(dev, CtrlMsgId_Req_ConnectAP, &ctrl_msg, ESP_HOSTED_SYNC_TIMEOUT)) {
302304
return -EAGAIN;
303305
}
306+
307+
#if defined(CONFIG_WIFI_ESP_HOSTED_LEGACY)
308+
esp_hosted_data_t *data = dev->data;
309+
310+
/* Legacy connect response is synchronous */
311+
data->state[ESP_HOSTED_STA_IF] = WIFI_STATE_COMPLETED;
312+
net_if_dormant_off(data->iface[ESP_HOSTED_STA_IF]);
313+
wifi_mgmt_raise_connect_result_event(data->iface[ESP_HOSTED_STA_IF], 0);
314+
#endif /* CONFIG_WIFI_ESP_HOSTED_LEGACY */
304315
return 0;
305316
}
306317

@@ -602,6 +613,21 @@ static int esp_hosted_dev_init(const struct device *dev)
602613
return -EIO;
603614
}
604615

616+
/* Read firmware version */
617+
#if defined(CONFIG_WIFI_ESP_HOSTED_LEGACY)
618+
LOG_INF("firmware version: v0.0.5 (legacy)");
619+
#else
620+
ctrl_msg = (CtrlMsg)CtrlMsg_init_zero;
621+
if (esp_hosted_ctrl(dev, CtrlMsgId_Req_GetFwVersion, &ctrl_msg, ESP_HOSTED_SYNC_TIMEOUT)) {
622+
return -EIO;
623+
}
624+
625+
CtrlMsg_Resp_GetFwVersion * fw = &ctrl_msg.resp_get_fw_version;
626+
627+
LOG_INF("firmware version: v%u.%u.%u.%u.%u", fw->major1, fw->major2, fw->minor,
628+
fw->rev_patch1, fw->rev_patch2);
629+
#endif /* CONFIG_WIFI_ESP_HOSTED_LEGACY */
630+
605631
/* Set MAC addresses. */
606632
for (size_t i = 0; i < 2; i++) {
607633
ctrl_msg.req_get_mac_address.mode = i + 1;

dts/bindings/wifi/espressif,esp-hosted.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,14 @@ properties:
2121
required: true
2222

2323
spi-cs-setup-delay-ns:
24+
type: int
2425
default: 10000
26+
2527
spi-cs-hold-delay-ns:
28+
type: int
2629
default: 10000
30+
31+
legacy-protocol:
32+
type: boolean
33+
description:
34+
Set this property if the device is running legacy (<= v0.0.5) firmware.

0 commit comments

Comments
 (0)