From: Keith Packard Date: Thu, 25 Oct 2012 06:52:49 +0000 (-0700) Subject: altos: When slave mode first starts, accept any packet X-Git-Tag: 1.1.9.2~30 X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=commitdiff_plain;h=097c931c979d3652ef8e279ba66bb7ce758f37a3 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 --- diff --git a/src/core/ao_packet.h b/src/core/ao_packet.h index f232a878..9058c347 100644 --- a/src/core/ao_packet.h +++ b/src/core/ao_packet.h @@ -48,6 +48,7 @@ extern __xdata struct ao_task ao_packet_task; extern __xdata uint8_t ao_packet_enable; extern __xdata uint8_t ao_packet_master_sleeping; extern __pdata uint8_t ao_packet_rx_len, ao_packet_rx_used, ao_packet_tx_used; +extern __xdata uint8_t ao_packet_restart; void ao_packet_send(void); 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 diff --git a/src/drivers/ao_packet_slave.c b/src/drivers/ao_packet_slave.c index fd5d443e..e45775cb 100644 --- a/src/drivers/ao_packet_slave.c +++ b/src/drivers/ao_packet_slave.c @@ -22,6 +22,7 @@ ao_packet_slave(void) { ao_tx_packet.addr = ao_serial_number; ao_tx_packet.len = AO_PACKET_SYN; + ao_packet_restart = 1; while (ao_packet_enable) { if (ao_packet_recv()) { ao_xmemcpy(&ao_tx_packet.callsign, &ao_rx_packet.packet.callsign, AO_MAX_CALLSIGN);