Browse code

Use strutils instead of snprintf (to save some bytes), set default year to 2014, partial revamp of the stopwatch

Dario Rodriguez authored on 14/01/2014 22:59:59
Showing 1 changed files
... ...
@@ -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 */
Browse code

Fix bt icon, restyle about screen, remove enter hint in alarm fired screen

Dario Rodriguez authored on 10/01/2014 22:59:59
Showing 1 changed files
... ...
@@ -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
 }
Browse code

Enable 4 alarms, fix alarm UI, implement a rough version of the main menu

Dario Rodriguez authored on 08/01/2014 22:59:59
Showing 1 changed files
... ...
@@ -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;
Browse code

Fix fg/bg issues in graphics library, invert analog clock, improve help clock, make date&time setup screen nicer, continue adaptations to conform to the new button layout

Dario Rodriguez authored on 18/12/2013 22:59:59
Showing 1 changed files
... ...
@@ -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
 	
Browse code

Replace font handling, add new watch face, add calendar. More watchfaces, make calendar interactive and start rearranging button functions

Dario Rodriguez authored on 17/12/2013 22:59:59
Showing 1 changed files
... ...
@@ -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
+}
Browse code

Some minor improvements.

Nils Faerber authored on 06/07/2013 21:21:35
Showing 1 changed files
... ...
@@ -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
 	}
Browse code

Power saving changes, add new fonts, bitmaps and screens

Nils Faerber authored on 19/05/2013 00:07:04
Showing 1 changed files
... ...
@@ -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;
Browse code

Add day name to dgital watch face

Nils Faerber authored on 05/05/2013 21:41:49
Showing 1 changed files
... ...
@@ -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;
Browse code

Rework font code, add new fonts, also proportional, rework watch usage - "SET" button now enters settings mode

Nils Faerber authored on 04/05/2013 19:23:25
Showing 1 changed files
... ...
@@ -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
 
Browse code

Starting to get rid of borrowed code (LcdDisplay, Fonts), integrate new fonts and stuff

Nils Faerber authored on 28/04/2013 22:38:41
Showing 1 changed files
... ...
@@ -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
 }
Browse code

Lot's of stuff...

Nils Faerber authored on 27/04/2013 20:19:55
Showing 1 changed files
... ...
@@ -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;
Browse code

Bluetooth handling, screen reworks for icons

Nils Faerber authored on 21/04/2013 23:10:13
Showing 1 changed files
... ...
@@ -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
 
Browse code

Oh boy... lots of changes, too many to describe

Nils Faerber authored on 21/04/2013 14:26:38
Showing 1 changed files
... ...
@@ -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
+
Browse code

Add fixes for it to work properly on microcontroller

Nils Faerber authored on 19/03/2013 19:22:58
Showing 1 changed files
... ...
@@ -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
-
Browse code

Make idle selectable

Nils Faerber authored on 12/08/2012 02:11:30
Showing 1 changed files
... ...
@@ -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));
Browse code

Add support for more screens

Nils Faerber authored on 06/08/2012 14:12:20
Showing 1 changed files
... ...
@@ -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));
Browse code

Too much to note...

Nils Faerber authored on 05/08/2012 17:07:17
Showing 1 changed files
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
+