X-Git-Url: http://git.rot13.org/?p=goodfet;a=blobdiff_plain;f=firmware%2Fapps%2Fradios%2Fccspi.c;h=6df045811068937ceffacd82136c5ae602630ff8;hp=8a8d7e8d3be2d83fe824809b7d8952b3bc3ca8be;hb=19c84b41b9fbde102aee56bc137a8a2885194ebf;hpb=5faf3dc1d40b8afe5fe438f6808a4d6f1d169580 diff --git a/firmware/apps/radios/ccspi.c b/firmware/apps/radios/ccspi.c index 8a8d7e8..6df0458 100644 --- a/firmware/apps/radios/ccspi.c +++ b/firmware/apps/radios/ccspi.c @@ -19,8 +19,8 @@ //! Handles a Chipcon SPI command. void ccspi_handle_fn( uint8_t const app, - uint8_t const verb, - uint32_t const len); + uint8_t const verb, + uint32_t const len); // define the ccspi app's app_t app_t const ccspi_app = { @@ -87,6 +87,73 @@ u8 ccspitrans8(u8 byte){ } +//! Reflexively jam on the present channel. +void ccspireflexjam(u16 delay){ + unsigned long i; + #if defined(FIFOP) && defined(SFD) && defined(FIFO) && defined(PLED2DIR) && defined(PLED2PIN) && defined(PLED2OUT) + + prep_timer(); + debugstr("Reflex jamming until reset."); + debughex(delay); + txdata(CCSPI,CCSPI_REFLEX,1); //Let the client continue its business. + while(1) { + //Wait until a packet is received + while(!SFD){ + //Has there been an overflow in the RX buffer? + if((!FIFO)&&FIFOP){ + //debugstr("Clearing RX overflow"); + CLRSS; + ccspitrans8(0x08); //SFLUSHRX + SETSS; + } + } + //Turn on LED 2 (green) as signal + PLED2DIR |= PLED2PIN; + PLED2OUT &= ~PLED2PIN; + + + + //Wait a few us to send it. + delay_us(delay); + + //Transmit the packet. + CLRSS; + ccspitrans8(0x04); + SETSS; + + + //Load the next jamming packet. + //Note: attempts to preload this actually slowed the jam time down from 7 to 9 bytes. + CLRSS; + ccspitrans8(CCSPI_TXFIFO); + char pkt[5] = {0x05, 0, 0, 0, 0}; + //char pkt[15] = {0x0f, 0x01, 0x08, 0x82, 0xff, 0xff, 0xff, 0xff, 0xde, 0xad, 0xbe, 0xef, 0xba, 0xbe, 0xc0}; + //char pkt[12] = {0x0c, 0x01, 0x08, 0x82, 0xff, 0xff, 0xff, 0xff, 0xde, 0xad, 0xbe, 0xef}; + for(i=0;i