Version FC
Dependencies: DmTftLibrary eeprom SX1280Lib filesystem mbed
Fork of MSNV2-Terminal_V1-5 by
main.cpp@2:57f098de07c7, 2017-08-02 (annotated)
- Committer:
- FCH_31
- Date:
- Wed Aug 02 21:59:03 2017 +0000
- Revision:
- 2:57f098de07c7
- Parent:
- 1:22e02d1cfbca
- Child:
- 3:3adb454ba1d2
Version 0.1 Base compl?te
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
GregCr | 1:22e02d1cfbca | 1 | #include "mbed.h" |
GregCr | 1:22e02d1cfbca | 2 | #include "radio.h" |
GregCr | 1:22e02d1cfbca | 3 | #include "sx1280-hal.h" |
GregCr | 1:22e02d1cfbca | 4 | |
GregCr | 1:22e02d1cfbca | 5 | |
FCH_31 | 2:57f098de07c7 | 6 | #define FIRMWARE_VERSION ( ( char* )"Firmware Version: 01" ) // display firmware version on RS232 |
FCH_31 | 2:57f098de07c7 | 7 | #define MODE_LORA // Lora modulation |
FCH_31 | 2:57f098de07c7 | 8 | #define RF_FREQUENCY 2400000000UL // HzNominal frequency |
FCH_31 | 2:57f098de07c7 | 9 | #define TX_OUTPUT_POWER 13 // Output power in dBm [-18..+13] dBm |
GregCr | 1:22e02d1cfbca | 10 | |
FCH_31 | 2:57f098de07c7 | 11 | typedef enum // States of the application |
GregCr | 1:22e02d1cfbca | 12 | { |
GregCr | 1:22e02d1cfbca | 13 | APP_LOWPOWER, |
GregCr | 1:22e02d1cfbca | 14 | APP_RX, |
GregCr | 1:22e02d1cfbca | 15 | APP_RX_TIMEOUT, |
GregCr | 1:22e02d1cfbca | 16 | APP_RX_ERROR, |
GregCr | 1:22e02d1cfbca | 17 | APP_TX, |
GregCr | 1:22e02d1cfbca | 18 | APP_TX_TIMEOUT, |
GregCr | 1:22e02d1cfbca | 19 | }AppStates_t; |
GregCr | 1:22e02d1cfbca | 20 | |
FCH_31 | 2:57f098de07c7 | 21 | #define BUFFER_SIZE 16 // Payload size |
FCH_31 | 2:57f098de07c7 | 22 | //#define BUFFER_SIZE 34 |
GregCr | 1:22e02d1cfbca | 23 | |
GregCr | 1:22e02d1cfbca | 24 | /*! |
FCH_31 | 2:57f098de07c7 | 25 | * Message type for this application |
GregCr | 1:22e02d1cfbca | 26 | */ |
FCH_31 | 2:57f098de07c7 | 27 | //const uint8_t PingMsg[] = "DATA IOT TERMINAL"; |
FCH_31 | 2:57f098de07c7 | 28 | //const uint8_t PongMsg[] = "RESPONSE GATEWAY "; |
FCH_31 | 2:57f098de07c7 | 29 | const uint8_t PingMsg[] = "PING DATA IOT TERMINAL"; |
GregCr | 1:22e02d1cfbca | 30 | const uint8_t PongMsg[] = "PONG"; |
GregCr | 1:22e02d1cfbca | 31 | |
GregCr | 1:22e02d1cfbca | 32 | /*! |
GregCr | 1:22e02d1cfbca | 33 | * \brief Defines the size of the token defining message type in the payload |
GregCr | 1:22e02d1cfbca | 34 | */ |
GregCr | 1:22e02d1cfbca | 35 | #define PINGPONGSIZE 4 |
GregCr | 1:22e02d1cfbca | 36 | |
FCH_31 | 2:57f098de07c7 | 37 | uint8_t BufferSize = BUFFER_SIZE; // Size of the buffer |
FCH_31 | 2:57f098de07c7 | 38 | uint8_t Buffer[BUFFER_SIZE]; // Buffer |
GregCr | 1:22e02d1cfbca | 39 | |
FCH_31 | 2:57f098de07c7 | 40 | AppStates_t AppState = APP_LOWPOWER; // State of the application |
GregCr | 1:22e02d1cfbca | 41 | |
GregCr | 1:22e02d1cfbca | 42 | int8_t RssiValue = 0; |
GregCr | 1:22e02d1cfbca | 43 | int8_t SnrValue = 0; |
GregCr | 1:22e02d1cfbca | 44 | |
FCH_31 | 2:57f098de07c7 | 45 | void OnTxDone ( void ); // Function to be executed on Radio Tx Done event |
FCH_31 | 2:57f098de07c7 | 46 | void OnRxDone ( void ); // Function to be executed on Radio Rx Done event |
FCH_31 | 2:57f098de07c7 | 47 | void OnTxTimeout ( void ); // Function executed on Radio Tx Timeout event |
FCH_31 | 2:57f098de07c7 | 48 | void OnRxTimeout ( void ); // Function executed on Radio Rx Timeout event |
FCH_31 | 2:57f098de07c7 | 49 | void OnRxError ( IrqErrorCode_t ); // Function executed on Radio Rx Error event |
GregCr | 1:22e02d1cfbca | 50 | |
FCH_31 | 2:57f098de07c7 | 51 | RadioCallbacks_t callbacks = // All the callbacks are stored in a structure |
GregCr | 1:22e02d1cfbca | 52 | { |
GregCr | 1:22e02d1cfbca | 53 | &OnTxDone, // txDone |
GregCr | 1:22e02d1cfbca | 54 | &OnRxDone, // rxDone |
GregCr | 1:22e02d1cfbca | 55 | NULL, // syncWordDone |
GregCr | 1:22e02d1cfbca | 56 | NULL, // headerDone |
GregCr | 1:22e02d1cfbca | 57 | &OnTxTimeout, // txTimeout |
GregCr | 1:22e02d1cfbca | 58 | &OnRxTimeout, // rxTimeout |
GregCr | 1:22e02d1cfbca | 59 | &OnRxError, // rxError |
GregCr | 1:22e02d1cfbca | 60 | NULL, // rangingDone |
GregCr | 1:22e02d1cfbca | 61 | NULL, // cadDone |
GregCr | 1:22e02d1cfbca | 62 | }; |
GregCr | 1:22e02d1cfbca | 63 | |
FCH_31 | 2:57f098de07c7 | 64 | // mosi, miso, sclk, nss, busy, dio1, dio2, dio3, rst, callbacks... |
FCH_31 | 2:57f098de07c7 | 65 | SX1280Hal Radio ( D11 , D12 , D13 , D7 , D3 , D5 , NC , NC , A0 , &callbacks ); |
GregCr | 1:22e02d1cfbca | 66 | |
FCH_31 | 2:57f098de07c7 | 67 | DigitalOut ANT_SW ( A3 ); |
FCH_31 | 2:57f098de07c7 | 68 | DigitalOut TxLed ( A4 ); |
FCH_31 | 2:57f098de07c7 | 69 | DigitalOut RxLed ( A5 ); |
GregCr | 1:22e02d1cfbca | 70 | |
GregCr | 1:22e02d1cfbca | 71 | /*! |
FCH_31 | 2:57f098de07c7 | 72 | * Define IO for Unused Pin |
GregCr | 1:22e02d1cfbca | 73 | */ |
FCH_31 | 2:57f098de07c7 | 74 | DigitalOut F_CS ( D6 ); // MBED description of pin |
FCH_31 | 2:57f098de07c7 | 75 | DigitalOut SD_CS ( D8 ); // MBED description of pin |
GregCr | 1:22e02d1cfbca | 76 | |
FCH_31 | 2:57f098de07c7 | 77 | #define TX_TIMEOUT_VALUE 100 // ms Number of tick size steps for tx timeout |
FCH_31 | 2:57f098de07c7 | 78 | #define RX_TIMEOUT_VALUE 100 // ms Number of tick size steps for rx timeout |
FCH_31 | 2:57f098de07c7 | 79 | #define RX_TIMEOUT_TICK_SIZE RADIO_TICK_SIZE_1000_US // Size of ticks (used for Tx and Rx timeout) |
FCH_31 | 2:57f098de07c7 | 80 | |
FCH_31 | 2:57f098de07c7 | 81 | uint16_t RxIrqMask = IRQ_RX_DONE | IRQ_RX_TX_TIMEOUT; // Mask of IRQs to listen to in rx mode |
FCH_31 | 2:57f098de07c7 | 82 | uint16_t TxIrqMask = IRQ_TX_DONE | IRQ_RX_TX_TIMEOUT; // Mask of IRQs to listen to in tx mode |
FCH_31 | 2:57f098de07c7 | 83 | |
FCH_31 | 2:57f098de07c7 | 84 | PacketParams_t PacketParams; // Locals parameters and status for radio API |
FCH_31 | 2:57f098de07c7 | 85 | PacketStatus_t PacketStatus; // NEED TO BE OPTIMIZED, COPY OF STUCTURE ALREADY EXISTING |
GregCr | 1:22e02d1cfbca | 86 | |
FCH_31 | 2:57f098de07c7 | 87 | bool isMaster = true; |
FCH_31 | 2:57f098de07c7 | 88 | ModulationParams_t modulationParams; |
FCH_31 | 2:57f098de07c7 | 89 | |
FCH_31 | 2:57f098de07c7 | 90 | |
FCH_31 | 2:57f098de07c7 | 91 | /* Specify serial datarate for UART debug output */ |
FCH_31 | 2:57f098de07c7 | 92 | void baud ( int baudrate ) { Serial s( USBTX, USBRX ); s.baud( baudrate );} |
GregCr | 1:22e02d1cfbca | 93 | |
FCH_31 | 2:57f098de07c7 | 94 | void setup () { |
FCH_31 | 2:57f098de07c7 | 95 | baud (115200); |
FCH_31 | 2:57f098de07c7 | 96 | |
FCH_31 | 2:57f098de07c7 | 97 | printf( "\n\n\r SX1280 Terminal IoT LORA MODULATION 2.4GHz (%s)\n\n\r", FIRMWARE_VERSION ); |
GregCr | 1:22e02d1cfbca | 98 | |
FCH_31 | 2:57f098de07c7 | 99 | F_CS = 1 ; |
FCH_31 | 2:57f098de07c7 | 100 | SD_CS = 1 ; |
FCH_31 | 2:57f098de07c7 | 101 | RxLed = 1 ; |
FCH_31 | 2:57f098de07c7 | 102 | TxLed = 1 ; |
FCH_31 | 2:57f098de07c7 | 103 | ANT_SW = 1 ; |
GregCr | 1:22e02d1cfbca | 104 | |
GregCr | 1:22e02d1cfbca | 105 | wait_ms( 500 ); // wait for on board DC/DC start-up time |
GregCr | 1:22e02d1cfbca | 106 | |
FCH_31 | 2:57f098de07c7 | 107 | Radio.Init ( ); |
FCH_31 | 2:57f098de07c7 | 108 | |
FCH_31 | 2:57f098de07c7 | 109 | Radio.SetRegulatorMode ( USE_DCDC ); // Can also be set in LDO mode but consume more power |
GregCr | 1:22e02d1cfbca | 110 | |
FCH_31 | 2:57f098de07c7 | 111 | memset ( &Buffer, 0x00, BufferSize ); |
GregCr | 1:22e02d1cfbca | 112 | |
FCH_31 | 2:57f098de07c7 | 113 | |
FCH_31 | 2:57f098de07c7 | 114 | RxLed = 0; |
FCH_31 | 2:57f098de07c7 | 115 | TxLed = 0; |
FCH_31 | 2:57f098de07c7 | 116 | |
FCH_31 | 2:57f098de07c7 | 117 | modulationParams.PacketType = PACKET_TYPE_LORA ; |
FCH_31 | 2:57f098de07c7 | 118 | modulationParams.Params.LoRa.SpreadingFactor = LORA_SF7 ; |
FCH_31 | 2:57f098de07c7 | 119 | modulationParams.Params.LoRa.Bandwidth = LORA_BW_0400 ; |
FCH_31 | 2:57f098de07c7 | 120 | modulationParams.Params.LoRa.CodingRate = LORA_CR_4_5 ; |
GregCr | 1:22e02d1cfbca | 121 | |
FCH_31 | 2:57f098de07c7 | 122 | PacketParams.PacketType = PACKET_TYPE_LORA ; |
FCH_31 | 2:57f098de07c7 | 123 | PacketParams.Params.LoRa.PreambleLength = 0x08 ; |
FCH_31 | 2:57f098de07c7 | 124 | PacketParams.Params.LoRa.HeaderType = LORA_PACKET_VARIABLE_LENGTH; |
FCH_31 | 2:57f098de07c7 | 125 | PacketParams.Params.LoRa.PayloadLength = 15 ; |
GregCr | 1:22e02d1cfbca | 126 | PacketParams.Params.LoRa.CrcMode = LORA_CRC_ON; |
GregCr | 1:22e02d1cfbca | 127 | PacketParams.Params.LoRa.InvertIQ = LORA_IQ_INVERTED; |
GregCr | 1:22e02d1cfbca | 128 | |
GregCr | 1:22e02d1cfbca | 129 | |
FCH_31 | 2:57f098de07c7 | 130 | Radio.SetStandby ( STDBY_RC ); |
FCH_31 | 2:57f098de07c7 | 131 | Radio.SetPacketType ( modulationParams.PacketType ); |
FCH_31 | 2:57f098de07c7 | 132 | Radio.SetModulationParams ( &modulationParams ); |
FCH_31 | 2:57f098de07c7 | 133 | Radio.SetPacketParams ( &PacketParams ); |
GregCr | 1:22e02d1cfbca | 134 | |
FCH_31 | 2:57f098de07c7 | 135 | Radio.SetRfFrequency ( RF_FREQUENCY ); |
FCH_31 | 2:57f098de07c7 | 136 | Radio.SetBufferBaseAddresses ( 0x00, 0x00 ); |
FCH_31 | 2:57f098de07c7 | 137 | Radio.SetTxParams ( TX_OUTPUT_POWER, RADIO_RAMP_20_US ); |
GregCr | 1:22e02d1cfbca | 138 | |
FCH_31 | 2:57f098de07c7 | 139 | Radio.SetDioIrqParams ( RxIrqMask, RxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE ); |
FCH_31 | 2:57f098de07c7 | 140 | Radio.SetRx ( ( TickTime_t ) { RX_TIMEOUT_TICK_SIZE, RX_TIMEOUT_VALUE } ); |
GregCr | 1:22e02d1cfbca | 141 | |
FCH_31 | 2:57f098de07c7 | 142 | AppState = APP_LOWPOWER; |
FCH_31 | 2:57f098de07c7 | 143 | |
FCH_31 | 2:57f098de07c7 | 144 | } |
GregCr | 1:22e02d1cfbca | 145 | |
FCH_31 | 2:57f098de07c7 | 146 | void loop () { |
GregCr | 1:22e02d1cfbca | 147 | switch( AppState ) |
GregCr | 1:22e02d1cfbca | 148 | { |
GregCr | 1:22e02d1cfbca | 149 | case APP_RX: |
FCH_31 | 2:57f098de07c7 | 150 | printf( "*** TERM *** APP_RX \r\n" ); |
FCH_31 | 2:57f098de07c7 | 151 | AppState = APP_LOWPOWER; |
FCH_31 | 2:57f098de07c7 | 152 | RxLed = !RxLed; |
FCH_31 | 2:57f098de07c7 | 153 | Radio.GetPayload ( Buffer, &BufferSize, BUFFER_SIZE ); |
FCH_31 | 2:57f098de07c7 | 154 | |
FCH_31 | 2:57f098de07c7 | 155 | printf ( "Message Received : %s \r\n", Buffer ); |
FCH_31 | 2:57f098de07c7 | 156 | |
GregCr | 1:22e02d1cfbca | 157 | if( isMaster == true ) |
GregCr | 1:22e02d1cfbca | 158 | { |
GregCr | 1:22e02d1cfbca | 159 | if( BufferSize > 0 ) |
GregCr | 1:22e02d1cfbca | 160 | { |
GregCr | 1:22e02d1cfbca | 161 | if( strncmp( ( const char* )Buffer, ( const char* )PongMsg, PINGPONGSIZE ) == 0 ) |
GregCr | 1:22e02d1cfbca | 162 | { |
FCH_31 | 2:57f098de07c7 | 163 | printf ( "<Master> Recv ...Pong\r\n" ); |
FCH_31 | 2:57f098de07c7 | 164 | wait_ms (2000) ; |
GregCr | 1:22e02d1cfbca | 165 | memcpy( Buffer, PingMsg, PINGPONGSIZE ); |
FCH_31 | 2:57f098de07c7 | 166 | Radio.SetDioIrqParams ( TxIrqMask, TxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE ); |
FCH_31 | 2:57f098de07c7 | 167 | Radio.SendPayload ( Buffer, BufferSize,( TickTime_t ){ RX_TIMEOUT_TICK_SIZE, TX_TIMEOUT_VALUE } ); |
GregCr | 1:22e02d1cfbca | 168 | } |
FCH_31 | 2:57f098de07c7 | 169 | |
GregCr | 1:22e02d1cfbca | 170 | else // valid reception but neither a PING or a PONG message |
GregCr | 1:22e02d1cfbca | 171 | { // Set device as master ans start again |
FCH_31 | 2:57f098de07c7 | 172 | printf( "<Master> Unknown message \r\n" ); |
FCH_31 | 2:57f098de07c7 | 173 | |
GregCr | 1:22e02d1cfbca | 174 | isMaster = true; |
FCH_31 | 2:57f098de07c7 | 175 | Radio.SetDioIrqParams ( RxIrqMask, RxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE ); |
FCH_31 | 2:57f098de07c7 | 176 | Radio.SetRx ( ( TickTime_t ) { RX_TIMEOUT_TICK_SIZE, RX_TIMEOUT_VALUE } ); |
GregCr | 1:22e02d1cfbca | 177 | } |
GregCr | 1:22e02d1cfbca | 178 | } |
GregCr | 1:22e02d1cfbca | 179 | } |
FCH_31 | 2:57f098de07c7 | 180 | |
FCH_31 | 2:57f098de07c7 | 181 | // Receiver |
GregCr | 1:22e02d1cfbca | 182 | else |
GregCr | 1:22e02d1cfbca | 183 | { |
GregCr | 1:22e02d1cfbca | 184 | if( BufferSize > 0 ) |
GregCr | 1:22e02d1cfbca | 185 | { |
GregCr | 1:22e02d1cfbca | 186 | if( strncmp( ( const char* )Buffer, ( const char* )PingMsg, PINGPONGSIZE ) == 0 ) |
GregCr | 1:22e02d1cfbca | 187 | { |
FCH_31 | 2:57f098de07c7 | 188 | printf ( "...Ping\r\n" ); |
FCH_31 | 2:57f098de07c7 | 189 | memcpy ( Buffer, PongMsg, 4 ); |
FCH_31 | 2:57f098de07c7 | 190 | Radio.SetDioIrqParams ( TxIrqMask, TxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE ); |
FCH_31 | 2:57f098de07c7 | 191 | Radio.SendPayload ( Buffer, BufferSize, ( TickTime_t ){ RX_TIMEOUT_TICK_SIZE, TX_TIMEOUT_VALUE } ); |
GregCr | 1:22e02d1cfbca | 192 | } |
GregCr | 1:22e02d1cfbca | 193 | else // valid reception but not a PING as expected |
GregCr | 1:22e02d1cfbca | 194 | { |
FCH_31 | 2:57f098de07c7 | 195 | printf( "<Slave> Unknown message \r\n" ); |
GregCr | 1:22e02d1cfbca | 196 | isMaster = true; |
FCH_31 | 2:57f098de07c7 | 197 | Radio.SetDioIrqParams ( RxIrqMask, RxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE ); |
FCH_31 | 2:57f098de07c7 | 198 | Radio.SetRx ( ( TickTime_t ) { RX_TIMEOUT_TICK_SIZE, RX_TIMEOUT_VALUE } ); |
GregCr | 1:22e02d1cfbca | 199 | } |
GregCr | 1:22e02d1cfbca | 200 | } |
GregCr | 1:22e02d1cfbca | 201 | } |
GregCr | 1:22e02d1cfbca | 202 | break; |
GregCr | 1:22e02d1cfbca | 203 | |
GregCr | 1:22e02d1cfbca | 204 | case APP_TX: |
FCH_31 | 2:57f098de07c7 | 205 | printf( "*** TERM *** APP_TX \r\n" ); |
GregCr | 1:22e02d1cfbca | 206 | AppState = APP_LOWPOWER; |
GregCr | 1:22e02d1cfbca | 207 | TxLed = !TxLed; |
FCH_31 | 2:57f098de07c7 | 208 | if( isMaster == true ) printf( "<Master> Send Ping...\r\n" ); |
FCH_31 | 2:57f098de07c7 | 209 | else printf( "<Slave> Send Pong...\r\n" ); |
FCH_31 | 2:57f098de07c7 | 210 | |
FCH_31 | 2:57f098de07c7 | 211 | Radio.SetDioIrqParams ( RxIrqMask, RxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE ); |
FCH_31 | 2:57f098de07c7 | 212 | Radio.SetRx ( ( TickTime_t ) { RX_TIMEOUT_TICK_SIZE, RX_TIMEOUT_VALUE } ); |
GregCr | 1:22e02d1cfbca | 213 | break; |
GregCr | 1:22e02d1cfbca | 214 | |
GregCr | 1:22e02d1cfbca | 215 | case APP_RX_TIMEOUT: |
FCH_31 | 2:57f098de07c7 | 216 | printf( "*** TERM *** APP_RX_TIMEOUT \r\n" ); |
GregCr | 1:22e02d1cfbca | 217 | AppState = APP_LOWPOWER; |
GregCr | 1:22e02d1cfbca | 218 | if( isMaster == true ) |
GregCr | 1:22e02d1cfbca | 219 | { |
GregCr | 1:22e02d1cfbca | 220 | // Send the next PING frame |
FCH_31 | 2:57f098de07c7 | 221 | memcpy ( Buffer, PingMsg, PINGPONGSIZE ); |
FCH_31 | 2:57f098de07c7 | 222 | Radio.SetDioIrqParams ( TxIrqMask, TxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE ); |
FCH_31 | 2:57f098de07c7 | 223 | Radio.SendPayload ( Buffer, BufferSize, ( TickTime_t ){ RX_TIMEOUT_TICK_SIZE, TX_TIMEOUT_VALUE } ); |
GregCr | 1:22e02d1cfbca | 224 | } |
GregCr | 1:22e02d1cfbca | 225 | else |
GregCr | 1:22e02d1cfbca | 226 | { |
FCH_31 | 2:57f098de07c7 | 227 | Radio.SetDioIrqParams ( RxIrqMask, RxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE ); |
FCH_31 | 2:57f098de07c7 | 228 | Radio.SetRx ( ( TickTime_t ) { RX_TIMEOUT_TICK_SIZE, RX_TIMEOUT_VALUE } ); |
GregCr | 1:22e02d1cfbca | 229 | } |
GregCr | 1:22e02d1cfbca | 230 | break; |
GregCr | 1:22e02d1cfbca | 231 | |
GregCr | 1:22e02d1cfbca | 232 | case APP_RX_ERROR: |
FCH_31 | 2:57f098de07c7 | 233 | printf( "*** TERM *** APP_RX_ERROR \r\n" ); |
GregCr | 1:22e02d1cfbca | 234 | AppState = APP_LOWPOWER; |
GregCr | 1:22e02d1cfbca | 235 | // We have received a Packet with a CRC error, send reply as if packet was correct |
GregCr | 1:22e02d1cfbca | 236 | if( isMaster == true ) |
GregCr | 1:22e02d1cfbca | 237 | { |
GregCr | 1:22e02d1cfbca | 238 | // Send the next PING frame |
FCH_31 | 2:57f098de07c7 | 239 | memcpy ( Buffer, PingMsg, PINGPONGSIZE ); |
FCH_31 | 2:57f098de07c7 | 240 | Radio.SetDioIrqParams ( TxIrqMask, TxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE ); |
FCH_31 | 2:57f098de07c7 | 241 | Radio.SendPayload ( Buffer, BufferSize, ( TickTime_t ){ RX_TIMEOUT_TICK_SIZE, TX_TIMEOUT_VALUE } ); |
GregCr | 1:22e02d1cfbca | 242 | } |
GregCr | 1:22e02d1cfbca | 243 | else |
GregCr | 1:22e02d1cfbca | 244 | { |
GregCr | 1:22e02d1cfbca | 245 | // Send the next PONG frame |
FCH_31 | 2:57f098de07c7 | 246 | memcpy ( Buffer, PongMsg, PINGPONGSIZE ); |
FCH_31 | 2:57f098de07c7 | 247 | Radio.SetDioIrqParams ( TxIrqMask, TxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE ); |
FCH_31 | 2:57f098de07c7 | 248 | Radio.SendPayload ( Buffer, BufferSize, ( TickTime_t ){ RX_TIMEOUT_TICK_SIZE, TX_TIMEOUT_VALUE } ); |
GregCr | 1:22e02d1cfbca | 249 | } |
GregCr | 1:22e02d1cfbca | 250 | break; |
GregCr | 1:22e02d1cfbca | 251 | |
GregCr | 1:22e02d1cfbca | 252 | case APP_TX_TIMEOUT: |
FCH_31 | 2:57f098de07c7 | 253 | printf( "*** TERM *** APP_TX_TIMEOUT \r\n" ); |
FCH_31 | 2:57f098de07c7 | 254 | AppState = APP_LOWPOWER; |
FCH_31 | 2:57f098de07c7 | 255 | Radio.SetDioIrqParams ( RxIrqMask, RxIrqMask, IRQ_RADIO_NONE, IRQ_RADIO_NONE ); |
FCH_31 | 2:57f098de07c7 | 256 | Radio.SetRx ( ( TickTime_t ) { RX_TIMEOUT_TICK_SIZE, RX_TIMEOUT_VALUE } ); |
GregCr | 1:22e02d1cfbca | 257 | break; |
GregCr | 1:22e02d1cfbca | 258 | |
GregCr | 1:22e02d1cfbca | 259 | case APP_LOWPOWER: |
GregCr | 1:22e02d1cfbca | 260 | break; |
GregCr | 1:22e02d1cfbca | 261 | |
GregCr | 1:22e02d1cfbca | 262 | default: |
GregCr | 1:22e02d1cfbca | 263 | // Set low power |
GregCr | 1:22e02d1cfbca | 264 | break; |
GregCr | 1:22e02d1cfbca | 265 | } |
GregCr | 1:22e02d1cfbca | 266 | } |
FCH_31 | 2:57f098de07c7 | 267 | |
FCH_31 | 2:57f098de07c7 | 268 | |
FCH_31 | 2:57f098de07c7 | 269 | |
GregCr | 1:22e02d1cfbca | 270 | |
FCH_31 | 2:57f098de07c7 | 271 | int main( ) { setup () ; while (1) loop () ; } |
GregCr | 1:22e02d1cfbca | 272 | |
FCH_31 | 2:57f098de07c7 | 273 | void OnTxDone ( void ) { printf( "*** TERM *** OnTxDone \r\n" ); AppState = APP_TX ; } |
FCH_31 | 2:57f098de07c7 | 274 | void OnRxDone ( void ) { printf( "*** TERM *** OnRxDone \r\n" ); AppState = APP_RX ; } |
FCH_31 | 2:57f098de07c7 | 275 | void OnTxTimeout ( void ) { printf( "*** TERM *** OnTxTimeout \r\n" ); AppState = APP_TX_TIMEOUT ; } |
FCH_31 | 2:57f098de07c7 | 276 | void OnRxTimeout ( void ) { printf( "*** TERM *** OnRxTimeout \r\n" ); AppState = APP_RX_TIMEOUT ; } |
FCH_31 | 2:57f098de07c7 | 277 | void OnRxError ( IrqErrorCode_t errorCode ) { printf( "*** TERM *** OnRxError \r\n" ); AppState = APP_RX_ERROR ; } |
FCH_31 | 2:57f098de07c7 | 278 | void OnRangingDone ( IrqRangingCode_t val ) { printf( "*** TERM *** OnRangingDone \r\n" ); } |
FCH_31 | 2:57f098de07c7 | 279 | void OnCadDone ( bool channelActivityDetected ) { printf( "*** TERM *** OnCadDone \r\n" ); } |
FCH_31 | 2:57f098de07c7 | 280 | |
FCH_31 | 2:57f098de07c7 | 281 | /* |
GregCr | 1:22e02d1cfbca | 282 | Radio.GetPacketStatus(&packetStatus); |
GregCr | 1:22e02d1cfbca | 283 | RssiValue = packetStatus.Lr24.RssiPkt; |
GregCr | 1:22e02d1cfbca | 284 | SnrValue = packetStatus.Lr24.SnrPkt; |
GregCr | 1:22e02d1cfbca | 285 | printf("rssi: %d; snr: %d\n\r", RssiValue, SnrValue ); |
FCH_31 | 2:57f098de07c7 | 286 | */ |