Add time command (query), update docs
This commit is contained in:
25
src/main.cpp
25
src/main.cpp
@@ -220,6 +220,31 @@ public:
|
||||
}
|
||||
} else if (strncmp(cmd, "time", 4) == 0) {
|
||||
const char* rest = cmd + 4; while (*rest == ' ') rest++;
|
||||
if (*rest == 0) {
|
||||
uint32_t ts = rtc_clock.getCurrentTime();
|
||||
if (ts < 100000) { defer_response("time not set"); return; }
|
||||
uint32_t days = ts / 86400;
|
||||
int h = (ts % 86400) / 3600;
|
||||
int mi = (ts % 3600) / 60;
|
||||
int y = 1970;
|
||||
while (true) {
|
||||
int leap = ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) ? 366 : 365;
|
||||
if (days < (uint32_t)leap) break;
|
||||
days -= leap; y++;
|
||||
}
|
||||
const uint8_t mdays[] = {31,28,31,30,31,30,31,31,30,31,30,31};
|
||||
int m;
|
||||
for (m = 1; m <= 12; m++) {
|
||||
int dim = mdays[m-1];
|
||||
if (m == 2 && ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)) dim = 29;
|
||||
if (days < (uint32_t)dim) break;
|
||||
days -= dim;
|
||||
}
|
||||
char r[64];
|
||||
snprintf(r, sizeof(r), "time:%02d.%02d.%04d %02d:%02d", (int)(days + 1), m, y, h, mi);
|
||||
defer_response(r);
|
||||
return;
|
||||
}
|
||||
if (strncmp(rest, "s ", 2) != 0) { defer_response("time s DD.MM.YYYY HH.MM"); return; }
|
||||
rest += 2;
|
||||
int d, m, y, h, mi;
|
||||
|
||||
Reference in New Issue
Block a user