sforkowany z mirror/meshtastic-firmware
Move airtimes struct into the class
rodzic
7eb00dd5f6
commit
bdacd97fea
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Ładowanie…
Reference in New Issue