feat: add tx_params_t structure and related functions for transmission parameter management
This commit is contained in:
@ -28,6 +28,26 @@ enum LoRaBandwidth : uint8_t {
|
||||
BW_500_0 = 0x06,
|
||||
};
|
||||
|
||||
// - RampTime Value RampTime (µs)
|
||||
// - SET_RAMP_10U 0x00 10
|
||||
// - SET_RAMP_20U 0x01 20
|
||||
// - SET_RAMP_ 40U 0x02 40
|
||||
// - SET_RAMP_80U 0x03 80
|
||||
// - SET_RAMP_200U 0x04 200
|
||||
// - SET_RAMP_800U 0x05 800
|
||||
// - SET_RAMP_1700U 0x06 1700
|
||||
// - SET_RAMP_3400U 0x07 3400
|
||||
enum TxRampTime : uint8_t {
|
||||
SET_RAMP_10U = 0x00,
|
||||
SET_RAMP_20U = 0x01,
|
||||
SET_RAMP_40U = 0x02,
|
||||
SET_RAMP_80U = 0x03,
|
||||
SET_RAMP_200U = 0x04,
|
||||
SET_RAMP_800U = 0x05,
|
||||
SET_RAMP_1700U = 0x06,
|
||||
SET_RAMP_3400U = 0x07,
|
||||
};
|
||||
|
||||
enum RegulatorMode : uint8_t {
|
||||
REGULATOR_LDO = RADIOLIB_SX126X_REGULATOR_LDO,
|
||||
REGULATOR_DC_DC = RADIOLIB_SX126X_REGULATOR_DC_DC,
|
||||
@ -143,9 +163,62 @@ struct packet_params_t {
|
||||
}
|
||||
};
|
||||
|
||||
inline const char *to_str(llcc68::TxRampTime ramp_time) {
|
||||
switch (ramp_time) {
|
||||
case llcc68::SET_RAMP_10U:
|
||||
return "10us";
|
||||
case llcc68::SET_RAMP_20U:
|
||||
return "20us";
|
||||
case llcc68::SET_RAMP_40U:
|
||||
return "40us";
|
||||
case llcc68::SET_RAMP_80U:
|
||||
return "80us";
|
||||
case llcc68::SET_RAMP_200U:
|
||||
return "200us";
|
||||
case llcc68::SET_RAMP_800U:
|
||||
return "800us";
|
||||
case llcc68::SET_RAMP_1700U:
|
||||
return "1700us";
|
||||
case llcc68::SET_RAMP_3400U:
|
||||
return "3400us";
|
||||
default:
|
||||
return "Unknown";
|
||||
}
|
||||
}
|
||||
|
||||
struct tx_params_t {
|
||||
/**
|
||||
* @brief magic number for automatic max TX power depending on
|
||||
* chip type
|
||||
*/
|
||||
static constexpr auto TX_POWER_AUTO = 0x7f;
|
||||
static constexpr auto MAX_POWER_HIGH_PA = 22;
|
||||
static constexpr auto MAX_POWER_LOW_PA = 14;
|
||||
|
||||
int8_t power;
|
||||
TxRampTime ramp_time;
|
||||
|
||||
static tx_params_t Default() {
|
||||
return tx_params_t{
|
||||
.power = MAX_POWER_HIGH_PA,
|
||||
.ramp_time = SET_RAMP_200U,
|
||||
};
|
||||
}
|
||||
[[nodiscard]]
|
||||
std::string to_string() const {
|
||||
if (power == TX_POWER_AUTO) {
|
||||
return "tx_params: power=auto, ramp_time=" + std::string(to_str(ramp_time));
|
||||
}
|
||||
return std::format("tx_params: power={}, ramp_time={}",
|
||||
power,
|
||||
to_str(ramp_time));
|
||||
}
|
||||
};
|
||||
|
||||
struct lora_parameters_t {
|
||||
modulation_params_t mod_params;
|
||||
packet_params_t packet_params;
|
||||
tx_params_t tx_params;
|
||||
freq_t frequency;
|
||||
uint8_t sync_word;
|
||||
|
||||
@ -153,6 +226,7 @@ struct lora_parameters_t {
|
||||
return lora_parameters_t{
|
||||
.mod_params = modulation_params_t::Default(),
|
||||
.packet_params = packet_params_t::Default(),
|
||||
.tx_params = tx_params_t::Default(),
|
||||
.frequency = DEFAULT_FREQUENCY,
|
||||
.sync_word = DEFAULT_SYNC_WORD,
|
||||
};
|
||||
@ -365,6 +439,7 @@ struct __attribute__((packed)) DeviceErrors {
|
||||
|
||||
// MSB
|
||||
|
||||
[[nodiscard]]
|
||||
std::string to_string() const {
|
||||
auto ss = std::stringstream();
|
||||
ss << "DeviceErrors{";
|
||||
@ -502,6 +577,38 @@ constexpr bool valid_sf(const uint8_t bw, const uint8_t sf) {
|
||||
}
|
||||
}
|
||||
|
||||
constexpr bool valid_tx_power(int8_t power) {
|
||||
if (power == tx_params_t::TX_POWER_AUTO) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (power >= -9 && power <= 22) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (power >= -17 && power <= 14) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
constexpr bool valid_ramp_time(const llcc68::TxRampTime ramp_time) {
|
||||
switch (ramp_time) {
|
||||
case llcc68::SET_RAMP_10U:
|
||||
case llcc68::SET_RAMP_20U:
|
||||
case llcc68::SET_RAMP_40U:
|
||||
case llcc68::SET_RAMP_80U:
|
||||
case llcc68::SET_RAMP_200U:
|
||||
case llcc68::SET_RAMP_800U:
|
||||
case llcc68::SET_RAMP_1700U:
|
||||
case llcc68::SET_RAMP_3400U:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
constexpr bool valid_freq(const freq_t freq) {
|
||||
return in_range(freq, freq_t{150.0}, freq_t{960.0});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user