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@13:9641bc42db92, 2014-08-11 (annotated)
- Committer:
- vtraveller
- Date:
- Mon Aug 11 19:11:43 2014 +0000
- Revision:
- 13:9641bc42db92
- Parent:
- 11:96146db429de
- Child:
- 15:d1eaddb363be
Created a scrollable menu system based on modules to work against the Adafruit RGB LCD library.; Modules can be created and installed as menu items with display, cursor and edit capabilities.
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 | 10:3fcab08717fc | 27 | } |
| vtraveller | 10:3fcab08717fc | 28 | |
| vtraveller | 10:3fcab08717fc | 29 | TimeModule::~TimeModule() |
| vtraveller | 10:3fcab08717fc | 30 | { |
| vtraveller | 10:3fcab08717fc | 31 | } |
| vtraveller | 11:96146db429de | 32 | |
| vtraveller | 11:96146db429de | 33 | void TimeModule::change |
| vtraveller | 11:96146db429de | 34 | ( |
| vtraveller | 13:9641bc42db92 | 35 | size_t in_nIndex, |
| vtraveller | 11:96146db429de | 36 | bool in_bUp |
| vtraveller | 11:96146db429de | 37 | ) |
| vtraveller | 11:96146db429de | 38 | { |
| vtraveller | 11:96146db429de | 39 | tm sTM; |
| vtraveller | 10:3fcab08717fc | 40 | |
| vtraveller | 11:96146db429de | 41 | // to get the current time information |
| vtraveller | 11:96146db429de | 42 | if (!m_cRTclock.getTime(sTM)) GetTime(sTM); |
| vtraveller | 11:96146db429de | 43 | bool bTwelveHour = m_cRTclock.isTwelveHour(); |
| vtraveller | 11:96146db429de | 44 | |
| vtraveller | 11:96146db429de | 45 | enum ETime |
| vtraveller | 11:96146db429de | 46 | { |
| vtraveller | 11:96146db429de | 47 | eHourTen = 0, |
| vtraveller | 11:96146db429de | 48 | eHourSingle, |
| vtraveller | 11:96146db429de | 49 | eMinTen, |
| vtraveller | 11:96146db429de | 50 | eMinSingle, |
| vtraveller | 11:96146db429de | 51 | eSecondTen, |
| vtraveller | 11:96146db429de | 52 | eSecondSingle, |
| vtraveller | 11:96146db429de | 53 | eAmPm, |
| vtraveller | 11:96146db429de | 54 | }; |
| vtraveller | 11:96146db429de | 55 | |
| vtraveller | 13:9641bc42db92 | 56 | switch (in_nIndex) |
| vtraveller | 11:96146db429de | 57 | { |
| vtraveller | 11:96146db429de | 58 | case eHourTen: sTM.tm_hour += (in_bUp ? 1 : -1) * 10; break; |
| vtraveller | 11:96146db429de | 59 | case eHourSingle: sTM.tm_hour += (in_bUp ? 1 : -1); break; |
| vtraveller | 11:96146db429de | 60 | case eMinTen: sTM.tm_min += (in_bUp ? 1 : -1) * 10; break; |
| vtraveller | 11:96146db429de | 61 | case eMinSingle: sTM.tm_min += (in_bUp ? 1 : -1); break; |
| vtraveller | 11:96146db429de | 62 | case eSecondTen: sTM.tm_sec += (in_bUp ? 1 : -1) * 10; break; |
| vtraveller | 11:96146db429de | 63 | case eSecondSingle: sTM.tm_sec += (in_bUp ? 1 : -1); break; |
| vtraveller | 11:96146db429de | 64 | case eAmPm: |
| vtraveller | 11:96146db429de | 65 | if (bTwelveHour) |
| vtraveller | 11:96146db429de | 66 | { |
| vtraveller | 11:96146db429de | 67 | if (in_bUp) |
| vtraveller | 11:96146db429de | 68 | { |
| vtraveller | 11:96146db429de | 69 | if (sTM.tm_hour >= 12) bTwelveHour = !bTwelveHour; else sTM.tm_hour += 12; |
| vtraveller | 11:96146db429de | 70 | } |
| vtraveller | 11:96146db429de | 71 | else |
| vtraveller | 11:96146db429de | 72 | { |
| vtraveller | 11:96146db429de | 73 | if (sTM.tm_hour >= 12) sTM.tm_hour -= 12; else bTwelveHour = !bTwelveHour; |
| vtraveller | 11:96146db429de | 74 | } |
| vtraveller | 11:96146db429de | 75 | } |
| vtraveller | 11:96146db429de | 76 | else |
| vtraveller | 11:96146db429de | 77 | { |
| vtraveller | 11:96146db429de | 78 | bTwelveHour = !bTwelveHour; |
| vtraveller | 11:96146db429de | 79 | if (in_bUp && sTM.tm_hour >= 12) sTM.tm_hour -= 12; |
| vtraveller | 11:96146db429de | 80 | if (!in_bUp && sTM.tm_hour < 12) sTM.tm_hour += 12; |
| vtraveller | 11:96146db429de | 81 | } |
| vtraveller | 11:96146db429de | 82 | break; |
| vtraveller | 11:96146db429de | 83 | } |
| vtraveller | 11:96146db429de | 84 | |
| vtraveller | 11:96146db429de | 85 | if (sTM.tm_hour < 0) sTM.tm_hour = 0; |
| vtraveller | 11:96146db429de | 86 | if (sTM.tm_hour > 23) sTM.tm_hour = 23; |
| vtraveller | 11:96146db429de | 87 | if (sTM.tm_min < 0) sTM.tm_min = 0; |
| vtraveller | 11:96146db429de | 88 | if (sTM.tm_hour > 59) sTM.tm_min = 59; |
| vtraveller | 11:96146db429de | 89 | if (sTM.tm_sec < 0) sTM.tm_sec = 0; |
| vtraveller | 11:96146db429de | 90 | if (sTM.tm_sec > 59) sTM.tm_sec = 59; |
| vtraveller | 11:96146db429de | 91 | |
| vtraveller | 11:96146db429de | 92 | if (m_cRTclock.setTime(sTM,bTwelveHour)) |
| vtraveller | 11:96146db429de | 93 | { |
| vtraveller | 11:96146db429de | 94 | m_cRTclock.mapTime(); |
| vtraveller | 11:96146db429de | 95 | } |
| vtraveller | 11:96146db429de | 96 | else |
| vtraveller | 11:96146db429de | 97 | { |
| vtraveller | 11:96146db429de | 98 | SetTime(sTM); |
| vtraveller | 11:96146db429de | 99 | } |
| vtraveller | 11:96146db429de | 100 | } |
| vtraveller | 11:96146db429de | 101 | |
| vtraveller | 13:9641bc42db92 | 102 | int TimeModule::getCursorOffset(size_t & inout_nIndex) |
| vtraveller | 10:3fcab08717fc | 103 | { |
| vtraveller | 10:3fcab08717fc | 104 | const int k_aCursor[] = { 0, 1, 3, 4, 6, 7, 10 }; |
| vtraveller | 10:3fcab08717fc | 105 | |
| vtraveller | 13:9641bc42db92 | 106 | if ((int)inout_nIndex < 0) inout_nIndex = 0; |
| vtraveller | 13:9641bc42db92 | 107 | if (inout_nIndex >= _countof(k_aCursor)) inout_nIndex = _countof(k_aCursor) - 1; |
| vtraveller | 10:3fcab08717fc | 108 | |
| vtraveller | 13:9641bc42db92 | 109 | return k_aCursor[inout_nIndex]; |
| vtraveller | 10:3fcab08717fc | 110 | } |
| vtraveller | 10:3fcab08717fc | 111 | |
| vtraveller | 10:3fcab08717fc | 112 | void TimeModule::show() |
| vtraveller | 10:3fcab08717fc | 113 | { |
| vtraveller | 10:3fcab08717fc | 114 | tm sTM; |
| vtraveller | 10:3fcab08717fc | 115 | const char * pUnits = " "; |
| vtraveller | 10:3fcab08717fc | 116 | |
| vtraveller | 10:3fcab08717fc | 117 | // to get the current time information |
| vtraveller | 10:3fcab08717fc | 118 | if (m_cRTclock.getTime(sTM)) |
| vtraveller | 10:3fcab08717fc | 119 | { |
| vtraveller | 10:3fcab08717fc | 120 | // Adjust for 12 hour clock |
| vtraveller | 10:3fcab08717fc | 121 | if (m_cRTclock.isTwelveHour()) |
| vtraveller | 10:3fcab08717fc | 122 | { |
| vtraveller | 10:3fcab08717fc | 123 | pUnits = (sTM.tm_hour < 12) ? "am":"pm"; |
| vtraveller | 10:3fcab08717fc | 124 | sTM.tm_hour %= 12; |
| vtraveller | 10:3fcab08717fc | 125 | } |
| vtraveller | 10:3fcab08717fc | 126 | } |
| vtraveller | 10:3fcab08717fc | 127 | else |
| vtraveller | 10:3fcab08717fc | 128 | { |
| vtraveller | 10:3fcab08717fc | 129 | // If failed get internal time (as at least that's something |
| vtraveller | 10:3fcab08717fc | 130 | GetTime(sTM); |
| vtraveller | 10:3fcab08717fc | 131 | } |
| vtraveller | 10:3fcab08717fc | 132 | |
| vtraveller | 13:9641bc42db92 | 133 | m_cDisplay.printf ("%02i:%02i:%02i %s ", sTM.tm_hour, sTM.tm_min, sTM.tm_sec, pUnits); |
| vtraveller | 10:3fcab08717fc | 134 | } |
