Dan Fay / mbed-STM32F103C8T6

peripherals/lora_radio.cpp

Committer:
faydrus
Date:
2018-09-28
Revision:
14:900adc64ed43

File content as of revision 14:900adc64ed43:

#include "mbed.h"
#include "CircularBuffer.h"
#include "sx1276-hal.h"


static void TxDoneCb(void) {};
static void TxTimeoutCb(void) {};
static void RxDoneCb(uint8_t *pld, uint16_t size, int16_t rssi, int8_t snr);
static void RxTimeoutCb(void) {};
static void RxErrorCb(void) {};
static void FhssChangeChannelCb(uint8_t currentChannel) {};
static void CadDoneCb(bool ChannelActivityDetected) {};


SX1276MB1xAS Radio( NULL );

void initLoRaRadio() {
    // Set up the RadioEvents
    static RadioEvents_t events;
    events.TxDone = TxDoneCb;
    events.TxTimeout = TxTimeoutCb;    
    events.RxDone = RxDoneCb;
    events.RxTimeout = RxTimeoutCb;
    events.RxError = RxErrorCb;
    events.FhssChangeChannel = FhssChangeChannelCb;
    events.CadDone = CadDoneCb;
    
    Radio.Init(&events);
}

typedef struct {
    uint8_t pld[128];   
} pkt_t;
CircularBuffer<pkt_t, 32, uint32_t> rx_plds;
CircularBuffer<uint16_t, 32, uint32_t> rssi_vals; 
CircularBuffer<uint16_t, 32, uint32_t> snr_vals;
static pkt_t mesh_pkt;
static void RxDoneCb(uint8_t *pld, uint16_t size, int16_t rssi, int8_t snr) {
    static pkt_t tmp_pld;
    memcpy((void *) &tmp_pld, (void *) pld, size);
    memcpy((void *) &mesh_pkt, (void *) pld, size);
    rx_plds.push(tmp_pld);
    rssi_vals.push(rssi);
    snr_vals.push(snr);
}