May 2021 Tests

Dependencies:   SX127x sx12xx_hal

main.cpp

Committer:
lightshow
Date:
2021-05-09
Revision:
2:cfd70a2fb81f
Parent:
1:b277f5a65c1c

File content as of revision 2:cfd70a2fb81f:

#include "radio.h"

//InterruptIn txByte[8]={InterruptIn(D2),InterruptIn(D3),InterruptIn(D4),InterruptIn(D5),InterruptIn(D7),InterruptIn(D8),InterruptIn(D9),InterruptIn(D14)};
InterruptIn txByte0(PB_1);//D2,A1,PC_8 didn't work, PC_5
InterruptIn txByte1(PB_15);//D3 didn't work, A2 works
InterruptIn txByte2(D4);
InterruptIn txByte3(D7);
InterruptIn txByte4(D5);
InterruptIn txByte5(PB_14);//D8 didn't work, a3 works
InterruptIn txByte6(D9);//D9 didn't work, a4 works
InterruptIn txByte7(D14);//D14,PC_0(A6),PC_6 didn't work
EventQueue queue(10 * EVENTS_EVENT_SIZE);
Thread t;
Radio loRaRadio;

void transmit( uint8_t byte);

//uint8_t old_byte = 0;
void tx_event(void)
{
    printf("tx_event\n\r");
    uint8_t byte = 0;

    uint8_t bit0 = txByte0.read();
    uint8_t bit1 = txByte1.read() << 1;
    uint8_t bit2 = txByte2.read() << 2;
    uint8_t bit3 = txByte3.read() << 3;
    uint8_t bit4 = txByte4.read() << 4;
    uint8_t bit5 = txByte5.read() << 5;
    uint8_t bit6 = txByte6.read() << 6;
    uint8_t bit7 = txByte7.read() << 7;
    if(bit0 || bit1 || bit2 || bit3 || bit4 || bit5 || bit6 || bit7)
    {
        byte = bit0 + bit1 + bit2 + bit3 + bit4 + bit5 + bit6 + bit7;
        transmit(byte);
    }
    printf("bit0 :%d,\n\r",bit0);
    printf("bit1 :%d,\n\r",bit1);
    printf("bit2 :%d,\n\r",bit2);
    printf("bit3 :%d,\n\r",bit3);
    printf("bit4 :%d,\n\r",bit4);
    printf("bit5 :%d,\n\r",bit5);
    printf("bit6 :%d,\n\r",bit6);
    printf("bit7 :%d,\n\r",bit7);
}

void rise_handler(void) {
    //printf("rise_handler in context %p\r\n", Thread::gettid());
    queue.call(tx_event);

}

// Semtech radio definitions for SX127x, SX126x and SX128x

#if defined(SX127x_H)
    #define BW_KHZ              500
    #define SPREADING_FACTOR    11
    #define CF_HZ               912000000
    #define TX_DBM              00
#elif defined(SX126x_H)
    #define BW_KHZ              500
    #define SPREADING_FACTOR    10
    #define CF_HZ               915000000
    #define TX_DBM              (Radio::chipType == CHIP_TYPE_SX1262 ? 20 : 14) 
#elif defined(SX128x_H)
    #define BW_KHZ              200
    #define SPREADING_FACTOR    7
    #define CF_HZ               2487000000
    #define TX_DBM              6
#endif

/******************** Setup radio transmitter ****************************/


volatile bool txDone;

void txDoneCB()
{
    txDone = true;
}

void rxDoneCB(uint8_t size, float rssi, float snr)
{
}

    // Define radio events for transmitter

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()
{
        // Start the event queue
    t.start(callback(&queue, &EventQueue::dispatch_forever));

    // The 'rise' handler will execute in the context of thread 't'
    // for(int i = 0; i < 8; i++)
    // {
    //     txByte[i].rise(queue.event(rise_handler));
    // }
    txByte0.rise(rise_handler);
    txByte1.rise(rise_handler);
    txByte2.rise(rise_handler);
    txByte3.rise(rise_handler);
    txByte4.rise(rise_handler);
    txByte5.rise(rise_handler);
    txByte6.rise(rise_handler);
    txByte7.rise(rise_handler);


    uint8_t seq = 0;  //  Set initial transmit sequence to 0
 
    printf("\r\nreset-tx ");
    
    // Start radio transmitter after POR or reset

    loRaRadio.Init(&rev);

    //Set radio properties for transmitter

    loRaRadio.Standby();
    loRaRadio.LoRaModemConfig(BW_KHZ, SPREADING_FACTOR, 1);
    loRaRadio.SetChannel(CF_HZ);

    // Set transmitter output power

    loRaRadio.set_tx_dbm(TX_DBM);

    // Setup transmit packet payload  -> preambleLen, fixLen, crcOn, invIQ
               
    loRaRadio.LoRaPacketConfig(8, false, true, false);
    
    printf("\n");
    
    printf("%02d \r\n\n", seq);

    for (;;) {}

        // loRaRadio.radio.tx_buf[0] = seq;  // set payload 
        // txDone = false;
        // loRaRadio.Send(10, 0, 0, 0);   // begin transmission of payload 

        // while (!txDone) {
        //     loRaRadio.service();
        // }

        // // Transmit payload every 500mS

        // wait(0.5);  // throttle sending rate 
        // seq++;  // change payload (increment sequence number)
        // printf("%02d \r\n\n", seq);  // Print sequence number
        
        //}
}

void transmit( uint8_t byte)
{
        //volatile bool tx_Done;
        loRaRadio.radio.tx_buf[0] = byte;  // set payload 
        txDone = false;
        loRaRadio.Send(1, 0, 0, 0);   // begin transmission of payload 

        while (!txDone) {
            loRaRadio.service();
        }
        printf("transmission complete\n\r");
}