X-Git-Url: http://git.rot13.org//?p=goodfet;a=blobdiff_plain;f=firmware%2Fapps%2Fradios%2Fccspi.c;fp=firmware%2Fapps%2Fradios%2Fccspi.c;h=5d40f11d0ea3a7e2f67482fa2a2bc75ab987b6be;hp=9c6b09cc8b09e6019c9a0f9b73bdcea6008a0d17;hb=253ee904459a84c657ef0e3057cbb75efe9481a1;hpb=49b9987ddfeb963942601bf9f2f7b2b176973975 diff --git a/firmware/apps/radios/ccspi.c b/firmware/apps/radios/ccspi.c index 9c6b09c..5d40f11 100644 --- a/firmware/apps/radios/ccspi.c +++ b/firmware/apps/radios/ccspi.c @@ -259,6 +259,60 @@ void ccspi_handle_fn( uint8_t const app, #else debugstr("Can't RX a packet with SFD and FIFOP definitions."); txdata(app,NOK,0); +#endif + break; + case CCSPI_RXDEC: +#ifdef FIFOP + //Has there been an overflow? + if((!FIFO)&&FIFOP){ + debugstr("Clearing overflow"); + CLRSS; + ccspitrans8(0x08); //SFLUSHRX + SETSS; + txdata(app,verb,0); //no packet + return; + } + + //Is there a packet? + if(FIFOP&&FIFO){ + //Wait for completion. + while(SFD); + + //Decrypt the packet. + CLRSS; ccspitrans8(CCSPI_SRXDEC); SETSS; + + //Wait for decryption to complete. + while(!FIFO); + + //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