iowfehu;gdbjwHJAOPIHO?L

Fork of X_NUCLEO_IDW01M1 by ST

Files at this revision

API Documentation at this revision

Comitter:
mridup
Date:
Thu May 12 07:36:13 2016 +0000
Parent:
7:0fdd186a7d90
Child:
9:d2dfbf8e7f49
Commit message:
support 2048B sock write, sock_write returns no. of bytes written, delay of 10ms in sock-recv.

Changed in this revision

SPWFInterface.cpp Show annotated file Show diff for this revision Revisions of this file
Spwf/inc/wifi_driver.h Show annotated file Show diff for this revision Revisions of this file
Spwf/inc/wifi_interface.h Show annotated file Show diff for this revision Revisions of this file
Spwf/wifi_driver.c Show annotated file Show diff for this revision Revisions of this file
Spwf/wifi_interface.c Show annotated file Show diff for this revision Revisions of this file
Spwf/wifi_module.c Show annotated file Show diff for this revision Revisions of this file
Spwf_API/SpwfSADevice.cpp Show annotated file Show diff for this revision Revisions of this file
Spwf_API/SpwfSADevice.h Show annotated file Show diff for this revision Revisions of this file
Spwf_API/utils/ItfTranslator.cpp Show annotated file Show diff for this revision Revisions of this file
Spwf_API/utils/ItfTranslator.h Show annotated file Show diff for this revision Revisions of this file
--- a/SPWFInterface.cpp	Wed May 11 06:12:16 2016 +0000
+++ b/SPWFInterface.cpp	Thu May 12 07:36:13 2016 +0000
@@ -279,7 +279,6 @@
     struct spwf_socket *socket = (struct spwf_socket *)handle;
     int32_t recv;
     
-    if(!socket->connected) return NSAPI_ERROR_NO_SOCKET;
     _spwf.setTimeout(SPWF_RECV_TIMEOUT);
     
     //CHECK:Receive for both Client and Server Sockets same?
--- a/Spwf/inc/wifi_driver.h	Wed May 11 06:12:16 2016 +0000
+++ b/Spwf/inc/wifi_driver.h	Thu May 12 07:36:13 2016 +0000
@@ -15,11 +15,12 @@
 extern wifi_bool WiFi_Enabled;
 extern wifi_bool Standby_Enabled;
 extern wifi_bool Deep_Sleep_Enabled;
+extern int write_size;
 extern uint8_t WiFi_AT_Cmd_Buff[];
 
 extern void callSpwfSADevice_init(void* object);
 extern char callSpwfSADevice_getChar(void* object);
-extern void callSpwfSADevice_write(void* object, const char * cmd, uint16_t size);
+extern int  callSpwfSADevice_write(void* object, const char * cmd, uint16_t size);
 extern void callSpwfSADevice_wakeup(void* object, int wake);
 extern void callSpwfSADevice_reset(void* object, int reset); 
 extern void callSpwfSADevice_rts(void* object, int rts);
--- a/Spwf/inc/wifi_interface.h	Wed May 11 06:12:16 2016 +0000
+++ b/Spwf/inc/wifi_interface.h	Thu May 12 07:36:13 2016 +0000
@@ -247,13 +247,13 @@
 
 /******** Wi-Fi Socket Function **********/
 WiFi_Status_t   wifi_socket_client_open(uint8_t * hostname, uint32_t port_number, uint8_t * protocol, uint8_t * sock_id);
-WiFi_Status_t   wifi_socket_client_write(uint8_t sock_id, uint16_t DataLength,char * pData);
+int             wifi_socket_client_write(uint8_t sock_id, uint16_t DataLength,char * pData);
 WiFi_Status_t   wifi_socket_client_close(uint8_t sock_close_id);
 WiFi_Status_t   wifi_socket_client_security(uint8_t* tls_mode, uint8_t* root_ca_server, uint8_t* client_cert, uint8_t* client_key, uint8_t* client_domain, uint32_t tls_epoch_time);
 
 /********* Wi-Fi Socket Server ********/
 WiFi_Status_t   wifi_socket_server_open(uint32_t port_number, uint8_t * protocol);
-WiFi_Status_t   wifi_socket_server_write(uint16_t DataLength,char * pData);
+int             wifi_socket_server_write(uint16_t DataLength,char * pData);
 WiFi_Status_t   wifi_socket_server_close(void);
 
 /*** FileSystem Request ***********/
--- a/Spwf/wifi_driver.c	Wed May 11 06:12:16 2016 +0000
+++ b/Spwf/wifi_driver.c	Thu May 12 07:36:13 2016 +0000
@@ -173,7 +173,7 @@
 
 #elif defined(USART3_POLLING_MODE)
 
-  callSpwfSADevice_write(spwf_dev, (const char *) WiFi_AT_Cmd_Buff, size);
+  write_size = callSpwfSADevice_write(spwf_dev, (const char *) WiFi_AT_Cmd_Buff, size);
 
 #else
  #error "Please select USART mode in your application (in wifi_module.h file)"
@@ -191,7 +191,7 @@
 * @param  None
 * @retval WiFi_Status_t : return status of server socket request
 */
-WiFi_Status_t wifi_socket_server_write(uint16_t DataLength,char * pData) 
+int wifi_socket_server_write(uint16_t DataLength,char * pData) 
 {
     WiFi_Status_t status = WiFi_MODULE_SUCCESS;
     /*Can only write if there is a client connected*/
@@ -226,7 +226,7 @@
     }
     }  
     
-    callSpwfSADevice_write(spwf_dev, (const char *) pData, DataLength);
+    write_size = callSpwfSADevice_write(spwf_dev, (const char *) pData, DataLength);
     
     /*Write the data on the uart*/
     /*if(HAL_UART_Transmit(&UartWiFiHandle, (uint8_t *)pData, DataLength,1000)!= HAL_OK)
@@ -254,5 +254,9 @@
     status_flag.do_not_reset_push_WIFI_event = WIFI_FALSE;
     __enable_irq();
     
-    return status;
+    if(status==WiFi_MODULE_SUCCESS)
+        return write_size;
+    else
+        return -1;
+    //return status;
 }
\ No newline at end of file
--- a/Spwf/wifi_interface.c	Wed May 11 06:12:16 2016 +0000
+++ b/Spwf/wifi_interface.c	Thu May 12 07:36:13 2016 +0000
@@ -71,11 +71,7 @@
   */
 /* Private variables ---------------------------------------------------------*/
 
-#if defined (USE_STM32F4XX_NUCLEO) || (USE_STM32L4XX_NUCLEO)
-extern uint8_t WiFi_AT_Cmd_Buff[2048];
-#else
-extern uint8_t WiFi_AT_Cmd_Buff[1024];
-#endif
+extern uint8_t WiFi_AT_Cmd_Buff[2052];
 
 extern volatile Wifi_Status_Var status_flag;
 
@@ -95,7 +91,7 @@
 extern volatile uint32_t WIND64_count;
 extern uint32_t process_buffer_index;
 extern uint32_t epoch_time;
-
+extern int write_size;
 /*SPWFSADevice Class functions and variables*/
 void * spwf_device_class;
 extern void callSpwfSADevice_wakeup(void* object, int wake);
@@ -503,23 +499,27 @@
 * @param  sock_id socket ID of the socket to write to
 *         DataLength: data length to send
 *         pData : pointer of data buffer to be written
-* @retval WiFi_Status_t : return status of socket write request
+* @retval int : return number of bytes sent
 */
-WiFi_Status_t wifi_socket_client_write(uint8_t sock_id, uint16_t DataLength, char * pData)
+int wifi_socket_client_write(uint8_t sock_id, uint16_t DataLength, char * pData)
 {
   /* AT+S.SOCKW=00,11<cr> */
   WiFi_Status_t status = WiFi_MODULE_SUCCESS;
 
   //Check if sock_id is open
   if(!open_sockets[sock_id])
-    return WiFi_NOT_READY;
+    return -1;
 
-  if(DataLength>=1021 || DataLength<=0)
-    return WiFi_NOT_SUPPORTED;
+  if(DataLength>2048 || DataLength<=0)
+    return -1;
 
   Queue_Client_Write_Event(sock_id,DataLength,pData);
   status = USART_Receive_AT_Resp(Process_Event);
-  return status;
+  
+  if(status==WiFi_MODULE_SUCCESS)
+    return write_size;
+  else
+    return -1;
 }
 
 /**
--- a/Spwf/wifi_module.c	Wed May 11 06:12:16 2016 +0000
+++ b/Spwf/wifi_module.c	Thu May 12 07:36:13 2016 +0000
@@ -118,6 +118,7 @@
 uint32_t sockD_total_count=0;
 uint32_t ip_fragment_count=0;
 uint32_t chunk_size;
+int      write_size;
 uint32_t message_size;
 uint32_t WIND55_count=0;
 volatile uint32_t WIND64_count=0;
@@ -165,11 +166,7 @@
 uint8_t scanned_ssids = 0;
 char * prefetch_str;
 
-#if defined (USE_STM32F4XX_NUCLEO) || (USE_STM32L4XX_NUCLEO)
-uint8_t WiFi_AT_Cmd_Buff[2048];
-#else
-uint8_t WiFi_AT_Cmd_Buff[1024];
-#endif
+uint8_t WiFi_AT_Cmd_Buff[2052];
 
 #ifdef USART_PRINT_MSG
 #define printf(arg)    {sprintf((char*)print_msg_buff,arg);   \
@@ -485,8 +482,8 @@
                  
                 case WIFI_CLIENT_SOCKET_OPEN_EVENT:
                         
-                        if(!open_sockets[event_pop_s->socket_id])//make sure socket is closed
-                        {
+                        //if(!open_sockets[event_pop_s->socket_id])//make sure socket is closed
+                        //{
                             Reset_AT_CMD_Buffer();
     
                             /* AT+S.SOCKON = myserver,1234,t <cr> */  
@@ -500,7 +497,7 @@
                               status_flag.AT_Response_Received = WIFI_TRUE;
                               AT_RESPONSE = WiFi_AT_CMD_RESP_ERROR;
                             }
-                        }
+                        //}
                         break;
                         
                 case WIFI_CLIENT_SOCKET_CLOSE_EVENT:
@@ -1332,7 +1329,7 @@
                {
                   if(status_flag.enable_sock_read && status_flag.Q_Contains_Message && !status_flag.message_pending)
                   {
-                       //printf((const char*)&process_buffer[0]);
+                      //printf((const char*)&process_buffer[0]);
                       status_flag.Q_Contains_Message = WIFI_FALSE;                      
                       message_size = SockON_Data_Length;//Total size
                       chunk_size = Fillptr;
--- a/Spwf_API/SpwfSADevice.cpp	Wed May 11 06:12:16 2016 +0000
+++ b/Spwf_API/SpwfSADevice.cpp	Thu May 12 07:36:13 2016 +0000
@@ -96,7 +96,7 @@
                                                 //UART error not evident but characters are sometimes missing in pipeline(ring_buffer)\
                                                 //specifically in the +WIND:25:WiFi Association with 'STM' successful WIND (why specifically this?)
     
-    wifi_callback.attach_us(Wifi_scheduler, 2000);//How low can we go?
+    wifi_callback.attach_us(Wifi_scheduler, 5000);//How low can we go?
         
     sync_wait_signal = false;
     status = wifi_init(&config);
@@ -197,14 +197,14 @@
 
 int SpwfSADevice::socket_client_write(uint8_t sock_id, uint16_t DataLength,char * pData)
 {
-    WiFi_Status_t status = WiFi_MODULE_SUCCESS;
+    int status=0;//number of bytes
 
     status = wifi_socket_client_write(sock_id, DataLength, pData);
     //map error to enum ns_error_t 
     
-    if(status!=WiFi_MODULE_SUCCESS)
+    if(status > 0)
     {
-        return -1;
+        return status;
     }
     return 0;
 }
@@ -218,15 +218,16 @@
     
     if(recv_call)
     {
-        __disable_irq();
+        //debug_print("\r\nrecv_call\r\n");
+        //__disable_irq();
         wait_for_socket_data = false;
+        recv_buff = (uint8_t*)pData;
+        //__enable_irq();
         if(_timeout>0)
         recv_timer.start();
         recv_call = false;
         bytes_to_read = RecvLength;        
         bytes_read=0;
-        recv_buff = (uint8_t*)pData;
-        __enable_irq();
     }
             
     
@@ -237,12 +238,13 @@
         wait_for_socket_data = true;
         recv_timer.stop();
         recv_timer.reset();
+        wait_ms(10);
         if(bytes_read == 0) //<bytes_to_read?? 
             return -1;//return error if no bytes are read!
         else 
             return bytes_read;//return amount of data arrived so far
     }
-    
+    wait_ms(10); //CHECK:TODO: Need to wait to allow other IRQ's to run in case of non-blocking call?
     return -1;    
 }
 
@@ -282,23 +284,24 @@
 
 void SpwfSADevice::signal_data_receive(uint8_t socket_id, uint8_t * data_ptr, uint32_t message_size, uint32_t chunk_size)
 {
-    char debug_str[10];
+    char debug_str[50];
     //Data will be copied or returned to user only if there is a pending request
     //Copy data to pData
-    //sprintf((char*)debug_str,"sock_id: %d, size: %d\r\n",socket_id, message_size); 
+    //sprintf((char*)debug_str,"sock_id: %d, size: %d, chunk: %d\r\n",socket_id, message_size, chunk_size); 
+    //debug_print(debug_str);
             
     if(recv_buff && !wait_for_socket_data)
     {
-        if((bytes_read + message_size)<= bytes_to_read)
+        if((bytes_read + chunk_size)<= bytes_to_read)
         {
-            memcpy(recv_buff + bytes_read, data_ptr, message_size);//only copy bytes_to_read asked by user//rest of the data is lost!!
-            bytes_read += message_size;
+            memcpy(recv_buff + bytes_read, data_ptr, chunk_size);//only copy bytes_to_read asked by user//rest of the data is lost!!
+            bytes_read += chunk_size;
         }
         else
             {
-                uint32_t x_size = (bytes_read + message_size) - bytes_to_read;
-                memcpy(recv_buff + bytes_read, data_ptr, message_size-x_size);
-                bytes_read += (message_size-x_size);
+                uint32_t x_size = (bytes_read + chunk_size) - bytes_to_read;
+                memcpy(recv_buff + bytes_read, data_ptr, chunk_size-x_size);
+                bytes_read += (chunk_size-x_size);
             }          
         
         if(bytes_read >= bytes_to_read)
@@ -311,13 +314,12 @@
     else
     {
         debug_print("\r\n Socket:: Data Dropped: ");
-        sprintf((char*)debug_str,"%d\r\n",message_size); 
+        sprintf((char*)debug_str,"%d\r\n",chunk_size); 
         debug_print(debug_str);
         __disable_irq();
         wait_for_socket_data = true;
         __enable_irq();
     }
-    
 }
 
 void SpwfSADevice::signal_synch_wait(WiFi_Status_t code)
@@ -365,15 +367,14 @@
 
 int SpwfSADevice::socket_server_write(uint16_t data_length,char * pdata)
 {    
-    WiFi_Status_t status = WiFi_MODULE_SUCCESS;
+    int status = 0;//number of bytes
 
     status = wifi_socket_server_write(data_length, pdata);
     //map error to enum ns_error_t 
-    if(status!=WiFi_MODULE_SUCCESS)
+    if(status > 0)
     {
-        return -1;
-    }    
-    
+        return status;
+    }
     return 0;
 }
     
@@ -403,10 +404,10 @@
     }
 }
 
-void SpwfSADevice::spwf_send(const char * cmd, uint16_t size) 
+int SpwfSADevice::spwf_send(const char * cmd, uint16_t size) 
 {
     Timer timer;
-    int i;
+    int i, bytes;
     //timer.start();
     
     //uart_.puts(cmd);//string may contain '\0' character in between hence not used
@@ -418,6 +419,9 @@
             //return -1;
         //}
     }
+    
+    bytes = (int) size - 2;//we send 2 bytes extra for module
+    return bytes;
 }
 
 char SpwfSADevice::spwf_get(void) 
--- a/Spwf_API/SpwfSADevice.h	Wed May 11 06:12:16 2016 +0000
+++ b/Spwf_API/SpwfSADevice.h	Thu May 12 07:36:13 2016 +0000
@@ -74,7 +74,7 @@
 
     /*These functions should be pure virtual functions for ppl to derive and implement there own stuff*/
     char        spwf_get(void);
-    void        spwf_send(const char * cmd, uint16_t size);
+    int         spwf_send(const char * cmd, uint16_t size);
     void        spwf_wakeup(int wake);
     void        spwf_reset(int reset);
     void        spwf_rts(int rts);
--- a/Spwf_API/utils/ItfTranslator.cpp	Wed May 11 06:12:16 2016 +0000
+++ b/Spwf_API/utils/ItfTranslator.cpp	Thu May 12 07:36:13 2016 +0000
@@ -61,9 +61,9 @@
     return(device->spwf_get());
  }
 
-void callSpwfSADevice_write(void* object, const char * cmd, uint16_t size)
+int callSpwfSADevice_write(void* object, const char * cmd, uint16_t size)
  {
-   device->spwf_send(cmd, size);
+   return (device->spwf_send(cmd, size));
  }
  
 void callSpwfSADevice_wakeup(void* object, int wake)
--- a/Spwf_API/utils/ItfTranslator.h	Wed May 11 06:12:16 2016 +0000
+++ b/Spwf_API/utils/ItfTranslator.h	Thu May 12 07:36:13 2016 +0000
@@ -42,16 +42,16 @@
 extern "C" {
 #endif
 
-void callSpwfSADevice_init(void* object);
-char callSpwfSADevice_getChar(void* object);
-void callSpwfSADevice_write(void* object, const char * cmd, uint16_t size);
-void callSpwfSADevice_wakeup(void* object, int wake);
-void callSpwfSADevice_reset(void* object, int reset); 
-void callSpwfSADevice_rts(void* object, int rts);
-void callSpwfSADevice_attach(wifi_bool attach);
-void callSpwfSADevice_debug(void* object, const char * string);
-void destroySpwfSADevice(void);
-int callSpwfSADevice_read_rts(void* object);
+void    callSpwfSADevice_init(void* object);
+char    callSpwfSADevice_getChar(void* object);
+int     callSpwfSADevice_write(void* object, const char * cmd, uint16_t size);
+void    callSpwfSADevice_wakeup(void* object, int wake);
+void    callSpwfSADevice_reset(void* object, int reset); 
+void    callSpwfSADevice_rts(void* object, int rts);
+void    callSpwfSADevice_attach(wifi_bool attach);
+void    callSpwfSADevice_debug(void* object, const char * string);
+void    destroySpwfSADevice(void);
+int     callSpwfSADevice_read_rts(void* object);
 
 #ifdef __cplusplus
 }