X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;ds=inline;f=firmware%2Fapps%2Fradios%2Fccspi.c;h=a124b536cea22c4358dc1f2bd1fd63d88548da25;hb=4b4d432fa54e8130f216f97d1a976795f3c446a4;hp=54b155c5ab57c32f49fe7324f37c9c18f1a72d00;hpb=f27155268cf6ef4f5281564ac972224860cdd598;p=goodfet diff --git a/firmware/apps/radios/ccspi.c b/firmware/apps/radios/ccspi.c index 54b155c..a124b53 100644 --- a/firmware/apps/radios/ccspi.c +++ b/firmware/apps/radios/ccspi.c @@ -154,7 +154,43 @@ void ccspireflexjam(u16 delay){ #endif } +//! Writes bytes into the CC2420's RAM. Untested. +void ccspi_pokeram(u8 addr, char *data, int len){ + CLRSS; + //Begin with the start address. + ccspitrans8(0x80 | (addr & 0x7F)); + ccspitrans8(((addr>>1)&0xC0) // MSBits are high bits of 9-bit address. + // Read/!Write bit should be clear to write. + ); + + //Data goes here. + while(len--) + ccspitrans8(*data++); + + SETSS; +} +//! Read bytes from the CC2420's RAM. Untested. +void ccspi_peekram(u16 addr, u8 *data, u16 len){ + CLRSS; + + //Begin with the start address. + ccspitrans8(0x80 | (addr & 0x7F)); + ccspitrans8(((addr>>1)&0xC0) // MSBits are high bits of 9-bit address. + | BIT5 // Read/!Write bit should be set to read. + ); + + //Data goes here. + while(len--) + *data++=ccspitrans8(0); + + SETSS; +} + +//! Updates the Nonce's sequence number. +void ccspi_updaterxnonce(u32 seq){ + +} //! Writes a register u8 ccspi_regwrite(u8 reg, const u8 *buf, int len){ @@ -207,14 +243,31 @@ void ccspi_handle_fn( uint8_t const app, ccspisetup(); txdata(app,verb,0); break; + case CCSPI_PEEK_RAM: + i=cmddataword[1]; // Backup length. + ccspi_peekram(cmddataword[0], // First word is the address. + cmddata, // Return in the same buffer. + cmddataword[1] // Second word is the length. + ); + txdata(app,verb,i); + break; + case CCSPI_POKE_RAM: + ccspi_pokeram(cmddataword[0], //First word is address + cmddata+2, //Remainder of buffer is dat. + len-2 //Length implied by packet length. + ); + txdata(app,verb,0); + break; case CCSPI_RX: #ifdef FIFOP //Has there been an overflow? if((!FIFO)&&FIFOP){ - //debugstr("Clearing overflow"); + debugstr("Clearing overflow"); CLRSS; ccspitrans8(0x08); //SFLUSHRX SETSS; + txdata(app,verb,0); //no packet + return; } //Is there a packet? @@ -226,20 +279,100 @@ void ccspi_handle_fn( uint8_t const app, CLRSS; ccspitrans8(CCSPI_RXFIFO | 0x40); //ccspitrans8(0x3F|0x40); - cmddata[0]=0xff; //to be replaced with length - for(i=0;i