SNIC UART Interface library: Serial to Wi-Fi library for Murata TypeYD Wi-Fi module. For more information about TypeYD: http://www.murata.co.jp/products/microwave/module/lbwb1zzydz/index.html
Dependents: SNIC-xively-jumpstart-demo SNIC-FluentLogger-example TCPEchoServer murataDemo ... more
Fork of YDwifiInterface by
Revision 36:f33fcf5975ab, committed 2014-06-19
- Comitter:
- kishino
- Date:
- Thu Jun 19 10:15:47 2014 +0000
- Parent:
- 35:e4e7f86fd975
- Child:
- 37:f3a2053627c2
- Commit message:
- Supported a new command format of SNIC UART.
Changed in this revision
--- a/SNIC/SNIC_Core.cpp Tue Jun 10 10:19:48 2014 +0000
+++ b/SNIC/SNIC_Core.cpp Thu Jun 19 10:15:47 2014 +0000
@@ -32,7 +32,6 @@
*/
unsigned char gUART_TEMP_BUF[UART_RECVBUF_SIZE] __attribute__((section("AHBSRAM1")));
unsigned char gUART_COMMAND_BUF[UART_REQUEST_PAYLOAD_MAX] __attribute__((section("AHBSRAM1")));
-unsigned char gPAYLOAD_ARRAY[UART_REQUEST_PAYLOAD_MAX] __attribute__((section("AHBSRAM1")));
/** MemoryPool for payload of UART response */
MemoryPool<tagMEMPOOL_BLOCK_T, MEMPOOL_PAYLOAD_NUM> mMemPoolPayload __attribute__((section("AHBSRAM1")));
/** MemoryPool for UART receive */
@@ -114,10 +113,8 @@
unsigned short payload_len;
unsigned int command_len = 0;
- // Make command payload
- payload_len = C_SNIC_UartMsgUtil::makePayload( req_buf_len, req_buf_p, gPAYLOAD_ARRAY );
// Make all command request
- command_len = C_SNIC_UartMsgUtil::makeRequest( cmd_id, gPAYLOAD_ARRAY, payload_len, command_p );
+ command_len = C_SNIC_UartMsgUtil::makeRequest( cmd_id, req_buf_p, req_buf_len, command_p );
// Set data for response
mUartCommand_p->setCommandID( cmd_id );
@@ -141,6 +138,7 @@
}
}
mUartMutex.unlock();
+
return ret;
}
@@ -215,17 +213,29 @@
gUART_RCVBUF_p->buf[ gUART_RCVBUF_p->size ] = (unsigned char)recvdata;
gUART_RCVBUF_p->size++;
- // Check received data is EOM.
- if( recvdata == UART_CMD_EOM )
+ if( gUART_RCVBUF_p->size == 3 )
{
- // Add queue
- mUartRecvQueue.put( gUART_RCVBUF_p );
+ // get demand size
+ unsigned short payload_len = ( ( (gUART_RCVBUF_p->buf[1] & ~0x80) & 0xff) | ( ( (gUART_RCVBUF_p->buf[2] & ~0xC0) << 7) & 0xff80) );
+ gUART_RCVBUF_p->demand_size = payload_len + 6;
+
+ }
+
+ if( gUART_RCVBUF_p->demand_size > 0 )
+ {
+ // Check size of received data.
+ if( gUART_RCVBUF_p->size >= gUART_RCVBUF_p->demand_size )
+ {
+ // Add queue
+ mUartRecvQueue.put( gUART_RCVBUF_p );
+
+ gUART_RCVBUF_p = NULL;
- gUART_RCVBUF_p = NULL;
-
- // set signal for dispatch thread
- instance_p->mUartRecvDispatchThread_p->signal_set( UART_DISPATCH_SIGNAL );
+ // set signal for dispatch thread
+ instance_p->mUartRecvDispatchThread_p->signal_set( UART_DISPATCH_SIGNAL );
+ }
}
+
}
else
{
@@ -234,6 +244,7 @@
{
gUART_RCVBUF_p = instance_p->allocUartRcvBuf();
gUART_RCVBUF_p->size = 0;
+ gUART_RCVBUF_p->demand_size = 0;
// get buffer for Uart receive
gUART_RCVBUF_p->buf[ 0 ] = (unsigned char)recvdata;
--- a/SNIC/SNIC_Core.h Tue Jun 10 10:19:48 2014 +0000
+++ b/SNIC/SNIC_Core.h Thu Jun 19 10:15:47 2014 +0000
@@ -21,7 +21,7 @@
#include "SNIC_UartCommandManager.h"
-#define UART_REQUEST_PAYLOAD_MAX 1024
+#define UART_REQUEST_PAYLOAD_MAX 2048
#define MEMPOOL_BLOCK_SIZE 2048
#define MEMPOOL_PAYLOAD_NUM 1
@@ -65,6 +65,7 @@
typedef struct
{
unsigned int size;
+ unsigned int demand_size;
unsigned char buf[MEMPOOL_BLOCK_SIZE];
}tagMEMPOOL_BLOCK_T;
@@ -376,7 +377,7 @@
/** UDP Information */
tagUDP_RECVINFO_T mUdpRecvInfo[MAX_SOCKET_ID+1];
-/** Constructor
+ /** Constructor
*/
C_SNIC_Core();
--- a/SNIC/SNIC_UartMsgUtil.cpp Tue Jun 10 10:19:48 2014 +0000
+++ b/SNIC/SNIC_UartMsgUtil.cpp Thu Jun 19 10:15:47 2014 +0000
@@ -21,32 +21,6 @@
{
}
-unsigned short C_SNIC_UartMsgUtil::makePayload( unsigned int cmd_len, unsigned char *cmd_p, unsigned char *payload_p )
-{
- unsigned short payload_len = 0;
- int i;
-
- for( i = 0; i < cmd_len; i++, payload_p++, payload_len++ )
- {
- /* check Escape code */
- if( ( cmd_p[i] == UART_CMD_SOM ) || ( cmd_p[i] == UART_CMD_EOM ) || ( cmd_p[i] == UART_CMD_ESC ) )
- {
- /* Add ESC */
- *payload_p = UART_CMD_ESC;
- payload_len++;
-
- payload_p++;
- *payload_p = (0x80 | cmd_p[i]);
- }
- else
- {
- *payload_p = cmd_p[i];
- }
- }
-
- return payload_len;
-}
-
unsigned int C_SNIC_UartMsgUtil::makeRequest( unsigned char cmd_id,unsigned char *payload_p
, unsigned short payload_len, unsigned char *uart_command_p )
{
@@ -81,7 +55,6 @@
for( i = 0; i < payload_len; i++, uart_command_p++, uart_cmd_len++ )
{
*uart_command_p = payload_p[i];
- check_sum += *uart_command_p;
}
// set Check sum
@@ -100,7 +73,6 @@
, unsigned char *command_id_p, unsigned char *payload_p )
{
unsigned short payload_len = 0;
- unsigned int response_len = 0;
unsigned char *buf = NULL;
bool isESC = false;
int i;
@@ -116,31 +88,11 @@
// get payload data
for( i = 0; i < payload_len; i++, buf++ )
{
- if( isESC )
- {
- *payload_p = (*buf & ~0x80);
- payload_p++;
- response_len++;
- isESC = false;
- }
- else
- {
- // Check Escape code
- if( *buf == UART_CMD_ESC )
- {
- isESC = true;
- continue;
- }
- else
- {
- *payload_p = *buf;
- payload_p++;
- response_len++;
- }
- }
+ *payload_p = *buf;
+ payload_p++;
}
- return response_len;
+ return payload_len;
}
int C_SNIC_UartMsgUtil::addrToInteger( const char *addr_p )
@@ -190,4 +142,4 @@
addr_array_p[1] = ((addr & 0xFF0000) >> 16 );
addr_array_p[2] = ((addr & 0xFF00) >> 8 );
addr_array_p[3] = ( addr & 0xFF);
-}
\ No newline at end of file
+}
--- a/SNIC/SNIC_UartMsgUtil.h Tue Jun 10 10:19:48 2014 +0000
+++ b/SNIC/SNIC_UartMsgUtil.h Thu Jun 19 10:15:47 2014 +0000
@@ -142,14 +142,6 @@
C_SNIC_UartMsgUtil();
virtual ~C_SNIC_UartMsgUtil();
- /** Make SNIC UART command payload.
- @param cmd_len Command length
- @param cmd_p Command pointer
- @param payload_p Payload pointer[output]
- @return payload length
- */
- static unsigned short makePayload( unsigned int cmd_len, unsigned char *cmd_p, unsigned char *payload_p );
-
/** Make SNIC UART command.
@param cmd_id Command ID
@param payload_p Payload pointer
--- a/SNIC_WifiInterface.cpp Tue Jun 10 10:19:48 2014 +0000
+++ b/SNIC_WifiInterface.cpp Thu Jun 19 10:15:47 2014 +0000
@@ -13,6 +13,8 @@
#include "SNIC_WifiInterface.h"
#include "SNIC_UartMsgUtil.h"
+#define UART_CONNECT_BUF_SIZE 512
+unsigned char gCONNECT_BUF[UART_CONNECT_BUF_SIZE];
C_SNIC_WifiInterface::C_SNIC_WifiInterface( PinName tx, PinName rx, PinName cts, PinName rts, PinName reset, PinName alarm, int baud)
{
@@ -39,6 +41,7 @@
/* Initialize UART */
snic_core_p->initUart( mUART_tx, mUART_rx, mUART_baud );
+ wait(0.5);
/* Initialize SNIC API */
// Get buffer for response payload from MemoryPool
tagMEMPOOL_BLOCK_T *payload_buf = snic_core_p->allocCmdBuf();
@@ -131,7 +134,6 @@
return 0;
}
-unsigned char gCONNECT_BUF[UART_REQUEST_PAYLOAD_MAX];
int C_SNIC_WifiInterface::connect(const char *ssid_p, unsigned char ssid_len, E_SECURITY sec_type
, const char *sec_key_p, unsigned char sec_key_len)
{
@@ -164,7 +166,7 @@
unsigned int buf_len = 0;
unsigned int command_len;
- memset( buf, 0, UART_REQUEST_PAYLOAD_MAX );
+ memset( buf, 0, UART_CONNECT_BUF_SIZE );
// Make request
buf[0] = UART_CMD_SID_WIFI_JOIN_REQ;
buf_len++;
@@ -641,5 +643,5 @@
}
snic_core_p->freeCmdBuf( payload_buf );
- return 0;
+ return ret;
}
--- a/Socket/Socket.cpp Tue Jun 10 10:19:48 2014 +0000
+++ b/Socket/Socket.cpp Thu Jun 19 10:15:47 2014 +0000
@@ -31,6 +31,7 @@
#include <cstring>
char gSOCKET_SEND_BUF[2048] __attribute__((section("AHBSRAM1")));
+
Socket::Socket()
{
mSocketID = -1;
@@ -190,8 +191,8 @@
printf("resolveHostName payload_buf NULL\r\n");
return -1;
}
-
- unsigned char buf[UART_REQUEST_PAYLOAD_MAX];
+
+ unsigned char *buf = (unsigned char *)getSocketSendBuf();
unsigned int buf_len = 0;
memset( buf, 0, UART_REQUEST_PAYLOAD_MAX );
@@ -215,7 +216,6 @@
unsigned int command_len;
command_len = snic_core_p->preparationSendCommand( UART_CMD_ID_SNIC, UART_CMD_SID_SNIC_RESOLVE_NAME_REQ, buf
, buf_len, payload_buf->buf, command_array );
-
// Send uart command request
snic_core_p->sendUart( command_len, command_array );
--- a/Socket/TCPSocketServer.cpp Tue Jun 10 10:19:48 2014 +0000
+++ b/Socket/TCPSocketServer.cpp Thu Jun 19 10:15:47 2014 +0000
@@ -61,7 +61,7 @@
req.seq = mUartRequestSeq++;
req.interface = 0;
- unsigned char command_array[UART_REQUEST_PAYLOAD_MAX];
+ unsigned char *command_array = snic_core_p->getCommandBuf();
unsigned int command_len;
// Preparation of command
command_len = snic_core_p->preparationSendCommand( UART_CMD_ID_SNIC, req.cmd_sid, (unsigned char *)&req
@@ -124,7 +124,7 @@
req.recv_bufsize[1] = (SNIC_UART_RECVBUF_SIZE & 0xFF);
req.max_client = max;
- unsigned char command_array[UART_REQUEST_PAYLOAD_MAX];
+ unsigned char *command_array = snic_core_p->getCommandBuf();
unsigned int command_len;
// Preparation of command
command_len = snic_core_p->preparationSendCommand( UART_CMD_ID_SNIC, req.cmd_sid, (unsigned char *)&req
--- a/Socket/UDPSocket.cpp Tue Jun 10 10:19:48 2014 +0000
+++ b/Socket/UDPSocket.cpp Thu Jun 19 10:15:47 2014 +0000
@@ -65,7 +65,7 @@
req.seq = mUartRequestSeq++;
req.interface = 0;
- unsigned char command_array[UART_REQUEST_PAYLOAD_MAX];
+ unsigned char *command_array = snic_core_p->getCommandBuf();
unsigned int command_len;
// Preparation of command
command_len = snic_core_p->preparationSendCommand( UART_CMD_ID_SNIC, req.cmd_sid, (unsigned char *)&req
muRata

Murata TypeYD