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