... | ... |
@@ -174,7 +174,7 @@ void DrawLcdAnaClock(boolean show_seconds) |
174 | 174 |
hal_lcd_clear_display(); |
175 | 175 |
oswald_draw_rect(0,0,95,95,1); |
176 | 176 |
|
177 |
- snprintf(tstr, 16, "%2d", OswaldClk.day); |
|
177 |
+ tstr[num2str(OswaldClk.day,tstr,1,2)]='\0'; |
|
178 | 178 |
oswald_write_string(70, 44, FONT_5x8, 1, tstr); |
179 | 179 |
|
180 | 180 |
// Marker |
... | ... |
@@ -221,7 +221,7 @@ void DrawLcdDigitalClockGen(boolean show_seconds, int show_wday) |
221 | 221 |
static char *dnames[]={"SUN","MON","TUE","WED","THU","FRI","SAT"}; |
222 | 222 |
int w,x,y,yf; |
223 | 223 |
unsigned char val; |
224 |
- char *t; |
|
224 |
+ const char *t; |
|
225 | 225 |
hal_lcd_clear_display(); |
226 | 226 |
oswald_draw_rect(0,0,95,95,1); |
227 | 227 |
if(show_wday) { |
... | ... |
@@ -269,6 +269,8 @@ void DrawCalendarClock(boolean show_seconds) |
269 | 269 |
int sx,sy; |
270 | 270 |
int gw,gh; |
271 | 271 |
int wday,yday,month,year,day,rollup; |
272 |
+ const char *ptr; |
|
273 |
+ int off; |
|
272 | 274 |
|
273 | 275 |
hal_lcd_clear_display(); |
274 | 276 |
gRow=4; |
... | ... |
@@ -301,10 +303,24 @@ void DrawCalendarClock(boolean show_seconds) |
301 | 303 |
if(!OswaldClk.clk24hr) |
302 | 304 |
oswald_write_string(gRow+3,gColumn+3,FONT_6x9, FALSE,(OswaldClk.hour>12)?"PM":"AM"); |
303 | 305 |
/* The date */ |
304 |
- if (OswaldClk.day_first) |
|
305 |
- snprintf(tstr, 16, "%s %d.%d.%d", daynames[OswaldClk.wday], OswaldClk.day, OswaldClk.month, OswaldClk.year); |
|
306 |
- else |
|
307 |
- snprintf(tstr, 16, "%s %d/%d %d", daynames[OswaldClk.wday], OswaldClk.month, OswaldClk.day, OswaldClk.year); |
|
306 |
+ off=0; |
|
307 |
+ ptr=daynames[OswaldClk.wday]; |
|
308 |
+ off=mystrlen(ptr); |
|
309 |
+ mymemcpy(tstr,ptr,off); |
|
310 |
+ tstr[off++]=' '; |
|
311 |
+ if (OswaldClk.day_first) { |
|
312 |
+ off+=num2str(OswaldClk.day,tstr+off,1,sizeof(tstr)-off-3); |
|
313 |
+ tstr[off++]='.'; |
|
314 |
+ off+=num2str(OswaldClk.month,tstr+off,1,sizeof(tstr)-off-2); |
|
315 |
+ tstr[off++]='.'; |
|
316 |
+ } else { |
|
317 |
+ off+=num2str(OswaldClk.month,tstr+off,1,sizeof(tstr)-off-3); |
|
318 |
+ tstr[off++]='/'; |
|
319 |
+ off+=num2str(OswaldClk.day,tstr+off,1,sizeof(tstr)-off-2); |
|
320 |
+ tstr[off++]=' '; |
|
321 |
+ } |
|
322 |
+ off+=num2str(OswaldClk.year,tstr+off,1,sizeof(tstr)-off-1); |
|
323 |
+ tstr[off]='\0'; |
|
308 | 324 |
oswald_draw_rect(2,0,93,7,1); |
309 | 325 |
oswald_write_string(3, 0, FONT_5x8, 1, tstr); |
310 | 326 |
/* The minicalendar */ |
... | ... |
@@ -41,6 +41,10 @@ __attribute__((__far__)) |
41 | 41 |
#if defined(__GNUC__) && (__MSP430X__ > 0) |
42 | 42 |
__attribute__((__far__)) |
43 | 43 |
#endif |
44 |
+#include "bitmaps/tinybluetooth_icon.xbm" |
|
45 |
+#if defined(__GNUC__) && (__MSP430X__ > 0) |
|
46 |
+__attribute__((__far__)) |
|
47 |
+#endif |
|
44 | 48 |
#include "bitmaps/bluetooth_con_icon.xbm" |
45 | 49 |
#if defined(__GNUC__) && (__MSP430X__ > 0) |
46 | 50 |
__attribute__((__far__)) |
... | ... |
@@ -140,7 +144,7 @@ void draw_status_icons(int x, int y, int fg) |
140 | 144 |
} |
141 | 145 |
|
142 | 146 |
if (hal_bluetooth_get_state() == BLUETOOTH_ON) |
143 |
- oswald_draw_bitmap(x, y, bluetooth_icon_width, bluetooth_icon_height, fg, bluetooth_icon_bits); |
|
147 |
+ oswald_draw_bitmap(x, y, tinybluetooth_icon_width, tinybluetooth_icon_height, fg, tinybluetooth_icon_bits); |
|
144 | 148 |
else if (hal_bluetooth_get_state() == BLUETOOTH_CONNECTED) |
145 | 149 |
oswald_draw_bitmap(x, y, bluetooth_con_icon_width, bluetooth_con_icon_height, fg, bluetooth_con_icon_bits); |
146 | 150 |
} |
... | ... |
@@ -212,19 +212,24 @@ void DrawLcdAnaClock(boolean show_seconds) |
212 | 212 |
|
213 | 213 |
static const char *daynames[7] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; |
214 | 214 |
|
215 |
-void DrawLcdDigitalClock(boolean show_seconds) |
|
215 |
+void DrawLcdDigitalClockGen(boolean show_seconds, int show_wday) |
|
216 | 216 |
{ |
217 |
+ static char *dnames[]={"SUN","MON","TUE","WED","THU","FRI","SAT"}; |
|
217 | 218 |
int w,x,y,yf; |
218 | 219 |
unsigned char val; |
220 |
+ char *t; |
|
219 | 221 |
hal_lcd_clear_display(); |
220 | 222 |
oswald_draw_rect(0,0,95,95,1); |
223 |
+ if(show_wday) { |
|
224 |
+ for(x=24,y=6,t=daynames[OswaldClk.wday];*t!='\0';t++,x+=w+4) |
|
225 |
+ oswald_draw_font58_scaled(x,y,*t,&w,0,1,3,2); |
|
226 |
+ } |
|
221 | 227 |
val = OswaldClk.hour; |
222 | 228 |
if (!OswaldClk.clk24hr) |
223 | 229 |
val=(val>12)?val-12:val; |
224 | 230 |
x=6; |
225 |
- //yf=5; |
|
226 | 231 |
yf=10; |
227 |
- y=(96/2)-(3*yf); |
|
232 |
+ y=(96/2)-(3*yf)+(show_wday?10:0); |
|
228 | 233 |
if(val>=10) |
229 | 234 |
oswald_draw_font58_scaled(x,y,(val / 10)+'0',&w,0,1,4,yf); |
230 | 235 |
oswald_draw_font58_scaled((x=x+16+2),y,(val % 10)+'0',&w,0,1,4,yf); |
... | ... |
@@ -239,6 +244,16 @@ void DrawLcdDigitalClock(boolean show_seconds) |
239 | 244 |
hal_lcd_update_display(); |
240 | 245 |
} |
241 | 246 |
|
247 |
+void |
|
248 |
+DrawLcdDigitalClock(boolean show_seconds) { |
|
249 |
+ DrawLcdDigitalClockGen(show_seconds,0); |
|
250 |
+} |
|
251 |
+ |
|
252 |
+void |
|
253 |
+DrawLcdDigitalClock2(boolean show_seconds) { |
|
254 |
+ DrawLcdDigitalClockGen(show_seconds,1); |
|
255 |
+} |
|
256 |
+ |
|
242 | 257 |
void DrawCalendarClock(boolean show_seconds) |
243 | 258 |
{ |
244 | 259 |
int gRow = 1; |
... | ... |
@@ -104,41 +104,45 @@ int16_t f_cos(int16_t v) |
104 | 104 |
return sintab[v]; |
105 | 105 |
} |
106 | 106 |
|
107 |
-void draw_status_icons(void) |
|
107 |
+void draw_status_icons(int x, int y, int fg) |
|
108 | 108 |
{ |
109 | 109 |
static uint8_t ci = 0; |
110 |
+ if(x==-1) |
|
111 |
+ x=81; |
|
112 |
+ if(y==-1) |
|
113 |
+ y=0; |
|
110 | 114 |
|
111 | 115 |
if (OswaldPowerState.source) { |
112 |
- oswald_draw_bitmap(81, 0, charger_icon_width, charger_icon_height, charger_icon_bits); |
|
116 |
+ oswald_draw_bitmap(x, y, charger_icon_width, charger_icon_height, fg, charger_icon_bits); |
|
113 | 117 |
|
114 | 118 |
if (OswaldPowerState.charge_state != POWER_CHARGER_DONE) { |
115 |
- if (ci==0) oswald_draw_bitmap(81, 0, battery0_icon_width, battery0_icon_height, battery0_icon_bits); |
|
116 |
- else if (ci==1) oswald_draw_bitmap(81, 0, battery25_icon_width, battery25_icon_height, battery25_icon_bits); |
|
117 |
- else if (ci==2) oswald_draw_bitmap(81, 0, battery50_icon_width, battery50_icon_height, battery50_icon_bits); |
|
118 |
- else if (ci==3) oswald_draw_bitmap(81, 0, battery75_icon_width, battery75_icon_height, battery75_icon_bits); |
|
119 |
- else if (ci==4) oswald_draw_bitmap(81, 0, battery100_icon_width, battery100_icon_height, battery100_icon_bits); |
|
119 |
+ if (ci==0) oswald_draw_bitmap(x, y, battery0_icon_width, battery0_icon_height, fg, battery0_icon_bits); |
|
120 |
+ else if (ci==1) oswald_draw_bitmap(x, y, battery25_icon_width, battery25_icon_height, fg, battery25_icon_bits); |
|
121 |
+ else if (ci==2) oswald_draw_bitmap(x, y, battery50_icon_width, battery50_icon_height, fg, battery50_icon_bits); |
|
122 |
+ else if (ci==3) oswald_draw_bitmap(x, y, battery75_icon_width, battery75_icon_height, fg, battery75_icon_bits); |
|
123 |
+ else if (ci==4) oswald_draw_bitmap(x, y, battery100_icon_width, battery100_icon_height, fg, battery100_icon_bits); |
|
120 | 124 |
ci++; |
121 | 125 |
ci %= 5; |
122 | 126 |
} else { |
123 |
- oswald_draw_bitmap(81, 0, battery100_icon_width, battery100_icon_height, battery100_icon_bits); |
|
127 |
+ oswald_draw_bitmap(x, y, battery100_icon_width, battery100_icon_height, fg, battery100_icon_bits); |
|
124 | 128 |
} |
125 | 129 |
} else { |
126 | 130 |
if (OswaldPowerState.percent > 75) |
127 |
- oswald_draw_bitmap(81, 0, battery100_icon_width, battery100_icon_height, battery100_icon_bits); |
|
131 |
+ oswald_draw_bitmap(x, y, battery100_icon_width, battery100_icon_height, fg, battery100_icon_bits); |
|
128 | 132 |
else if (OswaldPowerState.percent > 50) |
129 |
- oswald_draw_bitmap(81, 0, battery75_icon_width, battery75_icon_height, battery75_icon_bits); |
|
133 |
+ oswald_draw_bitmap(x, y, battery75_icon_width, battery75_icon_height, fg, battery75_icon_bits); |
|
130 | 134 |
else if (OswaldPowerState.percent > 25) |
131 |
- oswald_draw_bitmap(81, 0, battery50_icon_width, battery50_icon_height, battery50_icon_bits); |
|
135 |
+ oswald_draw_bitmap(x, y, battery50_icon_width, battery50_icon_height, fg, battery50_icon_bits); |
|
132 | 136 |
else if (OswaldPowerState.percent > 5) |
133 |
- oswald_draw_bitmap(81, 0, battery25_icon_width, battery25_icon_height, battery25_icon_bits); |
|
137 |
+ oswald_draw_bitmap(x, y, battery25_icon_width, battery25_icon_height, fg, battery25_icon_bits); |
|
134 | 138 |
else |
135 |
- oswald_draw_bitmap(81, 0, battery0_icon_width, battery0_icon_height, battery0_icon_bits); |
|
139 |
+ oswald_draw_bitmap(x, y, battery0_icon_width, battery0_icon_height, fg, battery0_icon_bits); |
|
136 | 140 |
} |
137 | 141 |
|
138 | 142 |
if (hal_bluetooth_get_state() == BLUETOOTH_ON) |
139 |
- oswald_draw_bitmap(81, 0, bluetooth_icon_width, bluetooth_icon_height, bluetooth_icon_bits); |
|
143 |
+ oswald_draw_bitmap(x, y, bluetooth_icon_width, bluetooth_icon_height, fg, bluetooth_icon_bits); |
|
140 | 144 |
else if (hal_bluetooth_get_state() == BLUETOOTH_CONNECTED) |
141 |
- oswald_draw_bitmap(81, 0, bluetooth_con_icon_width, bluetooth_con_icon_height, bluetooth_con_icon_bits); |
|
145 |
+ oswald_draw_bitmap(x, y, bluetooth_con_icon_width, bluetooth_con_icon_height, fg, bluetooth_con_icon_bits); |
|
142 | 146 |
} |
143 | 147 |
|
144 | 148 |
void DrawLcdAnaClock(boolean show_seconds) |
... | ... |
@@ -164,9 +168,10 @@ void DrawLcdAnaClock(boolean show_seconds) |
164 | 168 |
seconds += 60; |
165 | 169 |
|
166 | 170 |
hal_lcd_clear_display(); |
171 |
+ oswald_draw_rect(0,0,95,95,1); |
|
167 | 172 |
|
168 | 173 |
snprintf(tstr, 16, "%2d", OswaldClk.day); |
169 |
- oswald_write_string(70, 43, FONT_6x9, FALSE, tstr); |
|
174 |
+ oswald_write_string(70, 44, FONT_5x8, 1, tstr); |
|
170 | 175 |
|
171 | 176 |
// Marker |
172 | 177 |
// plot(R*cos(360° * i/N), R*sin(360° * i/N)) |
... | ... |
@@ -175,7 +180,7 @@ void DrawLcdAnaClock(boolean show_seconds) |
175 | 180 |
y = 47 + ((43 * f_sin((360 / 12) * i)) / 100); |
176 | 181 |
x2 = 47 + ((47 * f_cos((360 / 12) * i)) / 100); |
177 | 182 |
y2 = 47 + ((47 * f_sin((360 / 12) * i)) / 100); |
178 |
- oswald_draw_line_ww(x, y, x2, y2, 2); |
|
183 |
+ oswald_draw_line_ww(x, y, x2, y2, 0, 2); |
|
179 | 184 |
// g_printerr("br %d,%d %d,%d\n", x,y,x2,y2); |
180 | 185 |
}; |
181 | 186 |
|
... | ... |
@@ -184,14 +189,14 @@ void DrawLcdAnaClock(boolean show_seconds) |
184 | 189 |
x = tmp; |
185 | 190 |
tmp = 47 + (30 * f_sin(((360 / 12) * hour) + ((OswaldClk.minute * 360) /12 / 60)) / 100); |
186 | 191 |
y = tmp; |
187 |
- oswald_draw_line_ww(47, 47, x, y, 2); |
|
192 |
+ oswald_draw_line_ww(47, 47, x, y, 0, 2); |
|
188 | 193 |
|
189 | 194 |
// Minute |
190 | 195 |
tmp = 47 + ((40 * f_cos((360 / 60) * minute)) / 100); |
191 | 196 |
x = tmp; |
192 | 197 |
tmp = 47 + ((40 * f_sin((360 / 60) * minute)) / 100); |
193 | 198 |
y = tmp; |
194 |
- oswald_draw_line_ww(47, 47, x, y, 2); |
|
199 |
+ oswald_draw_line_ww(47, 47, x, y, 0, 2); |
|
195 | 200 |
|
196 | 201 |
if (show_seconds) { |
197 | 202 |
// Seconds |
... | ... |
@@ -199,11 +204,9 @@ void DrawLcdAnaClock(boolean show_seconds) |
199 | 204 |
x = tmp; |
200 | 205 |
tmp = 47 + ((40 * f_sin((360 / 60) * seconds)) / 100); |
201 | 206 |
y = tmp; |
202 |
- oswald_draw_line(47, 47, x, y); |
|
207 |
+ oswald_draw_line(47, 47, x, y, 0); |
|
203 | 208 |
}; |
204 | 209 |
|
205 |
- draw_status_icons(); |
|
206 |
- |
|
207 | 210 |
hal_lcd_update_display(); |
208 | 211 |
} |
209 | 212 |
|
... | ... |
@@ -284,7 +287,7 @@ void DrawCalendarClock(boolean show_seconds) |
284 | 287 |
else |
285 | 288 |
snprintf(tstr, 16, "%s %d/%d %d", daynames[OswaldClk.wday], OswaldClk.month, OswaldClk.day, OswaldClk.year); |
286 | 289 |
oswald_draw_rect(2,0,93,7,1); |
287 |
- oswald_write_string(3, 0, FONT_DROID8x12, 1, tstr); |
|
290 |
+ oswald_write_string(3, 0, FONT_5x8, 1, tstr); |
|
288 | 291 |
/* The minicalendar */ |
289 | 292 |
gw=13; |
290 | 293 |
gh=11; |
... | ... |
@@ -318,7 +321,7 @@ void DrawCalendarClock(boolean show_seconds) |
318 | 321 |
} |
319 | 322 |
} |
320 | 323 |
/* The banner */ |
321 |
- oswald_draw_bitmap(0, 95-32, banner_img_width, banner_img_height, banner_img_bits); |
|
324 |
+ oswald_draw_bitmap(0, 95-32, banner_img_width, banner_img_height, 1, banner_img_bits); |
|
322 | 325 |
hal_lcd_update_display(); |
323 | 326 |
} |
324 | 327 |
|
... | ... |
@@ -333,24 +336,23 @@ void DrawHelpClock(boolean show_seconds) |
333 | 336 |
val=(val>12)?val-12:val; |
334 | 337 |
x=31; |
335 | 338 |
y=40; |
336 |
- //oswald_draw_grid(0,0,95,95,2,2); |
|
337 |
- oswald_draw_grid(x-2,0,x+32,95,2,2); |
|
338 |
- oswald_draw_rect(x-2+1,y-4+1,x+32-1,y+15-1,0); |
|
339 |
+ oswald_draw_grid(x-2+7,0,x+32-7,95,2,2); |
|
340 |
+ oswald_draw_rect(x-2+1,y-4+1-6,x+32-1,y+15-1+6,1); |
|
339 | 341 |
if(val>=10) |
340 |
- oswald_draw_font58_scaled(x,y,(val / 10)+'0',&w,1,0,1,2); |
|
341 |
- oswald_draw_font58_scaled((x=x+5+2),y,(val % 10)+'0',&w,1,0,1,2); |
|
342 |
+ oswald_draw_font58_scaled(x,y,(val / 10)+'0',&w,0,1,1,2); |
|
343 |
+ oswald_draw_font58_scaled((x=x+5+2),y,(val % 10)+'0',&w,0,1,1,2); |
|
342 | 344 |
x+=5+2; |
343 | 345 |
if(OswaldClk.second % 2) { |
344 |
- oswald_draw_rect(x,y+4,x+1,y+5,1); |
|
345 |
- oswald_draw_rect(x,y+8,x+1,y+9,1); |
|
346 |
+ oswald_draw_rect(x,y+4,x+1,y+5,0); |
|
347 |
+ oswald_draw_rect(x,y+8,x+1,y+9,0); |
|
346 | 348 |
} |
347 | 349 |
x+=4; |
348 | 350 |
val = OswaldClk.minute; |
349 |
- oswald_draw_font58_scaled(x,y,(val / 10)+'0',&w,1,0,1,2); |
|
350 |
- oswald_draw_font58_scaled((x=x+5+2),y,(val % 10)+'0',&w,1,0,1,2); |
|
351 |
+ oswald_draw_font58_scaled(x,y,(val / 10)+'0',&w,0,1,1,2); |
|
352 |
+ oswald_draw_font58_scaled((x=x+5+2),y,(val % 10)+'0',&w,0,1,1,2); |
|
351 | 353 |
x=31; |
352 | 354 |
y=40; |
353 |
- oswald_draw_grid(x-2,y-4,x+32,y+15,100,100); |
|
355 |
+ oswald_draw_grid(x-2,y-4-6,x+32,y+15+6,100,100); |
|
354 | 356 |
// Help text: left buttons |
355 | 357 |
oswald_write_string(0, 0, FONT_5x8, 0, "[Edit]"); |
356 | 358 |
oswald_write_string(0, 96/2-8, FONT_5x8, 0, "Esc"); |
... | ... |
@@ -361,6 +363,11 @@ void DrawHelpClock(boolean show_seconds) |
361 | 363 |
oswald_write_string(72, 96/2-8, FONT_5x8, 0, "Enter"); |
362 | 364 |
oswald_write_string(65, 96/2, FONT_5x8, 0, "[Right]"); |
363 | 365 |
oswald_write_string(75, 96-8-1, FONT_5x8, 0, "Down"); |
366 |
+ // Status |
|
367 |
+ oswald_draw_grid(38-2,68-2,38+16+2,68+18+2,100,100); |
|
368 |
+ oswald_draw_rect(38-2+1,68-2+1,38+16+2-1,68+18+2-1,1); |
|
369 |
+ draw_status_icons(38,68,0); |
|
370 |
+ |
|
364 | 371 |
// Commit display |
365 | 372 |
hal_lcd_update_display(); |
366 | 373 |
|
... | ... |
@@ -6,6 +6,8 @@ |
6 | 6 |
#include "oswald_hal.h" |
7 | 7 |
#include "oswald_graphics.h" |
8 | 8 |
|
9 |
+#include "dayslib.h" |
|
10 |
+ |
|
9 | 11 |
#include "oswald_watch_faces.h" |
10 | 12 |
|
11 | 13 |
#if defined(__GNUC__) && (__MSP430X__ > 0) |
... | ... |
@@ -40,6 +42,10 @@ __attribute__((__far__)) |
40 | 42 |
__attribute__((__far__)) |
41 | 43 |
#endif |
42 | 44 |
#include "bitmaps/bluetooth_con_icon.xbm" |
45 |
+#if defined(__GNUC__) && (__MSP430X__ > 0) |
|
46 |
+__attribute__((__far__)) |
|
47 |
+#endif |
|
48 |
+#include "bitmaps/banner_img.xbm" |
|
43 | 49 |
|
44 | 50 |
|
45 | 51 |
/* sine table, per degree, factor 100 */ |
... | ... |
@@ -204,95 +210,158 @@ void DrawLcdAnaClock(boolean show_seconds) |
204 | 210 |
static const char *daynames[7] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; |
205 | 211 |
|
206 | 212 |
void DrawLcdDigitalClock(boolean show_seconds) |
213 |
+{ |
|
214 |
+ int w,x,y,yf; |
|
215 |
+ unsigned char val; |
|
216 |
+ hal_lcd_clear_display(); |
|
217 |
+ oswald_draw_rect(0,0,95,95,1); |
|
218 |
+ val = OswaldClk.hour; |
|
219 |
+ if (!OswaldClk.clk24hr) |
|
220 |
+ val=(val>12)?val-12:val; |
|
221 |
+ x=6; |
|
222 |
+ //yf=5; |
|
223 |
+ yf=10; |
|
224 |
+ y=(96/2)-(3*yf); |
|
225 |
+ if(val>=10) |
|
226 |
+ oswald_draw_font58_scaled(x,y,(val / 10)+'0',&w,0,1,4,yf); |
|
227 |
+ oswald_draw_font58_scaled((x=x+16+2),y,(val % 10)+'0',&w,0,1,4,yf); |
|
228 |
+ x+=16+4; |
|
229 |
+ if(OswaldClk.second % 2) |
|
230 |
+ oswald_draw_rect(x,y+5*yf,x+4,y+6*yf-1,0); |
|
231 |
+ x+=8; |
|
232 |
+ val = OswaldClk.minute; |
|
233 |
+ oswald_draw_font58_scaled(x,y,(val / 10)+'0',&w,0,1,4,yf); |
|
234 |
+ oswald_draw_font58_scaled((x=x+16+2),y,(val % 10)+'0',&w,0,1,4,yf); |
|
235 |
+ // Commit display |
|
236 |
+ hal_lcd_update_display(); |
|
237 |
+} |
|
238 |
+ |
|
239 |
+void DrawCalendarClock(boolean show_seconds) |
|
207 | 240 |
{ |
208 | 241 |
int gRow = 1; |
209 | 242 |
int gColumn = 1; |
210 | 243 |
char tstr[16]; |
211 |
- int i; |
|
244 |
+ int i,k,n,x,y,c; |
|
245 |
+ int w; |
|
246 |
+ unsigned char val; |
|
247 |
+ int sx,sy; |
|
248 |
+ int gw,gh; |
|
249 |
+ int wday,yday,month,year,day,rollup; |
|
212 | 250 |
|
213 |
-#if 0 |
|
214 |
- snprintf(tstr, 16, "%d%% (%dmV)", OswaldPowerState.percent, OswaldPowerState.level); |
|
215 |
- WriteLcdString(2, 48, tstr); |
|
216 |
- WriteLcdString(2, 64, OswaldPowerState.source ? "ext" : "bat"); |
|
217 |
- |
|
218 |
- /* this makes only sense when the charger is active */ |
|
219 |
- if (OswaldPowerState.source) { |
|
220 |
- switch (OswaldPowerState.charge_state) { |
|
221 |
- case POWER_CHARGER_DONE: |
|
222 |
- WriteLcdString(2, 80, "charge done"); |
|
223 |
- break; |
|
224 |
- case POWER_CHARGER_PRECHARGE: |
|
225 |
- WriteLcdString(2, 80, "precharging"); |
|
226 |
- break; |
|
227 |
- case POWER_CHARGER_CHARGING: |
|
228 |
- WriteLcdString(2, 80, "charging"); |
|
229 |
- break; |
|
230 |
- case POWER_CHARGER_UNK: |
|
231 |
- WriteLcdString(2, 80, "charge unkn."); |
|
232 |
- break; |
|
233 |
- default: |
|
234 |
- break; |
|
235 |
- }; |
|
236 |
- }; |
|
237 |
-#endif |
|
238 | 251 |
hal_lcd_clear_display(); |
239 |
- |
|
240 |
- if (OswaldClk.clk24hr) { |
|
241 |
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (OswaldClk.hour / 10)); |
|
242 |
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (OswaldClk.hour % 10)); |
|
243 |
- } else { |
|
244 |
- unsigned char val = OswaldClk.hour; |
|
245 |
- if (val > 12) { |
|
246 |
- val -= 12; |
|
247 |
- oswald_write_string(59, 0, FONT_6x9, FALSE, "PM"); |
|
248 |
- } else { |
|
249 |
- oswald_write_string(59, 0, FONT_6x9, FALSE, "AM"); |
|
250 |
- } |
|
251 |
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (val / 10)); |
|
252 |
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (val % 10)); |
|
253 |
- } |
|
254 |
- if (OswaldClk.second % 2) |
|
255 |
- oswald_write_character(gRow-4, gColumn, FONT_LCD13x21, FALSE, 10); |
|
256 |
- gRow += 5; |
|
257 |
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (OswaldClk.minute / 10)); |
|
258 |
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (OswaldClk.minute % 10)); |
|
259 |
- |
|
252 |
+ gRow=4; |
|
253 |
+ gColumn=34; |
|
254 |
+ val = OswaldClk.hour; |
|
255 |
+ if (!OswaldClk.clk24hr) |
|
256 |
+ val=(val>12)?val-12:val; |
|
257 |
+ if(val>=10) |
|
258 |
+ oswald_draw_bigdigit(gRow,gColumn,(val / 10)+'0',&w,1,0); |
|
259 |
+ else |
|
260 |
+ w=14; |
|
261 |
+ gRow+=w+2; |
|
262 |
+ oswald_draw_bigdigit(gRow,gColumn,(val % 10)+'0',&w,1,0); |
|
263 |
+ gRow+=w+2; |
|
264 |
+ w=4; |
|
265 |
+ if(OswaldClk.second % 2) |
|
266 |
+ oswald_draw_rect(gRow,gColumn+26-w,gRow+w-1,gColumn+26-1,1); |
|
267 |
+ gRow+=w+2; |
|
268 |
+ oswald_draw_bigdigit(gRow,gColumn,(OswaldClk.minute / 10)+'0',&w,1,0); |
|
269 |
+ gRow+=w+2; |
|
270 |
+ oswald_draw_bigdigit(gRow,gColumn,(OswaldClk.minute % 10)+'0',&w,1,0); |
|
271 |
+ gRow+=w+2; |
|
272 |
+ |
|
273 |
+ sx=2,sy=2; |
|
274 |
+ gRow+=2; |
|
260 | 275 |
if (show_seconds) { |
261 |
- oswald_write_character(59, 9, FONT_LCD8x13, FALSE, (OswaldClk.second / 10)); |
|
262 |
- oswald_write_character(67, 9, FONT_LCD8x13, FALSE, (OswaldClk.second % 10)); |
|
276 |
+ oswald_draw_font58_scaled(gRow,gColumn+26-6*sy, (OswaldClk.second / 10)+'0',&w,1,0,sx,sy); |
|
277 |
+ oswald_draw_font58_scaled(gRow+w+1,gColumn+26-6*sy, (OswaldClk.second % 10)+'0',&w,1,0,sx,sy); |
|
263 | 278 |
} |
264 |
- |
|
279 |
+ if(!OswaldClk.clk24hr) |
|
280 |
+ oswald_write_string(gRow+3,gColumn+3,FONT_6x9, FALSE,(OswaldClk.hour>12)?"PM":"AM"); |
|
281 |
+ /* The date */ |
|
265 | 282 |
if (OswaldClk.day_first) |
266 | 283 |
snprintf(tstr, 16, "%s %d.%d.%d", daynames[OswaldClk.wday], OswaldClk.day, OswaldClk.month, OswaldClk.year); |
267 | 284 |
else |
268 | 285 |
snprintf(tstr, 16, "%s %d/%d %d", daynames[OswaldClk.wday], OswaldClk.month, OswaldClk.day, OswaldClk.year); |
269 |
- oswald_write_string(0, 25, FONT_DROID8x12, FALSE, tstr); |
|
270 |
- |
|
271 |
- gRow = 0; |
|
272 |
- gColumn = 45; |
|
273 |
- for (i=0; i<strlen(MainMessage); i++) { |
|
274 |
- // do not draw a whitespace as first character of a row |
|
275 |
- if (gRow == 0 && MainMessage[i] == ' ') |
|
276 |
- continue; |
|
277 |
- // interpret new line |
|
278 |
- if (MainMessage[i] == '\n') { |
|
279 |
- gRow = 0; |
|
280 |
- gColumn += 9; |
|
281 |
- continue; |
|
282 |
- } |
|
283 |
- gRow += oswald_write_character(gRow, gColumn, FONT_DROID8x12, FALSE, MainMessage[i]); |
|
284 |
- // wrap to new line if line is full |
|
285 |
- if (gRow > 90) { |
|
286 |
- gRow = 0; |
|
287 |
- gColumn += 9; |
|
288 |
- } |
|
289 |
- // OK, screen ends, leave the loop, no matter what |
|
290 |
- if (gColumn > 86) |
|
291 |
- i = 255; |
|
286 |
+ oswald_draw_rect(2,0,93,7,1); |
|
287 |
+ oswald_write_string(3, 0, FONT_DROID8x12, 1, tstr); |
|
288 |
+ /* The minicalendar */ |
|
289 |
+ gw=13; |
|
290 |
+ gh=11; |
|
291 |
+ oswald_draw_grid(2,7,1+gw*7+1,29,gw,gh); |
|
292 |
+ month=OswaldClk.month; |
|
293 |
+ year=OswaldClk.year; |
|
294 |
+ mday2yday(OswaldClk.year,OswaldClk.month,OswaldClk.day,&yday); |
|
295 |
+ yday2wday(OswaldClk.year,yday,&wday); |
|
296 |
+ yday=yday-((wday+6)%7); /* we begin the week in monday */ |
|
297 |
+ yday2mday(year,yday, &month, &day); |
|
298 |
+ rollup=GetYearDays(year)[month]-GetYearDays(year)[month-1]; |
|
299 |
+ if(day<=0) { /*Ok, we have gone to the previous year. Then fixup year/month*/ |
|
300 |
+ year--; |
|
301 |
+ month=12; |
|
302 |
+ day=GetYearDays(year)[12]+day; |
|
303 |
+ } |
|
304 |
+ for(i=0,k=day;i<14;i++) { |
|
305 |
+ n=((k+i-1)%(rollup))+1; |
|
306 |
+ x=2+2+(i%7)*gw; |
|
307 |
+ y=7+2+(i/7)*gh; |
|
308 |
+ if(n==OswaldClk.day) { |
|
309 |
+ oswald_draw_rect(x-1,y-1,x-1+gw-1,y-1+gh-1,1); |
|
310 |
+ c=0; |
|
311 |
+ } else |
|
312 |
+ c=1; |
|
313 |
+ if(n<10) { |
|
314 |
+ oswald_draw_tinydigit(x,y,n+'0',&w,c,!c); |
|
315 |
+ } else { |
|
316 |
+ oswald_draw_tinydigit(x,y,n/10+'0',&w,c,!c); |
|
317 |
+ oswald_draw_tinydigit(x+w,y,n%10+'0',&w,c,!c); |
|
318 |
+ } |
|
292 | 319 |
} |
293 |
- |
|
294 |
- draw_status_icons(); |
|
295 |
- |
|
320 |
+ /* The banner */ |
|
321 |
+ oswald_draw_bitmap(0, 95-32, banner_img_width, banner_img_height, banner_img_bits); |
|
296 | 322 |
hal_lcd_update_display(); |
297 | 323 |
} |
298 | 324 |
|
325 |
+void DrawHelpClock(boolean show_seconds) |
|
326 |
+{ |
|
327 |
+ int w,x,y; |
|
328 |
+ unsigned char val; |
|
329 |
+ hal_lcd_clear_display(); |
|
330 |
+ // Time |
|
331 |
+ val = OswaldClk.hour; |
|
332 |
+ if (!OswaldClk.clk24hr) |
|
333 |
+ val=(val>12)?val-12:val; |
|
334 |
+ x=31; |
|
335 |
+ y=40; |
|
336 |
+ //oswald_draw_grid(0,0,95,95,2,2); |
|
337 |
+ oswald_draw_grid(x-2,0,x+32,95,2,2); |
|
338 |
+ oswald_draw_rect(x-2+1,y-4+1,x+32-1,y+15-1,0); |
|
339 |
+ if(val>=10) |
|
340 |
+ oswald_draw_font58_scaled(x,y,(val / 10)+'0',&w,1,0,1,2); |
|
341 |
+ oswald_draw_font58_scaled((x=x+5+2),y,(val % 10)+'0',&w,1,0,1,2); |
|
342 |
+ x+=5+2; |
|
343 |
+ if(OswaldClk.second % 2) { |
|
344 |
+ oswald_draw_rect(x,y+4,x+1,y+5,1); |
|
345 |
+ oswald_draw_rect(x,y+8,x+1,y+9,1); |
|
346 |
+ } |
|
347 |
+ x+=4; |
|
348 |
+ val = OswaldClk.minute; |
|
349 |
+ oswald_draw_font58_scaled(x,y,(val / 10)+'0',&w,1,0,1,2); |
|
350 |
+ oswald_draw_font58_scaled((x=x+5+2),y,(val % 10)+'0',&w,1,0,1,2); |
|
351 |
+ x=31; |
|
352 |
+ y=40; |
|
353 |
+ oswald_draw_grid(x-2,y-4,x+32,y+15,100,100); |
|
354 |
+ // Help text: left buttons |
|
355 |
+ oswald_write_string(0, 0, FONT_5x8, 0, "[Edit]"); |
|
356 |
+ oswald_write_string(0, 96/2-8, FONT_5x8, 0, "Esc"); |
|
357 |
+ oswald_write_string(0, 96/2, FONT_5x8, 0, "[Left]"); |
|
358 |
+ oswald_write_string(0, 96-8-1, FONT_5x8, 0, "Light"); |
|
359 |
+ // Help text: right buttons |
|
360 |
+ oswald_write_string(86, 0, FONT_5x8, 0, "Up"); |
|
361 |
+ oswald_write_string(72, 96/2-8, FONT_5x8, 0, "Enter"); |
|
362 |
+ oswald_write_string(65, 96/2, FONT_5x8, 0, "[Right]"); |
|
363 |
+ oswald_write_string(75, 96-8-1, FONT_5x8, 0, "Down"); |
|
364 |
+ // Commit display |
|
365 |
+ hal_lcd_update_display(); |
|
366 |
+ |
|
367 |
+} |
... | ... |
@@ -271,13 +271,22 @@ void DrawLcdDigitalClock(boolean show_seconds) |
271 | 271 |
gRow = 0; |
272 | 272 |
gColumn = 45; |
273 | 273 |
for (i=0; i<strlen(MainMessage); i++) { |
274 |
+ // do not draw a whitespace as first character of a row |
|
274 | 275 |
if (gRow == 0 && MainMessage[i] == ' ') |
275 | 276 |
continue; |
277 |
+ // interpret new line |
|
278 |
+ if (MainMessage[i] == '\n') { |
|
279 |
+ gRow = 0; |
|
280 |
+ gColumn += 9; |
|
281 |
+ continue; |
|
282 |
+ } |
|
276 | 283 |
gRow += oswald_write_character(gRow, gColumn, FONT_DROID8x12, FALSE, MainMessage[i]); |
284 |
+ // wrap to new line if line is full |
|
277 | 285 |
if (gRow > 90) { |
278 | 286 |
gRow = 0; |
279 | 287 |
gColumn += 9; |
280 | 288 |
} |
289 |
+ // OK, screen ends, leave the loop, no matter what |
|
281 | 290 |
if (gColumn > 86) |
282 | 291 |
i = 255; |
283 | 292 |
} |
... | ... |
@@ -160,12 +160,7 @@ void DrawLcdAnaClock(boolean show_seconds) |
160 | 160 |
hal_lcd_clear_display(); |
161 | 161 |
|
162 | 162 |
snprintf(tstr, 16, "%2d", OswaldClk.day); |
163 |
-#if 0 |
|
164 |
- SetFont(MetaWatch16); |
|
165 |
- WriteLcdString(70, 40, tstr); |
|
166 |
-#else |
|
167 |
- oswald_write_string(70, 43, FONT_6x9, tstr); |
|
168 |
-#endif |
|
163 |
+ oswald_write_string(70, 43, FONT_6x9, FALSE, tstr); |
|
169 | 164 |
|
170 | 165 |
// Marker |
171 | 166 |
// plot(R*cos(360° * i/N), R*sin(360° * i/N)) |
... | ... |
@@ -215,64 +210,6 @@ void DrawLcdDigitalClock(boolean show_seconds) |
215 | 210 |
char tstr[16]; |
216 | 211 |
int i; |
217 | 212 |
|
218 |
-#if 0 |
|
219 |
- SetFont(MetaWatchTime); |
|
220 |
- |
|
221 |
- hal_lcd_clear_display(); |
|
222 |
- //gRow += WriteLcdCharacter(ui, gRow, gColumn, TIME_CHARACTER_SPACE_INDEX); |
|
223 |
- if (OswaldClk.clk24hr) { |
|
224 |
- gRow += WriteLcdCharacter(gRow, gColumn, (OswaldClk.hour / 10)); |
|
225 |
- gRow += WriteLcdCharacter(gRow, gColumn, (OswaldClk.hour % 10)); |
|
226 |
- } else { |
|
227 |
- unsigned char val = OswaldClk.hour; |
|
228 |
- if (val > 12) |
|
229 |
- val -= 12; |
|
230 |
- gRow += WriteLcdCharacter(gRow, gColumn, (val / 10)); |
|
231 |
- gRow += WriteLcdCharacter(gRow, gColumn, (val % 10)); |
|
232 |
- } |
|
233 |
- gRow += WriteLcdCharacter(gRow, gColumn, TIME_CHARACTER_COLON_INDEX); |
|
234 |
- gRow += WriteLcdCharacter(gRow, gColumn, (OswaldClk.minute / 10)); |
|
235 |
- gRow += WriteLcdCharacter(gRow, gColumn, (OswaldClk.minute % 10)); |
|
236 |
- |
|
237 |
- gRow += 3; |
|
238 |
- if (show_seconds) { |
|
239 |
- SetFont(MetaWatch16); |
|
240 |
- snprintf(tstr, 16, "%02d", OswaldClk.second); |
|
241 |
- WriteLcdString(gRow, 9, tstr); |
|
242 |
- }; |
|
243 |
- |
|
244 |
- SetFont(MetaWatch7); |
|
245 |
- |
|
246 |
- if (!OswaldClk.clk24hr) { |
|
247 |
- if (OswaldClk.hour > 12) { |
|
248 |
- WriteLcdString(gRow, 3, "PM"); |
|
249 |
- } else { |
|
250 |
- WriteLcdString(gRow, 3, "AM"); |
|
251 |
- } |
|
252 |
- } |
|
253 |
- |
|
254 |
- SetFont(MetaWatch16); |
|
255 |
- |
|
256 |
- if (OswaldClk.day_first) |
|
257 |
- snprintf(tstr, 16, "%d.%d.%d", OswaldClk.day, OswaldClk.month, OswaldClk.year); |
|
258 |
- else |
|
259 |
- snprintf(tstr, 16, "%d/%d %d", OswaldClk.month, OswaldClk.day, OswaldClk.year); |
|
260 |
- WriteLcdString(3, 25, tstr); |
|
261 |
- |
|
262 |
- draw_status_icons(); |
|
263 |
- |
|
264 |
- gRow = 0; |
|
265 |
- gColumn = 45; |
|
266 |
- SetFont(MetaWatch5); |
|
267 |
- for (i=0; i<strlen(MainMessage); i++) { |
|
268 |
- gRow += WriteLcdCharacter(gRow, gColumn, MainMessage[i]); |
|
269 |
- if (gRow > 90) { |
|
270 |
- gRow = 0; |
|
271 |
- gColumn += 7; |
|
272 |
- } |
|
273 |
- if (gColumn > 95) |
|
274 |
- i = 255; |
|
275 |
- } |
|
276 | 213 |
#if 0 |
277 | 214 |
snprintf(tstr, 16, "%d%% (%dmV)", OswaldPowerState.percent, OswaldPowerState.level); |
278 | 215 |
WriteLcdString(2, 48, tstr); |
... | ... |
@@ -298,42 +235,45 @@ void DrawLcdDigitalClock(boolean show_seconds) |
298 | 235 |
}; |
299 | 236 |
}; |
300 | 237 |
#endif |
301 |
-#else |
|
302 | 238 |
hal_lcd_clear_display(); |
303 | 239 |
|
304 | 240 |
if (OswaldClk.clk24hr) { |
305 |
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, (OswaldClk.hour / 10)); |
|
306 |
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, (OswaldClk.hour % 10)); |
|
241 |
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (OswaldClk.hour / 10)); |
|
242 |
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (OswaldClk.hour % 10)); |
|
307 | 243 |
} else { |
308 | 244 |
unsigned char val = OswaldClk.hour; |
309 |
- if (val > 12) |
|
245 |
+ if (val > 12) { |
|
310 | 246 |
val -= 12; |
311 |
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, (val / 10)); |
|
312 |
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, (val % 10)); |
|
247 |
+ oswald_write_string(59, 0, FONT_6x9, FALSE, "PM"); |
|
248 |
+ } else { |
|
249 |
+ oswald_write_string(59, 0, FONT_6x9, FALSE, "AM"); |
|
250 |
+ } |
|
251 |
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (val / 10)); |
|
252 |
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (val % 10)); |
|
313 | 253 |
} |
314 | 254 |
if (OswaldClk.second % 2) |
315 |
- oswald_write_character(gRow-4, gColumn, FONT_LCD13x21, 10); |
|
255 |
+ oswald_write_character(gRow-4, gColumn, FONT_LCD13x21, FALSE, 10); |
|
316 | 256 |
gRow += 5; |
317 |
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, (OswaldClk.minute / 10)); |
|
318 |
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, (OswaldClk.minute % 10)); |
|
319 |
-#endif |
|
257 |
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (OswaldClk.minute / 10)); |
|
258 |
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (OswaldClk.minute % 10)); |
|
259 |
+ |
|
320 | 260 |
if (show_seconds) { |
321 |
- oswald_write_character(59, 9, FONT_LCD8x13, (OswaldClk.second / 10)); |
|
322 |
- oswald_write_character(67, 9, FONT_LCD8x13, (OswaldClk.second % 10)); |
|
261 |
+ oswald_write_character(59, 9, FONT_LCD8x13, FALSE, (OswaldClk.second / 10)); |
|
262 |
+ oswald_write_character(67, 9, FONT_LCD8x13, FALSE, (OswaldClk.second % 10)); |
|
323 | 263 |
} |
324 | 264 |
|
325 | 265 |
if (OswaldClk.day_first) |
326 | 266 |
snprintf(tstr, 16, "%s %d.%d.%d", daynames[OswaldClk.wday], OswaldClk.day, OswaldClk.month, OswaldClk.year); |
327 | 267 |
else |
328 | 268 |
snprintf(tstr, 16, "%s %d/%d %d", daynames[OswaldClk.wday], OswaldClk.month, OswaldClk.day, OswaldClk.year); |
329 |
- oswald_write_string(0, 25, FONT_6x9, tstr); |
|
269 |
+ oswald_write_string(0, 25, FONT_DROID8x12, FALSE, tstr); |
|
330 | 270 |
|
331 | 271 |
gRow = 0; |
332 | 272 |
gColumn = 45; |
333 | 273 |
for (i=0; i<strlen(MainMessage); i++) { |
334 | 274 |
if (gRow == 0 && MainMessage[i] == ' ') |
335 | 275 |
continue; |
336 |
- gRow += oswald_write_character(gRow, gColumn, FONT_DROID8x12, MainMessage[i]); |
|
276 |
+ gRow += oswald_write_character(gRow, gColumn, FONT_DROID8x12, FALSE, MainMessage[i]); |
|
337 | 277 |
if (gRow > 90) { |
338 | 278 |
gRow = 0; |
339 | 279 |
gColumn += 9; |
... | ... |
@@ -206,6 +206,8 @@ void DrawLcdAnaClock(boolean show_seconds) |
206 | 206 |
hal_lcd_update_display(); |
207 | 207 |
} |
208 | 208 |
|
209 |
+static const char *daynames[7] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; |
|
210 |
+ |
|
209 | 211 |
void DrawLcdDigitalClock(boolean show_seconds) |
210 | 212 |
{ |
211 | 213 |
int gRow = 1; |
... | ... |
@@ -321,9 +323,9 @@ void DrawLcdDigitalClock(boolean show_seconds) |
321 | 323 |
} |
322 | 324 |
|
323 | 325 |
if (OswaldClk.day_first) |
324 |
- snprintf(tstr, 16, "%2d.%2d.%4d", OswaldClk.day, OswaldClk.month, OswaldClk.year); |
|
326 |
+ snprintf(tstr, 16, "%s %d.%d.%d", daynames[OswaldClk.wday], OswaldClk.day, OswaldClk.month, OswaldClk.year); |
|
325 | 327 |
else |
326 |
- snprintf(tstr, 16, "%2d/%2d %4d", OswaldClk.month, OswaldClk.day, OswaldClk.year); |
|
328 |
+ snprintf(tstr, 16, "%s %d/%d %d", daynames[OswaldClk.wday], OswaldClk.month, OswaldClk.day, OswaldClk.year); |
|
327 | 329 |
oswald_write_string(0, 25, FONT_6x9, tstr); |
328 | 330 |
|
329 | 331 |
gRow = 0; |
... | ... |
@@ -3,8 +3,6 @@ |
3 | 3 |
|
4 | 4 |
#include "oswald.h" |
5 | 5 |
#include "oswald_main.h" |
6 |
-#include "Fonts.h" |
|
7 |
-#include "LcdDisplay.h" |
|
8 | 6 |
#include "oswald_hal.h" |
9 | 7 |
#include "oswald_graphics.h" |
10 | 8 |
|
... | ... |
@@ -120,15 +118,15 @@ void draw_status_icons(void) |
120 | 118 |
} |
121 | 119 |
} else { |
122 | 120 |
if (OswaldPowerState.percent > 75) |
123 |
- oswald_draw_bitmap_offset(81, 0, 0,0, battery100_icon_width, battery100_icon_height, battery100_icon_bits); |
|
121 |
+ oswald_draw_bitmap(81, 0, battery100_icon_width, battery100_icon_height, battery100_icon_bits); |
|
124 | 122 |
else if (OswaldPowerState.percent > 50) |
125 |
- oswald_draw_bitmap_offset(81, 0, 0,0, battery75_icon_width, battery75_icon_height, battery75_icon_bits); |
|
123 |
+ oswald_draw_bitmap(81, 0, battery75_icon_width, battery75_icon_height, battery75_icon_bits); |
|
126 | 124 |
else if (OswaldPowerState.percent > 25) |
127 |
- oswald_draw_bitmap_offset(81, 0, 0,0, battery50_icon_width, battery50_icon_height, battery50_icon_bits); |
|
125 |
+ oswald_draw_bitmap(81, 0, battery50_icon_width, battery50_icon_height, battery50_icon_bits); |
|
128 | 126 |
else if (OswaldPowerState.percent > 5) |
129 |
- oswald_draw_bitmap_offset(81, 0, 0,0, battery25_icon_width, battery25_icon_height, battery25_icon_bits); |
|
127 |
+ oswald_draw_bitmap(81, 0, battery25_icon_width, battery25_icon_height, battery25_icon_bits); |
|
130 | 128 |
else |
131 |
- oswald_draw_bitmap_offset(81, 0, 0,0, battery0_icon_width, battery0_icon_height, battery0_icon_bits); |
|
129 |
+ oswald_draw_bitmap(81, 0, battery0_icon_width, battery0_icon_height, battery0_icon_bits); |
|
132 | 130 |
} |
133 | 131 |
|
134 | 132 |
if (hal_bluetooth_get_state() == BLUETOOTH_ON) |
... | ... |
@@ -161,12 +159,12 @@ void DrawLcdAnaClock(boolean show_seconds) |
161 | 159 |
|
162 | 160 |
hal_lcd_clear_display(); |
163 | 161 |
|
164 |
- snprintf(tstr, 16, "%02d", OswaldClk.day); |
|
162 |
+ snprintf(tstr, 16, "%2d", OswaldClk.day); |
|
165 | 163 |
#if 0 |
166 | 164 |
SetFont(MetaWatch16); |
167 | 165 |
WriteLcdString(70, 40, tstr); |
168 | 166 |
#else |
169 |
- oswald_write_string(70, 43, FONT_7x12b, tstr); |
|
167 |
+ oswald_write_string(70, 43, FONT_6x9, tstr); |
|
170 | 168 |
#endif |
171 | 169 |
|
172 | 170 |
// Marker |
... | ... |
@@ -210,8 +208,8 @@ void DrawLcdAnaClock(boolean show_seconds) |
210 | 208 |
|
211 | 209 |
void DrawLcdDigitalClock(boolean show_seconds) |
212 | 210 |
{ |
213 |
- int gRow = 3; |
|
214 |
- int gColumn = 3; |
|
211 |
+ int gRow = 1; |
|
212 |
+ int gColumn = 1; |
|
215 | 213 |
char tstr[16]; |
216 | 214 |
int i; |
217 | 215 |
|
... | ... |
@@ -300,32 +298,50 @@ void DrawLcdDigitalClock(boolean show_seconds) |
300 | 298 |
#endif |
301 | 299 |
#else |
302 | 300 |
hal_lcd_clear_display(); |
303 |
- snprintf(tstr, 16, "%02d", OswaldClk.hour); |
|
304 |
- oswald_write_string(0, 0, FONT_16x26, tstr); |
|
305 |
- oswald_write_character(26, 0, FONT_16x26, ':'); |
|
306 |
- snprintf(tstr, 16, "%02d", OswaldClk.minute); |
|
307 |
- oswald_write_string(36, 0, FONT_16x26, tstr); |
|
301 |
+ |
|
302 |
+ if (OswaldClk.clk24hr) { |
|
303 |
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, (OswaldClk.hour / 10)); |
|
304 |
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, (OswaldClk.hour % 10)); |
|
305 |
+ } else { |
|
306 |
+ unsigned char val = OswaldClk.hour; |
|
307 |
+ if (val > 12) |
|
308 |
+ val -= 12; |
|
309 |
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, (val / 10)); |
|
310 |
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, (val % 10)); |
|
311 |
+ } |
|
312 |
+ if (OswaldClk.second % 2) |
|
313 |
+ oswald_write_character(gRow-4, gColumn, FONT_LCD13x21, 10); |
|
314 |
+ gRow += 5; |
|
315 |
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, (OswaldClk.minute / 10)); |
|
316 |
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, (OswaldClk.minute % 10)); |
|
317 |
+#endif |
|
318 |
+ if (show_seconds) { |
|
319 |
+ oswald_write_character(59, 9, FONT_LCD8x13, (OswaldClk.second / 10)); |
|
320 |
+ oswald_write_character(67, 9, FONT_LCD8x13, (OswaldClk.second % 10)); |
|
321 |
+ } |
|
308 | 322 |
|
309 | 323 |
if (OswaldClk.day_first) |
310 |
- snprintf(tstr, 16, "%d.%d.%d", OswaldClk.day, OswaldClk.month, OswaldClk.year); |
|
324 |
+ snprintf(tstr, 16, "%2d.%2d.%4d", OswaldClk.day, OswaldClk.month, OswaldClk.year); |
|
311 | 325 |
else |
312 |
- snprintf(tstr, 16, "%d/%d %d", OswaldClk.month, OswaldClk.day, OswaldClk.year); |
|
313 |
- oswald_write_string(0, 25, FONT_7x12b, tstr); |
|
326 |
+ snprintf(tstr, 16, "%2d/%2d %4d", OswaldClk.month, OswaldClk.day, OswaldClk.year); |
|
327 |
+ oswald_write_string(0, 25, FONT_6x9, tstr); |
|
314 | 328 |
|
315 | 329 |
gRow = 0; |
316 | 330 |
gColumn = 45; |
317 | 331 |
for (i=0; i<strlen(MainMessage); i++) { |
318 |
- gRow += oswald_write_character(gRow, gColumn, FONT_6x8, MainMessage[i]); |
|
332 |
+ if (gRow == 0 && MainMessage[i] == ' ') |
|
333 |
+ continue; |
|
334 |
+ gRow += oswald_write_character(gRow, gColumn, FONT_DROID8x12, MainMessage[i]); |
|
319 | 335 |
if (gRow > 90) { |
320 | 336 |
gRow = 0; |
321 | 337 |
gColumn += 9; |
322 | 338 |
} |
323 |
- if (gColumn > 95) |
|
339 |
+ if (gColumn > 86) |
|
324 | 340 |
i = 255; |
325 | 341 |
} |
326 | 342 |
|
327 | 343 |
draw_status_icons(); |
328 |
-#endif |
|
344 |
+ |
|
329 | 345 |
hal_lcd_update_display(); |
330 | 346 |
} |
331 | 347 |
|
... | ... |
@@ -6,20 +6,48 @@ |
6 | 6 |
#include "Fonts.h" |
7 | 7 |
#include "LcdDisplay.h" |
8 | 8 |
#include "oswald_hal.h" |
9 |
+#include "oswald_graphics.h" |
|
9 | 10 |
|
10 | 11 |
#include "oswald_watch_faces.h" |
11 | 12 |
|
12 |
-#include "battery0_icon.xbm" |
|
13 |
-#include "battery25_icon.xbm" |
|
14 |
-#include "battery50_icon.xbm" |
|
15 |
-#include "battery75_icon.xbm" |
|
16 |
-#include "battery100_icon.xbm" |
|
17 |
-#include "charger_icon.xbm" |
|
18 |
-#include "bluetooth_icon.xbm" |
|
19 |
-#include "bluetooth_con_icon.xbm" |
|
13 |
+#if defined(__GNUC__) && (__MSP430X__ > 0) |
|
14 |
+__attribute__((__far__)) |
|
15 |
+#endif |
|
16 |
+#include "bitmaps/battery0_icon.xbm" |
|
17 |
+#if defined(__GNUC__) && (__MSP430X__ > 0) |
|
18 |
+__attribute__((__far__)) |
|
19 |
+#endif |
|
20 |
+#include "bitmaps/battery25_icon.xbm" |
|
21 |
+#if defined(__GNUC__) && (__MSP430X__ > 0) |
|
22 |
+__attribute__((__far__)) |
|
23 |
+#endif |
|
24 |
+#include "bitmaps/battery50_icon.xbm" |
|
25 |
+#if defined(__GNUC__) && (__MSP430X__ > 0) |
|
26 |
+__attribute__((__far__)) |
|
27 |
+#endif |
|
28 |
+#include "bitmaps/battery75_icon.xbm" |
|
29 |
+#if defined(__GNUC__) && (__MSP430X__ > 0) |
|
30 |
+__attribute__((__far__)) |
|
31 |
+#endif |
|
32 |
+#include "bitmaps/battery100_icon.xbm" |
|
33 |
+#if defined(__GNUC__) && (__MSP430X__ > 0) |
|
34 |
+__attribute__((__far__)) |
|
35 |
+#endif |
|
36 |
+#include "bitmaps/charger_icon.xbm" |
|
37 |
+#if defined(__GNUC__) && (__MSP430X__ > 0) |
|
38 |
+__attribute__((__far__)) |
|
39 |
+#endif |
|
40 |
+#include "bitmaps/bluetooth_icon.xbm" |
|
41 |
+#if defined(__GNUC__) && (__MSP430X__ > 0) |
|
42 |
+__attribute__((__far__)) |
|
43 |
+#endif |
|
44 |
+#include "bitmaps/bluetooth_con_icon.xbm" |
|
20 | 45 |
|
21 | 46 |
|
22 | 47 |
/* sine table, per degree, factor 100 */ |
48 |
+#if defined(__GNUC__) && (__MSP430X__ > 0) |
|
49 |
+__attribute__((__far__)) |
|
50 |
+#endif |
|
23 | 51 |
int16_t sintab[]={ |
24 | 52 |
0, 2, 3, 5, 7, 9, 10, 12, 14, 16, |
25 | 53 |
17, 19, 21, 22, 24, 26, 28, 29, 31, 33, |
... | ... |
@@ -92,15 +120,15 @@ void draw_status_icons(void) |
92 | 120 |
} |
93 | 121 |
} else { |
94 | 122 |
if (OswaldPowerState.percent > 75) |
95 |
- oswald_draw_bitmap(81, 0, battery100_icon_width, battery100_icon_height, battery100_icon_bits); |
|
123 |
+ oswald_draw_bitmap_offset(81, 0, 0,0, battery100_icon_width, battery100_icon_height, battery100_icon_bits); |
|
96 | 124 |
else if (OswaldPowerState.percent > 50) |
97 |
- oswald_draw_bitmap(81, 0, battery75_icon_width, battery75_icon_height, battery75_icon_bits); |
|
125 |
+ oswald_draw_bitmap_offset(81, 0, 0,0, battery75_icon_width, battery75_icon_height, battery75_icon_bits); |
|
98 | 126 |
else if (OswaldPowerState.percent > 25) |
99 |
- oswald_draw_bitmap(81, 0, battery50_icon_width, battery50_icon_height, battery50_icon_bits); |
|
127 |
+ oswald_draw_bitmap_offset(81, 0, 0,0, battery50_icon_width, battery50_icon_height, battery50_icon_bits); |
|
100 | 128 |
else if (OswaldPowerState.percent > 5) |
101 |
- oswald_draw_bitmap(81, 0, battery25_icon_width, battery25_icon_height, battery25_icon_bits); |
|
129 |
+ oswald_draw_bitmap_offset(81, 0, 0,0, battery25_icon_width, battery25_icon_height, battery25_icon_bits); |
|
102 | 130 |
else |
103 |
- oswald_draw_bitmap(81, 0, battery0_icon_width, battery0_icon_height, battery0_icon_bits); |
|
131 |
+ oswald_draw_bitmap_offset(81, 0, 0,0, battery0_icon_width, battery0_icon_height, battery0_icon_bits); |
|
104 | 132 |
} |
105 | 133 |
|
106 | 134 |
if (hal_bluetooth_get_state() == BLUETOOTH_ON) |
... | ... |
@@ -133,9 +161,13 @@ void DrawLcdAnaClock(boolean show_seconds) |
133 | 161 |
|
134 | 162 |
hal_lcd_clear_display(); |
135 | 163 |
|
136 |
- SetFont(MetaWatch16); |
|
137 | 164 |
snprintf(tstr, 16, "%02d", OswaldClk.day); |
165 |
+#if 0 |
|
166 |
+ SetFont(MetaWatch16); |
|
138 | 167 |
WriteLcdString(70, 40, tstr); |
168 |
+#else |
|
169 |
+ oswald_write_string(70, 43, FONT_7x12b, tstr); |
|
170 |
+#endif |
|
139 | 171 |
|
140 | 172 |
// Marker |
141 | 173 |
// plot(R*cos(360° * i/N), R*sin(360° * i/N)) |
... | ... |
@@ -144,7 +176,7 @@ void DrawLcdAnaClock(boolean show_seconds) |
144 | 176 |
y = 47 + ((43 * f_sin((360 / 12) * i)) / 100); |
145 | 177 |
x2 = 47 + ((47 * f_cos((360 / 12) * i)) / 100); |
146 | 178 |
y2 = 47 + ((47 * f_sin((360 / 12) * i)) / 100); |
147 |
- DrawLcdLineBresenhamWW(x, y, x2, y2, 2); |
|
179 |
+ oswald_draw_line_ww(x, y, x2, y2, 2); |
|
148 | 180 |
// g_printerr("br %d,%d %d,%d\n", x,y,x2,y2); |
149 | 181 |
}; |
150 | 182 |
|
... | ... |
@@ -153,14 +185,14 @@ void DrawLcdAnaClock(boolean show_seconds) |
153 | 185 |
x = tmp; |
154 | 186 |
tmp = 47 + (30 * f_sin(((360 / 12) * hour) + ((OswaldClk.minute * 360) /12 / 60)) / 100); |
155 | 187 |
y = tmp; |
156 |
- DrawLcdLineBresenhamWW(47, 47, x, y, 2); |
|
188 |
+ oswald_draw_line_ww(47, 47, x, y, 2); |
|
157 | 189 |
|
158 | 190 |
// Minute |
159 | 191 |
tmp = 47 + ((40 * f_cos((360 / 60) * minute)) / 100); |
160 | 192 |
x = tmp; |
161 | 193 |
tmp = 47 + ((40 * f_sin((360 / 60) * minute)) / 100); |
162 | 194 |
y = tmp; |
163 |
- DrawLcdLineBresenhamWW(47, 47, x, y, 2); |
|
195 |
+ oswald_draw_line_ww(47, 47, x, y, 2); |
|
164 | 196 |
|
165 | 197 |
if (show_seconds) { |
166 | 198 |
// Seconds |
... | ... |
@@ -168,7 +200,7 @@ void DrawLcdAnaClock(boolean show_seconds) |
168 | 200 |
x = tmp; |
169 | 201 |
tmp = 47 + ((40 * f_sin((360 / 60) * seconds)) / 100); |
170 | 202 |
y = tmp; |
171 |
- DrawLcdLineBresenham(47, 47, x, y); |
|
203 |
+ oswald_draw_line(47, 47, x, y); |
|
172 | 204 |
}; |
173 | 205 |
|
174 | 206 |
draw_status_icons(); |
... | ... |
@@ -183,6 +215,7 @@ void DrawLcdDigitalClock(boolean show_seconds) |
183 | 215 |
char tstr[16]; |
184 | 216 |
int i; |
185 | 217 |
|
218 |
+#if 0 |
|
186 | 219 |
SetFont(MetaWatchTime); |
187 | 220 |
|
188 | 221 |
hal_lcd_clear_display(); |
... | ... |
@@ -226,27 +259,7 @@ void DrawLcdDigitalClock(boolean show_seconds) |
226 | 259 |
snprintf(tstr, 16, "%d/%d %d", OswaldClk.month, OswaldClk.day, OswaldClk.year); |
227 | 260 |
WriteLcdString(3, 25, tstr); |
228 | 261 |
|
229 |
-#if 0 |
|
230 |
- if (OswaldPowerState.source) |
|
231 |
- oswald_draw_bitmap(81, 4, charger_icon_width, charger_icon_height, charger_icon_bits); |
|
232 |
- |
|
233 |
- if (OswaldPowerState.percent > 75) |
|
234 |
- oswald_draw_bitmap(81, 4, battery100_icon_width, battery100_icon_height, battery100_icon_bits); |
|
235 |
- else if (OswaldPowerState.percent > 50) |
|
236 |
- oswald_draw_bitmap(81, 4, battery75_icon_width, battery75_icon_height, battery75_icon_bits); |
|
237 |
- else if (OswaldPowerState.percent > 25) |
|
238 |
- oswald_draw_bitmap(81, 4, battery50_icon_width, battery50_icon_height, battery50_icon_bits); |
|
239 |
- else if (OswaldPowerState.percent > 5) |
|
240 |
- oswald_draw_bitmap(81, 4, battery25_icon_width, battery25_icon_height, battery25_icon_bits); |
|
241 |
- else |
|
242 |
- oswald_draw_bitmap(81, 4, battery0_icon_width, battery0_icon_height, battery0_icon_bits); |
|
243 |
- |
|
244 |
- |
|
245 |
- if (hal_bluetooth_get_state() >= BLUETOOTH_ON) |
|
246 |
- oswald_draw_bitmap(81, 4, bluetooth_icon_width, bluetooth_icon_height, bluetooth_icon_bits); |
|
247 |
-#else |
|
248 | 262 |
draw_status_icons(); |
249 |
-#endif |
|
250 | 263 |
|
251 | 264 |
gRow = 0; |
252 | 265 |
gColumn = 45; |
... | ... |
@@ -284,6 +297,34 @@ void DrawLcdDigitalClock(boolean show_seconds) |
284 | 297 |
break; |
285 | 298 |
}; |
286 | 299 |
}; |
300 |
+#endif |
|
301 |
+#else |
|
302 |
+ hal_lcd_clear_display(); |
|
303 |
+ snprintf(tstr, 16, "%02d", OswaldClk.hour); |
|
304 |
+ oswald_write_string(0, 0, FONT_16x26, tstr); |
|
305 |
+ oswald_write_character(26, 0, FONT_16x26, ':'); |
|
306 |
+ snprintf(tstr, 16, "%02d", OswaldClk.minute); |
|
307 |
+ oswald_write_string(36, 0, FONT_16x26, tstr); |
|
308 |
+ |
|
309 |
+ if (OswaldClk.day_first) |
|
310 |
+ snprintf(tstr, 16, "%d.%d.%d", OswaldClk.day, OswaldClk.month, OswaldClk.year); |
|
311 |
+ else |
|
312 |
+ snprintf(tstr, 16, "%d/%d %d", OswaldClk.month, OswaldClk.day, OswaldClk.year); |
|
313 |
+ oswald_write_string(0, 25, FONT_7x12b, tstr); |
|
314 |
+ |
|
315 |
+ gRow = 0; |
|
316 |
+ gColumn = 45; |
|
317 |
+ for (i=0; i<strlen(MainMessage); i++) { |
|
318 |
+ gRow += oswald_write_character(gRow, gColumn, FONT_6x8, MainMessage[i]); |
|
319 |
+ if (gRow > 90) { |
|
320 |
+ gRow = 0; |
|
321 |
+ gColumn += 9; |
|
322 |
+ } |
|
323 |
+ if (gColumn > 95) |
|
324 |
+ i = 255; |
|
325 |
+ } |
|
326 |
+ |
|
327 |
+ draw_status_icons(); |
|
287 | 328 |
#endif |
288 | 329 |
hal_lcd_update_display(); |
289 | 330 |
} |
... | ... |
@@ -16,6 +16,7 @@ |
16 | 16 |
#include "battery100_icon.xbm" |
17 | 17 |
#include "charger_icon.xbm" |
18 | 18 |
#include "bluetooth_icon.xbm" |
19 |
+#include "bluetooth_con_icon.xbm" |
|
19 | 20 |
|
20 | 21 |
|
21 | 22 |
/* sine table, per degree, factor 100 */ |
... | ... |
@@ -71,6 +72,43 @@ int16_t f_cos(int16_t v) |
71 | 72 |
return sintab[v]; |
72 | 73 |
} |
73 | 74 |
|
75 |
+void draw_status_icons(void) |
|
76 |
+{ |
|
77 |
+ static uint8_t ci = 0; |
|
78 |
+ |
|
79 |
+ if (OswaldPowerState.source) { |
|
80 |
+ oswald_draw_bitmap(81, 0, charger_icon_width, charger_icon_height, charger_icon_bits); |
|
81 |
+ |
|
82 |
+ if (OswaldPowerState.charge_state != POWER_CHARGER_DONE) { |
|
83 |
+ if (ci==0) oswald_draw_bitmap(81, 0, battery0_icon_width, battery0_icon_height, battery0_icon_bits); |
|
84 |
+ else if (ci==1) oswald_draw_bitmap(81, 0, battery25_icon_width, battery25_icon_height, battery25_icon_bits); |
|
85 |
+ else if (ci==2) oswald_draw_bitmap(81, 0, battery50_icon_width, battery50_icon_height, battery50_icon_bits); |
|
86 |
+ else if (ci==3) oswald_draw_bitmap(81, 0, battery75_icon_width, battery75_icon_height, battery75_icon_bits); |
|
87 |
+ else if (ci==4) oswald_draw_bitmap(81, 0, battery100_icon_width, battery100_icon_height, battery100_icon_bits); |
|
88 |
+ ci++; |
|
89 |
+ ci %= 5; |
|
90 |
+ } else { |
|
91 |
+ oswald_draw_bitmap(81, 0, battery100_icon_width, battery100_icon_height, battery100_icon_bits); |
|
92 |
+ } |
|
93 |
+ } else { |
|
94 |
+ if (OswaldPowerState.percent > 75) |
|
95 |
+ oswald_draw_bitmap(81, 0, battery100_icon_width, battery100_icon_height, battery100_icon_bits); |
|
96 |
+ else if (OswaldPowerState.percent > 50) |
|
97 |
+ oswald_draw_bitmap(81, 0, battery75_icon_width, battery75_icon_height, battery75_icon_bits); |
|
98 |
+ else if (OswaldPowerState.percent > 25) |
|
99 |
+ oswald_draw_bitmap(81, 0, battery50_icon_width, battery50_icon_height, battery50_icon_bits); |
|
100 |
+ else if (OswaldPowerState.percent > 5) |
|
101 |
+ oswald_draw_bitmap(81, 0, battery25_icon_width, battery25_icon_height, battery25_icon_bits); |
|
102 |
+ else |
|
103 |
+ oswald_draw_bitmap(81, 0, battery0_icon_width, battery0_icon_height, battery0_icon_bits); |
|
104 |
+ } |
|
105 |
+ |
|
106 |
+ if (hal_bluetooth_get_state() == BLUETOOTH_ON) |
|
107 |
+ oswald_draw_bitmap(81, 0, bluetooth_icon_width, bluetooth_icon_height, bluetooth_icon_bits); |
|
108 |
+ else if (hal_bluetooth_get_state() == BLUETOOTH_CONNECTED) |
|
109 |
+ oswald_draw_bitmap(81, 0, bluetooth_con_icon_width, bluetooth_con_icon_height, bluetooth_con_icon_bits); |
|
110 |
+} |
|
111 |
+ |
|
74 | 112 |
void DrawLcdAnaClock(boolean show_seconds) |
75 | 113 |
{ |
76 | 114 |
int16_t i, x, y, x2, y2; |
... | ... |
@@ -99,40 +137,42 @@ void DrawLcdAnaClock(boolean show_seconds) |
99 | 137 |
snprintf(tstr, 16, "%02d", OswaldClk.day); |
100 | 138 |
WriteLcdString(70, 40, tstr); |
101 | 139 |
|
140 |
+ // Marker |
|
102 | 141 |
// plot(R*cos(360° * i/N), R*sin(360° * i/N)) |
103 | 142 |
for (i=0; i<12; i++) { |
104 |
- tmp = 48 + ((43 * f_cos((360 / 12) * i)) / 100); |
|
105 |
- x = tmp; |
|
106 |
- tmp = 48 + ((43 * f_sin((360 / 12) * i)) / 100); |
|
107 |
- y = tmp; |
|
108 |
- tmp = 48 + ((48 * f_cos((360 / 12) * i)) / 100); |
|
109 |
- x2 = tmp; |
|
110 |
- tmp = 48 + ((48 * f_sin((360 / 12) * i)) / 100); |
|
111 |
- y2 = tmp; |
|
143 |
+ x = 47 + ((43 * f_cos((360 / 12) * i)) / 100); |
|
144 |
+ y = 47 + ((43 * f_sin((360 / 12) * i)) / 100); |
|
145 |
+ x2 = 47 + ((47 * f_cos((360 / 12) * i)) / 100); |
|
146 |
+ y2 = 47 + ((47 * f_sin((360 / 12) * i)) / 100); |
|
112 | 147 |
DrawLcdLineBresenhamWW(x, y, x2, y2, 2); |
148 |
+ // g_printerr("br %d,%d %d,%d\n", x,y,x2,y2); |
|
113 | 149 |
}; |
114 | 150 |
|
115 | 151 |
// Hour |
116 |
- tmp = 48 + (30 * f_cos(((360 / 12) * hour) + ((OswaldClk.minute * 360) /12 / 60)) / 100); |
|
152 |
+ tmp = 47 + (30 * f_cos(((360 / 12) * hour) + ((OswaldClk.minute * 360) /12 / 60)) / 100); |
|
117 | 153 |
x = tmp; |
118 |
- tmp = 48 + (30 * f_sin(((360 / 12) * hour) + ((OswaldClk.minute * 360) /12 / 60)) / 100); |
|
154 |
+ tmp = 47 + (30 * f_sin(((360 / 12) * hour) + ((OswaldClk.minute * 360) /12 / 60)) / 100); |
|
119 | 155 |
y = tmp; |
120 |
- DrawLcdLineBresenhamWW(48, 48, x, y, 2); |
|
156 |
+ DrawLcdLineBresenhamWW(47, 47, x, y, 2); |
|
157 |
+ |
|
121 | 158 |
// Minute |
122 |
- tmp = 48 + ((40 * f_cos((360 / 60) * minute)) / 100); |
|
159 |
+ tmp = 47 + ((40 * f_cos((360 / 60) * minute)) / 100); |
|
123 | 160 |
x = tmp; |
124 |
- tmp = 48 + ((40 * f_sin((360 / 60) * minute)) / 100); |
|
161 |
+ tmp = 47 + ((40 * f_sin((360 / 60) * minute)) / 100); |
|
125 | 162 |
y = tmp; |
126 |
- DrawLcdLineBresenhamWW(48, 48, x, y, 2); |
|
163 |
+ DrawLcdLineBresenhamWW(47, 47, x, y, 2); |
|
164 |
+ |
|
127 | 165 |
if (show_seconds) { |
128 | 166 |
// Seconds |
129 |
- tmp = 48 + ((40 * f_cos((360 / 60) * seconds)) / 100); |
|
167 |
+ tmp = 47 + ((40 * f_cos((360 / 60) * seconds)) / 100); |
|
130 | 168 |
x = tmp; |
131 |
- tmp = 48 + ((40 * f_sin((360 / 60) * seconds)) / 100); |
|
169 |
+ tmp = 47 + ((40 * f_sin((360 / 60) * seconds)) / 100); |
|
132 | 170 |
y = tmp; |
133 |
- DrawLcdLineBresenham(48, 48, x, y); |
|
171 |
+ DrawLcdLineBresenham(47, 47, x, y); |
|
134 | 172 |
}; |
135 | 173 |
|
174 |
+ draw_status_icons(); |
|
175 |
+ |
|
136 | 176 |
hal_lcd_update_display(); |
137 | 177 |
} |
138 | 178 |
|
... | ... |
@@ -186,6 +226,7 @@ void DrawLcdDigitalClock(boolean show_seconds) |
186 | 226 |
snprintf(tstr, 16, "%d/%d %d", OswaldClk.month, OswaldClk.day, OswaldClk.year); |
187 | 227 |
WriteLcdString(3, 25, tstr); |
188 | 228 |
|
229 |
+#if 0 |
|
189 | 230 |
if (OswaldPowerState.source) |
190 | 231 |
oswald_draw_bitmap(81, 4, charger_icon_width, charger_icon_height, charger_icon_bits); |
191 | 232 |
|
... | ... |
@@ -203,6 +244,9 @@ void DrawLcdDigitalClock(boolean show_seconds) |
203 | 244 |
|
204 | 245 |
if (hal_bluetooth_get_state() >= BLUETOOTH_ON) |
205 | 246 |
oswald_draw_bitmap(81, 4, bluetooth_icon_width, bluetooth_icon_height, bluetooth_icon_bits); |
247 |
+#else |
|
248 |
+ draw_status_icons(); |
|
249 |
+#endif |
|
206 | 250 |
|
207 | 251 |
gRow = 0; |
208 | 252 |
gColumn = 45; |
... | ... |
@@ -9,6 +9,16 @@ |
9 | 9 |
|
10 | 10 |
#include "oswald_watch_faces.h" |
11 | 11 |
|
12 |
+#include "battery0_icon.xbm" |
|
13 |
+#include "battery25_icon.xbm" |
|
14 |
+#include "battery50_icon.xbm" |
|
15 |
+#include "battery75_icon.xbm" |
|
16 |
+#include "battery100_icon.xbm" |
|
17 |
+#include "charger_icon.xbm" |
|
18 |
+#include "bluetooth_icon.xbm" |
|
19 |
+ |
|
20 |
+ |
|
21 |
+/* sine table, per degree, factor 100 */ |
|
12 | 22 |
int16_t sintab[]={ |
13 | 23 |
0, 2, 3, 5, 7, 9, 10, 12, 14, 16, |
14 | 24 |
17, 19, 21, 22, 24, 26, 28, 29, 31, 33, |
... | ... |
@@ -131,6 +141,7 @@ void DrawLcdDigitalClock(boolean show_seconds) |
131 | 141 |
int gRow = 3; |
132 | 142 |
int gColumn = 3; |
133 | 143 |
char tstr[16]; |
144 |
+ int i; |
|
134 | 145 |
|
135 | 146 |
SetFont(MetaWatchTime); |
136 | 147 |
|
... | ... |
@@ -175,6 +186,37 @@ void DrawLcdDigitalClock(boolean show_seconds) |
175 | 186 |
snprintf(tstr, 16, "%d/%d %d", OswaldClk.month, OswaldClk.day, OswaldClk.year); |
176 | 187 |
WriteLcdString(3, 25, tstr); |
177 | 188 |
|
189 |
+ if (OswaldPowerState.source) |
|
190 |
+ oswald_draw_bitmap(81, 4, charger_icon_width, charger_icon_height, charger_icon_bits); |
|
191 |
+ |
|
192 |
+ if (OswaldPowerState.percent > 75) |
|
193 |
+ oswald_draw_bitmap(81, 4, battery100_icon_width, battery100_icon_height, battery100_icon_bits); |
|
194 |
+ else if (OswaldPowerState.percent > 50) |
|
195 |
+ oswald_draw_bitmap(81, 4, battery75_icon_width, battery75_icon_height, battery75_icon_bits); |
|
196 |
+ else if (OswaldPowerState.percent > 25) |
|
197 |
+ oswald_draw_bitmap(81, 4, battery50_icon_width, battery50_icon_height, battery50_icon_bits); |
|
198 |
+ else if (OswaldPowerState.percent > 5) |
|
199 |
+ oswald_draw_bitmap(81, 4, battery25_icon_width, battery25_icon_height, battery25_icon_bits); |
|
200 |
+ else |
|
201 |
+ oswald_draw_bitmap(81, 4, battery0_icon_width, battery0_icon_height, battery0_icon_bits); |
|
202 |
+ |
|
203 |
+ |
|
204 |
+ if (hal_bluetooth_get_state() >= BLUETOOTH_ON) |
|
205 |
+ oswald_draw_bitmap(81, 4, bluetooth_icon_width, bluetooth_icon_height, bluetooth_icon_bits); |
|
206 |
+ |
|
207 |
+ gRow = 0; |
|
208 |
+ gColumn = 45; |
|
209 |
+ SetFont(MetaWatch5); |
|
210 |
+ for (i=0; i<strlen(MainMessage); i++) { |
|
211 |
+ gRow += WriteLcdCharacter(gRow, gColumn, MainMessage[i]); |
|
212 |
+ if (gRow > 90) { |
|
213 |
+ gRow = 0; |
|
214 |
+ gColumn += 7; |
|
215 |
+ } |
|
216 |
+ if (gColumn > 95) |
|
217 |
+ i = 255; |
|
218 |
+ } |
|
219 |
+#if 0 |
|
178 | 220 |
snprintf(tstr, 16, "%d%% (%dmV)", OswaldPowerState.percent, OswaldPowerState.level); |
179 | 221 |
WriteLcdString(2, 48, tstr); |
180 | 222 |
WriteLcdString(2, 64, OswaldPowerState.source ? "ext" : "bat"); |
... | ... |
@@ -198,6 +240,7 @@ void DrawLcdDigitalClock(boolean show_seconds) |
198 | 240 |
break; |
199 | 241 |
}; |
200 | 242 |
}; |
243 |
+#endif |
|
201 | 244 |
hal_lcd_update_display(); |
202 | 245 |
} |
203 | 246 |
|
... | ... |
@@ -1,89 +1,203 @@ |
1 |
-#include <math.h> |
|
1 |
+#include <stdio.h> |
|
2 |
+#include <stdint.h> |
|
2 | 3 |
|
3 | 4 |
#include "oswald.h" |
4 | 5 |
#include "oswald_main.h" |
5 |
-#include "oswald-ui.h" |
|
6 | 6 |
#include "Fonts.h" |
7 | 7 |
#include "LcdDisplay.h" |
8 |
+#include "oswald_hal.h" |
|
8 | 9 |
|
9 | 10 |
#include "oswald_watch_faces.h" |
10 | 11 |
|
12 |
+int16_t sintab[]={ |
|
13 |
+ 0, 2, 3, 5, 7, 9, 10, 12, 14, 16, |
|
14 |
+ 17, 19, 21, 22, 24, 26, 28, 29, 31, 33, |
|
15 |
+ 34, 36, 37, 39, 41, 42, 44, 45, 47, 48, |
|
16 |
+ 50, 52, 53, 54, 56, 57, 59, 60, 62, 63, |
|
17 |
+ 64, 66, 67, 68, 69, 71, 72, 73, 74, 75, |
|
18 |
+ 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, |
|
19 |
+ 87, 87, 88, 89, 90, 91, 91, 92, 93, 93, |
|
20 |
+ 94, 95, 95, 96, 96, 97, 97, 97, 98, 98, |
|
21 |
+ 98, 99, 99, 99, 99, 100, 100, 100, 100, 100, |
|
22 |
+ 100, 100, 100, 100, 100, 100, 99, 99, 99, 99, |
|
23 |
+ 98, 98, 98, 97, 97, 97, 96, 96, 95, 95, |
|
24 |
+ 94, 93, 93, 92, 91, 91, 90, 89, 88, 87, |
|
25 |
+ 87, 86, 85, 84, 83, 82, 81, 80, 79, 78, |
|
26 |
+ 77, 75, 74, 73, 72, 71, 69, 68, 67, 66, |
|
27 |
+ 64, 63, 62, 60, 59, 57, 56, 54, 53, 52, |
|
28 |
+ 50, 48, 47, 45, 44, 42, 41, 39, 37, 36, |
|
29 |
+ 34, 33, 31, 29, 28, 26, 24, 22, 21, 19, |
|
30 |
+ 17, 16, 14, 12, 10, 9, 7, 5, 3, 2, |
|
31 |
+ 0, -2, -3, -5, -7, -9, -10, -12, -14, -16, |
|
32 |
+ -17, -19, -21, -22, -24, -26, -28, -29, -31, -33, |
|
33 |
+ -34, -36, -37, -39, -41, -42, -44, -45, -47, -48, |
|
34 |
+ -50, -52, -53, -54, -56, -57, -59, -60, -62, -63, |
|
35 |
+ -64, -66, -67, -68, -69, -71, -72, -73, -74, -75, |
|
36 |
+ -77, -78, -79, -80, -81, -82, -83, -84, -85, -86, |
|
37 |
+ -87, -87, -88, -89, -90, -91, -91, -92, -93, -93, |
|
38 |
+ -94, -95, -95, -96, -96, -97, -97, -97, -98, -98, |
|
39 |
+ -98, -99, -99, -99, -99,-100,-100,-100,-100,-100, |
|
40 |
+ -100,-100,-100,-100,-100,-100, -99, -99, -99, -99, |
|
41 |
+ -98, -98, -98, -97, -97, -97, -96, -96, -95, -95, |
|
42 |
+ -94, -93, -93, -92, -91, -91, -90, -89, -88, -87, |
|
43 |
+ -87, -86, -85, -84, -83, -82, -81, -80, -79, -78, |
|
44 |
+ -77, -75, -74, -73, -72, -71, -69, -68, -67, -66, |
|
45 |
+ -64, -63, -62, -60, -59, -57, -56, -54, -53, -52, |
|
46 |
+ -50, -48, -47, -45, -44, -42, -41, -39, -37, -36, |
|
47 |
+ -34, -33, -31, -29, -28, -26, -24, -22, -21, -19, |
|
48 |
+ -17, -16, -14, -12, -10, -9, -7, -5, -3, -2 |
|
49 |
+}; |
|
50 |
+ |
|
51 |
+int16_t f_sin(int16_t v) |
|
52 |
+{ |
|
53 |
+ v %= 360; |
|
54 |
+ return sintab[v]; |
|
55 |
+} |
|
56 |
+ |
|
57 |
+int16_t f_cos(int16_t v) |
|
58 |
+{ |
|
59 |
+ v += 90; |
|
60 |
+ v %= 360; |
|
61 |
+ return sintab[v]; |
|
62 |
+} |
|
63 |
+ |
|
11 | 64 |
void DrawLcdAnaClock(boolean show_seconds) |
12 | 65 |
{ |
13 |
- //unsigned char *bbuf; |
|
14 |
- //char daystr[5]; |
|
15 |
- //int len; |
|
16 |
- int i, x, y, x2, y2; |
|
17 |
- double tmp, mf; |
|
18 |
- s8t hour, minute, seconds; |
|
66 |
+ int16_t i, x, y, x2, y2; |
|
67 |
+ int16_t tmp; |
|
68 |
+ int8_t hour, minute, seconds; |
|
69 |
+ char tstr[16]; |
|
19 | 70 |
|
20 | 71 |
hour = OswaldClk.hour; |
21 | 72 |
minute = OswaldClk.minute; |
22 | 73 |
seconds = OswaldClk.second; |
23 | 74 |
|
24 | 75 |
hour -= 3; |
25 |
- mf = (1. / 59.) * (double)minute; |
|
76 |
+ if (hour < 0) |
|
77 |
+ hour += 12; |
|
78 |
+ // mf = (1. / 59.) * (double)minute; |
|
26 | 79 |
minute -= 15; |
80 |
+ if (minute < 0) |
|
81 |
+ minute += 60; |
|
27 | 82 |
seconds -= 15; |
83 |
+ if (seconds < 0) |
|
84 |
+ seconds += 60; |
|
28 | 85 |
|
29 |
- lcd_clear_display(); |
|
86 |
+ hal_lcd_clear_display(); |
|
87 |
+ |
|
88 |
+ SetFont(MetaWatch16); |
|
89 |
+ snprintf(tstr, 16, "%02d", OswaldClk.day); |
|
90 |
+ WriteLcdString(70, 40, tstr); |
|
30 | 91 |
|
31 | 92 |
// plot(R*cos(360° * i/N), R*sin(360° * i/N)) |
32 | 93 |
for (i=0; i<12; i++) { |
33 |
- tmp = 48. + (43. * cos(((2. * M_PI) / 12.) * (double)i)); |
|
94 |
+ tmp = 48 + ((43 * f_cos((360 / 12) * i)) / 100); |
|
34 | 95 |
x = tmp; |
35 |
- tmp = 48 + (43. * sin(((2. * M_PI) / 12.) * (double)i)); |
|
96 |
+ tmp = 48 + ((43 * f_sin((360 / 12) * i)) / 100); |
|
36 | 97 |
y = tmp; |
37 |
- tmp = 48. + (48. * cos(((2. * M_PI) / 12.) * (double)i)); |
|
98 |
+ tmp = 48 + ((48 * f_cos((360 / 12) * i)) / 100); |
|
38 | 99 |
x2 = tmp; |
39 |
- tmp = 48 + (48. * sin(((2. * M_PI) / 12.) * (double)i)); |
|
100 |
+ tmp = 48 + ((48 * f_sin((360 / 12) * i)) / 100); |
|
40 | 101 |
y2 = tmp; |
41 | 102 |
DrawLcdLineBresenhamWW(x, y, x2, y2, 2); |
42 | 103 |
}; |
104 |
+ |
|
43 | 105 |
// Hour |
44 |
- tmp = 48. + (30. * cos(((2. * M_PI) / 12.) * ((double)hour + mf))); |
|
106 |
+ tmp = 48 + (30 * f_cos(((360 / 12) * hour) + ((OswaldClk.minute * 360) /12 / 60)) / 100); |
|
45 | 107 |
x = tmp; |
46 |
- tmp = 48 + (30. * sin(((2. * M_PI) / 12.) * ((double)hour + mf))); |
|
108 |
+ tmp = 48 + (30 * f_sin(((360 / 12) * hour) + ((OswaldClk.minute * 360) /12 / 60)) / 100); |
|
47 | 109 |
y = tmp; |
48 | 110 |
DrawLcdLineBresenhamWW(48, 48, x, y, 2); |
49 | 111 |
// Minute |
50 |
- tmp = 48. + (40. * cos(((2. * M_PI) / 60.) * (double)minute)); |
|
112 |
+ tmp = 48 + ((40 * f_cos((360 / 60) * minute)) / 100); |
|
51 | 113 |
x = tmp; |
52 |
- tmp = 48 + (40. * sin(((2. * M_PI) / 60.) * (double)minute)); |
|
114 |
+ tmp = 48 + ((40 * f_sin((360 / 60) * minute)) / 100); |
|
53 | 115 |
y = tmp; |
54 | 116 |
DrawLcdLineBresenhamWW(48, 48, x, y, 2); |
55 | 117 |
if (show_seconds) { |
56 | 118 |
// Seconds |
57 |
- tmp = 48. + (40. * cos(((2. * M_PI) / 60.) * (double)seconds)); |
|
119 |
+ tmp = 48 + ((40 * f_cos((360 / 60) * seconds)) / 100); |
|
58 | 120 |
x = tmp; |
59 |
- tmp = 48 + (40. * sin(((2. * M_PI) / 60.) * (double)seconds)); |
|
121 |
+ tmp = 48 + ((40 * f_sin((360 / 60) * seconds)) / 100); |
|
60 | 122 |
y = tmp; |
61 | 123 |
DrawLcdLineBresenham(48, 48, x, y); |
62 | 124 |
}; |
63 | 125 |
|
64 |
- //snprintf(daystr, 5, "%d", day); |
|
65 |
- // mw_buf_print(mwbuf, 74, 45, daystr, 0, MW_WHITE, MW_BLACK); |
|
66 |
- lcd_update_display(); |
|
126 |
+ hal_lcd_update_display(); |
|
67 | 127 |
} |
68 | 128 |
|
69 | 129 |
void DrawLcdDigitalClock(boolean show_seconds) |
70 | 130 |
{ |
71 | 131 |
int gRow = 3; |
72 |
- int gColumn = 4; |
|
132 |
+ int gColumn = 3; |
|
133 |
+ char tstr[16]; |
|
73 | 134 |
|
74 | 135 |
SetFont(MetaWatchTime); |
75 | 136 |
|
76 |
- lcd_clear_display(); |
|
137 |
+ hal_lcd_clear_display(); |
|
77 | 138 |
//gRow += WriteLcdCharacter(ui, gRow, gColumn, TIME_CHARACTER_SPACE_INDEX); |
78 |
- gRow += WriteLcdCharacter(gRow, gColumn, (OswaldClk.hour / 10)); |
|
79 |
- gRow += WriteLcdCharacter(gRow, gColumn, (OswaldClk.hour % 10)); |
|
139 |
+ if (OswaldClk.clk24hr) { |
|
140 |
+ gRow += WriteLcdCharacter(gRow, gColumn, (OswaldClk.hour / 10)); |
|
141 |
+ gRow += WriteLcdCharacter(gRow, gColumn, (OswaldClk.hour % 10)); |
|
142 |
+ } else { |
|
143 |
+ unsigned char val = OswaldClk.hour; |
|
144 |
+ if (val > 12) |
|
145 |
+ val -= 12; |
|
146 |
+ gRow += WriteLcdCharacter(gRow, gColumn, (val / 10)); |
|
147 |
+ gRow += WriteLcdCharacter(gRow, gColumn, (val % 10)); |
|
148 |
+ } |
|
80 | 149 |
gRow += WriteLcdCharacter(gRow, gColumn, TIME_CHARACTER_COLON_INDEX); |
81 | 150 |
gRow += WriteLcdCharacter(gRow, gColumn, (OswaldClk.minute / 10)); |
82 | 151 |
gRow += WriteLcdCharacter(gRow, gColumn, (OswaldClk.minute % 10)); |
152 |
+ |
|
153 |
+ gRow += 3; |
|
83 | 154 |
if (show_seconds) { |
84 |
- gRow += WriteLcdCharacter(gRow, gColumn, TIME_CHARACTER_COLON_INDEX); |
|
85 |
- gRow += WriteLcdCharacter(gRow, gColumn, (OswaldClk.second / 10)); |
|
86 |
- gRow += WriteLcdCharacter(gRow, gColumn, (OswaldClk.second % 10)); |
|
155 |
+ SetFont(MetaWatch16); |
|
156 |
+ snprintf(tstr, 16, "%02d", OswaldClk.second); |
|
157 |
+ WriteLcdString(gRow, 9, tstr); |
|
87 | 158 |
}; |
88 |
- lcd_update_display(); |
|
159 |
+ |
|
160 |
+ SetFont(MetaWatch7); |
|
161 |
+ |
|
162 |
+ if (!OswaldClk.clk24hr) { |
|
163 |
+ if (OswaldClk.hour > 12) { |
|
164 |
+ WriteLcdString(gRow, 3, "PM"); |
|
165 |
+ } else { |
|
166 |
+ WriteLcdString(gRow, 3, "AM"); |
|
167 |
+ } |
|
168 |
+ } |
|
169 |
+ |
|
170 |
+ SetFont(MetaWatch16); |
|
171 |
+ |
|
172 |
+ if (OswaldClk.day_first) |
|
173 |
+ snprintf(tstr, 16, "%d.%d.%d", OswaldClk.day, OswaldClk.month, OswaldClk.year); |
|
174 |
+ else |
|
175 |
+ snprintf(tstr, 16, "%d/%d %d", OswaldClk.month, OswaldClk.day, OswaldClk.year); |
|
176 |
+ WriteLcdString(3, 25, tstr); |
|
177 |
+ |
|
178 |
+ snprintf(tstr, 16, "%d%% (%dmV)", OswaldPowerState.percent, OswaldPowerState.level); |
|
179 |
+ WriteLcdString(2, 48, tstr); |
|
180 |
+ WriteLcdString(2, 64, OswaldPowerState.source ? "ext" : "bat"); |
|
181 |
+ |
|
182 |
+ /* this makes only sense when the charger is active */ |
|
183 |
+ if (OswaldPowerState.source) { |
|
184 |
+ switch (OswaldPowerState.charge_state) { |
|
185 |
+ case POWER_CHARGER_DONE: |
|
186 |
+ WriteLcdString(2, 80, "charge done"); |
|
187 |
+ break; |
|
188 |
+ case POWER_CHARGER_PRECHARGE: |
|
189 |
+ WriteLcdString(2, 80, "precharging"); |
|
190 |
+ break; |
|
191 |
+ case POWER_CHARGER_CHARGING: |
|
192 |
+ WriteLcdString(2, 80, "charging"); |
|
193 |
+ break; |
|
194 |
+ case POWER_CHARGER_UNK: |
|
195 |
+ WriteLcdString(2, 80, "charge unkn."); |
|
196 |
+ break; |
|
197 |
+ default: |
|
198 |
+ break; |
|
199 |
+ }; |
|
200 |
+ }; |
|
201 |
+ hal_lcd_update_display(); |
|
89 | 202 |
} |
203 |
+ |
... | ... |
@@ -10,10 +10,10 @@ |
10 | 10 |
|
11 | 11 |
void DrawLcdAnaClock(boolean show_seconds) |
12 | 12 |
{ |
13 |
- unsigned char *bbuf; |
|
14 |
- char daystr[5]; |
|
15 |
- int len; |
|
16 |
- register i, x, y, x2, y2; |
|
13 |
+ //unsigned char *bbuf; |
|
14 |
+ //char daystr[5]; |
|
15 |
+ //int len; |
|
16 |
+ int i, x, y, x2, y2; |
|
17 | 17 |
double tmp, mf; |
18 | 18 |
s8t hour, minute, seconds; |
19 | 19 |
|
... | ... |
@@ -63,12 +63,13 @@ void DrawLcdAnaClock(boolean show_seconds) |
63 | 63 |
|
64 | 64 |
//snprintf(daystr, 5, "%d", day); |
65 | 65 |
// mw_buf_print(mwbuf, 74, 45, daystr, 0, MW_WHITE, MW_BLACK); |
66 |
+ lcd_update_display(); |
|
66 | 67 |
} |
67 | 68 |
|
68 | 69 |
void DrawLcdDigitalClock(boolean show_seconds) |
69 | 70 |
{ |
70 |
- gint gRow = 3; |
|
71 |
- gint gColumn = 4; |
|
71 |
+ int gRow = 3; |
|
72 |
+ int gColumn = 4; |
|
72 | 73 |
|
73 | 74 |
SetFont(MetaWatchTime); |
74 | 75 |
|
... | ... |
@@ -84,5 +85,5 @@ void DrawLcdDigitalClock(boolean show_seconds) |
84 | 85 |
gRow += WriteLcdCharacter(gRow, gColumn, (OswaldClk.second / 10)); |
85 | 86 |
gRow += WriteLcdCharacter(gRow, gColumn, (OswaldClk.second % 10)); |
86 | 87 |
}; |
88 |
+ lcd_update_display(); |
|
87 | 89 |
} |
88 |
- |
... | ... |
@@ -8,7 +8,7 @@ |
8 | 8 |
|
9 | 9 |
#include "oswald_watch_faces.h" |
10 | 10 |
|
11 |
-void DrawLcdAnaClock(void) |
|
11 |
+void DrawLcdAnaClock(boolean show_seconds) |
|
12 | 12 |
{ |
13 | 13 |
unsigned char *bbuf; |
14 | 14 |
char daystr[5]; |
... | ... |
@@ -52,7 +52,7 @@ void DrawLcdAnaClock(void) |
52 | 52 |
tmp = 48 + (40. * sin(((2. * M_PI) / 60.) * (double)minute)); |
53 | 53 |
y = tmp; |
54 | 54 |
DrawLcdLineBresenhamWW(48, 48, x, y, 2); |
55 |
- if (OswaldState.idle_show_seconds) { |
|
55 |
+ if (show_seconds) { |
|
56 | 56 |
// Seconds |
57 | 57 |
tmp = 48. + (40. * cos(((2. * M_PI) / 60.) * (double)seconds)); |
58 | 58 |
x = tmp; |
... | ... |
@@ -65,7 +65,7 @@ void DrawLcdAnaClock(void) |
65 | 65 |
// mw_buf_print(mwbuf, 74, 45, daystr, 0, MW_WHITE, MW_BLACK); |
66 | 66 |
} |
67 | 67 |
|
68 |
-void DrawLcdDigitalClock(void) |
|
68 |
+void DrawLcdDigitalClock(boolean show_seconds) |
|
69 | 69 |
{ |
70 | 70 |
gint gRow = 3; |
71 | 71 |
gint gColumn = 4; |
... | ... |
@@ -79,7 +79,7 @@ void DrawLcdDigitalClock(void) |
79 | 79 |
gRow += WriteLcdCharacter(gRow, gColumn, TIME_CHARACTER_COLON_INDEX); |
80 | 80 |
gRow += WriteLcdCharacter(gRow, gColumn, (OswaldClk.minute / 10)); |
81 | 81 |
gRow += WriteLcdCharacter(gRow, gColumn, (OswaldClk.minute % 10)); |
82 |
- if (OswaldState.idle_show_seconds) { |
|
82 |
+ if (show_seconds) { |
|
83 | 83 |
gRow += WriteLcdCharacter(gRow, gColumn, TIME_CHARACTER_COLON_INDEX); |
84 | 84 |
gRow += WriteLcdCharacter(gRow, gColumn, (OswaldClk.second / 10)); |
85 | 85 |
gRow += WriteLcdCharacter(gRow, gColumn, (OswaldClk.second % 10)); |
... | ... |
@@ -8,7 +8,7 @@ |
8 | 8 |
|
9 | 9 |
#include "oswald_watch_faces.h" |
10 | 10 |
|
11 |
-void DrawLcdAnaClock(boolean show_seconds) |
|
11 |
+void DrawLcdAnaClock(void) |
|
12 | 12 |
{ |
13 | 13 |
unsigned char *bbuf; |
14 | 14 |
char daystr[5]; |
... | ... |
@@ -52,7 +52,7 @@ void DrawLcdAnaClock(boolean show_seconds) |
52 | 52 |
tmp = 48 + (40. * sin(((2. * M_PI) / 60.) * (double)minute)); |
53 | 53 |
y = tmp; |
54 | 54 |
DrawLcdLineBresenhamWW(48, 48, x, y, 2); |
55 |
- if (show_seconds) { |
|
55 |
+ if (OswaldState.idle_show_seconds) { |
|
56 | 56 |
// Seconds |
57 | 57 |
tmp = 48. + (40. * cos(((2. * M_PI) / 60.) * (double)seconds)); |
58 | 58 |
x = tmp; |
... | ... |
@@ -65,7 +65,7 @@ void DrawLcdAnaClock(boolean show_seconds) |
65 | 65 |
// mw_buf_print(mwbuf, 74, 45, daystr, 0, MW_WHITE, MW_BLACK); |
66 | 66 |
} |
67 | 67 |
|
68 |
-void DrawLcdDigitalClock(boolean show_seconds) |
|
68 |
+void DrawLcdDigitalClock(void) |
|
69 | 69 |
{ |
70 | 70 |
gint gRow = 3; |
71 | 71 |
gint gColumn = 4; |
... | ... |
@@ -79,7 +79,7 @@ void DrawLcdDigitalClock(boolean show_seconds) |
79 | 79 |
gRow += WriteLcdCharacter(gRow, gColumn, TIME_CHARACTER_COLON_INDEX); |
80 | 80 |
gRow += WriteLcdCharacter(gRow, gColumn, (OswaldClk.minute / 10)); |
81 | 81 |
gRow += WriteLcdCharacter(gRow, gColumn, (OswaldClk.minute % 10)); |
82 |
- if (show_seconds) { |
|
82 |
+ if (OswaldState.idle_show_seconds) { |
|
83 | 83 |
gRow += WriteLcdCharacter(gRow, gColumn, TIME_CHARACTER_COLON_INDEX); |
84 | 84 |
gRow += WriteLcdCharacter(gRow, gColumn, (OswaldClk.second / 10)); |
85 | 85 |
gRow += WriteLcdCharacter(gRow, gColumn, (OswaldClk.second % 10)); |
1 | 1 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,88 @@ |
1 |
+#include <math.h> |
|
2 |
+ |
|
3 |
+#include "oswald.h" |
|
4 |
+#include "oswald_main.h" |
|
5 |
+#include "oswald-ui.h" |
|
6 |
+#include "Fonts.h" |
|
7 |
+#include "LcdDisplay.h" |
|
8 |
+ |
|
9 |
+#include "oswald_watch_faces.h" |
|
10 |
+ |
|
11 |
+void DrawLcdAnaClock(boolean show_seconds) |
|
12 |
+{ |
|
13 |
+ unsigned char *bbuf; |
|
14 |
+ char daystr[5]; |
|
15 |
+ int len; |
|
16 |
+ register i, x, y, x2, y2; |
|
17 |
+ double tmp, mf; |
|
18 |
+ s8t hour, minute, seconds; |
|
19 |
+ |
|
20 |
+ hour = OswaldClk.hour; |
|
21 |
+ minute = OswaldClk.minute; |
|
22 |
+ seconds = OswaldClk.second; |
|
23 |
+ |
|
24 |
+ hour -= 3; |
|
25 |
+ mf = (1. / 59.) * (double)minute; |
|
26 |
+ minute -= 15; |
|
27 |
+ seconds -= 15; |
|
28 |
+ |
|
29 |
+ lcd_clear_display(); |
|
30 |
+ |
|
31 |
+ // plot(R*cos(360° * i/N), R*sin(360° * i/N)) |
|
32 |
+ for (i=0; i<12; i++) { |
|
33 |
+ tmp = 48. + (43. * cos(((2. * M_PI) / 12.) * (double)i)); |
|
34 |
+ x = tmp; |
|
35 |
+ tmp = 48 + (43. * sin(((2. * M_PI) / 12.) * (double)i)); |
|
36 |
+ y = tmp; |
|
37 |
+ tmp = 48. + (48. * cos(((2. * M_PI) / 12.) * (double)i)); |
|
38 |
+ x2 = tmp; |
|
39 |
+ tmp = 48 + (48. * sin(((2. * M_PI) / 12.) * (double)i)); |
|
40 |
+ y2 = tmp; |
|
41 |
+ DrawLcdLineBresenhamWW(x, y, x2, y2, 2); |
|
42 |
+ }; |
|
43 |
+ // Hour |
|
44 |
+ tmp = 48. + (30. * cos(((2. * M_PI) / 12.) * ((double)hour + mf))); |
|
45 |
+ x = tmp; |
|
46 |
+ tmp = 48 + (30. * sin(((2. * M_PI) / 12.) * ((double)hour + mf))); |
|
47 |
+ y = tmp; |
|
48 |
+ DrawLcdLineBresenhamWW(48, 48, x, y, 2); |
|
49 |
+ // Minute |
|
50 |
+ tmp = 48. + (40. * cos(((2. * M_PI) / 60.) * (double)minute)); |
|
51 |
+ x = tmp; |
|
52 |
+ tmp = 48 + (40. * sin(((2. * M_PI) / 60.) * (double)minute)); |
|
53 |
+ y = tmp; |
|
54 |
+ DrawLcdLineBresenhamWW(48, 48, x, y, 2); |
|
55 |
+ if (show_seconds) { |
|
56 |
+ // Seconds |
|
57 |
+ tmp = 48. + (40. * cos(((2. * M_PI) / 60.) * (double)seconds)); |
|
58 |
+ x = tmp; |
|
59 |
+ tmp = 48 + (40. * sin(((2. * M_PI) / 60.) * (double)seconds)); |
|
60 |
+ y = tmp; |
|
61 |
+ DrawLcdLineBresenham(48, 48, x, y); |
|
62 |
+ }; |
|
63 |
+ |
|
64 |
+ //snprintf(daystr, 5, "%d", day); |
|
65 |
+ // mw_buf_print(mwbuf, 74, 45, daystr, 0, MW_WHITE, MW_BLACK); |
|
66 |
+} |
|
67 |
+ |
|
68 |
+void DrawLcdDigitalClock(boolean show_seconds) |
|
69 |
+{ |
|
70 |
+ gint gRow = 3; |
|
71 |
+ gint gColumn = 4; |
|
72 |
+ |
|
73 |
+ SetFont(MetaWatchTime); |
|
74 |
+ |
|
75 |
+ lcd_clear_display(); |
|
76 |
+ //gRow += WriteLcdCharacter(ui, gRow, gColumn, TIME_CHARACTER_SPACE_INDEX); |
|
77 |
+ gRow += WriteLcdCharacter(gRow, gColumn, (OswaldClk.hour / 10)); |
|
78 |
+ gRow += WriteLcdCharacter(gRow, gColumn, (OswaldClk.hour % 10)); |
|
79 |
+ gRow += WriteLcdCharacter(gRow, gColumn, TIME_CHARACTER_COLON_INDEX); |
|
80 |
+ gRow += WriteLcdCharacter(gRow, gColumn, (OswaldClk.minute / 10)); |
|
81 |
+ gRow += WriteLcdCharacter(gRow, gColumn, (OswaldClk.minute % 10)); |
|
82 |
+ if (show_seconds) { |
|
83 |
+ gRow += WriteLcdCharacter(gRow, gColumn, TIME_CHARACTER_COLON_INDEX); |
|
84 |
+ gRow += WriteLcdCharacter(gRow, gColumn, (OswaldClk.second / 10)); |
|
85 |
+ gRow += WriteLcdCharacter(gRow, gColumn, (OswaldClk.second % 10)); |
|
86 |
+ }; |
|
87 |
+} |
|
88 |
+ |