Trond Enger / d7a_1x

Fork of d7a_1x by WizziLab

Revision:
65:ac3844adfe49
Parent:
59:b42eae56b51b
Child:
66:492b1d7ba370
--- a/src/d7a_com.cpp	Wed Oct 12 16:40:10 2016 +0000
+++ b/src/d7a_com.cpp	Fri Oct 14 10:52:22 2016 +0000
@@ -182,8 +182,8 @@
     g_com_ctx.serial->format(8, SerialBase::None, 1);
     g_com_ctx.serial->attach(&rx_isr, Serial::RxIrq);
     
-    g_com_ctx.tx_thread =       new Thread(d7a_com_tx_thread, NULL, osPriorityHigh, DEFAULT_STACK_SIZE*2);
-    g_com_ctx.rx_thread =       new Thread(d7a_com_rx_thread, NULL, osPriorityHigh, DEFAULT_STACK_SIZE*2);
+    g_com_ctx.tx_thread =       new Thread(d7a_com_tx_thread, NULL, osPriorityHigh, DEFAULT_STACK_SIZE*3);
+    g_com_ctx.rx_thread =       new Thread(d7a_com_rx_thread, NULL, osPriorityHigh, DEFAULT_STACK_SIZE*3);
     
     return D7A_ERR_NONE;
 }
@@ -300,11 +300,14 @@
     uint16_t first_part_size;
     uint16_t second_part_size;
     
+    ASSERT(length, "Can't copy 0 bytes\r\n");
     ASSERT(length <= g_com_ctx.rx_buffer_size, "Length too long (%d) for buffer size (%d)\r\n", length, g_com_ctx.rx_buffer_size);
     
     read_start %= g_com_ctx.rx_buffer_size;
     first_part_size = (length > (g_com_ctx.rx_buffer_size - read_start))? g_com_ctx.rx_buffer_size - read_start : length;
     
+    //DPRINT("CPY @%08x %d %d %d\r\n", linear_buffer, length, read_start, first_part_size);
+    
     memcpy((void*)&linear_buffer[0], (const void*)&g_com_ctx.rx_buffer[read_start], first_part_size);
     
     // The circular buffer is wrapping
@@ -314,7 +317,7 @@
         memcpy((void*)&linear_buffer[first_part_size], (const void*)&g_com_ctx.rx_buffer[0], second_part_size);
     }
 }
-            
+
 /**
     Wakes-up modem and send data throught Serial.
 
@@ -415,24 +418,18 @@
             // This has to be here to avoid going to another process
             if (pkt->id == KAL_COM_FLOW_SYS_XON)
             {
+                FREE(pkt);
                 DPRINT("XON\r\n");
                 g_com_ctx.tx_thread->signal_set(XON_SIGNAL);
-                FREE(pkt);
             }
             else if (pkt->id == KAL_COM_FLOW_SYS_XOFF)
             {
+                FREE(pkt);
                 DPRINT("XOFF\r\n");
                 d7a_sys_xack();
-                FREE(pkt);
             }
             else
             {
-                if (KAL_COM_FLOW_SYS_PONG == pkt->id)
-                {
-                    g_com_ctx.tim.stop();
-                    uint32_t time_us = g_com_ctx.tim.read_us();
-                    IPRINT("Ping in %d.%03dms\r\n", time_us/1000, time_us%1000);
-                }
                 d7a_sys_new_pkt(pkt);
             }
             break;
@@ -493,7 +490,7 @@
                     g_com_ctx.data_parsing->release();
                 }
                 
-                //DPRINT("COM header found (body %d/%d bytes)\r\n", g_com_ctx.data_available, g_com_ctx.msg.blen);
+                //DPRINT("COM header found (id: %02X seq: %d body: %d/%d bytes)\r\n", g_com_ctx.msg.id, seqnum, g_com_ctx.data_available, g_com_ctx.msg.blen);
                 break;
             }
         }
@@ -528,22 +525,22 @@
     
     if (KAL_COM_FLOWID(g_com_ctx.msg.id) != KAL_COM_FLOWID_TRC)
     {
-        //DPRINT("Got packet id 0x%02X len %d\r\n", id, len);
+        //DPRINT("COM body found (%d bytes)\r\n", g_com_ctx.msg.blen);
         
-        d7a_com_rx_msg_t* pkt = NULL;
-        pkt = (d7a_com_rx_msg_t*)MALLOC(sizeof(d7a_com_rx_msg_t) - 1 + g_com_ctx.msg.blen);
+        d7a_com_rx_msg_t* pkt = (d7a_com_rx_msg_t*)MALLOC(sizeof(d7a_com_rx_msg_t) - 1 + g_com_ctx.msg.blen);
 
         // copy data to buffer
         pkt->blen = g_com_ctx.msg.blen;
         pkt->id = g_com_ctx.msg.id;
         d7a_com_copy_to_linear(pkt->buffer, g_com_ctx.read_idx, g_com_ctx.msg.blen);
-        
+
         // add packet to queue
         d7a_com_new_pkt(pkt);
     }
     else
     {
         // Ignore packet
+        //DPRINT("Ignore pkt id %02X\r\n", g_com_ctx.msg.id);
     }
     
     // update buffer indexes
@@ -611,12 +608,6 @@
 
             d7a_com_send(msg);
             FREE(msg);
-                        
-            if (KAL_COM_FLOW_SYS_PING == flow_id)
-            {
-                g_com_ctx.tim.reset();
-                g_com_ctx.tim.start();
-            }
             
             if (KAL_COM_FLOW_SYS_XACK == flow_id)
             {