Change time master wording to time source

pull/193/head
Jeff Lehman 3 months ago
parent d8154390e5
commit 978825bf5a

@ -65,12 +65,12 @@ enum TmSource {
TMS_GPS,
};
typedef struct TimeMaster {
typedef struct TimeSource {
TmNetIf tmNetIf;
uint16_t tmAddress;
TmSource tmSource;
unsigned long tmLastTimeSet;
} TimeMaster;
} TimeSource;
#ifndef ESP32
typedef int esp_err_t;

@ -42,7 +42,7 @@
SystemPacket theCmd;
DataReading theData[256];
TimeMaster timeMaster;
TimeSource timeSource;
uint8_t ln;
uint8_t newData = event_clear;
uint8_t newCmd = cmd_clear;

@ -472,17 +472,17 @@ void sendESPNow(uint8_t address)
void recvTimeEspNow(uint32_t t) {
// Process time if there is no master set yet or if LoRa is the master or if we are already the time master
if(timeMaster.tmNetIf <= TMIF_ESPNOW ) {
if(timeSource.tmNetIf <= TMIF_ESPNOW ) {
DBG("Received time via ESP-NOW from 0x" + String(incMAC[5], HEX));
if(timeMaster.tmNetIf < TMIF_ESPNOW) {
timeMaster.tmNetIf = TMIF_ESPNOW;
timeMaster.tmAddress = incMAC[4] << 8 | incMAC[5];
timeMaster.tmSource = TMS_NET;
if(timeSource.tmNetIf < TMIF_ESPNOW) {
timeSource.tmNetIf = TMIF_ESPNOW;
timeSource.tmAddress = incMAC[4] << 8 | incMAC[5];
timeSource.tmSource = TMS_NET;
DBG1("ESP-NOW time source is 0x" + String(incMAC[5], HEX));
}
if(timeMaster.tmAddress == incMAC[4] << 8 | incMAC[5]) {
if(timeSource.tmAddress == incMAC[4] << 8 | incMAC[5]) {
if(setTime(t)) {
timeMaster.tmLastTimeSet = millis();
timeSource.tmLastTimeSet = millis();
}
}
}
@ -498,11 +498,11 @@ esp_err_t sendTimeESPNow() {
esp_err_t result1 = ESP_OK, result2 = ESP_OK, result3 = ESP_OK;
SystemPacket sys_packet = { .cmd = cmd_time, .param = now };
if((timeMaster.tmAddress != (ESPNOW1[4] << 8 | ESPNOW1[5])) && ESPNOW1[5] != 0x00) {
if((timeSource.tmAddress != (ESPNOW1[4] << 8 | ESPNOW1[5])) && ESPNOW1[5] != 0x00) {
DBG("Sending time to ESP-NOW Peer 1");
result1 = sendESPNow(ESPNOW1, &sys_packet);
}
if((timeMaster.tmAddress != (ESPNOW2[4] << 8 | ESPNOW2[5])) && ESPNOW2[5] != 0x00) {
if((timeSource.tmAddress != (ESPNOW2[4] << 8 | ESPNOW2[5])) && ESPNOW2[5] != 0x00) {
DBG("Sending time to ESP-NOW Peer 2");
result2 = sendESPNow(ESPNOW2, &sys_packet);
}

@ -428,17 +428,17 @@ crcResult getLoRa()
}
}
else if (ln == 1 && receiveData[0].cmd == cmd_time) {
if(timeMaster.tmNetIf <= TMIF_LORA) {
if(timeSource.tmNetIf <= TMIF_LORA) {
DBG("Time rcv from LoRa 0x" + String(sourceMAC, HEX));
if(timeMaster.tmNetIf == TMIF_NONE) {
timeMaster.tmNetIf = TMIF_LORA;
timeMaster.tmAddress = sourceMAC;
timeMaster.tmSource = TMS_NET;
if(timeSource.tmNetIf == TMIF_NONE) {
timeSource.tmNetIf = TMIF_LORA;
timeSource.tmAddress = sourceMAC;
timeSource.tmSource = TMS_NET;
DBG("Time source is LoRa 0x" + String(sourceMAC, HEX));
}
if(timeMaster.tmAddress == sourceMAC) {
if(timeSource.tmAddress == sourceMAC) {
if(setTime(receiveData[0].param)) {
timeMaster.tmLastTimeSet = millis();
timeSource.tmLastTimeSet = millis();
}
}
else {
@ -628,7 +628,7 @@ void pingLoRaTimeMaster() {
// ping the time master every 10 minutes
if(TDIFFMIN(lastTimeMasterPing,10)) {
pingFDRSLoRa(timeMaster.tmAddress,4000);
pingFDRSLoRa(timeSource.tmAddress,4000);
lastTimeMasterPing = millis();
}
return;
@ -675,7 +675,7 @@ crcResult handleLoRa()
if(loraPing.status == psCompleted) {
loraPing.response = millis() - loraPing.start;
DBG("LoRa Ping Returned: " + String(loraPing.response) + "ms.");
if(loraPing.address == timeMaster.tmAddress) {
if(loraPing.address == timeSource.tmAddress) {
netTimeOffset = loraPing.response/2/1000;
adjTimeforNetDelay(netTimeOffset);
}
@ -694,7 +694,7 @@ crcResult handleLoRa()
loraPing.response = __UINT32_MAX__;
}
// Ping LoRa time master to estimate time delay in radio link
if(timeMaster.tmNetIf == TMIF_LORA && netTimeOffset == UINT32_MAX) {
if(timeSource.tmNetIf == TMIF_LORA && netTimeOffset == UINT32_MAX) {
pingLoRaTimeMaster();
}
return crcReturned;
@ -709,13 +709,13 @@ crcResult sendTimeLoRa() {
DBG("Sending time to LoRa broadcast");
result1 = transmitLoRa(&loraBroadcast, &spTimeLoRa, 1);
// Do not send to LoRa peers if their address is 0x..00
if(((LoRa1 & 0x00FF) != 0x0000) && (LoRa1 != timeMaster.tmAddress)) {
if(((LoRa1 & 0x00FF) != 0x0000) && (LoRa1 != timeSource.tmAddress)) {
DBG("Sending time to LoRa Neighbor 1");
spTimeLoRa.param = now;
// add LoRa neighbor 1
result2 = transmitLoRa(&LoRa1, &spTimeLoRa, 1);
}
if(((LoRa2 & 0x00FF) != 0x0000) && (LoRa2 != timeMaster.tmAddress)) {
if(((LoRa2 & 0x00FF) != 0x0000) && (LoRa2 != timeSource.tmAddress)) {
DBG("Sending time to LoRa Neighbor 2");
spTimeLoRa.param = now;
// add LoRa neighbor 2

@ -33,10 +33,10 @@ bool gpsParse(String input) {
struct tm gpsDateTime;
static unsigned long lastGpsTimeSet = 0;
if(timeMaster.tmSource != TMS_GPS) {
timeMaster.tmSource = TMS_GPS;
timeMaster.tmAddress = 0xFFFF;
timeMaster.tmNetIf = TMIF_LOCAL;
if(timeSource.tmSource != TMS_GPS) {
timeSource.tmSource = TMS_GPS;
timeSource.tmAddress = 0xFFFF;
timeSource.tmNetIf = TMIF_LOCAL;
DBG1("Time source is now local GPS.");
}
@ -75,7 +75,7 @@ bool gpsParse(String input) {
+ String(gpsDateTime.tm_hour) + ":" + String(gpsDateTime.tm_min) + ":" + String(gpsDateTime.tm_sec) + " UTC");
DBG1("Setting date and time via GPS: " + String(mktime(&gpsDateTime)) + " $GNZDA");
if(setTime(mktime(&gpsDateTime))) {
timeMaster.tmLastTimeSet = millis();
timeSource.tmLastTimeSet = millis();
return true;
}
}
@ -110,7 +110,7 @@ bool gpsParse(String input) {
+ String(gpsDateTime.tm_hour) + ":" + String(gpsDateTime.tm_min) + ":" + String(gpsDateTime.tm_sec) + " UTC");
DBG1("Setting date and time via GPS: " + String(mktime(&gpsDateTime)) + " $GNRMC");
if(setTime(mktime(&gpsDateTime))) {
timeMaster.tmLastTimeSet = millis();
timeSource.tmLastTimeSet = millis();
return true;
}
}
@ -169,16 +169,16 @@ void getSerial() {
else if(obj.containsKey("cmd")) { // SystemPacket
cmd_t c = doc[0]["cmd"];
if(c == cmd_time) {
if(timeMaster.tmNetIf < TMIF_SERIAL) {
timeMaster.tmNetIf = TMIF_SERIAL;
timeMaster.tmSource = TMS_NET;
timeMaster.tmAddress = 0xFFFF;
if(timeSource.tmNetIf < TMIF_SERIAL) {
timeSource.tmNetIf = TMIF_SERIAL;
timeSource.tmSource = TMS_NET;
timeSource.tmAddress = 0xFFFF;
DBG1("Time source is now Serial peer");
}
if(timeMaster.tmNetIf == TMIF_SERIAL) {
if(timeSource.tmNetIf == TMIF_SERIAL) {
DBG1("Incoming Serial: time");
if(setTime(doc[0]["param"])) {
timeMaster.tmLastTimeSet = millis();
timeSource.tmLastTimeSet = millis();
}
else {
// Set time failed for some reason

@ -216,7 +216,7 @@ void sendNTPpacket(const char * address) {
void fetchNtpTime() {
//DBG("GetTime Function");
if(timeMaster.tmSource <= TMS_NTP) {
if(timeSource.tmSource <= TMS_NTP) {
#ifdef USE_ETHERNET
if(eth_connected) {
#elif defined(USE_WIFI)
@ -255,10 +255,10 @@ void fetchNtpTime() {
// now is epoch format - seconds since Jan 1 1970
now = secsSince1900 - seventyYears;
if(setTime(now)) {
timeMaster.tmNetIf = TMIF_LOCAL;
timeMaster.tmAddress = 0xFFFF;
timeMaster.tmSource = TMS_NTP;
timeMaster.tmLastTimeSet = millis();
timeSource.tmNetIf = TMIF_LOCAL;
timeSource.tmAddress = 0xFFFF;
timeSource.tmSource = TMS_NTP;
timeSource.tmLastTimeSet = millis();
DBG1("Time source is now local NTP");
} // UTC time
}

@ -48,7 +48,7 @@ crcResult crcReturned = CRC_NULL;
uint8_t incMAC[6];
DataReading fdrsData[espnow_size];
DataReading incData[espnow_size];
TimeMaster timeMaster;
TimeSource timeSource;
uint8_t data_count = 0;
@ -283,7 +283,7 @@ void loopFDRS()
#ifdef USE_LORA
handleLoRa();
// Ping LoRa time master to estimate time delay in radio link
if(timeMaster.tmNetIf == TMIF_LORA && netTimeOffset == UINT32_MAX) {
if(timeSource.tmNetIf == TMIF_LORA && netTimeOffset == UINT32_MAX) {
pingLoRaTimeMaster();
}
#endif

@ -32,16 +32,16 @@ uint32_t gtwy_timeout = 300000;
void recvTimeEspNow(uint32_t t) {
// Process time if there is no master set yet or if LoRa is the master or if we are already the time master
if(timeMaster.tmNetIf < TMIF_ESPNOW || (timeMaster.tmNetIf == TMIF_ESPNOW && timeMaster.tmAddress == (incMAC[4] << 8 | incMAC[5]))) {
if(timeSource.tmNetIf < TMIF_ESPNOW || (timeSource.tmNetIf == TMIF_ESPNOW && timeSource.tmAddress == (incMAC[4] << 8 | incMAC[5]))) {
DBG("Received time via ESP-NOW from 0x" + String(incMAC[5], HEX));
if(timeMaster.tmNetIf < TMIF_ESPNOW) {
timeMaster.tmNetIf = TMIF_ESPNOW;
timeMaster.tmSource = TMS_NET;
timeMaster.tmAddress = incMAC[4] << 8 & incMAC[5];
if(timeSource.tmNetIf < TMIF_ESPNOW) {
timeSource.tmNetIf = TMIF_ESPNOW;
timeSource.tmSource = TMS_NET;
timeSource.tmAddress = incMAC[4] << 8 & incMAC[5];
DBG("ESP-NOW time source is now 0x" + String(incMAC[5], HEX));
}
setTime(t);
timeMaster.tmLastTimeSet = millis();
timeSource.tmLastTimeSet = millis();
}
else {
DBG("ESP-NOW 0x" + String(incMAC[5], HEX) + " is not our time source, discarding request");

@ -418,16 +418,16 @@ crcResult getLoRa()
}
}
else if (ln == 1 && receiveData[0].cmd == cmd_time) {
if(timeMaster.tmNetIf == TMIF_NONE || timeMaster.tmNetIf != TMIF_ESPNOW || (timeMaster.tmNetIf == TMIF_LORA && timeMaster.tmAddress == sourceMAC)) {
if(timeSource.tmNetIf == TMIF_NONE || timeSource.tmNetIf != TMIF_ESPNOW || (timeSource.tmNetIf == TMIF_LORA && timeSource.tmAddress == sourceMAC)) {
DBG("Time rcv from LoRa 0x" + String(sourceMAC, HEX));
if(timeMaster.tmNetIf == TMIF_NONE) {
timeMaster.tmNetIf = TMIF_LORA;
timeMaster.tmAddress = sourceMAC;
if(timeSource.tmNetIf == TMIF_NONE) {
timeSource.tmNetIf = TMIF_LORA;
timeSource.tmAddress = sourceMAC;
DBG("Time master is LoRa 0x" + String(sourceMAC, HEX));
}
setTime(receiveData[0].param);
adjTimeforNetDelay(netTimeOffset);
timeMaster.tmLastTimeSet = millis();
timeSource.tmLastTimeSet = millis();
}
else {
DBG("LoRa 0x" + String(sourceMAC, HEX) + " is not time master, discarding request");
@ -517,7 +517,7 @@ bool pingLoRaTimeMaster() {
// ping the time master every 5 minutes
if(millis() - lastTimeMasterPing > (5*60*1000 + random(0,2000))) {
time_t pingTimeMs;
pingTimeMs = pingFDRSLoRa(&timeMaster.tmAddress,4000);
pingTimeMs = pingFDRSLoRa(&timeSource.tmAddress,4000);
if(pingTimeMs != UINT32_MAX) {
netTimeOffset = pingTimeMs/2/1000;
adjTimeforNetDelay(netTimeOffset);

@ -95,18 +95,18 @@ void begin_rtc() {
}
}
if(validRtcFlag && timeMaster.tmSource <= TMS_RTC && validRtcFlag) {
if(timeMaster.tmSource < TMS_RTC) {
timeMaster.tmSource = TMS_RTC;
timeMaster.tmNetIf = TMIF_LOCAL;
timeMaster.tmAddress = 0xFFFF;
if(validRtcFlag && timeSource.tmSource <= TMS_RTC && validRtcFlag) {
if(timeSource.tmSource < TMS_RTC) {
timeSource.tmSource = TMS_RTC;
timeSource.tmNetIf = TMIF_LOCAL;
timeSource.tmAddress = 0xFFFF;
DBG1("Time source is now local RTC");
}
// Set date and time on the system
DBG1("Using Date and Time from RTC.");
if(setTime(rtc.GetDateTime().Unix32Time())) {
timeMaster.tmLastTimeSet = millis();
timeSource.tmLastTimeSet = millis();
printTime();
}
}
@ -121,7 +121,7 @@ void begin_rtc() {
#endif // USE_RTC
bool validTime() {
if(!VALID_TS(now) || timeMaster.tmSource == TMS_NONE) {
if(!VALID_TS(now) || timeSource.tmSource == TMS_NONE) {
if(validTimeFlag) {
DBG1("Time no longer reliable.");
validTimeFlag = false;
@ -274,7 +274,7 @@ void checkDST() {
// Periodically send time to ESP-NOW or LoRa nodes associated with this gateway/controller
void sendTime() {
if(validTime() && timeMaster.tmSource > TMS_NONE) { // Only send time if it is valid
if(validTime() && timeSource.tmSource > TMS_NONE) { // Only send time if it is valid
DBG1("Sending out time");
sendTimeSerial();
sendTimeLoRa();
@ -351,11 +351,11 @@ void handleTime() {
lastTimeSend = millis();
sendTime();
}
if(timeMaster.tmNetIf < TMIF_LOCAL && TDIFFMIN(timeMaster.tmLastTimeSet,120)) { // Reset time master to default if not heard anything for two hours
timeMaster.tmNetIf = TMIF_NONE;
timeMaster.tmAddress = 0x0000;
timeMaster.tmLastTimeSet = millis();
timeMaster.tmSource = TMS_NONE;
if(timeSource.tmNetIf < TMIF_LOCAL && TDIFFMIN(timeSource.tmLastTimeSet,120)) { // Reset time master to default if not heard anything for two hours
timeSource.tmNetIf = TMIF_NONE;
timeSource.tmAddress = 0x0000;
timeSource.tmLastTimeSet = millis();
timeSource.tmSource = TMS_NONE;
}
}
@ -368,7 +368,7 @@ void adjTimeforNetDelay(time_t newOffset) {
previousOffset = newOffset;
DBG1("Time adj by " + String(newOffset) + " secs");
}
if(timeMaster.tmSource == TMS_NET && newOffset > 10) {
if(timeSource.tmSource == TMS_NET && newOffset > 10) {
DBG("Time off by more than 10 seconds!");
// loadFDRS();
}

Loading…
Cancel
Save