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.
Fork of d7a_1x by
Diff: src/d7a_com.cpp
- 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)
{
