basic LoRa transmitter example

Dependencies:   sx12xx_hal

radio chip selection

Radio chip driver is not included, allowing choice of radio device.
If you're using SX1272 or SX1276, then import sx127x driver into your program.
if you're using SX1261 or SX1262, then import sx126x driver into your program.
if you're using SX1280, then import sx1280 driver into your program.
if you're using LR1110, then import LR1110 driver into your program.
If you're using NAmote72 or Murata discovery, then you must import only sx127x driver.
If you're using Type1SJ select target DISCO_L072CZ_LRWAN1 and import sx126x driver into your program.

Use project simple_rx on receiving end.

Committer:
Wayne Roberts
Date:
Thu Sep 12 15:52:01 2019 -0700
Revision:
2:3f4dfcc3bab6
Parent:
0:83bfd3e3c4c4
Child:
4:938655f1726c
add low power operation: event queue with low-power-timer

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Wayne Roberts 0:83bfd3e3c4c4 1 #include "radio.h"
Wayne Roberts 0:83bfd3e3c4c4 2
Wayne Roberts 0:83bfd3e3c4c4 3 #if defined(SX127x_H)
Wayne Roberts 0:83bfd3e3c4c4 4 #define BW_KHZ 125
Wayne Roberts 0:83bfd3e3c4c4 5 #define SPREADING_FACTOR 7
Wayne Roberts 0:83bfd3e3c4c4 6 #define CF_HZ 915000000
Wayne Roberts 0:83bfd3e3c4c4 7 #define TX_DBM 20
Wayne Roberts 0:83bfd3e3c4c4 8 #elif defined(SX126x_H)
Wayne Roberts 0:83bfd3e3c4c4 9 #define BW_KHZ 125
Wayne Roberts 0:83bfd3e3c4c4 10 #define SPREADING_FACTOR 7
Wayne Roberts 0:83bfd3e3c4c4 11 #define CF_HZ 915000000
Wayne Roberts 0:83bfd3e3c4c4 12 #define TX_DBM (Radio::chipType == CHIP_TYPE_SX1262 ? 20 : 14)
Wayne Roberts 0:83bfd3e3c4c4 13 #elif defined(SX128x_H)
Wayne Roberts 0:83bfd3e3c4c4 14 #define BW_KHZ 200
Wayne Roberts 0:83bfd3e3c4c4 15 #define SPREADING_FACTOR 7
Wayne Roberts 0:83bfd3e3c4c4 16 #define CF_HZ 2487000000
Wayne Roberts 0:83bfd3e3c4c4 17 #define TX_DBM 6
Wayne Roberts 0:83bfd3e3c4c4 18 #endif
Wayne Roberts 0:83bfd3e3c4c4 19
Wayne Roberts 0:83bfd3e3c4c4 20 /**********************************************************************/
Wayne Roberts 2:3f4dfcc3bab6 21 EventQueue queue(4 * EVENTS_EVENT_SIZE);
Wayne Roberts 2:3f4dfcc3bab6 22
Wayne Roberts 2:3f4dfcc3bab6 23 void tx_test()
Wayne Roberts 2:3f4dfcc3bab6 24 {
Wayne Roberts 2:3f4dfcc3bab6 25 uint8_t seq = 0;
Wayne Roberts 2:3f4dfcc3bab6 26
Wayne Roberts 2:3f4dfcc3bab6 27 Radio::radio.tx_buf[0] = seq++; /* set payload */
Wayne Roberts 2:3f4dfcc3bab6 28 Radio::Send(1, 0, 0, 0); /* begin transmission */
Wayne Roberts 2:3f4dfcc3bab6 29 printf("sent\r\n");
Wayne Roberts 2:3f4dfcc3bab6 30
Wayne Roberts 2:3f4dfcc3bab6 31 /* {
Wayne Roberts 2:3f4dfcc3bab6 32 mbed_stats_cpu_t stats;
Wayne Roberts 2:3f4dfcc3bab6 33 mbed_stats_cpu_get(&stats);
Wayne Roberts 2:3f4dfcc3bab6 34 printf("canDeep:%u ", sleep_manager_can_deep_sleep());
Wayne Roberts 2:3f4dfcc3bab6 35 printf("Uptime: %llu ", stats.uptime / 1000);
Wayne Roberts 2:3f4dfcc3bab6 36 printf("Sleep time: %llu ", stats.sleep_time / 1000);
Wayne Roberts 2:3f4dfcc3bab6 37 printf("Deep Sleep: %llu\r\n", stats.deep_sleep_time / 1000);
Wayne Roberts 2:3f4dfcc3bab6 38 }*/
Wayne Roberts 2:3f4dfcc3bab6 39 }
Wayne Roberts 0:83bfd3e3c4c4 40
Wayne Roberts 0:83bfd3e3c4c4 41 void txDoneCB()
Wayne Roberts 0:83bfd3e3c4c4 42 {
Wayne Roberts 2:3f4dfcc3bab6 43 printf("got-tx-done\r\n");
Wayne Roberts 2:3f4dfcc3bab6 44 queue.call_in(500, tx_test);
Wayne Roberts 0:83bfd3e3c4c4 45 }
Wayne Roberts 0:83bfd3e3c4c4 46
Wayne Roberts 0:83bfd3e3c4c4 47 void rxDoneCB(uint8_t size, float rssi, float snr)
Wayne Roberts 0:83bfd3e3c4c4 48 {
Wayne Roberts 0:83bfd3e3c4c4 49 }
Wayne Roberts 0:83bfd3e3c4c4 50
Wayne Roberts 2:3f4dfcc3bab6 51
Wayne Roberts 2:3f4dfcc3bab6 52 void radio_irq_callback()
Wayne Roberts 2:3f4dfcc3bab6 53 {
Wayne Roberts 2:3f4dfcc3bab6 54 queue.call(Radio::service);
Wayne Roberts 2:3f4dfcc3bab6 55 }
Wayne Roberts 2:3f4dfcc3bab6 56
Wayne Roberts 2:3f4dfcc3bab6 57
Wayne Roberts 0:83bfd3e3c4c4 58 const RadioEvents_t rev = {
Wayne Roberts 2:3f4dfcc3bab6 59 /* DioPin_top_half */ radio_irq_callback,
Wayne Roberts 0:83bfd3e3c4c4 60 /* TxDone_topHalf */ NULL,
Wayne Roberts 0:83bfd3e3c4c4 61 /* TxDone_botHalf */ txDoneCB,
Wayne Roberts 0:83bfd3e3c4c4 62 /* TxTimeout */ NULL,
Wayne Roberts 0:83bfd3e3c4c4 63 /* RxDone */ rxDoneCB,
Wayne Roberts 0:83bfd3e3c4c4 64 /* RxTimeout */ NULL,
Wayne Roberts 0:83bfd3e3c4c4 65 /* RxError */ NULL,
Wayne Roberts 0:83bfd3e3c4c4 66 /* FhssChangeChannel */NULL,
Wayne Roberts 0:83bfd3e3c4c4 67 /* CadDone */ NULL
Wayne Roberts 0:83bfd3e3c4c4 68 };
Wayne Roberts 0:83bfd3e3c4c4 69
Wayne Roberts 0:83bfd3e3c4c4 70 int main()
Wayne Roberts 0:83bfd3e3c4c4 71 {
Wayne Roberts 2:3f4dfcc3bab6 72 //uint8_t seq = 0;
Wayne Roberts 0:83bfd3e3c4c4 73
Wayne Roberts 0:83bfd3e3c4c4 74 printf("\r\nreset-tx ");
Wayne Roberts 0:83bfd3e3c4c4 75
Wayne Roberts 0:83bfd3e3c4c4 76 Radio::Init(&rev);
Wayne Roberts 0:83bfd3e3c4c4 77
Wayne Roberts 0:83bfd3e3c4c4 78 Radio::Standby();
Wayne Roberts 0:83bfd3e3c4c4 79 Radio::LoRaModemConfig(BW_KHZ, SPREADING_FACTOR, 1);
Wayne Roberts 0:83bfd3e3c4c4 80 Radio::SetChannel(CF_HZ);
Wayne Roberts 0:83bfd3e3c4c4 81
Wayne Roberts 0:83bfd3e3c4c4 82 Radio::set_tx_dbm(TX_DBM);
Wayne Roberts 0:83bfd3e3c4c4 83
Wayne Roberts 0:83bfd3e3c4c4 84 // preambleLen, fixLen, crcOn, invIQ
Wayne Roberts 0:83bfd3e3c4c4 85 Radio::LoRaPacketConfig(8, false, true, false);
Wayne Roberts 0:83bfd3e3c4c4 86
Wayne Roberts 2:3f4dfcc3bab6 87 queue.call_in(500, tx_test);
Wayne Roberts 0:83bfd3e3c4c4 88
Wayne Roberts 2:3f4dfcc3bab6 89 queue.dispatch();
Wayne Roberts 0:83bfd3e3c4c4 90 }
Wayne Roberts 0:83bfd3e3c4c4 91