Send SYN packet to set sequence numbers
authorKeith Packard <keithp@keithp.com>
Sat, 31 Oct 2009 06:52:22 +0000 (23:52 -0700)
committerKeith Packard <keithp@keithp.com>
Sat, 31 Oct 2009 06:52:22 +0000 (23:52 -0700)
src/ao.h
src/ao_packet.c

index 2e2fb589f1916dd20304c3a2cfe82ade5092ed4f..e2f137bdafd02eb7aeac390a3123c6bd75d20a7a 100644 (file)
--- a/src/ao.h
+++ b/src/ao.h
@@ -981,6 +981,7 @@ struct ao_fifo {
  */
 
 #define AO_PACKET_MAX  8
  */
 
 #define AO_PACKET_MAX  8
+#define AO_PACKET_SYN          0xff
 
 struct ao_packet {
        uint8_t         addr;
 
 struct ao_packet {
        uint8_t         addr;
index da33bb4c6dfc8d4e92cf59ec4f94af46ab2f27e4..620cd0014da5ac104feb94fad5603313c5485132 100644 (file)
@@ -83,14 +83,22 @@ ao_packet_recv(void)
        ao_mutex_put(&ao_radio_mutex);
 
        if (dma_done & AO_DMA_DONE) {
        ao_mutex_put(&ao_radio_mutex);
 
        if (dma_done & AO_DMA_DONE) {
-               printf ("rssi %d status %x\n", rx_packet.rssi, rx_packet.status); flush();
                if (!(rx_packet.status & PKT_APPEND_STATUS_1_CRC_OK)) {
                        printf ("bad crc\n"); flush();
                if (!(rx_packet.status & PKT_APPEND_STATUS_1_CRC_OK)) {
                        printf ("bad crc\n"); flush();
-//                     return AO_DMA_ABORTED;
+                       return AO_DMA_ABORTED;
                }
                }
-               if (rx_packet.packet.len) {
+               if (rx_packet.packet.len == AO_PACKET_SYN) {
+                       rx_seq = rx_packet.packet.seq;
+                       tx_packet.seq = rx_packet.packet.ack;
+                       tx_packet.ack = rx_seq;
+               } else if (rx_packet.packet.len) {
                        if (rx_packet.packet.seq == rx_seq + 1 && rx_used == rx_len)
                        {
                        if (rx_packet.packet.seq == rx_seq + 1 && rx_used == rx_len)
                        {
+                               printf ("rx len %3d seq %3d ack %3d\n",
+                                       rx_packet.packet.len,
+                                       rx_packet.packet.seq,
+                                       rx_packet.packet.ack);
+                               flush();
                                memcpy(rx_data, rx_packet.packet.d, rx_packet.packet.len);
                                rx_used = 0;
                                rx_len = rx_packet.packet.len;
                                memcpy(rx_data, rx_packet.packet.d, rx_packet.packet.len);
                                rx_used = 0;
                                rx_len = rx_packet.packet.len;
@@ -110,14 +118,17 @@ ao_packet_recv(void)
 void
 ao_packet_slave(void)
 {
 void
 ao_packet_slave(void)
 {
-       tx_packet.addr = ao_serial_number;
        ao_radio_set_packet();
        ao_radio_set_packet();
+       tx_packet.addr = ao_serial_number;
+       tx_packet.len = AO_PACKET_SYN;
        while (ao_packet_enable) {
        while (ao_packet_enable) {
+               ao_led_on(AO_LED_GREEN);
                ao_packet_recv();
                ao_packet_recv();
-               ao_led_toggle(AO_LED_GREEN);
+               ao_led_off(AO_LED_GREEN);
+               ao_led_on(AO_LED_RED);
                ao_delay(AO_MS_TO_TICKS(100));
                ao_packet_send();
                ao_delay(AO_MS_TO_TICKS(100));
                ao_packet_send();
-               ao_led_toggle(AO_LED_RED);
+               ao_led_off(AO_LED_RED);
        }
        ao_exit();
 }
        }
        ao_exit();
 }