Simple SX1272 Test Application

Dependencies:   SX1272Lib mbed

Committer:
mick_ccc
Date:
Mon Apr 24 09:36:52 2017 +0000
Revision:
1:4c82bff12ad0
Parent:
0:7e7575bda256
Child:
2:61713a461cf1
Added LoRaWAN payload (Encryption & MIC not correct yet)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mick_ccc 0:7e7575bda256 1 #include "mbed.h"
mick_ccc 0:7e7575bda256 2
mick_ccc 0:7e7575bda256 3 #include "board.h"
mick_ccc 0:7e7575bda256 4 #include "radio.h"
mick_ccc 0:7e7575bda256 5
mick_ccc 0:7e7575bda256 6 Serial pc(USBTX, USBRX); // tx, rx
mick_ccc 0:7e7575bda256 7 InterruptIn DatarateButton(USER_BUTTON);
mick_ccc 0:7e7575bda256 8
mick_ccc 1:4c82bff12ad0 9 // Global variables
mick_ccc 1:4c82bff12ad0 10 static uint8_t LoRaWANBuffer[255];
mick_ccc 1:4c82bff12ad0 11 static uint16_t FCnt = 0;
mick_ccc 0:7e7575bda256 12
mick_ccc 1:4c82bff12ad0 13 // ISR variables
mick_ccc 1:4c82bff12ad0 14 static volatile bool SingleDatarate = true;
mick_ccc 1:4c82bff12ad0 15 static volatile uint8_t CurrentDatarate = 12;
mick_ccc 1:4c82bff12ad0 16 static volatile bool ButtonPressed = false;
mick_ccc 0:7e7575bda256 17
mick_ccc 0:7e7575bda256 18 /* -------------- */
mick_ccc 0:7e7575bda256 19
mick_ccc 0:7e7575bda256 20 void UserButtonPressed( void )
mick_ccc 0:7e7575bda256 21 {
mick_ccc 1:4c82bff12ad0 22 if( SingleDatarate == false )
mick_ccc 0:7e7575bda256 23 {
mick_ccc 1:4c82bff12ad0 24 // Increase datarate by 1
mick_ccc 1:4c82bff12ad0 25 CurrentDatarate = (CurrentDatarate == 7) ? 12 : CurrentDatarate-1;
mick_ccc 0:7e7575bda256 26 }
mick_ccc 1:4c82bff12ad0 27
mick_ccc 0:7e7575bda256 28 ButtonPressed = true;
mick_ccc 0:7e7575bda256 29 }
mick_ccc 0:7e7575bda256 30
mick_ccc 0:7e7575bda256 31 /* -------------- */
mick_ccc 0:7e7575bda256 32
mick_ccc 0:7e7575bda256 33 int main() {
mick_ccc 1:4c82bff12ad0 34 Timer t;
mick_ccc 1:4c82bff12ad0 35 uint32_t TxFreq;
mick_ccc 1:4c82bff12ad0 36
mick_ccc 1:4c82bff12ad0 37 pc.printf("HelLo Ra !\n");
mick_ccc 0:7e7575bda256 38
mick_ccc 0:7e7575bda256 39 // Get USER button pressed
mick_ccc 0:7e7575bda256 40 DatarateButton.fall( &UserButtonPressed );
mick_ccc 0:7e7575bda256 41
mick_ccc 0:7e7575bda256 42 // Radio board init
mick_ccc 0:7e7575bda256 43 BoardInit( );
mick_ccc 0:7e7575bda256 44
mick_ccc 0:7e7575bda256 45 while( 1 )
mick_ccc 0:7e7575bda256 46 {
mick_ccc 0:7e7575bda256 47 if( ButtonPressed == true )
mick_ccc 0:7e7575bda256 48 {
mick_ccc 1:4c82bff12ad0 49 // Configure radio
mick_ccc 1:4c82bff12ad0 50 TxFreq = 867720000;
mick_ccc 0:7e7575bda256 51 Radio.SetChannel( TxFreq );
mick_ccc 1:4c82bff12ad0 52 Radio.Write( REG_LR_SYNCWORD, 0x34 ); // public: to be replaced with SetPublicNetwork() when available
mick_ccc 0:7e7575bda256 53 Radio.SetTxConfig( MODEM_LORA, 14, 0, 0, CurrentDatarate, 1, 8, false, true, 0, 0, false, 3e3 );
mick_ccc 1:4c82bff12ad0 54
mick_ccc 1:4c82bff12ad0 55 // Set packet payload
mick_ccc 1:4c82bff12ad0 56 //LoRaWANBuffer[0] = 0x40; // Unconfirmed Data Up
mick_ccc 1:4c82bff12ad0 57 LoRaWANBuffer[0] = 0x80; // Confirmed Data Up
mick_ccc 1:4c82bff12ad0 58 LoRaWANBuffer[1] = 0x03; // DevAddr
mick_ccc 1:4c82bff12ad0 59 LoRaWANBuffer[2] = 0x00;
mick_ccc 1:4c82bff12ad0 60 LoRaWANBuffer[3] = 0xFE;
mick_ccc 1:4c82bff12ad0 61 LoRaWANBuffer[4] = 0xCA;
mick_ccc 1:4c82bff12ad0 62 LoRaWANBuffer[5] = 0x0; // FCtrl
mick_ccc 1:4c82bff12ad0 63 LoRaWANBuffer[6] = FCnt;
mick_ccc 1:4c82bff12ad0 64 LoRaWANBuffer[7] = FCnt >> 8;
mick_ccc 1:4c82bff12ad0 65 LoRaWANBuffer[8] = 1; // FPort
mick_ccc 1:4c82bff12ad0 66 LoRaWANBuffer[9] = 0x0; // FRMPayload
mick_ccc 1:4c82bff12ad0 67
mick_ccc 1:4c82bff12ad0 68 // Send packet
mick_ccc 1:4c82bff12ad0 69 Radio.Send( LoRaWANBuffer, 14 );
mick_ccc 1:4c82bff12ad0 70 FCnt += 1;
mick_ccc 0:7e7575bda256 71 pc.printf( "LoRa packet: Freq=%u, SF%u\n", TxFreq, CurrentDatarate );
mick_ccc 0:7e7575bda256 72
mick_ccc 0:7e7575bda256 73 // Stop sending
mick_ccc 0:7e7575bda256 74 ButtonPressed = false;
mick_ccc 0:7e7575bda256 75 }
mick_ccc 0:7e7575bda256 76 }
mick_ccc 0:7e7575bda256 77 }
mick_ccc 0:7e7575bda256 78