diff --git a/wifiHD/src/ard_spi.c b/wifiHD/src/ard_spi.c index dddfc470c..1587b87a1 100644 --- a/wifiHD/src/ard_spi.c +++ b/wifiHD/src/ard_spi.c @@ -189,6 +189,13 @@ int getSock(void * _ttcp) return -1; } +void setMapSock(uint8_t sock, void* _ttcp) +{ + if (sock < MAX_SOCK_NUM) + mapSockTCP[sock]=_ttcp; + printk("Map [%d, %p]\n", sock, _ttcp); +} + void clearMapSockTcp(uint8_t sock) { if (sock < MAX_SOCK_NUM) @@ -197,7 +204,7 @@ void clearMapSockTcp(uint8_t sock) void initMapSockTcp() { - memset(mapSockTCP, 0, sizeof(void*)*MAX_SOCK_NUM); + memset(mapSockTCP, 0, sizeof(mapSockTCP)); } /** @@ -222,16 +229,16 @@ void showTTCPstatus() int i = 0; for (; iaddr, _ttcp->port); if (_ttcp->tpcb){ - printk("[tpcp]-Status:%d\n", _ttcp->tpcb->state); + printk("[tpcp-%p]-Status:%d\n", _ttcp->tpcb, _ttcp->tpcb->state); } if (_ttcp->lpcb){ - printk("[tlcp]-Status:%d\n", _ttcp->lpcb->state); + printk("[tlcp-%p]-Status:%d\n", _ttcp->lpcb, _ttcp->lpcb->state); } ard_tcp_print_stats(_ttcp); } @@ -594,6 +601,45 @@ void set_result_cmd(int err) extern int ttcp_start(struct ip_addr addr, uint16_t port, void *opaque, void *done_cb, int mode, uint16_t nbuf, uint16_t buflen, int udp, int verbose); + +int start_server_tcp(uint16_t port, uint8_t sock) +{ + struct ip_addr addr = { 0 }; + uint16_t buflen = 1024; + uint16_t nbuf = 1024; + wl_err_t err = WL_FAILURE; + +#ifdef _APP_DEBUG_ + int verbose = 1; +#else + int verbose = 0; +#endif + int udp = 0; + int mode = 1; //RECEIVE + void* _ttcp = NULL; + + if (sock >= MAX_SOCK_NUM) + return WIFI_SPI_ERR; + + if (_connected) + { + printk("Still connected...wait\n"); + return WIFI_SPI_ERR; + } + + if (ard_tcp_start(addr, port, NULL, NULL, mode, nbuf, buflen, udp, verbose, sock, &_ttcp) == 0) + { + INFO_SPI("Start Server [%d, %d] OK!\n", port, sock); + setMapSock(sock, _ttcp); + err = WL_SUCCESS; + }else{ + INFO_SPI("Start Server [%d, %d] FAILED!\n", port, sock); + clearMapSockTcp(sock); + } + return err; +} + + int start_server_tcp_cmd_cb(int numParam, char* buf, void* ctx) { wl_err_t err = WL_FAILURE; tParam* params = (tParam*) buf; @@ -601,30 +647,7 @@ int start_server_tcp_cmd_cb(int numParam, char* buf, void* ctx) { { GET_PARAM_NEXT(INT, params, port); GET_PARAM_NEXT(BYTE, params, sock); - - struct ip_addr addr = { 0 }; - uint16_t buflen = 1024; - uint16_t nbuf = 1024; -#ifdef _APP_DEBUG_ - int verbose = 1; -#else - int verbose = 0; -#endif - int udp = 0; - int mode = 1; //RECEIVE - void* _ttcp = NULL; - - if (sock >= MAX_SOCK_NUM) - return WIFI_SPI_ERR; - - INFO_SPI("Start Server [%d, %d]\n", port, sock); - if (ard_tcp_start(addr, port, NULL, NULL, mode, nbuf, buflen, udp, verbose, sock, &_ttcp) == 0) - { - if (sock < MAX_SOCK_NUM) - mapSockTCP[sock]=_ttcp; - INFO_SPI("Map [%d, %p]\n", sock, _ttcp); - err = WL_SUCCESS; - } + err = start_server_tcp(port, sock); } return (err==WL_SUCCESS) ? WIFI_SPI_ACK : WIFI_SPI_ERR; } @@ -655,15 +678,14 @@ int start_client_tcp_cmd_cb(int numParam, char* buf, void* ctx) { if (sock >= MAX_SOCK_NUM) return WIFI_SPI_ERR; - INFO_SPI("Start Client [0x%x, %d, %d]\n", addr, port, sock); if (ard_tcp_start((struct ip_addr)addr, port, NULL, NULL, mode, nbuf, buflen, udp, verbose, sock, &_ttcp) == 0) { - if (sock < MAX_SOCK_NUM) - mapSockTCP[sock]=_ttcp; - INFO_SPI("Map [%d, %p]\n", sock, _ttcp); + INFO_SPI("Start Client [0x%x, %d, %d] OK!\n", addr, port, sock); + setMapSock(sock, _ttcp); err = WL_SUCCESS; }else{ - mapSockTCP[sock]=0; + INFO_SPI("Start Client [0x%x, %d, %d] FAILED!\n", addr, port, sock); + clearMapSockTcp(sock); } } return (err==WL_SUCCESS) ? WIFI_SPI_ACK : WIFI_SPI_ERR; @@ -682,9 +704,8 @@ int stop_client_tcp_cmd_cb(int numParam, char* buf, void* ctx) { if (sock < MAX_SOCK_NUM) { - _ttcp = mapSockTCP[sock]; + _ttcp = getTTCP(sock); ard_tcp_stop(_ttcp); - mapSockTCP[sock]=0; err = WL_SUCCESS; } } @@ -1032,10 +1053,11 @@ cmd_spi_state_t get_state_tcp_cmd_cb(char* recv, char* reply, void* ctx, uint16_ uint8_t _state = CLOSED; if ((recv[3]==1)&&(recv[4]>=0)&&(recv[4]=0)&&(recv[4]=0)&&(recv[4] _BUFFERSIZE) { + if (receivedChars >= _BUFFERSIZE) { err = SPI_ERROR_OVERRUN_AND_MODE_FAULT; break; } @@ -1683,9 +1709,9 @@ int initSpi() #endif init_spi_cmds(); - memset(_receiveBuffer, 0, _BUFFERSIZE); - memset(buf, 0, CMD_MAX_LEN); - memset(reply, 0, REPLY_MAX_LEN); + memset(_receiveBuffer, 0, sizeof(_receiveBuffer)); + memset(buf, 0, sizeof(buf)); + memset(reply, 0, sizeof(reply)); initMapSockTcp(); diff --git a/wifiHD/src/ard_spi.h b/wifiHD/src/ard_spi.h index 9d5663ada..066a5cd63 100644 --- a/wifiHD/src/ard_spi.h +++ b/wifiHD/src/ard_spi.h @@ -56,18 +56,12 @@ void spi_poll(struct netif* netif); int spi_slaveReceive(volatile avr32_spi_t *spi); -cmd_state_t cmd_statSpi(int argc, char* argv[], void* ctx); - -cmd_state_t cmd_resetStatSpi(int argc, char* argv[], void* ctx); - -cmd_state_t cmd_gethostbyname(int argc, char* argv[], void* ctx); - -cmd_state_t cmd_setDnsServer(int argc, char* argv[], void* ctx); - void showTTCPstatus(); int getSock(void * _ttcp); void clearMapSockTcp(uint8_t sock); +int start_server_tcp(uint16_t port, uint8_t sock); + #endif /* ARD_SPI_H_ */ diff --git a/wifiHD/src/cmd_wl.c b/wifiHD/src/cmd_wl.c index d4f754f76..61634efa9 100644 --- a/wifiHD/src/cmd_wl.c +++ b/wifiHD/src/cmd_wl.c @@ -42,6 +42,7 @@ #include "lwip/netif.h" #include "lwip/dns.h" #include "debug.h" +#include "ard_spi.h" extern void showTTCPstatus(); @@ -368,6 +369,36 @@ cmd_setDnsServer(int argc, char* argv[], void* ctx) return CMD_DONE; } +/** + * + */ +cmd_state_t +cmd_startTcpSrv(int argc, char* argv[], void* ctx) +{ + const char *usage = "usage: startTcpSrv \n"; + + int port = 0; + int sock = 0; + + if (argc < 3) { + printk(usage); + return CMD_DONE; + } + + /* TCP port */ + port = atoi(argv[1]); + /* socket index */ + sock = atoi(argv[2]); + + printk("Start TCP server on port %d sock %d\n", port, sock); + if (start_server_tcp(port, sock) != -1) + { + printk("Start TCP server on port %d sock %d FAILED\n", port, sock); + } + return CMD_DONE; +} + + #endif diff --git a/wifiHD/src/cmd_wl.h b/wifiHD/src/cmd_wl.h index 5277aa2a6..3953b9508 100644 --- a/wifiHD/src/cmd_wl.h +++ b/wifiHD/src/cmd_wl.h @@ -50,6 +50,11 @@ cmd_state_t cmd_setpass(int argc, char* argv[], void* ctx); cmd_state_t cmd_delpass(int argc, char* argv[], void* ctx); cmd_state_t cmd_debug(int argc, char* argv[], void* ctx); cmd_state_t cmd_debug_toggle(int argc, char* argv[], void* ctx); +cmd_state_t cmd_statSpi(int argc, char* argv[], void* ctx); +cmd_state_t cmd_resetStatSpi(int argc, char* argv[], void* ctx); +cmd_state_t cmd_gethostbyname(int argc, char* argv[], void* ctx); +cmd_state_t cmd_setDnsServer(int argc, char* argv[], void* ctx); +cmd_state_t cmd_startTcpSrv(int argc, char* argv[], void* ctx); #ifdef WFE_6_12 cmd_state_t cmd_ibss(int argc, char* argv[], void* ctx); #endif diff --git a/wifiHD/src/lwipopts.h b/wifiHD/src/lwipopts.h index 4b3d6aabe..426593958 100644 --- a/wifiHD/src/lwipopts.h +++ b/wifiHD/src/lwipopts.h @@ -424,7 +424,7 @@ #undef DHCP_DOES_ARP_CHECK #if 0 -//#define LWIP_DEBUG 1 +#define LWIP_DEBUG 1 //#define NETIF_DEBUG LWIP_DBG_ON //#define DHCP_DEBUG LWIP_DBG_ON //#define ICMP_DEBUG LWIP_DBG_ON @@ -434,8 +434,8 @@ //#define TCP_CWND_DEBUG LWIP_DBG_ON //#define ETHARP_DEBUG LWIP_DBG_ON //#define PBUF_DEBUG LWIP_DBG_ON -//#define TCP_INPUT_DEBUG LWIP_DBG_ON -//#define TCP_OUTPUT_DEBUG LWIP_DBG_ON +#define TCP_INPUT_DEBUG LWIP_DBG_ON +#define TCP_OUTPUT_DEBUG LWIP_DBG_ON #endif #define ETH_PAD_SIZE WL_HEADER_SIZE /* size of wifiengine header */ diff --git a/wifiHD/src/main.c b/wifiHD/src/main.c index f7759d8d3..457bdc630 100644 --- a/wifiHD/src/main.c +++ b/wifiHD/src/main.c @@ -302,6 +302,7 @@ void initShell() #ifdef _DNS_CMD_ console_add_cmd("getHost", cmd_gethostbyname, NULL); console_add_cmd("setDNS", cmd_setDnsServer, NULL); + console_add_cmd("startTcpSrv", cmd_startTcpSrv, NULL); #endif }