extmod: Fix to support compiling with object representation D.
This commit is contained in:
parent
b2b06450e3
commit
aa735dc6a4
|
@ -307,11 +307,11 @@ STATIC mp_obj_t machine_i2c_make_new(const mp_obj_type_t *type, size_t n_args, s
|
||||||
mp_map_t kw_args;
|
mp_map_t kw_args;
|
||||||
mp_map_init_fixed_table(&kw_args, n_kw, args + n_args);
|
mp_map_init_fixed_table(&kw_args, n_kw, args + n_args);
|
||||||
machine_i2c_obj_init_helper(self, n_args, args, &kw_args);
|
machine_i2c_obj_init_helper(self, n_args, args, &kw_args);
|
||||||
return (mp_obj_t)self;
|
return MP_OBJ_FROM_PTR(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC mp_obj_t machine_i2c_obj_init(size_t n_args, const mp_obj_t *args, mp_map_t *kw_args) {
|
STATIC mp_obj_t machine_i2c_obj_init(size_t n_args, const mp_obj_t *args, mp_map_t *kw_args) {
|
||||||
machine_i2c_obj_init_helper(args[0], n_args - 1, args + 1, kw_args);
|
machine_i2c_obj_init_helper(MP_OBJ_TO_PTR(args[0]), n_args - 1, args + 1, kw_args);
|
||||||
return mp_const_none;
|
return mp_const_none;
|
||||||
}
|
}
|
||||||
MP_DEFINE_CONST_FUN_OBJ_KW(machine_i2c_init_obj, 1, machine_i2c_obj_init);
|
MP_DEFINE_CONST_FUN_OBJ_KW(machine_i2c_init_obj, 1, machine_i2c_obj_init);
|
||||||
|
|
|
@ -304,7 +304,7 @@ static inline void poll_sockets(void) {
|
||||||
|
|
||||||
static inline void exec_user_callback(lwip_socket_obj_t *socket) {
|
static inline void exec_user_callback(lwip_socket_obj_t *socket) {
|
||||||
if (socket->callback != MP_OBJ_NULL) {
|
if (socket->callback != MP_OBJ_NULL) {
|
||||||
mp_call_function_1_protected(socket->callback, socket);
|
mp_call_function_1_protected(socket->callback, MP_OBJ_FROM_PTR(socket));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -621,7 +621,7 @@ STATIC mp_uint_t lwip_tcp_receive(lwip_socket_obj_t *socket, byte *buf, mp_uint_
|
||||||
STATIC const mp_obj_type_t lwip_socket_type;
|
STATIC const mp_obj_type_t lwip_socket_type;
|
||||||
|
|
||||||
STATIC void lwip_socket_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) {
|
STATIC void lwip_socket_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) {
|
||||||
lwip_socket_obj_t *self = self_in;
|
lwip_socket_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||||
mp_printf(print, "<socket state=%d timeout=%d incoming=%p off=%d>", self->state, self->timeout,
|
mp_printf(print, "<socket state=%d timeout=%d incoming=%p off=%d>", self->state, self->timeout,
|
||||||
self->incoming.pbuf, self->recv_offset);
|
self->incoming.pbuf, self->recv_offset);
|
||||||
}
|
}
|
||||||
|
@ -631,7 +631,7 @@ STATIC mp_obj_t lwip_socket_make_new(const mp_obj_type_t *type, size_t n_args, s
|
||||||
mp_arg_check_num(n_args, n_kw, 0, 4, false);
|
mp_arg_check_num(n_args, n_kw, 0, 4, false);
|
||||||
|
|
||||||
lwip_socket_obj_t *socket = m_new_obj_with_finaliser(lwip_socket_obj_t);
|
lwip_socket_obj_t *socket = m_new_obj_with_finaliser(lwip_socket_obj_t);
|
||||||
socket->base.type = (mp_obj_t)&lwip_socket_type;
|
socket->base.type = &lwip_socket_type;
|
||||||
socket->domain = MOD_NETWORK_AF_INET;
|
socket->domain = MOD_NETWORK_AF_INET;
|
||||||
socket->type = MOD_NETWORK_SOCK_STREAM;
|
socket->type = MOD_NETWORK_SOCK_STREAM;
|
||||||
socket->callback = MP_OBJ_NULL;
|
socket->callback = MP_OBJ_NULL;
|
||||||
|
@ -673,11 +673,11 @@ STATIC mp_obj_t lwip_socket_make_new(const mp_obj_type_t *type, size_t n_args, s
|
||||||
socket->timeout = -1;
|
socket->timeout = -1;
|
||||||
socket->state = STATE_NEW;
|
socket->state = STATE_NEW;
|
||||||
socket->recv_offset = 0;
|
socket->recv_offset = 0;
|
||||||
return socket;
|
return MP_OBJ_FROM_PTR(socket);
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC mp_obj_t lwip_socket_bind(mp_obj_t self_in, mp_obj_t addr_in) {
|
STATIC mp_obj_t lwip_socket_bind(mp_obj_t self_in, mp_obj_t addr_in) {
|
||||||
lwip_socket_obj_t *socket = self_in;
|
lwip_socket_obj_t *socket = MP_OBJ_TO_PTR(self_in);
|
||||||
|
|
||||||
uint8_t ip[NETUTILS_IPV4ADDR_BUFSIZE];
|
uint8_t ip[NETUTILS_IPV4ADDR_BUFSIZE];
|
||||||
mp_uint_t port = netutils_parse_inet_addr(addr_in, ip, NETUTILS_BIG);
|
mp_uint_t port = netutils_parse_inet_addr(addr_in, ip, NETUTILS_BIG);
|
||||||
|
@ -706,7 +706,7 @@ STATIC mp_obj_t lwip_socket_bind(mp_obj_t self_in, mp_obj_t addr_in) {
|
||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_2(lwip_socket_bind_obj, lwip_socket_bind);
|
STATIC MP_DEFINE_CONST_FUN_OBJ_2(lwip_socket_bind_obj, lwip_socket_bind);
|
||||||
|
|
||||||
STATIC mp_obj_t lwip_socket_listen(mp_obj_t self_in, mp_obj_t backlog_in) {
|
STATIC mp_obj_t lwip_socket_listen(mp_obj_t self_in, mp_obj_t backlog_in) {
|
||||||
lwip_socket_obj_t *socket = self_in;
|
lwip_socket_obj_t *socket = MP_OBJ_TO_PTR(self_in);
|
||||||
mp_int_t backlog = mp_obj_get_int(backlog_in);
|
mp_int_t backlog = mp_obj_get_int(backlog_in);
|
||||||
|
|
||||||
if (socket->pcb.tcp == NULL) {
|
if (socket->pcb.tcp == NULL) {
|
||||||
|
@ -731,7 +731,7 @@ STATIC mp_obj_t lwip_socket_listen(mp_obj_t self_in, mp_obj_t backlog_in) {
|
||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_2(lwip_socket_listen_obj, lwip_socket_listen);
|
STATIC MP_DEFINE_CONST_FUN_OBJ_2(lwip_socket_listen_obj, lwip_socket_listen);
|
||||||
|
|
||||||
STATIC mp_obj_t lwip_socket_accept(mp_obj_t self_in) {
|
STATIC mp_obj_t lwip_socket_accept(mp_obj_t self_in) {
|
||||||
lwip_socket_obj_t *socket = self_in;
|
lwip_socket_obj_t *socket = MP_OBJ_TO_PTR(self_in);
|
||||||
|
|
||||||
if (socket->pcb.tcp == NULL) {
|
if (socket->pcb.tcp == NULL) {
|
||||||
mp_raise_OSError(MP_EBADF);
|
mp_raise_OSError(MP_EBADF);
|
||||||
|
@ -766,7 +766,7 @@ STATIC mp_obj_t lwip_socket_accept(mp_obj_t self_in) {
|
||||||
|
|
||||||
// create new socket object
|
// create new socket object
|
||||||
lwip_socket_obj_t *socket2 = m_new_obj_with_finaliser(lwip_socket_obj_t);
|
lwip_socket_obj_t *socket2 = m_new_obj_with_finaliser(lwip_socket_obj_t);
|
||||||
socket2->base.type = (mp_obj_t)&lwip_socket_type;
|
socket2->base.type = &lwip_socket_type;
|
||||||
|
|
||||||
// We get a new pcb handle...
|
// We get a new pcb handle...
|
||||||
socket2->pcb.tcp = socket->incoming.connection;
|
socket2->pcb.tcp = socket->incoming.connection;
|
||||||
|
@ -790,16 +790,16 @@ STATIC mp_obj_t lwip_socket_accept(mp_obj_t self_in) {
|
||||||
uint8_t ip[NETUTILS_IPV4ADDR_BUFSIZE];
|
uint8_t ip[NETUTILS_IPV4ADDR_BUFSIZE];
|
||||||
memcpy(ip, &(socket2->pcb.tcp->remote_ip), sizeof(ip));
|
memcpy(ip, &(socket2->pcb.tcp->remote_ip), sizeof(ip));
|
||||||
mp_uint_t port = (mp_uint_t)socket2->pcb.tcp->remote_port;
|
mp_uint_t port = (mp_uint_t)socket2->pcb.tcp->remote_port;
|
||||||
mp_obj_tuple_t *client = mp_obj_new_tuple(2, NULL);
|
mp_obj_tuple_t *client = MP_OBJ_TO_PTR(mp_obj_new_tuple(2, NULL));
|
||||||
client->items[0] = socket2;
|
client->items[0] = MP_OBJ_FROM_PTR(socket2);
|
||||||
client->items[1] = netutils_format_inet_addr(ip, port, NETUTILS_BIG);
|
client->items[1] = netutils_format_inet_addr(ip, port, NETUTILS_BIG);
|
||||||
|
|
||||||
return client;
|
return MP_OBJ_FROM_PTR(client);
|
||||||
}
|
}
|
||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_1(lwip_socket_accept_obj, lwip_socket_accept);
|
STATIC MP_DEFINE_CONST_FUN_OBJ_1(lwip_socket_accept_obj, lwip_socket_accept);
|
||||||
|
|
||||||
STATIC mp_obj_t lwip_socket_connect(mp_obj_t self_in, mp_obj_t addr_in) {
|
STATIC mp_obj_t lwip_socket_connect(mp_obj_t self_in, mp_obj_t addr_in) {
|
||||||
lwip_socket_obj_t *socket = self_in;
|
lwip_socket_obj_t *socket = MP_OBJ_TO_PTR(self_in);
|
||||||
|
|
||||||
if (socket->pcb.tcp == NULL) {
|
if (socket->pcb.tcp == NULL) {
|
||||||
mp_raise_OSError(MP_EBADF);
|
mp_raise_OSError(MP_EBADF);
|
||||||
|
@ -877,7 +877,7 @@ STATIC void lwip_socket_check_connected(lwip_socket_obj_t *socket) {
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC mp_obj_t lwip_socket_send(mp_obj_t self_in, mp_obj_t buf_in) {
|
STATIC mp_obj_t lwip_socket_send(mp_obj_t self_in, mp_obj_t buf_in) {
|
||||||
lwip_socket_obj_t *socket = self_in;
|
lwip_socket_obj_t *socket = MP_OBJ_TO_PTR(self_in);
|
||||||
int _errno;
|
int _errno;
|
||||||
|
|
||||||
lwip_socket_check_connected(socket);
|
lwip_socket_check_connected(socket);
|
||||||
|
@ -905,7 +905,7 @@ STATIC mp_obj_t lwip_socket_send(mp_obj_t self_in, mp_obj_t buf_in) {
|
||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_2(lwip_socket_send_obj, lwip_socket_send);
|
STATIC MP_DEFINE_CONST_FUN_OBJ_2(lwip_socket_send_obj, lwip_socket_send);
|
||||||
|
|
||||||
STATIC mp_obj_t lwip_socket_recv(mp_obj_t self_in, mp_obj_t len_in) {
|
STATIC mp_obj_t lwip_socket_recv(mp_obj_t self_in, mp_obj_t len_in) {
|
||||||
lwip_socket_obj_t *socket = self_in;
|
lwip_socket_obj_t *socket = MP_OBJ_TO_PTR(self_in);
|
||||||
int _errno;
|
int _errno;
|
||||||
|
|
||||||
lwip_socket_check_connected(socket);
|
lwip_socket_check_connected(socket);
|
||||||
|
@ -938,7 +938,7 @@ STATIC mp_obj_t lwip_socket_recv(mp_obj_t self_in, mp_obj_t len_in) {
|
||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_2(lwip_socket_recv_obj, lwip_socket_recv);
|
STATIC MP_DEFINE_CONST_FUN_OBJ_2(lwip_socket_recv_obj, lwip_socket_recv);
|
||||||
|
|
||||||
STATIC mp_obj_t lwip_socket_sendto(mp_obj_t self_in, mp_obj_t data_in, mp_obj_t addr_in) {
|
STATIC mp_obj_t lwip_socket_sendto(mp_obj_t self_in, mp_obj_t data_in, mp_obj_t addr_in) {
|
||||||
lwip_socket_obj_t *socket = self_in;
|
lwip_socket_obj_t *socket = MP_OBJ_TO_PTR(self_in);
|
||||||
int _errno;
|
int _errno;
|
||||||
|
|
||||||
lwip_socket_check_connected(socket);
|
lwip_socket_check_connected(socket);
|
||||||
|
@ -969,7 +969,7 @@ STATIC mp_obj_t lwip_socket_sendto(mp_obj_t self_in, mp_obj_t data_in, mp_obj_t
|
||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_3(lwip_socket_sendto_obj, lwip_socket_sendto);
|
STATIC MP_DEFINE_CONST_FUN_OBJ_3(lwip_socket_sendto_obj, lwip_socket_sendto);
|
||||||
|
|
||||||
STATIC mp_obj_t lwip_socket_recvfrom(mp_obj_t self_in, mp_obj_t len_in) {
|
STATIC mp_obj_t lwip_socket_recvfrom(mp_obj_t self_in, mp_obj_t len_in) {
|
||||||
lwip_socket_obj_t *socket = self_in;
|
lwip_socket_obj_t *socket = MP_OBJ_TO_PTR(self_in);
|
||||||
int _errno;
|
int _errno;
|
||||||
|
|
||||||
lwip_socket_check_connected(socket);
|
lwip_socket_check_connected(socket);
|
||||||
|
@ -1010,7 +1010,7 @@ STATIC mp_obj_t lwip_socket_recvfrom(mp_obj_t self_in, mp_obj_t len_in) {
|
||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_2(lwip_socket_recvfrom_obj, lwip_socket_recvfrom);
|
STATIC MP_DEFINE_CONST_FUN_OBJ_2(lwip_socket_recvfrom_obj, lwip_socket_recvfrom);
|
||||||
|
|
||||||
STATIC mp_obj_t lwip_socket_sendall(mp_obj_t self_in, mp_obj_t buf_in) {
|
STATIC mp_obj_t lwip_socket_sendall(mp_obj_t self_in, mp_obj_t buf_in) {
|
||||||
lwip_socket_obj_t *socket = self_in;
|
lwip_socket_obj_t *socket = MP_OBJ_TO_PTR(self_in);
|
||||||
lwip_socket_check_connected(socket);
|
lwip_socket_check_connected(socket);
|
||||||
|
|
||||||
int _errno;
|
int _errno;
|
||||||
|
@ -1052,7 +1052,7 @@ STATIC mp_obj_t lwip_socket_sendall(mp_obj_t self_in, mp_obj_t buf_in) {
|
||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_2(lwip_socket_sendall_obj, lwip_socket_sendall);
|
STATIC MP_DEFINE_CONST_FUN_OBJ_2(lwip_socket_sendall_obj, lwip_socket_sendall);
|
||||||
|
|
||||||
STATIC mp_obj_t lwip_socket_settimeout(mp_obj_t self_in, mp_obj_t timeout_in) {
|
STATIC mp_obj_t lwip_socket_settimeout(mp_obj_t self_in, mp_obj_t timeout_in) {
|
||||||
lwip_socket_obj_t *socket = self_in;
|
lwip_socket_obj_t *socket = MP_OBJ_TO_PTR(self_in);
|
||||||
mp_uint_t timeout;
|
mp_uint_t timeout;
|
||||||
if (timeout_in == mp_const_none) {
|
if (timeout_in == mp_const_none) {
|
||||||
timeout = -1;
|
timeout = -1;
|
||||||
|
@ -1069,7 +1069,7 @@ STATIC mp_obj_t lwip_socket_settimeout(mp_obj_t self_in, mp_obj_t timeout_in) {
|
||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_2(lwip_socket_settimeout_obj, lwip_socket_settimeout);
|
STATIC MP_DEFINE_CONST_FUN_OBJ_2(lwip_socket_settimeout_obj, lwip_socket_settimeout);
|
||||||
|
|
||||||
STATIC mp_obj_t lwip_socket_setblocking(mp_obj_t self_in, mp_obj_t flag_in) {
|
STATIC mp_obj_t lwip_socket_setblocking(mp_obj_t self_in, mp_obj_t flag_in) {
|
||||||
lwip_socket_obj_t *socket = self_in;
|
lwip_socket_obj_t *socket = MP_OBJ_TO_PTR(self_in);
|
||||||
bool val = mp_obj_is_true(flag_in);
|
bool val = mp_obj_is_true(flag_in);
|
||||||
if (val) {
|
if (val) {
|
||||||
socket->timeout = -1;
|
socket->timeout = -1;
|
||||||
|
@ -1082,7 +1082,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(lwip_socket_setblocking_obj, lwip_socket_setblo
|
||||||
|
|
||||||
STATIC mp_obj_t lwip_socket_setsockopt(size_t n_args, const mp_obj_t *args) {
|
STATIC mp_obj_t lwip_socket_setsockopt(size_t n_args, const mp_obj_t *args) {
|
||||||
(void)n_args; // always 4
|
(void)n_args; // always 4
|
||||||
lwip_socket_obj_t *socket = args[0];
|
lwip_socket_obj_t *socket = MP_OBJ_TO_PTR(args[0]);
|
||||||
|
|
||||||
int opt = mp_obj_get_int(args[2]);
|
int opt = mp_obj_get_int(args[2]);
|
||||||
if (opt == 20) {
|
if (opt == 20) {
|
||||||
|
@ -1137,7 +1137,7 @@ STATIC mp_obj_t lwip_socket_makefile(size_t n_args, const mp_obj_t *args) {
|
||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(lwip_socket_makefile_obj, 1, 3, lwip_socket_makefile);
|
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(lwip_socket_makefile_obj, 1, 3, lwip_socket_makefile);
|
||||||
|
|
||||||
STATIC mp_uint_t lwip_socket_read(mp_obj_t self_in, void *buf, mp_uint_t size, int *errcode) {
|
STATIC mp_uint_t lwip_socket_read(mp_obj_t self_in, void *buf, mp_uint_t size, int *errcode) {
|
||||||
lwip_socket_obj_t *socket = self_in;
|
lwip_socket_obj_t *socket = MP_OBJ_TO_PTR(self_in);
|
||||||
|
|
||||||
switch (socket->type) {
|
switch (socket->type) {
|
||||||
case MOD_NETWORK_SOCK_STREAM:
|
case MOD_NETWORK_SOCK_STREAM:
|
||||||
|
@ -1150,7 +1150,7 @@ STATIC mp_uint_t lwip_socket_read(mp_obj_t self_in, void *buf, mp_uint_t size, i
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC mp_uint_t lwip_socket_write(mp_obj_t self_in, const void *buf, mp_uint_t size, int *errcode) {
|
STATIC mp_uint_t lwip_socket_write(mp_obj_t self_in, const void *buf, mp_uint_t size, int *errcode) {
|
||||||
lwip_socket_obj_t *socket = self_in;
|
lwip_socket_obj_t *socket = MP_OBJ_TO_PTR(self_in);
|
||||||
|
|
||||||
switch (socket->type) {
|
switch (socket->type) {
|
||||||
case MOD_NETWORK_SOCK_STREAM:
|
case MOD_NETWORK_SOCK_STREAM:
|
||||||
|
@ -1163,7 +1163,7 @@ STATIC mp_uint_t lwip_socket_write(mp_obj_t self_in, const void *buf, mp_uint_t
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC mp_uint_t lwip_socket_ioctl(mp_obj_t self_in, mp_uint_t request, uintptr_t arg, int *errcode) {
|
STATIC mp_uint_t lwip_socket_ioctl(mp_obj_t self_in, mp_uint_t request, uintptr_t arg, int *errcode) {
|
||||||
lwip_socket_obj_t *socket = self_in;
|
lwip_socket_obj_t *socket = MP_OBJ_TO_PTR(self_in);
|
||||||
mp_uint_t ret;
|
mp_uint_t ret;
|
||||||
|
|
||||||
if (request == MP_STREAM_POLL) {
|
if (request == MP_STREAM_POLL) {
|
||||||
|
@ -1401,7 +1401,7 @@ STATIC mp_obj_t lwip_getaddrinfo(size_t n_args, const mp_obj_t *args) {
|
||||||
mp_raise_OSError(state.status);
|
mp_raise_OSError(state.status);
|
||||||
}
|
}
|
||||||
|
|
||||||
mp_obj_tuple_t *tuple = mp_obj_new_tuple(5, NULL);
|
mp_obj_tuple_t *tuple = MP_OBJ_TO_PTR(mp_obj_new_tuple(5, NULL));
|
||||||
tuple->items[0] = MP_OBJ_NEW_SMALL_INT(MOD_NETWORK_AF_INET);
|
tuple->items[0] = MP_OBJ_NEW_SMALL_INT(MOD_NETWORK_AF_INET);
|
||||||
tuple->items[1] = MP_OBJ_NEW_SMALL_INT(MOD_NETWORK_SOCK_STREAM);
|
tuple->items[1] = MP_OBJ_NEW_SMALL_INT(MOD_NETWORK_SOCK_STREAM);
|
||||||
tuple->items[2] = MP_OBJ_NEW_SMALL_INT(0);
|
tuple->items[2] = MP_OBJ_NEW_SMALL_INT(0);
|
||||||
|
|
|
@ -45,7 +45,7 @@
|
||||||
|
|
||||||
typedef struct _poll_obj_t {
|
typedef struct _poll_obj_t {
|
||||||
mp_obj_t obj;
|
mp_obj_t obj;
|
||||||
mp_uint_t (*ioctl)(mp_obj_t obj, mp_uint_t request, mp_uint_t arg, int *errcode);
|
mp_uint_t (*ioctl)(mp_obj_t obj, mp_uint_t request, uintptr_t arg, int *errcode);
|
||||||
mp_uint_t flags;
|
mp_uint_t flags;
|
||||||
mp_uint_t flags_ret;
|
mp_uint_t flags_ret;
|
||||||
} poll_obj_t;
|
} poll_obj_t;
|
||||||
|
@ -53,7 +53,7 @@ typedef struct _poll_obj_t {
|
||||||
STATIC void poll_map_add(mp_map_t *poll_map, const mp_obj_t *obj, mp_uint_t obj_len, mp_uint_t flags, bool or_flags) {
|
STATIC void poll_map_add(mp_map_t *poll_map, const mp_obj_t *obj, mp_uint_t obj_len, mp_uint_t flags, bool or_flags) {
|
||||||
for (mp_uint_t i = 0; i < obj_len; i++) {
|
for (mp_uint_t i = 0; i < obj_len; i++) {
|
||||||
mp_map_elem_t *elem = mp_map_lookup(poll_map, mp_obj_id(obj[i]), MP_MAP_LOOKUP_ADD_IF_NOT_FOUND);
|
mp_map_elem_t *elem = mp_map_lookup(poll_map, mp_obj_id(obj[i]), MP_MAP_LOOKUP_ADD_IF_NOT_FOUND);
|
||||||
if (elem->value == NULL) {
|
if (elem->value == MP_OBJ_NULL) {
|
||||||
// object not found; get its ioctl and add it to the poll list
|
// object not found; get its ioctl and add it to the poll list
|
||||||
const mp_stream_p_t *stream_p = mp_get_stream_raise(obj[i], MP_STREAM_OP_IOCTL);
|
const mp_stream_p_t *stream_p = mp_get_stream_raise(obj[i], MP_STREAM_OP_IOCTL);
|
||||||
poll_obj_t *poll_obj = m_new_obj(poll_obj_t);
|
poll_obj_t *poll_obj = m_new_obj(poll_obj_t);
|
||||||
|
@ -61,27 +61,27 @@ STATIC void poll_map_add(mp_map_t *poll_map, const mp_obj_t *obj, mp_uint_t obj_
|
||||||
poll_obj->ioctl = stream_p->ioctl;
|
poll_obj->ioctl = stream_p->ioctl;
|
||||||
poll_obj->flags = flags;
|
poll_obj->flags = flags;
|
||||||
poll_obj->flags_ret = 0;
|
poll_obj->flags_ret = 0;
|
||||||
elem->value = poll_obj;
|
elem->value = MP_OBJ_FROM_PTR(poll_obj);
|
||||||
} else {
|
} else {
|
||||||
// object exists; update its flags
|
// object exists; update its flags
|
||||||
if (or_flags) {
|
if (or_flags) {
|
||||||
((poll_obj_t*)elem->value)->flags |= flags;
|
((poll_obj_t*)MP_OBJ_TO_PTR(elem->value))->flags |= flags;
|
||||||
} else {
|
} else {
|
||||||
((poll_obj_t*)elem->value)->flags = flags;
|
((poll_obj_t*)MP_OBJ_TO_PTR(elem->value))->flags = flags;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// poll each object in the map
|
// poll each object in the map
|
||||||
STATIC mp_uint_t poll_map_poll(mp_map_t *poll_map, mp_uint_t *rwx_num) {
|
STATIC mp_uint_t poll_map_poll(mp_map_t *poll_map, size_t *rwx_num) {
|
||||||
mp_uint_t n_ready = 0;
|
mp_uint_t n_ready = 0;
|
||||||
for (mp_uint_t i = 0; i < poll_map->alloc; ++i) {
|
for (mp_uint_t i = 0; i < poll_map->alloc; ++i) {
|
||||||
if (!MP_MAP_SLOT_IS_FILLED(poll_map, i)) {
|
if (!MP_MAP_SLOT_IS_FILLED(poll_map, i)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
poll_obj_t *poll_obj = (poll_obj_t*)poll_map->table[i].value;
|
poll_obj_t *poll_obj = MP_OBJ_TO_PTR(poll_map->table[i].value);
|
||||||
int errcode;
|
int errcode;
|
||||||
mp_int_t ret = poll_obj->ioctl(poll_obj->obj, MP_STREAM_POLL, poll_obj->flags, &errcode);
|
mp_int_t ret = poll_obj->ioctl(poll_obj->obj, MP_STREAM_POLL, poll_obj->flags, &errcode);
|
||||||
poll_obj->flags_ret = ret;
|
poll_obj->flags_ret = ret;
|
||||||
|
@ -158,15 +158,15 @@ STATIC mp_obj_t select_select(uint n_args, const mp_obj_t *args) {
|
||||||
if (!MP_MAP_SLOT_IS_FILLED(&poll_map, i)) {
|
if (!MP_MAP_SLOT_IS_FILLED(&poll_map, i)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
poll_obj_t *poll_obj = (poll_obj_t*)poll_map.table[i].value;
|
poll_obj_t *poll_obj = MP_OBJ_TO_PTR(poll_map.table[i].value);
|
||||||
if (poll_obj->flags_ret & MP_STREAM_POLL_RD) {
|
if (poll_obj->flags_ret & MP_STREAM_POLL_RD) {
|
||||||
((mp_obj_list_t*)list_array[0])->items[rwx_len[0]++] = poll_obj->obj;
|
((mp_obj_list_t*)MP_OBJ_TO_PTR(list_array[0]))->items[rwx_len[0]++] = poll_obj->obj;
|
||||||
}
|
}
|
||||||
if (poll_obj->flags_ret & MP_STREAM_POLL_WR) {
|
if (poll_obj->flags_ret & MP_STREAM_POLL_WR) {
|
||||||
((mp_obj_list_t*)list_array[1])->items[rwx_len[1]++] = poll_obj->obj;
|
((mp_obj_list_t*)MP_OBJ_TO_PTR(list_array[1]))->items[rwx_len[1]++] = poll_obj->obj;
|
||||||
}
|
}
|
||||||
if ((poll_obj->flags_ret & ~(MP_STREAM_POLL_RD | MP_STREAM_POLL_WR)) != 0) {
|
if ((poll_obj->flags_ret & ~(MP_STREAM_POLL_RD | MP_STREAM_POLL_WR)) != 0) {
|
||||||
((mp_obj_list_t*)list_array[2])->items[rwx_len[2]++] = poll_obj->obj;
|
((mp_obj_list_t*)MP_OBJ_TO_PTR(list_array[2]))->items[rwx_len[2]++] = poll_obj->obj;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mp_map_deinit(&poll_map);
|
mp_map_deinit(&poll_map);
|
||||||
|
@ -191,7 +191,7 @@ typedef struct _mp_obj_poll_t {
|
||||||
|
|
||||||
/// \method register(obj[, eventmask])
|
/// \method register(obj[, eventmask])
|
||||||
STATIC mp_obj_t poll_register(uint n_args, const mp_obj_t *args) {
|
STATIC mp_obj_t poll_register(uint n_args, const mp_obj_t *args) {
|
||||||
mp_obj_poll_t *self = args[0];
|
mp_obj_poll_t *self = MP_OBJ_TO_PTR(args[0]);
|
||||||
mp_uint_t flags;
|
mp_uint_t flags;
|
||||||
if (n_args == 3) {
|
if (n_args == 3) {
|
||||||
flags = mp_obj_get_int(args[2]);
|
flags = mp_obj_get_int(args[2]);
|
||||||
|
@ -205,7 +205,7 @@ MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(poll_register_obj, 2, 3, poll_register);
|
||||||
|
|
||||||
/// \method unregister(obj)
|
/// \method unregister(obj)
|
||||||
STATIC mp_obj_t poll_unregister(mp_obj_t self_in, mp_obj_t obj_in) {
|
STATIC mp_obj_t poll_unregister(mp_obj_t self_in, mp_obj_t obj_in) {
|
||||||
mp_obj_poll_t *self = self_in;
|
mp_obj_poll_t *self = MP_OBJ_TO_PTR(self_in);
|
||||||
mp_map_lookup(&self->poll_map, mp_obj_id(obj_in), MP_MAP_LOOKUP_REMOVE_IF_FOUND);
|
mp_map_lookup(&self->poll_map, mp_obj_id(obj_in), MP_MAP_LOOKUP_REMOVE_IF_FOUND);
|
||||||
// TODO raise KeyError if obj didn't exist in map
|
// TODO raise KeyError if obj didn't exist in map
|
||||||
return mp_const_none;
|
return mp_const_none;
|
||||||
|
@ -214,18 +214,18 @@ MP_DEFINE_CONST_FUN_OBJ_2(poll_unregister_obj, poll_unregister);
|
||||||
|
|
||||||
/// \method modify(obj, eventmask)
|
/// \method modify(obj, eventmask)
|
||||||
STATIC mp_obj_t poll_modify(mp_obj_t self_in, mp_obj_t obj_in, mp_obj_t eventmask_in) {
|
STATIC mp_obj_t poll_modify(mp_obj_t self_in, mp_obj_t obj_in, mp_obj_t eventmask_in) {
|
||||||
mp_obj_poll_t *self = self_in;
|
mp_obj_poll_t *self = MP_OBJ_TO_PTR(self_in);
|
||||||
mp_map_elem_t *elem = mp_map_lookup(&self->poll_map, mp_obj_id(obj_in), MP_MAP_LOOKUP);
|
mp_map_elem_t *elem = mp_map_lookup(&self->poll_map, mp_obj_id(obj_in), MP_MAP_LOOKUP);
|
||||||
if (elem == NULL) {
|
if (elem == NULL) {
|
||||||
mp_raise_OSError(MP_ENOENT);
|
mp_raise_OSError(MP_ENOENT);
|
||||||
}
|
}
|
||||||
((poll_obj_t*)elem->value)->flags = mp_obj_get_int(eventmask_in);
|
((poll_obj_t*)MP_OBJ_TO_PTR(elem->value))->flags = mp_obj_get_int(eventmask_in);
|
||||||
return mp_const_none;
|
return mp_const_none;
|
||||||
}
|
}
|
||||||
MP_DEFINE_CONST_FUN_OBJ_3(poll_modify_obj, poll_modify);
|
MP_DEFINE_CONST_FUN_OBJ_3(poll_modify_obj, poll_modify);
|
||||||
|
|
||||||
STATIC mp_uint_t poll_poll_internal(uint n_args, const mp_obj_t *args) {
|
STATIC mp_uint_t poll_poll_internal(uint n_args, const mp_obj_t *args) {
|
||||||
mp_obj_poll_t *self = args[0];
|
mp_obj_poll_t *self = MP_OBJ_TO_PTR(args[0]);
|
||||||
|
|
||||||
// work out timeout (its given already in ms)
|
// work out timeout (its given already in ms)
|
||||||
mp_uint_t timeout = -1;
|
mp_uint_t timeout = -1;
|
||||||
|
@ -258,18 +258,18 @@ STATIC mp_uint_t poll_poll_internal(uint n_args, const mp_obj_t *args) {
|
||||||
return n_ready;
|
return n_ready;
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC mp_obj_t poll_poll(uint n_args, const mp_obj_t *args) {
|
STATIC mp_obj_t poll_poll(size_t n_args, const mp_obj_t *args) {
|
||||||
mp_obj_poll_t *self = args[0];
|
mp_obj_poll_t *self = MP_OBJ_TO_PTR(args[0]);
|
||||||
mp_uint_t n_ready = poll_poll_internal(n_args, args);
|
mp_uint_t n_ready = poll_poll_internal(n_args, args);
|
||||||
|
|
||||||
// one or more objects are ready, or we had a timeout
|
// one or more objects are ready, or we had a timeout
|
||||||
mp_obj_list_t *ret_list = mp_obj_new_list(n_ready, NULL);
|
mp_obj_list_t *ret_list = MP_OBJ_TO_PTR(mp_obj_new_list(n_ready, NULL));
|
||||||
n_ready = 0;
|
n_ready = 0;
|
||||||
for (mp_uint_t i = 0; i < self->poll_map.alloc; ++i) {
|
for (mp_uint_t i = 0; i < self->poll_map.alloc; ++i) {
|
||||||
if (!MP_MAP_SLOT_IS_FILLED(&self->poll_map, i)) {
|
if (!MP_MAP_SLOT_IS_FILLED(&self->poll_map, i)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
poll_obj_t *poll_obj = (poll_obj_t*)self->poll_map.table[i].value;
|
poll_obj_t *poll_obj = MP_OBJ_TO_PTR(self->poll_map.table[i].value);
|
||||||
if (poll_obj->flags_ret != 0) {
|
if (poll_obj->flags_ret != 0) {
|
||||||
mp_obj_t tuple[2] = {poll_obj->obj, MP_OBJ_NEW_SMALL_INT(poll_obj->flags_ret)};
|
mp_obj_t tuple[2] = {poll_obj->obj, MP_OBJ_NEW_SMALL_INT(poll_obj->flags_ret)};
|
||||||
ret_list->items[n_ready++] = mp_obj_new_tuple(2, tuple);
|
ret_list->items[n_ready++] = mp_obj_new_tuple(2, tuple);
|
||||||
|
@ -279,7 +279,7 @@ STATIC mp_obj_t poll_poll(uint n_args, const mp_obj_t *args) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ret_list;
|
return MP_OBJ_FROM_PTR(ret_list);
|
||||||
}
|
}
|
||||||
MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(poll_poll_obj, 1, 3, poll_poll);
|
MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(poll_poll_obj, 1, 3, poll_poll);
|
||||||
|
|
||||||
|
@ -312,7 +312,7 @@ STATIC mp_obj_t poll_iternext(mp_obj_t self_in) {
|
||||||
if (!MP_MAP_SLOT_IS_FILLED(&self->poll_map, i)) {
|
if (!MP_MAP_SLOT_IS_FILLED(&self->poll_map, i)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
poll_obj_t *poll_obj = (poll_obj_t*)self->poll_map.table[i].value;
|
poll_obj_t *poll_obj = MP_OBJ_TO_PTR(self->poll_map.table[i].value);
|
||||||
if (poll_obj->flags_ret != 0) {
|
if (poll_obj->flags_ret != 0) {
|
||||||
mp_obj_tuple_t *t = MP_OBJ_TO_PTR(self->ret_tuple);
|
mp_obj_tuple_t *t = MP_OBJ_TO_PTR(self->ret_tuple);
|
||||||
t->items[0] = poll_obj->obj;
|
t->items[0] = poll_obj->obj;
|
||||||
|
@ -354,7 +354,7 @@ STATIC mp_obj_t select_poll(void) {
|
||||||
mp_map_init(&poll->poll_map, 0);
|
mp_map_init(&poll->poll_map, 0);
|
||||||
poll->iter_cnt = 0;
|
poll->iter_cnt = 0;
|
||||||
poll->ret_tuple = MP_OBJ_NULL;
|
poll->ret_tuple = MP_OBJ_NULL;
|
||||||
return poll;
|
return MP_OBJ_FROM_PTR(poll);
|
||||||
}
|
}
|
||||||
MP_DEFINE_CONST_FUN_OBJ_0(mp_select_poll_obj, select_poll);
|
MP_DEFINE_CONST_FUN_OBJ_0(mp_select_poll_obj, select_poll);
|
||||||
|
|
||||||
|
|
|
@ -85,7 +85,7 @@ int mp_uos_dupterm_rx_chr(void) {
|
||||||
return buf[0];
|
return buf[0];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
mp_uos_deactivate(idx, "dupterm: Exception in read() method, deactivating: ", nlr.ret_val);
|
mp_uos_deactivate(idx, "dupterm: Exception in read() method, deactivating: ", MP_OBJ_FROM_PTR(nlr.ret_val));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -103,7 +103,7 @@ void mp_uos_dupterm_tx_strn(const char *str, size_t len) {
|
||||||
mp_stream_write(MP_STATE_VM(dupterm_objs[idx]), str, len, MP_STREAM_RW_WRITE);
|
mp_stream_write(MP_STATE_VM(dupterm_objs[idx]), str, len, MP_STREAM_RW_WRITE);
|
||||||
nlr_pop();
|
nlr_pop();
|
||||||
} else {
|
} else {
|
||||||
mp_uos_deactivate(idx, "dupterm: Exception in write() method, deactivating: ", nlr.ret_val);
|
mp_uos_deactivate(idx, "dupterm: Exception in write() method, deactivating: ", MP_OBJ_FROM_PTR(nlr.ret_val));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue