Merge branch 'dev' into devt114
This commit is contained in:
@@ -227,4 +227,5 @@ void loop() {
|
|||||||
#ifdef DISPLAY_CLASS
|
#ifdef DISPLAY_CLASS
|
||||||
ui_task.loop();
|
ui_task.loop();
|
||||||
#endif
|
#endif
|
||||||
|
rtc_clock.tick();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -397,11 +397,11 @@ int MyMesh::calcRxDelay(float score, uint32_t air_time) const {
|
|||||||
|
|
||||||
uint32_t MyMesh::getRetransmitDelay(const mesh::Packet *packet) {
|
uint32_t MyMesh::getRetransmitDelay(const mesh::Packet *packet) {
|
||||||
uint32_t t = (_radio->getEstAirtimeFor(packet->path_len + packet->payload_len + 2) * _prefs.tx_delay_factor);
|
uint32_t t = (_radio->getEstAirtimeFor(packet->path_len + packet->payload_len + 2) * _prefs.tx_delay_factor);
|
||||||
return getRNG()->nextInt(0, 5*t);
|
return getRNG()->nextInt(0, 5*t + 1);
|
||||||
}
|
}
|
||||||
uint32_t MyMesh::getDirectRetransmitDelay(const mesh::Packet *packet) {
|
uint32_t MyMesh::getDirectRetransmitDelay(const mesh::Packet *packet) {
|
||||||
uint32_t t = (_radio->getEstAirtimeFor(packet->path_len + packet->payload_len + 2) * _prefs.direct_tx_delay_factor);
|
uint32_t t = (_radio->getEstAirtimeFor(packet->path_len + packet->payload_len + 2) * _prefs.direct_tx_delay_factor);
|
||||||
return getRNG()->nextInt(0, 5*t);
|
return getRNG()->nextInt(0, 5*t + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MyMesh::onAnonDataRecv(mesh::Packet *packet, const uint8_t *secret, const mesh::Identity &sender,
|
void MyMesh::onAnonDataRecv(mesh::Packet *packet, const uint8_t *secret, const mesh::Identity &sender,
|
||||||
@@ -610,6 +610,7 @@ MyMesh::MyMesh(mesh::MainBoard &board, mesh::Radio &radio, mesh::MillisecondCloc
|
|||||||
_prefs.airtime_factor = 1.0; // one half
|
_prefs.airtime_factor = 1.0; // one half
|
||||||
_prefs.rx_delay_base = 0.0f; // turn off by default, was 10.0;
|
_prefs.rx_delay_base = 0.0f; // turn off by default, was 10.0;
|
||||||
_prefs.tx_delay_factor = 0.5f; // was 0.25f
|
_prefs.tx_delay_factor = 0.5f; // was 0.25f
|
||||||
|
_prefs.direct_tx_delay_factor = 0.2f; // was zero
|
||||||
StrHelper::strncpy(_prefs.node_name, ADVERT_NAME, sizeof(_prefs.node_name));
|
StrHelper::strncpy(_prefs.node_name, ADVERT_NAME, sizeof(_prefs.node_name));
|
||||||
_prefs.node_lat = ADVERT_LAT;
|
_prefs.node_lat = ADVERT_LAT;
|
||||||
_prefs.node_lon = ADVERT_LON;
|
_prefs.node_lon = ADVERT_LON;
|
||||||
|
|||||||
@@ -114,4 +114,5 @@ void loop() {
|
|||||||
#ifdef DISPLAY_CLASS
|
#ifdef DISPLAY_CLASS
|
||||||
ui_task.loop();
|
ui_task.loop();
|
||||||
#endif
|
#endif
|
||||||
|
rtc_clock.tick();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -262,11 +262,11 @@ const char *MyMesh::getLogDateTime() {
|
|||||||
|
|
||||||
uint32_t MyMesh::getRetransmitDelay(const mesh::Packet *packet) {
|
uint32_t MyMesh::getRetransmitDelay(const mesh::Packet *packet) {
|
||||||
uint32_t t = (_radio->getEstAirtimeFor(packet->path_len + packet->payload_len + 2) * _prefs.tx_delay_factor);
|
uint32_t t = (_radio->getEstAirtimeFor(packet->path_len + packet->payload_len + 2) * _prefs.tx_delay_factor);
|
||||||
return getRNG()->nextInt(0, 5*t);
|
return getRNG()->nextInt(0, 5*t + 1);
|
||||||
}
|
}
|
||||||
uint32_t MyMesh::getDirectRetransmitDelay(const mesh::Packet *packet) {
|
uint32_t MyMesh::getDirectRetransmitDelay(const mesh::Packet *packet) {
|
||||||
uint32_t t = (_radio->getEstAirtimeFor(packet->path_len + packet->payload_len + 2) * _prefs.direct_tx_delay_factor);
|
uint32_t t = (_radio->getEstAirtimeFor(packet->path_len + packet->payload_len + 2) * _prefs.direct_tx_delay_factor);
|
||||||
return getRNG()->nextInt(0, 5*t);
|
return getRNG()->nextInt(0, 5*t + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MyMesh::allowPacketForward(const mesh::Packet *packet) {
|
bool MyMesh::allowPacketForward(const mesh::Packet *packet) {
|
||||||
@@ -593,6 +593,7 @@ MyMesh::MyMesh(mesh::MainBoard &board, mesh::Radio &radio, mesh::MillisecondCloc
|
|||||||
_prefs.airtime_factor = 1.0; // one half
|
_prefs.airtime_factor = 1.0; // one half
|
||||||
_prefs.rx_delay_base = 0.0f; // off by default, was 10.0
|
_prefs.rx_delay_base = 0.0f; // off by default, was 10.0
|
||||||
_prefs.tx_delay_factor = 0.5f; // was 0.25f;
|
_prefs.tx_delay_factor = 0.5f; // was 0.25f;
|
||||||
|
_prefs.direct_tx_delay_factor = 0.2f; // was zero
|
||||||
StrHelper::strncpy(_prefs.node_name, ADVERT_NAME, sizeof(_prefs.node_name));
|
StrHelper::strncpy(_prefs.node_name, ADVERT_NAME, sizeof(_prefs.node_name));
|
||||||
_prefs.node_lat = ADVERT_LAT;
|
_prefs.node_lat = ADVERT_LAT;
|
||||||
_prefs.node_lon = ADVERT_LON;
|
_prefs.node_lon = ADVERT_LON;
|
||||||
|
|||||||
@@ -110,4 +110,5 @@ void loop() {
|
|||||||
#ifdef DISPLAY_CLASS
|
#ifdef DISPLAY_CLASS
|
||||||
ui_task.loop();
|
ui_task.loop();
|
||||||
#endif
|
#endif
|
||||||
|
rtc_clock.tick();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -548,7 +548,7 @@ public:
|
|||||||
|
|
||||||
StdRNG fast_rng;
|
StdRNG fast_rng;
|
||||||
SimpleMeshTables tables;
|
SimpleMeshTables tables;
|
||||||
MyMesh the_mesh(radio_driver, fast_rng, *new VolatileRTCClock(), tables); // TODO: test with 'rtc_clock' in target.cpp
|
MyMesh the_mesh(radio_driver, fast_rng, rtc_clock, tables);
|
||||||
|
|
||||||
void halt() {
|
void halt() {
|
||||||
while (1) ;
|
while (1) ;
|
||||||
@@ -587,4 +587,5 @@ void setup() {
|
|||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
the_mesh.loop();
|
the_mesh.loop();
|
||||||
|
rtc_clock.tick();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -664,6 +664,7 @@ SensorMesh::SensorMesh(mesh::MainBoard& board, mesh::Radio& radio, mesh::Millise
|
|||||||
_prefs.airtime_factor = 1.0; // one half
|
_prefs.airtime_factor = 1.0; // one half
|
||||||
_prefs.rx_delay_base = 0.0f; // turn off by default, was 10.0;
|
_prefs.rx_delay_base = 0.0f; // turn off by default, was 10.0;
|
||||||
_prefs.tx_delay_factor = 0.5f; // was 0.25f
|
_prefs.tx_delay_factor = 0.5f; // was 0.25f
|
||||||
|
_prefs.direct_tx_delay_factor = 0.2f; // was zero
|
||||||
StrHelper::strncpy(_prefs.node_name, ADVERT_NAME, sizeof(_prefs.node_name));
|
StrHelper::strncpy(_prefs.node_name, ADVERT_NAME, sizeof(_prefs.node_name));
|
||||||
_prefs.node_lat = ADVERT_LAT;
|
_prefs.node_lat = ADVERT_LAT;
|
||||||
_prefs.node_lon = ADVERT_LON;
|
_prefs.node_lon = ADVERT_LON;
|
||||||
|
|||||||
@@ -144,4 +144,5 @@ void loop() {
|
|||||||
#ifdef DISPLAY_CLASS
|
#ifdef DISPLAY_CLASS
|
||||||
ui_task.loop();
|
ui_task.loop();
|
||||||
#endif
|
#endif
|
||||||
|
rtc_clock.tick();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -72,6 +72,11 @@ public:
|
|||||||
*/
|
*/
|
||||||
virtual void setCurrentTime(uint32_t time) = 0;
|
virtual void setCurrentTime(uint32_t time) = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* override in classes that need to periodically update internal state
|
||||||
|
*/
|
||||||
|
virtual void tick() { /* no op */}
|
||||||
|
|
||||||
uint32_t getCurrentTimeUnique() {
|
uint32_t getCurrentTimeUnique() {
|
||||||
uint32_t t = getCurrentTime();
|
uint32_t t = getCurrentTime();
|
||||||
if (t <= last_unique) {
|
if (t <= last_unique) {
|
||||||
|
|||||||
@@ -4,11 +4,19 @@
|
|||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
|
|
||||||
class VolatileRTCClock : public mesh::RTCClock {
|
class VolatileRTCClock : public mesh::RTCClock {
|
||||||
long millis_offset;
|
uint32_t base_time;
|
||||||
|
uint64_t accumulator;
|
||||||
|
unsigned long prev_millis;
|
||||||
public:
|
public:
|
||||||
VolatileRTCClock() { millis_offset = 1715770351; } // 15 May 2024, 8:50pm
|
VolatileRTCClock() { base_time = 1715770351; accumulator = 0; prev_millis = millis(); } // 15 May 2024, 8:50pm
|
||||||
uint32_t getCurrentTime() override { return (millis()/1000 + millis_offset); }
|
uint32_t getCurrentTime() override { return base_time + accumulator/1000; }
|
||||||
void setCurrentTime(uint32_t time) override { millis_offset = time - millis()/1000; }
|
void setCurrentTime(uint32_t time) override { base_time = time; accumulator = 0; prev_millis = millis(); }
|
||||||
|
|
||||||
|
void tick() override {
|
||||||
|
unsigned long now = millis();
|
||||||
|
accumulator += (now - prev_millis);
|
||||||
|
prev_millis = now;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class ArduinoMillis : public mesh::MillisecondClock {
|
class ArduinoMillis : public mesh::MillisecondClock {
|
||||||
|
|||||||
@@ -14,4 +14,8 @@ public:
|
|||||||
void begin(TwoWire& wire);
|
void begin(TwoWire& wire);
|
||||||
uint32_t getCurrentTime() override;
|
uint32_t getCurrentTime() override;
|
||||||
void setCurrentTime(uint32_t time) override;
|
void setCurrentTime(uint32_t time) override;
|
||||||
|
|
||||||
|
void tick() override {
|
||||||
|
_fallback->tick(); // is typically VolatileRTCClock, which now needs tick()
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -20,34 +20,12 @@ SensorManager sensors;
|
|||||||
bool radio_init() {
|
bool radio_init() {
|
||||||
rtc_clock.begin(Wire);
|
rtc_clock.begin(Wire);
|
||||||
|
|
||||||
#ifdef SX126X_DIO3_TCXO_VOLTAGE
|
#if defined(P_LORA_SCLK)
|
||||||
float tcxo = SX126X_DIO3_TCXO_VOLTAGE;
|
spi.begin(P_LORA_SCLK, P_LORA_MISO, P_LORA_MOSI);
|
||||||
|
return radio.std_init(&spi);
|
||||||
#else
|
#else
|
||||||
float tcxo = 1.6f;
|
return radio.std_init();
|
||||||
#endif
|
#endif
|
||||||
int status = radio.begin(LORA_FREQ, LORA_BW, LORA_SF, LORA_CR, RADIOLIB_SX126X_SYNC_WORD_PRIVATE, LORA_TX_POWER, 8, tcxo);
|
|
||||||
|
|
||||||
if (status != RADIOLIB_ERR_NONE) {
|
|
||||||
Serial.print("ERROR: radio init failed: ");
|
|
||||||
Serial.println(status);
|
|
||||||
return false; // fail
|
|
||||||
}
|
|
||||||
|
|
||||||
radio.setCRC(1);
|
|
||||||
|
|
||||||
#ifdef SX126X_CURRENT_LIMIT
|
|
||||||
radio.setCurrentLimit(SX126X_CURRENT_LIMIT);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef SX126X_DIO2_AS_RF_SWITCH
|
|
||||||
radio.setDio2AsRfSwitch(SX126X_DIO2_AS_RF_SWITCH);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef SX126X_RX_BOOSTED_GAIN
|
|
||||||
radio.setRxBoostedGainMode(SX126X_RX_BOOSTED_GAIN);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return true; // success
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t radio_get_rng_seed() {
|
uint32_t radio_get_rng_seed() {
|
||||||
|
|||||||
Reference in New Issue
Block a user