Skip to content

Commit 36082c6

Browse files
committed
Merge branch 'dev-ethernet' into dev-x
2 parents 98e19e2 + 611e560 commit 36082c6

File tree

1 file changed

+37
-53
lines changed

1 file changed

+37
-53
lines changed

ports/esp32/network_lan.c

Lines changed: 37 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -87,37 +87,6 @@ STATIC void init_lan_rmii() {
8787
phy_rmii_smi_configure_pins(self->mdc_pin, self->mdio_pin);
8888
}
8989

90-
STATIC void init_lan() {
91-
lan_if_obj_t* self = &lan_obj;
92-
eth_config_t config;
93-
94-
switch (self->phy_type) {
95-
case PHY_TLK110:
96-
config = phy_tlk110_default_ethernet_config;
97-
break;
98-
case PHY_LAN8720:
99-
config = phy_lan8720_default_ethernet_config;
100-
break;
101-
}
102-
103-
self->link_func = config.phy_check_link;
104-
105-
// Replace default power func with our own
106-
self->power_func = config.phy_power_enable;
107-
config.phy_power_enable = phy_power_enable;
108-
109-
config.phy_addr = self->phy_addr;
110-
config.gpio_config = init_lan_rmii;
111-
config.tcpip_input = tcpip_adapter_eth_input;
112-
113-
if (esp_eth_init(&config) == ESP_OK) {
114-
esp_eth_enable();
115-
self->active = true;
116-
} else {
117-
mp_raise_msg(&mp_type_OSError, "esp_eth_init() failed");
118-
}
119-
}
120-
12190
STATIC mp_obj_t get_lan(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
12291
lan_if_obj_t* self = &lan_obj;
12392

@@ -127,15 +96,14 @@ STATIC mp_obj_t get_lan(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_ar
12796

12897
enum { ARG_id, ARG_mdc, ARG_mdio, ARG_power, ARG_phy_addr, ARG_phy_type };
12998

130-
uint8_t default_pins[] = {23, 18, 17}; // mdc, mdio, power
13199

132100
static const mp_arg_t allowed_args[] = {
133101
{ MP_QSTR_id, MP_ARG_OBJ, {.u_obj = mp_const_none} },
134-
{ MP_QSTR_mdc, MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
135-
{ MP_QSTR_mdio, MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
136-
{ MP_QSTR_power, MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
137-
{ MP_QSTR_phy_addr, MP_ARG_INT, {.u_int = 0x01} },
138-
{ MP_QSTR_phy_type, MP_ARG_INT, {.u_int = PHY_LAN8720} },
102+
{ MP_QSTR_mdc, MP_ARG_KW_ONLY | MP_ARG_REQUIRED | MP_ARG_OBJ },
103+
{ MP_QSTR_mdio, MP_ARG_KW_ONLY | MP_ARG_REQUIRED | MP_ARG_OBJ },
104+
{ MP_QSTR_power, MP_ARG_KW_ONLY | MP_ARG_REQUIRED | MP_ARG_OBJ },
105+
{ MP_QSTR_phy_addr, MP_ARG_KW_ONLY | MP_ARG_REQUIRED | MP_ARG_INT },
106+
{ MP_QSTR_phy_type, MP_ARG_KW_ONLY | MP_ARG_REQUIRED | MP_ARG_INT },
139107
};
140108

141109
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
@@ -147,15 +115,9 @@ STATIC mp_obj_t get_lan(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_ar
147115
}
148116
}
149117

150-
for (int i = ARG_mdc; i <= ARG_power; ++i) {
151-
if (args[i].u_obj == mp_const_none && i == ARG_power) {
152-
args[i].u_int = -1;
153-
} else if (args[i].u_obj != MP_OBJ_NULL) {
154-
args[i].u_int = machine_pin_get_id(args[i].u_obj);
155-
} else {
156-
args[i].u_int = default_pins[i - ARG_mdc];
157-
}
158-
}
118+
self->mdc_pin = machine_pin_get_id(args[ARG_mdc].u_obj);
119+
self->mdio_pin = machine_pin_get_id(args[ARG_mdio].u_obj);
120+
self->phy_power_pin = args[ARG_power].u_obj == mp_const_none ? -1 : machine_pin_get_id(args[ARG_power].u_obj);
159121

160122
if (args[ARG_phy_addr].u_int < 0x00 || args[ARG_phy_addr].u_int > 0x1f) {
161123
mp_raise_ValueError("invalid phy address");
@@ -165,13 +127,35 @@ STATIC mp_obj_t get_lan(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_ar
165127
mp_raise_ValueError("invalid phy type");
166128
}
167129

168-
self->mdc_pin = args[ARG_mdc].u_int;
169-
self->mdio_pin = args[ARG_mdio].u_int;
170-
self->phy_power_pin = args[ARG_power].u_int;
171-
self->phy_addr = args[ARG_phy_addr].u_int;
172-
self->phy_type = args[ARG_phy_type].u_int;
173-
self->initialized = true;
174-
init_lan();
130+
131+
eth_config_t config;
132+
133+
switch (args[ARG_phy_type].u_int) {
134+
case PHY_TLK110:
135+
config = phy_tlk110_default_ethernet_config;
136+
break;
137+
case PHY_LAN8720:
138+
config = phy_lan8720_default_ethernet_config;
139+
break;
140+
}
141+
142+
self->link_func = config.phy_check_link;
143+
144+
// Replace default power func with our own
145+
self->power_func = config.phy_power_enable;
146+
config.phy_power_enable = phy_power_enable;
147+
148+
config.phy_addr = args[ARG_phy_addr].u_int;
149+
config.gpio_config = init_lan_rmii;
150+
config.tcpip_input = tcpip_adapter_eth_input;
151+
152+
if (esp_eth_init(&config) == ESP_OK) {
153+
esp_eth_enable();
154+
self->active = true;
155+
self->initialized = true;
156+
} else {
157+
mp_raise_msg(&mp_type_OSError, "esp_eth_init() failed");
158+
}
175159
return MP_OBJ_FROM_PTR(&lan_obj);
176160
}
177161
MP_DEFINE_CONST_FUN_OBJ_KW(get_lan_obj, 0, get_lan);

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy