cc3200: Select NIC when the socket is created.
This makes sense since only WLAN is supported here.
This commit is contained in:
parent
fdcb3b7ebb
commit
d34c4784a5
@ -54,13 +54,11 @@ void mod_network_register_nic(mp_obj_t nic) {
|
|||||||
mp_obj_list_append(&MP_STATE_PORT(mod_network_nic_list), nic);
|
mp_obj_list_append(&MP_STATE_PORT(mod_network_nic_list), nic);
|
||||||
}
|
}
|
||||||
|
|
||||||
mp_obj_t mod_network_find_nic(const uint8_t *ip) {
|
mp_obj_t mod_network_find_nic(void) {
|
||||||
// find a NIC that is suited to given IP address
|
|
||||||
for (mp_uint_t i = 0; i < MP_STATE_PORT(mod_network_nic_list).len; i++) {
|
for (mp_uint_t i = 0; i < MP_STATE_PORT(mod_network_nic_list).len; i++) {
|
||||||
mp_obj_t nic = MP_STATE_PORT(mod_network_nic_list).items[i];
|
mp_obj_t nic = MP_STATE_PORT(mod_network_nic_list).items[i];
|
||||||
return nic;
|
return nic;
|
||||||
}
|
}
|
||||||
|
|
||||||
nlr_raise(mp_obj_new_exception_msg(&mp_type_OSError, mpexception_os_resource_not_avaliable));
|
nlr_raise(mp_obj_new_exception_msg(&mp_type_OSError, mpexception_os_resource_not_avaliable));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -75,7 +75,7 @@ extern const mod_network_nic_type_t mod_network_nic_type_wlan;
|
|||||||
|
|
||||||
void mod_network_init0(void);
|
void mod_network_init0(void);
|
||||||
void mod_network_register_nic(mp_obj_t nic);
|
void mod_network_register_nic(mp_obj_t nic);
|
||||||
mp_obj_t mod_network_find_nic(const uint8_t *ip);
|
mp_obj_t mod_network_find_nic(void);
|
||||||
|
|
||||||
void mod_network_parse_ipv4_addr(mp_obj_t addr_in, uint8_t *out_ip);
|
void mod_network_parse_ipv4_addr(mp_obj_t addr_in, uint8_t *out_ip);
|
||||||
mp_uint_t mod_network_parse_inet_addr(mp_obj_t addr_in, uint8_t *out_ip);
|
mp_uint_t mod_network_parse_inet_addr(mp_obj_t addr_in, uint8_t *out_ip);
|
||||||
|
@ -40,6 +40,18 @@
|
|||||||
|
|
||||||
STATIC const mp_obj_type_t socket_type;
|
STATIC const mp_obj_type_t socket_type;
|
||||||
|
|
||||||
|
STATIC void socket_select_nic(mod_network_socket_obj_t *self) {
|
||||||
|
// select a nic
|
||||||
|
self->nic = mod_network_find_nic();
|
||||||
|
self->nic_type = (mod_network_nic_type_t*)mp_obj_get_type(self->nic);
|
||||||
|
|
||||||
|
// call the nic to open the socket
|
||||||
|
int _errno;
|
||||||
|
if (self->nic_type->socket(self, &_errno) != 0) {
|
||||||
|
nlr_raise(mp_obj_new_exception_arg1(&mp_type_OSError, MP_OBJ_NEW_SMALL_INT(_errno)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// constructor socket(family=AF_INET, type=SOCK_STREAM, proto=IPPROTO_TCP, fileno=None)
|
// constructor socket(family=AF_INET, type=SOCK_STREAM, proto=IPPROTO_TCP, fileno=None)
|
||||||
STATIC mp_obj_t socket_make_new(mp_obj_t type_in, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *args) {
|
STATIC mp_obj_t socket_make_new(mp_obj_t type_in, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *args) {
|
||||||
mp_arg_check_num(n_args, n_kw, 0, 4, false);
|
mp_arg_check_num(n_args, n_kw, 0, 4, false);
|
||||||
@ -65,22 +77,12 @@ STATIC mp_obj_t socket_make_new(mp_obj_t type_in, mp_uint_t n_args, mp_uint_t n_
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
socket_select_nic(s);
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC void socket_select_nic(mod_network_socket_obj_t *self, const byte *ip) {
|
|
||||||
if (self->nic == MP_OBJ_NULL) {
|
|
||||||
// select NIC based on IP
|
|
||||||
self->nic = mod_network_find_nic(ip);
|
|
||||||
self->nic_type = (mod_network_nic_type_t*)mp_obj_get_type(self->nic);
|
|
||||||
|
|
||||||
// call the NIC to open the socket
|
|
||||||
int _errno;
|
|
||||||
if (self->nic_type->socket(self, &_errno) != 0) {
|
|
||||||
nlr_raise(mp_obj_new_exception_arg1(&mp_type_OSError, MP_OBJ_NEW_SMALL_INT(_errno)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// method socket.close()
|
// method socket.close()
|
||||||
STATIC mp_obj_t socket_close(mp_obj_t self_in) {
|
STATIC mp_obj_t socket_close(mp_obj_t self_in) {
|
||||||
mod_network_socket_obj_t *self = self_in;
|
mod_network_socket_obj_t *self = self_in;
|
||||||
@ -99,9 +101,6 @@ STATIC mp_obj_t socket_bind(mp_obj_t self_in, mp_obj_t addr_in) {
|
|||||||
uint8_t ip[MOD_NETWORK_IPV4ADDR_BUF_SIZE];
|
uint8_t ip[MOD_NETWORK_IPV4ADDR_BUF_SIZE];
|
||||||
mp_uint_t port = mod_network_parse_inet_addr(addr_in, ip);
|
mp_uint_t port = mod_network_parse_inet_addr(addr_in, ip);
|
||||||
|
|
||||||
// check if we need to select a NIC
|
|
||||||
socket_select_nic(self, ip);
|
|
||||||
|
|
||||||
// call the NIC to bind the socket
|
// call the NIC to bind the socket
|
||||||
int _errno;
|
int _errno;
|
||||||
if (self->nic_type->bind(self, ip, port, &_errno) != 0) {
|
if (self->nic_type->bind(self, ip, port, &_errno) != 0) {
|
||||||
@ -170,9 +169,6 @@ STATIC mp_obj_t socket_connect(mp_obj_t self_in, mp_obj_t addr_in) {
|
|||||||
uint8_t ip[MOD_NETWORK_IPV4ADDR_BUF_SIZE];
|
uint8_t ip[MOD_NETWORK_IPV4ADDR_BUF_SIZE];
|
||||||
mp_uint_t port = mod_network_parse_inet_addr(addr_in, ip);
|
mp_uint_t port = mod_network_parse_inet_addr(addr_in, ip);
|
||||||
|
|
||||||
// check if we need to select a NIC
|
|
||||||
socket_select_nic(self, ip);
|
|
||||||
|
|
||||||
// call the NIC to connect the socket
|
// call the NIC to connect the socket
|
||||||
int _errno;
|
int _errno;
|
||||||
if (self->nic_type->connect(self, ip, port, &_errno) != 0) {
|
if (self->nic_type->connect(self, ip, port, &_errno) != 0) {
|
||||||
@ -237,9 +233,6 @@ STATIC mp_obj_t socket_sendto(mp_obj_t self_in, mp_obj_t data_in, mp_obj_t addr_
|
|||||||
uint8_t ip[MOD_NETWORK_IPV4ADDR_BUF_SIZE];
|
uint8_t ip[MOD_NETWORK_IPV4ADDR_BUF_SIZE];
|
||||||
mp_uint_t port = mod_network_parse_inet_addr(addr_in, ip);
|
mp_uint_t port = mod_network_parse_inet_addr(addr_in, ip);
|
||||||
|
|
||||||
// check if we need to select a NIC
|
|
||||||
socket_select_nic(self, ip);
|
|
||||||
|
|
||||||
// call the NIC to sendto
|
// call the NIC to sendto
|
||||||
int _errno;
|
int _errno;
|
||||||
mp_int_t ret = self->nic_type->sendto(self, bufinfo.buf, bufinfo.len, ip, port, &_errno);
|
mp_int_t ret = self->nic_type->sendto(self, bufinfo.buf, bufinfo.len, ip, port, &_errno);
|
||||||
|
Loading…
Reference in New Issue
Block a user