May 2021 test
Dependencies: sx128x sx12xx_hal
Diff: main.cpp
- Revision:
- 3:f81d64ff0164
- Parent:
- 2:bf201940a9db
- Child:
- 4:a645b6a6fa1f
--- a/main.cpp Fri Jan 26 01:19:39 2018 +0000 +++ b/main.cpp Wed Jul 18 18:50:19 2018 -0700 @@ -1,69 +1,29 @@ -#include "sx127x_lora.h" +#include "radio.h" DigitalOut myled(LED1); -#ifdef TARGET_DISCO_L072CZ_LRWAN1 - SPI spi(PA_7, PA_6, PB_3); // mosi, miso, sclk - // dio0, dio1, nss, spi, rst - SX127x radio(PB_4, PB_1, PA_15, spi, PC_0); - - #define CRF1 PA_1 - #define CRF2 PC_2 - #define CRF3 PC_1 - DigitalOut Vctl1(CRF1); - DigitalOut Vctl2(CRF2); - DigitalOut Vctl3(CRF3); - - void rfsw_callback() - { - if (radio.RegOpMode.bits.Mode == RF_OPMODE_TRANSMITTER) { - Vctl1 = 0; - if (radio.RegPaConfig.bits.PaSelect) { - Vctl2 = 0; - Vctl3 = 1; - } else { - Vctl2 = 1; - Vctl3 = 0; - } - } else { - if (radio.RegOpMode.bits.Mode == RF_OPMODE_RECEIVER || radio.RegOpMode.bits.Mode == RF_OPMODE_RECEIVER_SINGLE) - Vctl1 = 1; - else - Vctl1 = 0; - - Vctl2 = 0; - Vctl3 = 0; - } - } - +#if defined(SX127x_H) || defined(SX126x_H) + #define BW_KHZ 500 + #define SPREADING_FACTOR 11 + #define CF_HZ 910800000 +#elif defined(SX128x_H) + #define BW_KHZ 200 + #define SPREADING_FACTOR 11 + #define CF_HZ 2487000000 +#endif + +#ifdef TARGET_DISCO_L072CZ_LRWAN1 DigitalOut pinA(PB_12); DigitalOut pinB(PB_13); DigitalOut pinC(PB_14); DigitalOut pinD(PB_15); #else - SPI spi(D11, D12, D13); // mosi, miso, sclk - // dio0, dio1, nss, spi, rst - SX127x radio( D2, D3, D10, spi, A0); // sx1276 arduino shield - - DigitalInOut rfsw(A4); // for SX1276 arduino shield - - void rfsw_callback() - { - if (radio.RegOpMode.bits.Mode == RF_OPMODE_TRANSMITTER) - rfsw = 1; - else - rfsw = 0; - } - DigitalOut pinA(PC_3); DigitalOut pinB(PC_2); DigitalOut pinC(PC_6); DigitalOut pinD(PC_8); #endif /* !TARGET_DISCO_L072CZ_LRWAN1 */ -/**********************************************************************/ -SX127x_lora lora(radio); - DigitalOut* pin; Timeout to; @@ -74,6 +34,8 @@ #define CMD_PINC 0x06 #define CMD_PIND 0x08 +/**********************************************************************/ + void alarm_pin_clr() { pin->write(0); @@ -111,23 +73,22 @@ void get_alarm() { - uint16_t rx_crc, crc = crc_ccitt(radio.rx_buf, 5); - rx_crc = radio.rx_buf[5]; + uint16_t rx_crc, crc = crc_ccitt(Radio::radio.rx_buf, 5); + rx_crc = Radio::radio.rx_buf[5]; rx_crc <<= 8; - rx_crc += radio.rx_buf[6]; + rx_crc += Radio::radio.rx_buf[6]; //printf("%u) crc rx:%04x, calc:%04x\r\n", lora.RegRxNbBytes, rx_crc, crc); if (crc == rx_crc) { - uint8_t c = radio.rx_buf[0]; - //if (radio.rx_buf[0] == CMD_ALARM) + uint8_t c = Radio::radio.rx_buf[0]; if (c == CMD_PINA || c == CMD_PINB || c == CMD_PINC || c == CMD_PIND) { unsigned delay; - delay = radio.rx_buf[1]; + delay = Radio::radio.rx_buf[1]; delay <<= 8; - delay += radio.rx_buf[2]; + delay += Radio::radio.rx_buf[2]; delay <<= 8; - delay += radio.rx_buf[3]; + delay += Radio::radio.rx_buf[3]; delay <<= 8; - delay += radio.rx_buf[4]; + delay += Radio::radio.rx_buf[4]; switch (c) { case CMD_PINA: pin = &pinA; break; case CMD_PINB: pin = &pinB; break; @@ -137,55 +98,49 @@ to.attach_us(&alarm_pin_set, delay); printf("delay:%u\r\n", delay); } else - printf("cmd? %02x\r\n", radio.rx_buf[0]); + printf("cmd? %02x\r\n", Radio::radio.rx_buf[0]); } else printf("crc fail %04x, %04x\r\n", rx_crc, crc); } + +void txDoneCB() +{ +} + +void rxDoneCB(uint8_t size, float Rssi, float Snr) +{ + get_alarm(); + printf("%.1fdBm snr:%.1fdB ", Rssi, Snr); +} + +const RadioEvents_t rev = { + /* Dio0_top_half */ NULL, + /* TxDone_topHalf */ NULL, + /* TxDone_botHalf */ txDoneCB, + /* TxTimeout */ NULL, + /* RxDone */ rxDoneCB, + /* RxTimeout */ NULL, + /* RxError */ NULL, + /* FhssChangeChannel */NULL, + /* CadDone */ NULL +}; + int main() { printf("\r\nreset-rx\r\n"); - radio.rf_switch = rfsw_callback; - - radio.set_frf_MHz(910.8); - lora.enable(); - lora.setBw_KHz(500); - lora.setSf(11); + + + Radio::Init(&rev); + + Radio::Standby(); + Radio::LoRaModemConfig(BW_KHZ, SPREADING_FACTOR, 1); + Radio::LoRaPacketConfig(8, false, true, false); // preambleLen, fixLen, crcOn, invIQ + Radio::SetChannel(CF_HZ); - radio.RegPaConfig.octet = radio.read_reg(REG_PACONFIG); -#ifdef TARGET_DISCO_L072CZ_LRWAN1 - radio.RegPaConfig.bits.PaSelect = 1; -#else - /* RFO or PABOOST choice: - * SX1276 shield: RFO if using 900MHz, or PA_BOOST if using 433MHz - */ - rfsw.input(); - if (rfsw.read()) { - printf("LAS\r\n"); - /* LAS HF=PA_BOOST LF=RFO */ - if (radio.HF) - radio.RegPaConfig.bits.PaSelect = 1; - else - radio.RegPaConfig.bits.PaSelect = 0; - } else { - /* MAS shield board, only RFO TX */ - radio.RegPaConfig.bits.PaSelect = 0; - printf("MAS\r\n"); - } - rfsw.output(); -#endif /* !TARGET_DISCO_L072CZ_LRWAN1 */ - radio.write_reg(REG_PACONFIG, radio.RegPaConfig.octet); - - lora.start_rx(RF_OPMODE_RECEIVER); + Radio::Rx(0); for (;;) { - if (lora.service() == SERVICE_READ_FIFO) { - /*int i; - for (i = 0; i < lora.RegRxNbBytes; i++) { - printf("%02x ", radio.rx_buf[i]); - } - printf("\r\n");*/ - get_alarm(); - } + Radio::service(); } }