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