mirror of
https://github.com/meshcore-dev/MeshCore.git
synced 2026-04-20 22:13:47 +00:00
* companion radio: new CMD_SET_RADIO_TX_POWER frame, RESP_CODE_SELF_INFO responses now include tx_power_dbm and MAX_LORA_TX_POWER
This commit is contained in:
parent
7f15205e29
commit
a0bb332ce5
1 changed files with 22 additions and 6 deletions
|
|
@ -34,6 +34,9 @@
|
|||
#ifndef LORA_TX_POWER
|
||||
#define LORA_TX_POWER 20
|
||||
#endif
|
||||
#ifndef MAX_LORA_TX_POWER
|
||||
#define MAX_LORA_TX_POWER LORA_TX_POWER
|
||||
#endif
|
||||
|
||||
#ifndef MAX_CONTACTS
|
||||
#define MAX_CONTACTS 100
|
||||
|
|
@ -92,6 +95,7 @@ static uint32_t _atoi(const char* sp) {
|
|||
#define CMD_ADD_UPDATE_CONTACT 9
|
||||
#define CMD_SYNC_NEXT_MESSAGE 10
|
||||
#define CMD_SET_RADIO_PARAMS 11
|
||||
#define CMD_SET_RADIO_TX_POWER 12
|
||||
|
||||
#define RESP_CODE_OK 0
|
||||
#define RESP_CODE_ERR 1
|
||||
|
|
@ -121,6 +125,8 @@ struct NodePrefs { // persisted to file
|
|||
uint8_t reserved1;
|
||||
uint8_t reserved2;
|
||||
float bw;
|
||||
uint8_t tx_power_dbm;
|
||||
uint8_t unused[3];
|
||||
};
|
||||
|
||||
class MyMesh : public BaseChatMesh {
|
||||
|
|
@ -360,22 +366,21 @@ public:
|
|||
_iter_started = false;
|
||||
|
||||
// defaults
|
||||
memset(&_prefs, 0, sizeof(_prefs));
|
||||
_prefs.airtime_factor = 1.0; // one half
|
||||
strcpy(_prefs.node_name, "NONAME");
|
||||
_prefs.node_lat = 0;
|
||||
_prefs.node_lon = 0;
|
||||
_prefs.freq = LORA_FREQ;
|
||||
_prefs.sf = LORA_SF;
|
||||
_prefs.bw = LORA_BW;
|
||||
_prefs.cr = LORA_CR;
|
||||
_prefs.reserved1 = 0;
|
||||
_prefs.reserved2 = 0;
|
||||
_prefs.tx_power_dbm = LORA_TX_POWER;
|
||||
}
|
||||
|
||||
float getFreqPref() const { return _prefs.freq; }
|
||||
uint8_t getSFPref() const { return _prefs.sf; }
|
||||
uint8_t getCRPref() const { return _prefs.cr; }
|
||||
float getBWPref() const { return _prefs.bw; }
|
||||
uint8_t getTxPowerPref() const { return _prefs.tx_power_dbm; }
|
||||
|
||||
void begin(FILESYSTEM& fs, BaseSerialInterface& serial, mesh::RNG& trng) {
|
||||
_fs = &fs;
|
||||
|
|
@ -427,8 +432,8 @@ public:
|
|||
int i = 0;
|
||||
out_frame[i++] = RESP_CODE_SELF_INFO;
|
||||
out_frame[i++] = ADV_TYPE_CHAT; // what this node Advert identifies as (maybe node's pronouns too?? :-)
|
||||
out_frame[i++] = 0; // reserved
|
||||
out_frame[i++] = 0; // reserved
|
||||
out_frame[i++] = _prefs.tx_power_dbm;
|
||||
out_frame[i++] = MAX_LORA_TX_POWER;
|
||||
memcpy(&out_frame[i], self_id.pub_key, PUB_KEY_SIZE); i += PUB_KEY_SIZE;
|
||||
int32_t latlonsats = 0;
|
||||
memcpy(&out_frame[i], &latlonsats, 4); i += 4; // reserved future, for companion radios with GPS (like T-Beam, T1000)
|
||||
|
|
@ -594,6 +599,14 @@ public:
|
|||
} else {
|
||||
writeErrFrame();
|
||||
}
|
||||
} else if (cmd_frame[0] == CMD_SET_RADIO_TX_POWER) {
|
||||
if (cmd_frame[1] > MAX_LORA_TX_POWER) {
|
||||
writeErrFrame();
|
||||
} else {
|
||||
_prefs.tx_power_dbm = cmd_frame[1];
|
||||
savePrefs();
|
||||
writeOKFrame(); // reboot now required!
|
||||
}
|
||||
} else {
|
||||
writeErrFrame();
|
||||
MESH_DEBUG_PRINTLN("ERROR: unknown command: %02X", cmd_frame[0]);
|
||||
|
|
@ -729,6 +742,9 @@ void setup() {
|
|||
if (LORA_CR != the_mesh.getCRPref()) {
|
||||
radio.setCodingRate(the_mesh.getCRPref());
|
||||
}
|
||||
if (LORA_TX_POWER != the_mesh.getTxPowerPref()) {
|
||||
radio.setOutputPower(the_mesh.getTxPowerPref());
|
||||
}
|
||||
}
|
||||
|
||||
void loop() {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue