Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: SNIC-httpclient-example SNIC-ntpclient-example
Fork of SNICInterface by
Diff: SNICwifi/SNICwifi.cpp
- Revision:
- 8:50d2509479cd
- Parent:
- 7:e88ccbe0225f
- Child:
- 9:a98b45e766c8
diff -r e88ccbe0225f -r 50d2509479cd SNICwifi/SNICwifi.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/SNICwifi/SNICwifi.cpp Mon Mar 17 11:40:56 2014 +0000
@@ -0,0 +1,159 @@
+#include "mbed.h"
+#include "SNICwifi.h"
+#include "SNICwifi_uartmsg.h"
+#include <string>
+//#include <algorithm>
+
+using namespace murata_wifi;
+
+#define UART_RECVBUF_SIZE 2048
+typedef struct
+{
+ unsigned char buf[UART_RECVBUF_SIZE];
+ unsigned int size;
+ bool is_receive;
+}tagUART_RECVBUF_T;
+tagUART_RECVBUF_T gUART_RCVBUF;
+unsigned char gUART_TEMP_BUF[UART_RECVBUF_SIZE];
+
+C_SNICwifi *C_SNICwifi::mInstance_p;
+
+C_SNICwifi::C_SNICwifi(PinName tx, PinName rx, PinName cts, PinName rts, PinName reset, PinName alarm, int baud):
+ mUart(tx, rx)
+{
+ mUartRecvThread_p = NULL;
+ mInstance_p = this;
+ mUartRequestSeq = 0;
+
+ // Initialize uart
+ gUART_RCVBUF.is_receive = false;
+ gUART_RCVBUF.size = 0;
+ mUart.baud( 115200 );
+ mUart.format(8, SerialBase::None, 1);
+}
+
+int C_SNICwifi::initUart()
+{
+ // Create UART recv thread
+ mUartRecvThread_p = new Thread( C_SNICwifi::uartRecvThread );
+ if( mUartRecvThread_p == NULL )
+ {
+ printf("[C_SNICwifi::initUart] thread cread failed\r\n");
+ return -1;
+ }
+
+ return 0;
+}
+
+int C_SNICwifi::sendUart( unsigned int len, unsigned char *data )
+{
+ int ret = 0;
+
+ mUartMutex.lock();
+ for( int i = 0; i < len; i++ )
+ {
+ // Write to UART
+ ret = mUart.putc( data[i] );
+ if( ret == -1 )
+ {
+ ret = -1;
+ break;
+ }
+ }
+ mUartMutex.unlock();
+ return ret;
+}
+
+void C_SNICwifi::uartRecvThread (void const *args_p) {
+
+ C_SNICwifi *instance_p = C_SNICwifi::getInstance();
+ if ( instance_p == NULL )
+ {
+ printf("Socket constructor error: no wifly instance available!\r\n");
+ }
+
+ int recvdata = 0;
+ int i;
+
+ /* UART recv thread main loop */
+ for (;;)
+ {
+ while( instance_p->mUart.readable() )
+ {
+ // Receive data from UART.
+ instance_p->mUartMutex.lock();
+ recvdata = instance_p->mUart.getc();
+ instance_p->mUartMutex.unlock();
+
+ // Check UART receiving flg
+ if( gUART_RCVBUF.is_receive )
+ {
+ gUART_RCVBUF.buf[ gUART_RCVBUF.size ] = (unsigned char)recvdata;
+ gUART_RCVBUF.size++;
+ // Check received data is EOM.
+ if( recvdata == UART_CMD_EOM )
+ {
+/*
+ printf("[recv]\r\n");
+ for( i = 0; i < gUART_RCVBUF.size; i++ )
+ {
+ printf("%02x ", gUART_RCVBUF.buf[i]);
+ }
+ printf("\r\n");
+*/
+ unsigned char command_id;
+ // Get payload from received data from UART.
+ int payload_len = C_SNIC_UartMsg::getResponsePayload( gUART_RCVBUF.size, gUART_RCVBUF.buf
+ , &command_id, gUART_TEMP_BUF );
+/*
+ printf("[payload]\r\n");
+ for( i = 0; i < payload_len; i++ )
+ {
+ printf("%02x ", gUART_TEMP_BUF[i]);
+ }
+ printf("\r\n");
+*/
+ // Check scan results indication
+ if( (command_id == UART_CMD_ID_WIFI) || (gUART_TEMP_BUF[0] == UART_CMD_SID_WIFI_SCAN_RESULT_IND) )
+ {
+ // Scan result indicate
+ instance_p->mUartCommand.scanResultIndicate( gUART_TEMP_BUF, payload_len );
+ }
+
+ // Checks in the command which is waiting.
+ if( instance_p->mUartCommand.isWaitingCommand(command_id, gUART_TEMP_BUF) )
+ {
+ // Get buffer for payload data
+ unsigned char *payload_buf_p = instance_p->mUartCommand.getResponseBuf();
+ if( payload_buf_p != NULL )
+ {
+ memcpy( payload_buf_p, gUART_TEMP_BUF, payload_len );
+ instance_p->mUartCommand.setResponseBuf( NULL );
+ }
+ // Set status
+ instance_p->mUartCommand.setCommandStatus( gUART_TEMP_BUF[2] );
+ // Set signal for command response wait.
+ instance_p->mUartCommand.signal();
+ }
+
+ gUART_RCVBUF.size = 0;
+ gUART_RCVBUF.is_receive = false;
+ }
+ }
+ else
+ {
+ // Check received data is SOM.
+ if( recvdata == UART_CMD_SOM )
+ {
+ gUART_RCVBUF.size = 0;
+ gUART_RCVBUF.buf[ gUART_RCVBUF.size ] = (unsigned char)recvdata;
+ gUART_RCVBUF.size++;
+ gUART_RCVBUF.is_receive = true;
+ }
+ }
+// Thread::yield();
+ }
+ Thread::yield();
+ }
+}
+
