First attempt at LoRa USB Tx

Dependencies:   BufferedSerial SX1276GenericLib mbed

Fork of DISCO-L072CZ-LRWAN1_LoRa_PingPong by ST

Committer:
akashvibhute
Date:
Tue Jan 02 06:34:03 2018 +0000
Revision:
11:52f7b34f1d3a
Parent:
10:f84959c2e044
First attempt at LoRa USB Tx

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Helmut64 0:c43b6919ae15 1 /*
Helmut64 0:c43b6919ae15 2 * Copyright (c) 2017 Helmut Tschemernjak
Helmut64 0:c43b6919ae15 3 * 30826 Garbsen (Hannover) Germany
Helmut64 0:c43b6919ae15 4 * Licensed under the Apache License, Version 2.0);
Helmut64 0:c43b6919ae15 5 */
Helmut64 0:c43b6919ae15 6 #include "main.h"
Helmut64 0:c43b6919ae15 7
Helmut64 0:c43b6919ae15 8 DigitalOut myled(LED1);
Helmut64 0:c43b6919ae15 9 BufferedSerial *ser;
Helmut64 0:c43b6919ae15 10
akashvibhute 11:52f7b34f1d3a 11
akashvibhute 11:52f7b34f1d3a 12 #ifdef FEATURE_LORA
akashvibhute 11:52f7b34f1d3a 13
akashvibhute 11:52f7b34f1d3a 14 /* Set this flag to '1' to display debug messages on the console */
akashvibhute 11:52f7b34f1d3a 15 #define DEBUG_MESSAGE 0
akashvibhute 11:52f7b34f1d3a 16
akashvibhute 11:52f7b34f1d3a 17 /* Set this flag to '1' to use the LoRa modulation or to '0' to use FSK modulation */
akashvibhute 11:52f7b34f1d3a 18 #define USE_MODEM_LORA 1
akashvibhute 11:52f7b34f1d3a 19 #define USE_MODEM_FSK !USE_MODEM_LORA
akashvibhute 11:52f7b34f1d3a 20 #define RF_FREQUENCY 915000000//RF_FREQUENCY_868_1 // Hz
akashvibhute 11:52f7b34f1d3a 21 #define TX_OUTPUT_POWER 20 // 14 dBm
akashvibhute 11:52f7b34f1d3a 22
akashvibhute 11:52f7b34f1d3a 23 #if USE_MODEM_LORA == 1
akashvibhute 11:52f7b34f1d3a 24
akashvibhute 11:52f7b34f1d3a 25 #define LORA_BANDWIDTH 125000 // LoRa default, details in SX1276::BandwidthMap
akashvibhute 11:52f7b34f1d3a 26 #define LORA_SPREADING_FACTOR LORA_SF12
akashvibhute 11:52f7b34f1d3a 27 #define LORA_CODINGRATE LORA_ERROR_CODING_RATE_4_5
akashvibhute 11:52f7b34f1d3a 28
akashvibhute 11:52f7b34f1d3a 29 #define LORA_PREAMBLE_LENGTH 8 // Same for Tx and Rx
akashvibhute 11:52f7b34f1d3a 30 #define LORA_SYMBOL_TIMEOUT 5 // Symbols
akashvibhute 11:52f7b34f1d3a 31 #define LORA_FIX_LENGTH_PAYLOAD_ON false
akashvibhute 11:52f7b34f1d3a 32 #define LORA_FHSS_ENABLED false
akashvibhute 11:52f7b34f1d3a 33 #define LORA_NB_SYMB_HOP 4
akashvibhute 11:52f7b34f1d3a 34 #define LORA_IQ_INVERSION_ON false
akashvibhute 11:52f7b34f1d3a 35 #define LORA_CRC_ENABLED true
akashvibhute 11:52f7b34f1d3a 36
akashvibhute 11:52f7b34f1d3a 37 #elif USE_MODEM_FSK == 1
akashvibhute 11:52f7b34f1d3a 38
akashvibhute 11:52f7b34f1d3a 39 #define FSK_FDEV 25000 // Hz
akashvibhute 11:52f7b34f1d3a 40 #define FSK_DATARATE 19200 // bps
akashvibhute 11:52f7b34f1d3a 41 #define FSK_BANDWIDTH 50000 // Hz
akashvibhute 11:52f7b34f1d3a 42 #define FSK_AFC_BANDWIDTH 83333 // Hz
akashvibhute 11:52f7b34f1d3a 43 #define FSK_PREAMBLE_LENGTH 5 // Same for Tx and Rx
akashvibhute 11:52f7b34f1d3a 44 #define FSK_FIX_LENGTH_PAYLOAD_ON false
akashvibhute 11:52f7b34f1d3a 45 #define FSK_CRC_ENABLED true
akashvibhute 11:52f7b34f1d3a 46
akashvibhute 11:52f7b34f1d3a 47 #else
akashvibhute 11:52f7b34f1d3a 48 #error "Please define a modem in the compiler options."
akashvibhute 11:52f7b34f1d3a 49 #endif
akashvibhute 11:52f7b34f1d3a 50
akashvibhute 11:52f7b34f1d3a 51
akashvibhute 11:52f7b34f1d3a 52 #define RX_TIMEOUT_VALUE 8000//3500 // in ms
akashvibhute 11:52f7b34f1d3a 53
akashvibhute 11:52f7b34f1d3a 54 //#define BUFFER_SIZE 32 // Define the payload size here
akashvibhute 11:52f7b34f1d3a 55 #define BUFFER_SIZE 4//64 // Define the payload size here
akashvibhute 11:52f7b34f1d3a 56
akashvibhute 11:52f7b34f1d3a 57 /*
akashvibhute 11:52f7b34f1d3a 58 * Global variables declarations
akashvibhute 11:52f7b34f1d3a 59 */
akashvibhute 11:52f7b34f1d3a 60 typedef enum
akashvibhute 11:52f7b34f1d3a 61 {
akashvibhute 11:52f7b34f1d3a 62 LOWPOWER = 0,
akashvibhute 11:52f7b34f1d3a 63 IDLE,
akashvibhute 11:52f7b34f1d3a 64
akashvibhute 11:52f7b34f1d3a 65 RX,
akashvibhute 11:52f7b34f1d3a 66 RX_TIMEOUT,
akashvibhute 11:52f7b34f1d3a 67 RX_ERROR,
akashvibhute 11:52f7b34f1d3a 68
akashvibhute 11:52f7b34f1d3a 69 TX,
akashvibhute 11:52f7b34f1d3a 70 TX_TIMEOUT,
akashvibhute 11:52f7b34f1d3a 71
akashvibhute 11:52f7b34f1d3a 72 CAD,
akashvibhute 11:52f7b34f1d3a 73 CAD_DONE
akashvibhute 11:52f7b34f1d3a 74 } AppStates_t;
akashvibhute 11:52f7b34f1d3a 75
akashvibhute 11:52f7b34f1d3a 76 volatile AppStates_t State = LOWPOWER;
akashvibhute 11:52f7b34f1d3a 77
akashvibhute 11:52f7b34f1d3a 78 /*!
akashvibhute 11:52f7b34f1d3a 79 * Radio events function pointer
akashvibhute 11:52f7b34f1d3a 80 */
akashvibhute 11:52f7b34f1d3a 81 static RadioEvents_t RadioEvents;
akashvibhute 11:52f7b34f1d3a 82
akashvibhute 11:52f7b34f1d3a 83 /*
akashvibhute 11:52f7b34f1d3a 84 * Global variables declarations
akashvibhute 11:52f7b34f1d3a 85 */
akashvibhute 11:52f7b34f1d3a 86 SX1276Generic *Radio;
akashvibhute 11:52f7b34f1d3a 87
akashvibhute 11:52f7b34f1d3a 88
akashvibhute 11:52f7b34f1d3a 89 //const uint8_t PingMsg[] = { 0xff, 0xff, 0x00, 0x00, 'P', 'I', 'N', 'G'};// "PING";
akashvibhute 11:52f7b34f1d3a 90 const uint8_t PingMsg[] = { 'P', 'I', 'N', 'G'};// "PING";
akashvibhute 11:52f7b34f1d3a 91 //const uint8_t PongMsg[] = { 0xff, 0xff, 0x00, 0x00, 'P', 'O', 'N', 'G'};// "PONG";
akashvibhute 11:52f7b34f1d3a 92 const uint8_t PongMsg[] = { 'P', 'O', 'N', 'G'};// "PONG";
akashvibhute 11:52f7b34f1d3a 93
akashvibhute 11:52f7b34f1d3a 94 uint16_t BufferSize = BUFFER_SIZE;
akashvibhute 11:52f7b34f1d3a 95 uint8_t *Buffer;
akashvibhute 11:52f7b34f1d3a 96
akashvibhute 11:52f7b34f1d3a 97 DigitalOut *led3;
akashvibhute 11:52f7b34f1d3a 98 DigitalOut *led = new DigitalOut(LED1);
akashvibhute 11:52f7b34f1d3a 99
akashvibhute 11:52f7b34f1d3a 100 uint8_t i;
akashvibhute 11:52f7b34f1d3a 101 bool isMaster = false;
akashvibhute 11:52f7b34f1d3a 102
akashvibhute 11:52f7b34f1d3a 103 uint8_t SX1276DataTx[4];
akashvibhute 11:52f7b34f1d3a 104 uint8_t SX1276DataRx[4];
akashvibhute 11:52f7b34f1d3a 105 bool mode = false; // false is slave, true is master
akashvibhute 11:52f7b34f1d3a 106
akashvibhute 11:52f7b34f1d3a 107 uint8_t serialRxBuffer[4];
Helmut64 0:c43b6919ae15 108 int main() {
Helmut64 0:c43b6919ae15 109 SystemClock_Config();
Helmut64 0:c43b6919ae15 110 ser = new BufferedSerial(USBTX, USBRX);
akashvibhute 11:52f7b34f1d3a 111 ser->baud(115200);
Helmut64 0:c43b6919ae15 112 ser->format(8);
Helmut64 0:c43b6919ae15 113 ser->printf("Hello World\n\r");
Helmut64 0:c43b6919ae15 114 myled = 1;
Helmut64 0:c43b6919ae15 115
akashvibhute 11:52f7b34f1d3a 116 #if( defined ( TARGET_KL25Z ) || defined ( TARGET_LPC11U6X ) )
akashvibhute 11:52f7b34f1d3a 117 DigitalOut *led = new DigitalOut(LED2);
akashvibhute 11:52f7b34f1d3a 118 #elif defined(TARGET_NUCLEO_L073RZ)
akashvibhute 11:52f7b34f1d3a 119 DigitalOut *led = new DigitalOut(LED4); // RX red
akashvibhute 11:52f7b34f1d3a 120 led3 = new DigitalOut(LED3); // TX blue
akashvibhute 11:52f7b34f1d3a 121 #else
akashvibhute 11:52f7b34f1d3a 122 DigitalOut *led = new DigitalOut(LED1);
akashvibhute 11:52f7b34f1d3a 123 led3 = led;
akashvibhute 11:52f7b34f1d3a 124 #endif
akashvibhute 11:52f7b34f1d3a 125
akashvibhute 11:52f7b34f1d3a 126 Buffer = new uint8_t[BUFFER_SIZE];
akashvibhute 11:52f7b34f1d3a 127 *led3 = 1;
akashvibhute 11:52f7b34f1d3a 128
akashvibhute 11:52f7b34f1d3a 129 #ifdef B_L072Z_LRWAN1_LORA
akashvibhute 11:52f7b34f1d3a 130 Radio = new SX1276Generic(NULL, MURATA_SX1276,
akashvibhute 11:52f7b34f1d3a 131 LORA_SPI_MOSI, LORA_SPI_MISO, LORA_SPI_SCLK, LORA_CS, LORA_RESET,
akashvibhute 11:52f7b34f1d3a 132 LORA_DIO0, LORA_DIO1, LORA_DIO2, LORA_DIO3, LORA_DIO4, LORA_DIO5,
akashvibhute 11:52f7b34f1d3a 133 LORA_ANT_RX, LORA_ANT_TX, LORA_ANT_BOOST, LORA_TCXO);
akashvibhute 11:52f7b34f1d3a 134 #else // RFM95
akashvibhute 11:52f7b34f1d3a 135 Radio = new SX1276Generic(NULL, RFM95_SX1276,
akashvibhute 11:52f7b34f1d3a 136 LORA_SPI_MOSI, LORA_SPI_MISO, LORA_SPI_SCLK, LORA_CS, LORA_RESET,
akashvibhute 11:52f7b34f1d3a 137 LORA_DIO0, LORA_DIO1, LORA_DIO2, LORA_DIO3, LORA_DIO4, LORA_DIO5);
akashvibhute 11:52f7b34f1d3a 138
akashvibhute 11:52f7b34f1d3a 139 #endif
akashvibhute 11:52f7b34f1d3a 140
akashvibhute 11:52f7b34f1d3a 141
akashvibhute 11:52f7b34f1d3a 142 isMaster = true;
akashvibhute 11:52f7b34f1d3a 143
akashvibhute 11:52f7b34f1d3a 144 dprintf("SX1276 Ping Pong Demo Application" );
akashvibhute 11:52f7b34f1d3a 145 dprintf("Freqency: %.1f", (double)RF_FREQUENCY/1000000.0);
akashvibhute 11:52f7b34f1d3a 146 dprintf("TXPower: %d dBm", TX_OUTPUT_POWER);
akashvibhute 11:52f7b34f1d3a 147 #if USE_MODEM_LORA == 1
akashvibhute 11:52f7b34f1d3a 148 dprintf("Bandwidth: %d Hz", LORA_BANDWIDTH);
akashvibhute 11:52f7b34f1d3a 149 dprintf("Spreading factor: SF%d", LORA_SPREADING_FACTOR);
akashvibhute 11:52f7b34f1d3a 150 #elif USE_MODEM_FSK == 1
akashvibhute 11:52f7b34f1d3a 151 dprintf("Bandwidth: %d kHz", FSK_BANDWIDTH);
akashvibhute 11:52f7b34f1d3a 152 dprintf("Baudrate: %d", FSK_DATARATE);
akashvibhute 11:52f7b34f1d3a 153 #endif
akashvibhute 11:52f7b34f1d3a 154 // Initialize Radio driver
akashvibhute 11:52f7b34f1d3a 155 RadioEvents.TxDone = OnTxDone;
akashvibhute 11:52f7b34f1d3a 156 RadioEvents.RxDone = OnRxDone;
akashvibhute 11:52f7b34f1d3a 157 RadioEvents.RxError = OnRxError;
akashvibhute 11:52f7b34f1d3a 158 RadioEvents.TxTimeout = OnTxTimeout;
akashvibhute 11:52f7b34f1d3a 159 RadioEvents.RxTimeout = OnRxTimeout;
akashvibhute 11:52f7b34f1d3a 160 if (Radio->Init( &RadioEvents ) == false) {
akashvibhute 11:52f7b34f1d3a 161 while(1) {
akashvibhute 11:52f7b34f1d3a 162 dprintf("Radio could not be detected!");
akashvibhute 11:52f7b34f1d3a 163 wait( 1 );
akashvibhute 11:52f7b34f1d3a 164 }
akashvibhute 11:52f7b34f1d3a 165 }
akashvibhute 11:52f7b34f1d3a 166
akashvibhute 11:52f7b34f1d3a 167
akashvibhute 11:52f7b34f1d3a 168 switch(Radio->DetectBoardType()) {
akashvibhute 11:52f7b34f1d3a 169 case SX1276MB1LAS:
akashvibhute 11:52f7b34f1d3a 170 if (DEBUG_MESSAGE)
akashvibhute 11:52f7b34f1d3a 171 dprintf(" > Board Type: SX1276MB1LAS <");
akashvibhute 11:52f7b34f1d3a 172 break;
akashvibhute 11:52f7b34f1d3a 173 case SX1276MB1MAS:
akashvibhute 11:52f7b34f1d3a 174 if (DEBUG_MESSAGE)
akashvibhute 11:52f7b34f1d3a 175 dprintf(" > Board Type: SX1276MB1LAS <");
akashvibhute 11:52f7b34f1d3a 176 case MURATA_SX1276:
akashvibhute 11:52f7b34f1d3a 177 if (DEBUG_MESSAGE)
akashvibhute 11:52f7b34f1d3a 178 dprintf(" > Board Type: MURATA_SX1276_STM32L0 <");
akashvibhute 11:52f7b34f1d3a 179 break;
akashvibhute 11:52f7b34f1d3a 180 case RFM95_SX1276:
akashvibhute 11:52f7b34f1d3a 181 if (DEBUG_MESSAGE)
akashvibhute 11:52f7b34f1d3a 182 dprintf(" > HopeRF RFM95xx <");
akashvibhute 11:52f7b34f1d3a 183 break;
akashvibhute 11:52f7b34f1d3a 184 default:
akashvibhute 11:52f7b34f1d3a 185 dprintf(" > Board Type: unknown <");
akashvibhute 11:52f7b34f1d3a 186 }
akashvibhute 11:52f7b34f1d3a 187
akashvibhute 11:52f7b34f1d3a 188 Radio->SetChannel(RF_FREQUENCY );
akashvibhute 11:52f7b34f1d3a 189
akashvibhute 11:52f7b34f1d3a 190 #if USE_MODEM_LORA == 1
akashvibhute 11:52f7b34f1d3a 191
akashvibhute 11:52f7b34f1d3a 192 if (LORA_FHSS_ENABLED)
akashvibhute 11:52f7b34f1d3a 193 dprintf(" > LORA FHSS Mode <");
akashvibhute 11:52f7b34f1d3a 194 if (!LORA_FHSS_ENABLED)
akashvibhute 11:52f7b34f1d3a 195 dprintf(" > LORA Mode <");
akashvibhute 11:52f7b34f1d3a 196
akashvibhute 11:52f7b34f1d3a 197 Radio->SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH,
akashvibhute 11:52f7b34f1d3a 198 LORA_SPREADING_FACTOR, LORA_CODINGRATE,
akashvibhute 11:52f7b34f1d3a 199 LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON,
akashvibhute 11:52f7b34f1d3a 200 LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP,
akashvibhute 11:52f7b34f1d3a 201 LORA_IQ_INVERSION_ON, 2000 );
akashvibhute 11:52f7b34f1d3a 202
akashvibhute 11:52f7b34f1d3a 203 Radio->SetRxConfig( MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR,
akashvibhute 11:52f7b34f1d3a 204 LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH,
akashvibhute 11:52f7b34f1d3a 205 LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON, 0,
akashvibhute 11:52f7b34f1d3a 206 LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP,
akashvibhute 11:52f7b34f1d3a 207 LORA_IQ_INVERSION_ON, true );
akashvibhute 11:52f7b34f1d3a 208
akashvibhute 11:52f7b34f1d3a 209 #elif USE_MODEM_FSK == 1
akashvibhute 11:52f7b34f1d3a 210
akashvibhute 11:52f7b34f1d3a 211 dprintf(" > FSK Mode <");
akashvibhute 11:52f7b34f1d3a 212 Radio->SetTxConfig( MODEM_FSK, TX_OUTPUT_POWER, FSK_FDEV, 0,
akashvibhute 11:52f7b34f1d3a 213 FSK_DATARATE, 0,
akashvibhute 11:52f7b34f1d3a 214 FSK_PREAMBLE_LENGTH, FSK_FIX_LENGTH_PAYLOAD_ON,
akashvibhute 11:52f7b34f1d3a 215 FSK_CRC_ENABLED, 0, 0, 0, 2000 );
akashvibhute 11:52f7b34f1d3a 216
akashvibhute 11:52f7b34f1d3a 217 Radio->SetRxConfig( MODEM_FSK, FSK_BANDWIDTH, FSK_DATARATE,
akashvibhute 11:52f7b34f1d3a 218 0, FSK_AFC_BANDWIDTH, FSK_PREAMBLE_LENGTH,
akashvibhute 11:52f7b34f1d3a 219 0, FSK_FIX_LENGTH_PAYLOAD_ON, 0, FSK_CRC_ENABLED,
akashvibhute 11:52f7b34f1d3a 220 0, 0, false, true );
akashvibhute 11:52f7b34f1d3a 221
akashvibhute 11:52f7b34f1d3a 222 #else
akashvibhute 11:52f7b34f1d3a 223
akashvibhute 11:52f7b34f1d3a 224 #error "Please define a modem in the compiler options."
akashvibhute 11:52f7b34f1d3a 225
akashvibhute 11:52f7b34f1d3a 226 #endif
akashvibhute 11:52f7b34f1d3a 227
akashvibhute 11:52f7b34f1d3a 228 if (DEBUG_MESSAGE)
akashvibhute 11:52f7b34f1d3a 229 dprintf("Starting Tx loop");
akashvibhute 11:52f7b34f1d3a 230
akashvibhute 11:52f7b34f1d3a 231
akashvibhute 11:52f7b34f1d3a 232 Radio->Rx( RX_TIMEOUT_VALUE );
akashvibhute 11:52f7b34f1d3a 233
akashvibhute 11:52f7b34f1d3a 234 SX1276DataTx[0] = 0x0A;
akashvibhute 11:52f7b34f1d3a 235 SX1276DataTx[1] = 0x0B;
akashvibhute 11:52f7b34f1d3a 236 SX1276DataTx[2] = 0x0C;
akashvibhute 11:52f7b34f1d3a 237 SX1276DataTx[3] = 0x0D;
akashvibhute 11:52f7b34f1d3a 238
akashvibhute 11:52f7b34f1d3a 239 while(1)
akashvibhute 11:52f7b34f1d3a 240
akashvibhute 11:52f7b34f1d3a 241 //SX1276PingPong();
akashvibhute 11:52f7b34f1d3a 242 if(ser->readable() >= 1) {
akashvibhute 11:52f7b34f1d3a 243 //if(0) {
akashvibhute 11:52f7b34f1d3a 244 if(ser->getc() == '~')
akashvibhute 11:52f7b34f1d3a 245 {
akashvibhute 11:52f7b34f1d3a 246 for(int r=0; r<=3; r++){
akashvibhute 11:52f7b34f1d3a 247 while(ser->readable() == 0);
akashvibhute 11:52f7b34f1d3a 248 serialRxBuffer[r] = ser->getc();
akashvibhute 11:52f7b34f1d3a 249 }
akashvibhute 11:52f7b34f1d3a 250 //memcpy(serialRxBuffer, SX1276DataTx, 4);
akashvibhute 11:52f7b34f1d3a 251 ser->printf("Transmitting data: %x%x%x%x\n",serialRxBuffer[0], serialRxBuffer[1], serialRxBuffer[2], serialRxBuffer[3]);
akashvibhute 11:52f7b34f1d3a 252 //ser->printf("Transmitting data: %x%x%x%x\n\r",SX1276DataTx[0], SX1276DataTx[1], SX1276DataTx[2], SX1276DataTx[3]);
akashvibhute 11:52f7b34f1d3a 253
akashvibhute 11:52f7b34f1d3a 254 SX1276Comm(serialRxBuffer, 1, 1);
akashvibhute 11:52f7b34f1d3a 255 }
akashvibhute 11:52f7b34f1d3a 256 else {
akashvibhute 11:52f7b34f1d3a 257 //mode = 1;
akashvibhute 11:52f7b34f1d3a 258 //SX1276Comm(SX1276DataTx, 1, 1);
akashvibhute 11:52f7b34f1d3a 259 }
akashvibhute 11:52f7b34f1d3a 260 }
akashvibhute 11:52f7b34f1d3a 261
akashvibhute 11:52f7b34f1d3a 262
Helmut64 0:c43b6919ae15 263 }
Helmut64 0:c43b6919ae15 264
Helmut64 0:c43b6919ae15 265
Helmut64 0:c43b6919ae15 266
Helmut64 0:c43b6919ae15 267
Helmut64 0:c43b6919ae15 268 void SystemClock_Config(void)
Helmut64 0:c43b6919ae15 269 {
Helmut64 0:c43b6919ae15 270 #ifdef B_L072Z_LRWAN1_LORA
Helmut64 0:c43b6919ae15 271 /*
Helmut64 0:c43b6919ae15 272 * The L072Z_LRWAN1_LORA clock setup is somewhat differnt from the Nucleo board.
Helmut64 0:c43b6919ae15 273 * It has no LSE.
Helmut64 0:c43b6919ae15 274 */
Helmut64 0:c43b6919ae15 275 RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
Helmut64 0:c43b6919ae15 276 RCC_OscInitTypeDef RCC_OscInitStruct = {0};
Helmut64 0:c43b6919ae15 277
Helmut64 0:c43b6919ae15 278 /* Enable HSE Oscillator and Activate PLL with HSE as source */
Helmut64 0:c43b6919ae15 279 RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
Helmut64 0:c43b6919ae15 280 RCC_OscInitStruct.HSEState = RCC_HSE_OFF;
Helmut64 0:c43b6919ae15 281 RCC_OscInitStruct.HSIState = RCC_HSI_ON;
Helmut64 0:c43b6919ae15 282 RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
Helmut64 0:c43b6919ae15 283 RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
Helmut64 0:c43b6919ae15 284 RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
Helmut64 0:c43b6919ae15 285 RCC_OscInitStruct.PLL.PLLMUL = RCC_PLLMUL_6;
Helmut64 0:c43b6919ae15 286 RCC_OscInitStruct.PLL.PLLDIV = RCC_PLLDIV_3;
Helmut64 0:c43b6919ae15 287
Helmut64 0:c43b6919ae15 288 if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
Helmut64 0:c43b6919ae15 289 // Error_Handler();
Helmut64 0:c43b6919ae15 290 }
Helmut64 0:c43b6919ae15 291
Helmut64 0:c43b6919ae15 292 /* Set Voltage scale1 as MCU will run at 32MHz */
Helmut64 0:c43b6919ae15 293 __HAL_RCC_PWR_CLK_ENABLE();
Helmut64 0:c43b6919ae15 294 __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
Helmut64 0:c43b6919ae15 295
Helmut64 0:c43b6919ae15 296 /* Poll VOSF bit of in PWR_CSR. Wait until it is reset to 0 */
Helmut64 0:c43b6919ae15 297 while (__HAL_PWR_GET_FLAG(PWR_FLAG_VOS) != RESET) {};
Helmut64 0:c43b6919ae15 298
Helmut64 0:c43b6919ae15 299 /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2
Helmut64 0:c43b6919ae15 300 clocks dividers */
Helmut64 0:c43b6919ae15 301 RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
Helmut64 0:c43b6919ae15 302 RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
Helmut64 0:c43b6919ae15 303 RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
Helmut64 0:c43b6919ae15 304 RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
Helmut64 0:c43b6919ae15 305 RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
Helmut64 0:c43b6919ae15 306 if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK) {
Helmut64 0:c43b6919ae15 307 // Error_Handler();
Helmut64 0:c43b6919ae15 308 }
Helmut64 0:c43b6919ae15 309 #endif
Helmut64 0:c43b6919ae15 310 }
Helmut64 0:c43b6919ae15 311
Helmut64 0:c43b6919ae15 312 void dump(const char *title, const void *data, int len, bool dwords)
Helmut64 0:c43b6919ae15 313 {
Helmut64 0:c43b6919ae15 314 dprintf("dump(\"%s\", 0x%x, %d bytes)", title, data, len);
Helmut64 0:c43b6919ae15 315
Helmut64 0:c43b6919ae15 316 int i, j, cnt;
Helmut64 0:c43b6919ae15 317 unsigned char *u;
Helmut64 0:c43b6919ae15 318 const int width = 16;
Helmut64 0:c43b6919ae15 319 const int seppos = 7;
Helmut64 0:c43b6919ae15 320
Helmut64 0:c43b6919ae15 321 cnt = 0;
Helmut64 0:c43b6919ae15 322 u = (unsigned char *)data;
Helmut64 0:c43b6919ae15 323 while (len > 0) {
Helmut64 0:c43b6919ae15 324 ser->printf("%08x: ", (unsigned int)data + cnt);
Helmut64 0:c43b6919ae15 325 if (dwords) {
Helmut64 0:c43b6919ae15 326 unsigned int *ip = ( unsigned int *)u;
Helmut64 0:c43b6919ae15 327 ser->printf(" 0x%08x\r\n", *ip);
Helmut64 0:c43b6919ae15 328 u+= 4;
Helmut64 0:c43b6919ae15 329 len -= 4;
Helmut64 0:c43b6919ae15 330 cnt += 4;
Helmut64 0:c43b6919ae15 331 continue;
Helmut64 0:c43b6919ae15 332 }
Helmut64 0:c43b6919ae15 333 cnt += width;
Helmut64 0:c43b6919ae15 334 j = len < width ? len : width;
Helmut64 0:c43b6919ae15 335 for (i = 0; i < j; i++) {
Helmut64 0:c43b6919ae15 336 ser->printf("%2.2x ", *(u + i));
Helmut64 0:c43b6919ae15 337 if (i == seppos)
Helmut64 0:c43b6919ae15 338 ser->putc(' ');
Helmut64 0:c43b6919ae15 339 }
Helmut64 0:c43b6919ae15 340 ser->putc(' ');
Helmut64 0:c43b6919ae15 341 if (j < width) {
Helmut64 0:c43b6919ae15 342 i = width - j;
Helmut64 0:c43b6919ae15 343 if (i > seppos + 1)
Helmut64 0:c43b6919ae15 344 ser->putc(' ');
Helmut64 0:c43b6919ae15 345 while (i--) {
Helmut64 0:c43b6919ae15 346 printf("%s", " ");
Helmut64 0:c43b6919ae15 347 }
Helmut64 0:c43b6919ae15 348 }
Helmut64 0:c43b6919ae15 349 for (i = 0; i < j; i++) {
Helmut64 0:c43b6919ae15 350 int c = *(u + i);
Helmut64 0:c43b6919ae15 351 if (c >= ' ' && c <= '~')
Helmut64 0:c43b6919ae15 352 ser->putc(c);
Helmut64 0:c43b6919ae15 353 else
Helmut64 0:c43b6919ae15 354 ser->putc('.');
Helmut64 0:c43b6919ae15 355 if (i == seppos)
Helmut64 0:c43b6919ae15 356 ser->putc(' ');
Helmut64 0:c43b6919ae15 357 }
Helmut64 0:c43b6919ae15 358 len -= width;
Helmut64 0:c43b6919ae15 359 u += width;
Helmut64 0:c43b6919ae15 360 ser->printf("\r\n");
Helmut64 0:c43b6919ae15 361 }
Helmut64 0:c43b6919ae15 362 ser->printf("--\r\n");
Helmut64 0:c43b6919ae15 363 }
akashvibhute 11:52f7b34f1d3a 364
akashvibhute 11:52f7b34f1d3a 365
akashvibhute 11:52f7b34f1d3a 366
akashvibhute 11:52f7b34f1d3a 367
akashvibhute 11:52f7b34f1d3a 368 int SX1276PingPong()
akashvibhute 11:52f7b34f1d3a 369 {
akashvibhute 11:52f7b34f1d3a 370
akashvibhute 11:52f7b34f1d3a 371
akashvibhute 11:52f7b34f1d3a 372 while( 1 )
akashvibhute 11:52f7b34f1d3a 373 {
akashvibhute 11:52f7b34f1d3a 374 #ifdef TARGET_STM32L4
akashvibhute 11:52f7b34f1d3a 375 WatchDogUpdate();
akashvibhute 11:52f7b34f1d3a 376 #endif
akashvibhute 11:52f7b34f1d3a 377
akashvibhute 11:52f7b34f1d3a 378 switch( State )
akashvibhute 11:52f7b34f1d3a 379 {
akashvibhute 11:52f7b34f1d3a 380 case RX:
akashvibhute 11:52f7b34f1d3a 381 *led3 = 0;
akashvibhute 11:52f7b34f1d3a 382 if( isMaster == true )
akashvibhute 11:52f7b34f1d3a 383 {
akashvibhute 11:52f7b34f1d3a 384 if( BufferSize > 0 )
akashvibhute 11:52f7b34f1d3a 385 {
akashvibhute 11:52f7b34f1d3a 386 if( memcmp(Buffer, PongMsg, sizeof(PongMsg)) == 0 )
akashvibhute 11:52f7b34f1d3a 387 {
akashvibhute 11:52f7b34f1d3a 388 *led = !*led;
akashvibhute 11:52f7b34f1d3a 389 dprintf( "...Pong" );
akashvibhute 11:52f7b34f1d3a 390 // Send the next PING frame
akashvibhute 11:52f7b34f1d3a 391 memcpy(Buffer, PingMsg, sizeof(PingMsg));
akashvibhute 11:52f7b34f1d3a 392 // We fill the buffer with numbers for the payload
akashvibhute 11:52f7b34f1d3a 393 for( i = sizeof(PingMsg); i < BufferSize; i++ )
akashvibhute 11:52f7b34f1d3a 394 {
akashvibhute 11:52f7b34f1d3a 395 Buffer[i] = i - sizeof(PingMsg);
akashvibhute 11:52f7b34f1d3a 396 }
akashvibhute 11:52f7b34f1d3a 397 //wait_ms( 10 );
akashvibhute 11:52f7b34f1d3a 398 Radio->Send( Buffer, BufferSize );
akashvibhute 11:52f7b34f1d3a 399 }
akashvibhute 11:52f7b34f1d3a 400 else if( memcmp(Buffer, PingMsg, sizeof(PingMsg)) == 0 )
akashvibhute 11:52f7b34f1d3a 401 { // A master already exists then become a slave
akashvibhute 11:52f7b34f1d3a 402 dprintf( "...Ping" );
akashvibhute 11:52f7b34f1d3a 403 *led = !*led;
akashvibhute 11:52f7b34f1d3a 404 isMaster = false;
akashvibhute 11:52f7b34f1d3a 405 // Send the next PONG frame
akashvibhute 11:52f7b34f1d3a 406 memcpy(Buffer, PongMsg, sizeof(PongMsg));
akashvibhute 11:52f7b34f1d3a 407 // We fill the buffer with numbers for the payload
akashvibhute 11:52f7b34f1d3a 408 for( i = sizeof(PongMsg); i < BufferSize; i++ )
akashvibhute 11:52f7b34f1d3a 409 {
akashvibhute 11:52f7b34f1d3a 410 Buffer[i] = i - sizeof(PongMsg);
akashvibhute 11:52f7b34f1d3a 411 }
akashvibhute 11:52f7b34f1d3a 412 //wait_ms( 10 );
akashvibhute 11:52f7b34f1d3a 413 Radio->Send( Buffer, BufferSize );
akashvibhute 11:52f7b34f1d3a 414 }
akashvibhute 11:52f7b34f1d3a 415 else // valid reception but neither a PING or a PONG message
akashvibhute 11:52f7b34f1d3a 416 { // Set device as master ans start again
akashvibhute 11:52f7b34f1d3a 417 isMaster = true;
akashvibhute 11:52f7b34f1d3a 418 Radio->Rx( RX_TIMEOUT_VALUE );
akashvibhute 11:52f7b34f1d3a 419 }
akashvibhute 11:52f7b34f1d3a 420 }
akashvibhute 11:52f7b34f1d3a 421 }
akashvibhute 11:52f7b34f1d3a 422 else
akashvibhute 11:52f7b34f1d3a 423 {
akashvibhute 11:52f7b34f1d3a 424 if( BufferSize > 0 )
akashvibhute 11:52f7b34f1d3a 425 {
akashvibhute 11:52f7b34f1d3a 426 if( memcmp(Buffer, PingMsg, sizeof(PingMsg)) == 0 )
akashvibhute 11:52f7b34f1d3a 427 {
akashvibhute 11:52f7b34f1d3a 428 *led = !*led;
akashvibhute 11:52f7b34f1d3a 429 dprintf( "...Ping" );
akashvibhute 11:52f7b34f1d3a 430 // Send the reply to the PING string
akashvibhute 11:52f7b34f1d3a 431 memcpy(Buffer, PongMsg, sizeof(PongMsg));
akashvibhute 11:52f7b34f1d3a 432 // We fill the buffer with numbers for the payload
akashvibhute 11:52f7b34f1d3a 433 for( i = sizeof(PongMsg); i < BufferSize; i++ )
akashvibhute 11:52f7b34f1d3a 434 {
akashvibhute 11:52f7b34f1d3a 435 Buffer[i] = i - sizeof(PongMsg);
akashvibhute 11:52f7b34f1d3a 436 }
akashvibhute 11:52f7b34f1d3a 437 //wait_ms( 10 );
akashvibhute 11:52f7b34f1d3a 438 Radio->Send( Buffer, BufferSize );
akashvibhute 11:52f7b34f1d3a 439 }
akashvibhute 11:52f7b34f1d3a 440 else // valid reception but not a PING as expected
akashvibhute 11:52f7b34f1d3a 441 { // Set device as master and start again
akashvibhute 11:52f7b34f1d3a 442 isMaster = true;
akashvibhute 11:52f7b34f1d3a 443 Radio->Rx( RX_TIMEOUT_VALUE );
akashvibhute 11:52f7b34f1d3a 444 }
akashvibhute 11:52f7b34f1d3a 445 }
akashvibhute 11:52f7b34f1d3a 446 }
akashvibhute 11:52f7b34f1d3a 447 State = LOWPOWER;
akashvibhute 11:52f7b34f1d3a 448 break;
akashvibhute 11:52f7b34f1d3a 449 case TX:
akashvibhute 11:52f7b34f1d3a 450 *led3 = 1;
akashvibhute 11:52f7b34f1d3a 451 if( isMaster == true )
akashvibhute 11:52f7b34f1d3a 452 {
akashvibhute 11:52f7b34f1d3a 453 dprintf("Ping..." );
akashvibhute 11:52f7b34f1d3a 454 }
akashvibhute 11:52f7b34f1d3a 455 else
akashvibhute 11:52f7b34f1d3a 456 {
akashvibhute 11:52f7b34f1d3a 457 dprintf("Pong..." );
akashvibhute 11:52f7b34f1d3a 458 }
akashvibhute 11:52f7b34f1d3a 459 Radio->Rx( RX_TIMEOUT_VALUE );
akashvibhute 11:52f7b34f1d3a 460 State = LOWPOWER;
akashvibhute 11:52f7b34f1d3a 461 break;
akashvibhute 11:52f7b34f1d3a 462 case RX_TIMEOUT:
akashvibhute 11:52f7b34f1d3a 463 if( isMaster == true )
akashvibhute 11:52f7b34f1d3a 464 {
akashvibhute 11:52f7b34f1d3a 465 // Send the next PING frame
akashvibhute 11:52f7b34f1d3a 466 memcpy(Buffer, PingMsg, sizeof(PingMsg));
akashvibhute 11:52f7b34f1d3a 467 for( i = sizeof(PingMsg); i < BufferSize; i++ )
akashvibhute 11:52f7b34f1d3a 468 {
akashvibhute 11:52f7b34f1d3a 469 Buffer[i] = i - sizeof(PingMsg);
akashvibhute 11:52f7b34f1d3a 470 }
akashvibhute 11:52f7b34f1d3a 471 //wait_ms( 10 );
akashvibhute 11:52f7b34f1d3a 472 Radio->Send( Buffer, BufferSize );
akashvibhute 11:52f7b34f1d3a 473 }
akashvibhute 11:52f7b34f1d3a 474 else
akashvibhute 11:52f7b34f1d3a 475 {
akashvibhute 11:52f7b34f1d3a 476 Radio->Rx( RX_TIMEOUT_VALUE );
akashvibhute 11:52f7b34f1d3a 477 }
akashvibhute 11:52f7b34f1d3a 478 State = LOWPOWER;
akashvibhute 11:52f7b34f1d3a 479 break;
akashvibhute 11:52f7b34f1d3a 480 case RX_ERROR:
akashvibhute 11:52f7b34f1d3a 481 // We have received a Packet with a CRC error, send reply as if packet was correct
akashvibhute 11:52f7b34f1d3a 482 if( isMaster == true )
akashvibhute 11:52f7b34f1d3a 483 {
akashvibhute 11:52f7b34f1d3a 484 // Send the next PING frame
akashvibhute 11:52f7b34f1d3a 485 memcpy(Buffer, PingMsg, sizeof(PingMsg));
akashvibhute 11:52f7b34f1d3a 486 for( i = 4; i < BufferSize; i++ )
akashvibhute 11:52f7b34f1d3a 487 {
akashvibhute 11:52f7b34f1d3a 488 Buffer[i] = i - 4;
akashvibhute 11:52f7b34f1d3a 489 }
akashvibhute 11:52f7b34f1d3a 490 //wait_ms( 10 );
akashvibhute 11:52f7b34f1d3a 491 Radio->Send( Buffer, BufferSize );
akashvibhute 11:52f7b34f1d3a 492 }
akashvibhute 11:52f7b34f1d3a 493 else
akashvibhute 11:52f7b34f1d3a 494 {
akashvibhute 11:52f7b34f1d3a 495 // Send the next PONG frame
akashvibhute 11:52f7b34f1d3a 496 memcpy(Buffer, PongMsg, sizeof(PongMsg));
akashvibhute 11:52f7b34f1d3a 497 for( i = sizeof(PongMsg); i < BufferSize; i++ )
akashvibhute 11:52f7b34f1d3a 498 {
akashvibhute 11:52f7b34f1d3a 499 Buffer[i] = i - sizeof(PongMsg);
akashvibhute 11:52f7b34f1d3a 500 }
akashvibhute 11:52f7b34f1d3a 501 //wait_ms( 10 );
akashvibhute 11:52f7b34f1d3a 502 Radio->Send( Buffer, BufferSize );
akashvibhute 11:52f7b34f1d3a 503 }
akashvibhute 11:52f7b34f1d3a 504 State = LOWPOWER;
akashvibhute 11:52f7b34f1d3a 505 break;
akashvibhute 11:52f7b34f1d3a 506 case TX_TIMEOUT:
akashvibhute 11:52f7b34f1d3a 507 Radio->Rx( RX_TIMEOUT_VALUE );
akashvibhute 11:52f7b34f1d3a 508 State = LOWPOWER;
akashvibhute 11:52f7b34f1d3a 509 break;
akashvibhute 11:52f7b34f1d3a 510 case LOWPOWER:
akashvibhute 11:52f7b34f1d3a 511 sleep();
akashvibhute 11:52f7b34f1d3a 512 break;
akashvibhute 11:52f7b34f1d3a 513 default:
akashvibhute 11:52f7b34f1d3a 514 State = LOWPOWER;
akashvibhute 11:52f7b34f1d3a 515 break;
akashvibhute 11:52f7b34f1d3a 516 }
akashvibhute 11:52f7b34f1d3a 517 }
akashvibhute 11:52f7b34f1d3a 518 }
akashvibhute 11:52f7b34f1d3a 519
akashvibhute 11:52f7b34f1d3a 520 void OnTxDone(void *radio)
akashvibhute 11:52f7b34f1d3a 521 {
akashvibhute 11:52f7b34f1d3a 522 Radio->Sleep( );
akashvibhute 11:52f7b34f1d3a 523 State = TX;
akashvibhute 11:52f7b34f1d3a 524 if (DEBUG_MESSAGE)
akashvibhute 11:52f7b34f1d3a 525 dprintf("> OnTxDone");
akashvibhute 11:52f7b34f1d3a 526 }
akashvibhute 11:52f7b34f1d3a 527
akashvibhute 11:52f7b34f1d3a 528 void OnRxDone(void *radio, uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr)
akashvibhute 11:52f7b34f1d3a 529 {
akashvibhute 11:52f7b34f1d3a 530 Radio->Sleep( );
akashvibhute 11:52f7b34f1d3a 531 BufferSize = size;
akashvibhute 11:52f7b34f1d3a 532 memcpy( Buffer, payload, BufferSize );
akashvibhute 11:52f7b34f1d3a 533 State = RX;
akashvibhute 11:52f7b34f1d3a 534 if (DEBUG_MESSAGE)
akashvibhute 11:52f7b34f1d3a 535 dprintf("> OnRxDone: RssiValue=%d dBm, SnrValue=%d", rssi, snr);
akashvibhute 11:52f7b34f1d3a 536 dump("Data:", payload, size);
akashvibhute 11:52f7b34f1d3a 537 }
akashvibhute 11:52f7b34f1d3a 538
akashvibhute 11:52f7b34f1d3a 539 void OnTxTimeout(void *radio)
akashvibhute 11:52f7b34f1d3a 540 {
akashvibhute 11:52f7b34f1d3a 541 *led3 = 0;
akashvibhute 11:52f7b34f1d3a 542 Radio->Sleep( );
akashvibhute 11:52f7b34f1d3a 543 State = TX_TIMEOUT;
akashvibhute 11:52f7b34f1d3a 544 if(DEBUG_MESSAGE)
akashvibhute 11:52f7b34f1d3a 545 dprintf("> OnTxTimeout");
akashvibhute 11:52f7b34f1d3a 546 }
akashvibhute 11:52f7b34f1d3a 547
akashvibhute 11:52f7b34f1d3a 548 void OnRxTimeout(void *radio)
akashvibhute 11:52f7b34f1d3a 549 {
akashvibhute 11:52f7b34f1d3a 550 *led3 = 0;
akashvibhute 11:52f7b34f1d3a 551 Radio->Sleep( );
akashvibhute 11:52f7b34f1d3a 552 Buffer[BufferSize-1] = 0;
akashvibhute 11:52f7b34f1d3a 553 State = RX_TIMEOUT;
akashvibhute 11:52f7b34f1d3a 554 if (DEBUG_MESSAGE)
akashvibhute 11:52f7b34f1d3a 555 dprintf("> OnRxTimeout");
akashvibhute 11:52f7b34f1d3a 556 }
akashvibhute 11:52f7b34f1d3a 557
akashvibhute 11:52f7b34f1d3a 558 void OnRxError(void *radio)
akashvibhute 11:52f7b34f1d3a 559 {
akashvibhute 11:52f7b34f1d3a 560 Radio->Sleep( );
akashvibhute 11:52f7b34f1d3a 561 State = RX_ERROR;
akashvibhute 11:52f7b34f1d3a 562 if (DEBUG_MESSAGE)
akashvibhute 11:52f7b34f1d3a 563 dprintf("> OnRxError");
akashvibhute 11:52f7b34f1d3a 564 }
akashvibhute 11:52f7b34f1d3a 565
akashvibhute 11:52f7b34f1d3a 566 #endif
akashvibhute 11:52f7b34f1d3a 567
akashvibhute 11:52f7b34f1d3a 568
akashvibhute 11:52f7b34f1d3a 569 int SX1276Comm(uint8_t *commData, bool mode, bool ack)
akashvibhute 11:52f7b34f1d3a 570 {
akashvibhute 11:52f7b34f1d3a 571 memcpy(Buffer, commData, sizeof(commData));
akashvibhute 11:52f7b34f1d3a 572 Radio->Send( Buffer, BufferSize );
akashvibhute 11:52f7b34f1d3a 573 wait_ms(500);
akashvibhute 11:52f7b34f1d3a 574 /*
akashvibhute 11:52f7b34f1d3a 575 switch( State ) {
akashvibhute 11:52f7b34f1d3a 576 case RX:
akashvibhute 11:52f7b34f1d3a 577 Radio->Rx( RX_TIMEOUT_VALUE );
akashvibhute 11:52f7b34f1d3a 578
akashvibhute 11:52f7b34f1d3a 579 //memcpy(Buffer, commData, sizeof(Buffer));
akashvibhute 11:52f7b34f1d3a 580 //ser->printf("Rx Data\n\r", Buffer[0], Buffer[1], Buffer[2], Buffer[3]);
akashvibhute 11:52f7b34f1d3a 581 memcpy(Buffer, commData, sizeof(commData));
akashvibhute 11:52f7b34f1d3a 582 Radio->Send( Buffer, BufferSize );
akashvibhute 11:52f7b34f1d3a 583 //State = LOWPOWER;
akashvibhute 11:52f7b34f1d3a 584 break;
akashvibhute 11:52f7b34f1d3a 585 case TX:
akashvibhute 11:52f7b34f1d3a 586
akashvibhute 11:52f7b34f1d3a 587 memcpy(Buffer, commData, sizeof(commData));
akashvibhute 11:52f7b34f1d3a 588 Radio->Send( Buffer, BufferSize );
akashvibhute 11:52f7b34f1d3a 589
akashvibhute 11:52f7b34f1d3a 590 //State = LOWPOWER;
akashvibhute 11:52f7b34f1d3a 591 break;
akashvibhute 11:52f7b34f1d3a 592 case RX_TIMEOUT:
akashvibhute 11:52f7b34f1d3a 593
akashvibhute 11:52f7b34f1d3a 594
akashvibhute 11:52f7b34f1d3a 595 memcpy(Buffer, commData, sizeof(commData));
akashvibhute 11:52f7b34f1d3a 596 Radio->Send( Buffer, BufferSize );
akashvibhute 11:52f7b34f1d3a 597
akashvibhute 11:52f7b34f1d3a 598
akashvibhute 11:52f7b34f1d3a 599 Radio->Rx( RX_TIMEOUT_VALUE );
akashvibhute 11:52f7b34f1d3a 600 //State = LOWPOWER;
akashvibhute 11:52f7b34f1d3a 601 break;
akashvibhute 11:52f7b34f1d3a 602 case RX_ERROR:
akashvibhute 11:52f7b34f1d3a 603
akashvibhute 11:52f7b34f1d3a 604
akashvibhute 11:52f7b34f1d3a 605 memcpy(Buffer, commData, sizeof(commData));
akashvibhute 11:52f7b34f1d3a 606 Radio->Send( Buffer, BufferSize );
akashvibhute 11:52f7b34f1d3a 607
akashvibhute 11:52f7b34f1d3a 608 wait_ms(10);
akashvibhute 11:52f7b34f1d3a 609 Radio->Rx( RX_TIMEOUT_VALUE );
akashvibhute 11:52f7b34f1d3a 610 //State = LOWPOWER;
akashvibhute 11:52f7b34f1d3a 611 break;
akashvibhute 11:52f7b34f1d3a 612 case TX_TIMEOUT:
akashvibhute 11:52f7b34f1d3a 613
akashvibhute 11:52f7b34f1d3a 614 memcpy(Buffer, commData, sizeof(commData));
akashvibhute 11:52f7b34f1d3a 615 Radio->Send( Buffer, BufferSize );
akashvibhute 11:52f7b34f1d3a 616
akashvibhute 11:52f7b34f1d3a 617 //State = LOWPOWER;
akashvibhute 11:52f7b34f1d3a 618 break;
akashvibhute 11:52f7b34f1d3a 619 case LOWPOWER:
akashvibhute 11:52f7b34f1d3a 620 sleep();
akashvibhute 11:52f7b34f1d3a 621 break;
akashvibhute 11:52f7b34f1d3a 622 default:
akashvibhute 11:52f7b34f1d3a 623 //State = LOWPOWER;
akashvibhute 11:52f7b34f1d3a 624 break;
akashvibhute 11:52f7b34f1d3a 625 }
akashvibhute 11:52f7b34f1d3a 626 */
akashvibhute 11:52f7b34f1d3a 627 }