iowfehu;gdbjwHJAOPIHO?L
Fork of X_NUCLEO_IDW01M1 by
Revision 8:0f302a13e21b, committed 2016-05-12
- 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
--- 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 }