Clock with Real-Time Clock (RTC-8564) and I2C LCD module(SB1062B).
Dependencies: DebouncedEdgeIn I2cLCD_cursor Rtc8564 mbed beep
Diff: ViewModel/ClockViewModel.cpp
- Revision:
- 1:f8713c387a68
- Parent:
- 0:86ab67787717
- Child:
- 2:6f0158399eff
diff -r 86ab67787717 -r f8713c387a68 ViewModel/ClockViewModel.cpp --- a/ViewModel/ClockViewModel.cpp Sun Feb 09 09:05:25 2014 +0000 +++ b/ViewModel/ClockViewModel.cpp Fri Feb 14 09:24:03 2014 +0000 @@ -1,4 +1,5 @@ #include "ClockViewModel.h" +#include "EventMechanism/EventParam0.h" using ViewModel::ClockViewModel; @@ -18,14 +19,30 @@ // Antenna // -------------- -ClockViewModel::ClockViewModel(I2cLCD& i2clcd) +ClockViewModel::ClockViewModel(I2cLCD& i2clcd, PinName set, PinName select, EventMechanism::I_EventHandler* evHandler, DigitalOut& led) :m_i2clcd(i2clcd), - m_sec(0) + m_set(set), + m_select(select), + m_evHandler(evHandler), + m_clock(0), + m_dateTime(0), + m_led(led) { + m_set.mode(PullUp); + m_set.fall(this, &ClockViewModel::setButtonPressed); +} + +void ClockViewModel::setClock(Model::Clock* clock) +{ + m_clock = clock; + m_dateTime = m_clock->getDateTime(); } void ClockViewModel::initialize() { + //m_set.rise(this, &ClockViewModel::setButtonPressed); + m_select.fall(this, &ClockViewModel::selectButtonPressed); + // print ICON m_i2clcd.seticon( I2cLCD::Mark ); m_i2clcd.seticon( I2cLCD::Battery_1 ); @@ -42,16 +59,54 @@ m_i2clcd.seticon( I2cLCD::Antenna ); } -void ClockViewModel::renew() +void ClockViewModel::dateTimeUpdated() { - m_i2clcd.seticon( I2cLCD::Antenna ); + static char dat[31] = " 20-- / -- / --\n -- : -- : --"; + uint8_t val = 0; + + val = m_dateTime->year % 100; + dat[3] = '0' + val / 10; + dat[4] = '0' + val % 10; + val = m_dateTime->month; + dat[8] = '0' + val / 10; + dat[9] = '0' + val % 10; + val = m_dateTime->day; + dat[13] = '0' + val / 10; + dat[14] = '0' + val % 10; + val = m_dateTime->hour; + dat[18] = '0' + val / 10; + dat[19] = '0' + val % 10; + val = m_dateTime->minute; + dat[23] = '0' + val / 10; + dat[24] = '0' + val % 10; + val = m_dateTime->second; + dat[28] = '0' + val / 10; + dat[29] = '0' + val % 10; + m_i2clcd.locate(0, 0); - m_i2clcd.printf(" 2015 / 02 / 08\n 17 : 02 : %02d", m_sec); - m_sec = (++m_sec == 60)? 0 : m_sec; + m_i2clcd.puts(dat); } -void ClockViewModel::informHalfSec() +void ClockViewModel::setButtonPressed() { - m_i2clcd.clearicon( I2cLCD::Antenna ); + m_evHandler->postEvent(new EventMechanism::EventParam0<ClockViewModel>(this, &ClockViewModel::setButtonPressedAsync)); +} + +void ClockViewModel::setButtonPressedAsync() +{ + puts("setButtonPressedAsync\n"); + m_led = (m_led == 1)? 0 : 1; + m_clock->initialize(); } +void ClockViewModel::selectButtonPressed() +{ + m_evHandler->postEvent(new EventMechanism::EventParam0<ClockViewModel>(this, &ClockViewModel::selectButtonPressedAsync)); +} + +void ClockViewModel::selectButtonPressedAsync() +{ + puts("selectButtonPressedAsync\n"); + m_led = (m_led == 1)? 0 : 1; + m_clock->initialize(); +}