diff --git a/src/modules/LR11x0/LR11x0.cpp b/src/modules/LR11x0/LR11x0.cpp index 2fa5176a..bbcce818 100644 --- a/src/modules/LR11x0/LR11x0.cpp +++ b/src/modules/LR11x0/LR11x0.cpp @@ -1291,26 +1291,39 @@ RadioLibTime_t LR11x0::getTimeOnAir(size_t len) { } else if (cr == 7) { cr = cr + 1; } - dr = {.lora = { .spreadingFactor = this->spreadingFactor, .bandwidth = this->bandwidthKhz, .codingRate = cr } }; - pc = {.lora = { .preambleLength = this->preambleLengthLoRa, .implicitHeader = (this->headerType == RADIOLIB_LR11X0_LORA_HEADER_IMPLICIT) ? true : false, \ - .crcEnabled = (this->crcTypeLoRa == RADIOLIB_LR11X0_LORA_CRC_ENABLED) ? true : false, \ - .ldrOptimize = (bool)this->ldrOptimize } }; + + dr.lora.spreadingFactor = this->spreadingFactor; + dr.lora.bandwidth = this->bandwidthKhz; + dr.lora.codingRate = cr; + + pc.lora.preambleLength = this->preambleLengthLoRa; + pc.lora.implicitHeader = (this->headerType == RADIOLIB_LR11X0_LORA_HEADER_IMPLICIT) ? true : false; + pc.lora.crcEnabled = (this->crcTypeLoRa == RADIOLIB_LR11X0_LORA_CRC_ENABLED) ? true : false; + pc.lora.ldrOptimize = (bool)this->ldrOptimize; break; } case ModemType_t::RADIOLIB_MODEM_FSK: { - dr = {.fsk = { .bitRate = (float)this->bitRate / 1000.0f, .freqDev = (float)this->frequencyDev } }; + dr.fsk.bitRate = (float)this->bitRate / 1000.0f; + dr.fsk.freqDev = (float)this->frequencyDev; + uint8_t crcLen = 0; if(this->crcTypeGFSK == RADIOLIB_LR11X0_GFSK_CRC_1_BYTE || this->crcTypeGFSK == RADIOLIB_LR11X0_GFSK_CRC_1_BYTE_INV) { crcLen = 1; } else if(this->crcTypeGFSK == RADIOLIB_LR11X0_GFSK_CRC_2_BYTE || this->crcTypeGFSK == RADIOLIB_LR11X0_GFSK_CRC_2_BYTE_INV) { crcLen = 2; } - pc = {.fsk = { .preambleLength = this->preambleLengthGFSK, .syncWordLength = this->syncWordLength, .crcLength = crcLen } }; + + pc.fsk.preambleLength = this->preambleLengthGFSK; + pc.fsk.syncWordLength = this->syncWordLength; + pc.fsk.crcLength = crcLen; break; } case ModemType_t::RADIOLIB_MODEM_LRFHSS: { - dr = {.lrFhss = { .bw = this->lrFhssBw, .cr = this->lrFhssCr, .narrowGrid = (this->lrFhssGrid == RADIOLIB_LR11X0_LR_FHSS_GRID_STEP_NON_FCC) ? true : false } }; - pc = {.lrFhss = { .hdrCount = this->lrFhssHdrCount } }; + dr.lrFhss.bw = this->lrFhssBw; + dr.lrFhss.cr = this->lrFhssCr; + dr.lrFhss.narrowGrid = (this->lrFhssGrid == RADIOLIB_LR11X0_LR_FHSS_GRID_STEP_NON_FCC) ? true : false; + + pc.lrFhss.hdrCount = this->lrFhssHdrCount; break; } default: diff --git a/src/modules/SX126x/SX126x.cpp b/src/modules/SX126x/SX126x.cpp index f6876efd..ad518574 100644 --- a/src/modules/SX126x/SX126x.cpp +++ b/src/modules/SX126x/SX126x.cpp @@ -1428,23 +1428,40 @@ RadioLibTime_t SX126x::getTimeOnAir(size_t len) { PacketConfig_t packetConfig = {}; if(type == RADIOLIB_SX126X_PACKET_TYPE_LORA) { - dataRate = {.lora = {.spreadingFactor = this->spreadingFactor, .bandwidth = this->bandwidthKhz, .codingRate = (uint8_t)(this->codingRate + 4) } }; - packetConfig = {.lora = {.preambleLength = this->preambleLengthLoRa, .implicitHeader = this->headerType == RADIOLIB_SX126X_LORA_HEADER_IMPLICIT, .crcEnabled = (bool)this->crcTypeLoRa, .ldrOptimize = (bool)this->ldrOptimize}}; + dataRate.lora.spreadingFactor = this->spreadingFactor; + dataRate.lora.bandwidth = this->bandwidthKhz; + dataRate.lora.codingRate = (uint8_t)(this->codingRate + 4); + + packetConfig.lora.preambleLength = this->preambleLengthLoRa; + packetConfig.lora.crcEnabled = (bool)this->crcTypeLoRa; + packetConfig.lora.implicitHeader = this->headerType == RADIOLIB_SX126X_LORA_HEADER_IMPLICIT; + packetConfig.lora.ldrOptimize = (bool)this->ldrOptimize; } else if(type == RADIOLIB_SX126X_PACKET_TYPE_GFSK) { modem = RADIOLIB_MODEM_FSK; + float bitRate = RADIOLIB_SX126X_CRYSTAL_FREQ * 32.0f * 1000.0f / (float)this->bitRate; - dataRate = {.fsk = {.bitRate = bitRate, .freqDev = (float)this->frequencyDev }}; + + dataRate.fsk.bitRate = bitRate; + dataRate.fsk.freqDev = (float)this->frequencyDev; + uint8_t crcLen = 0; if(this->crcTypeFSK == RADIOLIB_SX126X_GFSK_CRC_1_BYTE || this->crcTypeFSK == RADIOLIB_SX126X_GFSK_CRC_1_BYTE_INV) { crcLen = 1; } else if(this->crcTypeFSK == RADIOLIB_SX126X_GFSK_CRC_2_BYTE || this->crcTypeFSK == RADIOLIB_SX126X_GFSK_CRC_2_BYTE_INV) { crcLen = 2; } - packetConfig = {.fsk = {.preambleLength = this->preambleLengthFSK, .syncWordLength = this->syncWordLength, .crcLength = crcLen}}; + + packetConfig.fsk.preambleLength = this->preambleLengthFSK; + packetConfig.fsk.syncWordLength = this->syncWordLength; + packetConfig.fsk.crcLength = crcLen; } else if(type == RADIOLIB_SX126X_PACKET_TYPE_LR_FHSS) { modem = RADIOLIB_MODEM_LRFHSS; - dataRate = {.lrFhss = {.bw = this->lrFhssBw, .cr = this->lrFhssCr, .narrowGrid = this->lrFhssGridNonFcc }}; - packetConfig = {.lrFhss = {.hdrCount = this->lrFhssHdrCount}}; + + dataRate.lrFhss.bw = this->lrFhssBw; + dataRate.lrFhss.cr = this->lrFhssCr; + dataRate.lrFhss.narrowGrid = this->lrFhssGridNonFcc; + + packetConfig.lrFhss.hdrCount = this->lrFhssHdrCount; } else { return(RADIOLIB_ERR_WRONG_MODEM); } diff --git a/src/modules/SX127x/SX127x.cpp b/src/modules/SX127x/SX127x.cpp index c4565515..a1574e23 100644 --- a/src/modules/SX127x/SX127x.cpp +++ b/src/modules/SX127x/SX127x.cpp @@ -1178,17 +1178,23 @@ RadioLibTime_t SX127x::getTimeOnAir(size_t len) { switch (modem) { case(RADIOLIB_SX127X_LORA): { + dataRate.lora.spreadingFactor = this->spreadingFactor; + dataRate.lora.bandwidth = this->bandwidth; + dataRate.lora.codingRate = this->codingRate; + // Get number of preamble symbols uint16_t n_pre = ((this->mod->SPIgetRegValue(RADIOLIB_SX127X_REG_PREAMBLE_MSB) << 8) | this->mod->SPIgetRegValue(RADIOLIB_SX127X_REG_PREAMBLE_LSB)); - dataRate = { .lora = { .spreadingFactor = this->spreadingFactor, .bandwidth = this->bandwidth, .codingRate = this->codingRate } }; - - packetConfig = { .lora = { .preambleLength = n_pre, .implicitHeader = this->implicitHdr, .crcEnabled = this->crcEnabled, .ldrOptimize = this->ldroEnabled } }; + packetConfig.lora.preambleLength = n_pre; + packetConfig.lora.implicitHeader = this->implicitHdr; + packetConfig.lora.crcEnabled = this->crcEnabled; + packetConfig.lora.ldrOptimize = this->ldroEnabled; return(calculateTimeOnAir((ModemType_t)RADIOLIB_MODEM_LORA, dataRate, packetConfig, len)); } case(RADIOLIB_SX127X_FSK_OOK): { - dataRate = { .fsk = { .bitRate = this->bitRate, .freqDev = this->frequencyDev } }; + dataRate.fsk.bitRate = this->bitRate; + dataRate.fsk.freqDev = this->frequencyDev; // get number of bits preamble uint16_t n_pre = (uint16_t) ((this->mod->SPIgetRegValue(RADIOLIB_SX127X_REG_PREAMBLE_MSB_FSK) << 8) | this->mod->SPIgetRegValue(RADIOLIB_SX127X_REG_PREAMBLE_LSB_FSK)) * 8; @@ -1205,7 +1211,9 @@ RadioLibTime_t SX127x::getTimeOnAir(size_t len) { len += 1; } - packetConfig = { .fsk = { .preambleLength = n_pre, .syncWordLength = n_syncWord, .crcLength = (uint8_t)(crcEnabled * 2) } }; + packetConfig.fsk.preambleLength = n_pre; + packetConfig.fsk.syncWordLength = n_syncWord; + packetConfig.fsk.crcLength = (uint8_t)(crcEnabled * 2); return(calculateTimeOnAir((ModemType_t)RADIOLIB_MODEM_FSK, dataRate, packetConfig, len)); } diff --git a/src/modules/SX128x/SX128x.cpp b/src/modules/SX128x/SX128x.cpp index b13ad6d3..63b6b280 100644 --- a/src/modules/SX128x/SX128x.cpp +++ b/src/modules/SX128x/SX128x.cpp @@ -1397,8 +1397,8 @@ RadioLibTime_t SX128x::calculateTimeOnAir(ModemType_t modem, DataRate_t dr, Pack RadioLibTime_t SX128x::getTimeOnAir(size_t len) { // check active modem uint8_t modem = getPacketType(); - DataRate_t dr; - PacketConfig_t pc; + DataRate_t dr = {}; + PacketConfig_t pc = {}; if(modem == RADIOLIB_SX128X_PACKET_TYPE_LORA) { uint8_t sf = this->spreadingFactor >> 4; @@ -1409,19 +1409,30 @@ RadioLibTime_t SX128x::getTimeOnAir(size_t len) { } else if (cr == 7) { cr = cr + 1; } - dr = {.lora = {.spreadingFactor = sf, .bandwidth = this->bandwidthKhz, .codingRate = cr}}; + + dr.lora.spreadingFactor = sf; + dr.lora.codingRate = cr; + dr.lora.bandwidth = this->bandwidthKhz; uint16_t preambleLength = (this->preambleLengthLoRa & 0x0F) * (uint32_t(1) << ((this->preambleLengthLoRa & 0xF0) >> 4)); - pc = {.lora = { .preambleLength = preambleLength, .implicitHeader = this->headerType == RADIOLIB_SX128X_LORA_HEADER_IMPLICIT, .crcEnabled = this->crcLoRa == RADIOLIB_SX128X_LORA_CRC_ON, .ldrOptimize = false }}; + + pc.lora.preambleLength = preambleLength; + pc.lora.implicitHeader = this->headerType == RADIOLIB_SX128X_LORA_HEADER_IMPLICIT; + pc.lora.crcEnabled = this->crcLoRa == RADIOLIB_SX128X_LORA_CRC_ON; + pc.lora.ldrOptimize = false; return(calculateTimeOnAir(ModemType_t::RADIOLIB_MODEM_LORA, dr, pc, len)); } else if (modem == RADIOLIB_SX128X_PACKET_TYPE_GFSK) { - dr = {.fsk = {.bitRate = (float)this->bitRateKbps, .freqDev = this->frequencyDev}}; + dr.fsk.bitRate = (float)this->bitRateKbps; + dr.fsk.freqDev = this->frequencyDev; uint8_t crcLength = this->crcGFSK >> 4; uint16_t preambleLength = (this->preambleLengthGFSK >> 2) + 4; uint8_t syncWordLen = ((this->syncWordLen >> 1) + 1) * 8; - pc = {.fsk = {.preambleLength = preambleLength, .syncWordLength = syncWordLen, .crcLength = crcLength}}; + + pc.fsk.preambleLength = preambleLength; + pc.fsk.syncWordLength = syncWordLen; + pc.fsk.crcLength = crcLength; return(calculateTimeOnAir(ModemType_t::RADIOLIB_MODEM_FSK, dr, pc, len)); } else {