Customized SNICInterface

Fork of NySNICInterface by Ryo Iizuka

Revision:
36:f33fcf5975ab
Parent:
35:e4e7f86fd975
Child:
37:f3a2053627c2
--- 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;