Slave Implementation of WANOT Slave

Dependencies:   SX1276Lib mbed-src

Committer:
semsem
Date:
Mon May 23 22:28:07 2016 +0000
Revision:
0:80ebf9b1dd4f
WANOT

Who changed what in which revision?

UserRevisionLine numberNew contents of line
semsem 0:80ebf9b1dd4f 1 #include "WANOT.h"
semsem 0:80ebf9b1dd4f 2
semsem 0:80ebf9b1dd4f 3 /*
semsem 0:80ebf9b1dd4f 4 * Global variables declarations
semsem 0:80ebf9b1dd4f 5 */
semsem 0:80ebf9b1dd4f 6
semsem 0:80ebf9b1dd4f 7 extern SuperSlotStates SuperSlotState;
semsem 0:80ebf9b1dd4f 8
semsem 0:80ebf9b1dd4f 9 volatile SlaveRegStates SlaveRegState = UnRegistered;
semsem 0:80ebf9b1dd4f 10 volatile Slave_Beacon_State Slave_Beacon_States = Beacon_Wait;
semsem 0:80ebf9b1dd4f 11
semsem 0:80ebf9b1dd4f 12 extern RadioEvents_t RadioEvents;
semsem 0:80ebf9b1dd4f 13 extern SX1276MB1xAS Radio;
semsem 0:80ebf9b1dd4f 14
semsem 0:80ebf9b1dd4f 15 extern uint16_t BufferSize;
semsem 0:80ebf9b1dd4f 16 extern uint8_t Buffer[];
semsem 0:80ebf9b1dd4f 17
semsem 0:80ebf9b1dd4f 18 extern int16_t RssiValue;
semsem 0:80ebf9b1dd4f 19 extern int8_t SnrValue;
semsem 0:80ebf9b1dd4f 20
semsem 0:80ebf9b1dd4f 21 extern uint32_t LORA_Channels[];
semsem 0:80ebf9b1dd4f 22
semsem 0:80ebf9b1dd4f 23 extern uint8_t TDMAChannel;
semsem 0:80ebf9b1dd4f 24
semsem 0:80ebf9b1dd4f 25 volatile uint8_t Beacon_New_Rx_Flag = 0;
semsem 0:80ebf9b1dd4f 26 volatile uint8_t Beacon_Counter = 0;
semsem 0:80ebf9b1dd4f 27
semsem 0:80ebf9b1dd4f 28 void Beacon_OnRxDone(uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr)
semsem 0:80ebf9b1dd4f 29 {
semsem 0:80ebf9b1dd4f 30 Radio.Sleep();
semsem 0:80ebf9b1dd4f 31 BufferSize = size;
semsem 0:80ebf9b1dd4f 32 memcpy(Buffer, payload, BufferSize);
semsem 0:80ebf9b1dd4f 33 RssiValue = rssi;
semsem 0:80ebf9b1dd4f 34 SnrValue = snr;
semsem 0:80ebf9b1dd4f 35 debug("Beacon_OnRxDone!!\n\r");
semsem 0:80ebf9b1dd4f 36
semsem 0:80ebf9b1dd4f 37 Beacon_New_Rx_Flag = 0;
semsem 0:80ebf9b1dd4f 38
semsem 0:80ebf9b1dd4f 39 if(Buffer[0] == SETUP_BEACON_SYNCWORD) {
semsem 0:80ebf9b1dd4f 40 TDMAChannel = Buffer[1];
semsem 0:80ebf9b1dd4f 41 debug("Beacon Recieved!!\n\r");
semsem 0:80ebf9b1dd4f 42 Slave_Beacon_States = Beacon_Recieved;
semsem 0:80ebf9b1dd4f 43 } else {
semsem 0:80ebf9b1dd4f 44 debug("Beacon Mismatch\n\r");
semsem 0:80ebf9b1dd4f 45 }
semsem 0:80ebf9b1dd4f 46 }
semsem 0:80ebf9b1dd4f 47
semsem 0:80ebf9b1dd4f 48 void Beacon_OnRxTimeout(void)
semsem 0:80ebf9b1dd4f 49 {
semsem 0:80ebf9b1dd4f 50 Beacon_Counter++;
semsem 0:80ebf9b1dd4f 51 Beacon_New_Rx_Flag = 0;
semsem 0:80ebf9b1dd4f 52 debug("Beacon Not Found!!\n\r");
semsem 0:80ebf9b1dd4f 53 }
semsem 0:80ebf9b1dd4f 54
semsem 0:80ebf9b1dd4f 55
semsem 0:80ebf9b1dd4f 56 void SetUp_Beacon(void)
semsem 0:80ebf9b1dd4f 57 {
semsem 0:80ebf9b1dd4f 58 debug("Beacon SetUP State!!\n\r");
semsem 0:80ebf9b1dd4f 59
semsem 0:80ebf9b1dd4f 60 Beacon_New_Rx_Flag = 0;
semsem 0:80ebf9b1dd4f 61 Beacon_Counter = 0;
semsem 0:80ebf9b1dd4f 62
semsem 0:80ebf9b1dd4f 63 Slave_Beacon_States = Beacon_Wait;
semsem 0:80ebf9b1dd4f 64
semsem 0:80ebf9b1dd4f 65 RadioEvents.RxDone = Beacon_OnRxDone;
semsem 0:80ebf9b1dd4f 66 RadioEvents.RxTimeout = Beacon_OnRxTimeout;
semsem 0:80ebf9b1dd4f 67 Radio.Init(&RadioEvents);
semsem 0:80ebf9b1dd4f 68
semsem 0:80ebf9b1dd4f 69 Radio.SetChannel(SET_UP_FREQUENCY);
semsem 0:80ebf9b1dd4f 70
semsem 0:80ebf9b1dd4f 71 Radio.SetTxConfig(MODEM_LORA, TX_OUTPUT_POWER, 0, SET_UP_LORA_BANDWIDTH,
semsem 0:80ebf9b1dd4f 72 SET_UP_LORA_SPREADING_FACTOR, LORA_CODINGRATE,
semsem 0:80ebf9b1dd4f 73 LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON,
semsem 0:80ebf9b1dd4f 74 SET_UP_LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP,
semsem 0:80ebf9b1dd4f 75 LORA_IQ_INVERSION_ON, 2000000);
semsem 0:80ebf9b1dd4f 76
semsem 0:80ebf9b1dd4f 77 Radio.SetRxConfig(MODEM_LORA, SET_UP_LORA_BANDWIDTH, SET_UP_LORA_SPREADING_FACTOR,
semsem 0:80ebf9b1dd4f 78 LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH,
semsem 0:80ebf9b1dd4f 79 LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON, 0,
semsem 0:80ebf9b1dd4f 80 SET_UP_LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP,
semsem 0:80ebf9b1dd4f 81 LORA_IQ_INVERSION_ON, true);
semsem 0:80ebf9b1dd4f 82
semsem 0:80ebf9b1dd4f 83 while((SuperSlotState == SetUp_Beacon_Phase) && (Beacon_Counter != 8) && (Slave_Beacon_States != Beacon_Recieved)) {
semsem 0:80ebf9b1dd4f 84 debug("Waiting for Beacon\n\r");
semsem 0:80ebf9b1dd4f 85 Beacon_New_Rx_Flag = 1;
semsem 0:80ebf9b1dd4f 86 Radio.Rx( RX_TIMEOUT_VALUE );
semsem 0:80ebf9b1dd4f 87 while(Beacon_New_Rx_Flag == 1);
semsem 0:80ebf9b1dd4f 88 }
semsem 0:80ebf9b1dd4f 89
semsem 0:80ebf9b1dd4f 90
semsem 0:80ebf9b1dd4f 91 Radio.SetChannel(LORA_Channels[TDMAChannel]);
semsem 0:80ebf9b1dd4f 92
semsem 0:80ebf9b1dd4f 93 Radio.SetTxConfig(MODEM_LORA, TX_OUTPUT_POWER, 0, SET_UP_LORA_BANDWIDTH,
semsem 0:80ebf9b1dd4f 94 SET_UP_LORA_SPREADING_FACTOR, LORA_CODINGRATE,
semsem 0:80ebf9b1dd4f 95 LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON,
semsem 0:80ebf9b1dd4f 96 SET_UP_LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP,
semsem 0:80ebf9b1dd4f 97 LORA_IQ_INVERSION_ON, 2000000);
semsem 0:80ebf9b1dd4f 98
semsem 0:80ebf9b1dd4f 99 Radio.SetRxConfig(MODEM_LORA, SET_UP_LORA_BANDWIDTH, SET_UP_LORA_SPREADING_FACTOR,
semsem 0:80ebf9b1dd4f 100 LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH,
semsem 0:80ebf9b1dd4f 101 LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON, 0,
semsem 0:80ebf9b1dd4f 102 SET_UP_LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP,
semsem 0:80ebf9b1dd4f 103 LORA_IQ_INVERSION_ON, true);
semsem 0:80ebf9b1dd4f 104
semsem 0:80ebf9b1dd4f 105
semsem 0:80ebf9b1dd4f 106 debug("Finished Beacon State\n\r");
semsem 0:80ebf9b1dd4f 107 //RTC Sleep for the rest of setup beacon
semsem 0:80ebf9b1dd4f 108 }