Satoshi Togawa / Mbed 2 deprecated LcdClock

Dependencies:   DebouncedEdgeIn I2cLCD_cursor Rtc8564 mbed beep

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers ClockViewModel.cpp Source File

ClockViewModel.cpp

00001 #include "ClockViewModel.h"
00002 
00003 using ViewModel::ClockViewModel;
00004 
00005 // Icon Name ----
00006 // Mark
00007 // Battery_1
00008 // Battery_2
00009 // Battery_3
00010 // Battery_4
00011 // NoSound
00012 // Lock
00013 // ArrowDown
00014 // ArrowUp
00015 // Input
00016 // Alarm
00017 // Tell
00018 // Antenna
00019 // --------------
00020 
00021 const char* ClockViewModel::WEEKDAYS[] = {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT", "ERR"};
00022 
00023 ClockViewModel::ClockViewModel(I2cLCD& i2clcd, PinName set, PinName increment, PinName decrement, PinName beep1, PinName beep2)
00024     :m_i2clcd(i2clcd),
00025      m_set(set),
00026      m_increment(increment),
00027      m_decrement(decrement),
00028      m_beep(beep1),
00029      m_beepGnd(beep2),
00030      m_clock(0),
00031      m_dateTime(0),
00032      m_mode(Model::CLOCK)
00033 {
00034     m_set.mode(PullUp);
00035     m_increment.mode(PullUp);
00036     m_decrement.mode(PullUp);
00037     m_set.fall(this, &ClockViewModel::modeButtonOn);
00038     m_increment.fall(this, &ClockViewModel::incrementButtonOn);
00039     m_decrement.fall(this, &ClockViewModel::decrementButtonOn);
00040 }
00041 
00042 void ClockViewModel::setClock(Model::Clock* clock)
00043 {
00044     m_clock = clock;
00045     m_dateTime = m_clock->getDateTime();
00046 }
00047 
00048 void ClockViewModel::initialize()
00049 {
00050     // print ICON
00051     m_i2clcd.seticon( I2cLCD::Mark );
00052     m_i2clcd.seticon( I2cLCD::Battery_1 );
00053     m_i2clcd.seticon( I2cLCD::Battery_2 );
00054     m_i2clcd.seticon( I2cLCD::Battery_3 );
00055     m_i2clcd.seticon( I2cLCD::Battery_4 );
00056     m_i2clcd.seticon( I2cLCD::NoSound );
00057     m_i2clcd.seticon( I2cLCD::Lock );
00058     m_i2clcd.seticon( I2cLCD::ArrowDown );
00059     m_i2clcd.seticon( I2cLCD::ArrowUp );
00060     m_i2clcd.seticon( I2cLCD::Input );
00061     m_i2clcd.seticon( I2cLCD::Alarm );
00062     m_i2clcd.seticon( I2cLCD::Tell );
00063     m_i2clcd.seticon( I2cLCD::Antenna );
00064 }
00065 
00066 void ClockViewModel::dateTimeUpdated()
00067 {
00068     static char dat[31] = " 20--/--/-- ***\n  -- : -- : --";
00069     uint8_t val = 0;
00070 
00071     val = m_dateTime->tm_year % 100;
00072     dat[3]  = '0' + val / 10;
00073     dat[4]  = '0' + val % 10;
00074     val = m_dateTime->tm_mon + 1;
00075     dat[6]  = '0' + val / 10;
00076     dat[7]  = '0' + val % 10;
00077     val = m_dateTime->tm_mday;
00078     dat[9]  = '0' + val / 10;
00079     dat[10] = '0' + val % 10;
00080     val = m_dateTime->tm_wday;
00081     dat[12] = WEEKDAYS[val][0];
00082     dat[13] = WEEKDAYS[val][1];
00083     dat[14] = WEEKDAYS[val][2];
00084     val = m_dateTime->tm_hour;
00085     dat[18] = '0' + val / 10;
00086     dat[19] = '0' + val % 10;
00087     val = m_dateTime->tm_min;
00088     dat[23] = '0' + val / 10;
00089     dat[24] = '0' + val % 10;
00090     val = m_dateTime->tm_sec;
00091     dat[28] = '0' + val / 10;
00092     dat[29] = '0' + val % 10;
00093 
00094     m_i2clcd.locate(0, 0);
00095     m_i2clcd.puts(dat);
00096     setCurSor();
00097 }
00098 
00099 void ClockViewModel::mode(Model::OperationMode mode)
00100 {
00101     m_mode = mode;
00102     setCurSor();
00103 }
00104 
00105 void ClockViewModel::modeButtonOn()
00106 {
00107     m_beep.beep(400, 0.05);
00108     m_clock->requestModeChange();
00109 }
00110 
00111 void ClockViewModel::incrementButtonOn()
00112 {
00113     if(m_mode == Model::CLOCK) {
00114         return;
00115     }
00116     m_beep.beep(400, 0.05);
00117     m_clock->requestIncrementValue();
00118 }
00119 
00120 void ClockViewModel::decrementButtonOn()
00121 {
00122     if(m_mode == Model::CLOCK) {
00123         return;
00124     }
00125     m_beep.beep(400, 0.05);
00126     m_clock->requestDecrementValue();
00127 }
00128 
00129 void ClockViewModel::setCurSor()
00130 {
00131     switch(m_mode) {
00132         case Model::CLOCK:
00133             m_i2clcd.cursor(false, 0, 0);
00134             break;
00135         case Model::SET_YEAR:
00136             m_i2clcd.cursor(true, 4, 0);
00137             break;
00138         case Model::SET_MONTH:
00139             m_i2clcd.cursor(true, 7, 0);
00140             break;
00141         case Model::SET_DAY:
00142             m_i2clcd.cursor(true, 10, 0);
00143             break;
00144         case Model::SET_HOUR:
00145             m_i2clcd.cursor(true, 3, 1);
00146             break;
00147         case Model::SET_MINUTE:
00148             m_i2clcd.cursor(true, 8, 1);
00149             break;
00150         case Model::SET_SECOND:
00151             m_i2clcd.cursor(true, 13, 1);
00152             break;
00153         default:
00154             break;
00155     }
00156 }