From 38e984a0085832e6c402275b7cb92314c48e4d2a Mon Sep 17 00:00:00 2001 From: Deomid Ryabkov <rojer@cesanta.com> Date: Sat, 26 Aug 2017 18:02:08 +0100 Subject: [PATCH] CC3220 first steps Achievement unlocked: CC3220 port prints a boot banner. Then locks up. Included in this PR is refactoring to pull out common parts to be shared with CC3200. PUBLISHED_FROM=5fb9d9a00bb9ce7f63dde20bc1876076b76d5257 --- mongoose.c | 42 ++++++++++++++++++++++++------------------ mongoose.h | 27 +++++++++++++++++++++++---- 2 files changed, 47 insertions(+), 22 deletions(-) diff --git a/mongoose.c b/mongoose.c index eac8391dc..1b54cf819 100644 --- a/mongoose.c +++ b/mongoose.c @@ -13302,7 +13302,7 @@ const char *inet_ntop(int af, const void *src, char *dst, socklen_t size) { int res; struct in_addr *in = (struct in_addr *) src; if (af != AF_INET) { - errno = EAFNOSUPPORT; + errno = ENOTSUP; return NULL; } res = snprintf(dst, size, "%lu.%lu.%lu.%lu", SL_IPV4_BYTE(in->s_addr, 0), @@ -13320,7 +13320,7 @@ int inet_pton(int af, const char *src, void *dst) { uint32_t a0, a1, a2, a3; uint8_t *db = (uint8_t *) dst; if (af != AF_INET) { - errno = EAFNOSUPPORT; + errno = ENOTSUP; return 0; } if (sscanf(src, "%lu.%lu.%lu.%lu", &a0, &a1, &a2, &a3) != 4) { @@ -13442,12 +13442,16 @@ int sl_set_ssl_opts(struct mg_connection *nc); void mg_set_non_blocking_mode(sock_t sock) { SlSockNonblocking_t opt; +#if SL_MAJOR_VERSION_NUM < 2 opt.NonblockingEnabled = 1; +#else + opt.NonBlockingEnabled = 1; +#endif sl_SetSockOpt(sock, SL_SOL_SOCKET, SL_SO_NONBLOCKING, &opt, sizeof(opt)); } static int mg_is_error(int n) { - return (n < 0 && n != SL_EALREADY && n != SL_EAGAIN); + return (n < 0 && n != SL_ERROR_BSD_EALREADY && n != SL_ERROR_BSD_EAGAIN); } void mg_sl_if_connect_tcp(struct mg_connection *nc, @@ -13648,7 +13652,7 @@ void mg_mgr_handle_conn(struct mg_connection *nc, int fd_flags, double now) { fd_flags, nc->flags, (int) nc->recv_mbuf.len, (int) nc->send_mbuf.len)); if (nc->flags & MG_F_CONNECTING) { - if (nc->flags & MG_F_UDP || nc->err != SL_EALREADY) { + if (nc->flags & MG_F_UDP || nc->err != SL_ERROR_BSD_EALREADY) { mg_if_connect_cb(nc, nc->err); } else { /* In SimpleLink, to get status of non-blocking connect() we need to wait @@ -13657,9 +13661,9 @@ void mg_mgr_handle_conn(struct mg_connection *nc, int fd_flags, double now) { if (fd_flags & _MG_F_FD_CAN_WRITE) { nc->err = sl_Connect(nc->sock, &nc->sa.sa, sizeof(nc->sa.sin)); DBG(("%p conn res=%d", nc, nc->err)); - if (nc->err == SL_ESECSNOVERIFY || + if (nc->err == SL_ERROR_BSD_ESECSNOVERIFY || /* TODO(rojer): Provide API to set the date for verification. */ - nc->err == SL_ESECDATEERROR) { + nc->err == SL_ERROR_BSD_ESECDATEERROR) { nc->err = 0; } if (nc->flags & MG_F_SSL && nc->err == 0) { @@ -13733,9 +13737,9 @@ time_t mg_sl_if_poll(struct mg_iface *iface, int timeout_ms) { sock_t max_fd = INVALID_SOCKET; int num_fds, num_ev = 0, num_timers = 0; - SL_FD_ZERO(&read_set); - SL_FD_ZERO(&write_set); - SL_FD_ZERO(&err_set); + SL_SOCKET_FD_ZERO(&read_set); + SL_SOCKET_FD_ZERO(&write_set); + SL_SOCKET_FD_ZERO(&err_set); /* * Note: it is ok to have connections with sock == INVALID_SOCKET in the list, @@ -13751,14 +13755,14 @@ time_t mg_sl_if_poll(struct mg_iface *iface, int timeout_ms) { if (!(nc->flags & MG_F_WANT_WRITE) && nc->recv_mbuf.len < nc->recv_mbuf_limit && (!(nc->flags & MG_F_UDP) || nc->listener == NULL)) { - SL_FD_SET(nc->sock, &read_set); + SL_SOCKET_FD_SET(nc->sock, &read_set); if (max_fd == INVALID_SOCKET || nc->sock > max_fd) max_fd = nc->sock; } if (((nc->flags & MG_F_CONNECTING) && !(nc->flags & MG_F_WANT_READ)) || (nc->send_mbuf.len > 0 && !(nc->flags & MG_F_CONNECTING))) { - SL_FD_SET(nc->sock, &write_set); - SL_FD_SET(nc->sock, &err_set); + SL_SOCKET_FD_SET(nc->sock, &write_set); + SL_SOCKET_FD_SET(nc->sock, &err_set); if (max_fd == INVALID_SOCKET || nc->sock > max_fd) max_fd = nc->sock; } } @@ -13799,12 +13803,13 @@ time_t mg_sl_if_poll(struct mg_iface *iface, int timeout_ms) { if (nc->sock != INVALID_SOCKET) { if (num_ev > 0) { fd_flags = - (SL_FD_ISSET(nc->sock, &read_set) && + (SL_SOCKET_FD_ISSET(nc->sock, &read_set) && (!(nc->flags & MG_F_UDP) || nc->listener == NULL) ? _MG_F_FD_CAN_READ : 0) | - (SL_FD_ISSET(nc->sock, &write_set) ? _MG_F_FD_CAN_WRITE : 0) | - (SL_FD_ISSET(nc->sock, &err_set) ? _MG_F_FD_ERROR : 0); + (SL_SOCKET_FD_ISSET(nc->sock, &write_set) ? _MG_F_FD_CAN_WRITE + : 0) | + (SL_SOCKET_FD_ISSET(nc->sock, &err_set) ? _MG_F_FD_ERROR : 0); } /* SimpleLink does not report UDP sockets as writable. */ if (nc->flags & MG_F_UDP && nc->send_mbuf.len > 0) { @@ -14087,13 +14092,14 @@ int sl_set_ssl_opts(struct mg_connection *nc) { } if (ctx->ssl_server_name != NULL) { err = sl_SetSockOpt(nc->sock, SL_SOL_SOCKET, - SO_SECURE_DOMAIN_NAME_VERIFICATION, + SL_SO_SECURE_DOMAIN_NAME_VERIFICATION, ctx->ssl_server_name, strlen(ctx->ssl_server_name)); DBG(("DOMAIN_NAME_VERIFICATION %s -> %d", ctx->ssl_server_name, err)); /* Domain name verificationw as added in a NWP service pack, older - * versions return SL_ENOPROTOOPT. There isn't much we can do about it, + * versions return SL_ERROR_BSD_ENOPROTOOPT. There isn't much we can do + * about it, * so we ignore the error. */ - if (err != 0 && err != SL_ENOPROTOOPT) return err; + if (err != 0 && err != SL_ERROR_BSD_ENOPROTOOPT) return err; } } return 0; diff --git a/mongoose.h b/mongoose.h index a7689ba6c..daae6ec04 100644 --- a/mongoose.h +++ b/mongoose.h @@ -66,8 +66,10 @@ #if defined(TARGET_IS_MSP432P4XX) || defined(__MSP432P401R__) #define CS_PLATFORM CS_P_MSP432 -#elif defined(cc3200) +#elif defined(cc3200) || defined(TARGET_IS_CC3200) #define CS_PLATFORM CS_P_CC3200 +#elif defined(cc3220) || defined(TARGET_IS_CC3220) +#define CS_PLATFORM CS_P_CC3220 #elif defined(__unix__) || defined(__APPLE__) #define CS_PLATFORM CS_P_UNIX #elif defined(WINCE) @@ -1103,9 +1105,10 @@ int gettimeofday(struct timeval *tp, void *tzp); #ifndef CS_COMMON_PLATFORMS_SIMPLELINK_CS_SIMPLELINK_H_ #define CS_COMMON_PLATFORMS_SIMPLELINK_CS_SIMPLELINK_H_ +#if defined(MG_NET_IF) && MG_NET_IF == MG_NET_IF_SIMPLELINK + /* If simplelink.h is already included, all bets are off. */ -#if defined(MG_NET_IF) && MG_NET_IF == MG_NET_IF_SIMPLELINK && \ - !defined(__SIMPLELINK_H__) +#if !defined(__SIMPLELINK_H__) #include <stdbool.h> @@ -1122,6 +1125,7 @@ int gettimeofday(struct timeval *tp, void *tzp); #if CS_PLATFORM == CS_P_CC3220 #include <ti/drivers/net/wifi/porting/user.h> #include <ti/drivers/net/wifi/simplelink.h> +#include <ti/drivers/net/wifi/sl_socket.h> #include <ti/drivers/net/wifi/netapp.h> #else /* We want to disable SL_INC_STD_BSD_API_NAMING, so we include user.h ourselves @@ -1202,7 +1206,22 @@ int sl_set_ssl_opts(struct mg_connection *nc); } #endif -#endif /* MG_NET_IF == MG_NET_IF_SIMPLELINK && !defined(__SIMPLELINK_H__) */ +#endif /* !defined(__SIMPLELINK_H__) */ + +/* COmpatibility with older versions of SimpleLink */ +#if SL_MAJOR_VERSION_NUM < 2 +#define SL_ERROR_BSD_EAGAIN SL_EAGAIN +#define SL_ERROR_BSD_EALREADY SL_EALREADY +#define SL_ERROR_BSD_ENOPROTOOPT SL_ENOPROTOOPT +#define SL_ERROR_BSD_ESECDATEERROR SL_ESECDATEERROR +#define SL_ERROR_BSD_ESECSNOVERIFY SL_ESECSNOVERIFY +#define SL_SOCKET_FD_ZERO SL_FD_ZERO +#define SL_SOCKET_FD_SET SL_FD_SET +#define SL_SOCKET_FD_ISSET SL_FD_ISSET +#define SL_SO_SECURE_DOMAIN_NAME_VERIFICATION SO_SECURE_DOMAIN_NAME_VERIFICATION +#endif + +#endif /* MG_NET_IF == MG_NET_IF_SIMPLELINK */ #endif /* CS_COMMON_PLATFORMS_SIMPLELINK_CS_SIMPLELINK_H_ */ #ifdef MG_MODULE_LINES -- GitLab