Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 7:ccb3088ce5be, committed 2018-07-18
- Comitter:
 - Wayne Roberts 
 - Date:
 - Wed Jul 18 18:52:35 2018 -0700
 - Parent:
 - 6:59ba1113b3c6
 - Commit message:
 - use sx12xx_hal
 
Changed in this revision
diff -r 59ba1113b3c6 -r ccb3088ce5be SX127x.lib --- a/SX127x.lib Mon Feb 12 17:23:14 2018 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -https://developer.mbed.org/users/dudmuck/code/SX127x/#b66d7a057b22
diff -r 59ba1113b3c6 -r ccb3088ce5be TARGET_DISCO_L072CZ_LRWAN1/board.cpp
--- a/TARGET_DISCO_L072CZ_LRWAN1/board.cpp	Mon Feb 12 17:23:14 2018 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,87 +0,0 @@
-#include "platform.h"
-
-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;        
-    }
-}    
-    
-DigitalIn pinA(PB_12);
-DigitalIn pinB(PB_13);
-DigitalIn pinC(PB_14);
-DigitalIn pinD(PB_15);    
-
-
-void cmd_op(int dbm)
-{
-    int i = dbm;
-    RegPdsTrim1_t pds_trim;
-    uint8_t adr;
-    if (radio.type == SX1276)
-        adr = REG_PDSTRIM1_SX1276;
-    else
-        adr = REG_PDSTRIM1_SX1272;
-       
-    pds_trim.octet = radio.read_reg(adr);   
-
-    if (radio.RegPaConfig.bits.PaSelect) {
-        /* PABOOST used: +2dbm to +17, or +20 */
-        if (i == 20) {
-            printf("+20dBm PADAC bias\r\n");
-            i -= 3;
-            pds_trim.bits.prog_txdac = 7;
-            radio.write_reg(adr, pds_trim.octet);
-            cmd_ocp(150);
-        }
-        if (i > 1)
-                radio.RegPaConfig.bits.OutputPower = i - 2;
-    } else {
-        /* RFO used: -1 to +14dbm */
-        if (i < 15)
-            radio.RegPaConfig.bits.OutputPower = i + 1;
-    }
-    radio.write_reg(REG_PACONFIG, radio.RegPaConfig.octet);
-
-    radio.RegPaConfig.octet = radio.read_reg(REG_PACONFIG);
-    if (radio.RegPaConfig.bits.PaSelect) {
-        printf("PA_BOOST ");
-        dbm = radio.RegPaConfig.bits.OutputPower + pds_trim.bits.prog_txdac - 2;
-    } else {
-        printf("RFO ");
-        dbm = radio.RegPaConfig.bits.OutputPower - 1;
-    }
-    printf("OutputPower:%ddBm\r\n", dbm);
-}
-
-void board_init()
-{
-    radio.RegPaConfig.bits.PaSelect = 1;
-    cmd_op(20);
-}
diff -r 59ba1113b3c6 -r ccb3088ce5be TARGET_MOTE_L152RC/board.cpp
--- a/TARGET_MOTE_L152RC/board.cpp	Mon Feb 12 17:23:14 2018 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,123 +0,0 @@
-#include "user_platform.h"
-
-#define RADIO_RESET              PC_2 //NorAm_Mote Reset_sx
-#define RADIO_MOSI               PB_15 //NorAm_Mote SPI2 Mosi
-#define RADIO_MISO               PB_14 //NorAm_Mote SPI2 Miso
-#define RADIO_SCLK               PB_13 //NorAm_Mote  SPI2 Clk
-#define RADIO_NSS                PB_12 //NorAm_Mote SPI2 Nss
- 
-#define RADIO_DIO0              PC_6 //NorAm_Mote DIO0 
-#define RADIO_DIO1              PC_10 //NorAm_Mote DIO1 
-#define RADIO_DIO2              PC_8 //NorAm_Mote DIO2 
-#define RADIO_DIO3              PB_4 //NorAm_Mote DIO3 
-#define RADIO_DIO4              PB_5 //NorAm_Mote DIO4 
-#define RADIO_DIO5              PB_6 //NorAm_Mote DIO5
- 
-#define RFSW1                    PC_4 //NorAm_Mote RFSwitch_CNTR_1
-#define RFSW2                    PC_13 //NorAm_Mote RFSwitch_CNTR_2
-
-SPI spi(RADIO_MOSI, RADIO_MISO, RADIO_SCLK);
-SX127x radio(RADIO_DIO0, RADIO_DIO1, RADIO_NSS, spi, RADIO_RESET);
-
-DigitalOut rfsw1(RFSW1);
-DigitalOut rfsw2(RFSW2);
-DigitalOut pd2(PD_2);
-
-//                    txpow:   0  1  2  3  4  5  6  7  8  9 10 11 12 13 14  15  16  17  18  19
-const uint8_t PaBTable[20] = { 0, 0, 0, 0, 0, 1, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15 };
-#define DBM_TO_PABOOST(x)       (PaBTable[x])
- 
-//                    txpow:  20 21 22 23 24 25 26 27 28 29 30
-const uint8_t RfoTable[11] = { 1, 1, 1, 2, 2, 3, 4, 5, 6, 8, 9 };
-#define DBM_TO_RFO(x)       (RfoTable[x-20])
-#define DBM_TO_MOTE(x)  \
-
-void rfsw_callback() {
-    if (radio.RegOpMode.bits.Mode == RF_OPMODE_TRANSMITTER) {  // start of transmission
-        if (radio.HF) {
-            if (radio.RegPaConfig.bits.PaSelect) { // if PA_BOOST
-                rfsw2 = 0;
-                rfsw1 = 1;
-            } else { // RFO to power amp
-                rfsw2 = 1;
-                rfsw1 = 0;            
-            }
-        } 
-    } else if (radio.RegOpMode.bits.Mode == RF_OPMODE_RECEIVER || radio.RegOpMode.bits.Mode == RF_OPMODE_CAD) { // start of reception
-        if (radio.HF) {
-            rfsw2 = 1;
-            rfsw1 = 1;              
-        }
-    } else { // RF switch shutdown
-        rfsw2 = 0;
-        rfsw1 = 0;     
-    }
-}
-
-//                            9 10   1PPS
-//   PB5-D4       HDR_DIO4 * 11 12 * HDR_DIO0        PA8-D7
-//                 ADC_IN3   13 14   HDR_FEM_SPARE   PB1 RED_LED
-//                           15 16
-// D3-PB3-SWO     HDR_DIO2   17 18   HDR_FEM_CPS  PB10-D6 YEL-LED
-// A5-PC0      HDR_FEM_CSD * 19 20 * HDR_FEM_CTX  A4-PC1
-DigitalIn pinA(PB_5); // CONN_EXIT1-11
-DigitalIn pinB(PC_0); // CONN_EXIT1-19
-DigitalIn pinC(PA_8); // CONN_EXIT1-12
-DigitalIn pinD(PC_1); // CONN_EXIT1-20
-
-void cmd_op(int dbm)
-{
-    int i = dbm;
-    RegPdsTrim1_t pds_trim;
-    uint8_t adr;
-
-    radio.RegPaConfig.octet = radio.read_reg(REG_PACONFIG);
-
-    if (dbm < 20) {
-        radio.RegPaConfig.bits.PaSelect = 1;
-        radio.RegPaConfig.bits.OutputPower = PaBTable[dbm];
-        printf("PA_BOOST ");
-    } else {
-        radio.RegPaConfig.bits.PaSelect = 0;
-        radio.RegPaConfig.bits.OutputPower = RfoTable[dbm-20];
-        printf("RFO ");
-    }
-
-    printf("%ddBm, PaSelect%u, OutputPower%u\r\n", dbm,
-        radio.RegPaConfig.bits.PaSelect,
-        radio.RegPaConfig.bits.OutputPower
-    );
-
-    if (radio.type == SX1276)
-        adr = REG_PDSTRIM1_SX1276;
-    else
-        adr = REG_PDSTRIM1_SX1272;
-       
-    pds_trim.octet = radio.read_reg(adr);   
-
-    if (radio.RegPaConfig.bits.PaSelect) {
-        /* PABOOST used: +2dbm to +17, or +20 */
-        if (i == 20) {
-            printf("+20dBm PADAC bias\r\n");
-            i -= 3;
-            pds_trim.bits.prog_txdac = 7;
-            radio.write_reg(adr, pds_trim.octet);
-            cmd_ocp(150);
-        } else if (dbm < 18) {
-            pds_trim.bits.prog_txdac = 5;
-            radio.write_reg(adr, pds_trim.octet);
-            cmd_ocp(120);
-        }
-    } else
-        cmd_ocp(80);
-
-    radio.write_reg(REG_PACONFIG, radio.RegPaConfig.octet);
-    printf("PaConfig:%02x, pd2:%u\r\n", radio.RegPaConfig.octet, pd2.read());
-
-}
-
-void board_init()
-{
-    pd2 = 1;
-    cmd_op(26);
-}
diff -r 59ba1113b3c6 -r ccb3088ce5be board_shield.cpp
--- a/board_shield.cpp	Mon Feb 12 17:23:14 2018 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,91 +0,0 @@
-#if !defined(TARGET_MOTE_L152RC) && !defined(TARGET_DISCO_L072CZ_LRWAN1)
-#include "platform.h"
-
-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;
-    }
-}
-    
-DigitalIn pinA(PC_3);
-DigitalIn pinB(PC_2);
-DigitalIn pinC(PC_6);
-DigitalIn pinD(PC_8);
-
-void cmd_op(int dbm)
-{
-    int i = dbm;
-    RegPdsTrim1_t pds_trim;
-    uint8_t adr;
-    if (radio.type == SX1276)
-        adr = REG_PDSTRIM1_SX1276;
-    else
-        adr = REG_PDSTRIM1_SX1272;
-       
-    pds_trim.octet = radio.read_reg(adr);   
-
-    if (radio.RegPaConfig.bits.PaSelect) {
-        /* PABOOST used: +2dbm to +17, or +20 */
-        if (i == 20) {
-            printf("+20dBm PADAC bias\r\n");
-            i -= 3;
-            pds_trim.bits.prog_txdac = 7;
-            radio.write_reg(adr, pds_trim.octet);
-            cmd_ocp(150);
-        }
-        if (i > 1)
-                radio.RegPaConfig.bits.OutputPower = i - 2;
-    } else {
-        /* RFO used: -1 to +14dbm */
-        if (i < 15)
-            radio.RegPaConfig.bits.OutputPower = i + 1;
-    }
-    radio.write_reg(REG_PACONFIG, radio.RegPaConfig.octet);
-
-    radio.RegPaConfig.octet = radio.read_reg(REG_PACONFIG);
-    if (radio.RegPaConfig.bits.PaSelect) {
-        printf("PA_BOOST ");
-        dbm = radio.RegPaConfig.bits.OutputPower + pds_trim.bits.prog_txdac - 2;
-    } else {
-        printf("RFO ");
-        dbm = radio.RegPaConfig.bits.OutputPower - 1;
-    }
-    printf("OutputPower:%ddBm\r\n", dbm);
-}
-
-void board_init()
-{
-    radio.RegPaConfig.octet = radio.read_reg(REG_PACONFIG);
-
-    /* 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;
-        cmd_op(20);
-    } else {
-        /* MAS shield board, only RFO TX */
-        radio.RegPaConfig.bits.PaSelect = 0;
-        printf("MAS\r\n");
-        cmd_op(14);
-    }
-    rfsw.output();
-
-    radio.write_reg(REG_PACONFIG, radio.RegPaConfig.octet);
-}
-#endif /*  !defined(TARGET_MOTE_L152RC) && !defined(TARGET_DISCO_L072CZ_LRWAN1) */
diff -r 59ba1113b3c6 -r ccb3088ce5be main.cpp
--- a/main.cpp	Mon Feb 12 17:23:14 2018 -0800
+++ b/main.cpp	Wed Jul 18 18:52:35 2018 -0700
@@ -1,12 +1,50 @@
-#include "user_platform.h"
+//#include "user_platform.h"
+#include "radio.h"
+
+#if defined(SX127x_H) || defined(SX126x_H)
+    #define BW_KHZ              500
+    #define SPREADING_FACTOR    11
+    #define CF_HZ               910800000
+    #if defined(SX126x_H)
+        #define TX_DBM              (Radio::chipType == CHIP_TYPE_SX1262 ? 20 : 14) 
+    #else
+        #define TX_DBM              17
+    #endif
+#elif defined(SX128x_H)
+    #define BW_KHZ              200
+    #define SPREADING_FACTOR    11
+    #define CF_HZ               2487000000
+
+    #define TX_DBM              5
+#endif
+
+#ifdef TARGET_DISCO_L072CZ_LRWAN1
+    DigitalIn pinA(PB_12);
+    DigitalIn pinB(PB_13);
+    DigitalIn pinC(PB_14);
+    DigitalIn pinD(PB_15);
+#elif defined(TARGET_FF_MORPHO)
+    DigitalIn pinA(PC_3);
+    DigitalIn pinB(PC_2);
+    DigitalIn pinC(PC_6);
+    DigitalIn pinD(PC_8);
+#endif 
+
+volatile struct _f_ {
+    uint8_t enable_pin_A : 1;
+    uint8_t enable_pin_B : 1;
+    uint8_t enable_pin_C : 1;
+    uint8_t enable_pin_D : 1;
+} flags;
  
-SX127x_lora lora(radio);
 Timer t;
 #define CMD_PINA       0x02
 #define CMD_PINB       0x03
 #define CMD_PINC       0x06
 #define CMD_PIND       0x08
 
+volatile bool tx_done;
+
 static uint16_t crc_ccitt( uint8_t *buffer, uint16_t length )
 {
     // The CRC calculation follows CCITT
@@ -36,21 +74,20 @@
     unsigned t_diff;
     uint16_t crc;
 
-    radio.tx_buf[0] = cmd;
+    Radio::radio.tx_buf[0] = cmd;
     t_diff = target - t.read_us();
-    radio.tx_buf[1] = t_diff >> 24;
-    radio.tx_buf[2] = t_diff >> 16;
-    radio.tx_buf[3] = t_diff >> 8;
-    radio.tx_buf[4] = t_diff & 0xff;
-    crc = crc_ccitt(radio.tx_buf, 5);
-    radio.tx_buf[5] = crc >> 8;
-    radio.tx_buf[6] = crc & 0xff;
+    Radio::radio.tx_buf[1] = t_diff >> 24;
+    Radio::radio.tx_buf[2] = t_diff >> 16;
+    Radio::radio.tx_buf[3] = t_diff >> 8;
+    Radio::radio.tx_buf[4] = t_diff & 0xff;
+    crc = crc_ccitt(Radio::radio.tx_buf, 5);
+    Radio::radio.tx_buf[5] = crc >> 8;
+    Radio::radio.tx_buf[6] = crc & 0xff;
 
-
-    lora.start_tx(lora.RegPayloadLength);   /* begin transmission */
+    Radio::Send(7, 0, 0, 0);
 
-    while (lora.service() != SERVICE_TX_DONE) {  /* wait for transmission to complete */
-    }
+    for (tx_done = false; !tx_done; )
+        Radio::service();
 
     printf("t_diff:%u crc:%04x\r\n", t_diff, crc);
 }
@@ -87,55 +124,84 @@
     }
 }
 
-void cmd_ocp(uint8_t ma)
+void txDoneCB()
+{
+    tx_done = true;
+}
+
+void rxDoneCB(uint8_t size, float Rssi, float Snr)
 {
-    if (ma < 130)
-        radio.RegOcp.bits.OcpTrim = (ma - 45) / 5;
-    else
-        radio.RegOcp.bits.OcpTrim = (ma + 30) / 10;
-    radio.write_reg(REG_OCP, radio.RegOcp.octet);
-   
-    radio.RegOcp.octet = radio.read_reg(REG_OCP);
-    if (radio.RegOcp.bits.OcpTrim < 16)
-        ma = 45 + (5 * radio.RegOcp.bits.OcpTrim);
-    else if (radio.RegOcp.bits.OcpTrim < 28)
-        ma = (10 * radio.RegOcp.bits.OcpTrim) - 30;
-    else
-        ma = 240;
-    printf("Ocp: %dmA\r\n", ma); 
 }
 
+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-tx\r\n");
-    t.start();
 
     pinA.mode(PullUp);
     pinB.mode(PullUp);
     pinC.mode(PullUp);
     pinD.mode(PullUp);
 
-    radio.rf_switch = rfsw_callback;
-    
-    radio.set_frf_MHz(910.8);
-    lora.enable();
-    lora.setBw_KHz(500);
-    lora.setSf(11);
-    
-    board_init();
+    wait(0.05);
+
+    if (pinA.read() == 0) {
+        printf("pinA-disabled\r\n");
+        flags.enable_pin_A = 0;
+    } else
+        flags.enable_pin_A = 1;
+
+    if (pinB.read() == 0) {
+        printf("pinB-disabled\r\n");
+        flags.enable_pin_B = 0;
+    } else
+        flags.enable_pin_B = 1;
+
+    if (pinC.read() == 0) {
+        printf("pinC-disabled\r\n");
+        flags.enable_pin_C = 0;
+    } else
+        flags.enable_pin_C = 1;
+
+    if (pinD.read() == 0) {
+        printf("pinD-disabled\r\n");
+        flags.enable_pin_D = 0;
+    } else
+        flags.enable_pin_D = 1;
+
+    t.start();
+
+    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::set_tx_dbm(TX_DBM);
                 
-    /* constant payload length */
-    lora.RegPayloadLength = 7;
-    radio.write_reg(REG_LR_PAYLOADLENGTH, lora.RegPayloadLength);
-    
-/*    lora.RegModemConfig2.octet = radio.read_reg(REG_LR_MODEMCONFIG2);
-    lora.RegModemConfig2.sx1276bits.TxContinuousMode = 1;   
-    radio.write_reg(REG_LR_MODEMCONFIG2, lora.RegModemConfig2.octet);      
-*/
     for (;;) {       
-        debounce(&pinA, CMD_PINA);
-        debounce(&pinB, CMD_PINB);
-        debounce(&pinC, CMD_PINC);
-        debounce(&pinD, CMD_PIND);
+        if (flags.enable_pin_A)
+            debounce(&pinA, CMD_PINA);
+
+        if (flags.enable_pin_B)
+            debounce(&pinB, CMD_PINB);
+
+        if (flags.enable_pin_C)
+            debounce(&pinC, CMD_PINC);
+
+        if (flags.enable_pin_D)
+            debounce(&pinD, CMD_PIND);
     } // ..for (;;)
 }
diff -r 59ba1113b3c6 -r ccb3088ce5be mbed-os.lib --- a/mbed-os.lib Mon Feb 12 17:23:14 2018 -0800 +++ b/mbed-os.lib Wed Jul 18 18:52:35 2018 -0700 @@ -1,1 +1,1 @@ -https://github.com/ARMmbed/mbed-os/#7b5d48df38bc8f75f75143b683210913e1dd001a +https://github.com/ARMmbed/mbed-os/#dd6482b9555c43cab2e80c9e3715edf1806f87d9
diff -r 59ba1113b3c6 -r ccb3088ce5be platform.h --- a/platform.h Mon Feb 12 17:23:14 2018 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,15 +0,0 @@ - -#include "sx127x_lora.h" - -// from platform: -extern SX127x radio; -extern DigitalIn pinA; -extern DigitalIn pinB; -extern DigitalIn pinC; -extern DigitalIn pinD; -void rfsw_callback(void); -void cmd_op(int dbm); -void board_init(void); - -// from main: -void cmd_ocp(uint8_t ma);
diff -r 59ba1113b3c6 -r ccb3088ce5be sx12xx_hal.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sx12xx_hal.lib Wed Jul 18 18:52:35 2018 -0700 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/dudmuck/code/sx12xx_hal/#c321b5919516