-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathUI.c
287 lines (251 loc) · 7.29 KB
/
UI.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
//#include <msp430f4152.h>
#include "msp430.h"
#include "UI.h"
#include "LCD.h"
#include "RTC.h"
unsigned char currentMode = MODE_SHOW_TAPATTERN;
unsigned char currentSubMode = 0;
unsigned char infoAnimMask = 0x80;
/* ***************************************
function to handle which function to run
***************************************** */
void UI_dispatchMain(void){
extern unsigned char blinkFlag;
while(1){
//LEDOFF
switch(currentMode){
case MODE_SHOW_TIME24:
UI_show24HourTime();
// manage LED
P5OUT = (P1IN & BIT7) ? BIT3 : 0;
break;
case MODE_INFO:
// manage LED
P5OUT = 0;
UI_showInfo();
break;
case MODE_SLEEP:
break;
case MODE_SET_TIME_HOUR:
// manage LED
P5OUT = 0;
UI_showSetTime(blinkFlag,1,1,1,1);
break;
case MODE_SET_TIME_MIN:
UI_showSetTime(1,blinkFlag,1,1,1);
break;
case MODE_SET_TIME_SEC:
UI_showSetTime(1,1,blinkFlag,1,1);
break;
default:
// in case something happened and a mode is set that has not been caught
currentMode = MODE_SHOW_TIME24;
break;
}
//sleep
//P5OUT = 0;
// use this to find the duty cycle of the CPU and est. power usage
//showNumber(TA1R);
_BIS_SR(LPM3_bits + GIE);
}//while loop
}
/* ***************************************
function to handle button events
***************************************** */
void UI_dispatchEvent(unsigned char TL, unsigned char BL, unsigned char BR){
// light should be on whenever TL is pressed down
// if(TL == 1) setLightOn();
if((TL| BL | BR) == 0){
// no buttons down (all buttons released)
switch(currentMode){
case MODE_SHOW_TIME12:
case MODE_SHOW_TIME24:
case MODE_INFO:
case MODE_SLEEP:
case MODE_SET_TIME_HOUR:
case MODE_SET_TIME_MIN:
case MODE_SET_TIME_SEC:
case MODE_SET_DATE_DATE:
case MODE_SET_DATE_MONTH:
case MODE_SET_DATE_YEAR:
default:
currentMode = MODE_SHOW_TIME24;
}
} else if(TL & BL){
// both left buttons are down - show info
switch(currentMode){
case MODE_SHOW_TIME24:
currentMode = MODE_INFO;
case MODE_INFO:
currentMode = MODE_SLEEP;
UI_InitShowSleep();
break;
}
} else if((BL == 1) && (TL == 0) && (BR == 1)){
// BL & BR are pressed
switch( currentMode){
case MODE_SET_SPEED:
case MODE_INFO:
case MODE_SHOW_TIME24:
default:
currentMode = MODE_SHOW_TIME24;
break;
}
} else if((BL == 0) && (TL == 1) && (BR == 0)){
// TL is pressed - increment time unit if in a time set mode
switch(currentMode){
case MODE_SET_TIME_HOUR:
RTC_incHour();
break;
case MODE_SET_TIME_MIN:
// increment hour
RTC_incMin();
break;
case MODE_SET_TIME_SEC:
// increment hour
//RTC_incSec();
RTC_resetSec();
break;
case MODE_SLEEP:
case MODE_INFO:
break;
default:
currentMode = MODE_SHOW_TIME24;
break;
}
} else if((BL == 1) && (TL == 0) && (BR == 0)){
// only BL is pressed - change mode or if in time set mode decrement time unit
// clearLCD();
switch( currentMode){
case MODE_SLEEP:
break;
case MODE_SET_TIME_HOUR:
RTC_decHour();
break;
case MODE_SET_TIME_MIN:
RTC_decMin();
break;
case MODE_SET_TIME_SEC:
//RTC_decSec();
RTC_resetSec();
break;
case MODE_SET_DATE_DATE:
RTC_decDate();
break;
case MODE_SET_DATE_MONTH:
RTC_decMonth();
break;
case MODE_SET_DATE_YEAR:
RTC_decYear();
break;
}
} else if((BL == 0) && (TL == 0) && (BR == 1)){
// BR is pressed -
switch(currentMode){
case MODE_SHOW_TAPATTERN:
currentMode = MODE_SHOW_TIME24;
break;
case MODE_SHOW_TIME24:
currentMode = MODE_SHOW_TIME24;
break;
case MODE_SET_TIME_HOUR:
currentMode = MODE_SET_TIME_MIN;
break;
case MODE_SET_TIME_MIN:
currentMode = MODE_SET_TIME_SEC;
break;
case MODE_SET_TIME_SEC:
currentMode = MODE_SET_DATE_DATE;
break;
case MODE_SET_DATE_DATE:
currentMode = MODE_SET_DATE_MONTH;
break;
case MODE_SET_DATE_MONTH:
currentMode = MODE_SET_DATE_YEAR;
break;
case MODE_SET_DATE_YEAR:
currentMode = MODE_SHOW_TIME24;
break;
default:
currentMode = MODE_SHOW_TIME24;
break;
}
} else if((BL == 0) && (TL == 1) && (BR == 1)){
// TL & BR is pressed -
switch(currentMode){
case MODE_SHOW_TIME24:
case MODE_SET_TIME_HOUR:
case MODE_SET_TIME_MIN:
case MODE_SET_TIME_SEC:
case MODE_SET_DATE_DATE:
case MODE_SET_DATE_MONTH:
case MODE_SET_DATE_YEAR:
// exit time set mode
currentMode = MODE_SHOW_TIME24;
break;
}
}
}
void UI_showSetTime(char blinkHours, char blinkMins, char blinkSecs, char blinkDate, char blinkMonth){
setH24Icon(1);
setSecsColon(1);
if(blinkHours){
setHours(RTCHOUR);
} else {
clearHours();
}
if(blinkMins){
setMins(RTCMIN);
} else {
clearMins();
}
if(blinkSecs){
setSecs(RTCSEC);
} else {
clearSecs();
}
if(blinkDate){
setDate(RTCDAY);
} else {
clearDate();
}
if(blinkMonth){
setMonth(RTCMON);
} else {
clearDay();
}
}
void UI_showSetYear(char blinkFlag){
clearLCD();
setDate(RTCDAY);
setMonth(RTCMON);
if(blinkFlag)showNumber(RTCYEAR);
}
void UI_InitShowSleep(void){
clearLCD();
setHourSegs(_S_,_L_);
setMinsSegs(_E_,_E_);
setSecsSegs(_P_,_SP_);
}
/*
void UI_showInfoStamp(void){
//unsigned int temp;
// show build date: MM:DD:YY
setHours(BUILD_MONTH);
setMins(BUILD_DAY);
setSecs(BUILD_YEAR & 0xFF);
setDate(BUILD_HOUR);
}
*/
void UI_show24HourTime(void){
showTime(RTCHOUR, RTCMIN, RTCSEC);
}
void UI_showInfo(void){
UI_showInfoHalmos();
}
void UI_showInfoHalmos(void){
clearLCD();
setHourSegs(_H_,_A_);
setMinsSegs(_L_,_M_);
setSecsSegs(0,5);
}