wayne roberts / Mbed OS alarm_master

Dependencies:   sx12xx_hal

TARGET_DISCO_L072CZ_LRWAN1/board.cpp

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

File content as of revision 5:1652e04809fb:

#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);
}