@@ -189,6 +189,13 @@ int getSock(void * _ttcp)
189189 return -1 ;
190190}
191191
192+ void setMapSock (uint8_t sock , void * _ttcp )
193+ {
194+ if (sock < MAX_SOCK_NUM )
195+ mapSockTCP [sock ]= _ttcp ;
196+ printk ("Map [%d, %p]\n" , sock , _ttcp );
197+ }
198+
192199void clearMapSockTcp (uint8_t sock )
193200{
194201 if (sock < MAX_SOCK_NUM )
@@ -197,7 +204,7 @@ void clearMapSockTcp(uint8_t sock)
197204
198205void initMapSockTcp ()
199206{
200- memset (mapSockTCP , 0 , sizeof (void * ) * MAX_SOCK_NUM );
207+ memset (mapSockTCP , 0 , sizeof (mapSockTCP ) );
201208}
202209
203210/**
@@ -222,16 +229,16 @@ void showTTCPstatus()
222229 int i = 0 ;
223230 for (; i < MAX_SOCK_NUM ; i ++ )
224231 {
225- void * p = mapSockTCP [ i ] ;
232+ void * p = getTTCP ( i ) ;
226233 if (p )
227234 {
228235 ttcp_t * _ttcp = (ttcp_t * )p ;
229236 printk ("Socket n.:%d addr:0x%x port:%d\n" , i , _ttcp -> addr , _ttcp -> port );
230237 if (_ttcp -> tpcb ){
231- printk ("[tpcp]-Status:%d\n" , _ttcp -> tpcb -> state );
238+ printk ("[tpcp-%p ]-Status:%d\n" , _ttcp -> tpcb , _ttcp -> tpcb -> state );
232239 }
233240 if (_ttcp -> lpcb ){
234- printk ("[tlcp]-Status:%d\n" , _ttcp -> lpcb -> state );
241+ printk ("[tlcp-%p ]-Status:%d\n" , _ttcp -> lpcb , _ttcp -> lpcb -> state );
235242 }
236243 ard_tcp_print_stats (_ttcp );
237244 }
@@ -594,37 +601,53 @@ void set_result_cmd(int err)
594601extern int ttcp_start (struct ip_addr addr , uint16_t port , void * opaque ,
595602 void * done_cb , int mode , uint16_t nbuf , uint16_t buflen , int udp , int verbose );
596603
604+
605+ int start_server_tcp (uint16_t port , uint8_t sock )
606+ {
607+ struct ip_addr addr = { 0 };
608+ uint16_t buflen = 1024 ;
609+ uint16_t nbuf = 1024 ;
610+ wl_err_t err = WL_FAILURE ;
611+
612+ #ifdef _APP_DEBUG_
613+ int verbose = 1 ;
614+ #else
615+ int verbose = 0 ;
616+ #endif
617+ int udp = 0 ;
618+ int mode = 1 ; //RECEIVE
619+ void * _ttcp = NULL ;
620+
621+ if (sock >= MAX_SOCK_NUM )
622+ return WIFI_SPI_ERR ;
623+
624+ if (_connected )
625+ {
626+ printk ("Still connected...wait\n" );
627+ return WIFI_SPI_ERR ;
628+ }
629+
630+ if (ard_tcp_start (addr , port , NULL , NULL , mode , nbuf , buflen , udp , verbose , sock , & _ttcp ) == 0 )
631+ {
632+ INFO_SPI ("Start Server [%d, %d] OK!\n" , port , sock );
633+ setMapSock (sock , _ttcp );
634+ err = WL_SUCCESS ;
635+ }else {
636+ INFO_SPI ("Start Server [%d, %d] FAILED!\n" , port , sock );
637+ clearMapSockTcp (sock );
638+ }
639+ return err ;
640+ }
641+
642+
597643int start_server_tcp_cmd_cb (int numParam , char * buf , void * ctx ) {
598644 wl_err_t err = WL_FAILURE ;
599645 tParam * params = (tParam * ) buf ;
600646 if (numParam == 2 )
601647 {
602648 GET_PARAM_NEXT (INT , params , port );
603649 GET_PARAM_NEXT (BYTE , params , sock );
604-
605- struct ip_addr addr = { 0 };
606- uint16_t buflen = 1024 ;
607- uint16_t nbuf = 1024 ;
608- #ifdef _APP_DEBUG_
609- int verbose = 1 ;
610- #else
611- int verbose = 0 ;
612- #endif
613- int udp = 0 ;
614- int mode = 1 ; //RECEIVE
615- void * _ttcp = NULL ;
616-
617- if (sock >= MAX_SOCK_NUM )
618- return WIFI_SPI_ERR ;
619-
620- INFO_SPI ("Start Server [%d, %d]\n" , port , sock );
621- if (ard_tcp_start (addr , port , NULL , NULL , mode , nbuf , buflen , udp , verbose , sock , & _ttcp ) == 0 )
622- {
623- if (sock < MAX_SOCK_NUM )
624- mapSockTCP [sock ]= _ttcp ;
625- INFO_SPI ("Map [%d, %p]\n" , sock , _ttcp );
626- err = WL_SUCCESS ;
627- }
650+ err = start_server_tcp (port , sock );
628651 }
629652 return (err == WL_SUCCESS ) ? WIFI_SPI_ACK : WIFI_SPI_ERR ;
630653}
@@ -655,15 +678,14 @@ int start_client_tcp_cmd_cb(int numParam, char* buf, void* ctx) {
655678 if (sock >= MAX_SOCK_NUM )
656679 return WIFI_SPI_ERR ;
657680
658- INFO_SPI ("Start Client [0x%x, %d, %d]\n" , addr , port , sock );
659681 if (ard_tcp_start ((struct ip_addr )addr , port , NULL , NULL , mode , nbuf , buflen , udp , verbose , sock , & _ttcp ) == 0 )
660682 {
661- if (sock < MAX_SOCK_NUM )
662- mapSockTCP [sock ]= _ttcp ;
663- INFO_SPI ("Map [%d, %p]\n" , sock , _ttcp );
683+ INFO_SPI ("Start Client [0x%x, %d, %d] OK!\n" , addr , port , sock );
684+ setMapSock (sock , _ttcp );
664685 err = WL_SUCCESS ;
665686 }else {
666- mapSockTCP [sock ]= 0 ;
687+ INFO_SPI ("Start Client [0x%x, %d, %d] FAILED!\n" , addr , port , sock );
688+ clearMapSockTcp (sock );
667689 }
668690 }
669691 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) {
682704
683705 if (sock < MAX_SOCK_NUM )
684706 {
685- _ttcp = mapSockTCP [ sock ] ;
707+ _ttcp = getTTCP ( sock ) ;
686708 ard_tcp_stop (_ttcp );
687- mapSockTCP [sock ]= 0 ;
688709 err = WL_SUCCESS ;
689710 }
690711 }
@@ -1032,10 +1053,11 @@ cmd_spi_state_t get_state_tcp_cmd_cb(char* recv, char* reply, void* ctx, uint16_
10321053 uint8_t _state = CLOSED ;
10331054 if ((recv [3 ]== 1 )&& (recv [4 ]>=0 )&& (recv [4 ]< MAX_SOCK_NUM ))
10341055 {
1035- _state = getStateTcp (mapSockTCP [( uint8_t )recv [4 ]] , 0 );
1056+ _state = getStateTcp (getTTCP (( uint8_t )recv [4 ]) , 0 );
10361057 }
10371058 PUT_DATA_BYTE (_state , reply , 3 );
10381059 END_HEADER_REPLY (reply , 5 , * count );
1060+ INFO_SPI ("state:%d\n" , _state );
10391061
10401062 return SPI_CMD_DONE ;
10411063}
@@ -1049,7 +1071,7 @@ cmd_spi_state_t get_client_state_tcp_cmd_cb(char* recv, char* reply, void* ctx,
10491071 uint8_t _state = CLOSED ;
10501072 if ((recv [3 ]== 1 )&& (recv [4 ]>=0 )&& (recv [4 ]< MAX_SOCK_NUM ))
10511073 {
1052- void * p = mapSockTCP [( uint8_t )recv [4 ]] ;
1074+ void * p = getTTCP (( uint8_t )recv [4 ]) ;
10531075 // get if we are in server or Transmit mode (0)
10541076 if (getModeTcp (p ) == TTCP_MODE_TRANSMIT )
10551077 {
@@ -1067,6 +1089,7 @@ cmd_spi_state_t get_client_state_tcp_cmd_cb(char* recv, char* reply, void* ctx,
10671089 }
10681090 PUT_DATA_BYTE (_state , reply , 3 );
10691091 END_HEADER_REPLY (reply , 5 , * count );
1092+ INFO_SPI ("state:%d\n" , _state );
10701093
10711094 return SPI_CMD_DONE ;
10721095}
@@ -1084,6 +1107,9 @@ cmd_spi_state_t avail_data_tcp_cmd_cb(char* recv, char* reply, void* ctx, uint16
10841107 }
10851108 PUT_DATA_BYTE (dataAvail , reply , 3 );
10861109 END_HEADER_REPLY (reply , 5 , * count );
1110+
1111+ INFO_SPI ("dataAvail:%d\n" , dataAvail );
1112+
10871113 return SPI_CMD_DONE ;
10881114}
10891115
@@ -1128,7 +1154,7 @@ cmd_spi_state_t data_sent_tcp_cmd_cb(char* recv, char* reply, void* ctx, uint16_
11281154 uint8_t dataSent = 0 ;
11291155 if ((recv [3 ]== 1 )&& (recv [4 ]>=0 )&& (recv [4 ]< MAX_SOCK_NUM ))
11301156 {
1131- dataSent = isDataSent (mapSockTCP [( uint8_t )recv [4 ]] );
1157+ dataSent = isDataSent (getTTCP (( uint8_t )recv [4 ]) );
11321158 }
11331159 PUT_DATA_BYTE (dataSent , reply , 3 );
11341160 END_HEADER_REPLY (reply , 5 , * count );
@@ -1509,7 +1535,7 @@ inline int spi_slaveReceiveInt(volatile avr32_spi_t *spi, bool startRecvd)
15091535 }
15101536
15111537 /* break on buffer overflow */
1512- if (receivedChars > _BUFFERSIZE ) {
1538+ if (receivedChars >= _BUFFERSIZE ) {
15131539 err = SPI_ERROR_OVERRUN_AND_MODE_FAULT ;
15141540 break ;
15151541 }
@@ -1683,9 +1709,9 @@ int initSpi()
16831709#endif
16841710 init_spi_cmds ();
16851711
1686- memset (_receiveBuffer , 0 , _BUFFERSIZE );
1687- memset (buf , 0 , CMD_MAX_LEN );
1688- memset (reply , 0 , REPLY_MAX_LEN );
1712+ memset (_receiveBuffer , 0 , sizeof ( _receiveBuffer ) );
1713+ memset (buf , 0 , sizeof ( buf ) );
1714+ memset (reply , 0 , sizeof ( reply ) );
16891715
16901716 initMapSockTcp ();
16911717
0 commit comments