From 0c53a410a2d82927261d39e74cd98ecc6b6eebf1 Mon Sep 17 00:00:00 2001 From: travisutk Date: Tue, 22 Feb 2011 23:05:22 +0000 Subject: [PATCH] CCSPI transmissions work. Cleaning it up now. git-svn-id: https://svn.code.sf.net/p/goodfet/code/trunk@937 12e2690d-a6be-4b82-a7b7-67c4a43b65c8 --- client/GoodFETCCSPI.py | 35 +++++++-------------------- client/goodfet.ccspi | 19 +++++++++++++++ firmware/apps/radios/ccspi.c | 47 ++++++++++++++++++++++++++++++------ 3 files changed, 68 insertions(+), 33 deletions(-) diff --git a/client/GoodFETCCSPI.py b/client/GoodFETCCSPI.py index 8172422..81e5434 100644 --- a/client/GoodFETCCSPI.py +++ b/client/GoodFETCCSPI.py @@ -19,6 +19,7 @@ class GoodFETCCSPI(GoodFET): #Set up the radio for ZigBee self.strobe(0x01); #SXOSCON + self.strobe(0x02); #SCAL self.poke(0x11, 0x0AC2); #MDMCTRL0 self.poke(0x12, 0x0500); #MDMCTRL1 self.poke(0x1C, 0x007F); #IOCFG0 @@ -125,6 +126,7 @@ class GoodFETCCSPI(GoodFET): fsctrl=self.peek(0x18)&~0x3FF; fsctrl=fsctrl+int(mhz-2048) self.poke(0x18,fsctrl); + self.strobe(0x02); def RF_getfreq(self): """Get the frequency in Hz.""" fsctrl=self.peek(0x18); @@ -154,9 +156,6 @@ class GoodFETCCSPI(GoodFET): contents. """ - # TODO -- Flush only if there's an overflow. - #self.strobe(0x08); #SFLUSHRX - data="\0"; self.data=data; self.writecmd(self.CCSPIAPP,0x80,len(data),data); @@ -166,29 +165,13 @@ class GoodFETCCSPI(GoodFET): if(len(buffer)==0): return None; return buffer; - def RF_rxpacket_old(self): - """Get a packet from the radio. Returns None if none is waiting. In - order to not require the SFD, FIFO, or FIFOP lines, this - implementation works by comparing the buffer to the older - contents. - """ - self.strobe(0x03); #SRXON - self.strobe(0x08); #SFLUSHRX - - buffer=range(0,0xff); - buffer[0]=0x3F | 0x40; #RXFIFO - buffer=self.trans(buffer); - - new=False; - for foo in range(0,ord(buffer[0])): - if buffer[foo]!=self.lastpacket[foo]: - new=True; - if not new: - return None; - - - self.lastpacket=buffer; - return buffer; + def RF_txpacket(self,packet): + """Send a packet through the radio.""" + self.writecmd(self.CCSPIAPP,0x81,len(packet),packet); + time.sleep(1); + self.strobe(0x09); + return; + def RF_carrier(self): """Hold a carrier wave on the present frequency.""" print "Don't know how to hold a carrier."; diff --git a/client/goodfet.ccspi b/client/goodfet.ccspi index a1facf0..63fc5e0 100755 --- a/client/goodfet.ccspi +++ b/client/goodfet.ccspi @@ -95,6 +95,25 @@ if(sys.argv[1]=="sniff"): packet=client.RF_rxpacket(); printpacket(packet); sys.stdout.flush(); +if(sys.argv[1]=="txtest"): + if len(sys.argv)>2: + freq=eval(sys.argv[2]); + if freq>100: + client.RF_setfreq(freq); + else: + print "Channels not yet supported." + print "Transmitting as %010x on %i MHz" % ( + client.RF_getsmac(), + client.RF_getfreq()/10**6); + + while 1: + client.RF_txpacket([0x0f, 0x01, 0x08, 0x82, + 0xff, 0xff, 0xff, 0xff, + 0x4d, 0x7d, 0x09, 0x00, + 0x1f, 0x00, 0xc0]); + print client.status(); + print; + if(sys.argv[1]=="peek"): start=0x0000; if(len(sys.argv)>2): diff --git a/firmware/apps/radios/ccspi.c b/firmware/apps/radios/ccspi.c index 5a3d5d6..f47e54c 100644 --- a/firmware/apps/radios/ccspi.c +++ b/firmware/apps/radios/ccspi.c @@ -139,8 +139,7 @@ void ccspi_handle_fn( uint8_t const app, txdata(app,verb,0); break; case CCSPI_RX: - #ifdef FIFOP - +#ifdef FIFOP //Has there been an overflow? if((!FIFO)&&FIFOP){ debugstr("Clearing overflow"); @@ -159,7 +158,7 @@ void ccspi_handle_fn( uint8_t const app, ccspitrans8(CCSPI_RXFIFO | 0x40); //ccspitrans8(0x3F|0x40); cmddata[0]=0xff; //to be replaced with length - for(i=0;i