Slave Implementation of WANOT Slave
Dependencies: SX1276Lib mbed-src
SlaveBeacon.cpp@0:80ebf9b1dd4f, 2016-05-23 (annotated)
- Committer:
- semsem
- Date:
- Mon May 23 22:28:07 2016 +0000
- Revision:
- 0:80ebf9b1dd4f
WANOT
Who changed what in which revision?
User | Revision | Line number | New 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 | } |