From 1aac151d6894cf892c0ff7bb38e5589580d6c080 Mon Sep 17 00:00:00 2001 From: iabdalkader Date: Thu, 20 Jan 2022 17:12:36 +0200 Subject: [PATCH] drivers/ninaw10: Return standard error numbers. --- drivers/ninaw10/nina_wifi_drv.c | 26 ++++++----- drivers/ninaw10/nina_wifi_drv.h | 5 -- extmod/network_ninaw10.c | 82 +++++++++++++++------------------ 3 files changed, 51 insertions(+), 62 deletions(-) diff --git a/drivers/ninaw10/nina_wifi_drv.c b/drivers/ninaw10/nina_wifi_drv.c index 12707fe05..cf0971169 100644 --- a/drivers/ninaw10/nina_wifi_drv.c +++ b/drivers/ninaw10/nina_wifi_drv.c @@ -28,6 +28,7 @@ */ #include "py/mphal.h" +#include "py/mperrno.h" #if MICROPY_PY_NETWORK_NINAW10 @@ -480,7 +481,7 @@ int nina_connected_sta(uint32_t *sta_ip) { } int nina_wait_for_sta(uint32_t *sta_ip, uint32_t timeout) { - return NINA_ERROR_TIMEOUT; + return -MP_ETIMEDOUT; } int nina_ifconfig(nina_ifconfig_t *ifconfig, bool set) { @@ -597,7 +598,7 @@ int nina_scan(nina_scan_callback_t scan_callback, void *arg, uint32_t timeout) { if (timeout && (mp_hal_ticks_ms() - start) >= timeout) { // Timeout, no networks. - return NINA_ERROR_TIMEOUT; + return -MP_ETIMEDOUT; } mp_hal_delay_ms(100); @@ -723,7 +724,7 @@ int nina_socket_close(int fd) { break; } if ((mp_hal_ticks_ms() - start) >= 5000) { - return NINA_ERROR_TIMEOUT; + return -MP_ETIMEDOUT; } } } @@ -777,12 +778,15 @@ int nina_socket_accept(int fd, uint8_t *ip, uint16_t *port, int *fd_out, int32_t return -1; } - for (mp_uint_t start = mp_hal_ticks_ms(); !sock; mp_hal_delay_ms(10)) { + for (mp_uint_t start = mp_hal_ticks_ms(); ; mp_hal_delay_ms(10)) { if (nina_socket_avail(fd, NINA_SOCKET_TYPE_TCP, &sock) != 0) { return -1; } + if (sock != 0) { + break; + } if (timeout == 0 || (timeout > 0 && (mp_hal_ticks_ms() - start) >= timeout)) { - return NINA_ERROR_TIMEOUT; + return -MP_ETIMEDOUT; } } @@ -820,7 +824,7 @@ int nina_socket_connect(int fd, uint8_t *ip, uint16_t port, int32_t timeout) { } if (timeout == 0 || (timeout > 0 && (mp_hal_ticks_ms() - start) >= timeout)) { - return NINA_ERROR_TIMEOUT; + return -MP_ETIMEDOUT; } } @@ -832,7 +836,7 @@ int nina_socket_send(int fd, const uint8_t *buf, uint32_t len, int32_t timeout) uint16_t bytes = 0; if (nina_socket_status(fd) != SOCKET_STATE_ESTABLISHED) { - return -1; + return -MP_ENOTCONN; } if (nina_send_command_read_vals(NINA_CMD_TCP_SEND, @@ -854,7 +858,7 @@ int nina_socket_send(int fd, const uint8_t *buf, uint32_t len, int32_t timeout) } if (timeout == 0 || (timeout > 0 && (mp_hal_ticks_ms() - start) >= timeout)) { - return NINA_ERROR_TIMEOUT; + return -MP_ETIMEDOUT; } mp_hal_delay_ms(1); } @@ -866,7 +870,7 @@ int nina_socket_recv(int fd, uint8_t *buf, uint32_t len, int32_t timeout) { uint16_t bytes = 0; if (nina_socket_status(fd) != SOCKET_STATE_ESTABLISHED) { - return -1; + return -MP_ENOTCONN; } for (mp_uint_t start = mp_hal_ticks_ms(); bytes == 0; mp_hal_delay_ms(1)) { @@ -882,7 +886,7 @@ int nina_socket_recv(int fd, uint8_t *buf, uint32_t len, int32_t timeout) { } if (timeout == 0 || (timeout > 0 && (mp_hal_ticks_ms() - start) >= timeout)) { - return NINA_ERROR_TIMEOUT; + return -MP_ETIMEDOUT; } } return bytes; @@ -934,7 +938,7 @@ int nina_socket_recvfrom(int fd, uint8_t *buf, uint32_t len, uint8_t *ip, uint16 } if (timeout == 0 || (timeout > 0 && (mp_hal_ticks_ms() - start) >= timeout)) { - return NINA_ERROR_TIMEOUT; + return -MP_ETIMEDOUT; } } if (nina_send_command_read_vals(NINA_CMD_SOCKET_REMOTE_ADDR, diff --git a/drivers/ninaw10/nina_wifi_drv.h b/drivers/ninaw10/nina_wifi_drv.h index b8a6c4eb9..b990476b6 100644 --- a/drivers/ninaw10/nina_wifi_drv.h +++ b/drivers/ninaw10/nina_wifi_drv.h @@ -61,11 +61,6 @@ typedef enum { NINA_SOCKET_TYPE_TLS_BEARSSL } nina_socket_type_t; -typedef enum { - NINA_ERROR_IO = -1, - NINA_ERROR_TIMEOUT = -2, -} nina_error_t; - typedef struct { uint8_t ip_addr[NINA_IPV4_ADDR_LEN]; uint8_t subnet_addr[NINA_IPV4_ADDR_LEN]; diff --git a/extmod/network_ninaw10.c b/extmod/network_ninaw10.c index 26b4a811d..e5d322a95 100644 --- a/extmod/network_ninaw10.c +++ b/extmod/network_ninaw10.c @@ -406,13 +406,12 @@ STATIC int network_ninaw10_socket_accept(mod_network_socket_obj_t *socket, int fd = 0; // Call accept. int ret = nina_socket_accept(socket->fileno, ip, (uint16_t *)port, &fd, socket->timeout); - if (ret == NINA_ERROR_TIMEOUT) { - // The socket is Not closed on timeout when calling functions that accept a timeout. - *_errno = MP_ETIMEDOUT; - return -1; - } else if (ret < 0) { - *_errno = ret; - network_ninaw10_socket_close(socket); + if (ret < 0) { + *_errno = -ret; + // Close socket if not a timeout error. + if (*_errno != MP_ETIMEDOUT) { + network_ninaw10_socket_close(socket); + } return -1; } @@ -424,13 +423,12 @@ STATIC int network_ninaw10_socket_accept(mod_network_socket_obj_t *socket, STATIC int network_ninaw10_socket_connect(mod_network_socket_obj_t *socket, byte *ip, mp_uint_t port, int *_errno) { int ret = nina_socket_connect(socket->fileno, ip, port, socket->timeout); - if (ret == NINA_ERROR_TIMEOUT) { - // The socket is Not closed on timeout when calling functions that accept a timeout. - *_errno = MP_ETIMEDOUT; - return -1; - } else if (ret < 0) { - *_errno = ret; - network_ninaw10_socket_close(socket); + if (ret < 0) { + *_errno = -ret; + // Close socket if not a timeout error. + if (*_errno != MP_ETIMEDOUT) { + network_ninaw10_socket_close(socket); + } return -1; } return 0; @@ -438,14 +436,12 @@ STATIC int network_ninaw10_socket_connect(mod_network_socket_obj_t *socket, byte STATIC mp_uint_t network_ninaw10_socket_send(mod_network_socket_obj_t *socket, const byte *buf, mp_uint_t len, int *_errno) { int ret = nina_socket_send(socket->fileno, buf, len, socket->timeout); - if (ret == NINA_ERROR_TIMEOUT) { - // The socket is Not closed on timeout when calling functions that accept a timeout. - *_errno = MP_ETIMEDOUT; - return -1; - } else if (ret < 0) { - // Close the socket on any other errors. - *_errno = ret; - network_ninaw10_socket_close(socket); + if (ret < 0) { + *_errno = -ret; + // Close socket if not a timeout error. + if (*_errno != MP_ETIMEDOUT) { + network_ninaw10_socket_close(socket); + } return -1; } return ret; @@ -460,15 +456,12 @@ STATIC mp_uint_t network_ninaw10_socket_recv(mod_network_socket_obj_t *socket, b } else { ret = nina_socket_recv(socket->fileno, buf, len, socket->timeout); } - - if (ret == NINA_ERROR_TIMEOUT) { - // The socket is Not closed on timeout when calling functions that accept a timeout. - *_errno = MP_ETIMEDOUT; - return -1; - } else if (ret < 0) { - // Close the socket on any other errors. - *_errno = ret; - network_ninaw10_socket_close(socket); + if (ret < 0) { + *_errno = -ret; + // Close socket if not a timeout error. + if (*_errno != MP_ETIMEDOUT) { + network_ninaw10_socket_close(socket); + } return -1; } return ret; @@ -493,13 +486,12 @@ STATIC mp_uint_t network_ninaw10_socket_sendto(mod_network_socket_obj_t *socket, } int ret = nina_socket_sendto(socket->fileno, buf, len, ip, port, socket->timeout); - if (ret == NINA_ERROR_TIMEOUT) { - // The socket is Not closed on timeout when calling functions that accept a timeout. - *_errno = MP_ETIMEDOUT; - return -1; - } else if (ret < 0) { - *_errno = ret; - network_ninaw10_socket_close(socket); + if (ret < 0) { + *_errno = -ret; + // Close socket if not a timeout error. + if (*_errno != MP_ETIMEDOUT) { + network_ninaw10_socket_close(socket); + } return -1; } return ret; @@ -519,14 +511,12 @@ STATIC mp_uint_t network_ninaw10_socket_recvfrom(mod_network_socket_obj_t *socke } ret = nina_socket_recvfrom(socket->fileno, buf, len, ip, (uint16_t *)port, socket->timeout); } - if (ret == NINA_ERROR_TIMEOUT) { - // The socket is Not closed on timeout when calling functions that accept a timeout. - *_errno = MP_ETIMEDOUT; - return -1; - } else if (ret < 0) { - // Close the socket on any other errors. - *_errno = ret; - network_ninaw10_socket_close(socket); + if (ret < 0) { + *_errno = -ret; + // Close socket if not a timeout error. + if (*_errno != MP_ETIMEDOUT) { + network_ninaw10_socket_close(socket); + } return -1; } return ret;