Slave Implementation of WANOT Slave
Dependencies: SX1276Lib mbed-src
SlaveBeacon.cpp
- Committer:
- semsem
- Date:
- 2016-05-23
- Revision:
- 0:80ebf9b1dd4f
File content as of revision 0:80ebf9b1dd4f:
#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 }