Skip to content

Commit eef3d06

Browse files
committed
Add support for WiFi to ESP32-P4 (#10463)
* feat(p4): Add support for WiFi to ESP32-P4 Implements support for external MCU connected through SDIO * fix(p4): Init SDIO host properly on Network boot esp-hosted has one function marked as "constructor" that did not run in the boot phase of the chip. This calls the function when network is started
1 parent 1ef10a6 commit eef3d06

19 files changed

+58
-28
lines changed

idf_component.yml

+14-6
Original file line numberDiff line numberDiff line change
@@ -56,35 +56,43 @@ dependencies:
5656
espressif/esp-zboss-lib:
5757
version: "^1.0.1"
5858
rules:
59-
- if: "target != esp32c2"
59+
- if: "target not in [esp32c2, esp32p4]"
6060
espressif/esp-zigbee-lib:
6161
version: "^1.0.1"
6262
rules:
63-
- if: "target != esp32c2"
63+
- if: "target not in [esp32c2, esp32p4]"
6464
espressif/esp-dsp:
6565
version: "^1.3.4"
6666
rules:
6767
- if: "target != esp32c2"
6868
espressif/esp_rainmaker:
6969
version: "^1.0.0"
7070
rules:
71-
- if: "target != esp32c2"
71+
- if: "target not in [esp32c2, esp32p4]"
7272
espressif/rmaker_common:
7373
version: "^1.4.6"
7474
rules:
75-
- if: "target != esp32c2"
75+
- if: "target not in [esp32c2, esp32p4]"
7676
espressif/esp_insights:
7777
version: "^1.2.1"
7878
rules:
79-
- if: "target != esp32c2"
79+
- if: "target not in [esp32c2, esp32p4]"
8080
espressif/qrcode:
8181
version: "^0.1.0~1"
8282
rules:
83-
- if: "target != esp32c2"
83+
- if: "target not in [esp32c2, esp32p4]"
8484
espressif/esp-sr:
8585
version: "^1.4.2"
8686
rules:
8787
- if: "target in [esp32s3]"
88+
espressif/esp_hosted:
89+
version: "^0.0.22"
90+
rules:
91+
- if: "target == esp32p4"
92+
espressif/esp_wifi_remote:
93+
version: "^0.4.1"
94+
rules:
95+
- if: "target == esp32p4"
8896
espressif/libsodium:
8997
version: "^1.0.20~1"
9098
require: public

libraries/Network/src/NetworkEvents.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -423,7 +423,7 @@ const char *NetworkEvents::eventName(arduino_event_id_t id) {
423423
case ARDUINO_EVENT_PPP_GOT_IP: return "PPP_GOT_IP";
424424
case ARDUINO_EVENT_PPP_LOST_IP: return "PPP_LOST_IP";
425425
case ARDUINO_EVENT_PPP_GOT_IP6: return "PPP_GOT_IP6";
426-
#if SOC_WIFI_SUPPORTED
426+
#if SOC_WIFI_SUPPORTED || CONFIG_ESP_WIFI_REMOTE_ENABLED
427427
case ARDUINO_EVENT_WIFI_OFF: return "WIFI_OFF";
428428
case ARDUINO_EVENT_WIFI_READY: return "WIFI_READY";
429429
case ARDUINO_EVENT_WIFI_SCAN_DONE: return "SCAN_DONE";

libraries/Network/src/NetworkEvents.h

+8-5
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,15 @@
1616
#include "freertos/queue.h"
1717
#include "freertos/semphr.h"
1818
#include "freertos/event_groups.h"
19+
#include "sdkconfig.h"
1920

20-
#if SOC_WIFI_SUPPORTED
21+
#if SOC_WIFI_SUPPORTED || CONFIG_ESP_WIFI_REMOTE_ENABLED
2122
#include "esp_wifi_types.h"
2223
#include "esp_smartconfig.h"
2324
#include "network_provisioning/network_config.h"
2425
#endif
2526

26-
#if SOC_WIFI_SUPPORTED
27+
#if SOC_WIFI_SUPPORTED || CONFIG_ESP_WIFI_REMOTE_ENABLED
2728
static const int WIFI_SCANNING_BIT = BIT0;
2829
static const int WIFI_SCAN_DONE_BIT = BIT1;
2930
#endif
@@ -41,7 +42,7 @@ typedef enum {
4142
ARDUINO_EVENT_ETH_GOT_IP,
4243
ARDUINO_EVENT_ETH_LOST_IP,
4344
ARDUINO_EVENT_ETH_GOT_IP6,
44-
#if SOC_WIFI_SUPPORTED
45+
#if SOC_WIFI_SUPPORTED || CONFIG_ESP_WIFI_REMOTE_ENABLED
4546
ARDUINO_EVENT_WIFI_OFF,
4647
ARDUINO_EVENT_WIFI_READY,
4748
ARDUINO_EVENT_WIFI_SCAN_DONE,
@@ -93,7 +94,7 @@ typedef union {
9394
ip_event_got_ip_t got_ip;
9495
ip_event_got_ip6_t got_ip6;
9596
esp_eth_handle_t eth_connected;
96-
#if SOC_WIFI_SUPPORTED
97+
#if SOC_WIFI_SUPPORTED || CONFIG_ESP_WIFI_REMOTE_ENABLED
9798
wifi_event_sta_scan_done_t wifi_scan_done;
9899
wifi_event_sta_authmode_change_t wifi_sta_authmode_change;
99100
wifi_event_sta_connected_t wifi_sta_connected;
@@ -104,6 +105,8 @@ typedef union {
104105
wifi_event_ap_staconnected_t wifi_ap_staconnected;
105106
wifi_event_ap_stadisconnected_t wifi_ap_stadisconnected;
106107
wifi_event_ftm_report_t wifi_ftm_report;
108+
#endif
109+
#if SOC_WIFI_SUPPORTED
107110
wifi_sta_config_t prov_cred_recv;
108111
network_prov_wifi_sta_fail_reason_t prov_fail_reason;
109112
smartconfig_event_got_ssid_pswd_t sc_got_ssid_pswd;
@@ -147,7 +150,7 @@ class NetworkEvents {
147150
friend class ESP_NetworkInterface;
148151
friend class ETHClass;
149152
friend class PPPClass;
150-
#if SOC_WIFI_SUPPORTED
153+
#if SOC_WIFI_SUPPORTED || CONFIG_ESP_WIFI_REMOTE_ENABLED
151154
friend class STAClass;
152155
friend class APClass;
153156
friend class WiFiGenericClass;

libraries/Network/src/NetworkManager.cpp

+7
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@
1010
#include "esp_mac.h"
1111
#include "netdb.h"
1212

13+
#if CONFIG_ESP_WIFI_REMOTE_ENABLED
14+
extern "C" esp_err_t esp_hosted_init(void *);
15+
#endif
16+
1317
NetworkManager::NetworkManager() {}
1418

1519
NetworkInterface *getNetifByID(Network_Interface_ID id);
@@ -18,6 +22,9 @@ bool NetworkManager::begin() {
1822
static bool initialized = false;
1923
if (!initialized) {
2024
initialized = true;
25+
#if CONFIG_ESP_WIFI_REMOTE_ENABLED
26+
esp_hosted_init(NULL);
27+
#endif
2128
#if CONFIG_IDF_TARGET_ESP32
2229
uint8_t mac[8];
2330
if (esp_efuse_mac_get_default(mac) == ESP_OK) {

libraries/WiFi/src/AP.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
#include "WiFi.h"
88
#include "WiFiGeneric.h"
99
#include "WiFiAP.h"
10-
#if SOC_WIFI_SUPPORTED
10+
#if SOC_WIFI_SUPPORTED || CONFIG_ESP_WIFI_REMOTE_ENABLED
1111
#include <stdint.h>
1212
#include <stdbool.h>
1313
#include <stdio.h>

libraries/WiFi/src/STA.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
#include "WiFi.h"
77
#include "WiFiGeneric.h"
88
#include "WiFiSTA.h"
9-
#if SOC_WIFI_SUPPORTED
9+
#if SOC_WIFI_SUPPORTED || CONFIG_ESP_WIFI_REMOTE_ENABLED
1010
#include <stdint.h>
1111
#include <stdbool.h>
1212
#include <stdio.h>

libraries/WiFi/src/WiFi.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
2323
*/
2424
#include "WiFi.h"
25-
#if SOC_WIFI_SUPPORTED
25+
#if SOC_WIFI_SUPPORTED || CONFIG_ESP_WIFI_REMOTE_ENABLED
2626

2727
extern "C" {
2828
#include <stdint.h>

libraries/WiFi/src/WiFi.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222
#pragma once
2323

2424
#include "soc/soc_caps.h"
25-
#if SOC_WIFI_SUPPORTED
25+
#include "sdkconfig.h"
26+
#if SOC_WIFI_SUPPORTED || CONFIG_ESP_WIFI_REMOTE_ENABLED
2627

2728
#include <stdint.h>
2829

libraries/WiFi/src/WiFiAP.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
#include "WiFi.h"
2626
#include "WiFiGeneric.h"
2727
#include "WiFiAP.h"
28-
#if SOC_WIFI_SUPPORTED
28+
#if SOC_WIFI_SUPPORTED || CONFIG_ESP_WIFI_REMOTE_ENABLED
2929

3030
#include <stdint.h>
3131
#include <stdbool.h>

libraries/WiFi/src/WiFiAP.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
#pragma once
2424

2525
#include "soc/soc_caps.h"
26-
#if SOC_WIFI_SUPPORTED
26+
#if SOC_WIFI_SUPPORTED || CONFIG_ESP_WIFI_REMOTE_ENABLED
2727

2828
#include "esp_wifi_types.h"
2929
#include "WiFiType.h"

libraries/WiFi/src/WiFiGeneric.cpp

+13-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424

2525
#include "WiFi.h"
2626
#include "WiFiGeneric.h"
27-
#if SOC_WIFI_SUPPORTED
27+
#if SOC_WIFI_SUPPORTED || CONFIG_ESP_WIFI_REMOTE_ENABLED
2828

2929
extern "C" {
3030
#include <stdint.h>
@@ -39,7 +39,9 @@ extern "C" {
3939
#include <esp_event.h>
4040
#include <esp_mac.h>
4141
#include <esp_netif.h>
42+
#if SOC_WIFI_SUPPORTED
4243
#include <esp_phy.h>
44+
#endif
4345
#include "lwip/ip_addr.h"
4446
#include "lwip/opt.h"
4547
#include "lwip/err.h"
@@ -103,6 +105,7 @@ static void _arduino_event_cb(void *arg, esp_event_base_t event_base, int32_t ev
103105
arduino_event.event_id = ARDUINO_EVENT_WIFI_FTM_REPORT;
104106
memcpy(&arduino_event.event_info.wifi_ftm_report, event_data, sizeof(wifi_event_ftm_report_t));
105107

108+
#if !CONFIG_ESP_WIFI_REMOTE_ENABLED
106109
/*
107110
* SMART CONFIG
108111
* */
@@ -157,6 +160,7 @@ static void _arduino_event_cb(void *arg, esp_event_base_t event_base, int32_t ev
157160
} else if (event_base == NETWORK_PROV_EVENT && event_id == NETWORK_PROV_WIFI_CRED_SUCCESS) {
158161
log_v("Provisioning Success!");
159162
arduino_event.event_id = ARDUINO_EVENT_PROV_CRED_SUCCESS;
163+
#endif
160164
}
161165

162166
if (arduino_event.event_id < ARDUINO_EVENT_MAX) {
@@ -170,6 +174,7 @@ static bool initWiFiEvents() {
170174
return false;
171175
}
172176

177+
#if !CONFIG_ESP_WIFI_REMOTE_ENABLED
173178
if (esp_event_handler_instance_register(SC_EVENT, ESP_EVENT_ANY_ID, &_arduino_event_cb, NULL, NULL)) {
174179
log_e("event_handler_instance_register for SC_EVENT Failed!");
175180
return false;
@@ -179,6 +184,7 @@ static bool initWiFiEvents() {
179184
log_e("event_handler_instance_register for NETWORK_PROV_EVENT Failed!");
180185
return false;
181186
}
187+
#endif
182188

183189
return true;
184190
}
@@ -189,6 +195,7 @@ static bool deinitWiFiEvents() {
189195
return false;
190196
}
191197

198+
#if !CONFIG_ESP_WIFI_REMOTE_ENABLED
192199
if (esp_event_handler_unregister(SC_EVENT, ESP_EVENT_ANY_ID, &_arduino_event_cb)) {
193200
log_e("esp_event_handler_unregister for SC_EVENT Failed!");
194201
return false;
@@ -198,6 +205,7 @@ static bool deinitWiFiEvents() {
198205
log_e("esp_event_handler_unregister for NETWORK_PROV_EVENT Failed!");
199206
return false;
200207
}
208+
#endif
201209

202210
return true;
203211
}
@@ -370,6 +378,7 @@ void WiFiGenericClass::_eventCallback(arduino_event_t *event) {
370378
// log_d("Arduino Event: %d - %s", event->event_id, WiFi.eventName(event->event_id));
371379
if (event->event_id == ARDUINO_EVENT_WIFI_SCAN_DONE) {
372380
WiFiScanClass::_scanDone();
381+
#if !CONFIG_ESP_WIFI_REMOTE_ENABLED
373382
} else if (event->event_id == ARDUINO_EVENT_SC_GOT_SSID_PSWD) {
374383
WiFi.begin(
375384
(const char *)event->event_info.sc_got_ssid_pswd.ssid, (const char *)event->event_info.sc_got_ssid_pswd.password, 0,
@@ -378,6 +387,7 @@ void WiFiGenericClass::_eventCallback(arduino_event_t *event) {
378387
} else if (event->event_id == ARDUINO_EVENT_SC_SEND_ACK_DONE) {
379388
esp_smartconfig_stop();
380389
WiFiSTAClass::_smartConfigDone = true;
390+
#endif
381391
}
382392
}
383393

@@ -693,6 +703,7 @@ bool WiFiGenericClass::initiateFTM(uint8_t frm_count, uint16_t burst_period, uin
693703
* @return true on success
694704
*/
695705
bool WiFiGenericClass::setDualAntennaConfig(uint8_t gpio_ant1, uint8_t gpio_ant2, wifi_rx_ant_t rx_mode, wifi_tx_ant_t tx_mode) {
706+
#if !CONFIG_ESP_WIFI_REMOTE_ENABLED
696707

697708
esp_phy_ant_gpio_config_t wifi_ant_io;
698709

@@ -759,7 +770,7 @@ bool WiFiGenericClass::setDualAntennaConfig(uint8_t gpio_ant1, uint8_t gpio_ant2
759770
log_e("Failed to set antenna configuration");
760771
return false;
761772
}
762-
773+
#endif
763774
return true;
764775
}
765776

libraries/WiFi/src/WiFiGeneric.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
#pragma once
2424

2525
#include "soc/soc_caps.h"
26-
#if SOC_WIFI_SUPPORTED
26+
#if SOC_WIFI_SUPPORTED || CONFIG_ESP_WIFI_REMOTE_ENABLED
2727

2828
#include "esp_err.h"
2929
#include "esp_event.h"

libraries/WiFi/src/WiFiMulti.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
*/
2525

2626
#include "WiFiMulti.h"
27-
#if SOC_WIFI_SUPPORTED
27+
#if SOC_WIFI_SUPPORTED || CONFIG_ESP_WIFI_REMOTE_ENABLED
2828
#include <limits.h>
2929
#include <string.h>
3030
#include <esp32-hal.h>

libraries/WiFi/src/WiFiMulti.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
#pragma once
2727

2828
#include "soc/soc_caps.h"
29-
#if SOC_WIFI_SUPPORTED
29+
#if SOC_WIFI_SUPPORTED || CONFIG_ESP_WIFI_REMOTE_ENABLED
3030

3131
#include "WiFi.h"
3232
#include <vector>

libraries/WiFi/src/WiFiSTA.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
#include "WiFi.h"
2626
#include "WiFiGeneric.h"
2727
#include "WiFiSTA.h"
28-
#if SOC_WIFI_SUPPORTED
28+
#if SOC_WIFI_SUPPORTED || CONFIG_ESP_WIFI_REMOTE_ENABLED
2929

3030
#include <stdint.h>
3131
#include <stdbool.h>

libraries/WiFi/src/WiFiSTA.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
#pragma once
2424

2525
#include "soc/soc_caps.h"
26-
#if SOC_WIFI_SUPPORTED
26+
#if SOC_WIFI_SUPPORTED || CONFIG_ESP_WIFI_REMOTE_ENABLED
2727

2828
#include "WiFiType.h"
2929
#include "WiFiGeneric.h"

libraries/WiFi/src/WiFiScan.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
#include "WiFi.h"
2626
#include "WiFiGeneric.h"
2727
#include "WiFiScan.h"
28-
#if SOC_WIFI_SUPPORTED
28+
#if SOC_WIFI_SUPPORTED || CONFIG_ESP_WIFI_REMOTE_ENABLED
2929

3030
extern "C" {
3131
#include <stdint.h>

libraries/WiFi/src/WiFiScan.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
#pragma once
2424

2525
#include "soc/soc_caps.h"
26-
#if SOC_WIFI_SUPPORTED
26+
#if SOC_WIFI_SUPPORTED || CONFIG_ESP_WIFI_REMOTE_ENABLED
2727

2828
#include "WiFiType.h"
2929
#include "WiFiGeneric.h"

libraries/WiFi/src/WiFiType.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
#pragma once
2323

2424
#include "soc/soc_caps.h"
25-
#if SOC_WIFI_SUPPORTED
25+
#if SOC_WIFI_SUPPORTED || CONFIG_ESP_WIFI_REMOTE_ENABLED
2626

2727
#include "esp_wifi_types.h"
2828

0 commit comments

Comments
 (0)