# Use lower RAM if needed.
CC=sdcc --code-loc 0xF000
-objs=crystal.ihx txpacket.ihx rxpacket.ihx txrxpacket.ihx reflex.ihx
+objs=crystal.ihx txpacket.ihx rxpacket.ihx txrxpacket.ihx reflex.ihx rxpacketp25.ihx reflexframe.ihx
all: $(objs)
--- /dev/null
+#include <cc1110.h>
+#include "cc1110-ext.h"
+
+char __xdata at 0xfe00 packet[256] ;
+
+void sleepMillis(int ms) {
+ int j;
+ while (--ms > 0) {
+ for (j=0; j<1200;j++); // about 1 millisecond
+ };
+}
+
+//! Wait for a packet to come, then immediately return.
+void rxwait(){
+ //Disable interrupts.
+ RFTXRXIE=0;
+
+ //idle a bit.
+ RFST=RFST_SIDLE;
+ while(MARCSTATE!=MARC_STATE_IDLE);
+
+ //Begin to receive.
+ RFST=RFST_SRX;
+ while(MARCSTATE!=MARC_STATE_RX);
+
+ //Incoming! Return to let the jammer handle things.
+
+}
+
+//! Reflexively jam on the present channel by responding to a signal with a carrier wave.
+void main(){
+ unsigned char threshold=packet[0], i=0, rssi=0;;
+
+
+ //Disable interrupts.
+ RFTXRXIE=0;
+
+ //idle a bit.
+ //RFST=RFST_SIDLE;
+ //while(MARCSTATE!=MARC_STATE_IDLE);
+
+ while(1){
+
+ rxwait();
+
+ //idle a bit.
+ RFST=RFST_SIDLE;
+ while(MARCSTATE!=MARC_STATE_IDLE);
+
+ SYNC1=0xAA;
+ SYNC0=0xAA;
+
+ //Transmit carrier for 10ms
+ RFST=RFST_STX;
+ while(MARCSTATE!=MARC_STATE_TX);
+ sleepMillis(20);
+
+ //Carrier will clear when the loop continue,
+ //but we can HALT to give the host a chance to take over.
+ HALT;
+ }
+ RFST = RFST_SIDLE; //End transmit.
+
+ HALT;
+}
--- /dev/null
+#include <cc1110.h>
+#include "cc1110-ext.h"
+
+#define MAXLEN 0xFF
+char __xdata at 0xfe00 packet[MAXLEN] ;
+
+//! Receives a packet out of the radio from 0xFE00.
+void main(){
+ unsigned char len=16, i=0;
+
+ do{
+ //1-out the buffer.
+ for(i=0;i<64;i++)
+ packet[i]=0xFF;
+ i=0;
+
+ //Disable interrupts.
+ RFTXRXIE=0;
+
+ //idle a bit.
+ RFST=RFST_SIDLE;
+ while(MARCSTATE!=MARC_STATE_IDLE);
+
+ //Begin to receive.
+ RFST=RFST_SRX;
+ while(MARCSTATE!=MARC_STATE_RX);
+
+ //Fixed length
+ packet[i++]=PKTLEN;
+ while(i<PKTLEN){
+ while(!RFTXRXIF); //Wait for byte to be ready.
+ RFTXRXIF=0; //Clear the flag.
+
+ packet[i++]=RFD; //Grab the next byte.
+ }
+
+ RFST = RFST_SIDLE; //End receive.
+
+ //This while loop can be used for filtering. Unused for now.
+ }while(packet[1]!=(char) 0xdd || packet[2]!=(char) 0x55);
+
+ HALT;
+}
+