sysUptime.ino 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. //void updateUptime()
  2. //{
  3. // sysUptime_mins++;
  4. // if (sysUptime_mins == 60)
  5. // {
  6. // sysUptime_mins = 0;
  7. // sysUptime_hours++;
  8. // }
  9. // if (sysUptime_hours == 24)
  10. // {
  11. // sysUptime_hours = 0;
  12. // sysUptime_days++;
  13. // }
  14. //}
  15. //void buildUptimeString()
  16. //{
  17. // if (sysUptime_days > 0)
  18. // sprintf(uptimeStr, "%dd %02d:%02d", sysUptime_days, sysUptime_hours, sysUptime_mins);
  19. // else
  20. // sprintf(uptimeStr, "%02d:%02d", sysUptime_hours, sysUptime_mins);
  21. //}
  22. void updateUptime()
  23. {
  24. if (millis() >= 3000000000) // save expected rollover
  25. {
  26. sysUptime.highMillis = 1;
  27. }
  28. if (millis() <= 100000 && sysUptime.highMillis == 1) // save actual rollover
  29. {
  30. sysUptime.rollover++;
  31. sysUptime.highMillis = 0;
  32. }
  33. unsigned long secsUp = millis() / 1000;
  34. sysUptime.sec = secsUp % 60;
  35. sysUptime.min = (secsUp / 60) % 60;
  36. sysUptime.hour = (secsUp / (60 * 60)) % 24;
  37. sysUptime.day = (sysUptime.rollover * 50) + (secsUp / (60 * 60 * 24)); // millis rollover ~50days
  38. }
  39. char* getUptimeStr(bool includeSeconds) {
  40. updateUptime();
  41. if(includeSeconds) {
  42. if(sysUptime.day == 0) sprintf(sysUptime.uptimeStr, "%02u:%02u:%02u", sysUptime.hour, sysUptime.min, sysUptime.sec);
  43. else sprintf(sysUptime.uptimeStr, "%ud %02u:%02u:%02u", sysUptime.day, sysUptime.hour, sysUptime.min, sysUptime.sec);
  44. }
  45. else {
  46. if(sysUptime.day == 0) sprintf(sysUptime.uptimeStr, "%02u:%02u", sysUptime.hour, sysUptime.min);
  47. else sprintf(sysUptime.uptimeStr, "%ud %02u:%02u", sysUptime.day, sysUptime.hour, sysUptime.min);
  48. }
  49. return sysUptime.uptimeStr;
  50. }