- //Only should transmit length of one more than the reported
- // length of the frame, which holds the length byte:
- txdata(app,verb,cmddata[0]+1);
+ //Get the packet.
+ CLRSS;
+ ccspitrans8(CCSPI_RXFIFO | 0x40);
+ //ccspitrans8(0x3F|0x40);
+ cmddata[0]=0x20; //to be replaced with length
+
+
+ /* This reads too far on some CC2420 revisions, but on others it
+ works fine. It probably has to do with whether FIFO drops
+ before or after the SPI clocking.
+
+ A software fix is to reset the CC2420 between packets. This
+ works, but a better solution is desired.
+ */
+ for(i=0;i<cmddata[0]+1;i++)
+ //for(i=0;FIFO && i<0x80;i++)
+ cmddata[i]=ccspitrans8(0x00);
+ SETSS;
+
+ //Only should transmit a packet if the length is legal.
+ if(cmddata[0]&0x80) i=0;
+ txdata(app,verb,i);