From d3f6ef07f2c4d70c37d49bc211e61094d04c4285 Mon Sep 17 00:00:00 2001 From: Mariano Alvira Date: Sun, 7 Mar 2010 18:48:47 -0500 Subject: [PATCH] sort out the length details. --- lib/include/packet.h | 9 +++++---- lib/maca.c | 5 +++-- tests/tests.c | 2 +- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/lib/include/packet.h b/lib/include/packet.h index ea9fb0ca0..4b5443235 100644 --- a/lib/include/packet.h +++ b/lib/include/packet.h @@ -1,22 +1,23 @@ #ifndef PACKET_H #define PACKET_H -#ifndef MAX_PACKET_SIZE -#define MAX_PACKET_SIZE 127 +/* does not include 2 byte FCS checksum */ +#ifndef MAX_PAYLOAD_SIZE +#define MAX_PAYLOAD_SIZE 125 #endif typedef uint16_t short_addr_t; struct packet { short_addr_t addr; - uint8_t length; + uint8_t length; /* does not include FCS checksum */ volatile struct packet * left; volatile struct packet * right; /* offset into data for first byte of the packet payload */ /* On TX this should be 0 */ /* On RX this should be 1 since the maca puts the length as the first byte*/ uint8_t offset; - uint8_t data[MAX_PACKET_SIZE+1]; /* + 1 since maca returns the length as the first byte */ + uint8_t data[MAX_PAYLOAD_SIZE+2+1]; /* +2 for FCS; + 1 since maca returns the length as the first byte */ }; typedef struct packet packet_t; diff --git a/lib/maca.c b/lib/maca.c index 1123d4274..ca80e6131 100644 --- a/lib/maca.c +++ b/lib/maca.c @@ -21,9 +21,10 @@ #define CLK_PER_BYTE 8 #ifndef RECV_SOFTIMEOUT -#define RECV_SOFTIMEOUT 4*128*CLK_PER_BYTE /* 4 128 byte packets */ +#define RECV_SOFTIMEOUT (8*128*CLK_PER_BYTE) /* 4 128 byte packets */ #endif +#define MAX_PACKET_SIZE (MAX_PAYLOAD_SIZE + 2) /* packet includes 2 bytes of checksum */ #define reg(x) (*(volatile uint32_t *)(x)) @@ -345,7 +346,7 @@ void maca_isr(void) { if (data_indication_irq()) { *MACA_CLRIRQ = (1 << maca_irq_di); - dma_rx->length = *MACA_GETRXLVL - 2; + dma_rx->length = *MACA_GETRXLVL - 2; /* packet length does not include FCS */ // PRINTF("maca data ind %x %d\n\r", dma_rx, dma_rx->length); add_to_rx(dma_rx); dma_rx = 0; diff --git a/tests/tests.c b/tests/tests.c index b4d42d6d7..9bb300ce2 100644 --- a/tests/tests.c +++ b/tests/tests.c @@ -35,7 +35,7 @@ void print_packet(volatile packet_t *p) { for(j=0, k=0; j <= ((p->length)%PER_ROW); j++) { printf("\n\r"); for(i=0; i < PER_ROW; i++, k++) { - if(k >= (p->length + 1) ) { /* + 1 since first byte is len+2 */ + if(k >= p->length ) { printf("\n\r"); return; }