Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: SX1276Lib AdaFruit_RGBLCD MCP23017 mbed
Fork of AdaFruit_RGBLCD by
Modules/TimeModule.cpp@28:fbcd3bac0cd7, 2014-10-10 (annotated)
- Committer:
- vtraveller
- Date:
- Fri Oct 10 11:10:56 2014 +0000
- Revision:
- 28:fbcd3bac0cd7
- Parent:
- 18:fae7e61ea160
Reduced write delay - faster LCD response
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| vtraveller | 10:3fcab08717fc | 1 | #include "mbed.h" |
| vtraveller | 10:3fcab08717fc | 2 | #include "TimeModule.h" |
| vtraveller | 10:3fcab08717fc | 3 | #include "time_helper.h" |
| vtraveller | 10:3fcab08717fc | 4 | |
| vtraveller | 10:3fcab08717fc | 5 | #if 0 |
| vtraveller | 10:3fcab08717fc | 6 | tm sTM; |
| vtraveller | 10:3fcab08717fc | 7 | sTM.tm_sec = 0; |
| vtraveller | 10:3fcab08717fc | 8 | sTM.tm_min = 0; |
| vtraveller | 10:3fcab08717fc | 9 | sTM.tm_hour = 18; |
| vtraveller | 10:3fcab08717fc | 10 | sTM.tm_mday = 9; |
| vtraveller | 10:3fcab08717fc | 11 | sTM.tm_mon = 8 - 1; |
| vtraveller | 10:3fcab08717fc | 12 | sTM.tm_year = 2014 - 1900; |
| vtraveller | 10:3fcab08717fc | 13 | sTM.tm_wday = 6; |
| vtraveller | 10:3fcab08717fc | 14 | |
| vtraveller | 10:3fcab08717fc | 15 | rtc.SetTime(sTM,true); |
| vtraveller | 10:3fcab08717fc | 16 | #endif |
| vtraveller | 10:3fcab08717fc | 17 | |
| vtraveller | 10:3fcab08717fc | 18 | |
| vtraveller | 10:3fcab08717fc | 19 | TimeModule::TimeModule |
| vtraveller | 10:3fcab08717fc | 20 | ( |
| vtraveller | 13:9641bc42db92 | 21 | Serial & in_cDisplay, |
| vtraveller | 13:9641bc42db92 | 22 | RTclock & in_cRTclock |
| vtraveller | 10:3fcab08717fc | 23 | ) |
| vtraveller | 13:9641bc42db92 | 24 | : Module(in_cDisplay) |
| vtraveller | 10:3fcab08717fc | 25 | , m_cRTclock(in_cRTclock) |
| vtraveller | 10:3fcab08717fc | 26 | { |
| vtraveller | 15:d1eaddb363be | 27 | ::memset(&m_sLastTM,0,sizeof(m_sLastTM)); |
| vtraveller | 10:3fcab08717fc | 28 | } |
| vtraveller | 10:3fcab08717fc | 29 | |
| vtraveller | 10:3fcab08717fc | 30 | TimeModule::~TimeModule() |
| vtraveller | 10:3fcab08717fc | 31 | { |
| vtraveller | 10:3fcab08717fc | 32 | } |
| vtraveller | 11:96146db429de | 33 | |
| vtraveller | 11:96146db429de | 34 | void TimeModule::change |
| vtraveller | 11:96146db429de | 35 | ( |
| vtraveller | 13:9641bc42db92 | 36 | size_t in_nIndex, |
| vtraveller | 11:96146db429de | 37 | bool in_bUp |
| vtraveller | 11:96146db429de | 38 | ) |
| vtraveller | 11:96146db429de | 39 | { |
| vtraveller | 11:96146db429de | 40 | tm sTM; |
| vtraveller | 10:3fcab08717fc | 41 | |
| vtraveller | 11:96146db429de | 42 | // to get the current time information |
| vtraveller | 11:96146db429de | 43 | if (!m_cRTclock.getTime(sTM)) GetTime(sTM); |
| vtraveller | 11:96146db429de | 44 | bool bTwelveHour = m_cRTclock.isTwelveHour(); |
| vtraveller | 11:96146db429de | 45 | |
| vtraveller | 11:96146db429de | 46 | enum ETime |
| vtraveller | 11:96146db429de | 47 | { |
| vtraveller | 11:96146db429de | 48 | eHourTen = 0, |
| vtraveller | 11:96146db429de | 49 | eHourSingle, |
| vtraveller | 11:96146db429de | 50 | eMinTen, |
| vtraveller | 11:96146db429de | 51 | eMinSingle, |
| vtraveller | 11:96146db429de | 52 | eSecondTen, |
| vtraveller | 11:96146db429de | 53 | eSecondSingle, |
| vtraveller | 11:96146db429de | 54 | eAmPm, |
| vtraveller | 11:96146db429de | 55 | }; |
| vtraveller | 11:96146db429de | 56 | |
| vtraveller | 13:9641bc42db92 | 57 | switch (in_nIndex) |
| vtraveller | 11:96146db429de | 58 | { |
| vtraveller | 11:96146db429de | 59 | case eHourTen: sTM.tm_hour += (in_bUp ? 1 : -1) * 10; break; |
| vtraveller | 11:96146db429de | 60 | case eHourSingle: sTM.tm_hour += (in_bUp ? 1 : -1); break; |
| vtraveller | 11:96146db429de | 61 | case eMinTen: sTM.tm_min += (in_bUp ? 1 : -1) * 10; break; |
| vtraveller | 11:96146db429de | 62 | case eMinSingle: sTM.tm_min += (in_bUp ? 1 : -1); break; |
| vtraveller | 11:96146db429de | 63 | case eSecondTen: sTM.tm_sec += (in_bUp ? 1 : -1) * 10; break; |
| vtraveller | 11:96146db429de | 64 | case eSecondSingle: sTM.tm_sec += (in_bUp ? 1 : -1); break; |
| vtraveller | 11:96146db429de | 65 | case eAmPm: |
| vtraveller | 11:96146db429de | 66 | if (bTwelveHour) |
| vtraveller | 11:96146db429de | 67 | { |
| vtraveller | 11:96146db429de | 68 | if (in_bUp) |
| vtraveller | 11:96146db429de | 69 | { |
| vtraveller | 11:96146db429de | 70 | if (sTM.tm_hour >= 12) bTwelveHour = !bTwelveHour; else sTM.tm_hour += 12; |
| vtraveller | 11:96146db429de | 71 | } |
| vtraveller | 11:96146db429de | 72 | else |
| vtraveller | 11:96146db429de | 73 | { |
| vtraveller | 11:96146db429de | 74 | if (sTM.tm_hour >= 12) sTM.tm_hour -= 12; else bTwelveHour = !bTwelveHour; |
| vtraveller | 11:96146db429de | 75 | } |
| vtraveller | 11:96146db429de | 76 | } |
| vtraveller | 11:96146db429de | 77 | else |
| vtraveller | 11:96146db429de | 78 | { |
| vtraveller | 11:96146db429de | 79 | bTwelveHour = !bTwelveHour; |
| vtraveller | 11:96146db429de | 80 | if (in_bUp && sTM.tm_hour >= 12) sTM.tm_hour -= 12; |
| vtraveller | 11:96146db429de | 81 | if (!in_bUp && sTM.tm_hour < 12) sTM.tm_hour += 12; |
| vtraveller | 11:96146db429de | 82 | } |
| vtraveller | 11:96146db429de | 83 | break; |
| vtraveller | 11:96146db429de | 84 | } |
| vtraveller | 11:96146db429de | 85 | |
| vtraveller | 11:96146db429de | 86 | if (sTM.tm_hour < 0) sTM.tm_hour = 0; |
| vtraveller | 11:96146db429de | 87 | if (sTM.tm_hour > 23) sTM.tm_hour = 23; |
| vtraveller | 11:96146db429de | 88 | if (sTM.tm_min < 0) sTM.tm_min = 0; |
| vtraveller | 28:fbcd3bac0cd7 | 89 | if (sTM.tm_min > 59) sTM.tm_min = 59; |
| vtraveller | 11:96146db429de | 90 | if (sTM.tm_sec < 0) sTM.tm_sec = 0; |
| vtraveller | 11:96146db429de | 91 | if (sTM.tm_sec > 59) sTM.tm_sec = 59; |
| vtraveller | 11:96146db429de | 92 | |
| vtraveller | 11:96146db429de | 93 | if (m_cRTclock.setTime(sTM,bTwelveHour)) |
| vtraveller | 11:96146db429de | 94 | { |
| vtraveller | 11:96146db429de | 95 | m_cRTclock.mapTime(); |
| vtraveller | 11:96146db429de | 96 | } |
| vtraveller | 11:96146db429de | 97 | else |
| vtraveller | 11:96146db429de | 98 | { |
| vtraveller | 11:96146db429de | 99 | SetTime(sTM); |
| vtraveller | 11:96146db429de | 100 | } |
| vtraveller | 11:96146db429de | 101 | } |
| vtraveller | 11:96146db429de | 102 | |
| vtraveller | 13:9641bc42db92 | 103 | int TimeModule::getCursorOffset(size_t & inout_nIndex) |
| vtraveller | 10:3fcab08717fc | 104 | { |
| vtraveller | 10:3fcab08717fc | 105 | const int k_aCursor[] = { 0, 1, 3, 4, 6, 7, 10 }; |
| vtraveller | 10:3fcab08717fc | 106 | |
| vtraveller | 13:9641bc42db92 | 107 | if ((int)inout_nIndex < 0) inout_nIndex = 0; |
| vtraveller | 13:9641bc42db92 | 108 | if (inout_nIndex >= _countof(k_aCursor)) inout_nIndex = _countof(k_aCursor) - 1; |
| vtraveller | 10:3fcab08717fc | 109 | |
| vtraveller | 13:9641bc42db92 | 110 | return k_aCursor[inout_nIndex]; |
| vtraveller | 10:3fcab08717fc | 111 | } |
| vtraveller | 10:3fcab08717fc | 112 | |
| vtraveller | 15:d1eaddb363be | 113 | void TimeModule::show(bool in_bRefresh) |
| vtraveller | 10:3fcab08717fc | 114 | { |
| vtraveller | 10:3fcab08717fc | 115 | tm sTM; |
| vtraveller | 10:3fcab08717fc | 116 | const char * pUnits = " "; |
| vtraveller | 10:3fcab08717fc | 117 | |
| vtraveller | 10:3fcab08717fc | 118 | // to get the current time information |
| vtraveller | 10:3fcab08717fc | 119 | if (m_cRTclock.getTime(sTM)) |
| vtraveller | 10:3fcab08717fc | 120 | { |
| vtraveller | 10:3fcab08717fc | 121 | // Adjust for 12 hour clock |
| vtraveller | 10:3fcab08717fc | 122 | if (m_cRTclock.isTwelveHour()) |
| vtraveller | 10:3fcab08717fc | 123 | { |
| vtraveller | 10:3fcab08717fc | 124 | pUnits = (sTM.tm_hour < 12) ? "am":"pm"; |
| vtraveller | 18:fae7e61ea160 | 125 | if (sTM.tm_hour > 12) sTM.tm_hour %= 12; |
| vtraveller | 10:3fcab08717fc | 126 | } |
| vtraveller | 10:3fcab08717fc | 127 | } |
| vtraveller | 10:3fcab08717fc | 128 | else |
| vtraveller | 10:3fcab08717fc | 129 | { |
| vtraveller | 10:3fcab08717fc | 130 | // If failed get internal time (as at least that's something |
| vtraveller | 10:3fcab08717fc | 131 | GetTime(sTM); |
| vtraveller | 10:3fcab08717fc | 132 | } |
| vtraveller | 15:d1eaddb363be | 133 | |
| vtraveller | 15:d1eaddb363be | 134 | // if refreshing - only update if there's a change |
| vtraveller | 15:d1eaddb363be | 135 | if (in_bRefresh) |
| vtraveller | 15:d1eaddb363be | 136 | { |
| vtraveller | 16:9e1edf28393f | 137 | // Check for change based on second (rest is irrelevant) |
| vtraveller | 16:9e1edf28393f | 138 | if (sTM.tm_sec == m_sLastTM.tm_sec) return; |
| vtraveller | 15:d1eaddb363be | 139 | } |
| vtraveller | 15:d1eaddb363be | 140 | |
| vtraveller | 15:d1eaddb363be | 141 | // Ensure internal struct has new TM data |
| vtraveller | 15:d1eaddb363be | 142 | ::memcpy(&m_sLastTM,&sTM,sizeof(m_sLastTM)); |
| vtraveller | 10:3fcab08717fc | 143 | |
| vtraveller | 13:9641bc42db92 | 144 | m_cDisplay.printf ("%02i:%02i:%02i %s ", sTM.tm_hour, sTM.tm_min, sTM.tm_sec, pUnits); |
| vtraveller | 10:3fcab08717fc | 145 | } |
