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: DebouncedEdgeIn I2cLCD_cursor Rtc8564 mbed beep
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 }
Generated on Wed Jul 13 2022 02:25:45 by
1.7.2