@@ -59,6 +59,30 @@ static void _eth_event_cb(void* arg, esp_event_base_t event_base, int32_t event_
59
59
}
60
60
}
61
61
62
+ static void onEthConnected (arduino_event_id_t event, arduino_event_info_t info)
63
+ {
64
+ if (event == ARDUINO_EVENT_ETH_CONNECTED){
65
+ uint8_t index = 3 ;
66
+ for (int i = 0 ; i < 3 ; ++i) {
67
+ if (_ethernets[i] != NULL && _ethernets[i]->handle () == info.eth_connected ){
68
+ index = i;
69
+ break ;
70
+ }
71
+ }
72
+ if (index == 3 ){
73
+ return ;
74
+ }
75
+ if (Network.getStatusBits () & ETH_WANT_IP6_BIT (index)){
76
+ esp_err_t err = esp_netif_create_ip6_linklocal (_ethernets[index]->netif ());
77
+ if (err != ESP_OK){
78
+ log_e (" Failed to enable IPv6 Link Local on ETH: [%d] %s" , err, esp_err_to_name (err));
79
+ } else {
80
+ log_v (" Enabled IPv6 Link Local on %s" , _ethernets[index]->desc ());
81
+ }
82
+ }
83
+ }
84
+ }
85
+
62
86
esp_eth_handle_t ETHClass::handle (){
63
87
return _eth_handle;
64
88
}
@@ -93,15 +117,8 @@ void ETHClass::_onEthEvent(int32_t event_id, void* event_data){
93
117
94
118
if (event_id == ETHERNET_EVENT_CONNECTED) {
95
119
log_v (" %s Connected" , desc ());
96
- if (Network.getStatusBits () & ETH_WANT_IP6_BIT (_eth_index)){
97
- esp_err_t err = esp_netif_create_ip6_linklocal (_esp_netif);
98
- if (err != ESP_OK){
99
- log_e (" Failed to enable IPv6 Link Local on ETH: [%d] %s" , err, esp_err_to_name (err));
100
- } else {
101
- log_v (" Enabled IPv6 Link Local on %s" , desc ());
102
- }
103
- }
104
120
arduino_event.event_id = ARDUINO_EVENT_ETH_CONNECTED;
121
+ arduino_event.event_info .eth_connected = handle ();
105
122
Network.setStatusBits (ETH_CONNECTED_BIT (_eth_index));
106
123
} else if (event_id == ETHERNET_EVENT_DISCONNECTED) {
107
124
log_v (" %s Disconnected" , desc ());
@@ -310,6 +327,9 @@ bool ETHClass::begin(eth_phy_type_t type, uint8_t phy_addr, int mdc, int mdio, i
310
327
if (_pin_power != -1 ){
311
328
if (!perimanSetPinBus (_pin_power, ESP32_BUS_TYPE_ETHERNET_PWR, (void *)(this ), -1 , -1 )){ goto err; }
312
329
}
330
+
331
+ Network.onEvent (onEthConnected, ARDUINO_EVENT_ETH_CONNECTED);
332
+
313
333
// holds a few milliseconds to let DHCP start and enter into a good state
314
334
// FIX ME -- adresses issue https://github.com/espressif/arduino-esp32/issues/5733
315
335
delay (50 );
@@ -697,6 +717,8 @@ bool ETHClass::beginSPI(eth_phy_type_t type, uint8_t phy_addr, int cs, int irq,
697
717
if (!perimanSetPinBus (_pin_rst, ESP32_BUS_TYPE_ETHERNET_SPI, (void *)(this ), -1 , -1 )){ goto err; }
698
718
}
699
719
720
+ Network.onEvent (onEthConnected, ARDUINO_EVENT_ETH_CONNECTED);
721
+
700
722
return true ;
701
723
702
724
err:
0 commit comments