diff options
author | Keith Packard <keithp@keithp.com> | 2012-10-24 23:52:49 -0700 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2012-10-25 00:07:14 -0700 |
commit | 097c931c979d3652ef8e279ba66bb7ce758f37a3 (patch) | |
tree | 0f857a9e07f6cc59b3252dc9d7e665891bbdfeb3 /src/drivers/ao_packet.c | |
parent | 978c16105dd334a4a2807140dbbcc7f306a6b581 (diff) |
altos: When slave mode first starts, accept any packet
This eliminates the packet sequence matching for the first packet,
allowing outstanding send data to arrive from the master instead of
ignoring packets with data until they match the seqno
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src/drivers/ao_packet.c')
-rw-r--r-- | src/drivers/ao_packet.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/drivers/ao_packet.c b/src/drivers/ao_packet.c index d813b25f..2bada949 100644 --- a/src/drivers/ao_packet.c +++ b/src/drivers/ao_packet.c @@ -27,6 +27,7 @@ static __pdata uint8_t rx_seq; __xdata struct ao_task ao_packet_task; __xdata uint8_t ao_packet_enable; +__xdata uint8_t ao_packet_restart; #if PACKET_HAS_MASTER __xdata uint8_t ao_packet_master_sleeping; @@ -106,7 +107,8 @@ ao_packet_recv(void) /* Check for incoming data at the next sequence and * for an empty data buffer */ - if (ao_rx_packet.packet.seq == (uint8_t) (rx_seq + (uint8_t) 1) && + if ((ao_rx_packet.packet.seq == (uint8_t) (rx_seq + (uint8_t) 1) || + ao_packet_restart) && ao_packet_rx_used == ao_packet_rx_len) { /* Copy data to the receive data buffer and set up the @@ -126,6 +128,7 @@ ao_packet_recv(void) ao_wakeup(&ao_stdin_ready); } } + ao_packet_restart = 0; /* If the other side has seen the latest data we queued, * wake up any task waiting to send data and let them go again |