wayne roberts / lorawan1v1

Dependencies:   sx12xx_hal

Dependents:   LoRaWAN-SanJose_Bootcamp LoRaWAN-grove-cayenne LoRaWAN-classC-demo LoRaWAN-grove-cayenne ... more

Committer:
Wayne Roberts
Date:
Wed Feb 28 10:48:11 2018 -0800
Revision:
0:6b3ac9c5a042
Child:
4:e4bfe9183f94
initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Wayne Roberts 0:6b3ac9c5a042 1 /* Only for NUCLEO boards: prevent compiling for MOTE_L152RC and typeABZ discovery */
Wayne Roberts 0:6b3ac9c5a042 2 #if defined(TARGET_FF_ARDUINO) && defined(TARGET_FF_MORPHO) && !defined(TARGET_DISCO_L072CZ_LRWAN1)
Wayne Roberts 0:6b3ac9c5a042 3 #include "board.h"
Wayne Roberts 0:6b3ac9c5a042 4 #include "radio.h"
Wayne Roberts 0:6b3ac9c5a042 5
Wayne Roberts 0:6b3ac9c5a042 6 SPI spi(D11, D12, D13); // mosi, miso, sclk
Wayne Roberts 0:6b3ac9c5a042 7 // dio0, dio1, nss, spi, rst
Wayne Roberts 0:6b3ac9c5a042 8 SX127x Radio::radio( D2, D3, D10, spi, A0); // sx127[62] arduino shield
Wayne Roberts 0:6b3ac9c5a042 9 SX127x_lora Radio::lora(radio);
Wayne Roberts 0:6b3ac9c5a042 10 SX127x_fsk Radio::fsk(radio);
Wayne Roberts 0:6b3ac9c5a042 11
Wayne Roberts 0:6b3ac9c5a042 12 InterruptIn Radio::dio0(D2);
Wayne Roberts 0:6b3ac9c5a042 13 InterruptIn Radio::dio1(D3);
Wayne Roberts 0:6b3ac9c5a042 14
Wayne Roberts 0:6b3ac9c5a042 15 typedef enum {
Wayne Roberts 0:6b3ac9c5a042 16 SHIELD_TYPE_NONE = 0,
Wayne Roberts 0:6b3ac9c5a042 17 SHIELD_TYPE_LAS,
Wayne Roberts 0:6b3ac9c5a042 18 SHIELD_TYPE_MAS,
Wayne Roberts 0:6b3ac9c5a042 19 } shield_type_e;
Wayne Roberts 0:6b3ac9c5a042 20 shield_type_e shield_type;
Wayne Roberts 0:6b3ac9c5a042 21
Wayne Roberts 0:6b3ac9c5a042 22 DigitalOut pc3(PC_3);
Wayne Roberts 0:6b3ac9c5a042 23 DigitalInOut rfsw(A4);
Wayne Roberts 0:6b3ac9c5a042 24 void Radio::rfsw_callback()
Wayne Roberts 0:6b3ac9c5a042 25 {
Wayne Roberts 0:6b3ac9c5a042 26 if (radio.RegOpMode.bits.Mode == RF_OPMODE_TRANSMITTER)
Wayne Roberts 0:6b3ac9c5a042 27 rfsw = 1;
Wayne Roberts 0:6b3ac9c5a042 28 else
Wayne Roberts 0:6b3ac9c5a042 29 rfsw = 0;
Wayne Roberts 0:6b3ac9c5a042 30
Wayne Roberts 0:6b3ac9c5a042 31 if (radio.RegOpMode.bits.Mode == RF_OPMODE_RECEIVER || radio.RegOpMode.bits.Mode == RF_OPMODE_RECEIVER_SINGLE)
Wayne Roberts 0:6b3ac9c5a042 32 pc3 = 1;
Wayne Roberts 0:6b3ac9c5a042 33 else
Wayne Roberts 0:6b3ac9c5a042 34 pc3 = 0;
Wayne Roberts 0:6b3ac9c5a042 35 }
Wayne Roberts 0:6b3ac9c5a042 36
Wayne Roberts 0:6b3ac9c5a042 37 void
Wayne Roberts 0:6b3ac9c5a042 38 Radio::set_tx_dbm(int8_t dbm)
Wayne Roberts 0:6b3ac9c5a042 39 {
Wayne Roberts 0:6b3ac9c5a042 40 RegPdsTrim1_t pds_trim;
Wayne Roberts 0:6b3ac9c5a042 41 uint8_t adr;
Wayne Roberts 0:6b3ac9c5a042 42 if (radio.type == SX1276)
Wayne Roberts 0:6b3ac9c5a042 43 adr = REG_PDSTRIM1_SX1276;
Wayne Roberts 0:6b3ac9c5a042 44 else
Wayne Roberts 0:6b3ac9c5a042 45 adr = REG_PDSTRIM1_SX1272;
Wayne Roberts 0:6b3ac9c5a042 46
Wayne Roberts 0:6b3ac9c5a042 47 pds_trim.octet = radio.read_reg(adr);
Wayne Roberts 0:6b3ac9c5a042 48
Wayne Roberts 0:6b3ac9c5a042 49 if (shield_type == SHIELD_TYPE_LAS)
Wayne Roberts 0:6b3ac9c5a042 50 radio.RegPaConfig.bits.PaSelect = 1;
Wayne Roberts 0:6b3ac9c5a042 51 else
Wayne Roberts 0:6b3ac9c5a042 52 radio.RegPaConfig.bits.PaSelect = 0;
Wayne Roberts 0:6b3ac9c5a042 53
Wayne Roberts 0:6b3ac9c5a042 54 if (radio.RegPaConfig.bits.PaSelect) {
Wayne Roberts 0:6b3ac9c5a042 55 /* PABOOST used: +2dbm to +17, or +20 */
Wayne Roberts 0:6b3ac9c5a042 56 if (dbm > 17) {
Wayne Roberts 0:6b3ac9c5a042 57 MAC_PRINTF("+20dBm PADAC bias\r\n");
Wayne Roberts 0:6b3ac9c5a042 58 if (dbm > 20)
Wayne Roberts 0:6b3ac9c5a042 59 dbm = 20;
Wayne Roberts 0:6b3ac9c5a042 60 dbm -= 3;
Wayne Roberts 0:6b3ac9c5a042 61 pds_trim.bits.prog_txdac = 7;
Wayne Roberts 0:6b3ac9c5a042 62 radio.write_reg(adr, pds_trim.octet);
Wayne Roberts 0:6b3ac9c5a042 63 ocp(150);
Wayne Roberts 0:6b3ac9c5a042 64 } else
Wayne Roberts 0:6b3ac9c5a042 65 ocp(120);
Wayne Roberts 0:6b3ac9c5a042 66
Wayne Roberts 0:6b3ac9c5a042 67 if (dbm > 1)
Wayne Roberts 0:6b3ac9c5a042 68 radio.RegPaConfig.bits.OutputPower = dbm - 2;
Wayne Roberts 0:6b3ac9c5a042 69 } else {
Wayne Roberts 0:6b3ac9c5a042 70 /* RFO used: -1 to +14dbm */
Wayne Roberts 0:6b3ac9c5a042 71 ocp(80);
Wayne Roberts 0:6b3ac9c5a042 72 if (dbm < 15)
Wayne Roberts 0:6b3ac9c5a042 73 radio.RegPaConfig.bits.OutputPower = dbm + 1;
Wayne Roberts 0:6b3ac9c5a042 74 }
Wayne Roberts 0:6b3ac9c5a042 75 radio.write_reg(REG_PACONFIG, radio.RegPaConfig.octet);
Wayne Roberts 0:6b3ac9c5a042 76
Wayne Roberts 0:6b3ac9c5a042 77 radio.RegPaConfig.octet = radio.read_reg(REG_PACONFIG);
Wayne Roberts 0:6b3ac9c5a042 78 if (radio.RegPaConfig.bits.PaSelect) {
Wayne Roberts 0:6b3ac9c5a042 79 MAC_PRINTF("PA_BOOST ");
Wayne Roberts 0:6b3ac9c5a042 80 dbm = radio.RegPaConfig.bits.OutputPower + pds_trim.bits.prog_txdac - 2;
Wayne Roberts 0:6b3ac9c5a042 81 } else {
Wayne Roberts 0:6b3ac9c5a042 82 MAC_PRINTF("RFO ");
Wayne Roberts 0:6b3ac9c5a042 83 dbm = radio.RegPaConfig.bits.OutputPower - 1;
Wayne Roberts 0:6b3ac9c5a042 84 }
Wayne Roberts 0:6b3ac9c5a042 85 MAC_PRINTF("OutputPower:%ddBm{%02x}\r\n", dbm, radio.RegPaConfig.octet);
Wayne Roberts 0:6b3ac9c5a042 86 }
Wayne Roberts 0:6b3ac9c5a042 87
Wayne Roberts 0:6b3ac9c5a042 88 void Radio::boardInit()
Wayne Roberts 0:6b3ac9c5a042 89 {
Wayne Roberts 0:6b3ac9c5a042 90 rfsw.input();
Wayne Roberts 0:6b3ac9c5a042 91 if (rfsw.read()) {
Wayne Roberts 0:6b3ac9c5a042 92 shield_type = SHIELD_TYPE_LAS;
Wayne Roberts 0:6b3ac9c5a042 93 MAC_PRINTF("LAS\r\n");
Wayne Roberts 0:6b3ac9c5a042 94 } else {
Wayne Roberts 0:6b3ac9c5a042 95 shield_type = SHIELD_TYPE_MAS;
Wayne Roberts 0:6b3ac9c5a042 96 MAC_PRINTF("MAS\r\n");
Wayne Roberts 0:6b3ac9c5a042 97 }
Wayne Roberts 0:6b3ac9c5a042 98
Wayne Roberts 0:6b3ac9c5a042 99 rfsw.output();
Wayne Roberts 0:6b3ac9c5a042 100 }
Wayne Roberts 0:6b3ac9c5a042 101
Wayne Roberts 0:6b3ac9c5a042 102 #endif /* ...sx127x shield */
Wayne Roberts 0:6b3ac9c5a042 103