
MAX20361 System Demo with Low Power 2 mode
Dependencies: SX1276GenericLib USBDevice
Fork of NonPingPong_PICO_LoRa by
SX1276GenericPingPong/GenericPingPong2.cpp@7:62c868478eef, 2020-10-20 (annotated)
- Committer:
- walterluu
- Date:
- Tue Oct 20 00:00:20 2020 +0000
- Revision:
- 7:62c868478eef
- Parent:
- 6:51f492ca61a2
MAX20361 System Demo firmware with Low Power 2 mode
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
walterluu | 3:85fc843a9d7d | 1 | /* |
walterluu | 3:85fc843a9d7d | 2 | * This file contains a copy of the master content sx1276PingPong |
walterluu | 3:85fc843a9d7d | 3 | * with adaption for the SX1276Generic environment |
walterluu | 3:85fc843a9d7d | 4 | * (c) 2017 Helmut Tschemernjak |
walterluu | 3:85fc843a9d7d | 5 | * 30826 Garbsen (Hannover) Germany |
walterluu | 3:85fc843a9d7d | 6 | */ |
walterluu | 3:85fc843a9d7d | 7 | |
walterluu | 3:85fc843a9d7d | 8 | #include "mbed.h" |
walterluu | 3:85fc843a9d7d | 9 | #include "PinMap.h" |
walterluu | 3:85fc843a9d7d | 10 | #include "GenericPingPong2.h" |
walterluu | 3:85fc843a9d7d | 11 | #include "sx1276-mbed-hal.h" |
walterluu | 3:85fc843a9d7d | 12 | #include "main.h" |
walterluu | 3:85fc843a9d7d | 13 | #include "global_buffers.h" //adding this for development |
walterluu | 3:85fc843a9d7d | 14 | |
walterluu | 3:85fc843a9d7d | 15 | #include "sx1276.h" |
walterluu | 3:85fc843a9d7d | 16 | |
walterluu | 3:85fc843a9d7d | 17 | #include "USBSerial.h" |
walterluu | 3:85fc843a9d7d | 18 | |
walterluu | 3:85fc843a9d7d | 19 | #ifdef FEATURE_LORA // in main.cpp |
walterluu | 3:85fc843a9d7d | 20 | |
walterluu | 3:85fc843a9d7d | 21 | /* Set this flag to '1' to display debug messages on the console */ |
walterluu | 7:62c868478eef | 22 | #define DEBUG_MESSAGE 1 |
walterluu | 3:85fc843a9d7d | 23 | |
walterluu | 3:85fc843a9d7d | 24 | /* Set this flag to '1' to use the LoRa modulation or to '0' to use FSK modulation */ |
walterluu | 3:85fc843a9d7d | 25 | #define USE_MODEM_LORA 1 |
walterluu | 3:85fc843a9d7d | 26 | #define USE_MODEM_FSK !USE_MODEM_LORA |
walterluu | 3:85fc843a9d7d | 27 | #define RF_FREQUENCY RF_FREQUENCY_915_0 // Hz |
walterluu | 7:62c868478eef | 28 | #define TX_OUTPUT_POWER 1 // 14 dBm |
walterluu | 3:85fc843a9d7d | 29 | |
walterluu | 3:85fc843a9d7d | 30 | #if USE_MODEM_LORA == 1 |
walterluu | 3:85fc843a9d7d | 31 | |
walterluu | 3:85fc843a9d7d | 32 | #define LORA_BANDWIDTH 125000 // LoRa default, details in SX1276::BandwidthMap |
walterluu | 3:85fc843a9d7d | 33 | #define LORA_SPREADING_FACTOR LORA_SF7 |
walterluu | 3:85fc843a9d7d | 34 | #define LORA_CODINGRATE LORA_ERROR_CODING_RATE_4_5 |
walterluu | 3:85fc843a9d7d | 35 | |
walterluu | 7:62c868478eef | 36 | #define LORA_PREAMBLE_LENGTH 8 // Same for Tx and Rx, default |
walterluu | 7:62c868478eef | 37 | //#define LORA_PREAMBLE_LENGTH 5 |
walterluu | 3:85fc843a9d7d | 38 | #define LORA_SYMBOL_TIMEOUT 5 // Symbols |
walterluu | 7:62c868478eef | 39 | //#define LORA_SYMBOL_TIMEOUT 4 // Symbols |
walterluu | 7:62c868478eef | 40 | |
walterluu | 3:85fc843a9d7d | 41 | #define LORA_FIX_LENGTH_PAYLOAD_ON false |
walterluu | 3:85fc843a9d7d | 42 | #define LORA_FHSS_ENABLED false |
walterluu | 3:85fc843a9d7d | 43 | #define LORA_NB_SYMB_HOP 4 |
walterluu | 3:85fc843a9d7d | 44 | #define LORA_IQ_INVERSION_ON false |
walterluu | 3:85fc843a9d7d | 45 | #define LORA_CRC_ENABLED true |
walterluu | 3:85fc843a9d7d | 46 | |
walterluu | 3:85fc843a9d7d | 47 | #elif USE_MODEM_FSK == 1 |
walterluu | 3:85fc843a9d7d | 48 | |
walterluu | 3:85fc843a9d7d | 49 | #define FSK_FDEV 25000 // Hz |
walterluu | 3:85fc843a9d7d | 50 | #define FSK_DATARATE 19200 // bps |
walterluu | 3:85fc843a9d7d | 51 | #define FSK_BANDWIDTH 50000 // Hz |
walterluu | 3:85fc843a9d7d | 52 | #define FSK_AFC_BANDWIDTH 83333 // Hz |
walterluu | 3:85fc843a9d7d | 53 | #define FSK_PREAMBLE_LENGTH 5 // Same for Tx and Rx |
walterluu | 3:85fc843a9d7d | 54 | #define FSK_FIX_LENGTH_PAYLOAD_ON false |
walterluu | 3:85fc843a9d7d | 55 | #define FSK_CRC_ENABLED true |
walterluu | 3:85fc843a9d7d | 56 | |
walterluu | 3:85fc843a9d7d | 57 | #else |
walterluu | 3:85fc843a9d7d | 58 | #error "Please define a modem in the compiler options." |
walterluu | 3:85fc843a9d7d | 59 | #endif |
walterluu | 3:85fc843a9d7d | 60 | |
walterluu | 7:62c868478eef | 61 | //#define RX_TIMEOUT_VALUE 3500 // in ms, default |
walterluu | 7:62c868478eef | 62 | #define RX_TIMEOUT_VALUE 333 // in ms |
walterluu | 3:85fc843a9d7d | 63 | |
walterluu | 3:85fc843a9d7d | 64 | |
walterluu | 3:85fc843a9d7d | 65 | //#define BUFFER_SIZE 32 // Define the payload size here |
walterluu | 3:85fc843a9d7d | 66 | //#define BUFFER_SIZE 64 // Define the payload size here |
walterluu | 3:85fc843a9d7d | 67 | |
walterluu | 3:85fc843a9d7d | 68 | |
walterluu | 3:85fc843a9d7d | 69 | /* |
walterluu | 3:85fc843a9d7d | 70 | * Global variables declarations |
walterluu | 3:85fc843a9d7d | 71 | */ |
walterluu | 3:85fc843a9d7d | 72 | typedef enum |
walterluu | 3:85fc843a9d7d | 73 | { |
walterluu | 3:85fc843a9d7d | 74 | LOWPOWER = 0, |
walterluu | 3:85fc843a9d7d | 75 | IDLE, |
walterluu | 3:85fc843a9d7d | 76 | |
walterluu | 3:85fc843a9d7d | 77 | RX, |
walterluu | 3:85fc843a9d7d | 78 | RX_TIMEOUT, |
walterluu | 3:85fc843a9d7d | 79 | RX_ERROR, |
walterluu | 3:85fc843a9d7d | 80 | |
walterluu | 3:85fc843a9d7d | 81 | TX, |
walterluu | 3:85fc843a9d7d | 82 | TX_TIMEOUT, |
walterluu | 3:85fc843a9d7d | 83 | |
walterluu | 3:85fc843a9d7d | 84 | CAD, |
walterluu | 3:85fc843a9d7d | 85 | CAD_DONE |
walterluu | 3:85fc843a9d7d | 86 | } AppStates_t; |
walterluu | 3:85fc843a9d7d | 87 | |
walterluu | 3:85fc843a9d7d | 88 | volatile AppStates_t State = LOWPOWER; |
walterluu | 3:85fc843a9d7d | 89 | |
walterluu | 3:85fc843a9d7d | 90 | /*! |
walterluu | 3:85fc843a9d7d | 91 | * Radio events function pointer |
walterluu | 3:85fc843a9d7d | 92 | */ |
walterluu | 3:85fc843a9d7d | 93 | static RadioEvents_t RadioEvents; |
walterluu | 3:85fc843a9d7d | 94 | |
walterluu | 3:85fc843a9d7d | 95 | /* |
walterluu | 3:85fc843a9d7d | 96 | * Global variables declarations |
walterluu | 3:85fc843a9d7d | 97 | */ |
walterluu | 3:85fc843a9d7d | 98 | SX1276Generic *Radio; |
walterluu | 3:85fc843a9d7d | 99 | |
walterluu | 3:85fc843a9d7d | 100 | |
walterluu | 3:85fc843a9d7d | 101 | //const uint8_t PingMsg[] = { 0xff, 0xff, 0x00, 0x00, 'P', 'I', 'N', 'G'};// "PING"; |
walterluu | 3:85fc843a9d7d | 102 | //const uint8_t PongMsg[] = { 0xff, 0xff, 0x00, 0x00, 'P', 'O', 'N', 'G'};// "PONG"; |
walterluu | 3:85fc843a9d7d | 103 | |
walterluu | 3:85fc843a9d7d | 104 | //uint16_t BufferSize = BUFFER_SIZE; |
walterluu | 3:85fc843a9d7d | 105 | //uint8_t *Buffer; |
walterluu | 3:85fc843a9d7d | 106 | |
walterluu | 3:85fc843a9d7d | 107 | // Aliases for the buffers that are made in the main() |
walterluu | 3:85fc843a9d7d | 108 | uint8_t *BufferTx; |
walterluu | 3:85fc843a9d7d | 109 | uint8_t *BufferRx; |
walterluu | 3:85fc843a9d7d | 110 | USBSerial *ad; |
walterluu | 3:85fc843a9d7d | 111 | |
walterluu | 3:85fc843a9d7d | 112 | DigitalOut *led3; |
walterluu | 3:85fc843a9d7d | 113 | |
walterluu | 3:85fc843a9d7d | 114 | |
walterluu | 3:85fc843a9d7d | 115 | /* |
walterluu | 3:85fc843a9d7d | 116 | This function is in Devin's main function |
walterluu | 3:85fc843a9d7d | 117 | |
walterluu | 3:85fc843a9d7d | 118 | */ |
walterluu | 3:85fc843a9d7d | 119 | int SX1276PingPongSetup(uint8_t *BufferTxFromMain, uint8_t *BufferRxFromMain, USBSerial *_ad) |
walterluu | 3:85fc843a9d7d | 120 | { |
walterluu | 3:85fc843a9d7d | 121 | ad = _ad; |
walterluu | 3:85fc843a9d7d | 122 | |
walterluu | 3:85fc843a9d7d | 123 | ad->printf("TEST\r\n" ); |
walterluu | 3:85fc843a9d7d | 124 | |
walterluu | 3:85fc843a9d7d | 125 | #if( defined ( TARGET_KL25Z ) || defined ( TARGET_Lad11U6X ) ) |
walterluu | 3:85fc843a9d7d | 126 | DigitalOut *led = new DigitalOut(LED2); |
walterluu | 3:85fc843a9d7d | 127 | #elif defined(TARGET_NUCLEO_L073RZ) || defined(TARGET_DISCO_L072CZ_LRWAN1) |
walterluu | 3:85fc843a9d7d | 128 | DigitalOut *led = new DigitalOut(LED4); // RX red |
walterluu | 3:85fc843a9d7d | 129 | led3 = new DigitalOut(LED3); // TX blue |
walterluu | 3:85fc843a9d7d | 130 | #else |
walterluu | 3:85fc843a9d7d | 131 | DigitalOut *led = new DigitalOut(LED1); |
walterluu | 3:85fc843a9d7d | 132 | // led = 0; |
walterluu | 3:85fc843a9d7d | 133 | led3 = led; |
walterluu | 3:85fc843a9d7d | 134 | #endif |
walterluu | 3:85fc843a9d7d | 135 | |
walterluu | 3:85fc843a9d7d | 136 | BufferTx = BufferTxFromMain; |
walterluu | 3:85fc843a9d7d | 137 | BufferRx = BufferRxFromMain; |
walterluu | 3:85fc843a9d7d | 138 | *led3 = 0; // change to 0 |
walterluu | 3:85fc843a9d7d | 139 | |
walterluu | 3:85fc843a9d7d | 140 | #ifdef B_L072Z_LRWAN1_LORA |
walterluu | 3:85fc843a9d7d | 141 | Radio = new SX1276Generic(NULL, MURATA_SX1276, |
walterluu | 3:85fc843a9d7d | 142 | LORA_SPI_MOSI, LORA_SPI_MISO, LORA_SPI_SCLK, LORA_CS, LORA_RESET, |
walterluu | 3:85fc843a9d7d | 143 | LORA_DIO0, LORA_DIO1, LORA_DIO2, LORA_DIO3, LORA_DIO4, LORA_DIO5, |
walterluu | 3:85fc843a9d7d | 144 | LORA_ANT_RX, LORA_ANT_TX, LORA_ANT_BOOST, LORA_TCXO); |
walterluu | 3:85fc843a9d7d | 145 | #else // RFM95 |
walterluu | 3:85fc843a9d7d | 146 | Radio = new SX1276Generic(NULL, RFM95_SX1276, |
walterluu | 3:85fc843a9d7d | 147 | LORA_SPI_MOSI, LORA_SPI_MISO, LORA_SPI_SCLK, LORA_CS, LORA_RESET, |
walterluu | 3:85fc843a9d7d | 148 | LORA_DIO0, LORA_DIO1, LORA_DIO2, LORA_DIO3, LORA_DIO4, LORA_DIO5); |
walterluu | 3:85fc843a9d7d | 149 | |
walterluu | 3:85fc843a9d7d | 150 | #endif |
walterluu | 3:85fc843a9d7d | 151 | |
walterluu | 3:85fc843a9d7d | 152 | // dprintf("SX1276 Ping Pong Demo Application" ); |
walterluu | 3:85fc843a9d7d | 153 | ad->printf("SX1276 Ping Pong Demo Application\r\n"); |
walterluu | 3:85fc843a9d7d | 154 | // dprintf("Freqency: %.1f", (double)RF_FREQUENCY/1000000.0); |
walterluu | 3:85fc843a9d7d | 155 | ad->printf("Freqency: %.1f\r\n", (double)RF_FREQUENCY/1000000.0); |
walterluu | 3:85fc843a9d7d | 156 | // dprintf("TXPower: %d dBm", TX_OUTPUT_POWER); |
walterluu | 3:85fc843a9d7d | 157 | ad->printf("TXPower: %d dBm\r\n", TX_OUTPUT_POWER); |
walterluu | 3:85fc843a9d7d | 158 | #if USE_MODEM_LORA == 1 |
walterluu | 3:85fc843a9d7d | 159 | // dprintf("Bandwidth: %d Hz", LORA_BANDWIDTH); |
walterluu | 3:85fc843a9d7d | 160 | ad->printf("Bandwidth: %d Hz\r\n", LORA_BANDWIDTH); |
walterluu | 3:85fc843a9d7d | 161 | // dprintf("Spreading factor: SF%d", LORA_SPREADING_FACTOR); |
walterluu | 3:85fc843a9d7d | 162 | ad->printf("Spreading factor: SF%d\r\n", LORA_SPREADING_FACTOR); |
walterluu | 3:85fc843a9d7d | 163 | #elif USE_MODEM_FSK == 1 |
walterluu | 3:85fc843a9d7d | 164 | // dprintf("Bandwidth: %d kHz", FSK_BANDWIDTH); |
walterluu | 3:85fc843a9d7d | 165 | ad->printf("Bandwidth: %d kHz\r\n", FSK_BANDWIDTH); |
walterluu | 3:85fc843a9d7d | 166 | // dprintf("Baudrate: %d", FSK_DATARATE); |
walterluu | 3:85fc843a9d7d | 167 | ad->printf("Baudrate: %d\r\n", FSK_DATARATE); |
walterluu | 3:85fc843a9d7d | 168 | #endif |
walterluu | 3:85fc843a9d7d | 169 | // Initialize Radio driver |
walterluu | 3:85fc843a9d7d | 170 | RadioEvents.TxDone = OnTxDone; |
walterluu | 3:85fc843a9d7d | 171 | RadioEvents.RxDone = OnRxDone; |
walterluu | 3:85fc843a9d7d | 172 | RadioEvents.RxError = OnRxError; |
walterluu | 3:85fc843a9d7d | 173 | RadioEvents.TxTimeout = OnTxTimeout; |
walterluu | 3:85fc843a9d7d | 174 | RadioEvents.RxTimeout = OnRxTimeout; |
walterluu | 3:85fc843a9d7d | 175 | if (Radio->Init( &RadioEvents ) == false) { |
walterluu | 3:85fc843a9d7d | 176 | while(1) { |
walterluu | 3:85fc843a9d7d | 177 | // dprintf("Radio could not be detected!"); |
walterluu | 3:85fc843a9d7d | 178 | ad->printf("Radio could not be detected!\r\n"); |
walterluu | 3:85fc843a9d7d | 179 | wait( 1 ); |
walterluu | 3:85fc843a9d7d | 180 | } |
walterluu | 3:85fc843a9d7d | 181 | } |
walterluu | 3:85fc843a9d7d | 182 | |
walterluu | 3:85fc843a9d7d | 183 | |
walterluu | 3:85fc843a9d7d | 184 | switch(Radio->DetectBoardType()) { |
walterluu | 3:85fc843a9d7d | 185 | case SX1276MB1LAS: |
walterluu | 3:85fc843a9d7d | 186 | if (DEBUG_MESSAGE) |
walterluu | 3:85fc843a9d7d | 187 | ad->printf(" > Board Type: SX1276MB1LAS <\r\n"); |
walterluu | 3:85fc843a9d7d | 188 | break; |
walterluu | 3:85fc843a9d7d | 189 | case SX1276MB1MAS: |
walterluu | 3:85fc843a9d7d | 190 | if (DEBUG_MESSAGE) |
walterluu | 3:85fc843a9d7d | 191 | ad->printf(" > Board Type: SX1276MB1LAS <\r\n"); |
walterluu | 3:85fc843a9d7d | 192 | case MURATA_SX1276: |
walterluu | 3:85fc843a9d7d | 193 | if (DEBUG_MESSAGE) |
walterluu | 3:85fc843a9d7d | 194 | ad->printf(" > Board Type: MURATA_SX1276_STM32L0 <\r\n"); |
walterluu | 3:85fc843a9d7d | 195 | break; |
walterluu | 3:85fc843a9d7d | 196 | case RFM95_SX1276: |
walterluu | 3:85fc843a9d7d | 197 | if (DEBUG_MESSAGE) |
walterluu | 3:85fc843a9d7d | 198 | ad->printf(" > HopeRF RFM95xx <\r\n"); |
walterluu | 3:85fc843a9d7d | 199 | break; |
walterluu | 3:85fc843a9d7d | 200 | default: |
walterluu | 3:85fc843a9d7d | 201 | ad->printf(" > Board Type: unknown <\r\n"); |
walterluu | 3:85fc843a9d7d | 202 | } |
walterluu | 3:85fc843a9d7d | 203 | |
walterluu | 3:85fc843a9d7d | 204 | Radio->SetChannel(RF_FREQUENCY ); |
walterluu | 3:85fc843a9d7d | 205 | |
walterluu | 3:85fc843a9d7d | 206 | #if USE_MODEM_LORA == 1 |
walterluu | 3:85fc843a9d7d | 207 | |
walterluu | 3:85fc843a9d7d | 208 | if (LORA_FHSS_ENABLED) |
walterluu | 3:85fc843a9d7d | 209 | ad->printf(" > LORA FHSS Mode <\r\n"); |
walterluu | 3:85fc843a9d7d | 210 | if (!LORA_FHSS_ENABLED) |
walterluu | 3:85fc843a9d7d | 211 | ad->printf(" > LORA Mode <\r\n"); |
walterluu | 3:85fc843a9d7d | 212 | |
walterluu | 3:85fc843a9d7d | 213 | |
walterluu | 3:85fc843a9d7d | 214 | // Without this line, the default max payload length is only 64 bytes |
walterluu | 3:85fc843a9d7d | 215 | Radio->SetMaxPayloadLength(MODEM_LORA, 255); |
walterluu | 3:85fc843a9d7d | 216 | |
walterluu | 3:85fc843a9d7d | 217 | Radio->SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH, |
walterluu | 3:85fc843a9d7d | 218 | LORA_SPREADING_FACTOR, LORA_CODINGRATE, |
walterluu | 3:85fc843a9d7d | 219 | LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON, |
walterluu | 3:85fc843a9d7d | 220 | LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP, |
walterluu | 3:85fc843a9d7d | 221 | LORA_IQ_INVERSION_ON, 2000 ); |
walterluu | 3:85fc843a9d7d | 222 | |
walterluu | 3:85fc843a9d7d | 223 | Radio->SetRxConfig( MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR, |
walterluu | 3:85fc843a9d7d | 224 | LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH, |
walterluu | 3:85fc843a9d7d | 225 | LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON, 0, |
walterluu | 3:85fc843a9d7d | 226 | LORA_CRC_ENABLED, LORA_FHSS_ENABLED, LORA_NB_SYMB_HOP, |
walterluu | 3:85fc843a9d7d | 227 | LORA_IQ_INVERSION_ON, true ); |
walterluu | 3:85fc843a9d7d | 228 | |
walterluu | 3:85fc843a9d7d | 229 | #elif USE_MODEM_FSK == 1 |
walterluu | 3:85fc843a9d7d | 230 | |
walterluu | 3:85fc843a9d7d | 231 | ad->printf(" > FSK Mode <\n"); |
walterluu | 3:85fc843a9d7d | 232 | Radio->SetTxConfig( MODEM_FSK, TX_OUTPUT_POWER, FSK_FDEV, 0, |
walterluu | 3:85fc843a9d7d | 233 | FSK_DATARATE, 0, |
walterluu | 3:85fc843a9d7d | 234 | FSK_PREAMBLE_LENGTH, FSK_FIX_LENGTH_PAYLOAD_ON, |
walterluu | 3:85fc843a9d7d | 235 | FSK_CRC_ENABLED, 0, 0, 0, 2000 ); |
walterluu | 3:85fc843a9d7d | 236 | |
walterluu | 3:85fc843a9d7d | 237 | Radio->SetRxConfig( MODEM_FSK, FSK_BANDWIDTH, FSK_DATARATE, |
walterluu | 3:85fc843a9d7d | 238 | 0, FSK_AFC_BANDWIDTH, FSK_PREAMBLE_LENGTH, |
walterluu | 3:85fc843a9d7d | 239 | 0, FSK_FIX_LENGTH_PAYLOAD_ON, 0, FSK_CRC_ENABLED, |
walterluu | 3:85fc843a9d7d | 240 | 0, 0, false, true ); |
walterluu | 3:85fc843a9d7d | 241 | |
walterluu | 3:85fc843a9d7d | 242 | #else |
walterluu | 3:85fc843a9d7d | 243 | |
walterluu | 3:85fc843a9d7d | 244 | #error "Please define a modem in the compiler options." |
walterluu | 3:85fc843a9d7d | 245 | |
walterluu | 3:85fc843a9d7d | 246 | #endif |
walterluu | 3:85fc843a9d7d | 247 | |
walterluu | 3:85fc843a9d7d | 248 | if (DEBUG_MESSAGE) |
walterluu | 3:85fc843a9d7d | 249 | ad->printf("Starting Ping-Pong loop\r\n"); |
walterluu | 3:85fc843a9d7d | 250 | |
walterluu | 7:62c868478eef | 251 | #if MASTER == 1 |
walterluu | 7:62c868478eef | 252 | Radio->Rx( RX_TIMEOUT_VALUE ); // initate Rx State for Master |
walterluu | 7:62c868478eef | 253 | #endif |
walterluu | 7:62c868478eef | 254 | |
walterluu | 3:85fc843a9d7d | 255 | return 0; //added by Walter due to "Control reaches end of non-void function" |
walterluu | 3:85fc843a9d7d | 256 | } |
walterluu | 3:85fc843a9d7d | 257 | |
walterluu | 7:62c868478eef | 258 | |
walterluu | 7:62c868478eef | 259 | bool SX1276MasterCheckForNewData(void) |
walterluu | 7:62c868478eef | 260 | { |
walterluu | 7:62c868478eef | 261 | bool new_data_available = false; |
walterluu | 7:62c868478eef | 262 | switch( State ) |
walterluu | 7:62c868478eef | 263 | { |
walterluu | 7:62c868478eef | 264 | case RX: |
walterluu | 7:62c868478eef | 265 | if( BufferSizeRx > 0 ) |
walterluu | 7:62c868478eef | 266 | { |
walterluu | 7:62c868478eef | 267 | new_data_available = true; |
walterluu | 7:62c868478eef | 268 | wait_ms( 10 ); //do we need this? |
walterluu | 7:62c868478eef | 269 | if (DEBUG_MESSAGE) |
walterluu | 7:62c868478eef | 270 | ad->printf( "State=RX\r\n" ); |
walterluu | 7:62c868478eef | 271 | } |
walterluu | 7:62c868478eef | 272 | Radio->Rx( RX_TIMEOUT_VALUE ); |
walterluu | 7:62c868478eef | 273 | State = LOWPOWER; |
walterluu | 7:62c868478eef | 274 | break; |
walterluu | 7:62c868478eef | 275 | case RX_TIMEOUT: |
walterluu | 7:62c868478eef | 276 | wait_ms( 10 ); |
walterluu | 7:62c868478eef | 277 | if (DEBUG_MESSAGE) |
walterluu | 7:62c868478eef | 278 | ad->printf( "State=RX_TIMEOUT\r\n" ); |
walterluu | 7:62c868478eef | 279 | Radio->Rx( RX_TIMEOUT_VALUE ); |
walterluu | 7:62c868478eef | 280 | State = LOWPOWER; |
walterluu | 7:62c868478eef | 281 | break; |
walterluu | 7:62c868478eef | 282 | case RX_ERROR: |
walterluu | 7:62c868478eef | 283 | // We have received a Packet with a CRC error, send reply as if packet was correct |
walterluu | 7:62c868478eef | 284 | wait_ms( 10 ); |
walterluu | 7:62c868478eef | 285 | if (DEBUG_MESSAGE) |
walterluu | 7:62c868478eef | 286 | ad->printf( "State=RX_ERROR\r\n" ); |
walterluu | 7:62c868478eef | 287 | Radio->Rx( RX_TIMEOUT_VALUE ); |
walterluu | 7:62c868478eef | 288 | State = LOWPOWER; |
walterluu | 7:62c868478eef | 289 | break; |
walterluu | 7:62c868478eef | 290 | case TX_TIMEOUT: |
walterluu | 7:62c868478eef | 291 | if (DEBUG_MESSAGE) |
walterluu | 7:62c868478eef | 292 | ad->printf( "State=TX_TIMEOUT\r\n" ); |
walterluu | 7:62c868478eef | 293 | State = LOWPOWER; |
walterluu | 7:62c868478eef | 294 | break; |
walterluu | 7:62c868478eef | 295 | case LOWPOWER: |
walterluu | 7:62c868478eef | 296 | sleep(); |
walterluu | 7:62c868478eef | 297 | break; |
walterluu | 7:62c868478eef | 298 | default: |
walterluu | 7:62c868478eef | 299 | sleep(); // TODO, should this be removed? |
walterluu | 7:62c868478eef | 300 | break; |
walterluu | 7:62c868478eef | 301 | } |
walterluu | 7:62c868478eef | 302 | return new_data_available; |
walterluu | 7:62c868478eef | 303 | } |
walterluu | 7:62c868478eef | 304 | |
walterluu | 7:62c868478eef | 305 | void SX1276SlaveSendData(void) |
walterluu | 7:62c868478eef | 306 | { |
walterluu | 7:62c868478eef | 307 | //wait_ms( 10 ); |
walterluu | 7:62c868478eef | 308 | Radio->Send( BufferTx, BufferSizeTx ); |
walterluu | 7:62c868478eef | 309 | sleep(); |
walterluu | 7:62c868478eef | 310 | } |
walterluu | 7:62c868478eef | 311 | |
walterluu | 3:85fc843a9d7d | 312 | /**************************************************************************************************************************************** |
walterluu | 3:85fc843a9d7d | 313 | * |
walterluu | 3:85fc843a9d7d | 314 | ****************************************************************************************************************************************/ |
walterluu | 7:62c868478eef | 315 | //int SX1276PingPong(void) |
walterluu | 7:62c868478eef | 316 | //{ |
walterluu | 7:62c868478eef | 317 | //#if MASTER == 1 // Master Device: Bluetooth Gateway |
walterluu | 7:62c868478eef | 318 | // bool isMaster = true; |
walterluu | 7:62c868478eef | 319 | //#elif SLAVE == 1 // Slave Device: Robot |
walterluu | 7:62c868478eef | 320 | // bool isMaster = false; |
walterluu | 7:62c868478eef | 321 | //#endif |
walterluu | 7:62c868478eef | 322 | // |
walterluu | 7:62c868478eef | 323 | // switch( State ) |
walterluu | 7:62c868478eef | 324 | // { |
walterluu | 7:62c868478eef | 325 | // case RX: |
walterluu | 7:62c868478eef | 326 | //// *led3 = 0; // uncommented |
walterluu | 7:62c868478eef | 327 | // if( isMaster == true ) // Master Device received payload from Slave |
walterluu | 7:62c868478eef | 328 | // { |
walterluu | 7:62c868478eef | 329 | // if( BufferSizeRx > 0 ) |
walterluu | 7:62c868478eef | 330 | // { |
walterluu | 7:62c868478eef | 331 | // /* This checks if the ID of the received transaction is matching that of |
walterluu | 7:62c868478eef | 332 | // * the slave device's ID. This is defined in the GenericPingPong.h |
walterluu | 7:62c868478eef | 333 | // */ |
walterluu | 7:62c868478eef | 334 | // if( memcmp(&BufferRx[rx_idx_signature], PongMsg, sizeof(PongMsg)) == 0 ) |
walterluu | 7:62c868478eef | 335 | // { |
walterluu | 7:62c868478eef | 336 | //// *led = !*led; |
walterluu | 7:62c868478eef | 337 | //// *led = 0; // changed to 0 |
walterluu | 7:62c868478eef | 338 | // if (DEBUG_MESSAGE) |
walterluu | 7:62c868478eef | 339 | // ad->printf( "...Pong\r\n" ); |
walterluu | 7:62c868478eef | 340 | // wait_ms( 10 ); |
walterluu | 7:62c868478eef | 341 | // Radio->Send( BufferTx, BufferSizeTx ); |
walterluu | 7:62c868478eef | 342 | // } // memcmp != 0 |
walterluu | 7:62c868478eef | 343 | // else // valid reception but not a PONG message |
walterluu | 7:62c868478eef | 344 | // { // Set device as master and start again |
walterluu | 7:62c868478eef | 345 | // isMaster = true; // new update |
walterluu | 7:62c868478eef | 346 | // Radio->Rx( RX_TIMEOUT_VALUE ); |
walterluu | 7:62c868478eef | 347 | // } // end of if memcmp |
walterluu | 7:62c868478eef | 348 | // } // end of if BufferSizeRx > 0 |
walterluu | 7:62c868478eef | 349 | // } // end of isMaster == true |
walterluu | 7:62c868478eef | 350 | // else // Slave Device received payload from Master |
walterluu | 7:62c868478eef | 351 | // { |
walterluu | 7:62c868478eef | 352 | // if( BufferSizeRx > 0 ) |
walterluu | 7:62c868478eef | 353 | // { |
walterluu | 7:62c868478eef | 354 | // if( memcmp(BufferRx, PingMsg, sizeof(PingMsg)) == 0 ) |
walterluu | 7:62c868478eef | 355 | // { |
walterluu | 7:62c868478eef | 356 | //// *led = !*led; |
walterluu | 7:62c868478eef | 357 | //// *led = 0 //changed to 0 |
walterluu | 7:62c868478eef | 358 | // if (DEBUG_MESSAGE) |
walterluu | 7:62c868478eef | 359 | // ad->printf( "...Ping\r\n" ); |
walterluu | 7:62c868478eef | 360 | // wait_ms( 10 ); |
walterluu | 7:62c868478eef | 361 | // Radio->Send( BufferTx, BufferSizeTx ); |
walterluu | 7:62c868478eef | 362 | // } |
walterluu | 7:62c868478eef | 363 | // else // valid reception but not a PING as expected |
walterluu | 7:62c868478eef | 364 | // { // Set device as slave and start again |
walterluu | 7:62c868478eef | 365 | // isMaster = false; // new update |
walterluu | 7:62c868478eef | 366 | // Radio->Rx( RX_TIMEOUT_VALUE ); |
walterluu | 7:62c868478eef | 367 | // } |
walterluu | 7:62c868478eef | 368 | // } // end of if BufferSizeRx > 0 |
walterluu | 7:62c868478eef | 369 | // } // end of if (isMaster == True), end of checking devices |
walterluu | 7:62c868478eef | 370 | // |
walterluu | 7:62c868478eef | 371 | // State = LOWPOWER; // back to LOWPOWER State |
walterluu | 7:62c868478eef | 372 | // |
walterluu | 7:62c868478eef | 373 | // break; |
walterluu | 7:62c868478eef | 374 | // case TX: |
walterluu | 7:62c868478eef | 375 | //// *led3 = 0; // change to 0 |
walterluu | 7:62c868478eef | 376 | // if( isMaster == true ) // Master Device |
walterluu | 7:62c868478eef | 377 | // { |
walterluu | 7:62c868478eef | 378 | // if (DEBUG_MESSAGE) |
walterluu | 7:62c868478eef | 379 | // ad->printf("Ping...\r\n" ); |
walterluu | 7:62c868478eef | 380 | // } |
walterluu | 7:62c868478eef | 381 | // else // Slave Device |
walterluu | 7:62c868478eef | 382 | // { |
walterluu | 7:62c868478eef | 383 | // if (DEBUG_MESSAGE) |
walterluu | 7:62c868478eef | 384 | // ad->printf("Pong...\r\n" ); |
walterluu | 7:62c868478eef | 385 | // } |
walterluu | 7:62c868478eef | 386 | // Radio->Rx( RX_TIMEOUT_VALUE ); |
walterluu | 7:62c868478eef | 387 | // State = LOWPOWER; // back to LOWPOWER State |
walterluu | 7:62c868478eef | 388 | // break; |
walterluu | 7:62c868478eef | 389 | // case RX_TIMEOUT: |
walterluu | 7:62c868478eef | 390 | // if( isMaster == true ) // Master Device |
walterluu | 7:62c868478eef | 391 | // { |
walterluu | 7:62c868478eef | 392 | // wait_ms( 10 ); |
walterluu | 7:62c868478eef | 393 | // Radio->Send( BufferTx, BufferSizeTx ); |
walterluu | 7:62c868478eef | 394 | // } |
walterluu | 7:62c868478eef | 395 | // else // Slave Device |
walterluu | 7:62c868478eef | 396 | // { |
walterluu | 7:62c868478eef | 397 | // Radio->Rx( RX_TIMEOUT_VALUE ); |
walterluu | 7:62c868478eef | 398 | // } |
walterluu | 7:62c868478eef | 399 | // State = LOWPOWER; // back to LOWPOWER State |
walterluu | 7:62c868478eef | 400 | // break; |
walterluu | 7:62c868478eef | 401 | // case RX_ERROR: |
walterluu | 7:62c868478eef | 402 | // // We have received a Packet with a CRC error, send reply as if packet was correct |
walterluu | 7:62c868478eef | 403 | // if( isMaster == true ) // Master Device |
walterluu | 7:62c868478eef | 404 | // { |
walterluu | 7:62c868478eef | 405 | // // Send the next PING frame |
walterluu | 7:62c868478eef | 406 | //// memcpy(BufferTx, PingMsg, sizeof(PingMsg)); |
walterluu | 7:62c868478eef | 407 | ///* |
walterluu | 7:62c868478eef | 408 | // for( i = 4; i < BufferSizeTx; i++ ) |
walterluu | 7:62c868478eef | 409 | // { |
walterluu | 7:62c868478eef | 410 | // BufferTx[i] = i - 4; |
walterluu | 7:62c868478eef | 411 | // } |
walterluu | 7:62c868478eef | 412 | //*/ |
walterluu | 7:62c868478eef | 413 | //// fillPayloadWithGlobalBufs(BufferTx); |
walterluu | 7:62c868478eef | 414 | // wait_ms( 10 ); |
walterluu | 7:62c868478eef | 415 | // Radio->Send( BufferTx, BufferSizeTx ); |
walterluu | 7:62c868478eef | 416 | // } |
walterluu | 7:62c868478eef | 417 | // else // Slave Device |
walterluu | 7:62c868478eef | 418 | // { |
walterluu | 7:62c868478eef | 419 | // // Send the next PONG frame |
walterluu | 7:62c868478eef | 420 | //// memcpy(BufferTx, PongMsg, sizeof(PongMsg)); |
walterluu | 7:62c868478eef | 421 | ///* |
walterluu | 7:62c868478eef | 422 | // for( i = sizeof(PongMsg); i < BufferSizeTx; i++ ) |
walterluu | 7:62c868478eef | 423 | // { |
walterluu | 7:62c868478eef | 424 | // BufferTx[i] = i - sizeof(PongMsg); |
walterluu | 7:62c868478eef | 425 | // } |
walterluu | 7:62c868478eef | 426 | //*/ |
walterluu | 7:62c868478eef | 427 | // wait_ms( 10 ); |
walterluu | 7:62c868478eef | 428 | // Radio->Send( BufferTx, BufferSizeTx ); |
walterluu | 7:62c868478eef | 429 | // } |
walterluu | 7:62c868478eef | 430 | // State = LOWPOWER; // Back to Low Power State |
walterluu | 7:62c868478eef | 431 | // break; |
walterluu | 7:62c868478eef | 432 | // case TX_TIMEOUT: |
walterluu | 7:62c868478eef | 433 | // Radio->Rx( RX_TIMEOUT_VALUE ); |
walterluu | 7:62c868478eef | 434 | // State = LOWPOWER; |
walterluu | 7:62c868478eef | 435 | // break; |
walterluu | 7:62c868478eef | 436 | // case LOWPOWER: |
walterluu | 7:62c868478eef | 437 | // sleep(); |
walterluu | 7:62c868478eef | 438 | // break; |
walterluu | 7:62c868478eef | 439 | // default: |
walterluu | 7:62c868478eef | 440 | // State = LOWPOWER; |
walterluu | 7:62c868478eef | 441 | // break; |
walterluu | 7:62c868478eef | 442 | // } |
walterluu | 7:62c868478eef | 443 | //} |
walterluu | 3:85fc843a9d7d | 444 | |
walterluu | 3:85fc843a9d7d | 445 | |
walterluu | 3:85fc843a9d7d | 446 | int TimeOnAirSend(void) { |
walterluu | 3:85fc843a9d7d | 447 | |
walterluu | 3:85fc843a9d7d | 448 | return Radio->TimeOnAir( MODEM_LORA, sizeof(BufferSizeTx)); |
walterluu | 3:85fc843a9d7d | 449 | |
walterluu | 3:85fc843a9d7d | 450 | } |
walterluu | 3:85fc843a9d7d | 451 | |
walterluu | 3:85fc843a9d7d | 452 | |
walterluu | 3:85fc843a9d7d | 453 | int SX1276SensorSend(void) { |
walterluu | 3:85fc843a9d7d | 454 | |
walterluu | 3:85fc843a9d7d | 455 | switch( State ) |
walterluu | 3:85fc843a9d7d | 456 | { |
walterluu | 3:85fc843a9d7d | 457 | case RX: |
walterluu | 3:85fc843a9d7d | 458 | // if( BufferSizeRx > 0 ) |
walterluu | 3:85fc843a9d7d | 459 | // { |
walterluu | 3:85fc843a9d7d | 460 | // Radio->Send( BufferTx, BufferSizeTx ); |
walterluu | 3:85fc843a9d7d | 461 | // Radio->Rx( RX_TIMEOUT_VALUE ); |
walterluu | 3:85fc843a9d7d | 462 | // } // end of if BufferSizeRx > 0 |
walterluu | 3:85fc843a9d7d | 463 | |
walterluu | 3:85fc843a9d7d | 464 | Radio->Send( BufferTx, BufferSizeTx ); |
walterluu | 3:85fc843a9d7d | 465 | Radio->Rx( RX_TIMEOUT_VALUE ); |
walterluu | 3:85fc843a9d7d | 466 | |
walterluu | 3:85fc843a9d7d | 467 | State = LOWPOWER; // back to LOWPOWER State |
walterluu | 3:85fc843a9d7d | 468 | |
walterluu | 3:85fc843a9d7d | 469 | break; |
walterluu | 3:85fc843a9d7d | 470 | } // end of switch statement |
walterluu | 3:85fc843a9d7d | 471 | } |
walterluu | 3:85fc843a9d7d | 472 | |
walterluu | 3:85fc843a9d7d | 473 | |
walterluu | 3:85fc843a9d7d | 474 | |
walterluu | 3:85fc843a9d7d | 475 | int SX1276GateWayReceive(int TimeOut) { |
walterluu | 3:85fc843a9d7d | 476 | |
walterluu | 3:85fc843a9d7d | 477 | switch( State ) |
walterluu | 3:85fc843a9d7d | 478 | { |
walterluu | 3:85fc843a9d7d | 479 | case RX: |
walterluu | 3:85fc843a9d7d | 480 | // if( BufferSizeRx > 0 ) |
walterluu | 3:85fc843a9d7d | 481 | // { |
walterluu | 3:85fc843a9d7d | 482 | //// Radio->Send( BufferTx, BufferSizeTx ); |
walterluu | 3:85fc843a9d7d | 483 | // Radio->Rx( RX_TIMEOUT_VALUE ); |
walterluu | 3:85fc843a9d7d | 484 | // } // end of if BufferSizeRx > 0 |
walterluu | 3:85fc843a9d7d | 485 | |
walterluu | 3:85fc843a9d7d | 486 | |
walterluu | 3:85fc843a9d7d | 487 | // Radio->Rx( RX_TIMEOUT_VALUE ); |
walterluu | 3:85fc843a9d7d | 488 | |
walterluu | 3:85fc843a9d7d | 489 | Radio->Rx( TimeOut ); |
walterluu | 3:85fc843a9d7d | 490 | |
walterluu | 3:85fc843a9d7d | 491 | State = LOWPOWER; // back to LOWPOWER State |
walterluu | 3:85fc843a9d7d | 492 | |
walterluu | 3:85fc843a9d7d | 493 | break; |
walterluu | 3:85fc843a9d7d | 494 | } // end of switch statement |
walterluu | 3:85fc843a9d7d | 495 | } |
walterluu | 3:85fc843a9d7d | 496 | |
walterluu | 3:85fc843a9d7d | 497 | |
walterluu | 3:85fc843a9d7d | 498 | |
walterluu | 3:85fc843a9d7d | 499 | |
walterluu | 3:85fc843a9d7d | 500 | //void OnTxDone(void *radio, void *userThisPtr, void *userData) |
walterluu | 3:85fc843a9d7d | 501 | //{ |
walterluu | 3:85fc843a9d7d | 502 | // Radio->Sleep( ); |
walterluu | 3:85fc843a9d7d | 503 | // State = TX; |
walterluu | 3:85fc843a9d7d | 504 | // if (DEBUG_MESSAGE) |
walterluu | 3:85fc843a9d7d | 505 | // dprintf("> OnTxDone"); |
walterluu | 3:85fc843a9d7d | 506 | //} |
walterluu | 3:85fc843a9d7d | 507 | |
walterluu | 3:85fc843a9d7d | 508 | // moved to main |
walterluu | 3:85fc843a9d7d | 509 | void OnTxDone(void *radio, void *userThisPtr, void *userData) |
walterluu | 3:85fc843a9d7d | 510 | { |
walterluu | 3:85fc843a9d7d | 511 | Radio->Sleep( ); |
walterluu | 3:85fc843a9d7d | 512 | State = TX; |
walterluu | 3:85fc843a9d7d | 513 | if (DEBUG_MESSAGE) |
walterluu | 3:85fc843a9d7d | 514 | //dprintf("> OnTxDone"); |
walterluu | 3:85fc843a9d7d | 515 | ad->printf("> OnTxDone"); |
walterluu | 3:85fc843a9d7d | 516 | } |
walterluu | 3:85fc843a9d7d | 517 | |
walterluu | 3:85fc843a9d7d | 518 | |
walterluu | 3:85fc843a9d7d | 519 | //void OnRxDone(void *radio, void *userThisPtr, void *userData, uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr) |
walterluu | 3:85fc843a9d7d | 520 | //{ |
walterluu | 3:85fc843a9d7d | 521 | // Radio->Sleep( ); |
walterluu | 3:85fc843a9d7d | 522 | // BufferSize = size; |
walterluu | 3:85fc843a9d7d | 523 | // memcpy( Buffer, payload, BufferSize ); |
walterluu | 3:85fc843a9d7d | 524 | // State = RX; |
walterluu | 3:85fc843a9d7d | 525 | // if (DEBUG_MESSAGE) |
walterluu | 3:85fc843a9d7d | 526 | // dprintf("> OnRxDone: RssiValue=%d dBm, SnrValue=%d", rssi, snr); |
walterluu | 3:85fc843a9d7d | 527 | // dump("Data:", payload, size); |
walterluu | 3:85fc843a9d7d | 528 | //} |
walterluu | 3:85fc843a9d7d | 529 | |
walterluu | 3:85fc843a9d7d | 530 | // moved to main |
walterluu | 3:85fc843a9d7d | 531 | void OnRxDone(void *radio, void *userThisPtr, void *userData, uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr) |
walterluu | 3:85fc843a9d7d | 532 | { |
walterluu | 3:85fc843a9d7d | 533 | Radio->Sleep( ); |
walterluu | 3:85fc843a9d7d | 534 | |
walterluu | 3:85fc843a9d7d | 535 | if(BufferSizeRx != size) |
walterluu | 3:85fc843a9d7d | 536 | memcpy( BufferRx, payload, size ); |
walterluu | 3:85fc843a9d7d | 537 | else |
walterluu | 3:85fc843a9d7d | 538 | memcpy( BufferRx, payload, BufferSizeRx ); |
walterluu | 3:85fc843a9d7d | 539 | State = RX; |
walterluu | 3:85fc843a9d7d | 540 | |
walterluu | 3:85fc843a9d7d | 541 | // Reset the RxTimeoutCount |
walterluu | 3:85fc843a9d7d | 542 | RxTimeoutCount = 0; |
walterluu | 3:85fc843a9d7d | 543 | |
walterluu | 3:85fc843a9d7d | 544 | if (DEBUG_MESSAGE) { |
walterluu | 3:85fc843a9d7d | 545 | ad->printf("> OnRxDone: RssiValue=%d dBm, SnrValue=%d\n", rssi, snr); |
walterluu | 3:85fc843a9d7d | 546 | dump("Data:", payload, size); |
walterluu | 3:85fc843a9d7d | 547 | } |
walterluu | 3:85fc843a9d7d | 548 | } |
walterluu | 3:85fc843a9d7d | 549 | |
walterluu | 3:85fc843a9d7d | 550 | //void OnTxTimeout(void *radio, void *userThisPtr, void *userData) |
walterluu | 3:85fc843a9d7d | 551 | //{ |
walterluu | 3:85fc843a9d7d | 552 | // *led3 = 0; |
walterluu | 3:85fc843a9d7d | 553 | // Radio->Sleep( ); |
walterluu | 3:85fc843a9d7d | 554 | // State = TX_TIMEOUT; |
walterluu | 3:85fc843a9d7d | 555 | // if(DEBUG_MESSAGE) |
walterluu | 3:85fc843a9d7d | 556 | // dprintf("> OnTxTimeout"); |
walterluu | 3:85fc843a9d7d | 557 | //} |
walterluu | 3:85fc843a9d7d | 558 | |
walterluu | 3:85fc843a9d7d | 559 | // moved to main |
walterluu | 3:85fc843a9d7d | 560 | void OnTxTimeout(void *radio, void *userThisPtr, void *userData) |
walterluu | 3:85fc843a9d7d | 561 | { |
walterluu | 3:85fc843a9d7d | 562 | // *led3 = 0; |
walterluu | 3:85fc843a9d7d | 563 | Radio->Sleep( ); |
walterluu | 3:85fc843a9d7d | 564 | State = TX_TIMEOUT; |
walterluu | 3:85fc843a9d7d | 565 | if(DEBUG_MESSAGE) |
walterluu | 3:85fc843a9d7d | 566 | ad->printf("> OnTxTimeout"); |
walterluu | 3:85fc843a9d7d | 567 | } |
walterluu | 3:85fc843a9d7d | 568 | |
walterluu | 3:85fc843a9d7d | 569 | //void OnRxTimeout(void *radio, void *userThisPtr, void *userData) |
walterluu | 3:85fc843a9d7d | 570 | //{ |
walterluu | 3:85fc843a9d7d | 571 | // *led3 = 0; |
walterluu | 3:85fc843a9d7d | 572 | // Radio->Sleep( ); |
walterluu | 3:85fc843a9d7d | 573 | // Buffer[BufferSize-1] = 0; |
walterluu | 3:85fc843a9d7d | 574 | // State = RX_TIMEOUT; |
walterluu | 3:85fc843a9d7d | 575 | // if (DEBUG_MESSAGE) |
walterluu | 3:85fc843a9d7d | 576 | // dprintf("> OnRxTimeout"); |
walterluu | 3:85fc843a9d7d | 577 | //} |
walterluu | 3:85fc843a9d7d | 578 | |
walterluu | 3:85fc843a9d7d | 579 | // moved to main |
walterluu | 3:85fc843a9d7d | 580 | void OnRxTimeout(void *radio, void *userThisPtr, void *userData) |
walterluu | 3:85fc843a9d7d | 581 | { |
walterluu | 3:85fc843a9d7d | 582 | Radio->Sleep( ); |
walterluu | 3:85fc843a9d7d | 583 | BufferRx[BufferSizeRx-1] = 0; |
walterluu | 3:85fc843a9d7d | 584 | State = RX_TIMEOUT; |
walterluu | 3:85fc843a9d7d | 585 | if (DEBUG_MESSAGE) |
walterluu | 3:85fc843a9d7d | 586 | ad->printf("> OnRxTimeout\n"); |
walterluu | 3:85fc843a9d7d | 587 | |
walterluu | 3:85fc843a9d7d | 588 | // Increment how many times a transmission times out\ |
walterluu | 3:85fc843a9d7d | 589 | RxTimeoutCount = RxTimeoutCount + 1; |
walterluu | 3:85fc843a9d7d | 590 | } |
walterluu | 3:85fc843a9d7d | 591 | |
walterluu | 3:85fc843a9d7d | 592 | //void OnRxError(void *radio, void *userThisPtr, void *userData) |
walterluu | 3:85fc843a9d7d | 593 | //{ |
walterluu | 3:85fc843a9d7d | 594 | // Radio->Sleep( ); |
walterluu | 3:85fc843a9d7d | 595 | // State = RX_ERROR; |
walterluu | 3:85fc843a9d7d | 596 | // if (DEBUG_MESSAGE) |
walterluu | 3:85fc843a9d7d | 597 | // dprintf("> OnRxError"); |
walterluu | 3:85fc843a9d7d | 598 | //} |
walterluu | 3:85fc843a9d7d | 599 | |
walterluu | 3:85fc843a9d7d | 600 | // moved to main |
walterluu | 3:85fc843a9d7d | 601 | void OnRxError(void *radio, void *userThisPtr, void *userData) |
walterluu | 3:85fc843a9d7d | 602 | { |
walterluu | 3:85fc843a9d7d | 603 | Radio->Sleep( ); |
walterluu | 3:85fc843a9d7d | 604 | State = RX_ERROR; |
walterluu | 3:85fc843a9d7d | 605 | if (DEBUG_MESSAGE) |
walterluu | 3:85fc843a9d7d | 606 | ad->printf("> OnRxError\n"); |
walterluu | 3:85fc843a9d7d | 607 | |
walterluu | 3:85fc843a9d7d | 608 | // Increment how many times a transmission times out\ |
walterluu | 3:85fc843a9d7d | 609 | RxTimeoutCount = RxTimeoutCount + 1; |
walterluu | 3:85fc843a9d7d | 610 | } |
walterluu | 3:85fc843a9d7d | 611 | |
walterluu | 3:85fc843a9d7d | 612 | |
walterluu | 3:85fc843a9d7d | 613 | int numOfRxTimeouts() |
walterluu | 3:85fc843a9d7d | 614 | { |
walterluu | 3:85fc843a9d7d | 615 | return RxTimeoutCount; |
walterluu | 3:85fc843a9d7d | 616 | } |
walterluu | 3:85fc843a9d7d | 617 | |
walterluu | 3:85fc843a9d7d | 618 | |
walterluu | 7:62c868478eef | 619 | |
walterluu | 7:62c868478eef | 620 | |
walterluu | 3:85fc843a9d7d | 621 | #endif |