Move airtimes struct into the class

1.2-legacy
Jm Casler 2021-12-29 00:45:36 -08:00
rodzic 7eb00dd5f6
commit bdacd97fea
3 zmienionych plików z 33 dodań i 25 usunięć

Wyświetl plik

@ -2,31 +2,28 @@
#include "NodeDB.h" #include "NodeDB.h"
#include "configuration.h" #include "configuration.h"
#define PERIODS_TO_LOG 24
AirTime *airTime; AirTime *airTime;
// Don't read out of this directly. Use the helper functions. // Don't read out of this directly. Use the helper functions.
struct airtimeStruct {
uint32_t periodTX[PERIODS_TO_LOG]; // AirTime transmitted
uint32_t periodRX[PERIODS_TO_LOG]; // AirTime received and repeated (Only valid mesh packets)
uint32_t periodRX_ALL[PERIODS_TO_LOG]; // AirTime received regardless of valid mesh packet. Could include noise.
uint8_t lastPeriodIndex;
} airtimes;
void AirTime::logAirtime(reportTypes reportType, uint32_t airtime_ms) void AirTime::logAirtime(reportTypes reportType, uint32_t airtime_ms)
{ {
// TODO: Is the airtimes array still necessary? It's now in myNodeInfo anyway
if (reportType == TX_LOG) { if (reportType == TX_LOG) {
DEBUG_MSG("AirTime - Packet transmitted : %ums\n", airtime_ms); DEBUG_MSG("AirTime - Packet transmitted : %ums\n", airtime_ms);
airtimes.periodTX[0] = airtimes.periodTX[0] + airtime_ms; this->airtimes.periodTX[0] = this->airtimes.periodTX[0] + airtime_ms;
myNodeInfo.air_period_tx[0] = myNodeInfo.air_period_tx[0] + airtime_ms; myNodeInfo.air_period_tx[0] = myNodeInfo.air_period_tx[0] + airtime_ms;
} else if (reportType == RX_LOG) { } else if (reportType == RX_LOG) {
DEBUG_MSG("AirTime - Packet received : %ums\n", airtime_ms); DEBUG_MSG("AirTime - Packet received : %ums\n", airtime_ms);
airtimes.periodRX[0] = airtimes.periodRX[0] + airtime_ms; this->airtimes.periodRX[0] = this->airtimes.periodRX[0] + airtime_ms;
myNodeInfo.air_period_rx[0] = myNodeInfo.air_period_rx[0] + airtime_ms; myNodeInfo.air_period_rx[0] = myNodeInfo.air_period_rx[0] + airtime_ms;
} else if (reportType == RX_ALL_LOG) { } else if (reportType == RX_ALL_LOG) {
DEBUG_MSG("AirTime - Packet received (noise?) : %ums\n", airtime_ms); DEBUG_MSG("AirTime - Packet received (noise?) : %ums\n", airtime_ms);
airtimes.periodRX_ALL[0] = airtimes.periodRX_ALL[0] + airtime_ms; this->airtimes.periodRX_ALL[0] = this->airtimes.periodRX_ALL[0] + airtime_ms;
} }
uint8_t channelUtilPeriod = (getSecondsSinceBoot() / 10) % CHANNEL_UTILIZATION_PERIODS; uint8_t channelUtilPeriod = (getSecondsSinceBoot() / 10) % CHANNEL_UTILIZATION_PERIODS;
@ -41,37 +38,38 @@ uint8_t AirTime::currentPeriodIndex()
void AirTime::airtimeRotatePeriod() void AirTime::airtimeRotatePeriod()
{ {
if (airtimes.lastPeriodIndex != currentPeriodIndex()) { if (this->airtimes.lastPeriodIndex != currentPeriodIndex()) {
DEBUG_MSG("Rotating airtimes to a new period = %u\n", currentPeriodIndex()); DEBUG_MSG("Rotating airtimes to a new period = %u\n", currentPeriodIndex());
for (int i = PERIODS_TO_LOG - 2; i >= 0; --i) { for (int i = PERIODS_TO_LOG - 2; i >= 0; --i) {
airtimes.periodTX[i + 1] = airtimes.periodTX[i]; this->airtimes.periodTX[i + 1] = this->airtimes.periodTX[i];
airtimes.periodRX[i + 1] = airtimes.periodRX[i]; this->airtimes.periodRX[i + 1] = this->airtimes.periodRX[i];
airtimes.periodRX_ALL[i + 1] = airtimes.periodRX_ALL[i]; this->airtimes.periodRX_ALL[i + 1] = this->airtimes.periodRX_ALL[i];
myNodeInfo.air_period_tx[i + 1] = myNodeInfo.air_period_tx[i]; myNodeInfo.air_period_tx[i + 1] = myNodeInfo.air_period_tx[i];
myNodeInfo.air_period_rx[i + 1] = myNodeInfo.air_period_rx[i]; myNodeInfo.air_period_rx[i + 1] = myNodeInfo.air_period_rx[i];
} }
airtimes.periodTX[0] = 0;
airtimes.periodRX[0] = 0; this->airtimes.periodTX[0] = 0;
airtimes.periodRX_ALL[0] = 0; this->airtimes.periodRX[0] = 0;
this->airtimes.periodRX_ALL[0] = 0;
myNodeInfo.air_period_tx[0] = 0; myNodeInfo.air_period_tx[0] = 0;
myNodeInfo.air_period_rx[0] = 0; myNodeInfo.air_period_rx[0] = 0;
airtimes.lastPeriodIndex = currentPeriodIndex(); this->airtimes.lastPeriodIndex = currentPeriodIndex();
} }
} }
uint32_t *airtimeReport(reportTypes reportType) uint32_t *AirTime::airtimeReport(reportTypes reportType)
{ {
if (reportType == TX_LOG) { if (reportType == TX_LOG) {
return airtimes.periodTX; return this->airtimes.periodTX;
} else if (reportType == RX_LOG) { } else if (reportType == RX_LOG) {
return airtimes.periodRX; return this->airtimes.periodRX;
} else if (reportType == RX_ALL_LOG) { } else if (reportType == RX_ALL_LOG) {
return airtimes.periodRX_ALL; return this->airtimes.periodRX_ALL;
} }
return 0; return 0;
} }

Wyświetl plik

@ -26,6 +26,8 @@
#define CHANNEL_UTILIZATION_PERIODS 6 #define CHANNEL_UTILIZATION_PERIODS 6
#define SECONDS_PER_PERIOD 3600 #define SECONDS_PER_PERIOD 3600
#define PERIODS_TO_LOG 24
enum reportTypes { TX_LOG, RX_LOG, RX_ALL_LOG }; enum reportTypes { TX_LOG, RX_LOG, RX_ALL_LOG };
@ -48,12 +50,20 @@ class AirTime : private concurrency::OSThread
uint8_t getPeriodsToLog(); uint8_t getPeriodsToLog();
uint32_t getSecondsPerPeriod(); uint32_t getSecondsPerPeriod();
uint32_t getSecondsSinceBoot(); uint32_t getSecondsSinceBoot();
uint32_t *airtimeReport(reportTypes reportType);
private: private:
bool firstTime = true; bool firstTime = true;
uint8_t lastUtilPeriod = 0; uint8_t lastUtilPeriod = 0;
uint32_t secSinceBoot = 0; uint32_t secSinceBoot = 0;
struct airtimeStruct {
uint32_t periodTX[PERIODS_TO_LOG]; // AirTime transmitted
uint32_t periodRX[PERIODS_TO_LOG]; // AirTime received and repeated (Only valid mesh packets)
uint32_t periodRX_ALL[PERIODS_TO_LOG]; // AirTime received regardless of valid mesh packet. Could include noise.
uint8_t lastPeriodIndex;
} airtimes;
protected: protected:
virtual int32_t runOnce() override; virtual int32_t runOnce() override;
}; };

Wyświetl plik

@ -502,7 +502,7 @@ void handleReport(HTTPRequest *req, HTTPResponse *res)
res->print("\"tx_log\": ["); res->print("\"tx_log\": [");
logArray = airtimeReport(TX_LOG); logArray = airTime->airtimeReport(TX_LOG);
for (int i = 0; i < airTime->getPeriodsToLog(); i++) { for (int i = 0; i < airTime->getPeriodsToLog(); i++) {
uint32_t tmp; uint32_t tmp;
tmp = *(logArray + i); tmp = *(logArray + i);
@ -515,7 +515,7 @@ void handleReport(HTTPRequest *req, HTTPResponse *res)
res->println("],"); res->println("],");
res->print("\"rx_log\": ["); res->print("\"rx_log\": [");
logArray = airtimeReport(RX_LOG); logArray = airTime->airtimeReport(RX_LOG);
for (int i = 0; i < airTime->getPeriodsToLog(); i++) { for (int i = 0; i < airTime->getPeriodsToLog(); i++) {
uint32_t tmp; uint32_t tmp;
tmp = *(logArray + i); tmp = *(logArray + i);
@ -528,7 +528,7 @@ void handleReport(HTTPRequest *req, HTTPResponse *res)
res->println("],"); res->println("],");
res->print("\"rx_all_log\": ["); res->print("\"rx_all_log\": [");
logArray = airtimeReport(RX_ALL_LOG); logArray = airTime->airtimeReport(RX_ALL_LOG);
for (int i = 0; i < airTime->getPeriodsToLog(); i++) { for (int i = 0; i < airTime->getPeriodsToLog(); i++) {
uint32_t tmp; uint32_t tmp;
tmp = *(logArray + i); tmp = *(logArray + i);