Slave Implementation of WANOT Slave

Dependencies:   SX1276Lib mbed-src

Revision:
0:80ebf9b1dd4f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SlaveBeacon.cpp	Mon May 23 22:28:07 2016 +0000
@@ -0,0 +1,108 @@
+#include "WANOT.h"
+
+/*
+ *  Global variables declarations
+ */
+ 
+extern SuperSlotStates SuperSlotState;
+
+volatile SlaveRegStates SlaveRegState = UnRegistered;  
+volatile Slave_Beacon_State Slave_Beacon_States = Beacon_Wait; 
+
+extern RadioEvents_t RadioEvents;
+extern SX1276MB1xAS Radio;
+
+extern uint16_t BufferSize;
+extern uint8_t Buffer[];
+
+extern int16_t RssiValue;
+extern int8_t SnrValue;
+
+extern uint32_t LORA_Channels[];
+
+extern uint8_t TDMAChannel;
+
+volatile uint8_t Beacon_New_Rx_Flag = 0;
+volatile uint8_t Beacon_Counter = 0;
+
+void Beacon_OnRxDone(uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr)
+{
+    Radio.Sleep();
+    BufferSize = size;
+    memcpy(Buffer, payload, BufferSize);
+    RssiValue = rssi;
+    SnrValue = snr;
+    debug("Beacon_OnRxDone!!\n\r");
+
+    Beacon_New_Rx_Flag = 0;
+
+    if(Buffer[0] == SETUP_BEACON_SYNCWORD) {
+        TDMAChannel = Buffer[1];
+        debug("Beacon Recieved!!\n\r");
+        Slave_Beacon_States = Beacon_Recieved;
+    } else {
+        debug("Beacon Mismatch\n\r");
+    }
+}
+
+void Beacon_OnRxTimeout(void)
+{
+    Beacon_Counter++;
+    Beacon_New_Rx_Flag = 0;
+    debug("Beacon Not Found!!\n\r");
+}
+
+
+void SetUp_Beacon(void)
+{
+    debug("Beacon SetUP State!!\n\r");
+    
+    Beacon_New_Rx_Flag = 0;
+    Beacon_Counter = 0;
+
+    Slave_Beacon_States = Beacon_Wait;
+
+    RadioEvents.RxDone = Beacon_OnRxDone;
+    RadioEvents.RxTimeout = Beacon_OnRxTimeout;
+    Radio.Init(&RadioEvents);
+
+    Radio.SetChannel(SET_UP_FREQUENCY);
+
+    Radio.SetTxConfig(MODEM_LORA, TX_OUTPUT_POWER, 0, SET_UP_LORA_BANDWIDTH,
+                      SET_UP_LORA_SPREADING_FACTOR, LORA_CODINGRATE,
+                      LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON,
+                      SET_UP_LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP,
+                      LORA_IQ_INVERSION_ON, 2000000);
+
+    Radio.SetRxConfig(MODEM_LORA, SET_UP_LORA_BANDWIDTH, SET_UP_LORA_SPREADING_FACTOR,
+                      LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH,
+                      LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON, 0,
+                      SET_UP_LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP,
+                      LORA_IQ_INVERSION_ON, true);
+
+    while((SuperSlotState == SetUp_Beacon_Phase) && (Beacon_Counter != 8) && (Slave_Beacon_States != Beacon_Recieved)) {
+        debug("Waiting for Beacon\n\r");
+        Beacon_New_Rx_Flag = 1;
+        Radio.Rx( RX_TIMEOUT_VALUE );
+        while(Beacon_New_Rx_Flag == 1);
+    }
+
+
+    Radio.SetChannel(LORA_Channels[TDMAChannel]);
+
+    Radio.SetTxConfig(MODEM_LORA, TX_OUTPUT_POWER, 0, SET_UP_LORA_BANDWIDTH,
+                      SET_UP_LORA_SPREADING_FACTOR, LORA_CODINGRATE,
+                      LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON,
+                      SET_UP_LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP,
+                      LORA_IQ_INVERSION_ON, 2000000);
+
+    Radio.SetRxConfig(MODEM_LORA, SET_UP_LORA_BANDWIDTH, SET_UP_LORA_SPREADING_FACTOR,
+                      LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH,
+                      LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON, 0,
+                      SET_UP_LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP,
+                      LORA_IQ_INVERSION_ON, true);
+
+
+    debug("Finished Beacon State\n\r");
+    //RTC Sleep for the rest of setup beacon
+}