wayne roberts / Mbed OS alarm_master

Dependencies:   sx12xx_hal

board_shield.cpp

Committer:
Wayne Roberts
Date:
2018-02-05
Revision:
5:1652e04809fb

File content as of revision 5:1652e04809fb:

#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) */