Browse Source

fix tx mode (disable manual calibration)

aanper 5 years ago
parent
commit
6a647f0fa3
1 changed files with 27 additions and 31 deletions
  1. 27 31
      applications/cc1101-workaround/cc1101-workaround.cpp

+ 27 - 31
applications/cc1101-workaround/cc1101-workaround.cpp

@@ -32,7 +32,7 @@ typedef struct {
 } FreqConfig;
 
 void setup_freq(CC1101* cc1101, const FreqConfig* config) {
-    cc1101->SpiWriteReg(CC1101_MCSM0, 0x08); // disalbe FS_AUTOCAL
+    // cc1101->SpiWriteReg(CC1101_MCSM0, 0x08); // disalbe FS_AUTOCAL
     cc1101->SpiWriteReg(CC1101_AGCCTRL2, 0x43 | 0x0C); // MAX_DVGA_GAIN to 11 for fast rssi
     cc1101->SpiWriteReg(CC1101_AGCCTRL0, 0xB0); // max AGC WAIT_TIME; 0 filter_length
     cc1101->SetMod(GFSK); // set to GFSK for fast rssi measurement | +8 is dcfilter off
@@ -40,6 +40,7 @@ void setup_freq(CC1101* cc1101, const FreqConfig* config) {
     cc1101->SetFreq(config->band->reg[0], config->band->reg[1], config->band->reg[2]);
     cc1101->SetChannel(config->channel);
 
+    /*
     //set test0 to 0x09
     cc1101->SpiWriteReg(CC1101_TEST0, 0x09);
     //set FSCAL2 to 0x2A to force VCO HIGH
@@ -47,6 +48,7 @@ void setup_freq(CC1101* cc1101, const FreqConfig* config) {
 
     // perform a manual calibration by issuing SCAL command
     cc1101->SpiStrobe(CC1101_SCAL);
+    */
 }
 
 int16_t rx_rssi(CC1101* cc1101, const FreqConfig* config) {
@@ -55,7 +57,7 @@ int16_t rx_rssi(CC1101* cc1101, const FreqConfig* config) {
     delayMicroseconds(RSSI_DELAY);
     
     // 1.4.8) read PKTSTATUS register while the radio is in RX state
-    uint8_t _pkt_status = cc1101->SpiReadStatus(CC1101_PKTSTATUS);
+    /*uint8_t _pkt_status = */ cc1101->SpiReadStatus(CC1101_PKTSTATUS);
     
     // 1.4.9) enter IDLE state by issuing a SIDLE command
     cc1101->SpiStrobe(CC1101_SIDLE);
@@ -68,9 +70,11 @@ int16_t rx_rssi(CC1101* cc1101, const FreqConfig* config) {
 }
 
 void tx(CC1101* cc1101, const FreqConfig* config) {
+    /*
     cc1101->SpiWriteReg(CC1101_MCSM0, 0x18); //enable FS_AUTOCAL
     cc1101->SpiWriteReg(CC1101_AGCCTRL2, 0x43); //back to recommended config
     cc1101->SpiWriteReg(CC1101_AGCCTRL0, 0x91); //back to recommended config
+    */
 
     cc1101->SetFreq(config->band->reg[0], config->band->reg[1], config->band->reg[2]);
     cc1101->SetChannel(config->channel);
@@ -286,9 +290,10 @@ extern "C" void cc1101_workaround(void* p) {
 
     Event event;
     while(1) {
-        if(osMessageQueueGet(event_queue, &event, NULL, 150) == osOK) {
-            State* state = (State*)acquire_mutex_block(&state_mutex);
+        osStatus_t event_status = osMessageQueueGet(event_queue, &event, NULL, 150);
+        State* state = (State*)acquire_mutex_block(&state_mutex);
 
+        if(event_status == osOK) {
             if(event.type == EventTypeKey) {
                 if(event.value.input.state && event.value.input.input == InputBack) {
                     printf("[cc1101] bye!\n");
@@ -326,40 +331,31 @@ extern "C" void cc1101_workaround(void* p) {
                     state->need_cc1101_conf = true;
                 }
             }
-
-            if(state->need_cc1101_conf) {
-                if(state->mode == ModeRx) {
-                    setup_freq(&cc1101, &FREQ_LIST[state->active_freq]);
-                    state->last_rssi = rx_rssi(&cc1101, &FREQ_LIST[state->active_freq]);
-                } else if(state->mode == ModeTx) {
-                    tx(&cc1101, &FREQ_LIST[state->active_freq]);
-                }
-
-                state->need_cc1101_conf = false;
-            }
-
-            digitalWrite(
-                led,
-                (state->last_rssi > RSSI_THRESHOLD && !state->need_cc1101_conf) ? LOW : HIGH
-            );
-
-            release_mutex(&state_mutex, state);
-            widget_update(widget);
         } else {
-            State* state = (State*)acquire_mutex_block(&state_mutex);
-
             if(!state->need_cc1101_conf && state->mode == ModeRx) {
                 state->last_rssi = rx_rssi(&cc1101, &FREQ_LIST[state->active_freq]);
             }
+        }
 
-            digitalWrite(
-                led,
-                (state->last_rssi > RSSI_THRESHOLD && !state->need_cc1101_conf) ? LOW : HIGH
-            );
+        if(state->need_cc1101_conf) {
+            if(state->mode == ModeRx) {
+                setup_freq(&cc1101, &FREQ_LIST[state->active_freq]);
+                state->last_rssi = rx_rssi(&cc1101, &FREQ_LIST[state->active_freq]);
+                // idle(&cc1101);
+            } else if(state->mode == ModeTx) {
+                tx(&cc1101, &FREQ_LIST[state->active_freq]);
+            }
 
-            release_mutex(&state_mutex, state);
-            widget_update(widget);
+            state->need_cc1101_conf = false;
         }
+
+        digitalWrite(
+            led,
+            (state->last_rssi > RSSI_THRESHOLD && !state->need_cc1101_conf) ? LOW : HIGH
+        );
+
+        release_mutex(&state_mutex, state);
+        widget_update(widget);
     }
 
     /*