10ms reflex.
[goodfet] / shellcode / chipcon / cc1110 / reflexframe.c
index b4f6765..9120ccf 100644 (file)
@@ -4,6 +4,7 @@
 char __xdata at 0xfe00 packet[256] ;
 
 char __xdata at 0xfdf0 cfg[5] ;
+char __xdata at 0xfdf8 freq[3] ;
 //! Save MDMCFG*
 void save_settings(){
   cfg[0]=MDMCFG0;
@@ -11,7 +12,11 @@ void save_settings(){
   cfg[2]=MDMCFG2;
   cfg[3]=MDMCFG3;
   cfg[4]=MDMCFG4;
-  
+  /*
+  freq[0]=FREQ0;
+  freq[1]=FREQ1;
+  freq[2]=FREQ2;
+  */
 }
 //! Restore MDMCFG*
 void restore_settings(){
@@ -20,18 +25,26 @@ void restore_settings(){
   MDMCFG2=cfg[2];
   MDMCFG3=cfg[3];
   MDMCFG4=cfg[4];
+  /*
+  FREQ0=freq[0];
+  FREQ1=freq[1];
+  FREQ2=freq[2];
+  */
 }
 
 void carrier(){
   // Set the system clock source to HS XOSC and max CPU speed,
   // ref. [clk]=>[clk_xosc.c]
+  /*
   SLEEP &= ~SLEEP_OSC_PD;
   while( !(SLEEP & SLEEP_XOSC_S) );
   CLKCON = (CLKCON & ~(CLKCON_CLKSPD | CLKCON_OSC)) | CLKSPD_DIV_1;
   while (CLKCON & CLKCON_OSC);
   SLEEP |= SLEEP_OSC_PD;
+  */
 
-
+  //FREQ0=0x5C;
+  
   /* Setup radio with settings from SmartRF® Studio. The default settings are
    * used, except that "unmodulated" is chosen in the "Simple RX tab". This
    * results in an umodulated carrier with a frequency of approx. 2.433 GHz.
@@ -40,12 +53,16 @@ void carrier(){
   //FSCTRL0   = 0x00;   // Frequency synthesizer control.
   
   
-  
-  MDMCFG4   = 0x86;   // Modem configuration.
-  MDMCFG3   = 0x83;   // Modem configuration.
-  MDMCFG2   = 0x30;   // Modem configuration.
-  MDMCFG1   = 0x22;   // Modem configuration.
-  MDMCFG0   = 0xF8;   // Modem configuration.
+  //Bandwidth, Symbol Rate
+  //MDMCFG4   = 0x86;
+  //Symbol Rate
+  //MDMCFG3   = 0x83;
+  //Sensitivity, shift-keying mode
+  //MDMCFG2   = 0x30;
+  //FEC, Premable, Spacing
+  //MDMCFG1   = 0x22;
+  //Channel Spacing
+  //MDMCFG0   = 0xF8;
   
   /* Settings not from SmartRF® Studio. Setting both sync word registers to
    * 0xAA = 0b10101010, i.e., the same as the preamble pattern. Not necessary,
@@ -59,17 +76,15 @@ void carrier(){
 #define RFON RFST = RFST_SIDLE; RFST = RFST_STX; while ((MARCSTATE & MARCSTATE_MARC_STATE) != MARC_STATE_TX);
 #define RFOFF RFST = RFST_SIDLE; //while ((MARCSTATE & MARCSTATE_MARC_STATE) != MARC_STATE_IDLE);
   //RFON;
-  //while(1);  
-  
-  
+  //while(1);
 }
 
 
 void sleepMillis(int ms) {
-       int j;
-       while (--ms > 0) { 
-               for (j=0; j<1200;j++); // about 1 millisecond
-       };
+  int j;
+  while (--ms > 0) { 
+    for (j=0; j<1200;j++); // about 1 millisecond
+  };
 }
 
 
@@ -84,41 +99,37 @@ void main(){
   
   //carrier();
   
-  //idle a bit.
-  RFST=RFST_SIDLE;
-  while(MARCSTATE!=MARC_STATE_IDLE);
-
+  
   while(1){
-    restore_settings();
     //idle a bit.
-    RFST=RFST_SFSTXON;
-    while(MARCSTATE!=MARC_STATE_FSTXON);
+    RFST=RFST_SIDLE;
+    while(MARCSTATE!=MARC_STATE_IDLE);
     
+    restore_settings();
+    //idle a bit, unecessary
+    //RFST=RFST_SFSTXON;
+    //while(MARCSTATE!=MARC_STATE_FSTXON);
     
-    sleepMillis(5);
+    //sleepMillis(100);
     rxwait();
     
     //idle w/ oscillator
-    RFST=RFST_SFSTXON;
-    while(MARCSTATE!=MARC_STATE_FSTXON);
-    
-    //HALT;
-    //sleepMillis(500);
-    //HALT;
-    
-    //RFOFF;
+    //RFST=RFST_SFSTXON;
+    //while(MARCSTATE!=MARC_STATE_FSTXON);
     
-    //SYNC1=0xAA;
-    //SYNC0=0xAA;
     
     //Transmit carrier for 10ms
     carrier();
     RFON;
+    //HALT;
+    //while(1);
+    //sleepMillis(200);
+    //sleepMillis(100);
+    //sleepMillis(50);
     
-    //sleepMillis(2000);
     
-    sleepMillis(500);
-    HALT;
+    sleepMillis(10);
+    //HALT;
   }
 }
 
@@ -126,6 +137,9 @@ void main(){
 void rxwait(){
   unsigned char len=16, i=0;
   
+  //Test to always carry.
+  //return;
+  
   do{
     //1-out the buffer.
     for(i=0;i<64;i++)
@@ -143,25 +157,19 @@ void rxwait(){
     RFST=RFST_SRX;
     while(MARCSTATE!=MARC_STATE_RX);
     
-    if(PKTCTRL0&1){
-      //auto length
-      while(i<len+3){ //len+3 if status is appended.
-       while(!RFTXRXIF); //Wait for byte to be ready.
-       RFTXRXIF=0;      //Clear the flag.
-       
-       packet[i++]=RFD; //Grab the next byte.
-       len=packet[0];   //First byte of the packet is the length.
-      }
-    }else{
-      //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.
+    //return;
+    
+    
+    //Fixed length
+    packet[i++]=PKTLEN;
+    while(i<3){ //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.