summaryrefslogtreecommitdiff
path: root/src/drivers/ao_packet.c
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2015-02-14 23:18:38 -0800
committerKeith Packard <keithp@keithp.com>2015-02-14 23:18:38 -0800
commit135abf0e7c5ceb5738a0b5f68fe2be4b7abdae5e (patch)
treecd5b8e2be9c9838de42cd86576ceb76758f6abbb /src/drivers/ao_packet.c
parent9c75faf1ec51eb2f9a8dc9402653490143a784d9 (diff)
altos/cc1200: Adjust bit-sync configuration
The default bit timing adjustment mechanism allows for only a 0.2% deviation from the programmed bit timing. I found one TeleMini device which is beyond that tolerance as it was built with an older crystal with more error. Switch to the more expensive synchronization mechanism which allows up to 2% timing error, but requires a multi-byte preamble (which we have). This fixes packet mode nicely. Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src/drivers/ao_packet.c')
-rw-r--r--src/drivers/ao_packet.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/drivers/ao_packet.c b/src/drivers/ao_packet.c
index 18330ead..8c2db275 100644
--- a/src/drivers/ao_packet.c
+++ b/src/drivers/ao_packet.c
@@ -81,8 +81,16 @@ ao_packet_recv(uint16_t timeout)
/* Check to see if we got a valid packet */
if (!dma_done)
return 0;
- if (!(ao_rx_packet.status & AO_RADIO_STATUS_CRC_OK))
+ if (!(ao_rx_packet.status & AO_RADIO_STATUS_CRC_OK)) {
+ printf("bad crc addr %d len %d seq %d ack %d callsign %8.8s\n",
+ ao_rx_packet.packet.addr,
+ ao_rx_packet.packet.len,
+ ao_rx_packet.packet.seq,
+ ao_rx_packet.packet.ack,
+ ao_rx_packet.packet.callsign);
+ flush();
return 0;
+ }
/* Accept packets with matching call signs, or any packet if
* our callsign hasn't been configured
@@ -90,8 +98,10 @@ ao_packet_recv(uint16_t timeout)
if (ao_xmemcmp(ao_rx_packet.packet.callsign,
ao_config.callsign,
AO_MAX_CALLSIGN) != 0 &&
- ao_xmemcmp(ao_config.callsign, CODE_TO_XDATA("N0CALL"), 7) != 0)
+ ao_xmemcmp(ao_config.callsign, CODE_TO_XDATA("N0CALL"), 7) != 0) {
+ printf ("bad call\n"); flush();
return 0;
+ }
/* SYN packets carry no data */
if (ao_rx_packet.packet.len == AO_PACKET_SYN) {