mirror of
https://github.com/meshtastic/firmware.git
synced 2026-01-24 18:57:43 +00:00
Compare commits
2 Commits
status-mes
...
v2.7.18.fb
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4744010295 | ||
|
|
d8d02cd6ec |
@@ -43,13 +43,11 @@ class Esp32C3ExceptionDecoder(DeviceMonitorFilterBase):
|
|||||||
self.enabled = self.setup_paths()
|
self.enabled = self.setup_paths()
|
||||||
|
|
||||||
if self.config.get("env:" + self.environment, "build_type") != "debug":
|
if self.config.get("env:" + self.environment, "build_type") != "debug":
|
||||||
print(
|
print("""
|
||||||
"""
|
|
||||||
Please build project in debug configuration to get more details about an exception.
|
Please build project in debug configuration to get more details about an exception.
|
||||||
See https://docs.platformio.org/page/projectconf/build_configurations.html
|
See https://docs.platformio.org/page/projectconf/build_configurations.html
|
||||||
|
|
||||||
"""
|
""")
|
||||||
)
|
|
||||||
|
|
||||||
return self
|
return self
|
||||||
|
|
||||||
|
|||||||
@@ -155,6 +155,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Default system gain to 0 if not defined
|
// Default system gain to 0 if not defined
|
||||||
|
#ifndef NUM_PA_POINTS
|
||||||
|
#define NUM_PA_POINTS 1
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef TX_GAIN_LORA
|
#ifndef TX_GAIN_LORA
|
||||||
#define TX_GAIN_LORA 0
|
#define TX_GAIN_LORA 0
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -666,18 +666,24 @@ void RadioInterface::limitPower(int8_t loraMaxPower)
|
|||||||
power = maxPower;
|
power = maxPower;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef NUM_PA_POINTS
|
#ifdef ARCH_PORTDUINO
|
||||||
if (TX_GAIN_LORA > 0 && !devicestate.owner.is_licensed) {
|
size_t num_pa_points = portduino_config.num_pa_points;
|
||||||
LOG_INFO("Requested Tx power: %d dBm; Device LoRa Tx gain: %d dB", power, TX_GAIN_LORA);
|
const uint16_t *tx_gain = portduino_config.tx_gain_lora;
|
||||||
power -= TX_GAIN_LORA;
|
|
||||||
}
|
|
||||||
#else
|
#else
|
||||||
if (!devicestate.owner.is_licensed) {
|
size_t num_pa_points = NUM_PA_POINTS;
|
||||||
|
const uint16_t tx_gain[NUM_PA_POINTS] = {TX_GAIN_LORA};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (num_pa_points == 1) {
|
||||||
|
if (tx_gain[0] > 0 && !devicestate.owner.is_licensed) {
|
||||||
|
LOG_INFO("Requested Tx power: %d dBm; Device LoRa Tx gain: %d dB", power, tx_gain[0]);
|
||||||
|
power -= tx_gain[0];
|
||||||
|
}
|
||||||
|
} else if (!devicestate.owner.is_licensed) {
|
||||||
// we have an array of PA gain values. Find the highest power setting that works.
|
// we have an array of PA gain values. Find the highest power setting that works.
|
||||||
const uint16_t tx_gain[NUM_PA_POINTS] = {TX_GAIN_LORA};
|
for (int radio_dbm = 0; radio_dbm < num_pa_points; radio_dbm++) {
|
||||||
for (int radio_dbm = 0; radio_dbm < NUM_PA_POINTS; radio_dbm++) {
|
|
||||||
if (((radio_dbm + tx_gain[radio_dbm]) > power) ||
|
if (((radio_dbm + tx_gain[radio_dbm]) > power) ||
|
||||||
((radio_dbm == (NUM_PA_POINTS - 1)) && ((radio_dbm + tx_gain[radio_dbm]) <= power))) {
|
((radio_dbm == (num_pa_points - 1)) && ((radio_dbm + tx_gain[radio_dbm]) <= power))) {
|
||||||
// we've exceeded the power limit, or hit the max we can do
|
// we've exceeded the power limit, or hit the max we can do
|
||||||
LOG_INFO("Requested Tx power: %d dBm; Device LoRa Tx gain: %d dB", power, tx_gain[radio_dbm]);
|
LOG_INFO("Requested Tx power: %d dBm; Device LoRa Tx gain: %d dB", power, tx_gain[radio_dbm]);
|
||||||
power -= tx_gain[radio_dbm];
|
power -= tx_gain[radio_dbm];
|
||||||
@@ -685,7 +691,7 @@ void RadioInterface::limitPower(int8_t loraMaxPower)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
if (power > loraMaxPower) // Clamp power to maximum defined level
|
if (power > loraMaxPower) // Clamp power to maximum defined level
|
||||||
power = loraMaxPower;
|
power = loraMaxPower;
|
||||||
|
|
||||||
|
|||||||
@@ -61,11 +61,12 @@ static error_t parse_opt(int key, char *arg, struct argp_state *state)
|
|||||||
{
|
{
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case 'p':
|
case 'p':
|
||||||
if (sscanf(arg, "%d", &TCPPort) < 1)
|
if (sscanf(arg, "%d", &TCPPort) < 1) {
|
||||||
return ARGP_ERR_UNKNOWN;
|
return ARGP_ERR_UNKNOWN;
|
||||||
else
|
} else {
|
||||||
checkConfigPort = false;
|
checkConfigPort = false;
|
||||||
printf("Using config file %d\n", TCPPort);
|
printf("Using config file %d\n", TCPPort);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 'c':
|
case 'c':
|
||||||
configPath = arg;
|
configPath = arg;
|
||||||
@@ -649,6 +650,19 @@ bool loadConfig(const char *configPath)
|
|||||||
if (yamlConfig["Lora"]["RF95_MAX_POWER"])
|
if (yamlConfig["Lora"]["RF95_MAX_POWER"])
|
||||||
portduino_config.rf95_max_power = yamlConfig["Lora"]["RF95_MAX_POWER"].as<int>(20);
|
portduino_config.rf95_max_power = yamlConfig["Lora"]["RF95_MAX_POWER"].as<int>(20);
|
||||||
|
|
||||||
|
if (yamlConfig["Lora"]["TX_GAIN_LORA"]) {
|
||||||
|
YAML::Node tx_gain_node = yamlConfig["Lora"]["TX_GAIN_LORA"];
|
||||||
|
if (tx_gain_node.IsSequence() && tx_gain_node.size() != 0) {
|
||||||
|
portduino_config.num_pa_points = min(tx_gain_node.size(), std::size(portduino_config.tx_gain_lora));
|
||||||
|
for (int i = 0; i < portduino_config.num_pa_points; i++) {
|
||||||
|
portduino_config.tx_gain_lora[i] = tx_gain_node[i].as<int>();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
portduino_config.num_pa_points = 1;
|
||||||
|
portduino_config.tx_gain_lora[0] = tx_gain_node.as<int>(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (portduino_config.lora_module != use_autoconf && portduino_config.lora_module != use_simradio &&
|
if (portduino_config.lora_module != use_autoconf && portduino_config.lora_module != use_simradio &&
|
||||||
!portduino_config.force_simradio) {
|
!portduino_config.force_simradio) {
|
||||||
portduino_config.dio2_as_rf_switch = yamlConfig["Lora"]["DIO2_AS_RF_SWITCH"].as<bool>(false);
|
portduino_config.dio2_as_rf_switch = yamlConfig["Lora"]["DIO2_AS_RF_SWITCH"].as<bool>(false);
|
||||||
@@ -874,10 +888,8 @@ bool loadConfig(const char *configPath)
|
|||||||
}
|
}
|
||||||
if (checkConfigPort) {
|
if (checkConfigPort) {
|
||||||
portduino_config.api_port = (yamlConfig["General"]["APIPort"]).as<int>(-1);
|
portduino_config.api_port = (yamlConfig["General"]["APIPort"]).as<int>(-1);
|
||||||
if (portduino_config.api_port != -1 &&
|
if (portduino_config.api_port != -1 && portduino_config.api_port > 1023 && portduino_config.api_port < 65536) {
|
||||||
portduino_config.api_port > 1023 &&
|
TCPPort = (portduino_config.api_port);
|
||||||
portduino_config.api_port < 65536) {
|
|
||||||
TCPPort = (portduino_config.api_port);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
portduino_config.mac_address = (yamlConfig["General"]["MACAddress"]).as<std::string>("");
|
portduino_config.mac_address = (yamlConfig["General"]["MACAddress"]).as<std::string>("");
|
||||||
|
|||||||
@@ -91,6 +91,8 @@ extern struct portduino_config_struct {
|
|||||||
int lora_usb_pid = 0x5512;
|
int lora_usb_pid = 0x5512;
|
||||||
int lora_usb_vid = 0x1A86;
|
int lora_usb_vid = 0x1A86;
|
||||||
int spiSpeed = 2000000;
|
int spiSpeed = 2000000;
|
||||||
|
int num_pa_points = 1; // default to 1 point, with 0 gain
|
||||||
|
uint16_t tx_gain_lora[22] = {0};
|
||||||
pinMapping lora_cs_pin = {"Lora", "CS"};
|
pinMapping lora_cs_pin = {"Lora", "CS"};
|
||||||
pinMapping lora_irq_pin = {"Lora", "IRQ"};
|
pinMapping lora_irq_pin = {"Lora", "IRQ"};
|
||||||
pinMapping lora_busy_pin = {"Lora", "Busy"};
|
pinMapping lora_busy_pin = {"Lora", "Busy"};
|
||||||
@@ -231,6 +233,17 @@ extern struct portduino_config_struct {
|
|||||||
out << YAML::Key << "LR1120_MAX_POWER" << YAML::Value << lr1120_max_power;
|
out << YAML::Key << "LR1120_MAX_POWER" << YAML::Value << lr1120_max_power;
|
||||||
if (rf95_max_power != 20)
|
if (rf95_max_power != 20)
|
||||||
out << YAML::Key << "RF95_MAX_POWER" << YAML::Value << rf95_max_power;
|
out << YAML::Key << "RF95_MAX_POWER" << YAML::Value << rf95_max_power;
|
||||||
|
|
||||||
|
if (num_pa_points > 1) {
|
||||||
|
out << YAML::Key << "TX_GAIN_LORA" << YAML::Value << YAML::Flow << YAML::BeginSeq;
|
||||||
|
for (int i = 0; i < num_pa_points; i++) {
|
||||||
|
out << YAML::Value << tx_gain_lora[i];
|
||||||
|
}
|
||||||
|
out << YAML::EndSeq;
|
||||||
|
} else if (tx_gain_lora[0] != 0) {
|
||||||
|
out << YAML::Key << "TX_GAIN_LORA" << YAML::Value << tx_gain_lora[0];
|
||||||
|
}
|
||||||
|
|
||||||
out << YAML::Key << "DIO2_AS_RF_SWITCH" << YAML::Value << dio2_as_rf_switch;
|
out << YAML::Key << "DIO2_AS_RF_SWITCH" << YAML::Value << dio2_as_rf_switch;
|
||||||
if (dio3_tcxo_voltage != 0)
|
if (dio3_tcxo_voltage != 0)
|
||||||
out << YAML::Key << "DIO3_TCXO_VOLTAGE" << YAML::Value << YAML::Precision(3) << (float)dio3_tcxo_voltage / 1000;
|
out << YAML::Key << "DIO3_TCXO_VOLTAGE" << YAML::Value << YAML::Precision(3) << (float)dio3_tcxo_voltage / 1000;
|
||||||
|
|||||||
@@ -8,7 +8,8 @@
|
|||||||
// DIO6 -> RFSW1_V2
|
// DIO6 -> RFSW1_V2
|
||||||
// DIO7 -> not connected on E80 module - note that GNSS and Wifi scanning are not possible.
|
// DIO7 -> not connected on E80 module - note that GNSS and Wifi scanning are not possible.
|
||||||
|
|
||||||
static const uint32_t rfswitch_dio_pins[] = {RADIOLIB_LR11X0_DIO5, RADIOLIB_LR11X0_DIO6, RADIOLIB_LR11X0_DIO7, RADIOLIB_NC, RADIOLIB_NC};
|
static const uint32_t rfswitch_dio_pins[] = {RADIOLIB_LR11X0_DIO5, RADIOLIB_LR11X0_DIO6, RADIOLIB_LR11X0_DIO7, RADIOLIB_NC,
|
||||||
|
RADIOLIB_NC};
|
||||||
|
|
||||||
static const Module::RfSwitchMode_t rfswitch_table[] = {
|
static const Module::RfSwitchMode_t rfswitch_table[] = {
|
||||||
// mode DIO5 DIO6 DIO7
|
// mode DIO5 DIO6 DIO7
|
||||||
|
|||||||
Reference in New Issue
Block a user