Clock with Real-Time Clock (RTC-8564) and I2C LCD module(SB1062B).
Dependencies: DebouncedEdgeIn I2cLCD_cursor Rtc8564 mbed beep
ViewModel/ClockViewModel.cpp@2:6f0158399eff, 2014-02-17 (annotated)
- Committer:
- togayan
- Date:
- Mon Feb 17 08:13:21 2014 +0000
- Revision:
- 2:6f0158399eff
- Parent:
- 1:f8713c387a68
- Child:
- 5:e374481e7554
test
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
togayan | 0:86ab67787717 | 1 | #include "ClockViewModel.h" |
togayan | 0:86ab67787717 | 2 | |
togayan | 0:86ab67787717 | 3 | using ViewModel::ClockViewModel; |
togayan | 0:86ab67787717 | 4 | |
togayan | 0:86ab67787717 | 5 | // Icon Name ---- |
togayan | 0:86ab67787717 | 6 | // Mark |
togayan | 0:86ab67787717 | 7 | // Battery_1 |
togayan | 0:86ab67787717 | 8 | // Battery_2 |
togayan | 0:86ab67787717 | 9 | // Battery_3 |
togayan | 0:86ab67787717 | 10 | // Battery_4 |
togayan | 0:86ab67787717 | 11 | // NoSound |
togayan | 0:86ab67787717 | 12 | // Lock |
togayan | 0:86ab67787717 | 13 | // ArrowDown |
togayan | 0:86ab67787717 | 14 | // ArrowUp |
togayan | 0:86ab67787717 | 15 | // Input |
togayan | 0:86ab67787717 | 16 | // Alarm |
togayan | 0:86ab67787717 | 17 | // Tell |
togayan | 0:86ab67787717 | 18 | // Antenna |
togayan | 0:86ab67787717 | 19 | // -------------- |
togayan | 0:86ab67787717 | 20 | |
togayan | 2:6f0158399eff | 21 | const char* ClockViewModel::WEEKDAYS[] = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT", "ERR"}; |
togayan | 2:6f0158399eff | 22 | |
togayan | 2:6f0158399eff | 23 | ClockViewModel::ClockViewModel(I2cLCD& i2clcd, PinName set, PinName increment, PinName decrement) |
togayan | 0:86ab67787717 | 24 | :m_i2clcd(i2clcd), |
togayan | 1:f8713c387a68 | 25 | m_set(set), |
togayan | 2:6f0158399eff | 26 | m_increment(increment), |
togayan | 2:6f0158399eff | 27 | m_decrement(decrement), |
togayan | 1:f8713c387a68 | 28 | m_clock(0), |
togayan | 1:f8713c387a68 | 29 | m_dateTime(0), |
togayan | 2:6f0158399eff | 30 | m_mode(Model::CLOCK) |
togayan | 0:86ab67787717 | 31 | { |
togayan | 1:f8713c387a68 | 32 | m_set.mode(PullUp); |
togayan | 2:6f0158399eff | 33 | m_increment.mode(PullUp); |
togayan | 2:6f0158399eff | 34 | m_decrement.mode(PullUp); |
togayan | 2:6f0158399eff | 35 | m_set.fall(this, &ClockViewModel::setButtonOn); |
togayan | 2:6f0158399eff | 36 | m_increment.fall(this, &ClockViewModel::incrementButtonOn); |
togayan | 2:6f0158399eff | 37 | m_decrement.fall(this, &ClockViewModel::decrementButtonOn); |
togayan | 1:f8713c387a68 | 38 | } |
togayan | 1:f8713c387a68 | 39 | |
togayan | 1:f8713c387a68 | 40 | void ClockViewModel::setClock(Model::Clock* clock) |
togayan | 1:f8713c387a68 | 41 | { |
togayan | 1:f8713c387a68 | 42 | m_clock = clock; |
togayan | 1:f8713c387a68 | 43 | m_dateTime = m_clock->getDateTime(); |
togayan | 0:86ab67787717 | 44 | } |
togayan | 0:86ab67787717 | 45 | |
togayan | 0:86ab67787717 | 46 | void ClockViewModel::initialize() |
togayan | 0:86ab67787717 | 47 | { |
togayan | 0:86ab67787717 | 48 | // print ICON |
togayan | 0:86ab67787717 | 49 | m_i2clcd.seticon( I2cLCD::Mark ); |
togayan | 0:86ab67787717 | 50 | m_i2clcd.seticon( I2cLCD::Battery_1 ); |
togayan | 0:86ab67787717 | 51 | m_i2clcd.seticon( I2cLCD::Battery_2 ); |
togayan | 0:86ab67787717 | 52 | m_i2clcd.seticon( I2cLCD::Battery_3 ); |
togayan | 0:86ab67787717 | 53 | m_i2clcd.seticon( I2cLCD::Battery_4 ); |
togayan | 0:86ab67787717 | 54 | m_i2clcd.seticon( I2cLCD::NoSound ); |
togayan | 0:86ab67787717 | 55 | m_i2clcd.seticon( I2cLCD::Lock ); |
togayan | 0:86ab67787717 | 56 | m_i2clcd.seticon( I2cLCD::ArrowDown ); |
togayan | 0:86ab67787717 | 57 | m_i2clcd.seticon( I2cLCD::ArrowUp ); |
togayan | 0:86ab67787717 | 58 | m_i2clcd.seticon( I2cLCD::Input ); |
togayan | 0:86ab67787717 | 59 | m_i2clcd.seticon( I2cLCD::Alarm ); |
togayan | 0:86ab67787717 | 60 | m_i2clcd.seticon( I2cLCD::Tell ); |
togayan | 0:86ab67787717 | 61 | m_i2clcd.seticon( I2cLCD::Antenna ); |
togayan | 0:86ab67787717 | 62 | } |
togayan | 0:86ab67787717 | 63 | |
togayan | 1:f8713c387a68 | 64 | void ClockViewModel::dateTimeUpdated() |
togayan | 0:86ab67787717 | 65 | { |
togayan | 2:6f0158399eff | 66 | static char dat[31] = " 20--/--/-- ***\n -- : -- : --"; |
togayan | 1:f8713c387a68 | 67 | uint8_t val = 0; |
togayan | 1:f8713c387a68 | 68 | |
togayan | 2:6f0158399eff | 69 | val = m_dateTime->tm_year % 100; |
togayan | 2:6f0158399eff | 70 | dat[3] = '0' + val / 10; |
togayan | 2:6f0158399eff | 71 | dat[4] = '0' + val % 10; |
togayan | 2:6f0158399eff | 72 | val = m_dateTime->tm_mon + 1; |
togayan | 2:6f0158399eff | 73 | dat[6] = '0' + val / 10; |
togayan | 2:6f0158399eff | 74 | dat[7] = '0' + val % 10; |
togayan | 2:6f0158399eff | 75 | val = m_dateTime->tm_mday; |
togayan | 2:6f0158399eff | 76 | dat[9] = '0' + val / 10; |
togayan | 2:6f0158399eff | 77 | dat[10] = '0' + val % 10; |
togayan | 2:6f0158399eff | 78 | val = m_dateTime->tm_wday; |
togayan | 2:6f0158399eff | 79 | dat[12] = WEEKDAYS[val][0]; |
togayan | 2:6f0158399eff | 80 | dat[13] = WEEKDAYS[val][1]; |
togayan | 2:6f0158399eff | 81 | dat[14] = WEEKDAYS[val][2]; |
togayan | 2:6f0158399eff | 82 | val = m_dateTime->tm_hour; |
togayan | 1:f8713c387a68 | 83 | dat[18] = '0' + val / 10; |
togayan | 1:f8713c387a68 | 84 | dat[19] = '0' + val % 10; |
togayan | 2:6f0158399eff | 85 | val = m_dateTime->tm_min; |
togayan | 1:f8713c387a68 | 86 | dat[23] = '0' + val / 10; |
togayan | 1:f8713c387a68 | 87 | dat[24] = '0' + val % 10; |
togayan | 2:6f0158399eff | 88 | val = m_dateTime->tm_sec; |
togayan | 1:f8713c387a68 | 89 | dat[28] = '0' + val / 10; |
togayan | 1:f8713c387a68 | 90 | dat[29] = '0' + val % 10; |
togayan | 1:f8713c387a68 | 91 | |
togayan | 0:86ab67787717 | 92 | m_i2clcd.locate(0, 0); |
togayan | 1:f8713c387a68 | 93 | m_i2clcd.puts(dat); |
togayan | 2:6f0158399eff | 94 | setCurSor(); |
togayan | 2:6f0158399eff | 95 | } |
togayan | 2:6f0158399eff | 96 | |
togayan | 2:6f0158399eff | 97 | void ClockViewModel::mode(Model::OperationMode mode) |
togayan | 2:6f0158399eff | 98 | { |
togayan | 2:6f0158399eff | 99 | m_mode = mode; |
togayan | 2:6f0158399eff | 100 | setCurSor(); |
togayan | 0:86ab67787717 | 101 | } |
togayan | 0:86ab67787717 | 102 | |
togayan | 2:6f0158399eff | 103 | void ClockViewModel::setButtonOn() |
togayan | 2:6f0158399eff | 104 | { |
togayan | 2:6f0158399eff | 105 | m_clock->requestModeChange(); |
togayan | 2:6f0158399eff | 106 | } |
togayan | 2:6f0158399eff | 107 | |
togayan | 2:6f0158399eff | 108 | void ClockViewModel::incrementButtonOn() |
togayan | 0:86ab67787717 | 109 | { |
togayan | 2:6f0158399eff | 110 | m_clock->requestIncrementValue(); |
togayan | 2:6f0158399eff | 111 | } |
togayan | 2:6f0158399eff | 112 | |
togayan | 2:6f0158399eff | 113 | void ClockViewModel::decrementButtonOn() |
togayan | 2:6f0158399eff | 114 | { |
togayan | 2:6f0158399eff | 115 | m_clock->requestDecrementValue(); |
togayan | 1:f8713c387a68 | 116 | } |
togayan | 1:f8713c387a68 | 117 | |
togayan | 2:6f0158399eff | 118 | void ClockViewModel::setCurSor() |
togayan | 1:f8713c387a68 | 119 | { |
togayan | 2:6f0158399eff | 120 | switch(m_mode) |
togayan | 2:6f0158399eff | 121 | { |
togayan | 2:6f0158399eff | 122 | case Model::CLOCK: |
togayan | 2:6f0158399eff | 123 | m_i2clcd.cursor(false, 0, 0); |
togayan | 2:6f0158399eff | 124 | break; |
togayan | 2:6f0158399eff | 125 | case Model::SET_YEAR: |
togayan | 2:6f0158399eff | 126 | m_i2clcd.cursor(true, 4, 0); |
togayan | 2:6f0158399eff | 127 | break; |
togayan | 2:6f0158399eff | 128 | case Model::SET_MONTH: |
togayan | 2:6f0158399eff | 129 | m_i2clcd.cursor(true, 7, 0); |
togayan | 2:6f0158399eff | 130 | break; |
togayan | 2:6f0158399eff | 131 | case Model::SET_DAY: |
togayan | 2:6f0158399eff | 132 | m_i2clcd.cursor(true, 10, 0); |
togayan | 2:6f0158399eff | 133 | break; |
togayan | 2:6f0158399eff | 134 | case Model::SET_HOUR: |
togayan | 2:6f0158399eff | 135 | m_i2clcd.cursor(true, 3, 1); |
togayan | 2:6f0158399eff | 136 | break; |
togayan | 2:6f0158399eff | 137 | case Model::SET_MINUTE: |
togayan | 2:6f0158399eff | 138 | m_i2clcd.cursor(true, 8, 1); |
togayan | 2:6f0158399eff | 139 | break; |
togayan | 2:6f0158399eff | 140 | case Model::SET_SECOND: |
togayan | 2:6f0158399eff | 141 | m_i2clcd.cursor(true, 13, 1); |
togayan | 2:6f0158399eff | 142 | break; |
togayan | 2:6f0158399eff | 143 | default: |
togayan | 2:6f0158399eff | 144 | break; |
togayan | 2:6f0158399eff | 145 | } |
togayan | 1:f8713c387a68 | 146 | } |