Clock with Real-Time Clock (RTC-8564) and I2C LCD module(SB1062B).

Dependencies:   DebouncedEdgeIn I2cLCD_cursor Rtc8564 mbed beep

/media/uploads/togayan/imgp0004s.jpg /media/uploads/togayan/lcdclock_circuit_rev4.png

Revision:
1:f8713c387a68
Parent:
0:86ab67787717
Child:
2:6f0158399eff
--- 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();
+}