@@ -87,37 +87,6 @@ STATIC void init_lan_rmii() {
87
87
phy_rmii_smi_configure_pins (self -> mdc_pin , self -> mdio_pin );
88
88
}
89
89
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
-
121
90
STATIC mp_obj_t get_lan (size_t n_args , const mp_obj_t * pos_args , mp_map_t * kw_args ) {
122
91
lan_if_obj_t * self = & lan_obj ;
123
92
@@ -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
127
96
128
97
enum { ARG_id , ARG_mdc , ARG_mdio , ARG_power , ARG_phy_addr , ARG_phy_type };
129
98
130
- uint8_t default_pins [] = {23 , 18 , 17 }; // mdc, mdio, power
131
99
132
100
static const mp_arg_t allowed_args [] = {
133
101
{ 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 },
139
107
};
140
108
141
109
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
147
115
}
148
116
}
149
117
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 );
159
121
160
122
if (args [ARG_phy_addr ].u_int < 0x00 || args [ARG_phy_addr ].u_int > 0x1f ) {
161
123
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
165
127
mp_raise_ValueError ("invalid phy type" );
166
128
}
167
129
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
+ }
175
159
return MP_OBJ_FROM_PTR (& lan_obj );
176
160
}
177
161
MP_DEFINE_CONST_FUN_OBJ_KW (get_lan_obj , 0 , get_lan );
0 commit comments