Commit 38e984a0 authored by Deomid Ryabkov's avatar Deomid Ryabkov Committed by Cesanta Bot

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
parent 09e42547
...@@ -13302,7 +13302,7 @@ const char *inet_ntop(int af, const void *src, char *dst, socklen_t size) { ...@@ -13302,7 +13302,7 @@ const char *inet_ntop(int af, const void *src, char *dst, socklen_t size) {
int res; int res;
struct in_addr *in = (struct in_addr *) src; struct in_addr *in = (struct in_addr *) src;
if (af != AF_INET) { if (af != AF_INET) {
errno = EAFNOSUPPORT; errno = ENOTSUP;
return NULL; return NULL;
} }
res = snprintf(dst, size, "%lu.%lu.%lu.%lu", SL_IPV4_BYTE(in->s_addr, 0), 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) { ...@@ -13320,7 +13320,7 @@ int inet_pton(int af, const char *src, void *dst) {
uint32_t a0, a1, a2, a3; uint32_t a0, a1, a2, a3;
uint8_t *db = (uint8_t *) dst; uint8_t *db = (uint8_t *) dst;
if (af != AF_INET) { if (af != AF_INET) {
errno = EAFNOSUPPORT; errno = ENOTSUP;
return 0; return 0;
} }
if (sscanf(src, "%lu.%lu.%lu.%lu", &a0, &a1, &a2, &a3) != 4) { 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); ...@@ -13442,12 +13442,16 @@ int sl_set_ssl_opts(struct mg_connection *nc);
void mg_set_non_blocking_mode(sock_t sock) { void mg_set_non_blocking_mode(sock_t sock) {
SlSockNonblocking_t opt; SlSockNonblocking_t opt;
#if SL_MAJOR_VERSION_NUM < 2
opt.NonblockingEnabled = 1; opt.NonblockingEnabled = 1;
#else
opt.NonBlockingEnabled = 1;
#endif
sl_SetSockOpt(sock, SL_SOL_SOCKET, SL_SO_NONBLOCKING, &opt, sizeof(opt)); sl_SetSockOpt(sock, SL_SOL_SOCKET, SL_SO_NONBLOCKING, &opt, sizeof(opt));
} }
static int mg_is_error(int n) { 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, 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) { ...@@ -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)); 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_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); mg_if_connect_cb(nc, nc->err);
} else { } else {
/* In SimpleLink, to get status of non-blocking connect() we need to wait /* 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) { ...@@ -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) { if (fd_flags & _MG_F_FD_CAN_WRITE) {
nc->err = sl_Connect(nc->sock, &nc->sa.sa, sizeof(nc->sa.sin)); nc->err = sl_Connect(nc->sock, &nc->sa.sa, sizeof(nc->sa.sin));
DBG(("%p conn res=%d", nc, nc->err)); 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. */ /* TODO(rojer): Provide API to set the date for verification. */
nc->err == SL_ESECDATEERROR) { nc->err == SL_ERROR_BSD_ESECDATEERROR) {
nc->err = 0; nc->err = 0;
} }
if (nc->flags & MG_F_SSL && 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) { ...@@ -13733,9 +13737,9 @@ time_t mg_sl_if_poll(struct mg_iface *iface, int timeout_ms) {
sock_t max_fd = INVALID_SOCKET; sock_t max_fd = INVALID_SOCKET;
int num_fds, num_ev = 0, num_timers = 0; int num_fds, num_ev = 0, num_timers = 0;
SL_FD_ZERO(&read_set); SL_SOCKET_FD_ZERO(&read_set);
SL_FD_ZERO(&write_set); SL_SOCKET_FD_ZERO(&write_set);
SL_FD_ZERO(&err_set); SL_SOCKET_FD_ZERO(&err_set);
/* /*
* Note: it is ok to have connections with sock == INVALID_SOCKET in the list, * 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) { ...@@ -13751,14 +13755,14 @@ time_t mg_sl_if_poll(struct mg_iface *iface, int timeout_ms) {
if (!(nc->flags & MG_F_WANT_WRITE) && if (!(nc->flags & MG_F_WANT_WRITE) &&
nc->recv_mbuf.len < nc->recv_mbuf_limit && nc->recv_mbuf.len < nc->recv_mbuf_limit &&
(!(nc->flags & MG_F_UDP) || nc->listener == NULL)) { (!(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 (max_fd == INVALID_SOCKET || nc->sock > max_fd) max_fd = nc->sock;
} }
if (((nc->flags & MG_F_CONNECTING) && !(nc->flags & MG_F_WANT_READ)) || if (((nc->flags & MG_F_CONNECTING) && !(nc->flags & MG_F_WANT_READ)) ||
(nc->send_mbuf.len > 0 && !(nc->flags & MG_F_CONNECTING))) { (nc->send_mbuf.len > 0 && !(nc->flags & MG_F_CONNECTING))) {
SL_FD_SET(nc->sock, &write_set); SL_SOCKET_FD_SET(nc->sock, &write_set);
SL_FD_SET(nc->sock, &err_set); SL_SOCKET_FD_SET(nc->sock, &err_set);
if (max_fd == INVALID_SOCKET || nc->sock > max_fd) max_fd = nc->sock; 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) { ...@@ -13799,12 +13803,13 @@ time_t mg_sl_if_poll(struct mg_iface *iface, int timeout_ms) {
if (nc->sock != INVALID_SOCKET) { if (nc->sock != INVALID_SOCKET) {
if (num_ev > 0) { if (num_ev > 0) {
fd_flags = 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) (!(nc->flags & MG_F_UDP) || nc->listener == NULL)
? _MG_F_FD_CAN_READ ? _MG_F_FD_CAN_READ
: 0) | : 0) |
(SL_FD_ISSET(nc->sock, &write_set) ? _MG_F_FD_CAN_WRITE : 0) | (SL_SOCKET_FD_ISSET(nc->sock, &write_set) ? _MG_F_FD_CAN_WRITE
(SL_FD_ISSET(nc->sock, &err_set) ? _MG_F_FD_ERROR : 0); : 0) |
(SL_SOCKET_FD_ISSET(nc->sock, &err_set) ? _MG_F_FD_ERROR : 0);
} }
/* SimpleLink does not report UDP sockets as writable. */ /* SimpleLink does not report UDP sockets as writable. */
if (nc->flags & MG_F_UDP && nc->send_mbuf.len > 0) { if (nc->flags & MG_F_UDP && nc->send_mbuf.len > 0) {
...@@ -14087,13 +14092,14 @@ int sl_set_ssl_opts(struct mg_connection *nc) { ...@@ -14087,13 +14092,14 @@ int sl_set_ssl_opts(struct mg_connection *nc) {
} }
if (ctx->ssl_server_name != NULL) { if (ctx->ssl_server_name != NULL) {
err = sl_SetSockOpt(nc->sock, SL_SOL_SOCKET, 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)); ctx->ssl_server_name, strlen(ctx->ssl_server_name));
DBG(("DOMAIN_NAME_VERIFICATION %s -> %d", ctx->ssl_server_name, err)); DBG(("DOMAIN_NAME_VERIFICATION %s -> %d", ctx->ssl_server_name, err));
/* Domain name verificationw as added in a NWP service pack, older /* 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. */ * 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; return 0;
......
...@@ -66,8 +66,10 @@ ...@@ -66,8 +66,10 @@
#if defined(TARGET_IS_MSP432P4XX) || defined(__MSP432P401R__) #if defined(TARGET_IS_MSP432P4XX) || defined(__MSP432P401R__)
#define CS_PLATFORM CS_P_MSP432 #define CS_PLATFORM CS_P_MSP432
#elif defined(cc3200) #elif defined(cc3200) || defined(TARGET_IS_CC3200)
#define CS_PLATFORM CS_P_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__) #elif defined(__unix__) || defined(__APPLE__)
#define CS_PLATFORM CS_P_UNIX #define CS_PLATFORM CS_P_UNIX
#elif defined(WINCE) #elif defined(WINCE)
...@@ -1103,9 +1105,10 @@ int gettimeofday(struct timeval *tp, void *tzp); ...@@ -1103,9 +1105,10 @@ int gettimeofday(struct timeval *tp, void *tzp);
#ifndef CS_COMMON_PLATFORMS_SIMPLELINK_CS_SIMPLELINK_H_ #ifndef CS_COMMON_PLATFORMS_SIMPLELINK_CS_SIMPLELINK_H_
#define 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 simplelink.h is already included, all bets are off. */
#if defined(MG_NET_IF) && MG_NET_IF == MG_NET_IF_SIMPLELINK && \ #if !defined(__SIMPLELINK_H__)
!defined(__SIMPLELINK_H__)
#include <stdbool.h> #include <stdbool.h>
...@@ -1122,6 +1125,7 @@ int gettimeofday(struct timeval *tp, void *tzp); ...@@ -1122,6 +1125,7 @@ int gettimeofday(struct timeval *tp, void *tzp);
#if CS_PLATFORM == CS_P_CC3220 #if CS_PLATFORM == CS_P_CC3220
#include <ti/drivers/net/wifi/porting/user.h> #include <ti/drivers/net/wifi/porting/user.h>
#include <ti/drivers/net/wifi/simplelink.h> #include <ti/drivers/net/wifi/simplelink.h>
#include <ti/drivers/net/wifi/sl_socket.h>
#include <ti/drivers/net/wifi/netapp.h> #include <ti/drivers/net/wifi/netapp.h>
#else #else
/* We want to disable SL_INC_STD_BSD_API_NAMING, so we include user.h ourselves /* 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); ...@@ -1202,7 +1206,22 @@ int sl_set_ssl_opts(struct mg_connection *nc);
} }
#endif #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_ */ #endif /* CS_COMMON_PLATFORMS_SIMPLELINK_CS_SIMPLELINK_H_ */
#ifdef MG_MODULE_LINES #ifdef MG_MODULE_LINES
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment