mirror of https://github.com/ARMmbed/mbed-os.git
Astyle fixes
parent
2867b1878a
commit
444e72561f
|
@ -47,28 +47,26 @@ using namespace rtos;
|
|||
/*!
|
||||
* FSK bandwidth definition
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
typedef struct {
|
||||
uint32_t bandwidth;
|
||||
uint8_t register_value;
|
||||
} fsk_bw_t;
|
||||
|
||||
static const fsk_bw_t fsk_bandwidths[] =
|
||||
{
|
||||
{ 4800 , 0x1F },
|
||||
{ 5800 , 0x17 },
|
||||
{ 7300 , 0x0F },
|
||||
{ 9700 , 0x1E },
|
||||
{ 11700 , 0x16 },
|
||||
{ 14600 , 0x0E },
|
||||
{ 19500 , 0x1D },
|
||||
{ 23400 , 0x15 },
|
||||
{ 29300 , 0x0D },
|
||||
{ 39000 , 0x1C },
|
||||
{ 46900 , 0x14 },
|
||||
{ 58600 , 0x0C },
|
||||
{ 78200 , 0x1B },
|
||||
{ 93800 , 0x13 },
|
||||
static const fsk_bw_t fsk_bandwidths[] = {
|
||||
{ 4800, 0x1F },
|
||||
{ 5800, 0x17 },
|
||||
{ 7300, 0x0F },
|
||||
{ 9700, 0x1E },
|
||||
{ 11700, 0x16 },
|
||||
{ 14600, 0x0E },
|
||||
{ 19500, 0x1D },
|
||||
{ 23400, 0x15 },
|
||||
{ 29300, 0x0D },
|
||||
{ 39000, 0x1C },
|
||||
{ 46900, 0x14 },
|
||||
{ 58600, 0x0C },
|
||||
{ 78200, 0x1B },
|
||||
{ 93800, 0x13 },
|
||||
{ 117300, 0x0B },
|
||||
{ 156200, 0x1A },
|
||||
{ 187200, 0x12 },
|
||||
|
@ -79,12 +77,13 @@ static const fsk_bw_t fsk_bandwidths[] =
|
|||
{ 500000, 0x00 }, // Invalid Bandwidth
|
||||
};
|
||||
|
||||
const uint8_t sync_word[] = {0xC1, 0x94, 0xC1, 0x00, 0x00, 0x00, 0x00,0x00};
|
||||
const uint8_t sync_word[] = {0xC1, 0x94, 0xC1, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||
|
||||
// in ms SF12 SF11 SF10 SF9 SF8 SF7
|
||||
const float lora_symbol_time[3][6] = {{ 32.768, 16.384, 8.192, 4.096, 2.048, 1.024 }, // 125 KHz
|
||||
{ 16.384, 8.192, 4.096, 2.048, 1.024, 0.512 }, // 250 KHz
|
||||
{ 8.192, 4.096, 2.048, 1.024, 0.512, 0.256 }}; // 500 KHz
|
||||
{ 8.192, 4.096, 2.048, 1.024, 0.512, 0.256 }
|
||||
}; // 500 KHz
|
||||
|
||||
SX126X_LoRaRadio::SX126X_LoRaRadio(PinName mosi,
|
||||
PinName miso,
|
||||
|
@ -181,8 +180,8 @@ void SX126X_LoRaRadio::clear_irq_status(uint16_t irq)
|
|||
{
|
||||
uint8_t buf[2];
|
||||
|
||||
buf[0] = (uint8_t) (((uint16_t) irq >> 8) & 0x00FF);
|
||||
buf[1] = (uint8_t) ((uint16_t) irq & 0x00FF);
|
||||
buf[0] = (uint8_t)(((uint16_t) irq >> 8) & 0x00FF);
|
||||
buf[1] = (uint8_t)((uint16_t) irq & 0x00FF);
|
||||
write_opmode_command((uint8_t) RADIO_CLR_IRQSTATUS, buf, 2);
|
||||
}
|
||||
|
||||
|
@ -344,16 +343,16 @@ void SX126X_LoRaRadio::set_channel(uint32_t frequency)
|
|||
uint8_t buf[4];
|
||||
uint32_t freq = 0;
|
||||
|
||||
if ( _force_image_calibration || !_image_calibrated) {
|
||||
if (_force_image_calibration || !_image_calibrated) {
|
||||
calibrate_image(frequency);
|
||||
_image_calibrated = true;
|
||||
}
|
||||
|
||||
freq = (uint32_t) ceil(((float) frequency / (float) FREQ_STEP));
|
||||
buf[0] = (uint8_t) ((freq >> 24) & 0xFF);
|
||||
buf[1] = (uint8_t) ((freq >> 16) & 0xFF);
|
||||
buf[2] = (uint8_t) ((freq >> 8) & 0xFF);
|
||||
buf[3] = (uint8_t) (freq & 0xFF);
|
||||
buf[0] = (uint8_t)((freq >> 24) & 0xFF);
|
||||
buf[1] = (uint8_t)((freq >> 16) & 0xFF);
|
||||
buf[2] = (uint8_t)((freq >> 8) & 0xFF);
|
||||
buf[3] = (uint8_t)(freq & 0xFF);
|
||||
|
||||
write_opmode_command((uint8_t) RADIO_SET_RFFREQUENCY, buf, 4);
|
||||
}
|
||||
|
@ -389,9 +388,9 @@ void SX126X_LoRaRadio::set_dio3_as_tcxo_ctrl(radio_TCXO_ctrl_voltage_t voltage,
|
|||
uint8_t buf[4];
|
||||
|
||||
buf[0] = voltage & 0x07;
|
||||
buf[1] = (uint8_t) ((timeout >> 16) & 0xFF);
|
||||
buf[2] = (uint8_t) ((timeout >> 8) & 0xFF);
|
||||
buf[3] = (uint8_t) (timeout & 0xFF);
|
||||
buf[1] = (uint8_t)((timeout >> 16) & 0xFF);
|
||||
buf[2] = (uint8_t)((timeout >> 8) & 0xFF);
|
||||
buf[3] = (uint8_t)(timeout & 0xFF);
|
||||
|
||||
write_opmode_command(RADIO_SET_TCXOMODE, buf, 4);
|
||||
}
|
||||
|
@ -484,7 +483,7 @@ uint32_t SX126X_LoRaRadio::time_on_air(radio_modems_t modem, uint8_t pkt_len)
|
|||
float tmp = ceil((8 * pkt_len - 4 * _mod_params.params.lora.spreading_factor
|
||||
+ 28 + 16 * _packet_params.params.lora.crc_mode
|
||||
- ((_packet_params.params.lora.header_type == LORA_PACKET_FIXED_LENGTH) ? 20 : 0))
|
||||
/ (float) (4 * (_mod_params.params.lora.spreading_factor
|
||||
/ (float)(4 * (_mod_params.params.lora.spreading_factor
|
||||
- ((_mod_params.params.lora.low_datarate_optimization > 0) ? 2 : 0))))
|
||||
* ((_mod_params.params.lora.coding_rate % 4) + 4);
|
||||
float n_payload = 8 + ((tmp > 0) ? tmp : 0);
|
||||
|
@ -709,19 +708,19 @@ uint8_t SX126X_LoRaRadio::get_frequency_support(void)
|
|||
val = _freq_select.read_u16();
|
||||
|
||||
if (val < 100) {
|
||||
return ( MATCHING_FREQ_915);
|
||||
return (MATCHING_FREQ_915);
|
||||
} else if (val <= 0x3000) {
|
||||
return ( MATCHING_FREQ_780);
|
||||
return (MATCHING_FREQ_780);
|
||||
} else if (val <= 0x4900) { // 0x4724
|
||||
return ( MATCHING_FREQ_490);
|
||||
return (MATCHING_FREQ_490);
|
||||
} else if (val <= 1) {
|
||||
return ( MATCHING_FREQ_434);
|
||||
return (MATCHING_FREQ_434);
|
||||
} else if (val <= 1) {
|
||||
return ( MATCHING_FREQ_280);
|
||||
return (MATCHING_FREQ_280);
|
||||
} else if (val <= 0xF000) {
|
||||
return ( MATCHING_FREQ_169);
|
||||
return (MATCHING_FREQ_169);
|
||||
} else {
|
||||
return ( MATCHING_FREQ_868);
|
||||
return (MATCHING_FREQ_868);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -900,7 +899,7 @@ void SX126X_LoRaRadio::set_rx_config(radio_modems_t modem,
|
|||
write_to_register(REG_LR_SYNCWORDBASEADDRESS, (uint8_t *) sync_word, 8);
|
||||
set_whitening_seed(0x01FF);
|
||||
|
||||
_rx_timeout = (uint32_t) (symb_timeout
|
||||
_rx_timeout = (uint32_t)(symb_timeout
|
||||
* ((1.0 / (float) datarate) * 8.0) * 1000);
|
||||
|
||||
break;
|
||||
|
@ -961,14 +960,14 @@ void SX126X_LoRaRadio::configure_dio_irq(uint16_t irq_mask, uint16_t dio1_mask,
|
|||
{
|
||||
uint8_t buf[8];
|
||||
|
||||
buf[0] = (uint8_t) ((irq_mask >> 8) & 0x00FF);
|
||||
buf[1] = (uint8_t) (irq_mask & 0x00FF);
|
||||
buf[2] = (uint8_t) ((dio1_mask >> 8) & 0x00FF);
|
||||
buf[3] = (uint8_t) (dio1_mask & 0x00FF);
|
||||
buf[4] = (uint8_t) ((dio2_mask >> 8) & 0x00FF);
|
||||
buf[5] = (uint8_t) (dio2_mask & 0x00FF);
|
||||
buf[6] = (uint8_t) ((dio3_mask >> 8) & 0x00FF);
|
||||
buf[7] = (uint8_t) (dio3_mask & 0x00FF);
|
||||
buf[0] = (uint8_t)((irq_mask >> 8) & 0x00FF);
|
||||
buf[1] = (uint8_t)(irq_mask & 0x00FF);
|
||||
buf[2] = (uint8_t)((dio1_mask >> 8) & 0x00FF);
|
||||
buf[3] = (uint8_t)(dio1_mask & 0x00FF);
|
||||
buf[4] = (uint8_t)((dio2_mask >> 8) & 0x00FF);
|
||||
buf[5] = (uint8_t)(dio2_mask & 0x00FF);
|
||||
buf[6] = (uint8_t)((dio3_mask >> 8) & 0x00FF);
|
||||
buf[7] = (uint8_t)(dio3_mask & 0x00FF);
|
||||
|
||||
write_opmode_command((uint8_t) RADIO_CFG_DIOIRQ, buf, 8);
|
||||
}
|
||||
|
@ -979,7 +978,7 @@ void SX126X_LoRaRadio::send(uint8_t *buffer, uint8_t size)
|
|||
configure_dio_irq(IRQ_TX_DONE | IRQ_RX_TX_TIMEOUT,
|
||||
IRQ_TX_DONE | IRQ_RX_TX_TIMEOUT,
|
||||
IRQ_RADIO_NONE,
|
||||
IRQ_RADIO_NONE );
|
||||
IRQ_RADIO_NONE);
|
||||
|
||||
set_modulation_params(&_mod_params);
|
||||
set_packet_params(&_packet_params);
|
||||
|
@ -991,9 +990,9 @@ void SX126X_LoRaRadio::send(uint8_t *buffer, uint8_t size)
|
|||
// 15.625 us. Check data-sheet 13.1.4 SetTX() section.
|
||||
uint32_t timeout_scalled = ceil((_tx_timeout * 1000) / 15.625);
|
||||
|
||||
buf[0] = (uint8_t) ((timeout_scalled >> 16) & 0xFF);
|
||||
buf[1] = (uint8_t) ((timeout_scalled >> 8) & 0xFF);
|
||||
buf[2] = (uint8_t) (timeout_scalled & 0xFF);
|
||||
buf[0] = (uint8_t)((timeout_scalled >> 16) & 0xFF);
|
||||
buf[1] = (uint8_t)((timeout_scalled >> 8) & 0xFF);
|
||||
buf[2] = (uint8_t)(timeout_scalled & 0xFF);
|
||||
|
||||
write_opmode_command(RADIO_SET_TX, buf, 3);
|
||||
|
||||
|
@ -1017,8 +1016,8 @@ void SX126X_LoRaRadio::receive(void)
|
|||
}
|
||||
|
||||
if (_reception_mode != RECEPTION_MODE_OTHER) {
|
||||
configure_dio_irq(IRQ_RX_DONE | IRQ_RX_TX_TIMEOUT | IRQ_CRC_ERROR ,
|
||||
IRQ_RX_DONE | IRQ_RX_TX_TIMEOUT | IRQ_CRC_ERROR ,
|
||||
configure_dio_irq(IRQ_RX_DONE | IRQ_RX_TX_TIMEOUT | IRQ_CRC_ERROR,
|
||||
IRQ_RX_DONE | IRQ_RX_TX_TIMEOUT | IRQ_CRC_ERROR,
|
||||
IRQ_RADIO_NONE,
|
||||
IRQ_RADIO_NONE);
|
||||
set_modulation_params(&_mod_params);
|
||||
|
@ -1031,9 +1030,9 @@ void SX126X_LoRaRadio::receive(void)
|
|||
write_to_register(REG_RX_GAIN, 0x96);
|
||||
#endif
|
||||
|
||||
buf[0] = (uint8_t) ((_rx_timeout >> 16) & 0xFF);
|
||||
buf[1] = (uint8_t) ((_rx_timeout >> 8) & 0xFF);
|
||||
buf[2] = (uint8_t) (_rx_timeout & 0xFF);
|
||||
buf[0] = (uint8_t)((_rx_timeout >> 16) & 0xFF);
|
||||
buf[1] = (uint8_t)((_rx_timeout >> 8) & 0xFF);
|
||||
buf[2] = (uint8_t)(_rx_timeout & 0xFF);
|
||||
|
||||
write_opmode_command(RADIO_SET_RX, buf, 3);
|
||||
|
||||
|
@ -1049,7 +1048,7 @@ void SX126X_LoRaRadio::set_tx_power(int8_t power)
|
|||
if (power >= 14) {
|
||||
set_pa_config(0x04, 0x00, 0x01, 0x01);
|
||||
power = 14;
|
||||
} else if (power < 14){
|
||||
} else if (power < 14) {
|
||||
set_pa_config(0x01, 0x00, 0x01, 0x01);
|
||||
}
|
||||
|
||||
|
@ -1102,13 +1101,13 @@ void SX126X_LoRaRadio::set_modulation_params(modulation_params_t *params)
|
|||
switch (params->modem_type) {
|
||||
case MODEM_FSK:
|
||||
n = 8;
|
||||
temp = (uint32_t) (32 * ((float) XTAL_FREQ / (float) params->params.gfsk.bit_rate));
|
||||
temp = (uint32_t)(32 * ((float) XTAL_FREQ / (float) params->params.gfsk.bit_rate));
|
||||
buf[0] = (temp >> 16) & 0xFF;
|
||||
buf[1] = (temp >> 8) & 0xFF;
|
||||
buf[2] = temp & 0xFF;
|
||||
buf[3] = params->params.gfsk.modulation_shaping;
|
||||
buf[4] = params->params.gfsk.bandwidth;
|
||||
temp = (uint32_t) ((float) params->params.gfsk.fdev / (float) FREQ_STEP);
|
||||
temp = (uint32_t)((float) params->params.gfsk.fdev / (float) FREQ_STEP);
|
||||
buf[5] = (temp >> 16) & 0xFF;
|
||||
buf[6] = (temp >> 8) & 0xFF;
|
||||
buf[7] = (temp & 0xFF);
|
||||
|
@ -1131,7 +1130,7 @@ void SX126X_LoRaRadio::set_modulation_params(modulation_params_t *params)
|
|||
}
|
||||
|
||||
void SX126X_LoRaRadio::set_pa_config(uint8_t pa_DC, uint8_t hp_max,
|
||||
uint8_t device_type, uint8_t pa_LUT )
|
||||
uint8_t device_type, uint8_t pa_LUT)
|
||||
{
|
||||
uint8_t buf[4];
|
||||
|
||||
|
@ -1146,8 +1145,8 @@ void SX126X_LoRaRadio::set_crc_seed(uint16_t seed)
|
|||
{
|
||||
if (_active_modem == MODEM_FSK) {
|
||||
uint8_t buf[2];
|
||||
buf[0] = (uint8_t) ((seed >> 8) & 0xFF);
|
||||
buf[1] = (uint8_t) (seed & 0xFF);
|
||||
buf[0] = (uint8_t)((seed >> 8) & 0xFF);
|
||||
buf[1] = (uint8_t)(seed & 0xFF);
|
||||
write_to_register(REG_LR_CRCSEEDBASEADDR, buf, 2);
|
||||
}
|
||||
}
|
||||
|
@ -1156,8 +1155,8 @@ void SX126X_LoRaRadio::set_crc_polynomial(uint16_t polynomial)
|
|||
{
|
||||
if (_active_modem == MODEM_FSK) {
|
||||
uint8_t buf[2];
|
||||
buf[0] = (uint8_t) ((polynomial >> 8) & 0xFF);
|
||||
buf[1] = (uint8_t) (polynomial & 0xFF);
|
||||
buf[0] = (uint8_t)((polynomial >> 8) & 0xFF);
|
||||
buf[1] = (uint8_t)(polynomial & 0xFF);
|
||||
write_to_register(REG_LR_CRCPOLYBASEADDR, buf, 2);
|
||||
}
|
||||
}
|
||||
|
@ -1235,9 +1234,9 @@ void SX126X_LoRaRadio::set_cad_params(lora_cad_symbols_t nb_symbols,
|
|||
buf[1] = det_peak;
|
||||
buf[2] = det_min;
|
||||
buf[3] = (uint8_t) exit_mode;
|
||||
buf[4] = (uint8_t) ((timeout >> 16) & 0xFF);
|
||||
buf[5] = (uint8_t) ((timeout >> 8) & 0xFF);
|
||||
buf[6] = (uint8_t) (timeout & 0xFF);
|
||||
buf[4] = (uint8_t)((timeout >> 16) & 0xFF);
|
||||
buf[5] = (uint8_t)((timeout >> 8) & 0xFF);
|
||||
buf[6] = (uint8_t)(timeout & 0xFF);
|
||||
write_opmode_command((uint8_t) RADIO_SET_CADPARAMS, buf, 7);
|
||||
|
||||
_operation_mode = MODE_CAD;
|
||||
|
|
|
@ -122,7 +122,7 @@ public:
|
|||
* @param rx_continuous Sets the reception in continuous mode
|
||||
* [false: single mode, true: continuous mode]
|
||||
*/
|
||||
virtual void set_rx_config (radio_modems_t modem, uint32_t bandwidth,
|
||||
virtual void set_rx_config(radio_modems_t modem, uint32_t bandwidth,
|
||||
uint32_t datarate, uint8_t coderate,
|
||||
uint32_t bandwidth_afc, uint16_t preamble_len,
|
||||
uint16_t symb_timeout, bool fix_len,
|
||||
|
@ -374,8 +374,8 @@ private:
|
|||
void set_crc_seed(uint16_t seed);
|
||||
void set_crc_polynomial(uint16_t polynomial);
|
||||
void set_whitening_seed(uint16_t seed);
|
||||
void set_pa_config( uint8_t pa_DC, uint8_t hp_max, uint8_t device_type,
|
||||
uint8_t pa_LUT );
|
||||
void set_pa_config(uint8_t pa_DC, uint8_t hp_max, uint8_t device_type,
|
||||
uint8_t pa_LUT);
|
||||
void set_tx_power(int8_t power);
|
||||
void calibrate_image(uint32_t freq);
|
||||
void configure_dio_irq(uint16_t irq_mask, uint16_t dio1_mask,
|
||||
|
|
|
@ -388,7 +388,7 @@ typedef enum {
|
|||
/*!
|
||||
* \brief Represents the CRC length
|
||||
*/
|
||||
typedef enum radio_crc_types_e{
|
||||
typedef enum radio_crc_types_e {
|
||||
RADIO_CRC_OFF = 0x01, //!< No CRC in use
|
||||
RADIO_CRC_1_BYTES = 0x00,
|
||||
RADIO_CRC_2_BYTES = 0x02,
|
||||
|
|
|
@ -63,8 +63,7 @@ enum RadioVariant {
|
|||
/*!
|
||||
* FSK bandwidth definition
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
typedef struct {
|
||||
uint32_t bandwidth;
|
||||
uint8_t register_value;
|
||||
} fsk_bw_t;
|
||||
|
@ -72,8 +71,7 @@ typedef struct
|
|||
/*!
|
||||
* Radio registers definition
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
typedef struct {
|
||||
modem_type modem;
|
||||
uint8_t addr;
|
||||
uint8_t value;
|
||||
|
@ -105,24 +103,23 @@ typedef struct
|
|||
{ MODEM_LORA, REG_LR_PAYLOADMAXLENGTH, 0x40 },\
|
||||
}
|
||||
|
||||
const fsk_bw_t fsk_bandwidths[] =
|
||||
{
|
||||
{ 2600 , 0x17 },
|
||||
{ 3100 , 0x0F },
|
||||
{ 3900 , 0x07 },
|
||||
{ 5200 , 0x16 },
|
||||
{ 6300 , 0x0E },
|
||||
{ 7800 , 0x06 },
|
||||
{ 10400 , 0x15 },
|
||||
{ 12500 , 0x0D },
|
||||
{ 15600 , 0x05 },
|
||||
{ 20800 , 0x14 },
|
||||
{ 25000 , 0x0C },
|
||||
{ 31300 , 0x04 },
|
||||
{ 41700 , 0x13 },
|
||||
{ 50000 , 0x0B },
|
||||
{ 62500 , 0x03 },
|
||||
{ 83333 , 0x12 },
|
||||
const fsk_bw_t fsk_bandwidths[] = {
|
||||
{ 2600, 0x17 },
|
||||
{ 3100, 0x0F },
|
||||
{ 3900, 0x07 },
|
||||
{ 5200, 0x16 },
|
||||
{ 6300, 0x0E },
|
||||
{ 7800, 0x06 },
|
||||
{ 10400, 0x15 },
|
||||
{ 12500, 0x0D },
|
||||
{ 15600, 0x05 },
|
||||
{ 20800, 0x14 },
|
||||
{ 25000, 0x0C },
|
||||
{ 31300, 0x04 },
|
||||
{ 41700, 0x13 },
|
||||
{ 50000, 0x0B },
|
||||
{ 62500, 0x03 },
|
||||
{ 83333, 0x12 },
|
||||
{ 100000, 0x0A },
|
||||
{ 125000, 0x02 },
|
||||
{ 166700, 0x11 },
|
||||
|
@ -289,10 +286,10 @@ bool SX1272_LoRaRadio::check_rf_frequency(uint32_t frequency)
|
|||
void SX1272_LoRaRadio::set_channel(uint32_t freq)
|
||||
{
|
||||
_rf_settings.channel = freq;
|
||||
freq = (uint32_t) ((float) freq / (float) FREQ_STEP);
|
||||
write_to_register(REG_FRFMSB, (uint8_t) ((freq >> 16) & 0xFF));
|
||||
write_to_register(REG_FRFMID, (uint8_t) ((freq >> 8) & 0xFF));
|
||||
write_to_register(REG_FRFLSB, (uint8_t) (freq & 0xFF));
|
||||
freq = (uint32_t)((float) freq / (float) FREQ_STEP);
|
||||
write_to_register(REG_FRFMSB, (uint8_t)((freq >> 16) & 0xFF));
|
||||
write_to_register(REG_FRFMID, (uint8_t)((freq >> 8) & 0xFF));
|
||||
write_to_register(REG_FRFLSB, (uint8_t)(freq & 0xFF));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -339,21 +336,20 @@ void SX1272_LoRaRadio::set_operation_mode(uint8_t mode)
|
|||
*/
|
||||
void SX1272_LoRaRadio::set_modem(uint8_t modem)
|
||||
{
|
||||
if ((read_register(REG_OPMODE) & RFLR_OPMODE_LONGRANGEMODE_ON) != 0 ) {
|
||||
if ((read_register(REG_OPMODE) & RFLR_OPMODE_LONGRANGEMODE_ON) != 0) {
|
||||
_rf_settings.modem = MODEM_LORA;
|
||||
} else {
|
||||
_rf_settings.modem = MODEM_FSK;
|
||||
}
|
||||
|
||||
if(_rf_settings.modem == modem ) {
|
||||
if (_rf_settings.modem == modem) {
|
||||
// if the modem is already set
|
||||
return;
|
||||
}
|
||||
|
||||
_rf_settings.modem = modem;
|
||||
|
||||
switch(_rf_settings.modem)
|
||||
{
|
||||
switch (_rf_settings.modem) {
|
||||
default:
|
||||
case MODEM_FSK:
|
||||
// before changing modem mode, put the module to sleep
|
||||
|
@ -421,15 +417,15 @@ void SX1272_LoRaRadio::set_rx_config(radio_modems_t modem, uint32_t bandwidth,
|
|||
_rf_settings.fsk.preamble_len = preamble_len;
|
||||
_rf_settings.fsk.rx_single_timeout = (symb_timeout + 1) / 2; // dividing by 2 as our detector size is 2 symbols (16 bytes)
|
||||
|
||||
datarate = (uint16_t) ((float) XTAL_FREQ / (float) datarate);
|
||||
write_to_register(REG_BITRATEMSB, (uint8_t) (datarate >> 8));
|
||||
write_to_register(REG_BITRATELSB, (uint8_t) (datarate & 0xFF));
|
||||
datarate = (uint16_t)((float) XTAL_FREQ / (float) datarate);
|
||||
write_to_register(REG_BITRATEMSB, (uint8_t)(datarate >> 8));
|
||||
write_to_register(REG_BITRATELSB, (uint8_t)(datarate & 0xFF));
|
||||
|
||||
write_to_register(REG_RXBW, get_fsk_bw_reg_val(bandwidth));
|
||||
write_to_register(REG_AFCBW, get_fsk_bw_reg_val(bandwidth_afc));
|
||||
|
||||
write_to_register(REG_PREAMBLEMSB, (uint8_t) ((preamble_len >> 8) & 0xFF));
|
||||
write_to_register(REG_PREAMBLELSB, (uint8_t) (preamble_len & 0xFF));
|
||||
write_to_register(REG_PREAMBLEMSB, (uint8_t)((preamble_len >> 8) & 0xFF));
|
||||
write_to_register(REG_PREAMBLELSB, (uint8_t)(preamble_len & 0xFF));
|
||||
|
||||
if (fix_len == 1) {
|
||||
write_to_register(REG_PAYLOADLENGTH, payload_len);
|
||||
|
@ -489,29 +485,29 @@ void SX1272_LoRaRadio::set_rx_config(radio_modems_t modem, uint32_t bandwidth,
|
|||
| ((symb_timeout >> 8)
|
||||
& ~RFLR_MODEMCONFIG2_SYMBTIMEOUTMSB_MASK));
|
||||
|
||||
write_to_register(REG_LR_SYMBTIMEOUTLSB, (uint8_t) (symb_timeout & 0xFF));
|
||||
write_to_register(REG_LR_SYMBTIMEOUTLSB, (uint8_t)(symb_timeout & 0xFF));
|
||||
|
||||
write_to_register(REG_LR_PREAMBLEMSB, (uint8_t) ((preamble_len >> 8) & 0xFF));
|
||||
write_to_register(REG_LR_PREAMBLELSB, (uint8_t) (preamble_len & 0xFF));
|
||||
write_to_register(REG_LR_PREAMBLEMSB, (uint8_t)((preamble_len >> 8) & 0xFF));
|
||||
write_to_register(REG_LR_PREAMBLELSB, (uint8_t)(preamble_len & 0xFF));
|
||||
|
||||
if (fix_len == 1) {
|
||||
write_to_register(REG_LR_PAYLOADLENGTH, payload_len);
|
||||
}
|
||||
|
||||
if (_rf_settings.lora.freq_hop_on == true) {
|
||||
write_to_register( REG_LR_PLLHOP, (read_register(REG_LR_PLLHOP) & RFLR_PLLHOP_FASTHOP_MASK)
|
||||
write_to_register(REG_LR_PLLHOP, (read_register(REG_LR_PLLHOP) & RFLR_PLLHOP_FASTHOP_MASK)
|
||||
| RFLR_PLLHOP_FASTHOP_ON);
|
||||
write_to_register( REG_LR_HOPPERIOD, _rf_settings.lora.hop_period);
|
||||
write_to_register(REG_LR_HOPPERIOD, _rf_settings.lora.hop_period);
|
||||
}
|
||||
|
||||
if (datarate == 6) {
|
||||
write_to_register( REG_LR_DETECTOPTIMIZE, (read_register(REG_LR_DETECTOPTIMIZE) & RFLR_DETECTIONOPTIMIZE_MASK)
|
||||
write_to_register(REG_LR_DETECTOPTIMIZE, (read_register(REG_LR_DETECTOPTIMIZE) & RFLR_DETECTIONOPTIMIZE_MASK)
|
||||
| RFLR_DETECTIONOPTIMIZE_SF6);
|
||||
write_to_register( REG_LR_DETECTIONTHRESHOLD, RFLR_DETECTIONTHRESH_SF6);
|
||||
write_to_register(REG_LR_DETECTIONTHRESHOLD, RFLR_DETECTIONTHRESH_SF6);
|
||||
} else {
|
||||
write_to_register(REG_LR_DETECTOPTIMIZE, (read_register(REG_LR_DETECTOPTIMIZE) & RFLR_DETECTIONOPTIMIZE_MASK)
|
||||
| RFLR_DETECTIONOPTIMIZE_SF7_TO_SF12);
|
||||
write_to_register( REG_LR_DETECTIONTHRESHOLD, RFLR_DETECTIONTHRESH_SF7_TO_SF12);
|
||||
write_to_register(REG_LR_DETECTIONTHRESHOLD, RFLR_DETECTIONTHRESH_SF7_TO_SF12);
|
||||
}
|
||||
|
||||
break;
|
||||
|
@ -550,16 +546,16 @@ void SX1272_LoRaRadio::set_tx_config(radio_modems_t modem, int8_t power,
|
|||
_rf_settings.fsk.iq_inverted = iq_inverted;
|
||||
_rf_settings.fsk.tx_timeout = timeout;
|
||||
|
||||
fdev = (uint16_t) ((float) fdev / (float) FREQ_STEP);
|
||||
write_to_register( REG_FDEVMSB, (uint8_t) (fdev >> 8));
|
||||
write_to_register( REG_FDEVLSB, (uint8_t) (fdev & 0xFF));
|
||||
fdev = (uint16_t)((float) fdev / (float) FREQ_STEP);
|
||||
write_to_register(REG_FDEVMSB, (uint8_t)(fdev >> 8));
|
||||
write_to_register(REG_FDEVLSB, (uint8_t)(fdev & 0xFF));
|
||||
|
||||
datarate = (uint16_t) ((float) XTAL_FREQ / (float) datarate);
|
||||
write_to_register( REG_BITRATEMSB, (uint8_t) (datarate >> 8));
|
||||
write_to_register( REG_BITRATELSB, (uint8_t) (datarate & 0xFF));
|
||||
datarate = (uint16_t)((float) XTAL_FREQ / (float) datarate);
|
||||
write_to_register(REG_BITRATEMSB, (uint8_t)(datarate >> 8));
|
||||
write_to_register(REG_BITRATELSB, (uint8_t)(datarate & 0xFF));
|
||||
|
||||
write_to_register( REG_PREAMBLEMSB, (preamble_len >> 8) & 0x00FF);
|
||||
write_to_register( REG_PREAMBLELSB, preamble_len & 0xFF);
|
||||
write_to_register(REG_PREAMBLEMSB, (preamble_len >> 8) & 0x00FF);
|
||||
write_to_register(REG_PREAMBLELSB, preamble_len & 0xFF);
|
||||
|
||||
|
||||
write_to_register(REG_PACKETCONFIG1, (read_register(REG_PACKETCONFIG1)
|
||||
|
@ -622,15 +618,15 @@ void SX1272_LoRaRadio::set_tx_config(radio_modems_t modem, int8_t power,
|
|||
(read_register(REG_LR_MODEMCONFIG2) &
|
||||
RFLR_MODEMCONFIG2_SF_MASK) | (datarate << 4));
|
||||
|
||||
write_to_register( REG_LR_PREAMBLEMSB, (preamble_len >> 8) & 0x00FF);
|
||||
write_to_register( REG_LR_PREAMBLELSB, preamble_len & 0xFF);
|
||||
write_to_register(REG_LR_PREAMBLEMSB, (preamble_len >> 8) & 0x00FF);
|
||||
write_to_register(REG_LR_PREAMBLELSB, preamble_len & 0xFF);
|
||||
|
||||
if (datarate == 6) {
|
||||
write_to_register(REG_LR_DETECTOPTIMIZE,
|
||||
(read_register(REG_LR_DETECTOPTIMIZE) &
|
||||
RFLR_DETECTIONOPTIMIZE_MASK) |
|
||||
RFLR_DETECTIONOPTIMIZE_SF6);
|
||||
write_to_register( REG_LR_DETECTIONTHRESHOLD,
|
||||
write_to_register(REG_LR_DETECTIONTHRESHOLD,
|
||||
RFLR_DETECTIONTHRESH_SF6);
|
||||
} else {
|
||||
write_to_register(REG_LR_DETECTOPTIMIZE,
|
||||
|
@ -658,11 +654,11 @@ uint32_t SX1272_LoRaRadio::time_on_air(radio_modems_t modem, uint8_t pkt_len)
|
|||
switch (modem) {
|
||||
case MODEM_FSK: {
|
||||
airtime = rint((8 * (_rf_settings.fsk.preamble_len
|
||||
+ ((read_register( REG_SYNCCONFIG)
|
||||
+ ((read_register(REG_SYNCCONFIG)
|
||||
& ~RF_SYNCCONFIG_SYNCSIZE_MASK) + 1)
|
||||
+ ((_rf_settings.fsk.fix_len == 0x01) ?
|
||||
0.0f : 1.0f)
|
||||
+ (((read_register( REG_PACKETCONFIG1)
|
||||
+ (((read_register(REG_PACKETCONFIG1)
|
||||
& ~RF_PACKETCONFIG1_ADDRSFILTERING_MASK)
|
||||
!= 0x00) ? 1.0f : 0) + pkt_len
|
||||
+ ((_rf_settings.fsk.crc_on == 0x01) ?
|
||||
|
@ -693,7 +689,7 @@ uint32_t SX1272_LoRaRadio::time_on_air(radio_modems_t modem, uint8_t pkt_len)
|
|||
float tmp = ceil((8 * pkt_len - 4 * _rf_settings.lora.datarate + 28
|
||||
+ 16 * _rf_settings.lora.crc_on -
|
||||
(_rf_settings.lora.fix_len ? 20 : 0))
|
||||
/ (float) (4 * (_rf_settings.lora.datarate -
|
||||
/ (float)(4 * (_rf_settings.lora.datarate -
|
||||
((_rf_settings.lora.low_datarate_optimize
|
||||
> 0) ? 2 : 0)))) *
|
||||
(_rf_settings.lora.coderate + 4);
|
||||
|
@ -760,7 +756,7 @@ void SX1272_LoRaRadio::send(uint8_t *buffer, uint8_t size)
|
|||
RFLR_INVERTIQ_TX_MASK &
|
||||
RFLR_INVERTIQ_RX_MASK) |
|
||||
RFLR_INVERTIQ_RX_OFF | RFLR_INVERTIQ_TX_OFF));
|
||||
write_to_register( REG_LR_INVERTIQ2, RFLR_INVERTIQ2_OFF);
|
||||
write_to_register(REG_LR_INVERTIQ2, RFLR_INVERTIQ2_OFF);
|
||||
}
|
||||
|
||||
_rf_settings.lora_packet_handler.size = size;
|
||||
|
@ -807,7 +803,7 @@ void SX1272_LoRaRadio::transmit(uint32_t timeout)
|
|||
// DIO3=FifoEmpty
|
||||
// DIO4=LowBat
|
||||
// DIO5=ModeReady
|
||||
write_to_register(REG_DIOMAPPING1,(read_register(REG_DIOMAPPING1) &
|
||||
write_to_register(REG_DIOMAPPING1, (read_register(REG_DIOMAPPING1) &
|
||||
RF_DIOMAPPING1_DIO0_MASK &
|
||||
RF_DIOMAPPING1_DIO1_MASK &
|
||||
RF_DIOMAPPING1_DIO2_MASK) |
|
||||
|
@ -850,7 +846,7 @@ void SX1272_LoRaRadio::transmit(uint32_t timeout)
|
|||
RFLR_IRQFLAGS_CADDETECTED);
|
||||
|
||||
// DIO0=tx_done
|
||||
write_to_register(REG_DIOMAPPING1,(read_register(REG_DIOMAPPING1) &
|
||||
write_to_register(REG_DIOMAPPING1, (read_register(REG_DIOMAPPING1) &
|
||||
RFLR_DIOMAPPING1_DIO0_MASK) |
|
||||
RFLR_DIOMAPPING1_DIO0_01);
|
||||
}
|
||||
|
@ -934,7 +930,7 @@ void SX1272_LoRaRadio::receive(void)
|
|||
RFLR_INVERTIQ_RX_MASK) |
|
||||
RFLR_INVERTIQ_RX_OFF |
|
||||
RFLR_INVERTIQ_TX_OFF));
|
||||
write_to_register( REG_LR_INVERTIQ2, RFLR_INVERTIQ2_OFF);
|
||||
write_to_register(REG_LR_INVERTIQ2, RFLR_INVERTIQ2_OFF);
|
||||
}
|
||||
|
||||
if (_rf_settings.lora.freq_hop_on == true) {
|
||||
|
@ -1118,10 +1114,10 @@ void SX1272_LoRaRadio::set_tx_continuous_wave(uint32_t freq, int8_t power,
|
|||
set_tx_config(MODEM_FSK, power, 0, 0, 4800, 0, 5, false, false, 0, 0, 0, time * 1000);
|
||||
reg_val = read_register(REG_PACKETCONFIG2);
|
||||
|
||||
write_to_register( REG_PACKETCONFIG2, (reg_val & RF_PACKETCONFIG2_DATAMODE_MASK ) );
|
||||
write_to_register(REG_PACKETCONFIG2, (reg_val & RF_PACKETCONFIG2_DATAMODE_MASK));
|
||||
// Disable radio interrupts
|
||||
write_to_register( REG_DIOMAPPING1, RF_DIOMAPPING1_DIO0_11 | RF_DIOMAPPING1_DIO1_11 );
|
||||
write_to_register( REG_DIOMAPPING2, RF_DIOMAPPING2_DIO4_10 | RF_DIOMAPPING2_DIO5_10 );
|
||||
write_to_register(REG_DIOMAPPING1, RF_DIOMAPPING1_DIO0_11 | RF_DIOMAPPING1_DIO1_11);
|
||||
write_to_register(REG_DIOMAPPING2, RF_DIOMAPPING2_DIO4_10 | RF_DIOMAPPING2_DIO5_10);
|
||||
|
||||
_rf_settings.state = RF_TX_RUNNING;
|
||||
tx_timeout_timer.attach_us(callback(this, &SX1272_LoRaRadio::timeout_irq_isr), time * 1000000);
|
||||
|
@ -1131,7 +1127,7 @@ void SX1272_LoRaRadio::set_tx_continuous_wave(uint32_t freq, int8_t power,
|
|||
/**
|
||||
* Put radio in Standby mode
|
||||
*/
|
||||
void SX1272_LoRaRadio::standby( void )
|
||||
void SX1272_LoRaRadio::standby(void)
|
||||
{
|
||||
tx_timeout_timer.detach();
|
||||
set_operation_mode(RF_OPMODE_STANDBY);
|
||||
|
@ -1356,10 +1352,9 @@ int16_t SX1272_LoRaRadio::get_rssi(radio_modems_t modem)
|
|||
{
|
||||
int16_t rssi = 0;
|
||||
|
||||
switch( modem )
|
||||
{
|
||||
switch (modem) {
|
||||
case MODEM_FSK:
|
||||
rssi = -(read_register(REG_RSSIVALUE) >> 1 );
|
||||
rssi = -(read_register(REG_RSSIVALUE) >> 1);
|
||||
break;
|
||||
case MODEM_LORA:
|
||||
rssi = RSSI_OFFSET + read_register(REG_LR_RSSIVALUE);
|
||||
|
@ -1388,12 +1383,10 @@ void SX1272_LoRaRadio::set_rf_tx_power(int8_t power)
|
|||
pa_dac = read_register(REG_PADAC);
|
||||
|
||||
#if defined ( TARGET_MOTE_L152RC )
|
||||
if(power > 19) {
|
||||
if (power > 19) {
|
||||
pa_config = (pa_config & RF_PACONFIG_PASELECT_MASK) | RF_PACONFIG_PASELECT_RFO;
|
||||
pa_config = (pa_config & RFLR_PACONFIG_OUTPUTPOWER_MASK) | RFO_table[power - 20];
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
pa_config = (pa_config & RF_PACONFIG_PASELECT_MASK) | RF_PACONFIG_PASELECT_PABOOST;
|
||||
pa_config = (pa_config & RFLR_PACONFIG_OUTPUTPOWER_MASK) | pa_boost_table[power];
|
||||
}
|
||||
|
@ -1415,7 +1408,7 @@ void SX1272_LoRaRadio::set_rf_tx_power(int8_t power)
|
|||
power = 20;
|
||||
}
|
||||
pa_config = (pa_config & RFLR_PACONFIG_OUTPUTPOWER_MASK)
|
||||
| (uint8_t) ((uint16_t) (power - 5) & 0x0F);
|
||||
| (uint8_t)((uint16_t)(power - 5) & 0x0F);
|
||||
} else {
|
||||
if (power < 2) {
|
||||
power = 2;
|
||||
|
@ -1424,7 +1417,7 @@ void SX1272_LoRaRadio::set_rf_tx_power(int8_t power)
|
|||
power = 17;
|
||||
}
|
||||
pa_config = (pa_config & RFLR_PACONFIG_OUTPUTPOWER_MASK)
|
||||
| (uint8_t) ((uint16_t) (power - 2) & 0x0F);
|
||||
| (uint8_t)((uint16_t)(power - 2) & 0x0F);
|
||||
}
|
||||
} else {
|
||||
if (power < -1) {
|
||||
|
@ -1434,7 +1427,7 @@ void SX1272_LoRaRadio::set_rf_tx_power(int8_t power)
|
|||
power = 14;
|
||||
}
|
||||
pa_config = (pa_config & RFLR_PACONFIG_OUTPUTPOWER_MASK)
|
||||
| (uint8_t) ((uint16_t) (power + 1) & 0x0F);
|
||||
| (uint8_t)((uint16_t)(power + 1) & 0x0F);
|
||||
}
|
||||
#endif
|
||||
write_to_register(REG_PACONFIG, pa_config);
|
||||
|
@ -1457,7 +1450,7 @@ void SX1272_LoRaRadio::setup_registers()
|
|||
*/
|
||||
void SX1272_LoRaRadio::set_sx1272_variant_type()
|
||||
{
|
||||
if (_rf_ctrls.ant_switch != NC){
|
||||
if (_rf_ctrls.ant_switch != NC) {
|
||||
_ant_switch.input();
|
||||
ThisThread::sleep_for(1);
|
||||
if (_ant_switch == 1) {
|
||||
|
@ -1501,7 +1494,7 @@ void SX1272_LoRaRadio::set_antenna_switch(uint8_t mode)
|
|||
// pins are connected
|
||||
_txctl = 1;
|
||||
_rxctl = 0;
|
||||
} else if (_rf_ctrls.ant_switch != NC){
|
||||
} else if (_rf_ctrls.ant_switch != NC) {
|
||||
_ant_switch = 1;
|
||||
} else {
|
||||
// None of the control pins are connected.
|
||||
|
@ -1753,7 +1746,7 @@ void SX1272_LoRaRadio::handle_dio0_irq()
|
|||
if ((_rf_settings.fsk_packet_handler.size == 0)
|
||||
&& (_rf_settings.fsk_packet_handler.nb_bytes == 0)) {
|
||||
if (_rf_settings.fsk.fix_len == false) {
|
||||
read_fifo((uint8_t*) &_rf_settings.fsk_packet_handler.size, 1);
|
||||
read_fifo((uint8_t *) &_rf_settings.fsk_packet_handler.size, 1);
|
||||
} else {
|
||||
_rf_settings.fsk_packet_handler.size = read_register(REG_PAYLOADLENGTH);
|
||||
}
|
||||
|
@ -1812,14 +1805,13 @@ void SX1272_LoRaRadio::handle_dio0_irq()
|
|||
}
|
||||
|
||||
_rf_settings.lora_packet_handler.snr_value = read_register(REG_LR_PKTSNRVALUE);
|
||||
if (_rf_settings.lora_packet_handler.snr_value & 0x80) // The SNR sign bit is 1
|
||||
{
|
||||
if (_rf_settings.lora_packet_handler.snr_value & 0x80) { // The SNR sign bit is 1
|
||||
// Invert and divide by 4
|
||||
snr = ((~_rf_settings.lora_packet_handler.snr_value + 1) & 0xFF) >> 2;
|
||||
snr = -snr;
|
||||
} else {
|
||||
// Divide by 4
|
||||
snr =(_rf_settings.lora_packet_handler.snr_value & 0xFF) >> 2;
|
||||
snr = (_rf_settings.lora_packet_handler.snr_value & 0xFF) >> 2;
|
||||
}
|
||||
|
||||
int16_t rssi = read_register(REG_LR_PKTRSSIVALUE);
|
||||
|
@ -1858,7 +1850,7 @@ void SX1272_LoRaRadio::handle_dio0_irq()
|
|||
switch (_rf_settings.modem) {
|
||||
case MODEM_LORA:
|
||||
// Clear Irq
|
||||
write_to_register( REG_LR_IRQFLAGS, RFLR_IRQFLAGS_TXDONE);
|
||||
write_to_register(REG_LR_IRQFLAGS, RFLR_IRQFLAGS_TXDONE);
|
||||
// Intentional fall through
|
||||
case MODEM_FSK:
|
||||
default:
|
||||
|
@ -1878,34 +1870,26 @@ void SX1272_LoRaRadio::handle_dio0_irq()
|
|||
void SX1272_LoRaRadio::handle_dio1_irq()
|
||||
{
|
||||
|
||||
switch(_rf_settings.state )
|
||||
{
|
||||
switch (_rf_settings.state) {
|
||||
case RF_RX_RUNNING:
|
||||
switch(_rf_settings.modem ) {
|
||||
switch (_rf_settings.modem) {
|
||||
case MODEM_FSK:
|
||||
// FifoLevel interrupt
|
||||
// Read received packet size
|
||||
if( ( _rf_settings.fsk_packet_handler.size == 0 ) && ( _rf_settings.fsk_packet_handler.nb_bytes == 0 ) )
|
||||
{
|
||||
if( _rf_settings.fsk.fix_len == false )
|
||||
{
|
||||
read_fifo( ( uint8_t* )&_rf_settings.fsk_packet_handler.size, 1 );
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((_rf_settings.fsk_packet_handler.size == 0) && (_rf_settings.fsk_packet_handler.nb_bytes == 0)) {
|
||||
if (_rf_settings.fsk.fix_len == false) {
|
||||
read_fifo((uint8_t *)&_rf_settings.fsk_packet_handler.size, 1);
|
||||
} else {
|
||||
_rf_settings.fsk_packet_handler.size = read_register(REG_PAYLOADLENGTH);
|
||||
}
|
||||
}
|
||||
|
||||
if( ( _rf_settings.fsk_packet_handler.size - _rf_settings.fsk_packet_handler.nb_bytes ) > _rf_settings.fsk_packet_handler.fifo_thresh )
|
||||
{
|
||||
read_fifo( ( _data_buffer + _rf_settings.fsk_packet_handler.nb_bytes ), _rf_settings.fsk_packet_handler.fifo_thresh );
|
||||
if ((_rf_settings.fsk_packet_handler.size - _rf_settings.fsk_packet_handler.nb_bytes) > _rf_settings.fsk_packet_handler.fifo_thresh) {
|
||||
read_fifo((_data_buffer + _rf_settings.fsk_packet_handler.nb_bytes), _rf_settings.fsk_packet_handler.fifo_thresh);
|
||||
_rf_settings.fsk_packet_handler.nb_bytes += _rf_settings.fsk_packet_handler.fifo_thresh;
|
||||
}
|
||||
else
|
||||
{
|
||||
read_fifo( ( _data_buffer + _rf_settings.fsk_packet_handler.nb_bytes ), _rf_settings.fsk_packet_handler.size - _rf_settings.fsk_packet_handler.nb_bytes );
|
||||
_rf_settings.fsk_packet_handler.nb_bytes += ( _rf_settings.fsk_packet_handler.size - _rf_settings.fsk_packet_handler.nb_bytes );
|
||||
} else {
|
||||
read_fifo((_data_buffer + _rf_settings.fsk_packet_handler.nb_bytes), _rf_settings.fsk_packet_handler.size - _rf_settings.fsk_packet_handler.nb_bytes);
|
||||
_rf_settings.fsk_packet_handler.nb_bytes += (_rf_settings.fsk_packet_handler.size - _rf_settings.fsk_packet_handler.nb_bytes);
|
||||
}
|
||||
break;
|
||||
case MODEM_LORA:
|
||||
|
@ -1920,19 +1904,15 @@ void SX1272_LoRaRadio::handle_dio1_irq()
|
|||
}
|
||||
break;
|
||||
case RF_TX_RUNNING:
|
||||
switch( _rf_settings.modem )
|
||||
{
|
||||
switch (_rf_settings.modem) {
|
||||
case MODEM_FSK:
|
||||
// FifoLevel interrupt
|
||||
if( ( _rf_settings.fsk_packet_handler.size - _rf_settings.fsk_packet_handler.nb_bytes ) > _rf_settings.fsk_packet_handler.chunk_size )
|
||||
{
|
||||
write_fifo(( _data_buffer + _rf_settings.fsk_packet_handler.nb_bytes ), _rf_settings.fsk_packet_handler.chunk_size );
|
||||
if ((_rf_settings.fsk_packet_handler.size - _rf_settings.fsk_packet_handler.nb_bytes) > _rf_settings.fsk_packet_handler.chunk_size) {
|
||||
write_fifo((_data_buffer + _rf_settings.fsk_packet_handler.nb_bytes), _rf_settings.fsk_packet_handler.chunk_size);
|
||||
_rf_settings.fsk_packet_handler.nb_bytes += _rf_settings.fsk_packet_handler.chunk_size;
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
// Write the last chunk of data
|
||||
write_fifo( _data_buffer + _rf_settings.fsk_packet_handler.nb_bytes, _rf_settings.fsk_packet_handler.size - _rf_settings.fsk_packet_handler.nb_bytes );
|
||||
write_fifo(_data_buffer + _rf_settings.fsk_packet_handler.nb_bytes, _rf_settings.fsk_packet_handler.size - _rf_settings.fsk_packet_handler.nb_bytes);
|
||||
_rf_settings.fsk_packet_handler.nb_bytes += _rf_settings.fsk_packet_handler.size - _rf_settings.fsk_packet_handler.nb_bytes;
|
||||
}
|
||||
break;
|
||||
|
@ -1949,11 +1929,9 @@ void SX1272_LoRaRadio::handle_dio1_irq()
|
|||
|
||||
void SX1272_LoRaRadio::handle_dio2_irq(void)
|
||||
{
|
||||
switch(_rf_settings.state )
|
||||
{
|
||||
switch (_rf_settings.state) {
|
||||
case RF_RX_RUNNING:
|
||||
switch( _rf_settings.modem )
|
||||
{
|
||||
switch (_rf_settings.modem) {
|
||||
case MODEM_FSK:
|
||||
_rf_settings.fsk_packet_handler.preamble_detected = 0;
|
||||
_rf_settings.fsk_packet_handler.sync_word_detected = 0;
|
||||
|
@ -1966,11 +1944,11 @@ void SX1272_LoRaRadio::handle_dio2_irq(void)
|
|||
RF_IRQFLAGS1_SYNCADDRESSMATCH |
|
||||
RF_IRQFLAGS1_TIMEOUT);
|
||||
|
||||
write_to_register( REG_IRQFLAGS2, RF_IRQFLAGS2_FIFOOVERRUN);
|
||||
write_to_register(REG_IRQFLAGS2, RF_IRQFLAGS2_FIFOOVERRUN);
|
||||
|
||||
if (_rf_settings.fsk.rx_continuous == true) {
|
||||
// Continuous mode restart Rx chain
|
||||
write_to_register( REG_RXCONFIG,
|
||||
write_to_register(REG_RXCONFIG,
|
||||
read_register(REG_RXCONFIG) |
|
||||
RF_RXCONFIG_RESTARTRXWITHOUTPLLLOCK);
|
||||
} else {
|
||||
|
@ -1984,14 +1962,12 @@ void SX1272_LoRaRadio::handle_dio2_irq(void)
|
|||
|
||||
break;
|
||||
case MODEM_LORA:
|
||||
if( _rf_settings.lora.freq_hop_on == true )
|
||||
{
|
||||
if (_rf_settings.lora.freq_hop_on == true) {
|
||||
// Clear Irq
|
||||
write_to_register( REG_LR_IRQFLAGS, RFLR_IRQFLAGS_FHSSCHANGEDCHANNEL );
|
||||
write_to_register(REG_LR_IRQFLAGS, RFLR_IRQFLAGS_FHSSCHANGEDCHANNEL);
|
||||
|
||||
if( ( _radio_events != NULL ) && (_radio_events->fhss_change_channel ) )
|
||||
{
|
||||
_radio_events->fhss_change_channel((read_register( REG_LR_HOPCHANNEL ) & RFLR_HOPCHANNEL_CHANNEL_MASK ));
|
||||
if ((_radio_events != NULL) && (_radio_events->fhss_change_channel)) {
|
||||
_radio_events->fhss_change_channel((read_register(REG_LR_HOPCHANNEL) & RFLR_HOPCHANNEL_CHANNEL_MASK));
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -2000,19 +1976,16 @@ void SX1272_LoRaRadio::handle_dio2_irq(void)
|
|||
}
|
||||
break;
|
||||
case RF_TX_RUNNING:
|
||||
switch( _rf_settings.modem )
|
||||
{
|
||||
switch (_rf_settings.modem) {
|
||||
case MODEM_FSK:
|
||||
break;
|
||||
case MODEM_LORA:
|
||||
if( _rf_settings.lora.freq_hop_on == true )
|
||||
{
|
||||
if (_rf_settings.lora.freq_hop_on == true) {
|
||||
// Clear Irq
|
||||
write_to_register( REG_LR_IRQFLAGS, RFLR_IRQFLAGS_FHSSCHANGEDCHANNEL );
|
||||
write_to_register(REG_LR_IRQFLAGS, RFLR_IRQFLAGS_FHSSCHANGEDCHANNEL);
|
||||
|
||||
if( (_radio_events != NULL ) && ( _radio_events->fhss_change_channel ) )
|
||||
{
|
||||
_radio_events->fhss_change_channel((read_register( REG_LR_HOPCHANNEL ) & RFLR_HOPCHANNEL_CHANNEL_MASK ));
|
||||
if ((_radio_events != NULL) && (_radio_events->fhss_change_channel)) {
|
||||
_radio_events->fhss_change_channel((read_register(REG_LR_HOPCHANNEL) & RFLR_HOPCHANNEL_CHANNEL_MASK));
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -2025,29 +1998,23 @@ void SX1272_LoRaRadio::handle_dio2_irq(void)
|
|||
}
|
||||
}
|
||||
|
||||
void SX1272_LoRaRadio::handle_dio3_irq( void )
|
||||
void SX1272_LoRaRadio::handle_dio3_irq(void)
|
||||
{
|
||||
switch( _rf_settings.modem )
|
||||
{
|
||||
switch (_rf_settings.modem) {
|
||||
case MODEM_FSK:
|
||||
break;
|
||||
case MODEM_LORA:
|
||||
if( ( read_register( REG_LR_IRQFLAGS ) & RFLR_IRQFLAGS_CADDETECTED ) == RFLR_IRQFLAGS_CADDETECTED )
|
||||
{
|
||||
if ((read_register(REG_LR_IRQFLAGS) & RFLR_IRQFLAGS_CADDETECTED) == RFLR_IRQFLAGS_CADDETECTED) {
|
||||
// Clear Irq
|
||||
write_to_register( REG_LR_IRQFLAGS, RFLR_IRQFLAGS_CADDETECTED | RFLR_IRQFLAGS_CADDONE );
|
||||
if( ( _radio_events != NULL ) && ( _radio_events->cad_done ) )
|
||||
{
|
||||
_radio_events->cad_done( true );
|
||||
write_to_register(REG_LR_IRQFLAGS, RFLR_IRQFLAGS_CADDETECTED | RFLR_IRQFLAGS_CADDONE);
|
||||
if ((_radio_events != NULL) && (_radio_events->cad_done)) {
|
||||
_radio_events->cad_done(true);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
// Clear Irq
|
||||
write_to_register( REG_LR_IRQFLAGS, RFLR_IRQFLAGS_CADDONE );
|
||||
if( ( _radio_events != NULL ) && ( _radio_events->cad_done ) )
|
||||
{
|
||||
_radio_events->cad_done( false );
|
||||
write_to_register(REG_LR_IRQFLAGS, RFLR_IRQFLAGS_CADDONE);
|
||||
if ((_radio_events != NULL) && (_radio_events->cad_done)) {
|
||||
_radio_events->cad_done(false);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -2075,8 +2042,7 @@ void SX1272_LoRaRadio::handle_dio4_irq(void)
|
|||
|
||||
void SX1272_LoRaRadio::handle_dio5_irq()
|
||||
{
|
||||
switch( _rf_settings.modem )
|
||||
{
|
||||
switch (_rf_settings.modem) {
|
||||
case MODEM_FSK:
|
||||
break;
|
||||
case MODEM_LORA:
|
||||
|
|
|
@ -33,7 +33,7 @@ SPDX-License-Identifier: BSD-3-Clause
|
|||
#include "SPI.h"
|
||||
#include "platform/PlatformMutex.h"
|
||||
#ifdef MBED_CONF_RTOS_PRESENT
|
||||
#include "rtos/Thread.h"
|
||||
#include "rtos/Thread.h"
|
||||
#endif
|
||||
|
||||
#include "lorawan/LoRaRadio.h"
|
||||
|
@ -145,7 +145,7 @@ public:
|
|||
* @param rx_continuous Sets the reception in continuous mode
|
||||
* [false: single mode, true: continuous mode]
|
||||
*/
|
||||
virtual void set_rx_config (radio_modems_t modem, uint32_t bandwidth,
|
||||
virtual void set_rx_config(radio_modems_t modem, uint32_t bandwidth,
|
||||
uint32_t datarate, uint8_t coderate,
|
||||
uint32_t bandwidth_afc, uint16_t preamble_len,
|
||||
uint16_t symb_timeout, bool fix_len,
|
||||
|
|
|
@ -64,8 +64,7 @@ using namespace mbed;
|
|||
/*!
|
||||
* FSK bandwidth definition
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
typedef struct {
|
||||
uint32_t bandwidth;
|
||||
uint8_t register_value;
|
||||
} fsk_bw_t;
|
||||
|
@ -73,8 +72,7 @@ typedef struct
|
|||
/*!
|
||||
* Radio registers definition
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
typedef struct {
|
||||
uint8_t modem;
|
||||
uint8_t addr;
|
||||
uint8_t value;
|
||||
|
@ -100,24 +98,23 @@ typedef struct
|
|||
{ MODEM_LORA, REG_LR_PAYLOADMAXLENGTH, 0x40 },\
|
||||
}
|
||||
|
||||
static const fsk_bw_t fsk_bandwidths[] =
|
||||
{
|
||||
{ 2600 , 0x17 },
|
||||
{ 3100 , 0x0F },
|
||||
{ 3900 , 0x07 },
|
||||
{ 5200 , 0x16 },
|
||||
{ 6300 , 0x0E },
|
||||
{ 7800 , 0x06 },
|
||||
{ 10400 , 0x15 },
|
||||
{ 12500 , 0x0D },
|
||||
{ 15600 , 0x05 },
|
||||
{ 20800 , 0x14 },
|
||||
{ 25000 , 0x0C },
|
||||
{ 31300 , 0x04 },
|
||||
{ 41700 , 0x13 },
|
||||
{ 50000 , 0x0B },
|
||||
{ 62500 , 0x03 },
|
||||
{ 83333 , 0x12 },
|
||||
static const fsk_bw_t fsk_bandwidths[] = {
|
||||
{ 2600, 0x17 },
|
||||
{ 3100, 0x0F },
|
||||
{ 3900, 0x07 },
|
||||
{ 5200, 0x16 },
|
||||
{ 6300, 0x0E },
|
||||
{ 7800, 0x06 },
|
||||
{ 10400, 0x15 },
|
||||
{ 12500, 0x0D },
|
||||
{ 15600, 0x05 },
|
||||
{ 20800, 0x14 },
|
||||
{ 25000, 0x0C },
|
||||
{ 31300, 0x04 },
|
||||
{ 41700, 0x13 },
|
||||
{ 50000, 0x0B },
|
||||
{ 62500, 0x03 },
|
||||
{ 83333, 0x12 },
|
||||
{ 100000, 0x0A },
|
||||
{ 125000, 0x02 },
|
||||
{ 166700, 0x11 },
|
||||
|
@ -318,10 +315,10 @@ uint8_t SX1276_LoRaRadio::get_status(void)
|
|||
void SX1276_LoRaRadio::set_channel(uint32_t freq)
|
||||
{
|
||||
_rf_settings.channel = freq;
|
||||
freq = (uint32_t) ((float) freq / (float) FREQ_STEP);
|
||||
write_to_register(REG_FRFMSB, (uint8_t) ((freq >> 16) & 0xFF));
|
||||
write_to_register(REG_FRFMID, (uint8_t) ((freq >> 8) & 0xFF));
|
||||
write_to_register(REG_FRFLSB, (uint8_t) (freq & 0xFF));
|
||||
freq = (uint32_t)((float) freq / (float) FREQ_STEP);
|
||||
write_to_register(REG_FRFMSB, (uint8_t)((freq >> 16) & 0xFF));
|
||||
write_to_register(REG_FRFMID, (uint8_t)((freq >> 8) & 0xFF));
|
||||
write_to_register(REG_FRFLSB, (uint8_t)(freq & 0xFF));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -334,7 +331,7 @@ void SX1276_LoRaRadio::set_channel(uint32_t freq)
|
|||
* In addition to that RX and TX configuration APIs should be called again in
|
||||
* order to have correct desires setup.
|
||||
*/
|
||||
uint32_t SX1276_LoRaRadio::random( void )
|
||||
uint32_t SX1276_LoRaRadio::random(void)
|
||||
{
|
||||
uint8_t i;
|
||||
uint32_t rnd = 0;
|
||||
|
@ -342,7 +339,7 @@ uint32_t SX1276_LoRaRadio::random( void )
|
|||
/*
|
||||
* Radio setup for random number generation
|
||||
*/
|
||||
set_modem( MODEM_LORA );
|
||||
set_modem(MODEM_LORA);
|
||||
|
||||
// Disable LoRa modem interrupts
|
||||
write_to_register(REG_LR_IRQFLAGSMASK, RFLR_IRQFLAGS_RXTIMEOUT |
|
||||
|
@ -352,7 +349,7 @@ uint32_t SX1276_LoRaRadio::random( void )
|
|||
RFLR_IRQFLAGS_TXDONE |
|
||||
RFLR_IRQFLAGS_CADDONE |
|
||||
RFLR_IRQFLAGS_FHSSCHANGEDCHANNEL |
|
||||
RFLR_IRQFLAGS_CADDETECTED );
|
||||
RFLR_IRQFLAGS_CADDETECTED);
|
||||
|
||||
// Set radio in continuous reception
|
||||
set_operation_mode(RF_OPMODE_RECEIVER);
|
||||
|
@ -360,7 +357,7 @@ uint32_t SX1276_LoRaRadio::random( void )
|
|||
for (i = 0; i < 32; i++) {
|
||||
ThisThread::sleep_for(1);
|
||||
// Unfiltered RSSI value reading. Only takes the LSB value
|
||||
rnd |= ((uint32_t) read_register( REG_LR_RSSIWIDEBAND) & 0x01) << i;
|
||||
rnd |= ((uint32_t) read_register(REG_LR_RSSIWIDEBAND) & 0x01) << i;
|
||||
}
|
||||
|
||||
sleep();
|
||||
|
@ -397,15 +394,15 @@ void SX1276_LoRaRadio::set_rx_config(radio_modems_t modem, uint32_t bandwidth,
|
|||
_rf_settings.fsk.preamble_len = preamble_len;
|
||||
_rf_settings.fsk.rx_single_timeout = (symb_timeout + 1) / 2; // dividing by 2 as our detector size is 2 symbols (16 bytes)
|
||||
|
||||
datarate = (uint16_t) ((float) XTAL_FREQ / (float) datarate);
|
||||
write_to_register(REG_BITRATEMSB, (uint8_t) (datarate >> 8));
|
||||
write_to_register(REG_BITRATELSB, (uint8_t) (datarate & 0xFF));
|
||||
datarate = (uint16_t)((float) XTAL_FREQ / (float) datarate);
|
||||
write_to_register(REG_BITRATEMSB, (uint8_t)(datarate >> 8));
|
||||
write_to_register(REG_BITRATELSB, (uint8_t)(datarate & 0xFF));
|
||||
|
||||
write_to_register(REG_RXBW, get_fsk_bw_reg_val(bandwidth));
|
||||
write_to_register(REG_AFCBW, get_fsk_bw_reg_val(bandwidth_afc));
|
||||
|
||||
write_to_register(REG_PREAMBLEMSB, (uint8_t) ((preamble_len >> 8) & 0xFF));
|
||||
write_to_register(REG_PREAMBLELSB, (uint8_t) (preamble_len & 0xFF));
|
||||
write_to_register(REG_PREAMBLEMSB, (uint8_t)((preamble_len >> 8) & 0xFF));
|
||||
write_to_register(REG_PREAMBLELSB, (uint8_t)(preamble_len & 0xFF));
|
||||
|
||||
if (fix_len == 1) {
|
||||
write_to_register(REG_PAYLOADLENGTH, payload_len);
|
||||
|
@ -439,7 +436,7 @@ void SX1276_LoRaRadio::set_rx_config(radio_modems_t modem, uint32_t bandwidth,
|
|||
}
|
||||
|
||||
// stupid hack. TODO think something better
|
||||
bandwidth+=7;
|
||||
bandwidth += 7;
|
||||
|
||||
_rf_settings.lora.bandwidth = bandwidth;
|
||||
_rf_settings.lora.datarate = datarate;
|
||||
|
@ -466,14 +463,14 @@ void SX1276_LoRaRadio::set_rx_config(radio_modems_t modem, uint32_t bandwidth,
|
|||
_rf_settings.lora.low_datarate_optimize = 0x00;
|
||||
}
|
||||
|
||||
write_to_register(REG_LR_MODEMCONFIG1, (read_register( REG_LR_MODEMCONFIG1)
|
||||
write_to_register(REG_LR_MODEMCONFIG1, (read_register(REG_LR_MODEMCONFIG1)
|
||||
& RFLR_MODEMCONFIG1_BW_MASK
|
||||
& RFLR_MODEMCONFIG1_CODINGRATE_MASK
|
||||
& RFLR_MODEMCONFIG1_IMPLICITHEADER_MASK)
|
||||
| (bandwidth << 4)
|
||||
| (coderate << 1) | fix_len);
|
||||
|
||||
write_to_register(REG_LR_MODEMCONFIG2, (read_register( REG_LR_MODEMCONFIG2)
|
||||
write_to_register(REG_LR_MODEMCONFIG2, (read_register(REG_LR_MODEMCONFIG2)
|
||||
& RFLR_MODEMCONFIG2_SF_MASK
|
||||
& RFLR_MODEMCONFIG2_RXPAYLOADCRC_MASK
|
||||
& RFLR_MODEMCONFIG2_SYMBTIMEOUTMSB_MASK)
|
||||
|
@ -482,24 +479,24 @@ void SX1276_LoRaRadio::set_rx_config(radio_modems_t modem, uint32_t bandwidth,
|
|||
| ((symb_timeout >> 8)
|
||||
& ~RFLR_MODEMCONFIG2_SYMBTIMEOUTMSB_MASK));
|
||||
|
||||
write_to_register(REG_LR_MODEMCONFIG3, (read_register( REG_LR_MODEMCONFIG3)
|
||||
write_to_register(REG_LR_MODEMCONFIG3, (read_register(REG_LR_MODEMCONFIG3)
|
||||
& RFLR_MODEMCONFIG3_LOWDATARATEOPTIMIZE_MASK)
|
||||
| (_rf_settings.lora.low_datarate_optimize << 3));
|
||||
|
||||
write_to_register(REG_LR_SYMBTIMEOUTLSB, (uint8_t) (symb_timeout & 0xFF));
|
||||
write_to_register(REG_LR_SYMBTIMEOUTLSB, (uint8_t)(symb_timeout & 0xFF));
|
||||
|
||||
write_to_register(REG_LR_PREAMBLEMSB, (uint8_t) ((preamble_len >> 8) & 0xFF));
|
||||
write_to_register(REG_LR_PREAMBLELSB, (uint8_t) (preamble_len & 0xFF));
|
||||
write_to_register(REG_LR_PREAMBLEMSB, (uint8_t)((preamble_len >> 8) & 0xFF));
|
||||
write_to_register(REG_LR_PREAMBLELSB, (uint8_t)(preamble_len & 0xFF));
|
||||
|
||||
if (fix_len == 1) {
|
||||
write_to_register(REG_LR_PAYLOADLENGTH, payload_len);
|
||||
}
|
||||
|
||||
if (_rf_settings.lora.freq_hop_on == true) {
|
||||
write_to_register(REG_LR_PLLHOP, (read_register( REG_LR_PLLHOP)
|
||||
write_to_register(REG_LR_PLLHOP, (read_register(REG_LR_PLLHOP)
|
||||
& RFLR_PLLHOP_FASTHOP_MASK)
|
||||
| RFLR_PLLHOP_FASTHOP_ON);
|
||||
write_to_register(REG_LR_HOPPERIOD,_rf_settings.lora.hop_period);
|
||||
write_to_register(REG_LR_HOPPERIOD, _rf_settings.lora.hop_period);
|
||||
}
|
||||
|
||||
if ((bandwidth == 9) && (_rf_settings.channel > RF_MID_BAND_THRESH)) {
|
||||
|
@ -562,19 +559,19 @@ void SX1276_LoRaRadio::set_tx_config(radio_modems_t modem, int8_t power,
|
|||
_rf_settings.fsk.iq_inverted = iq_inverted;
|
||||
_rf_settings.fsk.tx_timeout = timeout;
|
||||
|
||||
fdev = (uint16_t) ((float) fdev / (float) FREQ_STEP);
|
||||
write_to_register( REG_FDEVMSB, (uint8_t) (fdev >> 8));
|
||||
write_to_register( REG_FDEVLSB, (uint8_t) (fdev & 0xFF));
|
||||
fdev = (uint16_t)((float) fdev / (float) FREQ_STEP);
|
||||
write_to_register(REG_FDEVMSB, (uint8_t)(fdev >> 8));
|
||||
write_to_register(REG_FDEVLSB, (uint8_t)(fdev & 0xFF));
|
||||
|
||||
datarate = (uint16_t) ((float) XTAL_FREQ / (float) datarate);
|
||||
write_to_register( REG_BITRATEMSB, (uint8_t) (datarate >> 8));
|
||||
write_to_register( REG_BITRATELSB, (uint8_t) (datarate & 0xFF));
|
||||
datarate = (uint16_t)((float) XTAL_FREQ / (float) datarate);
|
||||
write_to_register(REG_BITRATEMSB, (uint8_t)(datarate >> 8));
|
||||
write_to_register(REG_BITRATELSB, (uint8_t)(datarate & 0xFF));
|
||||
|
||||
write_to_register( REG_PREAMBLEMSB, (preamble_len >> 8) & 0x00FF);
|
||||
write_to_register( REG_PREAMBLELSB, preamble_len & 0xFF);
|
||||
write_to_register(REG_PREAMBLEMSB, (preamble_len >> 8) & 0x00FF);
|
||||
write_to_register(REG_PREAMBLELSB, preamble_len & 0xFF);
|
||||
|
||||
write_to_register(REG_PACKETCONFIG1,
|
||||
(read_register( REG_PACKETCONFIG1) &
|
||||
(read_register(REG_PACKETCONFIG1) &
|
||||
RF_PACKETCONFIG1_CRC_MASK &
|
||||
RF_PACKETCONFIG1_PACKETFORMAT_MASK)
|
||||
| ((fix_len == 1) ?
|
||||
|
@ -582,7 +579,7 @@ void SX1276_LoRaRadio::set_tx_config(radio_modems_t modem, int8_t power,
|
|||
RF_PACKETCONFIG1_PACKETFORMAT_VARIABLE)
|
||||
| (crc_on << 4));
|
||||
write_to_register(REG_PACKETCONFIG2,
|
||||
(read_register( REG_PACKETCONFIG2)
|
||||
(read_register(REG_PACKETCONFIG2)
|
||||
| RF_PACKETCONFIG2_DATAMODE_PACKET));
|
||||
|
||||
break;
|
||||
|
@ -619,16 +616,16 @@ void SX1276_LoRaRadio::set_tx_config(radio_modems_t modem, int8_t power,
|
|||
write_to_register(REG_LR_PLLHOP, (read_register(REG_LR_PLLHOP)
|
||||
& RFLR_PLLHOP_FASTHOP_MASK)
|
||||
| RFLR_PLLHOP_FASTHOP_ON);
|
||||
write_to_register( REG_LR_HOPPERIOD, _rf_settings.lora.hop_period);
|
||||
write_to_register(REG_LR_HOPPERIOD, _rf_settings.lora.hop_period);
|
||||
}
|
||||
|
||||
write_to_register(REG_LR_MODEMCONFIG1, (read_register( REG_LR_MODEMCONFIG1)
|
||||
write_to_register(REG_LR_MODEMCONFIG1, (read_register(REG_LR_MODEMCONFIG1)
|
||||
& RFLR_MODEMCONFIG1_BW_MASK
|
||||
& RFLR_MODEMCONFIG1_CODINGRATE_MASK
|
||||
& RFLR_MODEMCONFIG1_IMPLICITHEADER_MASK) | (bandwidth << 4)
|
||||
| (coderate << 1) | fix_len);
|
||||
|
||||
write_to_register(REG_LR_MODEMCONFIG2, (read_register( REG_LR_MODEMCONFIG2)
|
||||
write_to_register(REG_LR_MODEMCONFIG2, (read_register(REG_LR_MODEMCONFIG2)
|
||||
& RFLR_MODEMCONFIG2_SF_MASK
|
||||
& RFLR_MODEMCONFIG2_RXPAYLOADCRC_MASK)
|
||||
| (datarate << 4)
|
||||
|
@ -642,13 +639,13 @@ void SX1276_LoRaRadio::set_tx_config(radio_modems_t modem, int8_t power,
|
|||
write_to_register(REG_LR_PREAMBLELSB, preamble_len & 0xFF);
|
||||
|
||||
if (datarate == 6) {
|
||||
write_to_register(REG_LR_DETECTOPTIMIZE, (read_register( REG_LR_DETECTOPTIMIZE)
|
||||
write_to_register(REG_LR_DETECTOPTIMIZE, (read_register(REG_LR_DETECTOPTIMIZE)
|
||||
& RFLR_DETECTIONOPTIMIZE_MASK) | RFLR_DETECTIONOPTIMIZE_SF6);
|
||||
write_to_register(REG_LR_DETECTIONTHRESHOLD, RFLR_DETECTIONTHRESH_SF6);
|
||||
} else {
|
||||
write_to_register(REG_LR_DETECTOPTIMIZE, (read_register( REG_LR_DETECTOPTIMIZE)
|
||||
write_to_register(REG_LR_DETECTOPTIMIZE, (read_register(REG_LR_DETECTOPTIMIZE)
|
||||
& RFLR_DETECTIONOPTIMIZE_MASK) | RFLR_DETECTIONOPTIMIZE_SF7_TO_SF12);
|
||||
write_to_register( REG_LR_DETECTIONTHRESHOLD, RFLR_DETECTIONTHRESH_SF7_TO_SF12);
|
||||
write_to_register(REG_LR_DETECTIONTHRESHOLD, RFLR_DETECTIONTHRESH_SF7_TO_SF12);
|
||||
}
|
||||
|
||||
break;
|
||||
|
@ -669,11 +666,11 @@ uint32_t SX1276_LoRaRadio::time_on_air(radio_modems_t modem, uint8_t pkt_len)
|
|||
case MODEM_FSK:
|
||||
airTime =
|
||||
rint((8 * (_rf_settings.fsk.preamble_len
|
||||
+ ((read_register( REG_SYNCCONFIG)
|
||||
+ ((read_register(REG_SYNCCONFIG)
|
||||
& ~RF_SYNCCONFIG_SYNCSIZE_MASK) + 1)
|
||||
+ ((_rf_settings.fsk.fix_len == 0x01) ?
|
||||
0.0f : 1.0f)
|
||||
+ (((read_register( REG_PACKETCONFIG1)
|
||||
+ (((read_register(REG_PACKETCONFIG1)
|
||||
& ~RF_PACKETCONFIG1_ADDRSFILTERING_MASK)
|
||||
!= 0x00) ? 1.0f : 0) + pkt_len
|
||||
+ ((_rf_settings.fsk.crc_on == 0x01) ?
|
||||
|
@ -726,7 +723,7 @@ uint32_t SX1276_LoRaRadio::time_on_air(radio_modems_t modem, uint8_t pkt_len)
|
|||
float tmp = ceil((8 * pkt_len - 4 * _rf_settings.lora.datarate + 28
|
||||
+ 16 * _rf_settings.lora.crc_on
|
||||
- (_rf_settings.lora.fix_len ? 20 : 0))
|
||||
/ (float) (4
|
||||
/ (float)(4
|
||||
* (_rf_settings.lora.datarate
|
||||
- ((_rf_settings.lora.low_datarate_optimize > 0)
|
||||
? 2 : 0))))
|
||||
|
@ -757,7 +754,7 @@ void SX1276_LoRaRadio::send(uint8_t *buffer, uint8_t size)
|
|||
_rf_settings.fsk_packet_handler.size = size;
|
||||
|
||||
if (_rf_settings.fsk.fix_len == false) {
|
||||
write_fifo((uint8_t*) &size, 1);
|
||||
write_fifo((uint8_t *) &size, 1);
|
||||
} else {
|
||||
write_to_register(REG_PAYLOADLENGTH, size);
|
||||
}
|
||||
|
@ -784,14 +781,14 @@ void SX1276_LoRaRadio::send(uint8_t *buffer, uint8_t size)
|
|||
& RFLR_INVERTIQ_RX_MASK)
|
||||
| RFLR_INVERTIQ_RX_OFF
|
||||
| RFLR_INVERTIQ_TX_ON));
|
||||
write_to_register( REG_LR_INVERTIQ2, RFLR_INVERTIQ2_ON);
|
||||
write_to_register(REG_LR_INVERTIQ2, RFLR_INVERTIQ2_ON);
|
||||
} else {
|
||||
write_to_register(REG_LR_INVERTIQ, ((read_register( REG_LR_INVERTIQ)
|
||||
write_to_register(REG_LR_INVERTIQ, ((read_register(REG_LR_INVERTIQ)
|
||||
& RFLR_INVERTIQ_TX_MASK
|
||||
& RFLR_INVERTIQ_RX_MASK)
|
||||
| RFLR_INVERTIQ_RX_OFF
|
||||
| RFLR_INVERTIQ_TX_OFF));
|
||||
write_to_register( REG_LR_INVERTIQ2, RFLR_INVERTIQ2_OFF);
|
||||
write_to_register(REG_LR_INVERTIQ2, RFLR_INVERTIQ2_OFF);
|
||||
}
|
||||
|
||||
_rf_settings.lora_packet_handler.size = size;
|
||||
|
@ -804,7 +801,7 @@ void SX1276_LoRaRadio::send(uint8_t *buffer, uint8_t size)
|
|||
write_to_register(REG_LR_FIFOADDRPTR, 0);
|
||||
|
||||
// FIFO operations can not take place in Sleep mode
|
||||
if ((read_register( REG_OPMODE) & ~RF_OPMODE_MASK) == RF_OPMODE_SLEEP) {
|
||||
if ((read_register(REG_OPMODE) & ~RF_OPMODE_MASK) == RF_OPMODE_SLEEP) {
|
||||
standby();
|
||||
ThisThread::sleep_for(1);
|
||||
}
|
||||
|
@ -834,7 +831,7 @@ void SX1276_LoRaRadio::sleep()
|
|||
/**
|
||||
* Put radio in Standby mode
|
||||
*/
|
||||
void SX1276_LoRaRadio::standby( void )
|
||||
void SX1276_LoRaRadio::standby(void)
|
||||
{
|
||||
tx_timeout_timer.detach();
|
||||
|
||||
|
@ -860,7 +857,7 @@ void SX1276_LoRaRadio::receive(void)
|
|||
// DIO3=FifoEmpty?
|
||||
// DIO4=PreambleDetect
|
||||
// DIO5=ModeReady?
|
||||
write_to_register(REG_DIOMAPPING1, (read_register( REG_DIOMAPPING1)
|
||||
write_to_register(REG_DIOMAPPING1, (read_register(REG_DIOMAPPING1)
|
||||
& RF_DIOMAPPING1_DIO0_MASK
|
||||
& RF_DIOMAPPING1_DIO1_MASK
|
||||
& RF_DIOMAPPING1_DIO2_MASK)
|
||||
|
@ -868,7 +865,7 @@ void SX1276_LoRaRadio::receive(void)
|
|||
| RF_DIOMAPPING1_DIO1_00
|
||||
| RF_DIOMAPPING1_DIO2_10);
|
||||
|
||||
write_to_register(REG_DIOMAPPING2, (read_register( REG_DIOMAPPING2)
|
||||
write_to_register(REG_DIOMAPPING2, (read_register(REG_DIOMAPPING2)
|
||||
& RF_DIOMAPPING2_DIO4_MASK
|
||||
& RF_DIOMAPPING2_MAP_MASK)
|
||||
| RF_DIOMAPPING2_DIO4_11
|
||||
|
@ -901,15 +898,15 @@ void SX1276_LoRaRadio::receive(void)
|
|||
case MODEM_LORA:
|
||||
|
||||
if (_rf_settings.lora.iq_inverted == true) {
|
||||
write_to_register(REG_LR_INVERTIQ, ((read_register( REG_LR_INVERTIQ)
|
||||
write_to_register(REG_LR_INVERTIQ, ((read_register(REG_LR_INVERTIQ)
|
||||
& RFLR_INVERTIQ_TX_MASK & RFLR_INVERTIQ_RX_MASK)
|
||||
| RFLR_INVERTIQ_RX_ON | RFLR_INVERTIQ_TX_OFF));
|
||||
write_to_register( REG_LR_INVERTIQ2, RFLR_INVERTIQ2_ON);
|
||||
write_to_register(REG_LR_INVERTIQ2, RFLR_INVERTIQ2_ON);
|
||||
} else {
|
||||
write_to_register(REG_LR_INVERTIQ, ((read_register( REG_LR_INVERTIQ)
|
||||
write_to_register(REG_LR_INVERTIQ, ((read_register(REG_LR_INVERTIQ)
|
||||
& RFLR_INVERTIQ_TX_MASK & RFLR_INVERTIQ_RX_MASK)
|
||||
| RFLR_INVERTIQ_RX_OFF | RFLR_INVERTIQ_TX_OFF));
|
||||
write_to_register( REG_LR_INVERTIQ2, RFLR_INVERTIQ2_OFF);
|
||||
write_to_register(REG_LR_INVERTIQ2, RFLR_INVERTIQ2_OFF);
|
||||
}
|
||||
|
||||
// ERRATA 2.3 - Receiver Spurious Reception of a LoRa Signal
|
||||
|
@ -919,42 +916,42 @@ void SX1276_LoRaRadio::receive(void)
|
|||
write_to_register(REG_LR_TEST30, 0x00);
|
||||
switch (_rf_settings.lora.bandwidth) {
|
||||
case 0: // 7.8 kHz
|
||||
write_to_register( REG_LR_TEST2F, 0x48);
|
||||
write_to_register(REG_LR_TEST2F, 0x48);
|
||||
set_channel(_rf_settings.channel + 7.81e3);
|
||||
break;
|
||||
case 1: // 10.4 kHz
|
||||
write_to_register( REG_LR_TEST2F, 0x44);
|
||||
write_to_register(REG_LR_TEST2F, 0x44);
|
||||
set_channel(_rf_settings.channel + 10.42e3);
|
||||
break;
|
||||
case 2: // 15.6 kHz
|
||||
write_to_register( REG_LR_TEST2F, 0x44);
|
||||
write_to_register(REG_LR_TEST2F, 0x44);
|
||||
set_channel(_rf_settings.channel + 15.62e3);
|
||||
break;
|
||||
case 3: // 20.8 kHz
|
||||
write_to_register( REG_LR_TEST2F, 0x44);
|
||||
write_to_register(REG_LR_TEST2F, 0x44);
|
||||
set_channel(_rf_settings.channel + 20.83e3);
|
||||
break;
|
||||
case 4: // 31.2 kHz
|
||||
write_to_register( REG_LR_TEST2F, 0x44);
|
||||
write_to_register(REG_LR_TEST2F, 0x44);
|
||||
set_channel(_rf_settings.channel + 31.25e3);
|
||||
break;
|
||||
case 5: // 41.4 kHz
|
||||
write_to_register( REG_LR_TEST2F, 0x44);
|
||||
write_to_register(REG_LR_TEST2F, 0x44);
|
||||
set_channel(_rf_settings.channel + 41.67e3);
|
||||
break;
|
||||
case 6: // 62.5 kHz
|
||||
write_to_register( REG_LR_TEST2F, 0x40);
|
||||
write_to_register(REG_LR_TEST2F, 0x40);
|
||||
break;
|
||||
case 7: // 125 kHz
|
||||
write_to_register( REG_LR_TEST2F, 0x40);
|
||||
write_to_register(REG_LR_TEST2F, 0x40);
|
||||
break;
|
||||
case 8: // 250 kHz
|
||||
write_to_register( REG_LR_TEST2F, 0x40);
|
||||
write_to_register(REG_LR_TEST2F, 0x40);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
write_to_register( REG_LR_DETECTOPTIMIZE,
|
||||
read_register( REG_LR_DETECTOPTIMIZE) | 0x80);
|
||||
write_to_register(REG_LR_DETECTOPTIMIZE,
|
||||
read_register(REG_LR_DETECTOPTIMIZE) | 0x80);
|
||||
}
|
||||
|
||||
if (_rf_settings.lora.freq_hop_on == true) {
|
||||
|
@ -977,7 +974,7 @@ void SX1276_LoRaRadio::receive(void)
|
|||
| RFLR_IRQFLAGS_CADDETECTED);
|
||||
|
||||
// DIO0=RxDone
|
||||
write_to_register(REG_DIOMAPPING1, (read_register( REG_DIOMAPPING1)
|
||||
write_to_register(REG_DIOMAPPING1, (read_register(REG_DIOMAPPING1)
|
||||
& RFLR_DIOMAPPING1_DIO0_MASK)
|
||||
| RFLR_DIOMAPPING1_DIO0_00);
|
||||
}
|
||||
|
@ -1135,10 +1132,10 @@ void SX1276_LoRaRadio::set_tx_continuous_wave(uint32_t freq, int8_t power,
|
|||
set_tx_config(MODEM_FSK, power, 0, 0, 4800, 0, 5, false, false, 0, 0, 0, time * 1000);
|
||||
reg_val = read_register(REG_PACKETCONFIG2);
|
||||
|
||||
write_to_register( REG_PACKETCONFIG2, (reg_val & RF_PACKETCONFIG2_DATAMODE_MASK ) );
|
||||
write_to_register(REG_PACKETCONFIG2, (reg_val & RF_PACKETCONFIG2_DATAMODE_MASK));
|
||||
// Disable radio interrupts
|
||||
write_to_register( REG_DIOMAPPING1, RF_DIOMAPPING1_DIO0_11 | RF_DIOMAPPING1_DIO1_11 );
|
||||
write_to_register( REG_DIOMAPPING2, RF_DIOMAPPING2_DIO4_10 | RF_DIOMAPPING2_DIO5_10 );
|
||||
write_to_register(REG_DIOMAPPING1, RF_DIOMAPPING1_DIO0_11 | RF_DIOMAPPING1_DIO1_11);
|
||||
write_to_register(REG_DIOMAPPING2, RF_DIOMAPPING2_DIO4_10 | RF_DIOMAPPING2_DIO5_10);
|
||||
|
||||
_rf_settings.state = RF_TX_RUNNING;
|
||||
tx_timeout_timer.attach_us(callback(this, &SX1276_LoRaRadio::timeout_irq_isr), time * 1000000);
|
||||
|
@ -1279,23 +1276,22 @@ void SX1276_LoRaRadio::set_operation_mode(uint8_t mode)
|
|||
* At initialization FSK is chosen. Later stack or application
|
||||
* can choose to change.
|
||||
*/
|
||||
void SX1276_LoRaRadio::set_modem(uint8_t modem )
|
||||
void SX1276_LoRaRadio::set_modem(uint8_t modem)
|
||||
{
|
||||
if ((read_register(REG_OPMODE) & RFLR_OPMODE_LONGRANGEMODE_ON) != 0 ) {
|
||||
if ((read_register(REG_OPMODE) & RFLR_OPMODE_LONGRANGEMODE_ON) != 0) {
|
||||
_rf_settings.modem = MODEM_LORA;
|
||||
} else {
|
||||
_rf_settings.modem = MODEM_FSK;
|
||||
}
|
||||
|
||||
if(_rf_settings.modem == modem ) {
|
||||
if (_rf_settings.modem == modem) {
|
||||
// if the modem is already set
|
||||
return;
|
||||
}
|
||||
|
||||
_rf_settings.modem = modem;
|
||||
|
||||
switch(_rf_settings.modem)
|
||||
{
|
||||
switch (_rf_settings.modem) {
|
||||
default:
|
||||
case MODEM_FSK:
|
||||
// before changing modem mode, put the module to sleep
|
||||
|
@ -1390,38 +1386,36 @@ void SX1276_LoRaRadio::rx_chain_calibration(void)
|
|||
uint32_t initialFreq;
|
||||
|
||||
// Save context
|
||||
regPaConfigInitVal = read_register( REG_PACONFIG );
|
||||
initialFreq = (float) (((uint32_t) this->read_register(REG_FRFMSB) << 16) |
|
||||
((uint32_t) this->read_register(REG_FRFMID) << 8 ) |
|
||||
regPaConfigInitVal = read_register(REG_PACONFIG);
|
||||
initialFreq = (float)(((uint32_t) this->read_register(REG_FRFMSB) << 16) |
|
||||
((uint32_t) this->read_register(REG_FRFMID) << 8) |
|
||||
((uint32_t)this->read_register(REG_FRFLSB))) * (float) FREQ_STEP;
|
||||
|
||||
// Cut the PA just in case, RFO output, power = -1 dBm
|
||||
write_to_register(REG_PACONFIG, 0x00);
|
||||
|
||||
// Launch Rx chain calibration for LF band
|
||||
write_to_register (REG_IMAGECAL, (read_register(REG_IMAGECAL)
|
||||
write_to_register(REG_IMAGECAL, (read_register(REG_IMAGECAL)
|
||||
& RF_IMAGECAL_IMAGECAL_MASK)
|
||||
| RF_IMAGECAL_IMAGECAL_START);
|
||||
while((read_register(REG_IMAGECAL) & RF_IMAGECAL_IMAGECAL_RUNNING )
|
||||
== RF_IMAGECAL_IMAGECAL_RUNNING )
|
||||
{
|
||||
while ((read_register(REG_IMAGECAL) & RF_IMAGECAL_IMAGECAL_RUNNING)
|
||||
== RF_IMAGECAL_IMAGECAL_RUNNING) {
|
||||
}
|
||||
|
||||
// Sets a Frequency in HF band
|
||||
set_channel(868000000);
|
||||
|
||||
// Launch Rx chain calibration for HF band
|
||||
write_to_register (REG_IMAGECAL, (read_register(REG_IMAGECAL)
|
||||
& RF_IMAGECAL_IMAGECAL_MASK )
|
||||
| RF_IMAGECAL_IMAGECAL_START );
|
||||
while((read_register(REG_IMAGECAL) & RF_IMAGECAL_IMAGECAL_RUNNING )
|
||||
== RF_IMAGECAL_IMAGECAL_RUNNING )
|
||||
{
|
||||
write_to_register(REG_IMAGECAL, (read_register(REG_IMAGECAL)
|
||||
& RF_IMAGECAL_IMAGECAL_MASK)
|
||||
| RF_IMAGECAL_IMAGECAL_START);
|
||||
while ((read_register(REG_IMAGECAL) & RF_IMAGECAL_IMAGECAL_RUNNING)
|
||||
== RF_IMAGECAL_IMAGECAL_RUNNING) {
|
||||
// do nothing, just wait while rf image frequency calibration is done
|
||||
}
|
||||
|
||||
// Restore context
|
||||
write_to_register( REG_PACONFIG, regPaConfigInitVal );
|
||||
write_to_register(REG_PACONFIG, regPaConfigInitVal);
|
||||
set_channel(initialFreq);
|
||||
}
|
||||
|
||||
|
@ -1490,7 +1484,7 @@ void SX1276_LoRaRadio::set_rf_tx_power(int8_t power)
|
|||
power = 20;
|
||||
}
|
||||
paConfig = (paConfig & RF_PACONFIG_OUTPUTPOWER_MASK)
|
||||
| (uint8_t) ((uint16_t) (power - 5) & 0x0F);
|
||||
| (uint8_t)((uint16_t)(power - 5) & 0x0F);
|
||||
} else {
|
||||
if (power < 2) {
|
||||
power = 2;
|
||||
|
@ -1499,7 +1493,7 @@ void SX1276_LoRaRadio::set_rf_tx_power(int8_t power)
|
|||
power = 17;
|
||||
}
|
||||
paConfig = (paConfig & RF_PACONFIG_OUTPUTPOWER_MASK)
|
||||
| (uint8_t) ((uint16_t) (power - 2) & 0x0F);
|
||||
| (uint8_t)((uint16_t)(power - 2) & 0x0F);
|
||||
}
|
||||
} else {
|
||||
if (power < -1) {
|
||||
|
@ -1509,10 +1503,10 @@ void SX1276_LoRaRadio::set_rf_tx_power(int8_t power)
|
|||
power = 14;
|
||||
}
|
||||
paConfig = (paConfig & RF_PACONFIG_OUTPUTPOWER_MASK)
|
||||
| (uint8_t) ((uint16_t) (power + 1) & 0x0F);
|
||||
| (uint8_t)((uint16_t)(power + 1) & 0x0F);
|
||||
}
|
||||
write_to_register( REG_PACONFIG, paConfig);
|
||||
write_to_register( REG_PADAC, paDac);
|
||||
write_to_register(REG_PACONFIG, paConfig);
|
||||
write_to_register(REG_PADAC, paDac);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1534,7 +1528,7 @@ void SX1276_LoRaRadio::transmit(uint32_t timeout)
|
|||
// DIO3=FifoEmpty
|
||||
// DIO4=LowBat
|
||||
// DIO5=ModeReady
|
||||
write_to_register(REG_DIOMAPPING1,(read_register(REG_DIOMAPPING1) &
|
||||
write_to_register(REG_DIOMAPPING1, (read_register(REG_DIOMAPPING1) &
|
||||
RF_DIOMAPPING1_DIO0_MASK &
|
||||
RF_DIOMAPPING1_DIO1_MASK &
|
||||
RF_DIOMAPPING1_DIO2_MASK) |
|
||||
|
@ -1577,7 +1571,7 @@ void SX1276_LoRaRadio::transmit(uint32_t timeout)
|
|||
RFLR_IRQFLAGS_CADDETECTED);
|
||||
|
||||
// DIO0=tx_done
|
||||
write_to_register(REG_DIOMAPPING1,(read_register(REG_DIOMAPPING1) &
|
||||
write_to_register(REG_DIOMAPPING1, (read_register(REG_DIOMAPPING1) &
|
||||
RFLR_DIOMAPPING1_DIO0_MASK) |
|
||||
RFLR_DIOMAPPING1_DIO0_01);
|
||||
}
|
||||
|
@ -1708,7 +1702,7 @@ void SX1276_LoRaRadio::set_antenna_switch(uint8_t mode)
|
|||
}
|
||||
_rxctl = 0;
|
||||
}
|
||||
if (_rf_ctrls.ant_switch != NC){
|
||||
if (_rf_ctrls.ant_switch != NC) {
|
||||
_ant_switch = 1;
|
||||
}
|
||||
break;
|
||||
|
@ -1877,17 +1871,17 @@ void SX1276_LoRaRadio::handle_dio0_irq()
|
|||
-(read_register(REG_RSSIVALUE) >> 1);
|
||||
|
||||
_rf_settings.fsk_packet_handler.afc_value =
|
||||
(int32_t) (float) (((uint16_t) read_register(REG_AFCMSB) << 8)
|
||||
| (uint16_t) read_register( REG_AFCLSB))
|
||||
(int32_t)(float)(((uint16_t) read_register(REG_AFCMSB) << 8)
|
||||
| (uint16_t) read_register(REG_AFCLSB))
|
||||
* (float) FREQ_STEP;
|
||||
_rf_settings.fsk_packet_handler.rx_gain =
|
||||
(read_register( REG_LNA) >> 5) & 0x07;
|
||||
(read_register(REG_LNA) >> 5) & 0x07;
|
||||
|
||||
// Read received packet size
|
||||
if ((_rf_settings.fsk_packet_handler.size == 0)
|
||||
&& (_rf_settings.fsk_packet_handler.nb_bytes == 0)) {
|
||||
if (_rf_settings.fsk.fix_len == false) {
|
||||
read_fifo((uint8_t*) &_rf_settings.fsk_packet_handler.size, 1);
|
||||
read_fifo((uint8_t *) &_rf_settings.fsk_packet_handler.size, 1);
|
||||
} else {
|
||||
_rf_settings.fsk_packet_handler.size = read_register(REG_PAYLOADLENGTH);
|
||||
}
|
||||
|
@ -1932,7 +1926,7 @@ void SX1276_LoRaRadio::handle_dio0_irq()
|
|||
if ((irqFlags & RFLR_IRQFLAGS_PAYLOADCRCERROR_MASK)
|
||||
== RFLR_IRQFLAGS_PAYLOADCRCERROR) {
|
||||
// Clear Irq
|
||||
write_to_register( REG_LR_IRQFLAGS, RFLR_IRQFLAGS_PAYLOADCRCERROR);
|
||||
write_to_register(REG_LR_IRQFLAGS, RFLR_IRQFLAGS_PAYLOADCRCERROR);
|
||||
|
||||
if (_rf_settings.lora.rx_continuous == false) {
|
||||
_rf_settings.state = RF_IDLE;
|
||||
|
@ -1947,8 +1941,7 @@ void SX1276_LoRaRadio::handle_dio0_irq()
|
|||
|
||||
_rf_settings.lora_packet_handler.snr_value = read_register(
|
||||
REG_LR_PKTSNRVALUE);
|
||||
if (_rf_settings.lora_packet_handler.snr_value & 0x80) // The SNR sign bit is 1
|
||||
{
|
||||
if (_rf_settings.lora_packet_handler.snr_value & 0x80) { // The SNR sign bit is 1
|
||||
// Invert and divide by 4
|
||||
snr = ((~_rf_settings.lora_packet_handler.snr_value + 1)
|
||||
& 0xFF) >> 2;
|
||||
|
@ -1960,7 +1953,7 @@ void SX1276_LoRaRadio::handle_dio0_irq()
|
|||
& 0xFF) >> 2;
|
||||
}
|
||||
|
||||
int16_t rssi = read_register( REG_LR_PKTRSSIVALUE);
|
||||
int16_t rssi = read_register(REG_LR_PKTRSSIVALUE);
|
||||
if (snr < 0) {
|
||||
if (_rf_settings.channel > RF_MID_BAND_THRESH) {
|
||||
_rf_settings.lora_packet_handler.rssi_value =
|
||||
|
@ -2032,7 +2025,7 @@ void SX1276_LoRaRadio::handle_dio1_irq()
|
|||
if ((_rf_settings.fsk_packet_handler.size == 0)
|
||||
&& (_rf_settings.fsk_packet_handler.nb_bytes == 0)) {
|
||||
if (_rf_settings.fsk.fix_len == false) {
|
||||
read_fifo((uint8_t*) &_rf_settings.fsk_packet_handler.size, 1);
|
||||
read_fifo((uint8_t *) &_rf_settings.fsk_packet_handler.size, 1);
|
||||
} else {
|
||||
_rf_settings.fsk_packet_handler.size =
|
||||
read_register(REG_PAYLOADLENGTH);
|
||||
|
@ -2122,11 +2115,11 @@ void SX1276_LoRaRadio::handle_dio2_irq(void)
|
|||
RF_IRQFLAGS1_SYNCADDRESSMATCH |
|
||||
RF_IRQFLAGS1_TIMEOUT);
|
||||
|
||||
write_to_register( REG_IRQFLAGS2, RF_IRQFLAGS2_FIFOOVERRUN);
|
||||
write_to_register(REG_IRQFLAGS2, RF_IRQFLAGS2_FIFOOVERRUN);
|
||||
|
||||
if (_rf_settings.fsk.rx_continuous == true) {
|
||||
// Continuous mode restart Rx chain
|
||||
write_to_register( REG_RXCONFIG,
|
||||
write_to_register(REG_RXCONFIG,
|
||||
read_register(REG_RXCONFIG) |
|
||||
RF_RXCONFIG_RESTARTRXWITHOUTPLLLOCK);
|
||||
} else {
|
||||
|
|
|
@ -33,7 +33,7 @@ SPDX-License-Identifier: BSD-3-Clause
|
|||
#include "SPI.h"
|
||||
#include "platform/PlatformMutex.h"
|
||||
#ifdef MBED_CONF_RTOS_PRESENT
|
||||
#include "rtos/Thread.h"
|
||||
#include "rtos/Thread.h"
|
||||
#endif
|
||||
|
||||
#include "lorawan/LoRaRadio.h"
|
||||
|
@ -160,7 +160,7 @@ public:
|
|||
* @param rx_continuous Sets the reception in continuous mode
|
||||
* [false: single mode, true: continuous mode]
|
||||
*/
|
||||
virtual void set_rx_config (radio_modems_t modem, uint32_t bandwidth,
|
||||
virtual void set_rx_config(radio_modems_t modem, uint32_t bandwidth,
|
||||
uint32_t datarate, uint8_t coderate,
|
||||
uint32_t bandwidth_afc, uint16_t preamble_len,
|
||||
uint16_t symb_timeout, bool fix_len,
|
||||
|
|
Loading…
Reference in New Issue