May 2021 Tests

Dependencies:   mbed SX127x sx12xx_hal

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "radio.h"
00002 #define MASK_XXXXXXX_ 15
00003 // Semtech radio definitions for SX127x, SX126x and SX128x
00004 
00005 #if defined(SX127x_H)
00006     #define BW_KHZ              500
00007     #define SPREADING_FACTOR    11
00008     #define CF_HZ               912000000
00009 #elif defined(SX126x_H)
00010     #define BW_KHZ              500
00011     #define SPREADING_FACTOR    10
00012     #define CF_HZ               913000000
00013 #elif defined(SX128x_H)
00014     #define BW_KHZ              200
00015     #define SPREADING_FACTOR    7
00016     #define CF_HZ               2487000000
00017 #endif
00018 
00019 DigitalOut myled(LED1);
00020 DigitalOut signalPin[8] = {PB_1,PB_15,D4,D7,D5,PB_14,D9,D14};
00021 DigitalOut syncPin(PC_4);
00022 Timeout resetTrip;
00023 
00024 /**********************************************************************/
00025 
00026 void txDoneCB()
00027 {
00028 }
00029 
00030 void turnOffSyncPin() {
00031     syncPin = 0;
00032 }
00033 
00034 void rxDoneCB(uint8_t size, float rssi, float snr)
00035 {
00036     unsigned i;
00037     printf("%.1fdBm  snr:%.1fdB\t", rssi, snr);
00038     uint8_t maxShift = 7;
00039 
00040     myled.write(!myled.read()); // toggle LED
00041     
00042     //verify ID, in this case ID is 42
00043     uint8_t byte = Radio::radio.rx_buf[0];
00044     if(byte != 42)return;
00045     
00046     //write first received byte as state of pins
00047     byte = Radio::radio.rx_buf[1];
00048     uint8_t tempByte = byte;
00049     uint8_t bit[8] = {0};
00050     for (int i = 0; i<8; i++)
00051     {
00052         tempByte = tempByte << (maxShift - i);
00053         tempByte = tempByte >> (maxShift);
00054         tempByte = tempByte << i;
00055         if(tempByte)bit[i] = 1;
00056         else bit[i] = 0;
00057         tempByte = byte;
00058     }
00059     printf("\n\r");
00060     printf("byte: %d",byte);
00061     for (int i = 0; i<8; i++)
00062     {
00063     printf("bit%d: %d\n\r",i,bit[i]);
00064     }
00065 
00066     for (int i = 0; i<8; i++)
00067     {
00068         signalPin[i] = bit[i];
00069     }
00070     if(bit[0])
00071     {
00072         syncPin = 1;
00073         resetTrip.attach(&turnOffSyncPin, .01);
00074     }
00075     ThisThread::sleep_for(200);
00076     
00077     for (int i = 0; i<8; i++)
00078     {
00079         signalPin[i] = 0;
00080     }
00081     
00082 
00083     // Display payload packet information
00084 
00085     for (i = 0; i < size; i++) {
00086         printf("%02d ", Radio::radio.rx_buf[i]);   // Changed to "%02d \n"
00087     }
00088     printf("\r\n\n");
00089 }
00090 
00091 const RadioEvents_t rev = {
00092     /* Dio0_top_half */     NULL,
00093     /* TxDone_topHalf */    NULL,
00094     /* TxDone_botHalf */    txDoneCB,
00095     /* TxTimeout  */        NULL,
00096     /* RxDone  */           rxDoneCB,
00097     /* RxTimeout  */        NULL,
00098     /* RxError  */          NULL,
00099     /* FhssChangeChannel  */NULL,
00100     /* CadDone  */          NULL
00101 };
00102 
00103 int main()
00104 {   
00105 
00106     // POR & Reset debug message
00107         
00108     printf("\r\nreset-rx\r\n");
00109     
00110     Radio::Init(&rev);
00111 
00112     // Radio Start
00113     
00114     Radio::Standby();
00115     Radio::LoRaModemConfig(BW_KHZ, SPREADING_FACTOR, 1);
00116     Radio::SetChannel(CF_HZ);
00117 
00118     // preambleLen, fixLen, crcOn, invIQ
00119                
00120     Radio::LoRaPacketConfig(8, false, true, false);
00121     
00122     // Start radio receiver, wait for packets from transmitter
00123 
00124     Radio::Rx(0);
00125     
00126     for (;;) {     
00127         Radio::service();
00128     }
00129 }