May 2021 Tests
Dependencies: mbed SX127x sx12xx_hal
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 }
Generated on Mon Aug 15 2022 21:38:32 by 1.7.2