... | ... |
@@ -709,6 +709,7 @@ event_ret_t handle_setup_alarm_buttons(watch_button button, alarm_setup_data_t * |
709 | 709 |
break; |
710 | 710 |
case BUTTON_F: |
711 | 711 |
alarm_setup_screen.set_mode = FALSE; |
712 |
+ alarm_setup_screen.pos = 0; |
|
712 | 713 |
break; |
713 | 714 |
default: |
714 | 715 |
return EVENT_RET_UNHANDLED; |
... | ... |
@@ -931,7 +932,16 @@ static int timerecord_cmp(timerecord *a, timerecord *b) |
931 | 932 |
return(a->csec-b->csec); |
932 | 933 |
} |
933 | 934 |
|
934 |
-static void draw_stop_watch_screen(stopwatch_data_t *sdata) |
|
935 |
+typedef enum estopwmask { |
|
936 |
+ stopwm_icon=0x1, |
|
937 |
+ stopwm_laps=0x2, |
|
938 |
+ stopwm_split=0x4, |
|
939 |
+ stopwm_current=0x8, |
|
940 |
+ stopwm_menu=0x10, |
|
941 |
+ stopwm_all=0x1f |
|
942 |
+} stopwmask; |
|
943 |
+ |
|
944 |
+static void draw_stop_watch_screen(stopwatch_data_t *sdata, int mask) |
|
935 | 945 |
{ |
936 | 946 |
int w; |
937 | 947 |
char *hint; |
... | ... |
@@ -961,49 +971,67 @@ static void draw_stop_watch_screen(stopwatch_data_t *sdata) |
961 | 971 |
hal_lcd_update_display(); |
962 | 972 |
return; |
963 | 973 |
} |
964 |
- hal_lcd_clear_display(); |
|
974 |
+ if(mask==stopwm_all) |
|
975 |
+ hal_lcd_clear_display(); |
|
965 | 976 |
|
966 |
- oswald_draw_bitmap(36, 3, stopwatch_icon_width, stopwatch_icon_height, 1, stopwatch_icon_bits); |
|
977 |
+ if(mask&stopwm_icon) { |
|
978 |
+ if(mask!=stopwm_all) |
|
979 |
+ oswald_draw_rect(36,3,36-1+stopwatch_icon_width,3-1+stopwatch_icon_height,0); |
|
980 |
+ oswald_draw_bitmap(36, 3, stopwatch_icon_width, stopwatch_icon_height, 1, stopwatch_icon_bits); |
|
981 |
+ } |
|
967 | 982 |
/* Current menu option */ |
968 |
- oswald_draw_rect(0,95-12,95,95,1); |
|
969 |
- hint=(sdata->item==stopw_startstop)?"Start-Stop": |
|
970 |
- (sdata->item==stopw_split)?"Start-Split": |
|
971 |
- (sdata->item==stopw_reset)?"Reset": |
|
972 |
- "Unknown"; |
|
973 |
- w=oswald_getwidth_font58_scaled(hint,2,1); |
|
974 |
- oswald_writestr_font58_scaled((96-w)/2,95-8,hint,&w,0,1,2,1); |
|
975 |
- |
|
983 |
+ if(mask&stopwm_menu) { |
|
984 |
+ oswald_draw_rect(0,95-12,95,95,1); |
|
985 |
+ hint=(sdata->item==stopw_startstop)?"Start-Stop": |
|
986 |
+ (sdata->item==stopw_split)?"Start-Split": |
|
987 |
+ (sdata->item==stopw_reset)?"Reset": |
|
988 |
+ "Unknown"; |
|
989 |
+ w=oswald_getwidth_font58_scaled(hint,2,1); |
|
990 |
+ oswald_writestr_font58_scaled((96-w)/2,95-8,hint,&w,0,1,2,1); |
|
991 |
+ } |
|
976 | 992 |
/* Lap number */ |
977 |
- num2str(sdata->laps,lapbuf,3,3); |
|
978 |
- oswald_writestr_font58_scaled(3,3,lapbuf,&w,1,0,2,2); |
|
979 |
- |
|
980 |
- /* Split diff */ |
|
981 |
- timerecord2str(&(sdata->lastlap),timebuf,csecbuf); |
|
982 |
- x=8+((timebuf[0]==' ')?oswald_getwidth_font58_scaled("0",2,3):0); |
|
983 |
- oswald_writestr_font58_scaled(x,28,timebuf+((timebuf[0]==' ')?1:0),&w,1,0,2,2); |
|
984 |
- oswald_writestr_font58_scaled(x+w+1,34,csecbuf,&w,1,0,2,1); |
|
985 |
- |
|
986 |
- |
|
987 |
- /* Split */ |
|
988 |
- if(sdata->laps>0) |
|
989 |
- timerecord2str(sdata->lapsdata+((sdata->laps<MAX_LAPS)?sdata->laps-1:MAX_LAPS-1),timebuf,csecbuf); |
|
990 |
- else { |
|
991 |
- mymemcpy(timebuf," 0:00:00",9); |
|
992 |
- mymemcpy(csecbuf,"00",3); |
|
993 |
+ if(mask&stopwm_laps) { |
|
994 |
+ if(mask!=stopwm_all) |
|
995 |
+ oswald_draw_rect(3,3,3+9*3,3+12,0); |
|
996 |
+ num2str(sdata->laps,lapbuf,3,3); |
|
997 |
+ oswald_writestr_font58_scaled(3,3,lapbuf,&w,1,0,2,2); |
|
998 |
+ } |
|
999 |
+ |
|
1000 |
+ /* Split diff /Split diff */ |
|
1001 |
+ if(mask&stopwm_split) { |
|
1002 |
+ if(mask!=stopwm_all) |
|
1003 |
+ oswald_draw_rect(0,28,95,60,0); |
|
1004 |
+ /* diff */ |
|
1005 |
+ timerecord2str(&(sdata->lastlap),timebuf,csecbuf); |
|
1006 |
+ x=8+((timebuf[0]==' ')?oswald_getwidth_font58_scaled("0",2,3):0); |
|
1007 |
+ oswald_writestr_font58_scaled(x,28,timebuf+((timebuf[0]==' ')?1:0),&w,1,0,2,2); |
|
1008 |
+ oswald_writestr_font58_scaled(x+w+1,34,csecbuf,&w,1,0,2,1); |
|
1009 |
+ |
|
1010 |
+ /* Split */ |
|
1011 |
+ if(sdata->laps>0) |
|
1012 |
+ timerecord2str(sdata->lapsdata+((sdata->laps<MAX_LAPS)?sdata->laps-1:MAX_LAPS-1),timebuf,csecbuf); |
|
1013 |
+ else { |
|
1014 |
+ mymemcpy(timebuf," 0:00:00",9); |
|
1015 |
+ mymemcpy(csecbuf,"00",3); |
|
1016 |
+ } |
|
1017 |
+ x=8+((timebuf[0]==' ')?oswald_getwidth_font58_scaled("0",2,3):0); |
|
1018 |
+ oswald_writestr_font58_scaled(x,42,timebuf+((timebuf[0]==' ')?1:0),&w,1,0,2,2); |
|
1019 |
+ oswald_writestr_font58_scaled(x+w+1,48,csecbuf,&w,1,0,2,1); |
|
993 | 1020 |
} |
994 |
- x=8+((timebuf[0]==' ')?oswald_getwidth_font58_scaled("0",2,3):0); |
|
995 |
- oswald_writestr_font58_scaled(x,42,timebuf+((timebuf[0]==' ')?1:0),&w,1,0,2,2); |
|
996 |
- oswald_writestr_font58_scaled(x+w+1,48,csecbuf,&w,1,0,2,1); |
|
997 | 1021 |
|
998 | 1022 |
/* main display */ |
999 |
- timerecord2str(&(sdata->current),timebuf,csecbuf); |
|
1000 |
- x=8+((timebuf[0]==' ')?oswald_getwidth_font58_scaled("0",2,3):0); |
|
1001 |
- oswald_writestr_font58_scaled(x,61,timebuf+((timebuf[0]==' ')?1:0),&w,1,0,2,3); |
|
1002 |
- x+=w; |
|
1003 |
- oswald_writestr_font58_scaled(x+1,67,csecbuf,&w,1,0,2,2); |
|
1004 |
- if(sdata->running) |
|
1005 |
- oswald_draw_rect(x+10,67,x+17,78,0); |
|
1006 |
- |
|
1023 |
+ if(mask&stopwm_current) { |
|
1024 |
+ if(mask!=stopwm_all) |
|
1025 |
+ oswald_draw_rect(0,61,95,95-13,0); |
|
1026 |
+ timerecord2str(&(sdata->current),timebuf,csecbuf); |
|
1027 |
+ x=8+((timebuf[0]==' ')?oswald_getwidth_font58_scaled("0",2,3):0); |
|
1028 |
+ oswald_writestr_font58_scaled(x,61,timebuf+((timebuf[0]==' ')?1:0),&w,1,0,2,3); |
|
1029 |
+ x+=w; |
|
1030 |
+ if(sdata->running) |
|
1031 |
+ csecbuf[1]='\0'; |
|
1032 |
+ oswald_writestr_font58_scaled(x+1,67,csecbuf,&w,1,0,2,2); |
|
1033 |
+ } |
|
1034 |
+ |
|
1007 | 1035 |
hal_lcd_update_display(); |
1008 | 1036 |
} |
1009 | 1037 |
|
... | ... |
@@ -1014,6 +1042,7 @@ event_ret_t handle_stop_watch_buttons(watch_button button) |
1014 | 1042 |
stopwatch_screen.showstats=0; |
1015 | 1043 |
else if(button==BUTTON_D) |
1016 | 1044 |
return(EVENT_RET_UNHANDLED); |
1045 |
+ draw_stop_watch_screen(&stopwatch_screen,stopwm_all); |
|
1017 | 1046 |
return(EVENT_RET_HANDLED); |
1018 | 1047 |
} |
1019 | 1048 |
switch (button) { |
... | ... |
@@ -1026,6 +1055,7 @@ event_ret_t handle_stop_watch_buttons(watch_button button) |
1026 | 1055 |
hal_enable_centisecond_timer(); |
1027 | 1056 |
stopwatch_screen.running = TRUE; |
1028 | 1057 |
} |
1058 |
+ draw_stop_watch_screen(&stopwatch_screen,stopwm_current); |
|
1029 | 1059 |
} else if(stopwatch_screen.item==stopw_split) { |
1030 | 1060 |
if (stopwatch_screen.running) { |
1031 | 1061 |
int l; |
... | ... |
@@ -1047,6 +1077,7 @@ event_ret_t handle_stop_watch_buttons(watch_button button) |
1047 | 1077 |
mymemcpy(&(stopwatch_screen.min),&(stopwatch_screen.lastlap),sizeof(timerecord)); |
1048 | 1078 |
if(stopwatch_screen.laps==1 || timerecord_cmp(&(stopwatch_screen.lastlap),&(stopwatch_screen.max))>0) |
1049 | 1079 |
mymemcpy(&(stopwatch_screen.max),&(stopwatch_screen.lastlap),sizeof(timerecord)); |
1080 |
+ draw_stop_watch_screen(&stopwatch_screen,stopwm_split|stopwm_laps); |
|
1050 | 1081 |
} else { |
1051 | 1082 |
hal_enable_centisecond_timer(); |
1052 | 1083 |
stopwatch_screen.running = TRUE; |
... | ... |
@@ -1055,6 +1086,7 @@ event_ret_t handle_stop_watch_buttons(watch_button button) |
1055 | 1086 |
if(stopwatch_screen.running) |
1056 | 1087 |
hal_disable_centisecond_timer(); |
1057 | 1088 |
mymemset(&(stopwatch_screen),0,sizeof(stopwatch_screen)); |
1089 |
+ draw_stop_watch_screen(&stopwatch_screen,stopwm_all); |
|
1058 | 1090 |
} else { |
1059 | 1091 |
return EVENT_RET_UNHANDLED; |
1060 | 1092 |
} |
... | ... |
@@ -1063,15 +1095,20 @@ event_ret_t handle_stop_watch_buttons(watch_button button) |
1063 | 1095 |
case BUTTON_A: |
1064 | 1096 |
stopwatch_screen.item+=stopw_end-1; |
1065 | 1097 |
stopwatch_screen.item%=stopw_end; |
1098 |
+ draw_stop_watch_screen(&stopwatch_screen,stopwm_menu); |
|
1066 | 1099 |
return EVENT_RET_HANDLED; |
1067 | 1100 |
break; |
1068 | 1101 |
case BUTTON_C: |
1069 | 1102 |
stopwatch_screen.item++; |
1070 | 1103 |
stopwatch_screen.item%=stopw_end; |
1104 |
+ draw_stop_watch_screen(&stopwatch_screen,stopwm_menu); |
|
1071 | 1105 |
return EVENT_RET_HANDLED; |
1072 | 1106 |
break; |
1073 | 1107 |
case BUTTON_F: |
1074 | 1108 |
stopwatch_screen.showstats=1-stopwatch_screen.showstats; |
1109 |
+ draw_stop_watch_screen(&stopwatch_screen,stopwm_all); |
|
1110 |
+ return EVENT_RET_HANDLED; |
|
1111 |
+ break; |
|
1075 | 1112 |
default: |
1076 | 1113 |
return EVENT_RET_UNHANDLED; |
1077 | 1114 |
break; |
... | ... |
@@ -1086,11 +1123,10 @@ event_ret_t stop_watch_handle_events(uint16_t event, void *data) |
1086 | 1123 |
case EVENT_USER_BUTTONS: |
1087 | 1124 |
dbg_out("button event %d\n", *(int *)data); |
1088 | 1125 |
ret=handle_stop_watch_buttons(*(watch_button *)data); |
1089 |
- draw_stop_watch_screen(&stopwatch_screen); |
|
1090 | 1126 |
return(ret); |
1091 | 1127 |
break; |
1092 | 1128 |
case EVENT_SCREEN_VISIBLE: |
1093 |
- draw_stop_watch_screen(&stopwatch_screen); |
|
1129 |
+ draw_stop_watch_screen(&stopwatch_screen,stopwm_all); |
|
1094 | 1130 |
return EVENT_RET_HANDLED; |
1095 | 1131 |
break; |
1096 | 1132 |
case EVENT_SCREEN_DESTROY: |
... | ... |
@@ -1116,8 +1152,7 @@ event_ret_t stop_watch_handle_events(uint16_t event, void *data) |
1116 | 1152 |
stopwatch_screen.current.hr = 0; |
1117 | 1153 |
}; |
1118 | 1154 |
if ((stopwatch_screen.current.csec % 10)==0 || stopwatch_screen.running!=TRUE) |
1119 |
- draw_stop_watch_screen(&stopwatch_screen); |
|
1120 |
- //update_stop_watch_screen(&stopwatch_screen); |
|
1155 |
+ draw_stop_watch_screen(&stopwatch_screen,stopwm_current); |
|
1121 | 1156 |
return EVENT_RET_HANDLED; |
1122 | 1157 |
break; |
1123 | 1158 |
default: |
... | ... |
@@ -329,8 +329,6 @@ void draw_accel_screen(accel_data_t *accel_data) |
329 | 329 |
|
330 | 330 |
oswald_draw_bitmap(36, 0, acc_icon_width, acc_icon_height, 1, acc_icon_bits); |
331 | 331 |
|
332 |
- oswald_draw_bitmap(81, 79, enterbutton_icon_width, enterbutton_icon_height, 1, enterbutton_icon_bits); |
|
333 |
- |
|
334 | 332 |
oswald_write_string(1, 40, FONT_6x9, FALSE, "X:"); |
335 | 333 |
oswald_write_number(15, 40, FONT_6x9, FALSE, accel_data->x); |
336 | 334 |
oswald_write_string(1, 52, FONT_6x9, FALSE, "Y:"); |
... | ... |
@@ -872,8 +870,13 @@ typedef struct { |
872 | 870 |
timerecord current; |
873 | 871 |
int laps; |
874 | 872 |
timerecord lapsdata[MAX_LAPS]; |
873 |
+ timerecord avg; |
|
874 |
+ timerecord max; |
|
875 |
+ timerecord min; |
|
876 |
+ timerecord lastlap; |
|
875 | 877 |
boolean running; |
876 | 878 |
stopw_item item; |
879 |
+ boolean showstats; |
|
877 | 880 |
} stopwatch_data_t; |
878 | 881 |
static stopwatch_data_t stopwatch_screen = { {0, 0, 0, 0},0,{{0, 0, 0, 0}} , FALSE,0}; |
879 | 882 |
|
... | ... |
@@ -886,22 +889,81 @@ static void timerecord2str(timerecord *tr, char *timebuf /* sizeof(timebuf)>=9 * |
886 | 889 |
num2str(tr->min,timebuf+3,2,2); |
887 | 890 |
timebuf[5]=':'; |
888 | 891 |
num2str(tr->sec,timebuf+6,2,2); |
889 |
- |
|
890 | 892 |
num2str(tr->csec,csecbuf,2,2); |
891 | 893 |
} |
892 | 894 |
|
895 |
+static void timerecord_diff(timerecord *new, timerecord *old, timerecord *res) |
|
896 |
+{ |
|
897 |
+ int d,od; |
|
898 |
+ mymemset(res,0,sizeof(timerecord)); |
|
899 |
+ d=(old->csec>new->csec)?1:0; |
|
900 |
+ res->csec=(new->csec+d*100)-old->csec; |
|
901 |
+ od=d,d=(old->sec>(new->sec-od))?1:0; |
|
902 |
+ res->sec=(new->sec-od+d*60)-old->sec; |
|
903 |
+ od=d,d=(old->min>(new->min-od))?1:0; |
|
904 |
+ res->min=(new->min-od+d*60)-old->min; |
|
905 |
+ res->hr=(new->hr-d)-old->hr; |
|
906 |
+} |
|
907 |
+ |
|
908 |
+static void timerecord_div(timerecord *total, int div, timerecord *res) |
|
909 |
+{ |
|
910 |
+ int n; |
|
911 |
+ mymemset(res,0,sizeof(timerecord)); |
|
912 |
+ if(div<0) |
|
913 |
+ return; |
|
914 |
+ res->hr=total->hr/div; |
|
915 |
+ n=(((int)total->min)+(total->hr%div)*60); |
|
916 |
+ res->min=n/div; |
|
917 |
+ n=(((int)total->sec)+(n%div)*60); |
|
918 |
+ res->sec=n/div; |
|
919 |
+ n=(((int)total->csec)+(n%div)*100); |
|
920 |
+ res->csec=n/div; |
|
921 |
+} |
|
922 |
+ |
|
923 |
+static int timerecord_cmp(timerecord *a, timerecord *b) |
|
924 |
+{ |
|
925 |
+ if(a->hr!=b->hr) |
|
926 |
+ return(a->hr-b->hr); |
|
927 |
+ if(a->min!=b->min) |
|
928 |
+ return(a->min-b->min); |
|
929 |
+ if(a->sec!=b->sec) |
|
930 |
+ return(a->sec-b->sec); |
|
931 |
+ return(a->csec-b->csec); |
|
932 |
+} |
|
933 |
+ |
|
893 | 934 |
static void draw_stop_watch_screen(stopwatch_data_t *sdata) |
894 | 935 |
{ |
895 | 936 |
int w; |
896 | 937 |
char *hint; |
897 |
- int x; |
|
938 |
+ int x,y; |
|
898 | 939 |
char lapbuf[4]; |
899 | 940 |
char timebuf[9]; |
900 | 941 |
char csecbuf[3]; |
942 |
+ int i; |
|
901 | 943 |
|
944 |
+ if(sdata->showstats) { |
|
945 |
+ hal_lcd_clear_display(); |
|
946 |
+ oswald_draw_grid(1,1,94,94,100,100); |
|
947 |
+ oswald_draw_bitmap(36, 3, stopwatch_icon_width, stopwatch_icon_height, 1, stopwatch_icon_bits); |
|
948 |
+ /* laps */ |
|
949 |
+ num2str(sdata->laps,lapbuf,3,3); |
|
950 |
+ oswald_writestr_font58_scaled(3,3,lapbuf,&w,1,0,2,2); |
|
951 |
+ /* stats */ |
|
952 |
+ for(i=0;i<3;i++) { |
|
953 |
+ y=20+i*24; |
|
954 |
+ hint=((i==0)?"Average":(i==1)?"Min":"Max"); |
|
955 |
+ oswald_writestr_font58(4,y+3,hint,&w,1,0); |
|
956 |
+ timerecord2str(i==0?&(sdata->avg):i==1?&(sdata->min):&(sdata->max),timebuf,csecbuf); |
|
957 |
+ x=8+((timebuf[0]==' ')?oswald_getwidth_font58_scaled("0",2,3):0); |
|
958 |
+ oswald_writestr_font58_scaled(x,y+12,timebuf+((timebuf[0]==' ')?1:0),&w,1,0,2,2); |
|
959 |
+ oswald_writestr_font58_scaled(x+w+1,y+12+6,csecbuf,&w,1,0,2,1); |
|
960 |
+ } |
|
961 |
+ hal_lcd_update_display(); |
|
962 |
+ return; |
|
963 |
+ } |
|
902 | 964 |
hal_lcd_clear_display(); |
903 | 965 |
|
904 |
- oswald_draw_bitmap(36, 0, stopwatch_icon_width, stopwatch_icon_height, 1, stopwatch_icon_bits); |
|
966 |
+ oswald_draw_bitmap(36, 3, stopwatch_icon_width, stopwatch_icon_height, 1, stopwatch_icon_bits); |
|
905 | 967 |
/* Current menu option */ |
906 | 968 |
oswald_draw_rect(0,95-12,95,95,1); |
907 | 969 |
hint=(sdata->item==stopw_startstop)?"Start-Stop": |
... | ... |
@@ -913,14 +975,13 @@ static void draw_stop_watch_screen(stopwatch_data_t *sdata) |
913 | 975 |
|
914 | 976 |
/* Lap number */ |
915 | 977 |
num2str(sdata->laps,lapbuf,3,3); |
916 |
- oswald_writestr_font58_scaled(0,0,lapbuf,&w,1,0,2,2); |
|
978 |
+ oswald_writestr_font58_scaled(3,3,lapbuf,&w,1,0,2,2); |
|
917 | 979 |
|
918 | 980 |
/* Split diff */ |
919 |
- mymemcpy(timebuf," 0:00:00",9); |
|
920 |
- mymemcpy(csecbuf,"00",3); |
|
981 |
+ timerecord2str(&(sdata->lastlap),timebuf,csecbuf); |
|
921 | 982 |
x=8+((timebuf[0]==' ')?oswald_getwidth_font58_scaled("0",2,3):0); |
922 | 983 |
oswald_writestr_font58_scaled(x,28,timebuf+((timebuf[0]==' ')?1:0),&w,1,0,2,2); |
923 |
- oswald_writestr_font58_scaled(x+w+1,35,csecbuf,&w,1,0,2,1); |
|
984 |
+ oswald_writestr_font58_scaled(x+w+1,34,csecbuf,&w,1,0,2,1); |
|
924 | 985 |
|
925 | 986 |
|
926 | 987 |
/* Split */ |
... | ... |
@@ -932,38 +993,29 @@ static void draw_stop_watch_screen(stopwatch_data_t *sdata) |
932 | 993 |
} |
933 | 994 |
x=8+((timebuf[0]==' ')?oswald_getwidth_font58_scaled("0",2,3):0); |
934 | 995 |
oswald_writestr_font58_scaled(x,42,timebuf+((timebuf[0]==' ')?1:0),&w,1,0,2,2); |
935 |
- oswald_writestr_font58_scaled(x+w+1,49,csecbuf,&w,1,0,2,1); |
|
936 |
-#warning TODO DIFF |
|
996 |
+ oswald_writestr_font58_scaled(x+w+1,48,csecbuf,&w,1,0,2,1); |
|
937 | 997 |
|
938 | 998 |
/* main display */ |
939 | 999 |
timerecord2str(&(sdata->current),timebuf,csecbuf); |
940 | 1000 |
x=8+((timebuf[0]==' ')?oswald_getwidth_font58_scaled("0",2,3):0); |
941 | 1001 |
oswald_writestr_font58_scaled(x,61,timebuf+((timebuf[0]==' ')?1:0),&w,1,0,2,3); |
942 |
- oswald_writestr_font58_scaled(x+w+1,67,csecbuf,&w,1,0,2,2); |
|
1002 |
+ x+=w; |
|
1003 |
+ oswald_writestr_font58_scaled(x+1,67,csecbuf,&w,1,0,2,2); |
|
1004 |
+ if(sdata->running) |
|
1005 |
+ oswald_draw_rect(x+10,67,x+17,78,0); |
|
943 | 1006 |
|
944 |
-/* |
|
945 |
- gRow += 3 + oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (sdata->hr % 10)+'0'); |
|
946 |
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (sdata->min / 10)+'0'); |
|
947 |
- gRow += 3 + oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (sdata->min % 10)+'0'); |
|
948 |
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (sdata->sec / 10)+'0'); |
|
949 |
- gRow += 3 + oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (sdata->sec % 10)+'0'); |
|
950 |
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->csec / 10)+'0'); |
|
951 |
- |
|
952 |
- gRow = 6; |
|
953 |
- gColumn = 61; |
|
954 |
- gRow += 13 + oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->lapse_hr % 10)+'0'); |
|
955 |
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->lapse_min / 10)+'0'); |
|
956 |
- gRow += 13 + oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->lapse_min % 10)+'0'); |
|
957 |
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->lapse_sec / 10)+'0'); |
|
958 |
- gRow += 3 + oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->lapse_sec % 10)+'0'); |
|
959 |
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->lapse_csec / 10)+'0'); |
|
960 |
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->lapse_csec % 10)+'0'); |
|
961 |
-*/ |
|
962 | 1007 |
hal_lcd_update_display(); |
963 | 1008 |
} |
964 | 1009 |
|
965 | 1010 |
event_ret_t handle_stop_watch_buttons(watch_button button) |
966 | 1011 |
{ |
1012 |
+ if(stopwatch_screen.showstats) { |
|
1013 |
+ if(button==BUTTON_F) |
|
1014 |
+ stopwatch_screen.showstats=0; |
|
1015 |
+ else if(button==BUTTON_D) |
|
1016 |
+ return(EVENT_RET_UNHANDLED); |
|
1017 |
+ return(EVENT_RET_HANDLED); |
|
1018 |
+ } |
|
967 | 1019 |
switch (button) { |
968 | 1020 |
case BUTTON_B: // start/stop |
969 | 1021 |
if(stopwatch_screen.item==stopw_startstop) { |
... | ... |
@@ -985,35 +1037,41 @@ event_ret_t handle_stop_watch_buttons(watch_button button) |
985 | 1037 |
} |
986 | 1038 |
stopwatch_screen.laps++; |
987 | 1039 |
mymemcpy(stopwatch_screen.lapsdata+l,&(stopwatch_screen.current),sizeof(timerecord)); |
1040 |
+ /* update statistics */ |
|
1041 |
+ if(l>0) |
|
1042 |
+ timerecord_diff(stopwatch_screen.lapsdata+l,stopwatch_screen.lapsdata+l-1,&(stopwatch_screen.lastlap)); |
|
1043 |
+ else |
|
1044 |
+ mymemcpy(&(stopwatch_screen.lastlap),stopwatch_screen.lapsdata+l,sizeof(timerecord)); |
|
1045 |
+ timerecord_div(stopwatch_screen.lapsdata+l,stopwatch_screen.laps,&(stopwatch_screen.avg)); |
|
1046 |
+ if(stopwatch_screen.laps==1 || timerecord_cmp(&(stopwatch_screen.lastlap),&(stopwatch_screen.min))<0) |
|
1047 |
+ mymemcpy(&(stopwatch_screen.min),&(stopwatch_screen.lastlap),sizeof(timerecord)); |
|
1048 |
+ if(stopwatch_screen.laps==1 || timerecord_cmp(&(stopwatch_screen.lastlap),&(stopwatch_screen.max))>0) |
|
1049 |
+ mymemcpy(&(stopwatch_screen.max),&(stopwatch_screen.lastlap),sizeof(timerecord)); |
|
988 | 1050 |
} else { |
989 | 1051 |
hal_enable_centisecond_timer(); |
990 | 1052 |
stopwatch_screen.running = TRUE; |
991 | 1053 |
} |
992 |
-#warning TODO: statistics |
|
993 | 1054 |
} else if(stopwatch_screen.item==stopw_reset) { |
994 |
- stopwatch_screen.current.hr = 0; |
|
995 |
- stopwatch_screen.current.min = 0; |
|
996 |
- stopwatch_screen.current.sec = 0; |
|
997 |
- stopwatch_screen.current.csec = 0; |
|
998 |
- stopwatch_screen.laps=0; |
|
1055 |
+ if(stopwatch_screen.running) |
|
1056 |
+ hal_disable_centisecond_timer(); |
|
1057 |
+ mymemset(&(stopwatch_screen),0,sizeof(stopwatch_screen)); |
|
999 | 1058 |
} else { |
1000 | 1059 |
return EVENT_RET_UNHANDLED; |
1001 | 1060 |
} |
1002 |
- draw_stop_watch_screen(&stopwatch_screen); |
|
1003 | 1061 |
return EVENT_RET_HANDLED; |
1004 | 1062 |
break; |
1005 | 1063 |
case BUTTON_A: |
1006 | 1064 |
stopwatch_screen.item+=stopw_end-1; |
1007 | 1065 |
stopwatch_screen.item%=stopw_end; |
1008 |
- draw_stop_watch_screen(&stopwatch_screen); |
|
1009 | 1066 |
return EVENT_RET_HANDLED; |
1010 | 1067 |
break; |
1011 | 1068 |
case BUTTON_C: |
1012 | 1069 |
stopwatch_screen.item++; |
1013 | 1070 |
stopwatch_screen.item%=stopw_end; |
1014 |
- draw_stop_watch_screen(&stopwatch_screen); |
|
1015 | 1071 |
return EVENT_RET_HANDLED; |
1016 | 1072 |
break; |
1073 |
+ case BUTTON_F: |
|
1074 |
+ stopwatch_screen.showstats=1-stopwatch_screen.showstats; |
|
1017 | 1075 |
default: |
1018 | 1076 |
return EVENT_RET_UNHANDLED; |
1019 | 1077 |
break; |
... | ... |
@@ -1023,11 +1081,13 @@ event_ret_t handle_stop_watch_buttons(watch_button button) |
1023 | 1081 |
|
1024 | 1082 |
event_ret_t stop_watch_handle_events(uint16_t event, void *data) |
1025 | 1083 |
{ |
1084 |
+ event_ret_t ret; |
|
1026 | 1085 |
switch (event) { |
1027 | 1086 |
case EVENT_USER_BUTTONS: |
1028 | 1087 |
dbg_out("button event %d\n", *(int *)data); |
1088 |
+ ret=handle_stop_watch_buttons(*(watch_button *)data); |
|
1029 | 1089 |
draw_stop_watch_screen(&stopwatch_screen); |
1030 |
- return handle_stop_watch_buttons(*(watch_button *)data); |
|
1090 |
+ return(ret); |
|
1031 | 1091 |
break; |
1032 | 1092 |
case EVENT_SCREEN_VISIBLE: |
1033 | 1093 |
draw_stop_watch_screen(&stopwatch_screen); |
... | ... |
@@ -1055,7 +1115,7 @@ event_ret_t stop_watch_handle_events(uint16_t event, void *data) |
1055 | 1115 |
if (stopwatch_screen.current.hr > 59) { |
1056 | 1116 |
stopwatch_screen.current.hr = 0; |
1057 | 1117 |
}; |
1058 |
- if (stopwatch_screen.current.csec % 10 == 0) |
|
1118 |
+ if ((stopwatch_screen.current.csec % 10)==0 || stopwatch_screen.running!=TRUE) |
|
1059 | 1119 |
draw_stop_watch_screen(&stopwatch_screen); |
1060 | 1120 |
//update_stop_watch_screen(&stopwatch_screen); |
1061 | 1121 |
return EVENT_RET_HANDLED; |
... | ... |
@@ -1073,10 +1133,12 @@ event_ret_t stop_watch_handle_events(uint16_t event, void *data) |
1073 | 1133 |
*/ |
1074 | 1134 |
void draw_alarm_screen(void) |
1075 | 1135 |
{ |
1136 |
+ static char txt[]={"Alarm"}; |
|
1137 |
+ int w; |
|
1076 | 1138 |
hal_lcd_clear_display(); |
1077 |
- |
|
1078 | 1139 |
oswald_draw_bitmap(36, 20, alarm_icon_width, alarm_icon_height, 1, alarm_icon_bits); |
1079 |
- |
|
1140 |
+ w=oswald_getwidth_font58_scaled(txt,1,2); |
|
1141 |
+ oswald_writestr_font58_scaled((96-1-w)/2+1,49,txt,&w,1,0,1,2); |
|
1080 | 1142 |
hal_lcd_update_display(); |
1081 | 1143 |
} |
1082 | 1144 |
|
... | ... |
@@ -1136,50 +1198,45 @@ void draw_bluetooth_screen(bluetooth_data_t *sdata) |
1136 | 1198 |
|
1137 | 1199 |
hal_lcd_clear_display(); |
1138 | 1200 |
|
1139 |
- oswald_draw_bitmap(36, 0, bluetooth_icon_width, bluetooth_icon_height, 1, bluetooth_icon_bits); |
|
1201 |
+ oswald_draw_bitmap(36, 3, bluetooth_icon_width, bluetooth_icon_height, 1, bluetooth_icon_bits); |
|
1140 | 1202 |
|
1141 |
- if (sdata->set_mode) { |
|
1142 |
- oswald_draw_bitmap(81, 6, upbutton_icon_width, upbutton_icon_height, 1, upbutton_icon_bits); |
|
1143 |
- oswald_draw_bitmap(81, 38, downbutton_icon_width, downbutton_icon_height, 1, downbutton_icon_bits); |
|
1144 |
- oswald_draw_bitmap(81, 70, rightbutton_icon_width, rightbutton_icon_height, 1, rightbutton_icon_bits); |
|
1145 |
- } else { |
|
1146 |
- oswald_draw_bitmap(81, 70, enterbutton_icon_width, enterbutton_icon_height, 1, enterbutton_icon_bits); |
|
1147 |
- } |
|
1203 |
+ if (sdata->set_mode) |
|
1204 |
+ oswald_draw_grid(1,1,94,94,100,100); |
|
1148 | 1205 |
|
1149 |
- oswald_write_string(1, 30, FONT_DROID8x12, FALSE, "Enable:"); |
|
1150 |
- if ((sdata->pos == 0 && sdata->on) || sdata->pos != 0) { |
|
1151 |
- if (bluetooth_screen.bt_en) |
|
1152 |
- oswald_draw_bitmap(53, 33, checked_icon_width, checked_icon_height, 1, checked_icon_bits); |
|
1153 |
- else |
|
1154 |
- oswald_draw_bitmap(53, 33, unchecked_icon_width, unchecked_icon_height, 1, unchecked_icon_bits); |
|
1155 |
- } |
|
1156 |
- oswald_write_string(1, 40, FONT_DROID8x12, FALSE, "State:"); |
|
1206 |
+ oswald_write_string(25, 39, FONT_DROID8x12, FALSE, "State"); |
|
1157 | 1207 |
switch (hal_bluetooth_get_state()) { |
1158 | 1208 |
case BLUETOOTH_OFF: |
1159 |
- oswald_write_string(53, 40, FONT_DROID8x12, FALSE, "off"); |
|
1209 |
+ oswald_write_string(53, 39, FONT_DROID8x12, FALSE, "off"); |
|
1160 | 1210 |
break; |
1161 | 1211 |
case BLUETOOTH_ON: |
1162 |
- oswald_write_string(53, 40, FONT_DROID8x12, FALSE, "on"); |
|
1212 |
+ oswald_write_string(53, 39, FONT_DROID8x12, FALSE, "on"); |
|
1163 | 1213 |
break; |
1164 | 1214 |
case BLUETOOTH_CONNECTED: |
1165 |
- oswald_write_string(53, 40, FONT_DROID8x12, FALSE, "conn."); |
|
1215 |
+ oswald_write_string(53, 39, FONT_DROID8x12, FALSE, "conn."); |
|
1166 | 1216 |
break; |
1167 | 1217 |
default: |
1168 | 1218 |
break; |
1169 | 1219 |
}; |
1170 |
- oswald_write_string(1, 50, FONT_DROID8x12, FALSE, "Visible:"); |
|
1220 |
+ oswald_write_string(16, 54, FONT_DROID8x12, FALSE, "Enabled"); |
|
1221 |
+ if ((sdata->pos == 0 && sdata->on) || sdata->pos != 0) { |
|
1222 |
+ if (bluetooth_screen.bt_en) |
|
1223 |
+ oswald_draw_bitmap(53, 53, checked_icon_width, checked_icon_height, 1, checked_icon_bits); |
|
1224 |
+ else |
|
1225 |
+ oswald_draw_bitmap(53, 53, unchecked_icon_width, unchecked_icon_height, 1, unchecked_icon_bits); |
|
1226 |
+ } |
|
1227 |
+ oswald_write_string(18, 69, FONT_DROID8x12, FALSE, "Visible"); |
|
1171 | 1228 |
if ((sdata->pos == 1 && sdata->on) || sdata->pos != 1) { |
1172 | 1229 |
// oswald_write_character(53, 50, FONT_DROID8x12, hal_bluetooth_get_visible() ? 'x' : '_'); |
1173 | 1230 |
if (hal_bluetooth_get_visible()) |
1174 |
- oswald_draw_bitmap(53, 53, checked_icon_width, checked_icon_height, 1, checked_icon_bits); |
|
1231 |
+ oswald_draw_bitmap(53, 68, checked_icon_width, checked_icon_height, 1, checked_icon_bits); |
|
1175 | 1232 |
else |
1176 |
- oswald_draw_bitmap(53, 53, unchecked_icon_width, unchecked_icon_height, 1, unchecked_icon_bits); |
|
1233 |
+ oswald_draw_bitmap(53, 68, unchecked_icon_width, unchecked_icon_height, 1, unchecked_icon_bits); |
|
1177 | 1234 |
} |
1178 | 1235 |
|
1179 | 1236 |
if (hal_bluetooth_get_state() >= BLUETOOTH_ON) { |
1180 | 1237 |
int i,off,c; |
1181 | 1238 |
bd_addr = hal_bluetooth_get_local_bdaddr(); |
1182 |
- for(i=5,off=0;i>=0;i++) { |
|
1239 |
+ for(i=5,off=0;i>=0;i--) { |
|
1183 | 1240 |
if(i!=5) |
1184 | 1241 |
bstr[off++]=':'; |
1185 | 1242 |
c=(bd_addr[i]>>4)&0xf; |
... | ... |
@@ -1188,8 +1245,7 @@ void draw_bluetooth_screen(bluetooth_data_t *sdata) |
1188 | 1245 |
bstr[off++]=((c<10)?(c+'0'):(c+'a'-10)); |
1189 | 1246 |
} |
1190 | 1247 |
bstr[off++]='\0'; |
1191 |
- oswald_write_string(2, 85, FONT_5x7, FALSE, bstr); |
|
1192 |
- } else { |
|
1248 |
+ oswald_write_string(11, 85, FONT_5x7, FALSE, bstr); |
|
1193 | 1249 |
} |
1194 | 1250 |
|
1195 | 1251 |
hal_lcd_update_display(); |
... | ... |
@@ -1223,15 +1279,17 @@ event_ret_t handle_bluetooth_buttons(watch_button button, bluetooth_data_t *sdat |
1223 | 1279 |
{ |
1224 | 1280 |
if (bluetooth_screen.set_mode) { |
1225 | 1281 |
switch (button) { |
1226 |
- case BUTTON_A: |
|
1282 |
+ case BUTTON_B: |
|
1227 | 1283 |
bluetooth_handle_updown(sdata->pos, 1); |
1228 | 1284 |
break; |
1229 |
- case BUTTON_B: |
|
1285 |
+ case BUTTON_E: |
|
1230 | 1286 |
bluetooth_handle_updown(sdata->pos, -1); |
1231 | 1287 |
break; |
1288 |
+ case BUTTON_A: |
|
1289 |
+ sdata->pos=1-sdata->pos; |
|
1290 |
+ break; |
|
1232 | 1291 |
case BUTTON_C: |
1233 |
- sdata->pos++; |
|
1234 |
- sdata->pos %= 2; |
|
1292 |
+ sdata->pos=1-sdata->pos; |
|
1235 | 1293 |
break; |
1236 | 1294 |
case BUTTON_F: |
1237 | 1295 |
bluetooth_screen.set_mode = FALSE; |
... | ... |
@@ -7,6 +7,8 @@ |
7 | 7 |
#include "oswald_hal.h" |
8 | 8 |
|
9 | 9 |
#include "dayslib.h" |
10 |
+#include "mymem.h" |
|
11 |
+#include "strutils.h" |
|
10 | 12 |
|
11 | 13 |
#include "oswald_screens.h" |
12 | 14 |
|
... | ... |
@@ -234,9 +236,7 @@ void draw_main_menu_screen(main_menu_data_t *sdata) |
234 | 236 |
if(i==sdata->pos) |
235 | 237 |
oswald_draw_rect(0,y-5,95,y+32-5,1); |
236 | 238 |
oswald_draw_bitmap(x,y,menu_items[i].width,menu_items[i].height,(i==sdata->pos)?0:1,menu_items[i].bits); |
237 |
- for(t=menu_items[i].name;*t!='\0';t++,x+=w+1) { |
|
238 |
- oswald_draw_font58_scaled(x+30, y+6,*t,&w,(i==sdata->pos)?0:1,(i==sdata->pos)?1:0,1,2); |
|
239 |
- } |
|
239 |
+ oswald_writestr_font58_scaled(x+30, y+6,menu_items[i].name,&w,(i==sdata->pos)?0:1,(i==sdata->pos)?1:0,1,2); |
|
240 | 240 |
} |
241 | 241 |
|
242 | 242 |
|
... | ... |
@@ -855,33 +855,93 @@ event_ret_t test_menu_handle_events(uint16_t event, void *data) |
855 | 855 |
/* |
856 | 856 |
* Stop Watch |
857 | 857 |
*/ |
858 |
+typedef enum estopw_item { |
|
859 |
+ stopw_startstop, |
|
860 |
+ stopw_split, |
|
861 |
+ stopw_reset, |
|
862 |
+ stopw_end |
|
863 |
+} stopw_item; |
|
858 | 864 |
typedef struct { |
859 | 865 |
uint8_t hr; |
860 | 866 |
uint8_t min; |
861 | 867 |
uint8_t sec; |
862 | 868 |
uint8_t csec; |
863 |
- uint8_t lapse_hr; |
|
864 |
- uint8_t lapse_min; |
|
865 |
- uint8_t lapse_sec; |
|
866 |
- uint8_t lapse_csec; |
|
869 |
+} timerecord; |
|
870 |
+#define MAX_LAPS 2 |
|
871 |
+typedef struct { |
|
872 |
+ timerecord current; |
|
873 |
+ int laps; |
|
874 |
+ timerecord lapsdata[MAX_LAPS]; |
|
867 | 875 |
boolean running; |
876 |
+ stopw_item item; |
|
868 | 877 |
} stopwatch_data_t; |
869 |
-static stopwatch_data_t stopwatch_screen = { 0, 0, 0, 0, 0, 0, 0, 0, FALSE }; |
|
878 |
+static stopwatch_data_t stopwatch_screen = { {0, 0, 0, 0},0,{{0, 0, 0, 0}} , FALSE,0}; |
|
870 | 879 |
|
880 |
+static void timerecord2str(timerecord *tr, char *timebuf /* sizeof(timebuf)>=9 */, char *csecbuf /*sizeof(csecbuf)>=3*/) |
|
881 |
+{ |
|
882 |
+ num2str(tr->hr,timebuf,2,2); |
|
883 |
+ if(tr->hr<10) |
|
884 |
+ timebuf[0]=' '; |
|
885 |
+ timebuf[2]=':'; |
|
886 |
+ num2str(tr->min,timebuf+3,2,2); |
|
887 |
+ timebuf[5]=':'; |
|
888 |
+ num2str(tr->sec,timebuf+6,2,2); |
|
889 |
+ |
|
890 |
+ num2str(tr->csec,csecbuf,2,2); |
|
891 |
+} |
|
871 | 892 |
|
872 | 893 |
static void draw_stop_watch_screen(stopwatch_data_t *sdata) |
873 | 894 |
{ |
874 |
- int gRow = 1; |
|
875 |
- int gColumn = 35; |
|
895 |
+ int w; |
|
896 |
+ char *hint; |
|
897 |
+ int x; |
|
898 |
+ char lapbuf[4]; |
|
899 |
+ char timebuf[9]; |
|
900 |
+ char csecbuf[3]; |
|
876 | 901 |
|
877 | 902 |
hal_lcd_clear_display(); |
878 | 903 |
|
879 | 904 |
oswald_draw_bitmap(36, 0, stopwatch_icon_width, stopwatch_icon_height, 1, stopwatch_icon_bits); |
880 |
- |
|
881 |
- oswald_draw_bitmap(81, 6, startstopbutton_icon_width, startstopbutton_icon_height, 1, startstopbutton_icon_bits); |
|
882 |
- oswald_draw_bitmap(81, 38, lapsebutton_icon_width, lapsebutton_icon_height, 1, lapsebutton_icon_bits); |
|
883 |
- oswald_draw_bitmap(81, 70, enterbutton_icon_width, enterbutton_icon_height, 1, enterbutton_icon_bits); |
|
884 |
- |
|
905 |
+ /* Current menu option */ |
|
906 |
+ oswald_draw_rect(0,95-12,95,95,1); |
|
907 |
+ hint=(sdata->item==stopw_startstop)?"Start-Stop": |
|
908 |
+ (sdata->item==stopw_split)?"Start-Split": |
|
909 |
+ (sdata->item==stopw_reset)?"Reset": |
|
910 |
+ "Unknown"; |
|
911 |
+ w=oswald_getwidth_font58_scaled(hint,2,1); |
|
912 |
+ oswald_writestr_font58_scaled((96-w)/2,95-8,hint,&w,0,1,2,1); |
|
913 |
+ |
|
914 |
+ /* Lap number */ |
|
915 |
+ num2str(sdata->laps,lapbuf,3,3); |
|
916 |
+ oswald_writestr_font58_scaled(0,0,lapbuf,&w,1,0,2,2); |
|
917 |
+ |
|
918 |
+ /* Split diff */ |
|
919 |
+ mymemcpy(timebuf," 0:00:00",9); |
|
920 |
+ mymemcpy(csecbuf,"00",3); |
|
921 |
+ x=8+((timebuf[0]==' ')?oswald_getwidth_font58_scaled("0",2,3):0); |
|
922 |
+ oswald_writestr_font58_scaled(x,28,timebuf+((timebuf[0]==' ')?1:0),&w,1,0,2,2); |
|
923 |
+ oswald_writestr_font58_scaled(x+w+1,35,csecbuf,&w,1,0,2,1); |
|
924 |
+ |
|
925 |
+ |
|
926 |
+ /* Split */ |
|
927 |
+ if(sdata->laps>0) |
|
928 |
+ timerecord2str(sdata->lapsdata+((sdata->laps<MAX_LAPS)?sdata->laps-1:MAX_LAPS-1),timebuf,csecbuf); |
|
929 |
+ else { |
|
930 |
+ mymemcpy(timebuf," 0:00:00",9); |
|
931 |
+ mymemcpy(csecbuf,"00",3); |
|
932 |
+ } |
|
933 |
+ x=8+((timebuf[0]==' ')?oswald_getwidth_font58_scaled("0",2,3):0); |
|
934 |
+ oswald_writestr_font58_scaled(x,42,timebuf+((timebuf[0]==' ')?1:0),&w,1,0,2,2); |
|
935 |
+ oswald_writestr_font58_scaled(x+w+1,49,csecbuf,&w,1,0,2,1); |
|
936 |
+#warning TODO DIFF |
|
937 |
+ |
|
938 |
+ /* main display */ |
|
939 |
+ timerecord2str(&(sdata->current),timebuf,csecbuf); |
|
940 |
+ x=8+((timebuf[0]==' ')?oswald_getwidth_font58_scaled("0",2,3):0); |
|
941 |
+ oswald_writestr_font58_scaled(x,61,timebuf+((timebuf[0]==' ')?1:0),&w,1,0,2,3); |
|
942 |
+ oswald_writestr_font58_scaled(x+w+1,67,csecbuf,&w,1,0,2,2); |
|
943 |
+ |
|
944 |
+/* |
|
885 | 945 |
gRow += 3 + oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (sdata->hr % 10)+'0'); |
886 | 946 |
gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (sdata->min / 10)+'0'); |
887 | 947 |
gRow += 3 + oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (sdata->min % 10)+'0'); |
... | ... |
@@ -898,39 +958,60 @@ static void draw_stop_watch_screen(stopwatch_data_t *sdata) |
898 | 958 |
gRow += 3 + oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->lapse_sec % 10)+'0'); |
899 | 959 |
gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->lapse_csec / 10)+'0'); |
900 | 960 |
gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->lapse_csec % 10)+'0'); |
901 |
- |
|
961 |
+*/ |
|
902 | 962 |
hal_lcd_update_display(); |
903 | 963 |
} |
904 | 964 |
|
905 | 965 |
event_ret_t handle_stop_watch_buttons(watch_button button) |
906 | 966 |
{ |
907 | 967 |
switch (button) { |
908 |
- case BUTTON_A: // start/stop |
|
909 |
- if (stopwatch_screen.running) { |
|
910 |
- hal_disable_centisecond_timer(); |
|
911 |
- stopwatch_screen.running = FALSE; |
|
968 |
+ case BUTTON_B: // start/stop |
|
969 |
+ if(stopwatch_screen.item==stopw_startstop) { |
|
970 |
+ if (stopwatch_screen.running) { |
|
971 |
+ hal_disable_centisecond_timer(); |
|
972 |
+ stopwatch_screen.running = FALSE; |
|
973 |
+ } else { |
|
974 |
+ hal_enable_centisecond_timer(); |
|
975 |
+ stopwatch_screen.running = TRUE; |
|
976 |
+ } |
|
977 |
+ } else if(stopwatch_screen.item==stopw_split) { |
|
978 |
+ if (stopwatch_screen.running) { |
|
979 |
+ int l; |
|
980 |
+ if(stopwatch_screen.laps>=MAX_LAPS) { |
|
981 |
+ mymemmove(stopwatch_screen.lapsdata,stopwatch_screen.lapsdata+1,(MAX_LAPS-1)*sizeof(timerecord)); |
|
982 |
+ l=MAX_LAPS-1; |
|
983 |
+ } else { |
|
984 |
+ l=stopwatch_screen.laps; |
|
985 |
+ } |
|
986 |
+ stopwatch_screen.laps++; |
|
987 |
+ mymemcpy(stopwatch_screen.lapsdata+l,&(stopwatch_screen.current),sizeof(timerecord)); |
|
988 |
+ } else { |
|
989 |
+ hal_enable_centisecond_timer(); |
|
990 |
+ stopwatch_screen.running = TRUE; |
|
991 |
+ } |
|
992 |
+#warning TODO: statistics |
|
993 |
+ } else if(stopwatch_screen.item==stopw_reset) { |
|
994 |
+ stopwatch_screen.current.hr = 0; |
|
995 |
+ stopwatch_screen.current.min = 0; |
|
996 |
+ stopwatch_screen.current.sec = 0; |
|
997 |
+ stopwatch_screen.current.csec = 0; |
|
998 |
+ stopwatch_screen.laps=0; |
|
912 | 999 |
} else { |
913 |
- hal_enable_centisecond_timer(); |
|
914 |
- stopwatch_screen.running = TRUE; |
|
1000 |
+ return EVENT_RET_UNHANDLED; |
|
915 | 1001 |
} |
1002 |
+ draw_stop_watch_screen(&stopwatch_screen); |
|
916 | 1003 |
return EVENT_RET_HANDLED; |
917 | 1004 |
break; |
918 |
- case BUTTON_B: // lapse |
|
919 |
- stopwatch_screen.lapse_hr = stopwatch_screen.hr; |
|
920 |
- stopwatch_screen.lapse_min = stopwatch_screen.min; |
|
921 |
- stopwatch_screen.lapse_sec = stopwatch_screen.sec; |
|
922 |
- stopwatch_screen.lapse_csec = stopwatch_screen.csec; |
|
1005 |
+ case BUTTON_A: |
|
1006 |
+ stopwatch_screen.item+=stopw_end-1; |
|
1007 |
+ stopwatch_screen.item%=stopw_end; |
|
1008 |
+ draw_stop_watch_screen(&stopwatch_screen); |
|
923 | 1009 |
return EVENT_RET_HANDLED; |
924 | 1010 |
break; |
925 |
- case BUTTON_F: // reset |
|
926 |
- stopwatch_screen.hr = 0; |
|
927 |
- stopwatch_screen.min = 0; |
|
928 |
- stopwatch_screen.sec = 0; |
|
929 |
- stopwatch_screen.csec = 0; |
|
930 |
- stopwatch_screen.lapse_hr = 0; |
|
931 |
- stopwatch_screen.lapse_min = 0; |
|
932 |
- stopwatch_screen.lapse_sec = 0; |
|
933 |
- stopwatch_screen.lapse_csec = 0; |
|
1011 |
+ case BUTTON_C: |
|
1012 |
+ stopwatch_screen.item++; |
|
1013 |
+ stopwatch_screen.item%=stopw_end; |
|
1014 |
+ draw_stop_watch_screen(&stopwatch_screen); |
|
934 | 1015 |
return EVENT_RET_HANDLED; |
935 | 1016 |
break; |
936 | 1017 |
default: |
... | ... |
@@ -958,23 +1039,23 @@ event_ret_t stop_watch_handle_events(uint16_t event, void *data) |
958 | 1039 |
return EVENT_RET_HANDLED; |
959 | 1040 |
break; |
960 | 1041 |
case EVENT_CS_TIMER: |
961 |
- stopwatch_screen.csec++; |
|
962 |
- if (stopwatch_screen.csec > 99) { |
|
963 |
- stopwatch_screen.csec = 0; |
|
964 |
- stopwatch_screen.sec++; |
|
1042 |
+ stopwatch_screen.current.csec++; |
|
1043 |
+ if (stopwatch_screen.current.csec > 99) { |
|
1044 |
+ stopwatch_screen.current.csec = 0; |
|
1045 |
+ stopwatch_screen.current.sec++; |
|
965 | 1046 |
}; |
966 |
- if (stopwatch_screen.sec > 59) { |
|
967 |
- stopwatch_screen.sec = 0; |
|
968 |
- stopwatch_screen.min++; |
|
1047 |
+ if (stopwatch_screen.current.sec > 59) { |
|
1048 |
+ stopwatch_screen.current.sec = 0; |
|
1049 |
+ stopwatch_screen.current.min++; |
|
969 | 1050 |
}; |
970 |
- if (stopwatch_screen.min > 59) { |
|
971 |
- stopwatch_screen.min = 0; |
|
972 |
- stopwatch_screen.hr++; |
|
1051 |
+ if (stopwatch_screen.current.min > 59) { |
|
1052 |
+ stopwatch_screen.current.min = 0; |
|
1053 |
+ stopwatch_screen.current.hr++; |
|
973 | 1054 |
}; |
974 |
- if (stopwatch_screen.hr > 59) { |
|
975 |
- stopwatch_screen.hr = 0; |
|
1055 |
+ if (stopwatch_screen.current.hr > 59) { |
|
1056 |
+ stopwatch_screen.current.hr = 0; |
|
976 | 1057 |
}; |
977 |
- if (stopwatch_screen.csec % 10 == 0) |
|
1058 |
+ if (stopwatch_screen.current.csec % 10 == 0) |
|
978 | 1059 |
draw_stop_watch_screen(&stopwatch_screen); |
979 | 1060 |
//update_stop_watch_screen(&stopwatch_screen); |
980 | 1061 |
return EVENT_RET_HANDLED; |
... | ... |
@@ -1096,8 +1177,17 @@ void draw_bluetooth_screen(bluetooth_data_t *sdata) |
1096 | 1177 |
} |
1097 | 1178 |
|
1098 | 1179 |
if (hal_bluetooth_get_state() >= BLUETOOTH_ON) { |
1180 |
+ int i,off,c; |
|
1099 | 1181 |
bd_addr = hal_bluetooth_get_local_bdaddr(); |
1100 |
- snprintf(bstr, 20, "%02x:%02x:%02x:%02x:%02x:%02x", bd_addr[5], bd_addr[4], bd_addr[3], bd_addr[2], bd_addr[1], bd_addr[0]); |
|
1182 |
+ for(i=5,off=0;i>=0;i++) { |
|
1183 |
+ if(i!=5) |
|
1184 |
+ bstr[off++]=':'; |
|
1185 |
+ c=(bd_addr[i]>>4)&0xf; |
|
1186 |
+ bstr[off++]=((c<10)?(c+'0'):(c+'a'-10)); |
|
1187 |
+ c=bd_addr[i]&0xf; |
|
1188 |
+ bstr[off++]=((c<10)?(c+'0'):(c+'a'-10)); |
|
1189 |
+ } |
|
1190 |
+ bstr[off++]='\0'; |
|
1101 | 1191 |
oswald_write_string(2, 85, FONT_5x7, FALSE, bstr); |
1102 | 1192 |
} else { |
1103 | 1193 |
} |
... | ... |
@@ -1212,13 +1302,10 @@ void draw_info_screen(void) |
1212 | 1302 |
|
1213 | 1303 |
oswald_draw_bitmap(36, 0, info_icon_width, info_icon_height, 1, info_icon_bits); |
1214 | 1304 |
|
1215 |
- w=oswald_getwidth_string(FONT_5x8,OsName); |
|
1216 |
- for(x=(96-w-1)/2,ptr=OsName;*ptr!='\0';ptr++) { |
|
1217 |
- oswald_draw_font58_scaled(x,29,*ptr,&w,1,0,1,2); |
|
1218 |
- x+=w+1; |
|
1219 |
- } |
|
1220 |
- w=oswald_getwidth_string(FONT_5x8,OSWALD_VERSION); |
|
1221 |
- oswald_write_string((96-w-1)/2, 44, FONT_5x8, FALSE, OSWALD_VERSION); |
|
1305 |
+ w=oswald_getwidth_font58_scaled(OsName,1,2); |
|
1306 |
+ oswald_writestr_font58_scaled((96-w-1)/2,29,OsName,&w,1,0,1,2); |
|
1307 |
+ w=oswald_getwidth_font58(OSWALD_VERSION); |
|
1308 |
+ oswald_writestr_font58((96-w-1)/2, 44, OSWALD_VERSION, &w, 1, 0); |
|
1222 | 1309 |
oswald_write_string(2, 61, FONT_DROID8x12, FALSE, "HAL"); |
1223 | 1310 |
oswald_write_string(35, 61, FONT_DROID8x12, FALSE, (char *)hal_get_version_string()); |
1224 | 1311 |
oswald_write_string(2, 73, FONT_DROID8x12, FALSE, "Build"); |
... | ... |
@@ -1297,9 +1384,27 @@ message_t Msg[] = { |
1297 | 1384 |
{ MSG_TYPE_END, {0,0,0,0,0}, "Exit" }, |
1298 | 1385 |
}; |
1299 | 1386 |
|
1387 |
+static void msginfo2str(message_t *msginfo,char *dstr, int dstrsize) |
|
1388 |
+{ |
|
1389 |
+ int off=0; |
|
1390 |
+ dstr[off++]=(msginfo->type == MSG_TYPE_NEW) ? '*':' '; |
|
1391 |
+ dstr[off++]=' '; |
|
1392 |
+ off+=num2str(msginfo->td.day,dstr+off,2,2); |
|
1393 |
+ dstr[off++]='.'; |
|
1394 |
+ off+=num2str(msginfo->td.month,dstr+off,2,2); |
|
1395 |
+ dstr[off++]='.'; |
|
1396 |
+ off+=num2str(msginfo->td.year+1900,dstr+off,4,4); |
|
1397 |
+ dstr[off++]=' '; |
|
1398 |
+ off+=num2str(msginfo->td.hour,dstr+off,2,2); |
|
1399 |
+ dstr[off++]=':'; |
|
1400 |
+ off+=num2str(msginfo->td.minute,dstr+off,2,2); |
|
1401 |
+ dstr[off++]='\0'; |
|
1402 |
+} |
|
1403 |
+ |
|
1300 | 1404 |
void draw_message_screen(messages_data_t *sdata) |
1301 | 1405 |
{ |
1302 | 1406 |
char dstr[32]; |
1407 |
+ int off; |
|
1303 | 1408 |
uint8_t strpos, msglen; |
1304 | 1409 |
uint8_t line; |
1305 | 1410 |
|
... | ... |
@@ -1312,7 +1417,12 @@ void draw_message_screen(messages_data_t *sdata) |
1312 | 1417 |
oswald_draw_bitmap(81, 70, enterbutton_icon_width, enterbutton_icon_height, 1, enterbutton_icon_bits); |
1313 | 1418 |
|
1314 | 1419 |
Msg[sdata->offset + sdata->pos].type = MSG_TYPE_READ; |
1315 |
- snprintf(dstr, 19, "#%02d/%02d", sdata->pos + sdata->offset + 1, Msgs); |
|
1420 |
+ off=0; |
|
1421 |
+ dstr[off++]='#'; |
|
1422 |
+ off+=num2str(sdata->pos + sdata->offset + 1,dstr+off,1,sizeof(dstr)-2-off); |
|
1423 |
+ dstr[off++]='/'; |
|
1424 |
+ off+=num2str(Msgs,dstr+off,1,sizeof(dstr)-1-off); |
|
1425 |
+ dstr[off++]='\0'; |
|
1316 | 1426 |
oswald_write_string(30, 0, FONT_5x7, FALSE, dstr); |
1317 | 1427 |
oswald_draw_line(0,7,95,7, 1); |
1318 | 1428 |
|
... | ... |
@@ -1330,7 +1440,7 @@ void draw_message_screen(messages_data_t *sdata) |
1330 | 1440 |
oswald_draw_line(0,87,95,87, 1); |
1331 | 1441 |
|
1332 | 1442 |
if (Msg[sdata->offset + sdata->pos].type != MSG_TYPE_END) { |
1333 |
- snprintf(dstr, 19, "%c %02d.%02d.%04d,%02d:%02d", (Msg[sdata->pos+sdata->offset].type == MSG_TYPE_NEW) ? '*':' ', Msg[sdata->pos+sdata->offset].td.day, Msg[sdata->pos+sdata->offset].td.month, Msg[sdata->pos+sdata->offset].td.year+1900, Msg[sdata->pos+sdata->offset].td.hour, Msg[sdata->pos+sdata->offset].td.minute); |
|
1443 |
+ msginfo2str(Msg+sdata->pos+sdata->offset,dstr,sizeof(dstr)); |
|
1334 | 1444 |
oswald_write_string(2, 89, FONT_5x7, FALSE, dstr); |
1335 | 1445 |
} |
1336 | 1446 |
|
... | ... |
@@ -1383,12 +1493,13 @@ void draw_messages_screen(messages_data_t *sdata) |
1383 | 1493 |
hal_lcd_clear_display(); |
1384 | 1494 |
|
1385 | 1495 |
oswald_draw_bitmap(36, 3, message_icon_width, message_icon_height, 1, message_icon_bits); |
1386 |
- w=oswald_getwidth_string(FONT_5x8,msg); |
|
1496 |
+ w=oswald_getwidth_font58(msg); |
|
1387 | 1497 |
oswald_write_string((96-w-1)/2, 44, FONT_5x8, FALSE, msg); |
1388 | 1498 |
|
1389 | 1499 |
hal_lcd_update_display(); |
1390 | 1500 |
#if 0 |
1391 | 1501 |
char dstr[32]; |
1502 |
+ int off; |
|
1392 | 1503 |
int i; |
1393 | 1504 |
|
1394 | 1505 |
hal_lcd_clear_display(); |
... | ... |
@@ -1400,7 +1511,12 @@ void draw_messages_screen(messages_data_t *sdata) |
1400 | 1511 |
oswald_draw_bitmap(81, 70, enterbutton_icon_width, enterbutton_icon_height, enterbutton_icon_bits); |
1401 | 1512 |
|
1402 | 1513 |
if (Msg[sdata->offset + sdata->pos].type != MSG_TYPE_END) { |
1403 |
- snprintf(dstr, 19, "#%02d/%02d", sdata->pos + sdata->offset + 1, Msgs); |
|
1514 |
+ off=0; |
|
1515 |
+ dstr[off++]='#'; |
|
1516 |
+ off+=num2str(sdata->pos + sdata->offset + 1,dstr+off,2,2); |
|
1517 |
+ dstr[off++]='/'; |
|
1518 |
+ off+=num2str(Msgs,dstr+off,2,2); |
|
1519 |
+ dstr[off++]='\0'; |
|
1404 | 1520 |
oswald_write_string(30, 0, FONT_5x7, FALSE, dstr); |
1405 | 1521 |
} |
1406 | 1522 |
oswald_draw_line(0,7,95,7); |
... | ... |
@@ -1424,7 +1540,7 @@ void draw_messages_screen(messages_data_t *sdata) |
1424 | 1540 |
oswald_draw_line(0,87,95,87); |
1425 | 1541 |
|
1426 | 1542 |
if (Msg[sdata->offset + sdata->pos].type != MSG_TYPE_END) { |
1427 |
- snprintf(dstr, 19, "%c %02d.%02d.%04d,%02d:%02d", (Msg[sdata->pos+sdata->offset].type == MSG_TYPE_NEW) ? '*':' ', Msg[sdata->pos+sdata->offset].td.day, Msg[sdata->pos+sdata->offset].td.month, Msg[sdata->pos+sdata->offset].td.year+1900, Msg[sdata->pos+sdata->offset].td.hour, Msg[sdata->pos+sdata->offset].td.minute); |
|
1543 |
+ msginfo2str(Msg+sdata->pos+sdata->offset,dstr,sizeof(dstr)); |
|
1428 | 1544 |
oswald_write_string(2, 89, FONT_5x7, FALSE, dstr); |
1429 | 1545 |
} |
1430 | 1546 |
|
... | ... |
@@ -996,8 +996,6 @@ void draw_alarm_screen(void) |
996 | 996 |
|
997 | 997 |
oswald_draw_bitmap(36, 20, alarm_icon_width, alarm_icon_height, 1, alarm_icon_bits); |
998 | 998 |
|
999 |
- oswald_draw_bitmap(81, 70, enterbutton_icon_width, enterbutton_icon_height, 1, enterbutton_icon_bits); |
|
1000 |
- |
|
1001 | 999 |
hal_lcd_update_display(); |
1002 | 1000 |
} |
1003 | 1001 |
|
... | ... |
@@ -1207,18 +1205,26 @@ event_ret_t bluetooth_screen_events(uint16_t event, void *data) |
1207 | 1205 |
*/ |
1208 | 1206 |
void draw_info_screen(void) |
1209 | 1207 |
{ |
1208 |
+ static char OsName[]={"Oswald"}; |
|
1209 |
+ char *ptr; |
|
1210 |
+ int w,x; |
|
1210 | 1211 |
hal_lcd_clear_display(); |
1211 | 1212 |
|
1212 | 1213 |
oswald_draw_bitmap(36, 0, info_icon_width, info_icon_height, 1, info_icon_bits); |
1213 | 1214 |
|
1214 |
- oswald_write_string(2, 29, FONT_DROID8x12, FALSE, "Oswald"); |
|
1215 |
- oswald_write_string(35, 29, FONT_DROID8x12, FALSE, OSWALD_VERSION); |
|
1216 |
- oswald_write_string(2, 41, FONT_DROID8x12, FALSE, "HAL"); |
|
1217 |
- oswald_write_string(35, 41, FONT_DROID8x12, FALSE, (char *)hal_get_version_string()); |
|
1218 |
- oswald_write_string(2, 53, FONT_DROID8x12, FALSE, "Build"); |
|
1219 |
- oswald_write_string(35, 53, FONT_DROID8x12, FALSE, (char *)hal_get_buildno_string()); |
|
1220 |
- oswald_write_string(2, 65, FONT_DROID8x12, FALSE, "Radio"); |
|
1221 |
- oswald_write_string(35, 65, FONT_DROID8x12, FALSE, (char *)hal_get_radio_version_string()); |
|
1215 |
+ w=oswald_getwidth_string(FONT_5x8,OsName); |
|
1216 |
+ for(x=(96-w-1)/2,ptr=OsName;*ptr!='\0';ptr++) { |
|
1217 |
+ oswald_draw_font58_scaled(x,29,*ptr,&w,1,0,1,2); |
|
1218 |
+ x+=w+1; |
|
1219 |
+ } |
|
1220 |
+ w=oswald_getwidth_string(FONT_5x8,OSWALD_VERSION); |
|
1221 |
+ oswald_write_string((96-w-1)/2, 44, FONT_5x8, FALSE, OSWALD_VERSION); |
|
1222 |
+ oswald_write_string(2, 61, FONT_DROID8x12, FALSE, "HAL"); |
|
1223 |
+ oswald_write_string(35, 61, FONT_DROID8x12, FALSE, (char *)hal_get_version_string()); |
|
1224 |
+ oswald_write_string(2, 73, FONT_DROID8x12, FALSE, "Build"); |
|
1225 |
+ oswald_write_string(35, 73, FONT_DROID8x12, FALSE, (char *)hal_get_buildno_string()); |
|
1226 |
+ oswald_write_string(2, 85, FONT_DROID8x12, FALSE, "Radio"); |
|
1227 |
+ oswald_write_string(35, 85, FONT_DROID8x12, FALSE, (char *)hal_get_radio_version_string()); |
|
1222 | 1228 |
|
1223 | 1229 |
hal_lcd_update_display(); |
1224 | 1230 |
} |
... | ... |
@@ -1372,6 +1378,15 @@ event_ret_t message_screen_handle_events(uint16_t event, void *data) |
1372 | 1378 |
|
1373 | 1379 |
void draw_messages_screen(messages_data_t *sdata) |
1374 | 1380 |
{ |
1381 |
+ int w; |
|
1382 |
+ static char msg[]={"(disabled)"}; |
|
1383 |
+ hal_lcd_clear_display(); |
|
1384 |
+ |
|
1385 |
+ oswald_draw_bitmap(36, 3, message_icon_width, message_icon_height, 1, message_icon_bits); |
|
1386 |
+ w=oswald_getwidth_string(FONT_5x8,msg); |
|
1387 |
+ oswald_write_string((96-w-1)/2, 44, FONT_5x8, FALSE, msg); |
|
1388 |
+ |
|
1389 |
+ hal_lcd_update_display(); |
|
1375 | 1390 |
#if 0 |
1376 | 1391 |
char dstr[32]; |
1377 | 1392 |
int i; |
... | ... |
@@ -118,6 +118,7 @@ static struct { |
118 | 118 |
void (*screendraw_func)(boolean show_seconds); |
119 | 119 |
} clocks[]={ |
120 | 120 |
{DrawLcdDigitalClock}, |
121 |
+ {DrawLcdDigitalClock2}, |
|
121 | 122 |
{DrawLcdAnaClock}, |
122 | 123 |
{DrawCalendarClock}, |
123 | 124 |
{DrawHelpClock} |
... | ... |
@@ -129,7 +130,7 @@ event_ret_t idle_handle_user_buttons(watch_button button) |
129 | 130 |
switch (button) { |
130 | 131 |
case BUTTON_A: |
131 | 132 |
case BUTTON_C: |
132 |
- idle_screen.curclock+=(button==BUTTON_A)?1:((sizeof(clocks)/sizeof(clocks[0]))-1); |
|
133 |
+ idle_screen.curclock+=(button==BUTTON_C)?1:((sizeof(clocks)/sizeof(clocks[0]))-1); |
|
133 | 134 |
idle_screen.curclock%=(sizeof(clocks)/sizeof(clocks[0])); |
134 | 135 |
idle_screen.screendraw_func = clocks[idle_screen.curclock].screendraw_func; |
135 | 136 |
break; |
... | ... |
@@ -201,63 +202,43 @@ static main_menu_data_t main_menu_screen = { |
201 | 202 |
#define MAIN_MENU_OFFSET_X 6 |
202 | 203 |
#define MAIN_MENU_OFFSET_Y 8 |
203 | 204 |
#define oswald_draw_bitmap_i(a,b,c,d,e,f) if(f) oswald_draw_bitmap(a,b,c,d,1,e) |
205 |
+static struct struct_menu_items { |
|
206 |
+ int screen_num; |
|
207 |
+ char *name; |
|
208 |
+ unsigned char *bits; |
|
209 |
+ int width; |
|
210 |
+ int height; |
|
211 |
+} menu_items[] = { |
|
212 |
+ {ALARM_SETUP_SCREEN,"Alarms",alarm_icon_bits,alarm_icon_width,alarm_icon_height}, |
|
213 |
+ {STOP_WATCH_SCREEN,"Stopwatch",stopwatch_icon_bits,stopwatch_icon_width,stopwatch_icon_height}, |
|
214 |
+ {BLUETOOTH_SCREEN,"Bluetooth",bluetooth_icon_bits,bluetooth_icon_width,bluetooth_icon_height}, |
|
215 |
+ {ACCEL_DISPLAY_SCREEN,"Accel.",acc_icon_bits,acc_icon_width,acc_icon_height}, |
|
216 |
+ {MESSAGES_SCREEN,"Messages",message_icon_bits,message_icon_width,message_icon_height}, |
|
217 |
+ {INFO_SCREEN,"About",info_icon_bits,info_icon_width,info_icon_height}, |
|
218 |
+ {LAST_SCREEN,"Close menu",exit_icon_bits,exit_icon_width,exit_icon_height} |
|
219 |
+}; |
|
204 | 220 |
void draw_main_menu_screen(main_menu_data_t *sdata) |
205 | 221 |
{ |
206 |
- uint8_t pf = sdata->pos - 2; |
|
207 |
- |
|
222 |
+ int x,y; |
|
223 |
+ int i,l; |
|
224 |
+ int w; |
|
225 |
+ char *t; |
|
208 | 226 |
hal_lcd_clear_display(); |
209 |
- |
|
210 |
-// oswald_draw_bitmap(36, 0, main_menu_icon_width, main_menu_icon_height, 1, main_menu_icon_bits); |
|
211 |
- |
|
212 |
- oswald_draw_bitmap(81, 6, rightbutton_icon_width, rightbutton_icon_height, 1, rightbutton_icon_bits); |
|
213 |
- oswald_draw_bitmap(81, 70, leftbutton_icon_width, leftbutton_icon_height, 1, leftbutton_icon_bits); |
|
214 |
- oswald_draw_bitmap(81, 38, enterbutton_icon_width, enterbutton_icon_height, 1, enterbutton_icon_bits); |
|
215 |
- |
|
216 |
- oswald_draw_bitmap_i(MAIN_MENU_OFFSET_X+((0+1) * MAIN_MENU_GRID_SPACING) + (0 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
|
217 |
- MAIN_MENU_OFFSET_Y+(0 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)), |
|
218 |
- alarm_icon_width, alarm_icon_height, alarm_icon_bits, (sdata->pos == ALARM_SETUP_SCREEN)); |
|
219 |
- oswald_draw_bitmap_i(MAIN_MENU_OFFSET_X+((1+1) * MAIN_MENU_GRID_SPACING) + (1 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
|
220 |
- MAIN_MENU_OFFSET_Y+(0 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)), |
|
221 |
- stopwatch_icon_width, stopwatch_icon_height, stopwatch_icon_bits, (sdata->pos == STOP_WATCH_SCREEN)); |
|
222 |
- oswald_draw_bitmap_i(MAIN_MENU_OFFSET_X+((2+1) * MAIN_MENU_GRID_SPACING) + (2 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
|
223 |
- MAIN_MENU_OFFSET_Y+(0 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)), |
|
224 |
- bluetooth_icon_width, bluetooth_icon_height, bluetooth_icon_bits, (sdata->pos == BLUETOOTH_SCREEN)); |
|
225 |
- oswald_draw_bitmap_i(MAIN_MENU_OFFSET_X+((0+1) * MAIN_MENU_GRID_SPACING) + (0 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
|
226 |
- MAIN_MENU_OFFSET_Y+(1 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)), |
|
227 |
- acc_icon_width, acc_icon_height, acc_icon_bits, (sdata->pos == ACCEL_DISPLAY_SCREEN)); |
|
228 |
- oswald_draw_bitmap_i(MAIN_MENU_OFFSET_X+((1+1) * MAIN_MENU_GRID_SPACING) + (1 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
|
229 |
- MAIN_MENU_OFFSET_Y+(1 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)), |
|
230 |
- message_icon_width, message_icon_height, message_icon_bits, (sdata->pos == MESSAGES_SCREEN)); |
|
231 |
- oswald_draw_bitmap_i(MAIN_MENU_OFFSET_X+((2+1) * MAIN_MENU_GRID_SPACING) + (2 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
|
232 |
- MAIN_MENU_OFFSET_Y+(1 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)), |
|
233 |
- info_icon_width, info_icon_height, info_icon_bits, (sdata->pos == INFO_SCREEN)); |
|
234 |
- oswald_draw_bitmap_i(MAIN_MENU_OFFSET_X+((0+1) * MAIN_MENU_GRID_SPACING) + (0 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
|
235 |
- MAIN_MENU_OFFSET_Y+(2 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)), |
|
236 |
- exit_icon_width, exit_icon_height, exit_icon_bits, (sdata->pos == LAST_SCREEN)); |
|
237 |
- |
|
238 |
- // round the corners of the inverted icon a little |
|
239 |
- hal_lcd_set_pixel(MAIN_MENU_OFFSET_X+((pf%MAIN_MENU_GRID_X) * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)) % (MAIN_MENU_GRID_X*(MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
|
240 |
- MAIN_MENU_OFFSET_Y+((pf/MAIN_MENU_GRID_X) * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)) % (MAIN_MENU_GRID_Y*(MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)), FALSE); |
|
241 |
- hal_lcd_set_pixel(MAIN_MENU_OFFSET_X+23+((pf%MAIN_MENU_GRID_X) * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)) % (MAIN_MENU_GRID_X*(MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
|
242 |
- MAIN_MENU_OFFSET_Y+((pf/MAIN_MENU_GRID_X) * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)) % (MAIN_MENU_GRID_Y*(MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)), FALSE); |
|
243 |
- hal_lcd_set_pixel(MAIN_MENU_OFFSET_X+((pf%MAIN_MENU_GRID_X) * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)) % (MAIN_MENU_GRID_X*(MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
|
244 |
- MAIN_MENU_OFFSET_Y+23+((pf/MAIN_MENU_GRID_X) * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)) % (MAIN_MENU_GRID_Y*(MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)), FALSE); |
|
245 |
- hal_lcd_set_pixel(MAIN_MENU_OFFSET_X+23+((pf%MAIN_MENU_GRID_X) * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)) % (MAIN_MENU_GRID_X*(MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
|
246 |
- MAIN_MENU_OFFSET_Y+23+((pf/MAIN_MENU_GRID_X) * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)) % (MAIN_MENU_GRID_Y*(MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)), FALSE); |
|
247 |
- |
|
248 |
- |
|
249 |
- // finally a nice border |
|
250 |
- oswald_draw_line(3, 0, 95, 0, 1); |
|
251 |
- oswald_draw_line(2, 1, 95, 1, 1); |
|
252 |
- oswald_draw_line(1, 2, 95, 2, 1); |
|
253 |
- |
|
254 |
- oswald_draw_line(0, 3, 0, 92, 1); |
|
255 |
- oswald_draw_line(1, 3, 1, 93, 1); |
|
256 |
- oswald_draw_line(2, 3, 2, 94, 1); |
|
257 |
- |
|
258 |
- oswald_draw_line(1, 93, 95, 93, 1); |
|
259 |
- oswald_draw_line(2, 94, 95, 94, 1); |
|
260 |
- oswald_draw_line(3, 95, 95, 95, 1); |
|
227 |
+ i=sdata->pos-2; |
|
228 |
+ i=(i<0)?0:i; |
|
229 |
+ if(i>(sizeof(menu_items)/sizeof(menu_items[0]))-3) { |
|
230 |
+ i=(sizeof(menu_items)/sizeof(menu_items[0]))-3; |
|
231 |
+ } |
|
232 |
+ for(l=i+3,y=5;i<(sizeof(menu_items)/sizeof(menu_items[0])) && i<l;i++,y+=32) { |
|
233 |
+ x=15; |
|
234 |
+ if(i==sdata->pos) |
|
235 |
+ oswald_draw_rect(0,y-5,95,y+32-5,1); |
|
236 |
+ oswald_draw_bitmap(x,y,menu_items[i].width,menu_items[i].height,(i==sdata->pos)?0:1,menu_items[i].bits); |
|
237 |
+ for(t=menu_items[i].name;*t!='\0';t++,x+=w+1) { |
|
238 |
+ oswald_draw_font58_scaled(x+30, y+6,*t,&w,(i==sdata->pos)?0:1,(i==sdata->pos)?1:0,1,2); |
|
239 |
+ } |
|
240 |
+ } |
|
241 |
+ |
|
261 | 242 |
|
262 | 243 |
hal_lcd_update_display(); |
263 | 244 |
} |
... | ... |
@@ -265,23 +246,23 @@ void draw_main_menu_screen(main_menu_data_t *sdata) |
265 | 246 |
event_ret_t handle_main_menu_buttons(watch_button button, main_menu_data_t *sdata) |
266 | 247 |
{ |
267 | 248 |
switch (button) { |
268 |
- case BUTTON_A: |
|
249 |
+ case BUTTON_C: |
|
269 | 250 |
sdata->pos++; |
270 |
- if (sdata->pos > LAST_SCREEN) |
|
271 |
- sdata->pos = 2; |
|
251 |
+ if (sdata->pos >= (sizeof(menu_items)/sizeof(menu_items[0]))) |
|
252 |
+ sdata->pos = 0; |
|
272 | 253 |
draw_main_menu_screen(&main_menu_screen); |
273 | 254 |
return EVENT_RET_HANDLED; |
274 | 255 |
break; |
275 |
- case BUTTON_C: |
|
256 |
+ case BUTTON_A: |
|
276 | 257 |
sdata->pos--; |
277 |
- if (sdata->pos < 2) |
|
278 |
- sdata->pos = LAST_SCREEN; |
|
258 |
+ if (sdata->pos < 0) |
|
259 |
+ sdata->pos = (sizeof(menu_items)/sizeof(menu_items[0]))-1; |
|
279 | 260 |
draw_main_menu_screen(&main_menu_screen); |
280 | 261 |
return EVENT_RET_HANDLED; |
281 | 262 |
break; |
282 | 263 |
case BUTTON_B: |
283 |
- if (sdata->pos < LAST_SCREEN) { |
|
284 |
- OswaldState.screen_id = sdata->pos; |
|
264 |
+ if (menu_items[sdata->pos].screen_num!=LAST_SCREEN) { |
|
265 |
+ OswaldState.screen_id = menu_items[sdata->pos].screen_num; |
|
285 | 266 |
OswaldState.screen = &OswaldScreens[OswaldState.screen_id]; |
286 | 267 |
OswaldState.screen->event_func(EVENT_SCREEN_VISIBLE, NULL); |
287 | 268 |
} else { |
... | ... |
@@ -306,7 +287,7 @@ event_ret_t main_menu_handle_events(uint16_t event, void *data) |
306 | 287 |
switch (event) { |
307 | 288 |
case EVENT_SCREEN_VISIBLE: |
308 | 289 |
main_menu_screen.tmo = 0; |
309 |
- main_menu_screen.pos = 2; |
|
290 |
+ main_menu_screen.pos = 0; |
|
310 | 291 |
draw_main_menu_screen(&main_menu_screen); |
311 | 292 |
return EVENT_RET_HANDLED; |
312 | 293 |
break; |
... | ... |
@@ -427,24 +408,24 @@ void draw_datetime_setup_screen(datetime_setup_data_t *sdata) |
427 | 408 |
int w,sx=2,sy=3; |
428 | 409 |
hal_lcd_clear_display(); |
429 | 410 |
|
430 |
- oswald_draw_grid(0,0,95,95,100,100); |
|
431 |
- oswald_draw_bitmap(36, 2, timesetup_icon_width, timesetup_icon_height, 1, timesetup_icon_bits); |
|
411 |
+ oswald_draw_grid(1,1,94,94,100,100); |
|
412 |
+ oswald_draw_bitmap(36, 4, timesetup_icon_width, timesetup_icon_height, 1, timesetup_icon_bits); |
|
432 | 413 |
|
433 | 414 |
if ((sdata->pos == 0 && sdata->on) || sdata->pos != 0) { |
434 | 415 |
if(OswaldClk.hour>=10) |
435 |
- oswald_draw_font58_scaled(12, 32, (OswaldClk.hour / 10)+'0',&w,1,0,sx,sy); |
|
436 |
- oswald_draw_font58_scaled(25, 32, (OswaldClk.hour % 10)+'0',&w,1,0,sx,sy); |
|
416 |
+ oswald_draw_font58_scaled(12, 34, (OswaldClk.hour / 10)+'0',&w,1,0,sx,sy); |
|
417 |
+ oswald_draw_font58_scaled(25, 34, (OswaldClk.hour % 10)+'0',&w,1,0,sx,sy); |
|
437 | 418 |
} |
438 |
- oswald_draw_font58_scaled(37, 36, ':',&w,1,0,1,2); |
|
419 |
+ oswald_draw_font58_scaled(37, 38, ':',&w,1,0,1,2); |
|
439 | 420 |
|
440 | 421 |
if ((sdata->pos == 1 && sdata->on) || sdata->pos != 1) { |
441 |
- oswald_draw_font58_scaled(44, 32, (OswaldClk.minute / 10)+'0',&w,1,0,sx,sy); |
|
442 |
- oswald_draw_font58_scaled(57, 32, (OswaldClk.minute % 10)+'0',&w,1,0,sx,sy); |
|
422 |
+ oswald_draw_font58_scaled(44, 34, (OswaldClk.minute / 10)+'0',&w,1,0,sx,sy); |
|
423 |
+ oswald_draw_font58_scaled(57, 34, (OswaldClk.minute % 10)+'0',&w,1,0,sx,sy); |
|
443 | 424 |
} |
444 | 425 |
|
445 | 426 |
if ((sdata->pos == 2 && sdata->on) || sdata->pos != 2) { |
446 |
- oswald_draw_font58_scaled(71, 38, (OswaldClk.second / 10)+'0',&w,1,0,sx-1,sy-1); |
|
447 |
- oswald_draw_font58_scaled(79, 38, (OswaldClk.second % 10)+'0',&w,1,0,sx-1,sy-1); |
|
427 |
+ oswald_draw_font58_scaled(71, 40, (OswaldClk.second / 10)+'0',&w,1,0,sx-1,sy-1); |
|
428 |
+ oswald_draw_font58_scaled(79, 40, (OswaldClk.second % 10)+'0',&w,1,0,sx-1,sy-1); |
|
448 | 429 |
} |
449 | 430 |
|
450 | 431 |
|
... | ... |
@@ -615,11 +596,13 @@ event_ret_t datetime_setup_events(uint16_t event, void *data) |
615 | 596 |
* Alarm setup screen |
616 | 597 |
*/ |
617 | 598 |
typedef struct { |
618 |
- uint8_t pos; |
|
599 |
+ int num; |
|
600 |
+ int pos; |
|
619 | 601 |
boolean set_mode; |
620 | 602 |
boolean on; |
621 | 603 |
} alarm_setup_data_t; |
622 | 604 |
static alarm_setup_data_t alarm_setup_screen = { |
605 |
+ 0, |
|
623 | 606 |
0, |
624 | 607 |
FALSE, |
625 | 608 |
TRUE |
... | ... |
@@ -627,131 +610,81 @@ static alarm_setup_data_t alarm_setup_screen = { |
627 | 610 |
|
628 | 611 |
void draw_alarm_setup_screen(alarm_setup_data_t *sdata) |
629 | 612 |
{ |
613 |
+ static char initials[]={"SMTWTFS"}; |
|
614 |
+ int w,i; |
|
630 | 615 |
hal_lcd_clear_display(); |
616 |
+ if (sdata->set_mode) |
|
617 |
+ oswald_draw_grid(1,1,94,94,100,100); |
|
631 | 618 |
|
632 |
- oswald_draw_bitmap(36, 0, alarm_icon_width, alarm_icon_height, 1, alarm_icon_bits); |
|
633 |
- |
|
634 |
- if (sdata->set_mode) { |
|
635 |
- oswald_draw_bitmap(81, 6, upbutton_icon_width, upbutton_icon_height, 1, upbutton_icon_bits); |
|
636 |
- oswald_draw_bitmap(81, 38, rightbutton_icon_width, rightbutton_icon_height, 1, rightbutton_icon_bits); |
|
637 |
- oswald_draw_bitmap(81, 70, downbutton_icon_width, downbutton_icon_height, 1, downbutton_icon_bits); |
|
638 |
- } else { |
|
639 |
- oswald_draw_bitmap(81, 38, enterbutton_icon_width, enterbutton_icon_height, 1, enterbutton_icon_bits); |
|
640 |
- } |
|
619 |
+ oswald_draw_bitmap(36, 3, alarm_icon_width, alarm_icon_height, 1, alarm_icon_bits); |
|
620 |
+ oswald_draw_rect(43,8,52,20,0); |
|
621 |
+ oswald_draw_font58_scaled(44,9,sdata->num+'1',&w,1,0,2,2); |
|
641 | 622 |
|
642 | 623 |
if ((sdata->pos == 0 && sdata->on) || sdata->pos != 0) { |
643 |
- oswald_write_character(18, 30, FONT_LCD13x21, FALSE, (OswaldAlarm.hour / 10)+'0'); |
|
644 |
- oswald_write_character(32, 30, FONT_LCD13x21, FALSE, (OswaldAlarm.hour % 10)+'0'); |
|
624 |
+ oswald_draw_font58_scaled(18, 34, (OswaldAlarm[sdata->num].hour / 10)+'0',&w,1,0,2,3); |
|
625 |
+ oswald_draw_font58_scaled(31, 34, (OswaldAlarm[sdata->num].hour % 10)+'0',&w,1,0,2,3); |
|
645 | 626 |
} |
646 |
- oswald_write_character(42, 30, FONT_LCD13x21, FALSE, ':'); |
|
627 |
+ oswald_draw_font58_scaled(43, 38, ':',&w,1,0,1,2); |
|
647 | 628 |
|
648 | 629 |
if ((sdata->pos == 1 && sdata->on) || sdata->pos != 1) { |
649 |
- oswald_write_character(53, 30, FONT_LCD13x21, FALSE, (OswaldAlarm.minute / 10)+'0'); |
|
650 |
- oswald_write_character(67, 30, FONT_LCD13x21, FALSE, (OswaldAlarm.minute % 10)+'0'); |
|
630 |
+ oswald_draw_font58_scaled(50, 34, (OswaldAlarm[sdata->num].minute / 10)+'0',&w,1,0,2,3); |
|
631 |
+ oswald_draw_font58_scaled(63, 34, (OswaldAlarm[sdata->num].minute % 10)+'0',&w,1,0,2,3); |
|
651 | 632 |
} |
652 | 633 |
|
653 |
- oswald_write_character(3, 55, FONT_6x9, FALSE, 'S'); |
|
654 |
- oswald_write_character(15, 55, FONT_6x9, FALSE, 'M'); |
|
655 |
- oswald_write_character(27, 55, FONT_6x9, FALSE, 'T'); |
|
656 |
- oswald_write_character(39, 55, FONT_6x9, FALSE, 'W'); |
|
657 |
- oswald_write_character(51, 55, FONT_6x9, FALSE, 'T'); |
|
658 |
- oswald_write_character(63, 55, FONT_6x9, FALSE, 'F'); |
|
659 |
- oswald_write_character(75, 55, FONT_6x9, FALSE, 'S'); |
|
660 |
- |
|
661 |
- if ((sdata->pos == 2 && sdata->on) || sdata->pos != 2) { |
|
662 |
- // oswald_write_character(3, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_SUNDAY) ? 'x' : '_'); |
|
663 |
- if ((OswaldAlarm.wday & WDAY_SUNDAY)) |
|
664 |
- oswald_draw_bitmap(3, 66, checked_icon_width, checked_icon_height, 1, checked_icon_bits); |
|
665 |
- else |
|
666 |
- oswald_draw_bitmap(3, 66, unchecked_icon_width, unchecked_icon_height, 1, unchecked_icon_bits); |
|
667 |
- } |
|
668 |
- if ((sdata->pos == 3 && sdata->on) || sdata->pos != 3) { |
|
669 |
- // oswald_write_character(15, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_MONDAY) ? 'x' : '_'); |
|
670 |
- if ((OswaldAlarm.wday & WDAY_MONDAY)) |
|
671 |
- oswald_draw_bitmap(15, 66, checked_icon_width, checked_icon_height, 1, checked_icon_bits); |
|
672 |
- else |
|
673 |
- oswald_draw_bitmap(15, 66, unchecked_icon_width, unchecked_icon_height, 1, unchecked_icon_bits); |
|
674 |
- } |
|
675 |
- if ((sdata->pos == 4 && sdata->on) || sdata->pos != 4) { |
|
676 |
- // oswald_write_character(27, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_TUESDAY) ? 'x' : '_'); |
|
677 |
- if ((OswaldAlarm.wday & WDAY_TUESDAY)) |
|
678 |
- oswald_draw_bitmap(27, 66, checked_icon_width, checked_icon_height, 1, checked_icon_bits); |
|
679 |
- else |
|
680 |
- oswald_draw_bitmap(27, 66, unchecked_icon_width, unchecked_icon_height, 1, unchecked_icon_bits); |
|
681 |
- } |
|
682 |
- if ((sdata->pos == 5 && sdata->on) || sdata->pos != 5) { |
|
683 |
- // oswald_write_character(39, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_WEDNESDAY) ? 'x' : '_'); |
|
684 |
- if ((OswaldAlarm.wday & WDAY_WEDNESDAY)) |
|
685 |
- oswald_draw_bitmap(39, 66, checked_icon_width, checked_icon_height, 1, checked_icon_bits); |
|
686 |
- else |
|
687 |
- oswald_draw_bitmap(39, 66, unchecked_icon_width, unchecked_icon_height, 1, unchecked_icon_bits); |
|
688 |
- } |
|
689 |
- if ((sdata->pos == 6 && sdata->on) || sdata->pos != 6) { |
|
690 |
- // oswald_write_character(51, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_THURSDAY) ? 'x' : '_'); |
|
691 |
- if ((OswaldAlarm.wday & WDAY_THURSDAY)) |
|
692 |
- oswald_draw_bitmap(51, 66, checked_icon_width, checked_icon_height, 1, checked_icon_bits); |
|
693 |
- else |
|
694 |
- oswald_draw_bitmap(51, 66, unchecked_icon_width, unchecked_icon_height, 1, unchecked_icon_bits); |
|
695 |
- } |
|
696 |
- if ((sdata->pos == 7 && sdata->on) || sdata->pos != 7) { |
|
697 |
- // oswald_write_character(63, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_FRIDAY) ? 'x' : '_'); |
|
698 |
- if ((OswaldAlarm.wday & WDAY_FRIDAY)) |
|
699 |
- oswald_draw_bitmap(63, 66, checked_icon_width, checked_icon_height, 1, checked_icon_bits); |
|
700 |
- else |
|
701 |
- oswald_draw_bitmap(63, 66, unchecked_icon_width, unchecked_icon_height, 1, unchecked_icon_bits); |
|
702 |
- } |
|
703 |
- if ((sdata->pos == 8 && sdata->on) || sdata->pos != 8) { |
|
704 |
- // oswald_write_character(75, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_SATURDAY) ? 'x' : '_'); |
|
705 |
- if ((OswaldAlarm.wday & WDAY_SATURDAY)) |
|
706 |
- oswald_draw_bitmap(75, 66, checked_icon_width, checked_icon_height, 1, checked_icon_bits); |
|
707 |
- else |
|
708 |
- oswald_draw_bitmap(75, 66, unchecked_icon_width, unchecked_icon_height, 1, unchecked_icon_bits); |
|
634 |
+ for(i=0;i<7;i++) { |
|
635 |
+ oswald_write_character(8+i*12, 65, FONT_6x9, FALSE, initials[i]); |
|
636 |
+ if ((sdata->pos == (i+2) && sdata->on) || sdata->pos != (i+2)) { |
|
637 |
+ if ((OswaldAlarm[sdata->num].wday & (1<<i))) |
|
638 |
+ oswald_draw_bitmap(7+i*12, 76, checked_icon_width, checked_icon_height, 1, checked_icon_bits); |
|
639 |
+ else |
|
640 |
+ oswald_draw_bitmap(7+i*12, 76, unchecked_icon_width, unchecked_icon_height, 1, unchecked_icon_bits); |
|
641 |
+ } |
|
709 | 642 |
} |
710 | 643 |
|
711 | 644 |
hal_lcd_update_display(); |
712 | 645 |
} |
713 | 646 |
|
714 |
-void alarm_handle_updown(uint8_t pos, int8_t incr) |
|
647 |
+void alarm_handle_updown(int num, int pos, int incr) |
|
715 | 648 |
{ |
716 | 649 |
switch (pos) { |
717 | 650 |
case 0: // hour |
718 |
- if (OswaldAlarm.hour == 0 && incr == -1) { |
|
719 |
- OswaldAlarm.hour = 23; |
|
651 |
+ if (OswaldAlarm[num].hour == 0 && incr == -1) { |
|
652 |
+ OswaldAlarm[num].hour = 23; |
|
720 | 653 |
break; |
721 | 654 |
}; |
722 |
- OswaldAlarm.hour += incr; |
|
723 |
- if (OswaldAlarm.hour > 23) |
|
724 |
- OswaldAlarm.hour = 0; |
|
655 |
+ OswaldAlarm[num].hour += incr; |
|
656 |
+ if (OswaldAlarm[num].hour > 23) |
|
657 |
+ OswaldAlarm[num].hour = 0; |
|
725 | 658 |
break; |
726 | 659 |
case 1: // minute |
727 |
- if (OswaldAlarm.minute == 0 && incr == -1) { |
|
728 |
- OswaldAlarm.minute = 59; |
|
660 |
+ if (OswaldAlarm[num].minute == 0 && incr == -1) { |
|
661 |
+ OswaldAlarm[num].minute = 59; |
|
729 | 662 |
break; |
730 | 663 |
}; |
731 |
- OswaldAlarm.minute += incr; |
|
732 |
- if (OswaldAlarm.minute > 59) |
|
733 |
- OswaldAlarm.minute = 0; |
|
664 |
+ OswaldAlarm[num].minute += incr; |
|
665 |
+ if (OswaldAlarm[num].minute > 59) |
|
666 |
+ OswaldAlarm[num].minute = 0; |
|
734 | 667 |
break; |
735 | 668 |
case 2: // sunday |
736 |
- OswaldAlarm.wday ^= WDAY_SUNDAY; |
|
669 |
+ OswaldAlarm[num].wday ^= WDAY_SUNDAY; |
|
737 | 670 |
break; |
738 | 671 |
case 3: // monday |
739 |
- OswaldAlarm.wday ^= WDAY_MONDAY; |
|
672 |
+ OswaldAlarm[num].wday ^= WDAY_MONDAY; |
|
740 | 673 |
break; |
741 | 674 |
case 4: // tuesday |
742 |
- OswaldAlarm.wday ^= WDAY_TUESDAY; |
|
675 |
+ OswaldAlarm[num].wday ^= WDAY_TUESDAY; |
|
743 | 676 |
break; |
744 | 677 |
case 5: // wednesday |
745 |
- OswaldAlarm.wday ^= WDAY_WEDNESDAY; |
|
678 |
+ OswaldAlarm[num].wday ^= WDAY_WEDNESDAY; |
|
746 | 679 |
break; |
747 | 680 |
case 6: // thursday |
748 |
- OswaldAlarm.wday ^= WDAY_THURSDAY; |
|
681 |
+ OswaldAlarm[num].wday ^= WDAY_THURSDAY; |
|
749 | 682 |
break; |
750 | 683 |
case 7: // friday |
751 |
- OswaldAlarm.wday ^= WDAY_FRIDAY; |
|
684 |
+ OswaldAlarm[num].wday ^= WDAY_FRIDAY; |
|
752 | 685 |
break; |
753 | 686 |
case 8: // saturday |
754 |
- OswaldAlarm.wday ^= WDAY_SATURDAY; |
|
687 |
+ OswaldAlarm[num].wday ^= WDAY_SATURDAY; |
|
755 | 688 |
break; |
756 | 689 |
default: |
757 | 690 |
break; |
... | ... |
@@ -763,10 +696,14 @@ event_ret_t handle_setup_alarm_buttons(watch_button button, alarm_setup_data_t * |
763 | 696 |
if (alarm_setup_screen.set_mode) { |
764 | 697 |
switch (button) { |
765 | 698 |
case BUTTON_A: |
766 |
- alarm_handle_updown(sdata->pos, 1); |
|
699 |
+ alarm_handle_updown(sdata->num, sdata->pos, 1); |
|
767 | 700 |
break; |
768 | 701 |
case BUTTON_C: |
769 |
- alarm_handle_updown(sdata->pos, -1); |
|
702 |
+ alarm_handle_updown(sdata->num, sdata->pos, -1); |
|
703 |
+ break; |
|
704 |
+ case BUTTON_E: |
|
705 |
+ sdata->pos+=9-1; |
|
706 |
+ sdata->pos %= 9; |
|
770 | 707 |
break; |
771 | 708 |
case BUTTON_B: |
772 | 709 |
sdata->pos++; |
... | ... |
@@ -781,6 +718,14 @@ event_ret_t handle_setup_alarm_buttons(watch_button button, alarm_setup_data_t * |
781 | 718 |
} |
782 | 719 |
} else { |
783 | 720 |
switch (button) { |
721 |
+ case BUTTON_A: |
|
722 |
+ sdata->num+=MAX_ALARM+((button==BUTTON_A)?-1:1); |
|
723 |
+ sdata->num%=MAX_ALARM; |
|
724 |
+ break; |
|
725 |
+ case BUTTON_C: |
|
726 |
+ sdata->num+=MAX_ALARM+((button==BUTTON_A)?-1:1); |
|
727 |
+ sdata->num%=MAX_ALARM; |
|
728 |
+ break; |
|
784 | 729 |
case BUTTON_F: |
785 | 730 |
alarm_setup_screen.set_mode = TRUE; |
786 | 731 |
break; |
... | ... |
@@ -798,6 +743,7 @@ event_ret_t alarm_setup_events(uint16_t event, void *data) |
798 | 743 |
{ |
799 | 744 |
switch (event) { |
800 | 745 |
case EVENT_SCREEN_VISIBLE: |
746 |
+ alarm_setup_screen.num = 0; |
|
801 | 747 |
alarm_setup_screen.pos = 0; |
802 | 748 |
alarm_setup_screen.on = TRUE; |
803 | 749 |
alarm_setup_screen.set_mode = FALSE; |
... | ... |
@@ -1265,8 +1211,6 @@ void draw_info_screen(void) |
1265 | 1211 |
|
1266 | 1212 |
oswald_draw_bitmap(36, 0, info_icon_width, info_icon_height, 1, info_icon_bits); |
1267 | 1213 |
|
1268 |
- oswald_draw_bitmap(81, 70, enterbutton_icon_width, enterbutton_icon_height, 1, enterbutton_icon_bits); |
|
1269 |
- |
|
1270 | 1214 |
oswald_write_string(2, 29, FONT_DROID8x12, FALSE, "Oswald"); |
1271 | 1215 |
oswald_write_string(35, 29, FONT_DROID8x12, FALSE, OSWALD_VERSION); |
1272 | 1216 |
oswald_write_string(2, 41, FONT_DROID8x12, FALSE, "HAL"); |
... | ... |
@@ -110,15 +110,16 @@ typedef struct { |
110 | 110 |
int curclock; |
111 | 111 |
} idle_data_t; |
112 | 112 |
static idle_data_t idle_screen = { |
113 |
- DrawCalendarClock, |
|
113 |
+ DrawLcdDigitalClock, |
|
114 | 114 |
TRUE, |
115 | 115 |
0, |
116 | 116 |
}; |
117 | 117 |
static struct { |
118 | 118 |
void (*screendraw_func)(boolean show_seconds); |
119 |
-} clocks[]={{DrawCalendarClock}, |
|
120 |
- {DrawLcdAnaClock}, |
|
119 |
+} clocks[]={ |
|
121 | 120 |
{DrawLcdDigitalClock}, |
121 |
+ {DrawLcdAnaClock}, |
|
122 |
+ {DrawCalendarClock}, |
|
122 | 123 |
{DrawHelpClock} |
123 | 124 |
}; |
124 | 125 |
|
... | ... |
@@ -199,38 +200,38 @@ static main_menu_data_t main_menu_screen = { |
199 | 200 |
#define MAIN_MENU_GRID_SPACING 0 |
200 | 201 |
#define MAIN_MENU_OFFSET_X 6 |
201 | 202 |
#define MAIN_MENU_OFFSET_Y 8 |
202 |
- |
|
203 |
+#define oswald_draw_bitmap_i(a,b,c,d,e,f) if(f) oswald_draw_bitmap(a,b,c,d,1,e) |
|
203 | 204 |
void draw_main_menu_screen(main_menu_data_t *sdata) |
204 | 205 |
{ |
205 | 206 |
uint8_t pf = sdata->pos - 2; |
206 | 207 |
|
207 | 208 |
hal_lcd_clear_display(); |
208 | 209 |
|
209 |
-// oswald_draw_bitmap(36, 0, main_menu_icon_width, main_menu_icon_height, main_menu_icon_bits); |
|
210 |
+// oswald_draw_bitmap(36, 0, main_menu_icon_width, main_menu_icon_height, 1, main_menu_icon_bits); |
|
210 | 211 |
|
211 |
- oswald_draw_bitmap(81, 6, rightbutton_icon_width, rightbutton_icon_height, rightbutton_icon_bits); |
|
212 |
- oswald_draw_bitmap(81, 38, leftbutton_icon_width, leftbutton_icon_height, leftbutton_icon_bits); |
|
213 |
- oswald_draw_bitmap(81, 70, enterbutton_icon_width, enterbutton_icon_height, enterbutton_icon_bits); |
|
212 |
+ oswald_draw_bitmap(81, 6, rightbutton_icon_width, rightbutton_icon_height, 1, rightbutton_icon_bits); |
|
213 |
+ oswald_draw_bitmap(81, 70, leftbutton_icon_width, leftbutton_icon_height, 1, leftbutton_icon_bits); |
|
214 |
+ oswald_draw_bitmap(81, 38, enterbutton_icon_width, enterbutton_icon_height, 1, enterbutton_icon_bits); |
|
214 | 215 |
|
215 |
- oswald_draw_bitmpa_invert_opt(MAIN_MENU_OFFSET_X+((0+1) * MAIN_MENU_GRID_SPACING) + (0 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
|
216 |
+ oswald_draw_bitmap_i(MAIN_MENU_OFFSET_X+((0+1) * MAIN_MENU_GRID_SPACING) + (0 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
|
216 | 217 |
MAIN_MENU_OFFSET_Y+(0 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)), |
217 | 218 |
alarm_icon_width, alarm_icon_height, alarm_icon_bits, (sdata->pos == ALARM_SETUP_SCREEN)); |
218 |
- oswald_draw_bitmpa_invert_opt(MAIN_MENU_OFFSET_X+((1+1) * MAIN_MENU_GRID_SPACING) + (1 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
|
219 |
+ oswald_draw_bitmap_i(MAIN_MENU_OFFSET_X+((1+1) * MAIN_MENU_GRID_SPACING) + (1 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
|
219 | 220 |
MAIN_MENU_OFFSET_Y+(0 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)), |
220 | 221 |
stopwatch_icon_width, stopwatch_icon_height, stopwatch_icon_bits, (sdata->pos == STOP_WATCH_SCREEN)); |
221 |
- oswald_draw_bitmpa_invert_opt(MAIN_MENU_OFFSET_X+((2+1) * MAIN_MENU_GRID_SPACING) + (2 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
|
222 |
+ oswald_draw_bitmap_i(MAIN_MENU_OFFSET_X+((2+1) * MAIN_MENU_GRID_SPACING) + (2 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
|
222 | 223 |
MAIN_MENU_OFFSET_Y+(0 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)), |
223 | 224 |
bluetooth_icon_width, bluetooth_icon_height, bluetooth_icon_bits, (sdata->pos == BLUETOOTH_SCREEN)); |
224 |
- oswald_draw_bitmpa_invert_opt(MAIN_MENU_OFFSET_X+((0+1) * MAIN_MENU_GRID_SPACING) + (0 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
|
225 |
+ oswald_draw_bitmap_i(MAIN_MENU_OFFSET_X+((0+1) * MAIN_MENU_GRID_SPACING) + (0 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
|
225 | 226 |
MAIN_MENU_OFFSET_Y+(1 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)), |
226 | 227 |
acc_icon_width, acc_icon_height, acc_icon_bits, (sdata->pos == ACCEL_DISPLAY_SCREEN)); |
227 |
- oswald_draw_bitmpa_invert_opt(MAIN_MENU_OFFSET_X+((1+1) * MAIN_MENU_GRID_SPACING) + (1 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
|
228 |
+ oswald_draw_bitmap_i(MAIN_MENU_OFFSET_X+((1+1) * MAIN_MENU_GRID_SPACING) + (1 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
|
228 | 229 |
MAIN_MENU_OFFSET_Y+(1 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)), |
229 | 230 |
message_icon_width, message_icon_height, message_icon_bits, (sdata->pos == MESSAGES_SCREEN)); |
230 |
- oswald_draw_bitmpa_invert_opt(MAIN_MENU_OFFSET_X+((2+1) * MAIN_MENU_GRID_SPACING) + (2 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
|
231 |
+ oswald_draw_bitmap_i(MAIN_MENU_OFFSET_X+((2+1) * MAIN_MENU_GRID_SPACING) + (2 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
|
231 | 232 |
MAIN_MENU_OFFSET_Y+(1 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)), |
232 | 233 |
info_icon_width, info_icon_height, info_icon_bits, (sdata->pos == INFO_SCREEN)); |
233 |
- oswald_draw_bitmpa_invert_opt(MAIN_MENU_OFFSET_X+((0+1) * MAIN_MENU_GRID_SPACING) + (0 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
|
234 |
+ oswald_draw_bitmap_i(MAIN_MENU_OFFSET_X+((0+1) * MAIN_MENU_GRID_SPACING) + (0 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
|
234 | 235 |
MAIN_MENU_OFFSET_Y+(2 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)), |
235 | 236 |
exit_icon_width, exit_icon_height, exit_icon_bits, (sdata->pos == LAST_SCREEN)); |
236 | 237 |
|
... | ... |
@@ -246,17 +247,17 @@ void draw_main_menu_screen(main_menu_data_t *sdata) |
246 | 247 |
|
247 | 248 |
|
248 | 249 |
// finally a nice border |
249 |
- oswald_draw_line(3, 0, 95, 0); |
|
250 |
- oswald_draw_line(2, 1, 95, 1); |
|
251 |
- oswald_draw_line(1, 2, 95, 2); |
|
250 |
+ oswald_draw_line(3, 0, 95, 0, 1); |
|
251 |
+ oswald_draw_line(2, 1, 95, 1, 1); |
|
252 |
+ oswald_draw_line(1, 2, 95, 2, 1); |
|
252 | 253 |
|
253 |
- oswald_draw_line(0, 3, 0, 92); |
|
254 |
- oswald_draw_line(1, 3, 1, 93); |
|
255 |
- oswald_draw_line(2, 3, 2, 94); |
|
254 |
+ oswald_draw_line(0, 3, 0, 92, 1); |
|
255 |
+ oswald_draw_line(1, 3, 1, 93, 1); |
|
256 |
+ oswald_draw_line(2, 3, 2, 94, 1); |
|
256 | 257 |
|
257 |
- oswald_draw_line(1, 93, 95, 93); |
|
258 |
- oswald_draw_line(2, 94, 95, 94); |
|
259 |
- oswald_draw_line(3, 95, 95, 95); |
|
258 |
+ oswald_draw_line(1, 93, 95, 93, 1); |
|
259 |
+ oswald_draw_line(2, 94, 95, 94, 1); |
|
260 |
+ oswald_draw_line(3, 95, 95, 95, 1); |
|
260 | 261 |
|
261 | 262 |
hal_lcd_update_display(); |
262 | 263 |
} |
... | ... |
@@ -271,14 +272,14 @@ event_ret_t handle_main_menu_buttons(watch_button button, main_menu_data_t *sdat |
271 | 272 |
draw_main_menu_screen(&main_menu_screen); |
272 | 273 |
return EVENT_RET_HANDLED; |
273 | 274 |
break; |
274 |
- case BUTTON_B: |
|
275 |
+ case BUTTON_C: |
|
275 | 276 |
sdata->pos--; |
276 | 277 |
if (sdata->pos < 2) |
277 | 278 |
sdata->pos = LAST_SCREEN; |
278 | 279 |
draw_main_menu_screen(&main_menu_screen); |
279 | 280 |
return EVENT_RET_HANDLED; |
280 | 281 |
break; |
281 |
- case BUTTON_C: |
|
282 |
+ case BUTTON_B: |
|
282 | 283 |
if (sdata->pos < LAST_SCREEN) { |
283 | 284 |
OswaldState.screen_id = sdata->pos; |
284 | 285 |
OswaldState.screen = &OswaldScreens[OswaldState.screen_id]; |
... | ... |
@@ -345,9 +346,9 @@ void draw_accel_screen(accel_data_t *accel_data) |
345 | 346 |
|
346 | 347 |
hal_lcd_clear_display(); |
347 | 348 |
|
348 |
- oswald_draw_bitmap(36, 0, acc_icon_width, acc_icon_height, acc_icon_bits); |
|
349 |
+ oswald_draw_bitmap(36, 0, acc_icon_width, acc_icon_height, 1, acc_icon_bits); |
|
349 | 350 |
|
350 |
- oswald_draw_bitmap(81, 79, enterbutton_icon_width, enterbutton_icon_height, enterbutton_icon_bits); |
|
351 |
+ oswald_draw_bitmap(81, 79, enterbutton_icon_width, enterbutton_icon_height, 1, enterbutton_icon_bits); |
|
351 | 352 |
|
352 | 353 |
oswald_write_string(1, 40, FONT_6x9, FALSE, "X:"); |
353 | 354 |
oswald_write_number(15, 40, FONT_6x9, FALSE, accel_data->x); |
... | ... |
@@ -359,10 +360,10 @@ void draw_accel_screen(accel_data_t *accel_data) |
359 | 360 |
oswald_write_string(1, 85, FONT_6x9, FALSE, "Light:"); |
360 | 361 |
oswald_write_number(50, 85, FONT_6x9, FALSE, 0); |
361 | 362 |
|
362 |
- oswald_draw_line(40, 30, 92, 30); |
|
363 |
- oswald_draw_line(92, 30, 92, 82); |
|
364 |
- oswald_draw_line(40, 82, 92, 82); |
|
365 |
- oswald_draw_line(40, 82, 40, 30); |
|
363 |
+ oswald_draw_line(40, 30, 92, 30, 1); |
|
364 |
+ oswald_draw_line(92, 30, 92, 82, 1); |
|
365 |
+ oswald_draw_line(40, 82, 92, 82, 1); |
|
366 |
+ oswald_draw_line(40, 82, 40, 30, 1); |
|
366 | 367 |
|
367 | 368 |
x = 41+25+((accel_data->x * 50) / (254)); |
368 | 369 |
y = 31+25-((accel_data->y * 50) / (254)); |
... | ... |
@@ -426,59 +427,56 @@ void draw_datetime_setup_screen(datetime_setup_data_t *sdata) |
426 | 427 |
int w,sx=2,sy=3; |
427 | 428 |
hal_lcd_clear_display(); |
428 | 429 |
|
429 |
- oswald_draw_bitmap(36, 0, timesetup_icon_width, timesetup_icon_height, timesetup_icon_bits); |
|
430 |
- |
|
431 |
- oswald_draw_bitmap(81, 6, upbutton_icon_width, upbutton_icon_height, upbutton_icon_bits); |
|
432 |
- oswald_draw_bitmap(81, 38, downbutton_icon_width, downbutton_icon_height, downbutton_icon_bits); |
|
433 |
- oswald_draw_bitmap(81, 70, rightbutton_icon_width, rightbutton_icon_height, rightbutton_icon_bits); |
|
430 |
+ oswald_draw_grid(0,0,95,95,100,100); |
|
431 |
+ oswald_draw_bitmap(36, 2, timesetup_icon_width, timesetup_icon_height, 1, timesetup_icon_bits); |
|
434 | 432 |
|
435 | 433 |
if ((sdata->pos == 0 && sdata->on) || sdata->pos != 0) { |
436 | 434 |
if(OswaldClk.hour>=10) |
437 |
- oswald_draw_font58_scaled(2, 30, (OswaldClk.hour / 10)+'0',&w,1,0,sx,sy); |
|
438 |
- oswald_draw_font58_scaled(15, 30, (OswaldClk.hour % 10)+'0',&w,1,0,sx,sy); |
|
435 |
+ oswald_draw_font58_scaled(12, 32, (OswaldClk.hour / 10)+'0',&w,1,0,sx,sy); |
|
436 |
+ oswald_draw_font58_scaled(25, 32, (OswaldClk.hour % 10)+'0',&w,1,0,sx,sy); |
|
439 | 437 |
} |
440 |
- oswald_draw_font58_scaled(27, 34, ':',&w,1,0,1,2); |
|
438 |
+ oswald_draw_font58_scaled(37, 36, ':',&w,1,0,1,2); |
|
441 | 439 |
|
442 | 440 |
if ((sdata->pos == 1 && sdata->on) || sdata->pos != 1) { |
443 |
- oswald_draw_font58_scaled(34, 30, (OswaldClk.minute / 10)+'0',&w,1,0,sx,sy); |
|
444 |
- oswald_draw_font58_scaled(47, 30, (OswaldClk.minute % 10)+'0',&w,1,0,sx,sy); |
|
441 |
+ oswald_draw_font58_scaled(44, 32, (OswaldClk.minute / 10)+'0',&w,1,0,sx,sy); |
|
442 |
+ oswald_draw_font58_scaled(57, 32, (OswaldClk.minute % 10)+'0',&w,1,0,sx,sy); |
|
445 | 443 |
} |
446 | 444 |
|
447 | 445 |
if ((sdata->pos == 2 && sdata->on) || sdata->pos != 2) { |
448 |
- oswald_draw_font58_scaled(61, 36, (OswaldClk.second / 10)+'0',&w,1,0,sx-1,sy-1); |
|
449 |
- oswald_draw_font58_scaled(69, 36, (OswaldClk.second % 10)+'0',&w,1,0,sx-1,sy-1); |
|
446 |
+ oswald_draw_font58_scaled(71, 38, (OswaldClk.second / 10)+'0',&w,1,0,sx-1,sy-1); |
|
447 |
+ oswald_draw_font58_scaled(79, 38, (OswaldClk.second % 10)+'0',&w,1,0,sx-1,sy-1); |
|
450 | 448 |
} |
451 | 449 |
|
452 | 450 |
|
453 | 451 |
if ((sdata->pos == 3 && sdata->on) || sdata->pos != 3) { |
454 |
- oswald_write_number(2, 55, FONT_DROID8x12, FALSE, OswaldClk.day); |
|
452 |
+ oswald_write_number(18, 57, FONT_5x8, FALSE, OswaldClk.day); |
|
455 | 453 |
} |
456 |
- oswald_write_character(15, 55, FONT_DROID8x12, FALSE, '.'); |
|
454 |
+ oswald_write_character(31, 57, FONT_5x8, FALSE, '.'); |
|
457 | 455 |
if ((sdata->pos == 4 && sdata->on) || sdata->pos != 4) { |
458 |
- oswald_write_number(21, 55, FONT_DROID8x12, FALSE, OswaldClk.month); |
|
456 |
+ oswald_write_number(37, 57, FONT_5x8, FALSE, OswaldClk.month); |
|
459 | 457 |
} |
460 |
- oswald_write_character(36, 55, FONT_DROID8x12, FALSE, '.'); |
|
458 |
+ oswald_write_character(51, 57, FONT_5x8, FALSE, '.'); |
|
461 | 459 |
if ((sdata->pos == 5 && sdata->on) || sdata->pos != 5) { |
462 |
- oswald_write_number(43, 55, FONT_DROID8x12, FALSE, OswaldClk.year); |
|
460 |
+ oswald_write_number(59, 57, FONT_5x8, FALSE, OswaldClk.year); |
|
463 | 461 |
} |
464 | 462 |
|
465 | 463 |
if ((sdata->pos == 6 && sdata->on) || sdata->pos != 6) { |
466 | 464 |
if (OswaldClk.clk24hr) { |
467 |
- oswald_draw_bitmap(2, 73, checked_icon_width, checked_icon_height, checked_icon_bits); |
|
465 |
+ oswald_draw_bitmap(12, 73, checked_icon_width, checked_icon_height, 1, checked_icon_bits); |
|
468 | 466 |
} else { |
469 |
- oswald_draw_bitmap(2, 73, unchecked_icon_width, unchecked_icon_height, unchecked_icon_bits); |
|
467 |
+ oswald_draw_bitmap(12, 73, unchecked_icon_width, unchecked_icon_height, 1, unchecked_icon_bits); |
|
470 | 468 |
} |
471 | 469 |
} |
472 |
- oswald_write_string(15, 73, FONT_DROID8x12, FALSE, "24hr"); |
|
470 |
+ oswald_write_string(25, 73, FONT_5x8, FALSE, "24hr"); |
|
473 | 471 |
|
474 | 472 |
if ((sdata->pos == 7 && sdata->on) || sdata->pos != 7) { |
475 | 473 |
if (OswaldClk.day_first) { |
476 |
- oswald_draw_bitmap(2, 83, checked_icon_width, checked_icon_height, checked_icon_bits); |
|
474 |
+ oswald_draw_bitmap(12, 83, checked_icon_width, checked_icon_height, 1, checked_icon_bits); |
|
477 | 475 |
} else { |
478 |
- oswald_draw_bitmap(2, 83, unchecked_icon_width, unchecked_icon_height, unchecked_icon_bits); |
|
476 |
+ oswald_draw_bitmap(12, 83, unchecked_icon_width, unchecked_icon_height, 1, unchecked_icon_bits); |
|
479 | 477 |
} |
480 | 478 |
} |
481 |
- oswald_write_string(15, 83, FONT_DROID8x12, FALSE, "dd.mm. mm/dd"); |
|
479 |
+ oswald_write_string(25, 83, FONT_5x8, FALSE, "dd.mm. mm/dd"); |
|
482 | 480 |
|
483 | 481 |
hal_lcd_update_display(); |
484 | 482 |
} |
... | ... |
@@ -555,13 +553,16 @@ event_ret_t handle_setup_datetime_buttons(watch_button button, datetime_setup_da |
555 | 553 |
case BUTTON_A: |
556 | 554 |
datetime_handle_updown(sdata->pos, 1); |
557 | 555 |
break; |
558 |
- case BUTTON_B: |
|
556 |
+ case BUTTON_C: |
|
559 | 557 |
datetime_handle_updown(sdata->pos, -1); |
560 | 558 |
break; |
561 |
- case BUTTON_C: |
|
559 |
+ case BUTTON_B: |
|
562 | 560 |
sdata->pos++; |
563 | 561 |
sdata->pos %= 8; |
564 | 562 |
break; |
563 |
+ case BUTTON_E: |
|
564 |
+ sdata->pos=(sdata->pos+8-1)%8; |
|
565 |
+ break; |
|
565 | 566 |
case BUTTON_F: |
566 | 567 |
OswaldState.screen->event_func(EVENT_SCREEN_DESTROY, NULL); |
567 | 568 |
OswaldState.screen_id = IDLE_SCREEN; |
... | ... |
@@ -628,14 +629,14 @@ void draw_alarm_setup_screen(alarm_setup_data_t *sdata) |
628 | 629 |
{ |
629 | 630 |
hal_lcd_clear_display(); |
630 | 631 |
|
631 |
- oswald_draw_bitmap(36, 0, alarm_icon_width, alarm_icon_height, alarm_icon_bits); |
|
632 |
+ oswald_draw_bitmap(36, 0, alarm_icon_width, alarm_icon_height, 1, alarm_icon_bits); |
|
632 | 633 |
|
633 | 634 |
if (sdata->set_mode) { |
634 |
- oswald_draw_bitmap(81, 6, upbutton_icon_width, upbutton_icon_height, upbutton_icon_bits); |
|
635 |
- oswald_draw_bitmap(81, 38, rightbutton_icon_width, rightbutton_icon_height, rightbutton_icon_bits); |
|
636 |
- oswald_draw_bitmap(81, 70, downbutton_icon_width, downbutton_icon_height, downbutton_icon_bits); |
|
635 |
+ oswald_draw_bitmap(81, 6, upbutton_icon_width, upbutton_icon_height, 1, upbutton_icon_bits); |
|
636 |
+ oswald_draw_bitmap(81, 38, rightbutton_icon_width, rightbutton_icon_height, 1, rightbutton_icon_bits); |
|
637 |
+ oswald_draw_bitmap(81, 70, downbutton_icon_width, downbutton_icon_height, 1, downbutton_icon_bits); |
|
637 | 638 |
} else { |
638 |
- oswald_draw_bitmap(81, 38, enterbutton_icon_width, enterbutton_icon_height, enterbutton_icon_bits); |
|
639 |
+ oswald_draw_bitmap(81, 38, enterbutton_icon_width, enterbutton_icon_height, 1, enterbutton_icon_bits); |
|
639 | 640 |
} |
640 | 641 |
|
641 | 642 |
if ((sdata->pos == 0 && sdata->on) || sdata->pos != 0) { |
... | ... |
@@ -660,51 +661,51 @@ void draw_alarm_setup_screen(alarm_setup_data_t *sdata) |
660 | 661 |
if ((sdata->pos == 2 && sdata->on) || sdata->pos != 2) { |
661 | 662 |
// oswald_write_character(3, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_SUNDAY) ? 'x' : '_'); |
662 | 663 |
if ((OswaldAlarm.wday & WDAY_SUNDAY)) |
663 |
- oswald_draw_bitmap(3, 66, checked_icon_width, checked_icon_height, checked_icon_bits); |
|
664 |
+ oswald_draw_bitmap(3, 66, checked_icon_width, checked_icon_height, 1, checked_icon_bits); |
|
664 | 665 |
else |
665 |
- oswald_draw_bitmap(3, 66, unchecked_icon_width, unchecked_icon_height, unchecked_icon_bits); |
|
666 |
+ oswald_draw_bitmap(3, 66, unchecked_icon_width, unchecked_icon_height, 1, unchecked_icon_bits); |
|
666 | 667 |
} |
667 | 668 |
if ((sdata->pos == 3 && sdata->on) || sdata->pos != 3) { |
668 | 669 |
// oswald_write_character(15, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_MONDAY) ? 'x' : '_'); |
669 | 670 |
if ((OswaldAlarm.wday & WDAY_MONDAY)) |
670 |
- oswald_draw_bitmap(15, 66, checked_icon_width, checked_icon_height, checked_icon_bits); |
|
671 |
+ oswald_draw_bitmap(15, 66, checked_icon_width, checked_icon_height, 1, checked_icon_bits); |
|
671 | 672 |
else |
672 |
- oswald_draw_bitmap(15, 66, unchecked_icon_width, unchecked_icon_height, unchecked_icon_bits); |
|
673 |
+ oswald_draw_bitmap(15, 66, unchecked_icon_width, unchecked_icon_height, 1, unchecked_icon_bits); |
|
673 | 674 |
} |
674 | 675 |
if ((sdata->pos == 4 && sdata->on) || sdata->pos != 4) { |
675 | 676 |
// oswald_write_character(27, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_TUESDAY) ? 'x' : '_'); |
676 | 677 |
if ((OswaldAlarm.wday & WDAY_TUESDAY)) |
677 |
- oswald_draw_bitmap(27, 66, checked_icon_width, checked_icon_height, checked_icon_bits); |
|
678 |
+ oswald_draw_bitmap(27, 66, checked_icon_width, checked_icon_height, 1, checked_icon_bits); |
|
678 | 679 |
else |
679 |
- oswald_draw_bitmap(27, 66, unchecked_icon_width, unchecked_icon_height, unchecked_icon_bits); |
|
680 |
+ oswald_draw_bitmap(27, 66, unchecked_icon_width, unchecked_icon_height, 1, unchecked_icon_bits); |
|
680 | 681 |
} |
681 | 682 |
if ((sdata->pos == 5 && sdata->on) || sdata->pos != 5) { |
682 | 683 |
// oswald_write_character(39, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_WEDNESDAY) ? 'x' : '_'); |
683 | 684 |
if ((OswaldAlarm.wday & WDAY_WEDNESDAY)) |
684 |
- oswald_draw_bitmap(39, 66, checked_icon_width, checked_icon_height, checked_icon_bits); |
|
685 |
+ oswald_draw_bitmap(39, 66, checked_icon_width, checked_icon_height, 1, checked_icon_bits); |
|
685 | 686 |
else |
686 |
- oswald_draw_bitmap(39, 66, unchecked_icon_width, unchecked_icon_height, unchecked_icon_bits); |
|
687 |
+ oswald_draw_bitmap(39, 66, unchecked_icon_width, unchecked_icon_height, 1, unchecked_icon_bits); |
|
687 | 688 |
} |
688 | 689 |
if ((sdata->pos == 6 && sdata->on) || sdata->pos != 6) { |
689 | 690 |
// oswald_write_character(51, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_THURSDAY) ? 'x' : '_'); |
690 | 691 |
if ((OswaldAlarm.wday & WDAY_THURSDAY)) |
691 |
- oswald_draw_bitmap(51, 66, checked_icon_width, checked_icon_height, checked_icon_bits); |
|
692 |
+ oswald_draw_bitmap(51, 66, checked_icon_width, checked_icon_height, 1, checked_icon_bits); |
|
692 | 693 |
else |
693 |
- oswald_draw_bitmap(51, 66, unchecked_icon_width, unchecked_icon_height, unchecked_icon_bits); |
|
694 |
+ oswald_draw_bitmap(51, 66, unchecked_icon_width, unchecked_icon_height, 1, unchecked_icon_bits); |
|
694 | 695 |
} |
695 | 696 |
if ((sdata->pos == 7 && sdata->on) || sdata->pos != 7) { |
696 | 697 |
// oswald_write_character(63, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_FRIDAY) ? 'x' : '_'); |
697 | 698 |
if ((OswaldAlarm.wday & WDAY_FRIDAY)) |
698 |
- oswald_draw_bitmap(63, 66, checked_icon_width, checked_icon_height, checked_icon_bits); |
|
699 |
+ oswald_draw_bitmap(63, 66, checked_icon_width, checked_icon_height, 1, checked_icon_bits); |
|
699 | 700 |
else |
700 |
- oswald_draw_bitmap(63, 66, unchecked_icon_width, unchecked_icon_height, unchecked_icon_bits); |
|
701 |
+ oswald_draw_bitmap(63, 66, unchecked_icon_width, unchecked_icon_height, 1, unchecked_icon_bits); |
|
701 | 702 |
} |
702 | 703 |
if ((sdata->pos == 8 && sdata->on) || sdata->pos != 8) { |
703 | 704 |
// oswald_write_character(75, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_SATURDAY) ? 'x' : '_'); |
704 | 705 |
if ((OswaldAlarm.wday & WDAY_SATURDAY)) |
705 |
- oswald_draw_bitmap(75, 66, checked_icon_width, checked_icon_height, checked_icon_bits); |
|
706 |
+ oswald_draw_bitmap(75, 66, checked_icon_width, checked_icon_height, 1, checked_icon_bits); |
|
706 | 707 |
else |
707 |
- oswald_draw_bitmap(75, 66, unchecked_icon_width, unchecked_icon_height, unchecked_icon_bits); |
|
708 |
+ oswald_draw_bitmap(75, 66, unchecked_icon_width, unchecked_icon_height, 1, unchecked_icon_bits); |
|
708 | 709 |
} |
709 | 710 |
|
710 | 711 |
hal_lcd_update_display(); |
... | ... |
@@ -929,11 +930,11 @@ static void draw_stop_watch_screen(stopwatch_data_t *sdata) |
929 | 930 |
|
930 | 931 |
hal_lcd_clear_display(); |
931 | 932 |
|
932 |
- oswald_draw_bitmap(36, 0, stopwatch_icon_width, stopwatch_icon_height, stopwatch_icon_bits); |
|
933 |
+ oswald_draw_bitmap(36, 0, stopwatch_icon_width, stopwatch_icon_height, 1, stopwatch_icon_bits); |
|
933 | 934 |
|
934 |
- oswald_draw_bitmap(81, 6, startstopbutton_icon_width, startstopbutton_icon_height, startstopbutton_icon_bits); |
|
935 |
- oswald_draw_bitmap(81, 38, lapsebutton_icon_width, lapsebutton_icon_height, lapsebutton_icon_bits); |
|
936 |
- oswald_draw_bitmap(81, 70, enterbutton_icon_width, enterbutton_icon_height, enterbutton_icon_bits); |
|
935 |
+ oswald_draw_bitmap(81, 6, startstopbutton_icon_width, startstopbutton_icon_height, 1, startstopbutton_icon_bits); |
|
936 |
+ oswald_draw_bitmap(81, 38, lapsebutton_icon_width, lapsebutton_icon_height, 1, lapsebutton_icon_bits); |
|
937 |
+ oswald_draw_bitmap(81, 70, enterbutton_icon_width, enterbutton_icon_height, 1, enterbutton_icon_bits); |
|
937 | 938 |
|
938 | 939 |
gRow += 3 + oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (sdata->hr % 10)+'0'); |
939 | 940 |
gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (sdata->min / 10)+'0'); |
... | ... |
@@ -1047,9 +1048,9 @@ void draw_alarm_screen(void) |
1047 | 1048 |
{ |
1048 | 1049 |
hal_lcd_clear_display(); |
1049 | 1050 |
|
1050 |
- oswald_draw_bitmap(36, 20, alarm_icon_width, alarm_icon_height, alarm_icon_bits); |
|
1051 |
+ oswald_draw_bitmap(36, 20, alarm_icon_width, alarm_icon_height, 1, alarm_icon_bits); |
|
1051 | 1052 |
|
1052 |
- oswald_draw_bitmap(81, 70, enterbutton_icon_width, enterbutton_icon_height, enterbutton_icon_bits); |
|
1053 |
+ oswald_draw_bitmap(81, 70, enterbutton_icon_width, enterbutton_icon_height, 1, enterbutton_icon_bits); |
|
1053 | 1054 |
|
1054 | 1055 |
hal_lcd_update_display(); |
1055 | 1056 |
} |
... | ... |
@@ -1110,22 +1111,22 @@ void draw_bluetooth_screen(bluetooth_data_t *sdata) |
1110 | 1111 |
|
1111 | 1112 |
hal_lcd_clear_display(); |
1112 | 1113 |
|
1113 |
- oswald_draw_bitmap(36, 0, bluetooth_icon_width, bluetooth_icon_height, bluetooth_icon_bits); |
|
1114 |
+ oswald_draw_bitmap(36, 0, bluetooth_icon_width, bluetooth_icon_height, 1, bluetooth_icon_bits); |
|
1114 | 1115 |
|
1115 | 1116 |
if (sdata->set_mode) { |
1116 |
- oswald_draw_bitmap(81, 6, upbutton_icon_width, upbutton_icon_height, upbutton_icon_bits); |
|
1117 |
- oswald_draw_bitmap(81, 38, downbutton_icon_width, downbutton_icon_height, downbutton_icon_bits); |
|
1118 |
- oswald_draw_bitmap(81, 70, rightbutton_icon_width, rightbutton_icon_height, rightbutton_icon_bits); |
|
1117 |
+ oswald_draw_bitmap(81, 6, upbutton_icon_width, upbutton_icon_height, 1, upbutton_icon_bits); |
|
1118 |
+ oswald_draw_bitmap(81, 38, downbutton_icon_width, downbutton_icon_height, 1, downbutton_icon_bits); |
|
1119 |
+ oswald_draw_bitmap(81, 70, rightbutton_icon_width, rightbutton_icon_height, 1, rightbutton_icon_bits); |
|
1119 | 1120 |
} else { |
1120 |
- oswald_draw_bitmap(81, 70, enterbutton_icon_width, enterbutton_icon_height, enterbutton_icon_bits); |
|
1121 |
+ oswald_draw_bitmap(81, 70, enterbutton_icon_width, enterbutton_icon_height, 1, enterbutton_icon_bits); |
|
1121 | 1122 |
} |
1122 | 1123 |
|
1123 | 1124 |
oswald_write_string(1, 30, FONT_DROID8x12, FALSE, "Enable:"); |
1124 | 1125 |
if ((sdata->pos == 0 && sdata->on) || sdata->pos != 0) { |
1125 | 1126 |
if (bluetooth_screen.bt_en) |
1126 |
- oswald_draw_bitmap(53, 33, checked_icon_width, checked_icon_height, checked_icon_bits); |
|
1127 |
+ oswald_draw_bitmap(53, 33, checked_icon_width, checked_icon_height, 1, checked_icon_bits); |
|
1127 | 1128 |
else |
1128 |
- oswald_draw_bitmap(53, 33, unchecked_icon_width, unchecked_icon_height, unchecked_icon_bits); |
|
1129 |
+ oswald_draw_bitmap(53, 33, unchecked_icon_width, unchecked_icon_height, 1, unchecked_icon_bits); |
|
1129 | 1130 |
} |
1130 | 1131 |
oswald_write_string(1, 40, FONT_DROID8x12, FALSE, "State:"); |
1131 | 1132 |
switch (hal_bluetooth_get_state()) { |
... | ... |
@@ -1145,9 +1146,9 @@ void draw_bluetooth_screen(bluetooth_data_t *sdata) |
1145 | 1146 |
if ((sdata->pos == 1 && sdata->on) || sdata->pos != 1) { |
1146 | 1147 |
// oswald_write_character(53, 50, FONT_DROID8x12, hal_bluetooth_get_visible() ? 'x' : '_'); |
1147 | 1148 |
if (hal_bluetooth_get_visible()) |
1148 |
- oswald_draw_bitmap(53, 53, checked_icon_width, checked_icon_height, checked_icon_bits); |
|
1149 |
+ oswald_draw_bitmap(53, 53, checked_icon_width, checked_icon_height, 1, checked_icon_bits); |
|
1149 | 1150 |
else |
1150 |
- oswald_draw_bitmap(53, 53, unchecked_icon_width, unchecked_icon_height, unchecked_icon_bits); |
|
1151 |
+ oswald_draw_bitmap(53, 53, unchecked_icon_width, unchecked_icon_height, 1, unchecked_icon_bits); |
|
1151 | 1152 |
} |
1152 | 1153 |
|
1153 | 1154 |
if (hal_bluetooth_get_state() >= BLUETOOTH_ON) { |
... | ... |
@@ -1262,9 +1263,9 @@ void draw_info_screen(void) |
1262 | 1263 |
{ |
1263 | 1264 |
hal_lcd_clear_display(); |
1264 | 1265 |
|
1265 |
- oswald_draw_bitmap(36, 0, info_icon_width, info_icon_height, info_icon_bits); |
|
1266 |
+ oswald_draw_bitmap(36, 0, info_icon_width, info_icon_height, 1, info_icon_bits); |
|
1266 | 1267 |
|
1267 |
- oswald_draw_bitmap(81, 70, enterbutton_icon_width, enterbutton_icon_height, enterbutton_icon_bits); |
|
1268 |
+ oswald_draw_bitmap(81, 70, enterbutton_icon_width, enterbutton_icon_height, 1, enterbutton_icon_bits); |
|
1268 | 1269 |
|
1269 | 1270 |
oswald_write_string(2, 29, FONT_DROID8x12, FALSE, "Oswald"); |
1270 | 1271 |
oswald_write_string(35, 29, FONT_DROID8x12, FALSE, OSWALD_VERSION); |
... | ... |
@@ -1358,12 +1359,12 @@ void draw_message_screen(messages_data_t *sdata) |
1358 | 1359 |
oswald_draw_bitmap(81, 6, upbutton_icon_width, upbutton_icon_height, upbutton_icon_bits); |
1359 | 1360 |
oswald_draw_bitmap(81, 38, downbutton_icon_width, downbutton_icon_height, downbutton_icon_bits); |
1360 | 1361 |
#endif |
1361 |
- oswald_draw_bitmap(81, 70, enterbutton_icon_width, enterbutton_icon_height, enterbutton_icon_bits); |
|
1362 |
+ oswald_draw_bitmap(81, 70, enterbutton_icon_width, enterbutton_icon_height, 1, enterbutton_icon_bits); |
|
1362 | 1363 |
|
1363 | 1364 |
Msg[sdata->offset + sdata->pos].type = MSG_TYPE_READ; |
1364 | 1365 |
snprintf(dstr, 19, "#%02d/%02d", sdata->pos + sdata->offset + 1, Msgs); |
1365 | 1366 |
oswald_write_string(30, 0, FONT_5x7, FALSE, dstr); |
1366 |
- oswald_draw_line(0,7,95,7); |
|
1367 |
+ oswald_draw_line(0,7,95,7, 1); |
|
1367 | 1368 |
|
1368 | 1369 |
|
1369 | 1370 |
// here goes the text |
... | ... |
@@ -1376,7 +1377,7 @@ void draw_message_screen(messages_data_t *sdata) |
1376 | 1377 |
} |
1377 | 1378 |
|
1378 | 1379 |
|
1379 |
- oswald_draw_line(0,87,95,87); |
|
1380 |
+ oswald_draw_line(0,87,95,87, 1); |
|
1380 | 1381 |
|
1381 | 1382 |
if (Msg[sdata->offset + sdata->pos].type != MSG_TYPE_END) { |
1382 | 1383 |
snprintf(dstr, 19, "%c %02d.%02d.%04d,%02d:%02d", (Msg[sdata->pos+sdata->offset].type == MSG_TYPE_NEW) ? '*':' ', Msg[sdata->pos+sdata->offset].td.day, Msg[sdata->pos+sdata->offset].td.month, Msg[sdata->pos+sdata->offset].td.year+1900, Msg[sdata->pos+sdata->offset].td.hour, Msg[sdata->pos+sdata->offset].td.minute); |
... | ... |
@@ -6,6 +6,8 @@ |
6 | 6 |
#include "oswald_graphics.h" |
7 | 7 |
#include "oswald_hal.h" |
8 | 8 |
|
9 |
+#include "dayslib.h" |
|
10 |
+ |
|
9 | 11 |
#include "oswald_screens.h" |
10 | 12 |
|
11 | 13 |
#if defined(__GNUC__) && (__MSP430X__ > 0) |
... | ... |
@@ -76,7 +78,7 @@ __attribute__((__far__)) |
76 | 78 |
#if defined(__GNUC__) && (__MSP430X__ > 0) |
77 | 79 |
__attribute__((__far__)) |
78 | 80 |
#endif |
79 |
-#include "bitmaps/Bluetooth_icon.xbm" |
|
81 |
+#include "bitmaps/bluetooth_icon.xbm" |
|
80 | 82 |
|
81 | 83 |
#if defined(__GNUC__) && (__MSP430X__ > 0) |
82 | 84 |
__attribute__((__far__)) |
... | ... |
@@ -91,12 +93,12 @@ __attribute__((__far__)) |
91 | 93 |
#if defined(__GNUC__) && (__MSP430X__ > 0) |
92 | 94 |
__attribute__((__far__)) |
93 | 95 |
#endif |
94 |
-#include "bitmaps/Message_icon.xbm" |
|
96 |
+#include "bitmaps/message_icon.xbm" |
|
95 | 97 |
|
96 | 98 |
#if defined(__GNUC__) && (__MSP430X__ > 0) |
97 | 99 |
__attribute__((__far__)) |
98 | 100 |
#endif |
99 |
-#include "bitmaps/Exit_icon.xbm" |
|
101 |
+#include "bitmaps/exit_icon.xbm" |
|
100 | 102 |
|
101 | 103 |
|
102 | 104 |
/* |
... | ... |
@@ -105,33 +107,38 @@ __attribute__((__far__)) |
105 | 107 |
typedef struct { |
106 | 108 |
void (*screendraw_func)(boolean show_seconds); |
107 | 109 |
boolean show_seconds; |
108 |
- boolean analogue; |
|
110 |
+ int curclock; |
|
109 | 111 |
} idle_data_t; |
110 | 112 |
static idle_data_t idle_screen = { |
111 |
- DrawLcdDigitalClock, |
|
113 |
+ DrawCalendarClock, |
|
112 | 114 |
TRUE, |
113 |
- FALSE, |
|
115 |
+ 0, |
|
116 |
+}; |
|
117 |
+static struct { |
|
118 |
+ void (*screendraw_func)(boolean show_seconds); |
|
119 |
+} clocks[]={{DrawCalendarClock}, |
|
120 |
+ {DrawLcdAnaClock}, |
|
121 |
+ {DrawLcdDigitalClock}, |
|
122 |
+ {DrawHelpClock} |
|
114 | 123 |
}; |
124 |
+ |
|
115 | 125 |
|
116 | 126 |
event_ret_t idle_handle_user_buttons(watch_button button) |
117 | 127 |
{ |
118 | 128 |
switch (button) { |
119 | 129 |
case BUTTON_A: |
120 |
- if (idle_screen.show_seconds) |
|
121 |
- idle_screen.show_seconds = FALSE; |
|
122 |
- else |
|
123 |
- idle_screen.show_seconds = TRUE; |
|
130 |
+ case BUTTON_C: |
|
131 |
+ idle_screen.curclock+=(button==BUTTON_A)?1:((sizeof(clocks)/sizeof(clocks[0]))-1); |
|
132 |
+ idle_screen.curclock%=(sizeof(clocks)/sizeof(clocks[0])); |
|
133 |
+ idle_screen.screendraw_func = clocks[idle_screen.curclock].screendraw_func; |
|
124 | 134 |
break; |
125 | 135 |
case BUTTON_B: |
126 |
- if (idle_screen.analogue == TRUE) { |
|
127 |
- idle_screen.analogue = FALSE; |
|
128 |
- idle_screen.screendraw_func = DrawLcdDigitalClock; |
|
129 |
- } else { |
|
130 |
- idle_screen.analogue = TRUE; |
|
131 |
- idle_screen.screendraw_func = DrawLcdAnaClock; |
|
132 |
- }; |
|
136 |
+ OswaldState.screen_id = CALENDAR_OVERVIEW_SCREEN; |
|
137 |
+ OswaldState.screen = &OswaldScreens[OswaldState.screen_id]; |
|
138 |
+ OswaldState.screen->event_func(EVENT_SCREEN_VISIBLE, NULL); |
|
139 |
+ return EVENT_RET_HANDLED; |
|
133 | 140 |
break; |
134 |
- case BUTTON_C: |
|
141 |
+ case BUTTON_E: |
|
135 | 142 |
OswaldState.screen_id = MAIN_MENU_SCREEN; |
136 | 143 |
OswaldState.screen = &OswaldScreens[OswaldState.screen_id]; |
137 | 144 |
OswaldState.screen->event_func(EVENT_SCREEN_VISIBLE, NULL); |
... | ... |
@@ -213,19 +220,19 @@ void draw_main_menu_screen(main_menu_data_t *sdata) |
213 | 220 |
stopwatch_icon_width, stopwatch_icon_height, stopwatch_icon_bits, (sdata->pos == STOP_WATCH_SCREEN)); |
214 | 221 |
oswald_draw_bitmpa_invert_opt(MAIN_MENU_OFFSET_X+((2+1) * MAIN_MENU_GRID_SPACING) + (2 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
215 | 222 |
MAIN_MENU_OFFSET_Y+(0 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)), |
216 |
- Bluetooth_icon_width, Bluetooth_icon_height, Bluetooth_icon_bits, (sdata->pos == BLUETOOTH_SCREEN)); |
|
223 |
+ bluetooth_icon_width, bluetooth_icon_height, bluetooth_icon_bits, (sdata->pos == BLUETOOTH_SCREEN)); |
|
217 | 224 |
oswald_draw_bitmpa_invert_opt(MAIN_MENU_OFFSET_X+((0+1) * MAIN_MENU_GRID_SPACING) + (0 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
218 | 225 |
MAIN_MENU_OFFSET_Y+(1 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)), |
219 | 226 |
acc_icon_width, acc_icon_height, acc_icon_bits, (sdata->pos == ACCEL_DISPLAY_SCREEN)); |
220 | 227 |
oswald_draw_bitmpa_invert_opt(MAIN_MENU_OFFSET_X+((1+1) * MAIN_MENU_GRID_SPACING) + (1 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
221 | 228 |
MAIN_MENU_OFFSET_Y+(1 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)), |
222 |
- Message_icon_width, Message_icon_height, Message_icon_bits, (sdata->pos == MESSAGES_SCREEN)); |
|
229 |
+ message_icon_width, message_icon_height, message_icon_bits, (sdata->pos == MESSAGES_SCREEN)); |
|
223 | 230 |
oswald_draw_bitmpa_invert_opt(MAIN_MENU_OFFSET_X+((2+1) * MAIN_MENU_GRID_SPACING) + (2 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
224 | 231 |
MAIN_MENU_OFFSET_Y+(1 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)), |
225 | 232 |
info_icon_width, info_icon_height, info_icon_bits, (sdata->pos == INFO_SCREEN)); |
226 | 233 |
oswald_draw_bitmpa_invert_opt(MAIN_MENU_OFFSET_X+((0+1) * MAIN_MENU_GRID_SPACING) + (0 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
227 | 234 |
MAIN_MENU_OFFSET_Y+(2 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)), |
228 |
- Exit_icon_width, Exit_icon_height, Exit_icon_bits, (sdata->pos == LAST_SCREEN)); |
|
235 |
+ exit_icon_width, exit_icon_height, exit_icon_bits, (sdata->pos == LAST_SCREEN)); |
|
229 | 236 |
|
230 | 237 |
// round the corners of the inverted icon a little |
231 | 238 |
hal_lcd_set_pixel(MAIN_MENU_OFFSET_X+((pf%MAIN_MENU_GRID_X) * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)) % (MAIN_MENU_GRID_X*(MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
... | ... |
@@ -416,6 +423,7 @@ static datetime_setup_data_t dt_setup_screen = { |
416 | 423 |
|
417 | 424 |
void draw_datetime_setup_screen(datetime_setup_data_t *sdata) |
418 | 425 |
{ |
426 |
+ int w,sx=2,sy=3; |
|
419 | 427 |
hal_lcd_clear_display(); |
420 | 428 |
|
421 | 429 |
oswald_draw_bitmap(36, 0, timesetup_icon_width, timesetup_icon_height, timesetup_icon_bits); |
... | ... |
@@ -425,19 +433,20 @@ void draw_datetime_setup_screen(datetime_setup_data_t *sdata) |
425 | 433 |
oswald_draw_bitmap(81, 70, rightbutton_icon_width, rightbutton_icon_height, rightbutton_icon_bits); |
426 | 434 |
|
427 | 435 |
if ((sdata->pos == 0 && sdata->on) || sdata->pos != 0) { |
428 |
- oswald_write_character(2, 30, FONT_LCD13x21, FALSE, (OswaldClk.hour / 10)); |
|
429 |
- oswald_write_character(15, 30, FONT_LCD13x21, FALSE, (OswaldClk.hour % 10)); |
|
436 |
+ if(OswaldClk.hour>=10) |
|
437 |
+ oswald_draw_font58_scaled(2, 30, (OswaldClk.hour / 10)+'0',&w,1,0,sx,sy); |
|
438 |
+ oswald_draw_font58_scaled(15, 30, (OswaldClk.hour % 10)+'0',&w,1,0,sx,sy); |
|
430 | 439 |
} |
431 |
- oswald_write_character(25, 30, FONT_LCD13x21, FALSE, 10); |
|
440 |
+ oswald_draw_font58_scaled(27, 34, ':',&w,1,0,1,2); |
|
432 | 441 |
|
433 | 442 |
if ((sdata->pos == 1 && sdata->on) || sdata->pos != 1) { |
434 |
- oswald_write_character(34, 30, FONT_LCD13x21, FALSE, (OswaldClk.minute / 10)); |
|
435 |
- oswald_write_character(47, 30, FONT_LCD13x21, FALSE, (OswaldClk.minute % 10)); |
|
443 |
+ oswald_draw_font58_scaled(34, 30, (OswaldClk.minute / 10)+'0',&w,1,0,sx,sy); |
|
444 |
+ oswald_draw_font58_scaled(47, 30, (OswaldClk.minute % 10)+'0',&w,1,0,sx,sy); |
|
436 | 445 |
} |
437 | 446 |
|
438 | 447 |
if ((sdata->pos == 2 && sdata->on) || sdata->pos != 2) { |
439 |
- oswald_write_character(61, 38, FONT_LCD8x13, FALSE, (OswaldClk.second / 10)); |
|
440 |
- oswald_write_character(69, 38, FONT_LCD8x13, FALSE, (OswaldClk.second % 10)); |
|
448 |
+ oswald_draw_font58_scaled(61, 36, (OswaldClk.second / 10)+'0',&w,1,0,sx-1,sy-1); |
|
449 |
+ oswald_draw_font58_scaled(69, 36, (OswaldClk.second % 10)+'0',&w,1,0,sx-1,sy-1); |
|
441 | 450 |
} |
442 | 451 |
|
443 | 452 |
|
... | ... |
@@ -455,18 +464,18 @@ void draw_datetime_setup_screen(datetime_setup_data_t *sdata) |
455 | 464 |
|
456 | 465 |
if ((sdata->pos == 6 && sdata->on) || sdata->pos != 6) { |
457 | 466 |
if (OswaldClk.clk24hr) { |
458 |
- oswald_draw_bitmap(2, 76, checked_icon_width, checked_icon_height, checked_icon_bits); |
|
467 |
+ oswald_draw_bitmap(2, 73, checked_icon_width, checked_icon_height, checked_icon_bits); |
|
459 | 468 |
} else { |
460 |
- oswald_draw_bitmap(2, 76, unchecked_icon_width, unchecked_icon_height, unchecked_icon_bits); |
|
469 |
+ oswald_draw_bitmap(2, 73, unchecked_icon_width, unchecked_icon_height, unchecked_icon_bits); |
|
461 | 470 |
} |
462 | 471 |
} |
463 | 472 |
oswald_write_string(15, 73, FONT_DROID8x12, FALSE, "24hr"); |
464 | 473 |
|
465 | 474 |
if ((sdata->pos == 7 && sdata->on) || sdata->pos != 7) { |
466 | 475 |
if (OswaldClk.day_first) { |
467 |
- oswald_draw_bitmap(2, 86, checked_icon_width, checked_icon_height, checked_icon_bits); |
|
476 |
+ oswald_draw_bitmap(2, 83, checked_icon_width, checked_icon_height, checked_icon_bits); |
|
468 | 477 |
} else { |
469 |
- oswald_draw_bitmap(2, 86, unchecked_icon_width, unchecked_icon_height, unchecked_icon_bits); |
|
478 |
+ oswald_draw_bitmap(2, 83, unchecked_icon_width, unchecked_icon_height, unchecked_icon_bits); |
|
470 | 479 |
} |
471 | 480 |
} |
472 | 481 |
oswald_write_string(15, 83, FONT_DROID8x12, FALSE, "dd.mm. mm/dd"); |
... | ... |
@@ -623,21 +632,21 @@ void draw_alarm_setup_screen(alarm_setup_data_t *sdata) |
623 | 632 |
|
624 | 633 |
if (sdata->set_mode) { |
625 | 634 |
oswald_draw_bitmap(81, 6, upbutton_icon_width, upbutton_icon_height, upbutton_icon_bits); |
626 |
- oswald_draw_bitmap(81, 38, downbutton_icon_width, downbutton_icon_height, downbutton_icon_bits); |
|
627 |
- oswald_draw_bitmap(81, 70, rightbutton_icon_width, rightbutton_icon_height, rightbutton_icon_bits); |
|
635 |
+ oswald_draw_bitmap(81, 38, rightbutton_icon_width, rightbutton_icon_height, rightbutton_icon_bits); |
|
636 |
+ oswald_draw_bitmap(81, 70, downbutton_icon_width, downbutton_icon_height, downbutton_icon_bits); |
|
628 | 637 |
} else { |
629 |
- oswald_draw_bitmap(81, 70, enterbutton_icon_width, enterbutton_icon_height, enterbutton_icon_bits); |
|
638 |
+ oswald_draw_bitmap(81, 38, enterbutton_icon_width, enterbutton_icon_height, enterbutton_icon_bits); |
|
630 | 639 |
} |
631 | 640 |
|
632 | 641 |
if ((sdata->pos == 0 && sdata->on) || sdata->pos != 0) { |
633 |
- oswald_write_character(18, 30, FONT_LCD13x21, FALSE, (OswaldAlarm.hour / 10)); |
|
634 |
- oswald_write_character(32, 30, FONT_LCD13x21, FALSE, (OswaldAlarm.hour % 10)); |
|
642 |
+ oswald_write_character(18, 30, FONT_LCD13x21, FALSE, (OswaldAlarm.hour / 10)+'0'); |
|
643 |
+ oswald_write_character(32, 30, FONT_LCD13x21, FALSE, (OswaldAlarm.hour % 10)+'0'); |
|
635 | 644 |
} |
636 |
- oswald_write_character(42, 30, FONT_LCD13x21, FALSE, 10); |
|
645 |
+ oswald_write_character(42, 30, FONT_LCD13x21, FALSE, ':'); |
|
637 | 646 |
|
638 | 647 |
if ((sdata->pos == 1 && sdata->on) || sdata->pos != 1) { |
639 |
- oswald_write_character(53, 30, FONT_LCD13x21, FALSE, (OswaldAlarm.minute / 10)); |
|
640 |
- oswald_write_character(67, 30, FONT_LCD13x21, FALSE, (OswaldAlarm.minute % 10)); |
|
648 |
+ oswald_write_character(53, 30, FONT_LCD13x21, FALSE, (OswaldAlarm.minute / 10)+'0'); |
|
649 |
+ oswald_write_character(67, 30, FONT_LCD13x21, FALSE, (OswaldAlarm.minute % 10)+'0'); |
|
641 | 650 |
} |
642 | 651 |
|
643 | 652 |
oswald_write_character(3, 55, FONT_6x9, FALSE, 'S'); |
... | ... |
@@ -755,10 +764,10 @@ event_ret_t handle_setup_alarm_buttons(watch_button button, alarm_setup_data_t * |
755 | 764 |
case BUTTON_A: |
756 | 765 |
alarm_handle_updown(sdata->pos, 1); |
757 | 766 |
break; |
758 |
- case BUTTON_B: |
|
767 |
+ case BUTTON_C: |
|
759 | 768 |
alarm_handle_updown(sdata->pos, -1); |
760 | 769 |
break; |
761 |
- case BUTTON_C: |
|
770 |
+ case BUTTON_B: |
|
762 | 771 |
sdata->pos++; |
763 | 772 |
sdata->pos %= 9; |
764 | 773 |
break; |
... | ... |
@@ -926,22 +935,22 @@ static void draw_stop_watch_screen(stopwatch_data_t *sdata) |
926 | 935 |
oswald_draw_bitmap(81, 38, lapsebutton_icon_width, lapsebutton_icon_height, lapsebutton_icon_bits); |
927 | 936 |
oswald_draw_bitmap(81, 70, enterbutton_icon_width, enterbutton_icon_height, enterbutton_icon_bits); |
928 | 937 |
|
929 |
- gRow += 3 + oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (sdata->hr % 10)); |
|
930 |
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (sdata->min / 10)); |
|
931 |
- gRow += 3 + oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (sdata->min % 10)); |
|
932 |
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (sdata->sec / 10)); |
|
933 |
- gRow += 3 + oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (sdata->sec % 10)); |
|
934 |
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->csec / 10)); |
|
938 |
+ gRow += 3 + oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (sdata->hr % 10)+'0'); |
|
939 |
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (sdata->min / 10)+'0'); |
|
940 |
+ gRow += 3 + oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (sdata->min % 10)+'0'); |
|
941 |
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (sdata->sec / 10)+'0'); |
|
942 |
+ gRow += 3 + oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (sdata->sec % 10)+'0'); |
|
943 |
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->csec / 10)+'0'); |
|
935 | 944 |
|
936 | 945 |
gRow = 6; |
937 | 946 |
gColumn = 61; |
938 |
- gRow += 13 + oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->lapse_hr % 10)); |
|
939 |
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->lapse_min / 10)); |
|
940 |
- gRow += 13 + oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->lapse_min % 10)); |
|
941 |
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->lapse_sec / 10)); |
|
942 |
- gRow += 3 + oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->lapse_sec % 10)); |
|
943 |
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->lapse_csec / 10)); |
|
944 |
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->lapse_csec % 10)); |
|
947 |
+ gRow += 13 + oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->lapse_hr % 10)+'0'); |
|
948 |
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->lapse_min / 10)+'0'); |
|
949 |
+ gRow += 13 + oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->lapse_min % 10)+'0'); |
|
950 |
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->lapse_sec / 10)+'0'); |
|
951 |
+ gRow += 3 + oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->lapse_sec % 10)+'0'); |
|
952 |
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->lapse_csec / 10)+'0'); |
|
953 |
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->lapse_csec % 10)+'0'); |
|
945 | 954 |
|
946 | 955 |
hal_lcd_update_display(); |
947 | 956 |
} |
... | ... |
@@ -1101,7 +1110,7 @@ void draw_bluetooth_screen(bluetooth_data_t *sdata) |
1101 | 1110 |
|
1102 | 1111 |
hal_lcd_clear_display(); |
1103 | 1112 |
|
1104 |
- oswald_draw_bitmap(36, 0, Bluetooth_icon_width, Bluetooth_icon_height, Bluetooth_icon_bits); |
|
1113 |
+ oswald_draw_bitmap(36, 0, bluetooth_icon_width, bluetooth_icon_height, bluetooth_icon_bits); |
|
1105 | 1114 |
|
1106 | 1115 |
if (sdata->set_mode) { |
1107 | 1116 |
oswald_draw_bitmap(81, 6, upbutton_icon_width, upbutton_icon_height, upbutton_icon_bits); |
... | ... |
@@ -1418,12 +1427,13 @@ event_ret_t message_screen_handle_events(uint16_t event, void *data) |
1418 | 1427 |
|
1419 | 1428 |
void draw_messages_screen(messages_data_t *sdata) |
1420 | 1429 |
{ |
1430 |
+#if 0 |
|
1421 | 1431 |
char dstr[32]; |
1422 | 1432 |
int i; |
1423 | 1433 |
|
1424 | 1434 |
hal_lcd_clear_display(); |
1425 | 1435 |
|
1426 |
- // oswald_draw_bitmap(36, 0, Message_icon_width, Message_icon_height, Message_icon_bits); |
|
1436 |
+ // oswald_draw_bitmap(36, 0, message_icon_width, message_icon_height, message_icon_bits); |
|
1427 | 1437 |
|
1428 | 1438 |
oswald_draw_bitmap(81, 6, upbutton_icon_width, upbutton_icon_height, upbutton_icon_bits); |
1429 | 1439 |
oswald_draw_bitmap(81, 38, downbutton_icon_width, downbutton_icon_height, downbutton_icon_bits); |
... | ... |
@@ -1459,10 +1469,12 @@ void draw_messages_screen(messages_data_t *sdata) |
1459 | 1469 |
} |
1460 | 1470 |
|
1461 | 1471 |
hal_lcd_update_display(); |
1472 |
+#endif |
|
1462 | 1473 |
} |
1463 | 1474 |
|
1464 | 1475 |
event_ret_t handle_messages_screen_buttons(watch_button button, messages_data_t *sdata) |
1465 | 1476 |
{ |
1477 |
+#if 0 |
|
1466 | 1478 |
switch (button) { |
1467 | 1479 |
case BUTTON_A: |
1468 | 1480 |
sdata->pos--; |
... | ... |
@@ -1508,7 +1520,7 @@ event_ret_t handle_messages_screen_buttons(watch_button button, messages_data_t |
1508 | 1520 |
default: |
1509 | 1521 |
break; |
1510 | 1522 |
} |
1511 |
- |
|
1523 |
+#endif |
|
1512 | 1524 |
return EVENT_RET_UNHANDLED; |
1513 | 1525 |
} |
1514 | 1526 |
|
... | ... |
@@ -1531,3 +1543,115 @@ event_ret_t messages_screen_handle_events(uint16_t event, void *data) |
1531 | 1543 |
return EVENT_RET_UNHANDLED; |
1532 | 1544 |
} |
1533 | 1545 |
|
1546 |
+/* calendar overview */ |
|
1547 |
+typedef struct { |
|
1548 |
+ int16_t off; |
|
1549 |
+} calendar_overview_data_t; |
|
1550 |
+static calendar_overview_data_t calendar_overview_screen = { |
|
1551 |
+ 0 |
|
1552 |
+}; |
|
1553 |
+ |
|
1554 |
+void draw_calendar_overview_screen(int off) |
|
1555 |
+{ |
|
1556 |
+ static const char wnames[]={"MTWTFSS"}; |
|
1557 |
+ static const char *mnames[]={"January","February","March","April","May","June","July","August","September","October","November","December"}; |
|
1558 |
+ int i,w,val,x,y; |
|
1559 |
+ int yday,k; |
|
1560 |
+ int *yeardays; |
|
1561 |
+ int l; |
|
1562 |
+ int month,year; |
|
1563 |
+ unsigned char time[6]; |
|
1564 |
+ /* shift the month by the amount on "off" */ |
|
1565 |
+ month=OswaldClk.month+off; |
|
1566 |
+ year=OswaldClk.year; |
|
1567 |
+ if(month<=0) { |
|
1568 |
+ while(month<=0) { |
|
1569 |
+ year--; |
|
1570 |
+ month+=12; |
|
1571 |
+ } |
|
1572 |
+ } else { |
|
1573 |
+ year+=((month-1)/12); |
|
1574 |
+ month=((month-1)%12)+1; |
|
1575 |
+ } |
|
1576 |
+ /* do the actual drawing */ |
|
1577 |
+ hal_lcd_clear_display(); |
|
1578 |
+ oswald_draw_rect(2,0,93,17,1); |
|
1579 |
+ oswald_draw_grid(2,17,93,95,13,13); |
|
1580 |
+ for(i=0;i<7;i++) |
|
1581 |
+ oswald_draw_font58(6+13*i, 30-9-13+2, wnames[i],&w,0,1); |
|
1582 |
+ oswald_write_number(4,0, FONT_6x9, 1, year); |
|
1583 |
+ w=4*5; |
|
1584 |
+ oswald_write_string(4+w+5,0, FONT_6x9, 1, (char *) mnames[(month+11)%12]); |
|
1585 |
+ val = OswaldClk.hour; |
|
1586 |
+ if(!OswaldClk.clk24hr) |
|
1587 |
+ val=(val>12)?val-12:val; |
|
1588 |
+ time[0]=(val/10)+'0'; |
|
1589 |
+ time[1]=(val%10)+'0'; |
|
1590 |
+ time[2]=':'; |
|
1591 |
+ time[3]=(OswaldClk.minute/10)+'0'; |
|
1592 |
+ time[4]=(OswaldClk.minute%10)+'0'; |
|
1593 |
+ time[5]='\0'; |
|
1594 |
+ oswald_write_string(93-23,0, FONT_6x9, 1, (char *) time); |
|
1595 |
+ mday2yday(year,month,1,&yday); |
|
1596 |
+ yday2wday(year,yday,&k); |
|
1597 |
+ k=(k+6)%7; /* wday for Monday is 1, we want it to be 0 */ |
|
1598 |
+ yeardays=GetYearDays(year); |
|
1599 |
+ l=yeardays[month]-yeardays[month-1]; |
|
1600 |
+ for(i=1;i<=l;i++) { |
|
1601 |
+ x=2+2+((i+k-1)%7)*13; |
|
1602 |
+ y=17+2+((i+k-1)/7)*13; |
|
1603 |
+ if(off==0 && i==OswaldClk.day) { |
|
1604 |
+ oswald_draw_grid(x-3,y-3,x+13+1-3+1,y+13+1-3+1,15,15); |
|
1605 |
+ oswald_draw_grid(x-3+1,y-3+1,x+13+1-3,y+13+1-3,15,15); |
|
1606 |
+ } |
|
1607 |
+ if(i<10) { |
|
1608 |
+ oswald_draw_tinydigit(x,y,i+'0',&w,1,0); |
|
1609 |
+ } else { |
|
1610 |
+ oswald_draw_tinydigit(x,y,i/10+'0',&w,1,0); |
|
1611 |
+ oswald_draw_tinydigit(x+w,y,i%10+'0',&w,1,0); |
|
1612 |
+ } |
|
1613 |
+ } |
|
1614 |
+ hal_lcd_update_display(); |
|
1615 |
+} |
|
1616 |
+ |
|
1617 |
+event_ret_t handle_calendar_overview_buttons(watch_button button, calendar_overview_data_t *calendar_overview_screen) |
|
1618 |
+{ |
|
1619 |
+ switch (button) { |
|
1620 |
+ case BUTTON_A: |
|
1621 |
+ case BUTTON_C: |
|
1622 |
+ calendar_overview_screen->off+=((button==BUTTON_C)?1:-1); |
|
1623 |
+ draw_calendar_overview_screen(calendar_overview_screen->off); |
|
1624 |
+ return EVENT_RET_HANDLED; |
|
1625 |
+ break; |
|
1626 |
+ case BUTTON_B: |
|
1627 |
+ OswaldState.screen_id = IDLE_SCREEN; |
|
1628 |
+ OswaldState.screen = &OswaldScreens[OswaldState.screen_id]; |
|
1629 |
+ OswaldState.screen->event_func(EVENT_SCREEN_VISIBLE, NULL); |
|
1630 |
+ return EVENT_RET_HANDLED; |
|
1631 |
+ break; |
|
1632 |
+ default: |
|
1633 |
+ break; |
|
1634 |
+ } |
|
1635 |
+ |
|
1636 |
+ return EVENT_RET_UNHANDLED; |
|
1637 |
+} |
|
1638 |
+ |
|
1639 |
+event_ret_t calendar_overview_handle_events(uint16_t event, void *data) |
|
1640 |
+{ |
|
1641 |
+ switch (event) { |
|
1642 |
+ case EVENT_SCREEN_VISIBLE: |
|
1643 |
+ calendar_overview_screen.off=0; |
|
1644 |
+ draw_calendar_overview_screen(0); |
|
1645 |
+ return EVENT_RET_HANDLED; |
|
1646 |
+ break; |
|
1647 |
+ case EVENT_USER_BUTTONS: |
|
1648 |
+ dbg_out("button event %d\n", *(int *)data); |
|
1649 |
+ return handle_calendar_overview_buttons(*(watch_button *)data, &calendar_overview_screen); |
|
1650 |
+ break; |
|
1651 |
+ case EVENT_ONE_SEC_TIMER: |
|
1652 |
+ return EVENT_RET_HANDLED; |
|
1653 |
+ default: |
|
1654 |
+ break; |
|
1655 |
+ }; |
|
1656 |
+ return EVENT_RET_UNHANDLED; |
|
1657 |
+} |
... | ... |
@@ -190,8 +190,8 @@ static main_menu_data_t main_menu_screen = { |
190 | 190 |
// GRID_Y is +1 since there is one empty row for title icon |
191 | 191 |
#define MAIN_MENU_GRID_Y 3 |
192 | 192 |
#define MAIN_MENU_GRID_SPACING 0 |
193 |
-#define MAIN_MENU_OFFSET_X 3 |
|
194 |
-#define MAIN_MENU_OFFSET_Y 10 |
|
193 |
+#define MAIN_MENU_OFFSET_X 6 |
|
194 |
+#define MAIN_MENU_OFFSET_Y 8 |
|
195 | 195 |
|
196 | 196 |
void draw_main_menu_screen(main_menu_data_t *sdata) |
197 | 197 |
{ |
... | ... |
@@ -237,6 +237,20 @@ void draw_main_menu_screen(main_menu_data_t *sdata) |
237 | 237 |
hal_lcd_set_pixel(MAIN_MENU_OFFSET_X+23+((pf%MAIN_MENU_GRID_X) * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)) % (MAIN_MENU_GRID_X*(MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
238 | 238 |
MAIN_MENU_OFFSET_Y+23+((pf/MAIN_MENU_GRID_X) * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)) % (MAIN_MENU_GRID_Y*(MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)), FALSE); |
239 | 239 |
|
240 |
+ |
|
241 |
+ // finally a nice border |
|
242 |
+ oswald_draw_line(3, 0, 95, 0); |
|
243 |
+ oswald_draw_line(2, 1, 95, 1); |
|
244 |
+ oswald_draw_line(1, 2, 95, 2); |
|
245 |
+ |
|
246 |
+ oswald_draw_line(0, 3, 0, 92); |
|
247 |
+ oswald_draw_line(1, 3, 1, 93); |
|
248 |
+ oswald_draw_line(2, 3, 2, 94); |
|
249 |
+ |
|
250 |
+ oswald_draw_line(1, 93, 95, 93); |
|
251 |
+ oswald_draw_line(2, 94, 95, 94); |
|
252 |
+ oswald_draw_line(3, 95, 95, 95); |
|
253 |
+ |
|
240 | 254 |
hal_lcd_update_display(); |
241 | 255 |
} |
242 | 256 |
|
... | ... |
@@ -11,37 +11,67 @@ |
11 | 11 |
#if defined(__GNUC__) && (__MSP430X__ > 0) |
12 | 12 |
__attribute__((__far__)) |
13 | 13 |
#endif |
14 |
-#include "bitmaps/timesetup_icon.xbm" |
|
14 |
+#include "bitmaps/startstopbutton_icon.xbm" |
|
15 | 15 |
|
16 | 16 |
#if defined(__GNUC__) && (__MSP430X__ > 0) |
17 | 17 |
__attribute__((__far__)) |
18 | 18 |
#endif |
19 |
-#include "bitmaps/stopwatch_icon.xbm" |
|
19 |
+#include "bitmaps/lapsebutton_icon.xbm" |
|
20 | 20 |
|
21 | 21 |
#if defined(__GNUC__) && (__MSP430X__ > 0) |
22 | 22 |
__attribute__((__far__)) |
23 | 23 |
#endif |
24 |
-#include "bitmaps/alarm_icon.xbm" |
|
24 |
+#include "bitmaps/upbutton_icon.xbm" |
|
25 | 25 |
|
26 | 26 |
#if defined(__GNUC__) && (__MSP430X__ > 0) |
27 | 27 |
__attribute__((__far__)) |
28 | 28 |
#endif |
29 |
-#include "bitmaps/startstopbutton_icon.xbm" |
|
29 |
+#include "bitmaps/downbutton_icon.xbm" |
|
30 | 30 |
|
31 | 31 |
#if defined(__GNUC__) && (__MSP430X__ > 0) |
32 | 32 |
__attribute__((__far__)) |
33 | 33 |
#endif |
34 |
-#include "bitmaps/lapsebutton_icon.xbm" |
|
34 |
+#include "bitmaps/leftbutton_icon.xbm" |
|
35 | 35 |
|
36 | 36 |
#if defined(__GNUC__) && (__MSP430X__ > 0) |
37 | 37 |
__attribute__((__far__)) |
38 | 38 |
#endif |
39 |
-#include "bitmaps/upbutton_icon.xbm" |
|
39 |
+#include "bitmaps/rightbutton_icon.xbm" |
|
40 | 40 |
|
41 | 41 |
#if defined(__GNUC__) && (__MSP430X__ > 0) |
42 | 42 |
__attribute__((__far__)) |
43 | 43 |
#endif |
44 |
-#include "bitmaps/downbutton_icon.xbm" |
|
44 |
+#include "bitmaps/enterbutton_icon.xbm" |
|
45 |
+ |
|
46 |
+#if defined(__GNUC__) && (__MSP430X__ > 0) |
|
47 |
+__attribute__((__far__)) |
|
48 |
+#endif |
|
49 |
+#include "bitmaps/checked_icon.xbm" |
|
50 |
+ |
|
51 |
+#if defined(__GNUC__) && (__MSP430X__ > 0) |
|
52 |
+__attribute__((__far__)) |
|
53 |
+#endif |
|
54 |
+#include "bitmaps/unchecked_icon.xbm" |
|
55 |
+ |
|
56 |
+#if defined(__GNUC__) && (__MSP430X__ > 0) |
|
57 |
+__attribute__((__far__)) |
|
58 |
+#endif |
|
59 |
+#include "bitmaps/main_menu_icon.xbm" |
|
60 |
+ |
|
61 |
+#if defined(__GNUC__) && (__MSP430X__ > 0) |
|
62 |
+__attribute__((__far__)) |
|
63 |
+#endif |
|
64 |
+#include "bitmaps/timesetup_icon.xbm" |
|
65 |
+ |
|
66 |
+#if defined(__GNUC__) && (__MSP430X__ > 0) |
|
67 |
+__attribute__((__far__)) |
|
68 |
+#endif |
|
69 |
+#include "bitmaps/stopwatch_icon.xbm" |
|
70 |
+ |
|
71 |
+#if defined(__GNUC__) && (__MSP430X__ > 0) |
|
72 |
+__attribute__((__far__)) |
|
73 |
+#endif |
|
74 |
+#include "bitmaps/alarm_icon.xbm" |
|
45 | 75 |
|
46 | 76 |
#if defined(__GNUC__) && (__MSP430X__ > 0) |
47 | 77 |
__attribute__((__far__)) |
... | ... |
@@ -58,6 +88,15 @@ __attribute__((__far__)) |
58 | 88 |
#endif |
59 | 89 |
#include "bitmaps/acc_icon.xbm" |
60 | 90 |
|
91 |
+#if defined(__GNUC__) && (__MSP430X__ > 0) |
|
92 |
+__attribute__((__far__)) |
|
93 |
+#endif |
|
94 |
+#include "bitmaps/Message_icon.xbm" |
|
95 |
+ |
|
96 |
+#if defined(__GNUC__) && (__MSP430X__ > 0) |
|
97 |
+__attribute__((__far__)) |
|
98 |
+#endif |
|
99 |
+#include "bitmaps/Exit_icon.xbm" |
|
61 | 100 |
|
62 | 101 |
|
63 | 102 |
/* |
... | ... |
@@ -93,7 +132,10 @@ event_ret_t idle_handle_user_buttons(watch_button button) |
93 | 132 |
}; |
94 | 133 |
break; |
95 | 134 |
case BUTTON_C: |
96 |
- return EVENT_RET_UNHANDLED; |
|
135 |
+ OswaldState.screen_id = MAIN_MENU_SCREEN; |
|
136 |
+ OswaldState.screen = &OswaldScreens[OswaldState.screen_id]; |
|
137 |
+ OswaldState.screen->event_func(EVENT_SCREEN_VISIBLE, NULL); |
|
138 |
+ return EVENT_RET_HANDLED; |
|
97 | 139 |
break; |
98 | 140 |
case BUTTON_F: |
99 | 141 |
OswaldState.screen_id = DATETIME_SETTING_SCREEN; |
... | ... |
@@ -131,6 +173,141 @@ event_ret_t idle_handle_events(uint16_t event, void *data) |
131 | 173 |
} |
132 | 174 |
|
133 | 175 |
|
176 |
+/* |
|
177 |
+ * Main Menu Screen |
|
178 |
+ */ |
|
179 |
+typedef struct { |
|
180 |
+ int8_t pos; |
|
181 |
+ uint8_t tmo; |
|
182 |
+} main_menu_data_t; |
|
183 |
+static main_menu_data_t main_menu_screen = { |
|
184 |
+ ALARM_SETUP_SCREEN, |
|
185 |
+ 0, |
|
186 |
+}; |
|
187 |
+ |
|
188 |
+#define MAIN_MENU_GRID_PIXEL 84 |
|
189 |
+#define MAIN_MENU_GRID_X 3 |
|
190 |
+// GRID_Y is +1 since there is one empty row for title icon |
|
191 |
+#define MAIN_MENU_GRID_Y 3 |
|
192 |
+#define MAIN_MENU_GRID_SPACING 0 |
|
193 |
+#define MAIN_MENU_OFFSET_X 3 |
|
194 |
+#define MAIN_MENU_OFFSET_Y 10 |
|
195 |
+ |
|
196 |
+void draw_main_menu_screen(main_menu_data_t *sdata) |
|
197 |
+{ |
|
198 |
+ uint8_t pf = sdata->pos - 2; |
|
199 |
+ |
|
200 |
+ hal_lcd_clear_display(); |
|
201 |
+ |
|
202 |
+// oswald_draw_bitmap(36, 0, main_menu_icon_width, main_menu_icon_height, main_menu_icon_bits); |
|
203 |
+ |
|
204 |
+ oswald_draw_bitmap(81, 6, rightbutton_icon_width, rightbutton_icon_height, rightbutton_icon_bits); |
|
205 |
+ oswald_draw_bitmap(81, 38, leftbutton_icon_width, leftbutton_icon_height, leftbutton_icon_bits); |
|
206 |
+ oswald_draw_bitmap(81, 70, enterbutton_icon_width, enterbutton_icon_height, enterbutton_icon_bits); |
|
207 |
+ |
|
208 |
+ oswald_draw_bitmpa_invert_opt(MAIN_MENU_OFFSET_X+((0+1) * MAIN_MENU_GRID_SPACING) + (0 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
|
209 |
+ MAIN_MENU_OFFSET_Y+(0 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)), |
|
210 |
+ alarm_icon_width, alarm_icon_height, alarm_icon_bits, (sdata->pos == ALARM_SETUP_SCREEN)); |
|
211 |
+ oswald_draw_bitmpa_invert_opt(MAIN_MENU_OFFSET_X+((1+1) * MAIN_MENU_GRID_SPACING) + (1 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
|
212 |
+ MAIN_MENU_OFFSET_Y+(0 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)), |
|
213 |
+ stopwatch_icon_width, stopwatch_icon_height, stopwatch_icon_bits, (sdata->pos == STOP_WATCH_SCREEN)); |
|
214 |
+ oswald_draw_bitmpa_invert_opt(MAIN_MENU_OFFSET_X+((2+1) * MAIN_MENU_GRID_SPACING) + (2 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
|
215 |
+ MAIN_MENU_OFFSET_Y+(0 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)), |
|
216 |
+ Bluetooth_icon_width, Bluetooth_icon_height, Bluetooth_icon_bits, (sdata->pos == BLUETOOTH_SCREEN)); |
|
217 |
+ oswald_draw_bitmpa_invert_opt(MAIN_MENU_OFFSET_X+((0+1) * MAIN_MENU_GRID_SPACING) + (0 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
|
218 |
+ MAIN_MENU_OFFSET_Y+(1 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)), |
|
219 |
+ acc_icon_width, acc_icon_height, acc_icon_bits, (sdata->pos == ACCEL_DISPLAY_SCREEN)); |
|
220 |
+ oswald_draw_bitmpa_invert_opt(MAIN_MENU_OFFSET_X+((1+1) * MAIN_MENU_GRID_SPACING) + (1 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
|
221 |
+ MAIN_MENU_OFFSET_Y+(1 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)), |
|
222 |
+ Message_icon_width, Message_icon_height, Message_icon_bits, (sdata->pos == MESSAGES_SCREEN)); |
|
223 |
+ oswald_draw_bitmpa_invert_opt(MAIN_MENU_OFFSET_X+((2+1) * MAIN_MENU_GRID_SPACING) + (2 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
|
224 |
+ MAIN_MENU_OFFSET_Y+(1 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)), |
|
225 |
+ info_icon_width, info_icon_height, info_icon_bits, (sdata->pos == INFO_SCREEN)); |
|
226 |
+ oswald_draw_bitmpa_invert_opt(MAIN_MENU_OFFSET_X+((0+1) * MAIN_MENU_GRID_SPACING) + (0 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
|
227 |
+ MAIN_MENU_OFFSET_Y+(2 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)), |
|
228 |
+ Exit_icon_width, Exit_icon_height, Exit_icon_bits, (sdata->pos == LAST_SCREEN)); |
|
229 |
+ |
|
230 |
+ // round the corners of the inverted icon a little |
|
231 |
+ hal_lcd_set_pixel(MAIN_MENU_OFFSET_X+((pf%MAIN_MENU_GRID_X) * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)) % (MAIN_MENU_GRID_X*(MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
|
232 |
+ MAIN_MENU_OFFSET_Y+((pf/MAIN_MENU_GRID_X) * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)) % (MAIN_MENU_GRID_Y*(MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)), FALSE); |
|
233 |
+ hal_lcd_set_pixel(MAIN_MENU_OFFSET_X+23+((pf%MAIN_MENU_GRID_X) * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)) % (MAIN_MENU_GRID_X*(MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
|
234 |
+ MAIN_MENU_OFFSET_Y+((pf/MAIN_MENU_GRID_X) * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)) % (MAIN_MENU_GRID_Y*(MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)), FALSE); |
|
235 |
+ hal_lcd_set_pixel(MAIN_MENU_OFFSET_X+((pf%MAIN_MENU_GRID_X) * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)) % (MAIN_MENU_GRID_X*(MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
|
236 |
+ MAIN_MENU_OFFSET_Y+23+((pf/MAIN_MENU_GRID_X) * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)) % (MAIN_MENU_GRID_Y*(MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)), FALSE); |
|
237 |
+ hal_lcd_set_pixel(MAIN_MENU_OFFSET_X+23+((pf%MAIN_MENU_GRID_X) * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)) % (MAIN_MENU_GRID_X*(MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)), |
|
238 |
+ MAIN_MENU_OFFSET_Y+23+((pf/MAIN_MENU_GRID_X) * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)) % (MAIN_MENU_GRID_Y*(MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)), FALSE); |
|
239 |
+ |
|
240 |
+ hal_lcd_update_display(); |
|
241 |
+} |
|
242 |
+ |
|
243 |
+event_ret_t handle_main_menu_buttons(watch_button button, main_menu_data_t *sdata) |
|
244 |
+{ |
|
245 |
+ switch (button) { |
|
246 |
+ case BUTTON_A: |
|
247 |
+ sdata->pos++; |
|
248 |
+ if (sdata->pos > LAST_SCREEN) |
|
249 |
+ sdata->pos = 2; |
|
250 |
+ draw_main_menu_screen(&main_menu_screen); |
|
251 |
+ return EVENT_RET_HANDLED; |
|
252 |
+ break; |
|
253 |
+ case BUTTON_B: |
|
254 |
+ sdata->pos--; |
|
255 |
+ if (sdata->pos < 2) |
|
256 |
+ sdata->pos = LAST_SCREEN; |
|
257 |
+ draw_main_menu_screen(&main_menu_screen); |
|
258 |
+ return EVENT_RET_HANDLED; |
|
259 |
+ break; |
|
260 |
+ case BUTTON_C: |
|
261 |
+ if (sdata->pos < LAST_SCREEN) { |
|
262 |
+ OswaldState.screen_id = sdata->pos; |
|
263 |
+ OswaldState.screen = &OswaldScreens[OswaldState.screen_id]; |
|
264 |
+ OswaldState.screen->event_func(EVENT_SCREEN_VISIBLE, NULL); |
|
265 |
+ } else { |
|
266 |
+ OswaldState.screen_id = IDLE_SCREEN; |
|
267 |
+ OswaldState.screen = &OswaldScreens[OswaldState.screen_id]; |
|
268 |
+ OswaldState.screen->event_func(EVENT_SCREEN_VISIBLE, NULL); |
|
269 |
+ } |
|
270 |
+ return EVENT_RET_HANDLED; |
|
271 |
+ break; |
|
272 |
+ default: |
|
273 |
+ break; |
|
274 |
+ } |
|
275 |
+ |
|
276 |
+ return EVENT_RET_UNHANDLED; |
|
277 |
+} |
|
278 |
+ |
|
279 |
+/* after MAIN_MENU_TIMEOUT seconds return to IDLE_SCREEN */ |
|
280 |
+#define MAIN_MENU_TIMEOUT 10 |
|
281 |
+ |
|
282 |
+event_ret_t main_menu_handle_events(uint16_t event, void *data) |
|
283 |
+{ |
|
284 |
+ switch (event) { |
|
285 |
+ case EVENT_SCREEN_VISIBLE: |
|
286 |
+ main_menu_screen.tmo = 0; |
|
287 |
+ main_menu_screen.pos = 2; |
|
288 |
+ draw_main_menu_screen(&main_menu_screen); |
|
289 |
+ return EVENT_RET_HANDLED; |
|
290 |
+ break; |
|
291 |
+ case EVENT_USER_BUTTONS: |
|
292 |
+ dbg_out("button event %d\n", *(int *)data); |
|
293 |
+ main_menu_screen.tmo = 0; |
|
294 |
+ return handle_main_menu_buttons(*(watch_button *)data, &main_menu_screen); |
|
295 |
+ break; |
|
296 |
+ case EVENT_ONE_SEC_TIMER: |
|
297 |
+ main_menu_screen.tmo++; |
|
298 |
+ if (main_menu_screen.tmo > MAIN_MENU_TIMEOUT) { |
|
299 |
+ OswaldState.screen_id = IDLE_SCREEN; |
|
300 |
+ OswaldState.screen = &OswaldScreens[OswaldState.screen_id]; |
|
301 |
+ OswaldState.screen->event_func(EVENT_SCREEN_VISIBLE, NULL); |
|
302 |
+ } |
|
303 |
+ return EVENT_RET_HANDLED; |
|
304 |
+ default: |
|
305 |
+ break; |
|
306 |
+ }; |
|
307 |
+ return EVENT_RET_UNHANDLED; |
|
308 |
+} |
|
309 |
+ |
|
310 |
+ |
|
134 | 311 |
/* |
135 | 312 |
* Accelerometer and sensor display screen |
136 | 313 |
*/ |
... | ... |
@@ -149,15 +326,17 @@ void draw_accel_screen(accel_data_t *accel_data) |
149 | 326 |
|
150 | 327 |
oswald_draw_bitmap(36, 0, acc_icon_width, acc_icon_height, acc_icon_bits); |
151 | 328 |
|
152 |
- oswald_write_string(1, 40, FONT_6x9, "X:"); |
|
153 |
- oswald_write_number(15, 40, FONT_6x9, accel_data->x); |
|
154 |
- oswald_write_string(1, 52, FONT_6x9, "Y:"); |
|
155 |
- oswald_write_number(15, 52, FONT_6x9, accel_data->y); |
|
156 |
- oswald_write_string(1, 64, FONT_6x9, "Z:"); |
|
157 |
- oswald_write_number(15, 64, FONT_6x9, accel_data->z); |
|
329 |
+ oswald_draw_bitmap(81, 79, enterbutton_icon_width, enterbutton_icon_height, enterbutton_icon_bits); |
|
330 |
+ |
|
331 |
+ oswald_write_string(1, 40, FONT_6x9, FALSE, "X:"); |
|
332 |
+ oswald_write_number(15, 40, FONT_6x9, FALSE, accel_data->x); |
|
333 |
+ oswald_write_string(1, 52, FONT_6x9, FALSE, "Y:"); |
|
334 |
+ oswald_write_number(15, 52, FONT_6x9, FALSE, accel_data->y); |
|
335 |
+ oswald_write_string(1, 64, FONT_6x9, FALSE, "Z:"); |
|
336 |
+ oswald_write_number(15, 64, FONT_6x9, FALSE, accel_data->z); |
|
158 | 337 |
|
159 |
- oswald_write_string(1, 85, FONT_6x9, "Light:"); |
|
160 |
- oswald_write_number(50, 85, FONT_6x9, 0); |
|
338 |
+ oswald_write_string(1, 85, FONT_6x9, FALSE, "Light:"); |
|
339 |
+ oswald_write_number(50, 85, FONT_6x9, FALSE, 0); |
|
161 | 340 |
|
162 | 341 |
oswald_draw_line(40, 30, 92, 30); |
163 | 342 |
oswald_draw_line(92, 30, 92, 82); |
... | ... |
@@ -166,11 +345,11 @@ void draw_accel_screen(accel_data_t *accel_data) |
166 | 345 |
|
167 | 346 |
x = 41+25+((accel_data->x * 50) / (254)); |
168 | 347 |
y = 31+25-((accel_data->y * 50) / (254)); |
169 |
- oswald_draw_pixel(x, y); |
|
170 |
- oswald_draw_pixel(x+1, y); |
|
171 |
- oswald_draw_pixel(x-1, y); |
|
172 |
- oswald_draw_pixel(x, y+1); |
|
173 |
- oswald_draw_pixel(x, y-1); |
|
348 |
+ oswald_draw_pixel(x, y, TRUE); |
|
349 |
+ oswald_draw_pixel(x+1, y, TRUE); |
|
350 |
+ oswald_draw_pixel(x-1, y, TRUE); |
|
351 |
+ oswald_draw_pixel(x, y+1, TRUE); |
|
352 |
+ oswald_draw_pixel(x, y-1, TRUE); |
|
174 | 353 |
|
175 | 354 |
hal_lcd_update_display(); |
176 | 355 |
} |
... | ... |
@@ -229,53 +408,54 @@ void draw_datetime_setup_screen(datetime_setup_data_t *sdata) |
229 | 408 |
|
230 | 409 |
oswald_draw_bitmap(81, 6, upbutton_icon_width, upbutton_icon_height, upbutton_icon_bits); |
231 | 410 |
oswald_draw_bitmap(81, 38, downbutton_icon_width, downbutton_icon_height, downbutton_icon_bits); |
411 |
+ oswald_draw_bitmap(81, 70, rightbutton_icon_width, rightbutton_icon_height, rightbutton_icon_bits); |
|
232 | 412 |
|
233 | 413 |
if ((sdata->pos == 0 && sdata->on) || sdata->pos != 0) { |
234 |
- oswald_write_character(2, 30, FONT_LCD13x21, (OswaldClk.hour / 10)); |
|
235 |
- oswald_write_character(15, 30, FONT_LCD13x21, (OswaldClk.hour % 10)); |
|
414 |
+ oswald_write_character(2, 30, FONT_LCD13x21, FALSE, (OswaldClk.hour / 10)); |
|
415 |
+ oswald_write_character(15, 30, FONT_LCD13x21, FALSE, (OswaldClk.hour % 10)); |
|
236 | 416 |
} |
237 |
- oswald_write_character(25, 30, FONT_LCD13x21, 10); |
|
417 |
+ oswald_write_character(25, 30, FONT_LCD13x21, FALSE, 10); |
|
238 | 418 |
|
239 | 419 |
if ((sdata->pos == 1 && sdata->on) || sdata->pos != 1) { |
240 |
- oswald_write_character(34, 30, FONT_LCD13x21, (OswaldClk.minute / 10)); |
|
241 |
- oswald_write_character(47, 30, FONT_LCD13x21, (OswaldClk.minute % 10)); |
|
420 |
+ oswald_write_character(34, 30, FONT_LCD13x21, FALSE, (OswaldClk.minute / 10)); |
|
421 |
+ oswald_write_character(47, 30, FONT_LCD13x21, FALSE, (OswaldClk.minute % 10)); |
|
242 | 422 |
} |
243 | 423 |
|
244 | 424 |
if ((sdata->pos == 2 && sdata->on) || sdata->pos != 2) { |
245 |
- oswald_write_character(61, 38, FONT_LCD8x13, (OswaldClk.second / 10)); |
|
246 |
- oswald_write_character(69, 38, FONT_LCD8x13, (OswaldClk.second % 10)); |
|
425 |
+ oswald_write_character(61, 38, FONT_LCD8x13, FALSE, (OswaldClk.second / 10)); |
|
426 |
+ oswald_write_character(69, 38, FONT_LCD8x13, FALSE, (OswaldClk.second % 10)); |
|
247 | 427 |
} |
248 | 428 |
|
249 | 429 |
|
250 | 430 |
if ((sdata->pos == 3 && sdata->on) || sdata->pos != 3) { |
251 |
- oswald_write_number(2, 55, FONT_DROID8x12, OswaldClk.day); |
|
431 |
+ oswald_write_number(2, 55, FONT_DROID8x12, FALSE, OswaldClk.day); |
|
252 | 432 |
} |
253 |
- oswald_write_character(15, 55, FONT_DROID8x12, '.'); |
|
433 |
+ oswald_write_character(15, 55, FONT_DROID8x12, FALSE, '.'); |
|
254 | 434 |
if ((sdata->pos == 4 && sdata->on) || sdata->pos != 4) { |
255 |
- oswald_write_number(21, 55, FONT_DROID8x12, OswaldClk.month); |
|
435 |
+ oswald_write_number(21, 55, FONT_DROID8x12, FALSE, OswaldClk.month); |
|
256 | 436 |
} |
257 |
- oswald_write_character(36, 55, FONT_DROID8x12, '.'); |
|
437 |
+ oswald_write_character(36, 55, FONT_DROID8x12, FALSE, '.'); |
|
258 | 438 |
if ((sdata->pos == 5 && sdata->on) || sdata->pos != 5) { |
259 |
- oswald_write_number(43, 55, FONT_DROID8x12, OswaldClk.year); |
|
439 |
+ oswald_write_number(43, 55, FONT_DROID8x12, FALSE, OswaldClk.year); |
|
260 | 440 |
} |
261 | 441 |
|
262 | 442 |
if ((sdata->pos == 6 && sdata->on) || sdata->pos != 6) { |
263 | 443 |
if (OswaldClk.clk24hr) { |
264 |
- oswald_write_character(2, 76, FONT_6x9, 'x'); |
|
444 |
+ oswald_draw_bitmap(2, 76, checked_icon_width, checked_icon_height, checked_icon_bits); |
|
265 | 445 |
} else { |
266 |
- oswald_write_character(2, 76, FONT_6x9, '_'); |
|
446 |
+ oswald_draw_bitmap(2, 76, unchecked_icon_width, unchecked_icon_height, unchecked_icon_bits); |
|
267 | 447 |
} |
268 | 448 |
} |
269 |
- oswald_write_string(15, 73, FONT_DROID8x12, "24hr"); |
|
449 |
+ oswald_write_string(15, 73, FONT_DROID8x12, FALSE, "24hr"); |
|
270 | 450 |
|
271 | 451 |
if ((sdata->pos == 7 && sdata->on) || sdata->pos != 7) { |
272 | 452 |
if (OswaldClk.day_first) { |
273 |
- oswald_write_character(2, 86, FONT_6x9, 'x'); |
|
453 |
+ oswald_draw_bitmap(2, 86, checked_icon_width, checked_icon_height, checked_icon_bits); |
|
274 | 454 |
} else { |
275 |
- oswald_write_character(2, 86, FONT_6x9, '_'); |
|
455 |
+ oswald_draw_bitmap(2, 86, unchecked_icon_width, unchecked_icon_height, unchecked_icon_bits); |
|
276 | 456 |
} |
277 | 457 |
} |
278 |
- oswald_write_string(15, 83, FONT_DROID8x12, "dd.mm. mm/dd"); |
|
458 |
+ oswald_write_string(15, 83, FONT_DROID8x12, FALSE, "dd.mm. mm/dd"); |
|
279 | 459 |
|
280 | 460 |
hal_lcd_update_display(); |
281 | 461 |
} |
... | ... |
@@ -427,42 +607,82 @@ void draw_alarm_setup_screen(alarm_setup_data_t *sdata) |
427 | 607 |
|
428 | 608 |
oswald_draw_bitmap(36, 0, alarm_icon_width, alarm_icon_height, alarm_icon_bits); |
429 | 609 |
|
430 |
- oswald_draw_bitmap(81, 6, upbutton_icon_width, upbutton_icon_height, upbutton_icon_bits); |
|
431 |
- oswald_draw_bitmap(81, 38, downbutton_icon_width, downbutton_icon_height, downbutton_icon_bits); |
|
610 |
+ if (sdata->set_mode) { |
|
611 |
+ oswald_draw_bitmap(81, 6, upbutton_icon_width, upbutton_icon_height, upbutton_icon_bits); |
|
612 |
+ oswald_draw_bitmap(81, 38, downbutton_icon_width, downbutton_icon_height, downbutton_icon_bits); |
|
613 |
+ oswald_draw_bitmap(81, 70, rightbutton_icon_width, rightbutton_icon_height, rightbutton_icon_bits); |
|
614 |
+ } else { |
|
615 |
+ oswald_draw_bitmap(81, 70, enterbutton_icon_width, enterbutton_icon_height, enterbutton_icon_bits); |
|
616 |
+ } |
|
432 | 617 |
|
433 | 618 |
if ((sdata->pos == 0 && sdata->on) || sdata->pos != 0) { |
434 |
- oswald_write_character(18, 30, FONT_LCD13x21, (OswaldAlarm.hour / 10)); |
|
435 |
- oswald_write_character(32, 30, FONT_LCD13x21, (OswaldAlarm.hour % 10)); |
|
619 |
+ oswald_write_character(18, 30, FONT_LCD13x21, FALSE, (OswaldAlarm.hour / 10)); |
|
620 |
+ oswald_write_character(32, 30, FONT_LCD13x21, FALSE, (OswaldAlarm.hour % 10)); |
|
436 | 621 |
} |
437 |
- oswald_write_character(42, 30, FONT_LCD13x21, 10); |
|
622 |
+ oswald_write_character(42, 30, FONT_LCD13x21, FALSE, 10); |
|
438 | 623 |
|
439 | 624 |
if ((sdata->pos == 1 && sdata->on) || sdata->pos != 1) { |
440 |
- oswald_write_character(53, 30, FONT_LCD13x21, (OswaldAlarm.minute / 10)); |
|
441 |
- oswald_write_character(67, 30, FONT_LCD13x21, (OswaldAlarm.minute % 10)); |
|
625 |
+ oswald_write_character(53, 30, FONT_LCD13x21, FALSE, (OswaldAlarm.minute / 10)); |
|
626 |
+ oswald_write_character(67, 30, FONT_LCD13x21, FALSE, (OswaldAlarm.minute % 10)); |
|
442 | 627 |
} |
443 | 628 |
|
444 |
- oswald_write_character(3, 55, FONT_6x9, 'S'); |
|
445 |
- oswald_write_character(15, 55, FONT_6x9, 'M'); |
|
446 |
- oswald_write_character(27, 55, FONT_6x9, 'T'); |
|
447 |
- oswald_write_character(39, 55, FONT_6x9, 'W'); |
|
448 |
- oswald_write_character(51, 55, FONT_6x9, 'T'); |
|
449 |
- oswald_write_character(63, 55, FONT_6x9, 'F'); |
|
450 |
- oswald_write_character(75, 55, FONT_6x9, 'S'); |
|
451 |
- |
|
452 |
- if ((sdata->pos == 2 && sdata->on) || sdata->pos != 2) |
|
453 |
- oswald_write_character(3, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_SUNDAY) ? 'x' : '_'); |
|
454 |
- if ((sdata->pos == 3 && sdata->on) || sdata->pos != 3) |
|
455 |
- oswald_write_character(15, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_MONDAY) ? 'x' : '_'); |
|
456 |
- if ((sdata->pos == 4 && sdata->on) || sdata->pos != 4) |
|
457 |
- oswald_write_character(27, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_TUESDAY) ? 'x' : '_'); |
|
458 |
- if ((sdata->pos == 5 && sdata->on) || sdata->pos != 5) |
|
459 |
- oswald_write_character(39, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_WEDNESDAY) ? 'x' : '_'); |
|
460 |
- if ((sdata->pos == 6 && sdata->on) || sdata->pos != 6) |
|
461 |
- oswald_write_character(51, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_THURSDAY) ? 'x' : '_'); |
|
462 |
- if ((sdata->pos == 7 && sdata->on) || sdata->pos != 7) |
|
463 |
- oswald_write_character(63, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_FRIDAY) ? 'x' : '_'); |
|
464 |
- if ((sdata->pos == 8 && sdata->on) || sdata->pos != 8) |
|
465 |
- oswald_write_character(75, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_SATURDAY) ? 'x' : '_'); |
|
629 |
+ oswald_write_character(3, 55, FONT_6x9, FALSE, 'S'); |
|
630 |
+ oswald_write_character(15, 55, FONT_6x9, FALSE, 'M'); |
|
631 |
+ oswald_write_character(27, 55, FONT_6x9, FALSE, 'T'); |
|
632 |
+ oswald_write_character(39, 55, FONT_6x9, FALSE, 'W'); |
|
633 |
+ oswald_write_character(51, 55, FONT_6x9, FALSE, 'T'); |
|
634 |
+ oswald_write_character(63, 55, FONT_6x9, FALSE, 'F'); |
|
635 |
+ oswald_write_character(75, 55, FONT_6x9, FALSE, 'S'); |
|
636 |
+ |
|
637 |
+ if ((sdata->pos == 2 && sdata->on) || sdata->pos != 2) { |
|
638 |
+ // oswald_write_character(3, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_SUNDAY) ? 'x' : '_'); |
|
639 |
+ if ((OswaldAlarm.wday & WDAY_SUNDAY)) |
|
640 |
+ oswald_draw_bitmap(3, 66, checked_icon_width, checked_icon_height, checked_icon_bits); |
|
641 |
+ else |
|
642 |
+ oswald_draw_bitmap(3, 66, unchecked_icon_width, unchecked_icon_height, unchecked_icon_bits); |
|
643 |
+ } |
|
644 |
+ if ((sdata->pos == 3 && sdata->on) || sdata->pos != 3) { |
|
645 |
+ // oswald_write_character(15, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_MONDAY) ? 'x' : '_'); |
|
646 |
+ if ((OswaldAlarm.wday & WDAY_MONDAY)) |
|
647 |
+ oswald_draw_bitmap(15, 66, checked_icon_width, checked_icon_height, checked_icon_bits); |
|
648 |
+ else |
|
649 |
+ oswald_draw_bitmap(15, 66, unchecked_icon_width, unchecked_icon_height, unchecked_icon_bits); |
|
650 |
+ } |
|
651 |
+ if ((sdata->pos == 4 && sdata->on) || sdata->pos != 4) { |
|
652 |
+ // oswald_write_character(27, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_TUESDAY) ? 'x' : '_'); |
|
653 |
+ if ((OswaldAlarm.wday & WDAY_TUESDAY)) |
|
654 |
+ oswald_draw_bitmap(27, 66, checked_icon_width, checked_icon_height, checked_icon_bits); |
|
655 |
+ else |
|
656 |
+ oswald_draw_bitmap(27, 66, unchecked_icon_width, unchecked_icon_height, unchecked_icon_bits); |
|
657 |
+ } |
|
658 |
+ if ((sdata->pos == 5 && sdata->on) || sdata->pos != 5) { |
|
659 |
+ // oswald_write_character(39, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_WEDNESDAY) ? 'x' : '_'); |
|
660 |
+ if ((OswaldAlarm.wday & WDAY_WEDNESDAY)) |
|
661 |
+ oswald_draw_bitmap(39, 66, checked_icon_width, checked_icon_height, checked_icon_bits); |
|
662 |
+ else |
|
663 |
+ oswald_draw_bitmap(39, 66, unchecked_icon_width, unchecked_icon_height, unchecked_icon_bits); |
|
664 |
+ } |
|
665 |
+ if ((sdata->pos == 6 && sdata->on) || sdata->pos != 6) { |
|
666 |
+ // oswald_write_character(51, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_THURSDAY) ? 'x' : '_'); |
|
667 |
+ if ((OswaldAlarm.wday & WDAY_THURSDAY)) |
|
668 |
+ oswald_draw_bitmap(51, 66, checked_icon_width, checked_icon_height, checked_icon_bits); |
|
669 |
+ else |
|
670 |
+ oswald_draw_bitmap(51, 66, unchecked_icon_width, unchecked_icon_height, unchecked_icon_bits); |
|
671 |
+ } |
|
672 |
+ if ((sdata->pos == 7 && sdata->on) || sdata->pos != 7) { |
|
673 |
+ // oswald_write_character(63, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_FRIDAY) ? 'x' : '_'); |
|
674 |
+ if ((OswaldAlarm.wday & WDAY_FRIDAY)) |
|
675 |
+ oswald_draw_bitmap(63, 66, checked_icon_width, checked_icon_height, checked_icon_bits); |
|
676 |
+ else |
|
677 |
+ oswald_draw_bitmap(63, 66, unchecked_icon_width, unchecked_icon_height, unchecked_icon_bits); |
|
678 |
+ } |
|
679 |
+ if ((sdata->pos == 8 && sdata->on) || sdata->pos != 8) { |
|
680 |
+ // oswald_write_character(75, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_SATURDAY) ? 'x' : '_'); |
|
681 |
+ if ((OswaldAlarm.wday & WDAY_SATURDAY)) |
|
682 |
+ oswald_draw_bitmap(75, 66, checked_icon_width, checked_icon_height, checked_icon_bits); |
|
683 |
+ else |
|
684 |
+ oswald_draw_bitmap(75, 66, unchecked_icon_width, unchecked_icon_height, unchecked_icon_bits); |
|
685 |
+ } |
|
466 | 686 |
|
467 | 687 |
hal_lcd_update_display(); |
468 | 688 |
} |
... | ... |
@@ -611,15 +831,15 @@ void draw_menu_test_screen(void) |
611 | 831 |
|
612 | 832 |
WriteLcdString(50, 20+(9*test_menu.menu_pos), "*"); |
613 | 833 |
#endif |
614 |
- oswald_write_string(2, 2, FONT_DROID11x14b, "Menu"); |
|
834 |
+ oswald_write_string(2, 2, FONT_DROID8x12, FALSE, "Menu"); |
|
615 | 835 |
|
616 |
- oswald_write_string(2, 20, FONT_DROID8x12, "Item 1"); |
|
617 |
- oswald_write_string(2, 29, FONT_DROID8x12, "Item 2"); |
|
618 |
- oswald_write_string(2, 38, FONT_DROID8x12, "Item 3"); |
|
619 |
- oswald_write_string(2, 47, FONT_DROID8x12, "Item 4"); |
|
620 |
- oswald_write_string(2, 56, FONT_DROID8x12, "Item 5"); |
|
836 |
+ oswald_write_string(2, 20, FONT_DROID8x12, FALSE, "Item 1"); |
|
837 |
+ oswald_write_string(2, 29, FONT_DROID8x12, FALSE, "Item 2"); |
|
838 |
+ oswald_write_string(2, 38, FONT_DROID8x12, FALSE, "Item 3"); |
|
839 |
+ oswald_write_string(2, 47, FONT_DROID8x12, FALSE, "Item 4"); |
|
840 |
+ oswald_write_string(2, 56, FONT_DROID8x12, FALSE, "Item 5"); |
|
621 | 841 |
|
622 |
- oswald_write_character(50, 18+(9*test_menu.menu_pos), FONT_6x9, 0x11); |
|
842 |
+ oswald_write_character(50, 18+(9*test_menu.menu_pos), FONT_6x9, FALSE, 0x11); |
|
623 | 843 |
|
624 | 844 |
hal_lcd_update_display(); |
625 | 845 |
} |
... | ... |
@@ -678,29 +898,6 @@ typedef struct { |
678 | 898 |
} stopwatch_data_t; |
679 | 899 |
static stopwatch_data_t stopwatch_screen = { 0, 0, 0, 0, 0, 0, 0, 0, FALSE }; |
680 | 900 |
|
681 |
-#if 0 |
|
682 |
-static void update_stop_watch_screen(stopwatch_data_t *sdata) |
|
683 |
-{ |
|
684 |
- //char tstr[16]; |
|
685 |
-#if 0 |
|
686 |
- SetFont(MetaWatchMonospaced10); |
|
687 |
- |
|
688 |
- snprintf(tstr, 16, "%02d:%02d:%02d.%1d", sdata->hr, sdata->min, sdata->sec, sdata->csec / 10); |
|
689 |
- WriteLcdString(5, 40, tstr); |
|
690 |
- snprintf(tstr, 16, "%02d:%02d:%02d.%02d", sdata->lapse_hr, sdata->lapse_min, sdata->lapse_sec, sdata->lapse_csec); |
|
691 |
- WriteLcdString(5, 60, tstr); |
|
692 |
-#endif |
|
693 |
-#if 0 |
|
694 |
- snprintf(tstr, 16, "%02d:%02d:%02d.%1d", sdata->hr, sdata->min, sdata->sec, sdata->csec / 10); |
|
695 |
- oswald_write_string(5, 40, FONT_6x9, tstr); |
|
696 |
- |
|
697 |
- snprintf(tstr, 16, "%02d:%02d:%02d.%02d", sdata->lapse_hr, sdata->lapse_min, sdata->lapse_sec, sdata->lapse_csec); |
|
698 |
- oswald_write_string(5, 60, FONT_6x9, tstr); |
|
699 |
-#endif |
|
700 |
- |
|
701 |
- hal_lcd_update_display(); |
|
702 |
-} |
|
703 |
-#endif |
|
704 | 901 |
|
705 | 902 |
static void draw_stop_watch_screen(stopwatch_data_t *sdata) |
706 | 903 |
{ |
... | ... |
@@ -710,31 +907,29 @@ static void draw_stop_watch_screen(stopwatch_data_t *sdata) |
710 | 907 |
hal_lcd_clear_display(); |
711 | 908 |
|
712 | 909 |
oswald_draw_bitmap(36, 0, stopwatch_icon_width, stopwatch_icon_height, stopwatch_icon_bits); |
910 |
+ |
|
713 | 911 |
oswald_draw_bitmap(81, 6, startstopbutton_icon_width, startstopbutton_icon_height, startstopbutton_icon_bits); |
714 | 912 |
oswald_draw_bitmap(81, 38, lapsebutton_icon_width, lapsebutton_icon_height, lapsebutton_icon_bits); |
913 |
+ oswald_draw_bitmap(81, 70, enterbutton_icon_width, enterbutton_icon_height, enterbutton_icon_bits); |
|
715 | 914 |
|
716 |
-#if 0 |
|
717 |
- update_stop_watch_screen(sdata); |
|
718 |
-#else |
|
719 |
- gRow += 3 + oswald_write_character(gRow, gColumn, FONT_LCD13x21, (sdata->hr % 10)); |
|
720 |
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, (sdata->min / 10)); |
|
721 |
- gRow += 3 + oswald_write_character(gRow, gColumn, FONT_LCD13x21, (sdata->min % 10)); |
|
722 |
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, (sdata->sec / 10)); |
|
723 |
- gRow += 3 + oswald_write_character(gRow, gColumn, FONT_LCD13x21, (sdata->sec % 10)); |
|
724 |
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, (sdata->csec / 10)); |
|
915 |
+ gRow += 3 + oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (sdata->hr % 10)); |
|
916 |
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (sdata->min / 10)); |
|
917 |
+ gRow += 3 + oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (sdata->min % 10)); |
|
918 |
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (sdata->sec / 10)); |
|
919 |
+ gRow += 3 + oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (sdata->sec % 10)); |
|
920 |
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->csec / 10)); |
|
725 | 921 |
|
726 | 922 |
gRow = 6; |
727 |
- gColumn = 62; |
|
728 |
- gRow += 13 + oswald_write_character(gRow, gColumn, FONT_LCD8x13, (sdata->lapse_hr % 10)); |
|
729 |
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, (sdata->lapse_min / 10)); |
|
730 |
- gRow += 13 + oswald_write_character(gRow, gColumn, FONT_LCD8x13, (sdata->lapse_min % 10)); |
|
731 |
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, (sdata->lapse_sec / 10)); |
|
732 |
- gRow += 3 + oswald_write_character(gRow, gColumn, FONT_LCD8x13, (sdata->lapse_sec % 10)); |
|
733 |
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, (sdata->lapse_csec / 10)); |
|
734 |
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, (sdata->lapse_csec % 10)); |
|
923 |
+ gColumn = 61; |
|
924 |
+ gRow += 13 + oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->lapse_hr % 10)); |
|
925 |
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->lapse_min / 10)); |
|
926 |
+ gRow += 13 + oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->lapse_min % 10)); |
|
927 |
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->lapse_sec / 10)); |
|
928 |
+ gRow += 3 + oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->lapse_sec % 10)); |
|
929 |
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->lapse_csec / 10)); |
|
930 |
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->lapse_csec % 10)); |
|
735 | 931 |
|
736 | 932 |
hal_lcd_update_display(); |
737 |
-#endif |
|
738 | 933 |
} |
739 | 934 |
|
740 | 935 |
event_ret_t handle_stop_watch_buttons(watch_button button) |
... | ... |
@@ -780,12 +975,10 @@ event_ret_t stop_watch_handle_events(uint16_t event, void *data) |
780 | 975 |
switch (event) { |
781 | 976 |
case EVENT_USER_BUTTONS: |
782 | 977 |
dbg_out("button event %d\n", *(int *)data); |
783 |
- return handle_stop_watch_buttons(*(watch_button *)data); |
|
784 |
- //update_stop_watch_screen(&stopwatch_screen); |
|
785 | 978 |
draw_stop_watch_screen(&stopwatch_screen); |
979 |
+ return handle_stop_watch_buttons(*(watch_button *)data); |
|
786 | 980 |
break; |
787 | 981 |
case EVENT_SCREEN_VISIBLE: |
788 |
- hal_lcd_clear_display(); |
|
789 | 982 |
draw_stop_watch_screen(&stopwatch_screen); |
790 | 983 |
return EVENT_RET_HANDLED; |
791 | 984 |
break; |
... | ... |
@@ -833,6 +1026,8 @@ void draw_alarm_screen(void) |
833 | 1026 |
|
834 | 1027 |
oswald_draw_bitmap(36, 20, alarm_icon_width, alarm_icon_height, alarm_icon_bits); |
835 | 1028 |
|
1029 |
+ oswald_draw_bitmap(81, 70, enterbutton_icon_width, enterbutton_icon_height, enterbutton_icon_bits); |
|
1030 |
+ |
|
836 | 1031 |
hal_lcd_update_display(); |
837 | 1032 |
} |
838 | 1033 |
|
... | ... |
@@ -894,36 +1089,48 @@ void draw_bluetooth_screen(bluetooth_data_t *sdata) |
894 | 1089 |
|
895 | 1090 |
oswald_draw_bitmap(36, 0, Bluetooth_icon_width, Bluetooth_icon_height, Bluetooth_icon_bits); |
896 | 1091 |
|
897 |
- oswald_draw_bitmap(81, 6, upbutton_icon_width, upbutton_icon_height, upbutton_icon_bits); |
|
898 |
- oswald_draw_bitmap(81, 38, downbutton_icon_width, downbutton_icon_height, downbutton_icon_bits); |
|
1092 |
+ if (sdata->set_mode) { |
|
1093 |
+ oswald_draw_bitmap(81, 6, upbutton_icon_width, upbutton_icon_height, upbutton_icon_bits); |
|
1094 |
+ oswald_draw_bitmap(81, 38, downbutton_icon_width, downbutton_icon_height, downbutton_icon_bits); |
|
1095 |
+ oswald_draw_bitmap(81, 70, rightbutton_icon_width, rightbutton_icon_height, rightbutton_icon_bits); |
|
1096 |
+ } else { |
|
1097 |
+ oswald_draw_bitmap(81, 70, enterbutton_icon_width, enterbutton_icon_height, enterbutton_icon_bits); |
|
1098 |
+ } |
|
899 | 1099 |
|
900 |
- oswald_write_string(1, 30, FONT_DROID8x12, "Enable:"); |
|
1100 |
+ oswald_write_string(1, 30, FONT_DROID8x12, FALSE, "Enable:"); |
|
901 | 1101 |
if ((sdata->pos == 0 && sdata->on) || sdata->pos != 0) { |
902 |
- oswald_write_character(53, 30, FONT_DROID8x12, bluetooth_screen.bt_en ? 'x' : '_'); |
|
1102 |
+ if (bluetooth_screen.bt_en) |
|
1103 |
+ oswald_draw_bitmap(53, 33, checked_icon_width, checked_icon_height, checked_icon_bits); |
|
1104 |
+ else |
|
1105 |
+ oswald_draw_bitmap(53, 33, unchecked_icon_width, unchecked_icon_height, unchecked_icon_bits); |
|
903 | 1106 |
} |
904 |
- oswald_write_string(1, 40, FONT_DROID8x12, "State:"); |
|
1107 |
+ oswald_write_string(1, 40, FONT_DROID8x12, FALSE, "State:"); |
|
905 | 1108 |
switch (hal_bluetooth_get_state()) { |
906 | 1109 |
case BLUETOOTH_OFF: |
907 |
- oswald_write_string(53, 40, FONT_DROID8x12, "off"); |
|
1110 |
+ oswald_write_string(53, 40, FONT_DROID8x12, FALSE, "off"); |
|
908 | 1111 |
break; |
909 | 1112 |
case BLUETOOTH_ON: |
910 |
- oswald_write_string(53, 40, FONT_DROID8x12, "on"); |
|
1113 |
+ oswald_write_string(53, 40, FONT_DROID8x12, FALSE, "on"); |
|
911 | 1114 |
break; |
912 | 1115 |
case BLUETOOTH_CONNECTED: |
913 |
- oswald_write_string(53, 40, FONT_DROID8x12, "conn."); |
|
1116 |
+ oswald_write_string(53, 40, FONT_DROID8x12, FALSE, "conn."); |
|
914 | 1117 |
break; |
915 | 1118 |
default: |
916 | 1119 |
break; |
917 | 1120 |
}; |
918 |
- oswald_write_string(1, 50, FONT_DROID8x12, "Visible:"); |
|
1121 |
+ oswald_write_string(1, 50, FONT_DROID8x12, FALSE, "Visible:"); |
|
919 | 1122 |
if ((sdata->pos == 1 && sdata->on) || sdata->pos != 1) { |
920 |
- oswald_write_character(53, 50, FONT_DROID8x12, hal_bluetooth_get_visible() ? 'x' : '_'); |
|
1123 |
+ // oswald_write_character(53, 50, FONT_DROID8x12, hal_bluetooth_get_visible() ? 'x' : '_'); |
|
1124 |
+ if (hal_bluetooth_get_visible()) |
|
1125 |
+ oswald_draw_bitmap(53, 53, checked_icon_width, checked_icon_height, checked_icon_bits); |
|
1126 |
+ else |
|
1127 |
+ oswald_draw_bitmap(53, 53, unchecked_icon_width, unchecked_icon_height, unchecked_icon_bits); |
|
921 | 1128 |
} |
922 | 1129 |
|
923 | 1130 |
if (hal_bluetooth_get_state() >= BLUETOOTH_ON) { |
924 | 1131 |
bd_addr = hal_bluetooth_get_local_bdaddr(); |
925 | 1132 |
snprintf(bstr, 20, "%02x:%02x:%02x:%02x:%02x:%02x", bd_addr[5], bd_addr[4], bd_addr[3], bd_addr[2], bd_addr[1], bd_addr[0]); |
926 |
- oswald_write_string(2, 85, FONT_5x7, bstr); |
|
1133 |
+ oswald_write_string(2, 85, FONT_5x7, FALSE, bstr); |
|
927 | 1134 |
} else { |
928 | 1135 |
} |
929 | 1136 |
|
... | ... |
@@ -949,20 +1156,6 @@ void bluetooth_handle_updown(uint8_t pos, int8_t incr) |
949 | 1156 |
hal_bluetooth_set_visible(FALSE); |
950 | 1157 |
} |
951 | 1158 |
break; |
952 |
- case 2: |
|
953 |
- break; |
|
954 |
- case 3: |
|
955 |
- break; |
|
956 |
- case 4: |
|
957 |
- break; |
|
958 |
- case 5: |
|
959 |
- break; |
|
960 |
- case 6: |
|
961 |
- break; |
|
962 |
- case 7: |
|
963 |
- break; |
|
964 |
- case 8: |
|
965 |
- break; |
|
966 | 1159 |
default: |
967 | 1160 |
break; |
968 | 1161 |
}; |
... | ... |
@@ -1042,20 +1235,22 @@ event_ret_t bluetooth_screen_events(uint16_t event, void *data) |
1042 | 1235 |
/* |
1043 | 1236 |
* Info Screen |
1044 | 1237 |
*/ |
1045 |
-void draw_info_screen(accel_data_t *accel_data) |
|
1238 |
+void draw_info_screen(void) |
|
1046 | 1239 |
{ |
1047 | 1240 |
hal_lcd_clear_display(); |
1048 | 1241 |
|
1049 | 1242 |
oswald_draw_bitmap(36, 0, info_icon_width, info_icon_height, info_icon_bits); |
1050 | 1243 |
|
1051 |
- oswald_write_string(2, 29, FONT_DROID8x12, "Oswald"); |
|
1052 |
- oswald_write_string(35, 29, FONT_DROID8x12, OSWALD_VERSION); |
|
1053 |
- oswald_write_string(2, 41, FONT_DROID8x12, "HAL"); |
|
1054 |
- oswald_write_string(35, 41, FONT_DROID8x12, (char *)hal_get_version_string()); |
|
1055 |
- oswald_write_string(2, 53, FONT_DROID8x12, "Build"); |
|
1056 |
- oswald_write_string(35, 53, FONT_DROID8x12, (char *)hal_get_buildno_string()); |
|
1057 |
- oswald_write_string(2, 65, FONT_DROID8x12, "Radio"); |
|
1058 |
- oswald_write_string(35, 65, FONT_DROID8x12, (char *)hal_get_radio_version_string()); |
|
1244 |
+ oswald_draw_bitmap(81, 70, enterbutton_icon_width, enterbutton_icon_height, enterbutton_icon_bits); |
|
1245 |
+ |
|
1246 |
+ oswald_write_string(2, 29, FONT_DROID8x12, FALSE, "Oswald"); |
|
1247 |
+ oswald_write_string(35, 29, FONT_DROID8x12, FALSE, OSWALD_VERSION); |
|
1248 |
+ oswald_write_string(2, 41, FONT_DROID8x12, FALSE, "HAL"); |
|
1249 |
+ oswald_write_string(35, 41, FONT_DROID8x12, FALSE, (char *)hal_get_version_string()); |
|
1250 |
+ oswald_write_string(2, 53, FONT_DROID8x12, FALSE, "Build"); |
|
1251 |
+ oswald_write_string(35, 53, FONT_DROID8x12, FALSE, (char *)hal_get_buildno_string()); |
|
1252 |
+ oswald_write_string(2, 65, FONT_DROID8x12, FALSE, "Radio"); |
|
1253 |
+ oswald_write_string(35, 65, FONT_DROID8x12, FALSE, (char *)hal_get_radio_version_string()); |
|
1059 | 1254 |
|
1060 | 1255 |
hal_lcd_update_display(); |
1061 | 1256 |
} |
... | ... |
@@ -1064,7 +1259,7 @@ event_ret_t info_screen_handle_events(uint16_t event, void *data) |
1064 | 1259 |
{ |
1065 | 1260 |
switch (event) { |
1066 | 1261 |
case EVENT_SCREEN_VISIBLE: |
1067 |
- draw_info_screen(&accel_screen.accdata); |
|
1262 |
+ draw_info_screen(); |
|
1068 | 1263 |
return EVENT_RET_HANDLED; |
1069 | 1264 |
break; |
1070 | 1265 |
case EVENT_USER_BUTTONS: |
... | ... |
@@ -1077,3 +1272,248 @@ event_ret_t info_screen_handle_events(uint16_t event, void *data) |
1077 | 1272 |
return EVENT_RET_UNHANDLED; |
1078 | 1273 |
} |
1079 | 1274 |
|
1275 |
+ |
|
1276 |
+/* |
|
1277 |
+ * Messages Screens |
|
1278 |
+ */ |
|
1279 |
+typedef struct { |
|
1280 |
+ int8_t pos; // marker position |
|
1281 |
+ int8_t offset; // offset in msg list |
|
1282 |
+} messages_data_t; |
|
1283 |
+static messages_data_t messages_screen = { |
|
1284 |
+ 0, |
|
1285 |
+ 0, |
|
1286 |
+}; |
|
1287 |
+ |
|
1288 |
+typedef struct { |
|
1289 |
+ uint8_t day; |
|
1290 |
+ uint8_t month; |
|
1291 |
+ uint8_t year; // without century, add +1900 |
|
1292 |
+ uint8_t hour; |
|
1293 |
+ uint8_t minute; |
|
1294 |
+} msg_timedate_t; |
|
1295 |
+ |
|
1296 |
+#define MSG_TYPE_READ 0 |
|
1297 |
+#define MSG_TYPE_NEW 1 |
|
1298 |
+#define MSG_TYPE_END 127 |
|
1299 |
+ |
|
1300 |
+typedef struct { |
|
1301 |
+ uint8_t type; |
|
1302 |
+ msg_timedate_t td; |
|
1303 |
+ char *msg; |
|
1304 |
+} message_t; |
|
1305 |
+ |
|
1306 |
+uint8_t Msgs = 15; |
|
1307 |
+message_t Msg[] = { |
|
1308 |
+ { MSG_TYPE_READ, {9,5,113,0,38}, "Testmessage with more text than fits into the menu." }, |
|
1309 |
+ { MSG_TYPE_NEW, {9,5,113,0,39}, "Sitting in the train waiting to arrive." }, |
|
1310 |
+ { MSG_TYPE_READ, {9,5,113,0,40}, "People in the train are annoying!" }, |
|
1311 |
+ { MSG_TYPE_READ, {9,5,113,0,40}, "Auch auf Deutsch geht das hier und Text können lang sein." }, |
|
1312 |
+ { MSG_TYPE_NEW, {8,5,113,0,40}, "Und hier noch eine neue Nachricht, die nun wirklich lang ist, laenger als die anderen." }, |
|
1313 |
+ { MSG_TYPE_READ, {9,5,113,0,38}, "Testmessage with more text than fits into the menu." }, |
|
1314 |
+ { MSG_TYPE_NEW, {9,5,113,0,39}, "Sitting in the train waiting to arrive." }, |
|
1315 |
+ { MSG_TYPE_READ, {9,5,113,0,40}, "People in the train are annoying!" }, |
|
1316 |
+ { MSG_TYPE_READ, {9,5,113,0,40}, "Auch auf Deutsch geht das hier und Text können lang sein." }, |
|
1317 |
+ { MSG_TYPE_NEW, {8,5,113,0,40}, "Und hier noch eine neue Nachricht, die nun wirklich lang ist, laenger als die anderen." }, |
|
1318 |
+ { MSG_TYPE_READ, {9,5,113,0,38}, "Testmessage with more text than fits into the menu." }, |
|
1319 |
+ { MSG_TYPE_NEW, {9,5,113,0,39}, "Sitting in the train waiting to arrive." }, |
|
1320 |
+ { MSG_TYPE_READ, {9,5,113,0,40}, "People in the train are annoying!" }, |
|
1321 |
+ { MSG_TYPE_READ, {9,5,113,0,40}, "Auch auf Deutsch geht das hier und Text können lang sein." }, |
|
1322 |
+ { MSG_TYPE_NEW, {8,5,113,0,40}, "Und hier noch eine neue Nachricht, die nun wirklich lang ist, laenger als die anderen." }, |
|
1323 |
+ { MSG_TYPE_END, {0,0,0,0,0}, "Exit" }, |
|
1324 |
+}; |
|
1325 |
+ |
|
1326 |
+void draw_message_screen(messages_data_t *sdata) |
|
1327 |
+{ |
|
1328 |
+ char dstr[32]; |
|
1329 |
+ uint8_t strpos, msglen; |
|
1330 |
+ uint8_t line; |
|
1331 |
+ |
|
1332 |
+ hal_lcd_clear_display(); |
|
1333 |
+ |
|
1334 |
+#if 0 |
|
1335 |
+ oswald_draw_bitmap(81, 6, upbutton_icon_width, upbutton_icon_height, upbutton_icon_bits); |
|
1336 |
+ oswald_draw_bitmap(81, 38, downbutton_icon_width, downbutton_icon_height, downbutton_icon_bits); |
|
1337 |
+#endif |
|
1338 |
+ oswald_draw_bitmap(81, 70, enterbutton_icon_width, enterbutton_icon_height, enterbutton_icon_bits); |
|
1339 |
+ |
|
1340 |
+ Msg[sdata->offset + sdata->pos].type = MSG_TYPE_READ; |
|
1341 |
+ snprintf(dstr, 19, "#%02d/%02d", sdata->pos + sdata->offset + 1, Msgs); |
|
1342 |
+ oswald_write_string(30, 0, FONT_5x7, FALSE, dstr); |
|
1343 |
+ oswald_draw_line(0,7,95,7); |
|
1344 |
+ |
|
1345 |
+ |
|
1346 |
+ // here goes the text |
|
1347 |
+ msglen = strlen(Msg[sdata->pos+sdata->offset].msg); |
|
1348 |
+ strpos=0; |
|
1349 |
+ line=0; |
|
1350 |
+ while ((strpos < msglen) && (line < 6)) { |
|
1351 |
+ strpos += oswald_write_string_length(4, 9+(line*12), 84, FONT_DROID8x12, FALSE, &Msg[sdata->pos+sdata->offset].msg[strpos]); |
|
1352 |
+ line++; |
|
1353 |
+ } |
|
1354 |
+ |
|
1355 |
+ |
|
1356 |
+ oswald_draw_line(0,87,95,87); |
|
1357 |
+ |
|
1358 |
+ if (Msg[sdata->offset + sdata->pos].type != MSG_TYPE_END) { |
|
1359 |
+ snprintf(dstr, 19, "%c %02d.%02d.%04d,%02d:%02d", (Msg[sdata->pos+sdata->offset].type == MSG_TYPE_NEW) ? '*':' ', Msg[sdata->pos+sdata->offset].td.day, Msg[sdata->pos+sdata->offset].td.month, Msg[sdata->pos+sdata->offset].td.year+1900, Msg[sdata->pos+sdata->offset].td.hour, Msg[sdata->pos+sdata->offset].td.minute); |
|
1360 |
+ oswald_write_string(2, 89, FONT_5x7, FALSE, dstr); |
|
1361 |
+ } |
|
1362 |
+ |
|
1363 |
+ hal_lcd_update_display(); |
|
1364 |
+} |
|
1365 |
+ |
|
1366 |
+event_ret_t handle_message_screen_buttons(watch_button button, messages_data_t *sdata) |
|
1367 |
+{ |
|
1368 |
+ switch (button) { |
|
1369 |
+ case BUTTON_A: |
|
1370 |
+ break; |
|
1371 |
+ case BUTTON_B: |
|
1372 |
+ return EVENT_RET_HANDLED; |
|
1373 |
+ break; |
|
1374 |
+ case BUTTON_C: |
|
1375 |
+ // OswaldState.screen->event_func(EVENT_SCREEN_DESTROY, NULL); |
|
1376 |
+ OswaldState.screen_id = MESSAGES_SCREEN; |
|
1377 |
+ OswaldState.screen = &OswaldScreens[OswaldState.screen_id]; |
|
1378 |
+ OswaldState.screen->event_func(EVENT_SCREEN_VISIBLE, NULL); |
|
1379 |
+ return EVENT_RET_HANDLED; |
|
1380 |
+ break; |
|
1381 |
+ default: |
|
1382 |
+ break; |
|
1383 |
+ } |
|
1384 |
+ |
|
1385 |
+ return EVENT_RET_UNHANDLED; |
|
1386 |
+} |
|
1387 |
+ |
|
1388 |
+event_ret_t message_screen_handle_events(uint16_t event, void *data) |
|
1389 |
+{ |
|
1390 |
+ switch (event) { |
|
1391 |
+ case EVENT_SCREEN_VISIBLE: |
|
1392 |
+ draw_message_screen(&messages_screen); |
|
1393 |
+ return EVENT_RET_HANDLED; |
|
1394 |
+ break; |
|
1395 |
+ case EVENT_USER_BUTTONS: |
|
1396 |
+ dbg_out("button event %d\n", *(int *)data); |
|
1397 |
+ return handle_message_screen_buttons(*(watch_button *)data, &messages_screen); |
|
1398 |
+ break; |
|
1399 |
+ default: |
|
1400 |
+ break; |
|
1401 |
+ }; |
|
1402 |
+ return EVENT_RET_UNHANDLED; |
|
1403 |
+} |
|
1404 |
+ |
|
1405 |
+void draw_messages_screen(messages_data_t *sdata) |
|
1406 |
+{ |
|
1407 |
+ char dstr[32]; |
|
1408 |
+ int i; |
|
1409 |
+ |
|
1410 |
+ hal_lcd_clear_display(); |
|
1411 |
+ |
|
1412 |
+ // oswald_draw_bitmap(36, 0, Message_icon_width, Message_icon_height, Message_icon_bits); |
|
1413 |
+ |
|
1414 |
+ oswald_draw_bitmap(81, 6, upbutton_icon_width, upbutton_icon_height, upbutton_icon_bits); |
|
1415 |
+ oswald_draw_bitmap(81, 38, downbutton_icon_width, downbutton_icon_height, downbutton_icon_bits); |
|
1416 |
+ oswald_draw_bitmap(81, 70, enterbutton_icon_width, enterbutton_icon_height, enterbutton_icon_bits); |
|
1417 |
+ |
|
1418 |
+ if (Msg[sdata->offset + sdata->pos].type != MSG_TYPE_END) { |
|
1419 |
+ snprintf(dstr, 19, "#%02d/%02d", sdata->pos + sdata->offset + 1, Msgs); |
|
1420 |
+ oswald_write_string(30, 0, FONT_5x7, FALSE, dstr); |
|
1421 |
+ } |
|
1422 |
+ oswald_draw_line(0,7,95,7); |
|
1423 |
+ |
|
1424 |
+ for (i=0; i<6; i++) { |
|
1425 |
+ if (Msg[i+sdata->offset].type != MSG_TYPE_END) { |
|
1426 |
+ //oswald_write_string_length(4, 9+(i*12), 84, FONT_DROID8x12, (Msg[i+sdata->offset].type == MSG_TYPE_NEW), Msg[i+sdata->offset].msg); |
|
1427 |
+ if (Msg[i+sdata->offset].type == MSG_TYPE_NEW) |
|
1428 |
+ oswald_write_string_length(4, 9+(i*12), 84, FONT_DROID8x12b, (i+sdata->offset) == (sdata->offset + sdata->pos), Msg[i+sdata->offset].msg); |
|
1429 |
+ else |
|
1430 |
+ oswald_write_string_length(4, 9+(i*12), 84, FONT_DROID8x12, (i+sdata->offset) == (sdata->offset + sdata->pos), Msg[i+sdata->offset].msg); |
|
1431 |
+ } else { |
|
1432 |
+ oswald_draw_bitmap(0, 66, leftbutton_icon_width, leftbutton_icon_height, leftbutton_icon_bits); |
|
1433 |
+ } |
|
1434 |
+ } |
|
1435 |
+ |
|
1436 |
+ // marker selected msg |
|
1437 |
+ oswald_draw_line(1,9,1,81); |
|
1438 |
+ oswald_draw_line_ww(1,10+(sdata->pos*12),1,20+(sdata->pos*12),2); |
|
1439 |
+ |
|
1440 |
+ oswald_draw_line(0,87,95,87); |
|
1441 |
+ |
|
1442 |
+ if (Msg[sdata->offset + sdata->pos].type != MSG_TYPE_END) { |
|
1443 |
+ snprintf(dstr, 19, "%c %02d.%02d.%04d,%02d:%02d", (Msg[sdata->pos+sdata->offset].type == MSG_TYPE_NEW) ? '*':' ', Msg[sdata->pos+sdata->offset].td.day, Msg[sdata->pos+sdata->offset].td.month, Msg[sdata->pos+sdata->offset].td.year+1900, Msg[sdata->pos+sdata->offset].td.hour, Msg[sdata->pos+sdata->offset].td.minute); |
|
1444 |
+ oswald_write_string(2, 89, FONT_5x7, FALSE, dstr); |
|
1445 |
+ } |
|
1446 |
+ |
|
1447 |
+ hal_lcd_update_display(); |
|
1448 |
+} |
|
1449 |
+ |
|
1450 |
+event_ret_t handle_messages_screen_buttons(watch_button button, messages_data_t *sdata) |
|
1451 |
+{ |
|
1452 |
+ switch (button) { |
|
1453 |
+ case BUTTON_A: |
|
1454 |
+ sdata->pos--; |
|
1455 |
+ if (sdata->pos < 0) { |
|
1456 |
+ if (sdata->offset > 0) { |
|
1457 |
+ sdata->pos = 0; |
|
1458 |
+ sdata->offset--; |
|
1459 |
+ if (sdata->offset < 0) |
|
1460 |
+ sdata->offset = 0; |
|
1461 |
+ } else { |
|
1462 |
+ sdata->pos = 5; |
|
1463 |
+ sdata->offset = (Msgs - 5); |
|
1464 |
+ if (sdata->offset < 0) |
|
1465 |
+ sdata->offset = 0; |
|
1466 |
+ } |
|
1467 |
+ } |
|
1468 |
+ draw_messages_screen(&messages_screen); |
|
1469 |
+ return EVENT_RET_HANDLED; |
|
1470 |
+ break; |
|
1471 |
+ case BUTTON_B: |
|
1472 |
+ sdata->pos++; |
|
1473 |
+ if (sdata->pos > 5) { |
|
1474 |
+ sdata->pos = 5; |
|
1475 |
+ sdata->offset++; |
|
1476 |
+ if ((sdata->offset + 5) > Msgs) { |
|
1477 |
+ sdata->offset = 0; |
|
1478 |
+ sdata->pos = 0; |
|
1479 |
+ } |
|
1480 |
+ } |
|
1481 |
+ draw_messages_screen(&messages_screen); |
|
1482 |
+ return EVENT_RET_HANDLED; |
|
1483 |
+ break; |
|
1484 |
+ case BUTTON_C: |
|
1485 |
+ if (Msg[sdata->offset + sdata->pos].type == MSG_TYPE_END) |
|
1486 |
+ return EVENT_RET_UNHANDLED; |
|
1487 |
+ else |
|
1488 |
+ // OswaldState.screen->event_func(EVENT_SCREEN_DESTROY, NULL); |
|
1489 |
+ OswaldState.screen_id = MESSAGE_SCREEN; |
|
1490 |
+ OswaldState.screen = &OswaldScreens[OswaldState.screen_id]; |
|
1491 |
+ OswaldState.screen->event_func(EVENT_SCREEN_VISIBLE, NULL); |
|
1492 |
+ return EVENT_RET_HANDLED; |
|
1493 |
+ break; |
|
1494 |
+ default: |
|
1495 |
+ break; |
|
1496 |
+ } |
|
1497 |
+ |
|
1498 |
+ return EVENT_RET_UNHANDLED; |
|
1499 |
+} |
|
1500 |
+ |
|
1501 |
+event_ret_t messages_screen_handle_events(uint16_t event, void *data) |
|
1502 |
+{ |
|
1503 |
+ switch (event) { |
|
1504 |
+ case EVENT_SCREEN_VISIBLE: |
|
1505 |
+// messages_screen.pos = 0; |
|
1506 |
+// messages_screen.offset = 0; |
|
1507 |
+ draw_messages_screen(&messages_screen); |
|
1508 |
+ return EVENT_RET_HANDLED; |
|
1509 |
+ break; |
|
1510 |
+ case EVENT_USER_BUTTONS: |
|
1511 |
+ dbg_out("button event %d\n", *(int *)data); |
|
1512 |
+ return handle_messages_screen_buttons(*(watch_button *)data, &messages_screen); |
|
1513 |
+ break; |
|
1514 |
+ default: |
|
1515 |
+ break; |
|
1516 |
+ }; |
|
1517 |
+ return EVENT_RET_UNHANDLED; |
|
1518 |
+} |
|
1519 |
+ |
... | ... |
@@ -165,7 +165,7 @@ void draw_accel_screen(accel_data_t *accel_data) |
165 | 165 |
oswald_draw_line(40, 82, 40, 30); |
166 | 166 |
|
167 | 167 |
x = 41+25+((accel_data->x * 50) / (254)); |
168 |
- y = 31+25+((accel_data->y * 50) / (254)); |
|
168 |
+ y = 31+25-((accel_data->y * 50) / (254)); |
|
169 | 169 |
oswald_draw_pixel(x, y); |
170 | 170 |
oswald_draw_pixel(x+1, y); |
171 | 171 |
oswald_draw_pixel(x-1, y); |
... | ... |
@@ -853,8 +853,7 @@ event_ret_t alarm_handle_events(uint16_t event, void *data) |
853 | 853 |
break; |
854 | 854 |
case EVENT_USER_BUTTONS: |
855 | 855 |
dbg_out("button event %d\n", *(int *)data); |
856 |
- // hal_lcd_set_backlight(FALSE); |
|
857 |
- return EVENT_RET_HANDLED; |
|
856 |
+ return EVENT_RET_UNHANDLED; |
|
858 | 857 |
break; |
859 | 858 |
case EVENT_HALF_SEC_TIMER: |
860 | 859 |
hal_lcd_set_backlight(!hal_lcd_get_backlight()); |
... | ... |
@@ -143,6 +143,8 @@ static accelscreen_data_t accel_screen = { |
143 | 143 |
|
144 | 144 |
void draw_accel_screen(accel_data_t *accel_data) |
145 | 145 |
{ |
146 |
+ uint8_t x,y; |
|
147 |
+ |
|
146 | 148 |
hal_lcd_clear_display(); |
147 | 149 |
|
148 | 150 |
oswald_draw_bitmap(36, 0, acc_icon_width, acc_icon_height, acc_icon_bits); |
... | ... |
@@ -162,7 +164,13 @@ void draw_accel_screen(accel_data_t *accel_data) |
162 | 164 |
oswald_draw_line(40, 82, 92, 82); |
163 | 165 |
oswald_draw_line(40, 82, 40, 30); |
164 | 166 |
|
165 |
- oswald_draw_pixel(41+25+((accel_data->x * 50) / (254)), 31+25+((accel_data->y * 50) / (254))); |
|
167 |
+ x = 41+25+((accel_data->x * 50) / (254)); |
|
168 |
+ y = 31+25+((accel_data->y * 50) / (254)); |
|
169 |
+ oswald_draw_pixel(x, y); |
|
170 |
+ oswald_draw_pixel(x+1, y); |
|
171 |
+ oswald_draw_pixel(x-1, y); |
|
172 |
+ oswald_draw_pixel(x, y+1); |
|
173 |
+ oswald_draw_pixel(x, y-1); |
|
166 | 174 |
|
167 | 175 |
hal_lcd_update_display(); |
168 | 176 |
} |
... | ... |
@@ -172,6 +180,11 @@ event_ret_t accel_handle_events(uint16_t event, void *data) |
172 | 180 |
switch (event) { |
173 | 181 |
case EVENT_SCREEN_VISIBLE: |
174 | 182 |
draw_accel_screen(&accel_screen.accdata); |
183 |
+ hal_accelerometer_enable(); |
|
184 |
+ return EVENT_RET_HANDLED; |
|
185 |
+ break; |
|
186 |
+ case EVENT_SCREEN_DESTROY: |
|
187 |
+ hal_accelerometer_disable(); |
|
175 | 188 |
return EVENT_RET_HANDLED; |
176 | 189 |
break; |
177 | 190 |
case EVENT_ACCEL_UPDATE: { |
... | ... |
@@ -48,7 +48,21 @@ __attribute__((__far__)) |
48 | 48 |
#endif |
49 | 49 |
#include "bitmaps/Bluetooth_icon.xbm" |
50 | 50 |
|
51 |
+#if defined(__GNUC__) && (__MSP430X__ > 0) |
|
52 |
+__attribute__((__far__)) |
|
53 |
+#endif |
|
54 |
+#include "bitmaps/info_icon.xbm" |
|
55 |
+ |
|
56 |
+#if defined(__GNUC__) && (__MSP430X__ > 0) |
|
57 |
+__attribute__((__far__)) |
|
58 |
+#endif |
|
59 |
+#include "bitmaps/acc_icon.xbm" |
|
60 |
+ |
|
61 |
+ |
|
51 | 62 |
|
63 |
+/* |
|
64 |
+ * Common event handler part of the watch faces |
|
65 |
+ */ |
|
52 | 66 |
typedef struct { |
53 | 67 |
void (*screendraw_func)(boolean show_seconds); |
54 | 68 |
boolean show_seconds; |
... | ... |
@@ -117,6 +131,9 @@ event_ret_t idle_handle_events(uint16_t event, void *data) |
117 | 131 |
} |
118 | 132 |
|
119 | 133 |
|
134 |
+/* |
|
135 |
+ * Accelerometer and sensor display screen |
|
136 |
+ */ |
|
120 | 137 |
typedef struct { |
121 | 138 |
accel_data_t accdata; |
122 | 139 |
} accelscreen_data_t; |
... | ... |
@@ -128,15 +145,24 @@ void draw_accel_screen(accel_data_t *accel_data) |
128 | 145 |
{ |
129 | 146 |
hal_lcd_clear_display(); |
130 | 147 |
|
131 |
- oswald_write_string(0, 2, FONT_6x9, "X:"); |
|
132 |
- oswald_write_number(20, 2, FONT_6x9, accel_data->x); |
|
133 |
- oswald_write_string(0, 16, FONT_6x9, "Y:"); |
|
134 |
- oswald_write_number(20, 16, FONT_6x9, accel_data->y); |
|
135 |
- oswald_write_string(0, 32, FONT_6x9, "Z:"); |
|
136 |
- oswald_write_number(20, 32, FONT_6x9, accel_data->z); |
|
148 |
+ oswald_draw_bitmap(36, 0, acc_icon_width, acc_icon_height, acc_icon_bits); |
|
149 |
+ |
|
150 |
+ oswald_write_string(1, 40, FONT_6x9, "X:"); |
|
151 |
+ oswald_write_number(15, 40, FONT_6x9, accel_data->x); |
|
152 |
+ oswald_write_string(1, 52, FONT_6x9, "Y:"); |
|
153 |
+ oswald_write_number(15, 52, FONT_6x9, accel_data->y); |
|
154 |
+ oswald_write_string(1, 64, FONT_6x9, "Z:"); |
|
155 |
+ oswald_write_number(15, 64, FONT_6x9, accel_data->z); |
|
156 |
+ |
|
157 |
+ oswald_write_string(1, 85, FONT_6x9, "Light:"); |
|
158 |
+ oswald_write_number(50, 85, FONT_6x9, 0); |
|
137 | 159 |
|
138 |
- oswald_write_string(0, 54, FONT_6x9, "Light:"); |
|
139 |
- oswald_write_number(50, 54, FONT_6x9, accel_data->z); |
|
160 |
+ oswald_draw_line(40, 30, 92, 30); |
|
161 |
+ oswald_draw_line(92, 30, 92, 82); |
|
162 |
+ oswald_draw_line(40, 82, 92, 82); |
|
163 |
+ oswald_draw_line(40, 82, 40, 30); |
|
164 |
+ |
|
165 |
+ oswald_draw_pixel(41+25+((accel_data->x * 50) / (254)), 31+25+((accel_data->y * 50) / (254))); |
|
140 | 166 |
|
141 | 167 |
hal_lcd_update_display(); |
142 | 168 |
} |
... | ... |
@@ -168,6 +194,9 @@ event_ret_t accel_handle_events(uint16_t event, void *data) |
168 | 194 |
} |
169 | 195 |
|
170 | 196 |
|
197 |
+/* |
|
198 |
+ * Date / time setup screen |
|
199 |
+ */ |
|
171 | 200 |
typedef struct { |
172 | 201 |
uint8_t pos; |
173 | 202 |
boolean set_mode; |
... | ... |
@@ -366,9 +395,8 @@ event_ret_t datetime_setup_events(uint16_t event, void *data) |
366 | 395 |
|
367 | 396 |
|
368 | 397 |
/* |
369 |
- * Alarm setup |
|
398 |
+ * Alarm setup screen |
|
370 | 399 |
*/ |
371 |
- |
|
372 | 400 |
typedef struct { |
373 | 401 |
uint8_t pos; |
374 | 402 |
boolean set_mode; |
... | ... |
@@ -550,7 +578,6 @@ event_ret_t alarm_setup_events(uint16_t event, void *data) |
550 | 578 |
/* |
551 | 579 |
* Test menu |
552 | 580 |
*/ |
553 |
- |
|
554 | 581 |
typedef struct { |
555 | 582 |
uint8_t menu_pos; |
556 | 583 |
} test_menu_t; |
... | ... |
@@ -625,7 +652,6 @@ event_ret_t test_menu_handle_events(uint16_t event, void *data) |
625 | 652 |
/* |
626 | 653 |
* Stop Watch |
627 | 654 |
*/ |
628 |
- |
|
629 | 655 |
typedef struct { |
630 | 656 |
uint8_t hr; |
631 | 657 |
uint8_t min; |
... | ... |
@@ -786,7 +812,7 @@ event_ret_t stop_watch_handle_events(uint16_t event, void *data) |
786 | 812 |
|
787 | 813 |
|
788 | 814 |
/* |
789 |
- * when alarm is fired |
|
815 |
+ * Alarm screen, shown when alarm is fired |
|
790 | 816 |
*/ |
791 | 817 |
void draw_alarm_screen(void) |
792 | 818 |
{ |
... | ... |
@@ -832,7 +858,7 @@ event_ret_t alarm_handle_events(uint16_t event, void *data) |
832 | 858 |
|
833 | 859 |
|
834 | 860 |
/* |
835 |
- * Bluetooth screen |
|
861 |
+ * Bluetooth setup screen |
|
836 | 862 |
*/ |
837 | 863 |
typedef struct { |
838 | 864 |
uint8_t pos; |
... | ... |
@@ -1000,3 +1026,42 @@ event_ret_t bluetooth_screen_events(uint16_t event, void *data) |
1000 | 1026 |
return EVENT_RET_HANDLED; |
1001 | 1027 |
} |
1002 | 1028 |
|
1029 |
+ |
|
1030 |
+/* |
|
1031 |
+ * Info Screen |
|
1032 |
+ */ |
|
1033 |
+void draw_info_screen(accel_data_t *accel_data) |
|
1034 |
+{ |
|
1035 |
+ hal_lcd_clear_display(); |
|
1036 |
+ |
|
1037 |
+ oswald_draw_bitmap(36, 0, info_icon_width, info_icon_height, info_icon_bits); |
|
1038 |
+ |
|
1039 |
+ oswald_write_string(2, 29, FONT_DROID8x12, "Oswald"); |
|
1040 |
+ oswald_write_string(35, 29, FONT_DROID8x12, OSWALD_VERSION); |
|
1041 |
+ oswald_write_string(2, 41, FONT_DROID8x12, "HAL"); |
|
1042 |
+ oswald_write_string(35, 41, FONT_DROID8x12, (char *)hal_get_version_string()); |
|
1043 |
+ oswald_write_string(2, 53, FONT_DROID8x12, "Build"); |
|
1044 |
+ oswald_write_string(35, 53, FONT_DROID8x12, (char *)hal_get_buildno_string()); |
|
1045 |
+ oswald_write_string(2, 65, FONT_DROID8x12, "Radio"); |
|
1046 |
+ oswald_write_string(35, 65, FONT_DROID8x12, (char *)hal_get_radio_version_string()); |
|
1047 |
+ |
|
1048 |
+ hal_lcd_update_display(); |
|
1049 |
+} |
|
1050 |
+ |
|
1051 |
+event_ret_t info_screen_handle_events(uint16_t event, void *data) |
|
1052 |
+{ |
|
1053 |
+ switch (event) { |
|
1054 |
+ case EVENT_SCREEN_VISIBLE: |
|
1055 |
+ draw_info_screen(&accel_screen.accdata); |
|
1056 |
+ return EVENT_RET_HANDLED; |
|
1057 |
+ break; |
|
1058 |
+ case EVENT_USER_BUTTONS: |
|
1059 |
+ dbg_out("button event %d\n", *(int *)data); |
|
1060 |
+ break; |
|
1061 |
+ default: |
|
1062 |
+ return EVENT_RET_UNHANDLED; |
|
1063 |
+ break; |
|
1064 |
+ }; |
|
1065 |
+ return EVENT_RET_UNHANDLED; |
|
1066 |
+} |
|
1067 |
+ |
... | ... |
@@ -219,18 +219,18 @@ void draw_datetime_setup_screen(datetime_setup_data_t *sdata) |
219 | 219 |
|
220 | 220 |
if ((sdata->pos == 6 && sdata->on) || sdata->pos != 6) { |
221 | 221 |
if (OswaldClk.clk24hr) { |
222 |
- oswald_write_character(2, 76, FONT_DROID8x12, 'x'); |
|
222 |
+ oswald_write_character(2, 76, FONT_6x9, 'x'); |
|
223 | 223 |
} else { |
224 |
- oswald_write_character(2, 76, FONT_DROID8x12, '_'); |
|
224 |
+ oswald_write_character(2, 76, FONT_6x9, '_'); |
|
225 | 225 |
} |
226 | 226 |
} |
227 | 227 |
oswald_write_string(15, 73, FONT_DROID8x12, "24hr"); |
228 | 228 |
|
229 | 229 |
if ((sdata->pos == 7 && sdata->on) || sdata->pos != 7) { |
230 | 230 |
if (OswaldClk.day_first) { |
231 |
- oswald_write_character(2, 87, FONT_DROID8x12, 'x'); |
|
231 |
+ oswald_write_character(2, 86, FONT_6x9, 'x'); |
|
232 | 232 |
} else { |
233 |
- oswald_write_character(2, 87, FONT_DROID8x12, '_'); |
|
233 |
+ oswald_write_character(2, 86, FONT_6x9, '_'); |
|
234 | 234 |
} |
235 | 235 |
} |
236 | 236 |
oswald_write_string(15, 83, FONT_DROID8x12, "dd.mm. mm/dd"); |
... | ... |
@@ -8,37 +8,41 @@ |
8 | 8 |
|
9 | 9 |
#include "oswald_screens.h" |
10 | 10 |
|
11 |
-#include "LcdDisplay.h" |
|
12 |
-#include "Fonts.h" |
|
13 |
- |
|
14 | 11 |
#if defined(__GNUC__) && (__MSP430X__ > 0) |
15 | 12 |
__attribute__((__far__)) |
16 | 13 |
#endif |
17 | 14 |
#include "bitmaps/timesetup_icon.xbm" |
15 |
+ |
|
18 | 16 |
#if defined(__GNUC__) && (__MSP430X__ > 0) |
19 | 17 |
__attribute__((__far__)) |
20 | 18 |
#endif |
21 | 19 |
#include "bitmaps/stopwatch_icon.xbm" |
20 |
+ |
|
22 | 21 |
#if defined(__GNUC__) && (__MSP430X__ > 0) |
23 | 22 |
__attribute__((__far__)) |
24 | 23 |
#endif |
25 | 24 |
#include "bitmaps/alarm_icon.xbm" |
25 |
+ |
|
26 | 26 |
#if defined(__GNUC__) && (__MSP430X__ > 0) |
27 | 27 |
__attribute__((__far__)) |
28 | 28 |
#endif |
29 | 29 |
#include "bitmaps/startstopbutton_icon.xbm" |
30 |
+ |
|
30 | 31 |
#if defined(__GNUC__) && (__MSP430X__ > 0) |
31 | 32 |
__attribute__((__far__)) |
32 | 33 |
#endif |
33 | 34 |
#include "bitmaps/lapsebutton_icon.xbm" |
35 |
+ |
|
34 | 36 |
#if defined(__GNUC__) && (__MSP430X__ > 0) |
35 | 37 |
__attribute__((__far__)) |
36 | 38 |
#endif |
37 | 39 |
#include "bitmaps/upbutton_icon.xbm" |
40 |
+ |
|
38 | 41 |
#if defined(__GNUC__) && (__MSP430X__ > 0) |
39 | 42 |
__attribute__((__far__)) |
40 | 43 |
#endif |
41 | 44 |
#include "bitmaps/downbutton_icon.xbm" |
45 |
+ |
|
42 | 46 |
#if defined(__GNUC__) && (__MSP430X__ > 0) |
43 | 47 |
__attribute__((__far__)) |
44 | 48 |
#endif |
... | ... |
@@ -56,7 +60,7 @@ static idle_data_t idle_screen = { |
56 | 60 |
FALSE, |
57 | 61 |
}; |
58 | 62 |
|
59 |
-void idle_handle_user_buttons(watch_button button) |
|
63 |
+event_ret_t idle_handle_user_buttons(watch_button button) |
|
60 | 64 |
{ |
61 | 65 |
switch (button) { |
62 | 66 |
case BUTTON_A: |
... | ... |
@@ -74,32 +78,42 @@ void idle_handle_user_buttons(watch_button button) |
74 | 78 |
idle_screen.screendraw_func = DrawLcdAnaClock; |
75 | 79 |
}; |
76 | 80 |
break; |
81 |
+ case BUTTON_C: |
|
82 |
+ return EVENT_RET_UNHANDLED; |
|
83 |
+ break; |
|
77 | 84 |
case BUTTON_F: |
78 | 85 |
OswaldState.screen_id = DATETIME_SETTING_SCREEN; |
79 | 86 |
OswaldState.screen = &OswaldScreens[OswaldState.screen_id]; |
80 | 87 |
OswaldState.screen->event_func(EVENT_SCREEN_VISIBLE, NULL); |
81 |
- return; |
|
88 |
+ return EVENT_RET_HANDLED; |
|
82 | 89 |
break; |
83 | 90 |
default: |
91 |
+ return EVENT_RET_UNHANDLED; |
|
84 | 92 |
break; |
85 | 93 |
}; |
94 |
+ |
|
86 | 95 |
idle_screen.screendraw_func(idle_screen.show_seconds); |
96 |
+ |
|
97 |
+ return EVENT_RET_HANDLED; |
|
87 | 98 |
} |
88 | 99 |
|
89 |
-void idle_handle_events(u16t event, void *data) |
|
100 |
+event_ret_t idle_handle_events(uint16_t event, void *data) |
|
90 | 101 |
{ |
91 | 102 |
switch (event) { |
92 | 103 |
case EVENT_ONE_SEC_TIMER: |
93 | 104 |
case EVENT_SCREEN_VISIBLE: |
94 | 105 |
idle_screen.screendraw_func(idle_screen.show_seconds); |
106 |
+ return EVENT_RET_HANDLED; |
|
95 | 107 |
break; |
96 | 108 |
case EVENT_USER_BUTTONS: |
97 | 109 |
dbg_out("button event %d\n", *(int *)data); |
98 |
- idle_handle_user_buttons(*(watch_button *)data); |
|
110 |
+ return idle_handle_user_buttons(*(watch_button *)data); |
|
99 | 111 |
break; |
100 | 112 |
default: |
113 |
+ return EVENT_RET_UNHANDLED; |
|
101 | 114 |
break; |
102 | 115 |
}; |
116 |
+ return EVENT_RET_UNHANDLED; |
|
103 | 117 |
} |
104 | 118 |
|
105 | 119 |
|
... | ... |
@@ -114,27 +128,25 @@ void draw_accel_screen(accel_data_t *accel_data) |
114 | 128 |
{ |
115 | 129 |
hal_lcd_clear_display(); |
116 | 130 |
|
117 |
- oswald_write_string(0, 2, FONT_7x12b, "X:"); |
|
118 |
- oswald_write_number(20, 2, FONT_7x12b, accel_data->x); |
|
119 |
- oswald_write_string(0, 18, FONT_7x12b, "Y:"); |
|
120 |
- oswald_write_number(20, 18, FONT_7x12b, accel_data->y); |
|
121 |
-#if 0 |
|
122 |
- oswald_write_string(0, 34, FONT_8x12, "Z:"); |
|
123 |
- oswald_write_number(20, 34, FONT_8x12, accel_data->z); |
|
131 |
+ oswald_write_string(0, 2, FONT_6x9, "X:"); |
|
132 |
+ oswald_write_number(20, 2, FONT_6x9, accel_data->x); |
|
133 |
+ oswald_write_string(0, 16, FONT_6x9, "Y:"); |
|
134 |
+ oswald_write_number(20, 16, FONT_6x9, accel_data->y); |
|
135 |
+ oswald_write_string(0, 32, FONT_6x9, "Z:"); |
|
136 |
+ oswald_write_number(20, 32, FONT_6x9, accel_data->z); |
|
124 | 137 |
|
125 |
- oswald_write_string(0, 54, FONT_12x16, "Light:"); |
|
126 |
- oswald_write_number(50, 54, FONT_12x16, accel_data->z); |
|
138 |
+ oswald_write_string(0, 54, FONT_6x9, "Light:"); |
|
139 |
+ oswald_write_number(50, 54, FONT_6x9, accel_data->z); |
|
127 | 140 |
|
128 |
- oswald_write_string(0, 70, FONT_12x20, "23:59"); |
|
129 |
-#endif |
|
130 | 141 |
hal_lcd_update_display(); |
131 | 142 |
} |
132 | 143 |
|
133 |
-void accel_handle_events(u16t event, void *data) |
|
144 |
+event_ret_t accel_handle_events(uint16_t event, void *data) |
|
134 | 145 |
{ |
135 | 146 |
switch (event) { |
136 | 147 |
case EVENT_SCREEN_VISIBLE: |
137 | 148 |
draw_accel_screen(&accel_screen.accdata); |
149 |
+ return EVENT_RET_HANDLED; |
|
138 | 150 |
break; |
139 | 151 |
case EVENT_ACCEL_UPDATE: { |
140 | 152 |
accel_data_t *accel_data = (accel_data_t *)data; |
... | ... |
@@ -143,22 +155,27 @@ void accel_handle_events(u16t event, void *data) |
143 | 155 |
accel_screen.accdata.z = accel_data->z; |
144 | 156 |
draw_accel_screen(&accel_screen.accdata); |
145 | 157 |
}; |
158 |
+ return EVENT_RET_HANDLED; |
|
146 | 159 |
break; |
147 | 160 |
case EVENT_USER_BUTTONS: |
148 | 161 |
dbg_out("button event %d\n", *(int *)data); |
149 | 162 |
break; |
150 | 163 |
default: |
164 |
+ return EVENT_RET_UNHANDLED; |
|
151 | 165 |
break; |
152 | 166 |
}; |
167 |
+ return EVENT_RET_UNHANDLED; |
|
153 | 168 |
} |
154 | 169 |
|
155 | 170 |
|
156 | 171 |
typedef struct { |
157 |
- u8t pos; |
|
172 |
+ uint8_t pos; |
|
173 |
+ boolean set_mode; |
|
158 | 174 |
boolean on; |
159 | 175 |
} datetime_setup_data_t; |
160 | 176 |
static datetime_setup_data_t dt_setup_screen = { |
161 | 177 |
0, |
178 |
+ FALSE, |
|
162 | 179 |
TRUE |
163 | 180 |
}; |
164 | 181 |
|
... | ... |
@@ -171,58 +188,57 @@ void draw_datetime_setup_screen(datetime_setup_data_t *sdata) |
171 | 188 |
oswald_draw_bitmap(81, 6, upbutton_icon_width, upbutton_icon_height, upbutton_icon_bits); |
172 | 189 |
oswald_draw_bitmap(81, 38, downbutton_icon_width, downbutton_icon_height, downbutton_icon_bits); |
173 | 190 |
|
174 |
- SetFont(MetaWatchTime); |
|
175 | 191 |
if ((sdata->pos == 0 && sdata->on) || sdata->pos != 0) { |
176 |
- WriteLcdCharacter(2, 30, (OswaldClk.hour / 10)); |
|
177 |
- WriteLcdCharacter(14, 30, (OswaldClk.hour % 10)); |
|
192 |
+ oswald_write_character(2, 30, FONT_LCD13x21, (OswaldClk.hour / 10)); |
|
193 |
+ oswald_write_character(15, 30, FONT_LCD13x21, (OswaldClk.hour % 10)); |
|
178 | 194 |
} |
179 |
- WriteLcdCharacter(26, 30, TIME_CHARACTER_COLON_INDEX); |
|
195 |
+ oswald_write_character(25, 30, FONT_LCD13x21, 10); |
|
180 | 196 |
|
181 | 197 |
if ((sdata->pos == 1 && sdata->on) || sdata->pos != 1) { |
182 |
- WriteLcdCharacter(31, 30, (OswaldClk.minute / 10)); |
|
183 |
- WriteLcdCharacter(43, 30, (OswaldClk.minute % 10)); |
|
198 |
+ oswald_write_character(34, 30, FONT_LCD13x21, (OswaldClk.minute / 10)); |
|
199 |
+ oswald_write_character(47, 30, FONT_LCD13x21, (OswaldClk.minute % 10)); |
|
184 | 200 |
} |
185 | 201 |
|
186 |
- SetFont(MetaWatch16); |
|
187 | 202 |
if ((sdata->pos == 2 && sdata->on) || sdata->pos != 2) { |
188 |
- WriteLcdCharacter(59, 36, 0x30 + (OswaldClk.second / 10)); |
|
189 |
- WriteLcdCharacter(66, 36, 0x30 + (OswaldClk.second % 10)); |
|
203 |
+ oswald_write_character(61, 38, FONT_LCD8x13, (OswaldClk.second / 10)); |
|
204 |
+ oswald_write_character(69, 38, FONT_LCD8x13, (OswaldClk.second % 10)); |
|
190 | 205 |
} |
191 | 206 |
|
192 | 207 |
|
193 | 208 |
if ((sdata->pos == 3 && sdata->on) || sdata->pos != 3) { |
194 |
- WriteLcdNumber(2, 55, OswaldClk.day); |
|
209 |
+ oswald_write_number(2, 55, FONT_DROID8x12, OswaldClk.day); |
|
195 | 210 |
} |
196 |
- WriteLcdString(18, 55, "."); |
|
211 |
+ oswald_write_character(15, 55, FONT_DROID8x12, '.'); |
|
197 | 212 |
if ((sdata->pos == 4 && sdata->on) || sdata->pos != 4) { |
198 |
- WriteLcdNumber(22, 55, OswaldClk.month); |
|
213 |
+ oswald_write_number(21, 55, FONT_DROID8x12, OswaldClk.month); |
|
199 | 214 |
} |
200 |
- WriteLcdString(38, 55, "."); |
|
215 |
+ oswald_write_character(36, 55, FONT_DROID8x12, '.'); |
|
201 | 216 |
if ((sdata->pos == 5 && sdata->on) || sdata->pos != 5) { |
202 |
- WriteLcdNumber(42, 55, OswaldClk.year); |
|
217 |
+ oswald_write_number(43, 55, FONT_DROID8x12, OswaldClk.year); |
|
203 | 218 |
} |
204 | 219 |
|
205 |
- SetFont(MetaWatch7); |
|
206 | 220 |
if ((sdata->pos == 6 && sdata->on) || sdata->pos != 6) { |
207 |
- if (OswaldClk.clk24hr) |
|
208 |
- WriteLcdString(2, 76, "x"); |
|
209 |
- else |
|
210 |
- WriteLcdString(2, 76, "_"); |
|
221 |
+ if (OswaldClk.clk24hr) { |
|
222 |
+ oswald_write_character(2, 76, FONT_DROID8x12, 'x'); |
|
223 |
+ } else { |
|
224 |
+ oswald_write_character(2, 76, FONT_DROID8x12, '_'); |
|
225 |
+ } |
|
211 | 226 |
} |
212 |
- WriteLcdString(15, 76, "24hr"); |
|
227 |
+ oswald_write_string(15, 73, FONT_DROID8x12, "24hr"); |
|
213 | 228 |
|
214 | 229 |
if ((sdata->pos == 7 && sdata->on) || sdata->pos != 7) { |
215 |
- if (OswaldClk.day_first) |
|
216 |
- WriteLcdString(2, 89, "x"); |
|
217 |
- else |
|
218 |
- WriteLcdString(2, 89, "_"); |
|
230 |
+ if (OswaldClk.day_first) { |
|
231 |
+ oswald_write_character(2, 87, FONT_DROID8x12, 'x'); |
|
232 |
+ } else { |
|
233 |
+ oswald_write_character(2, 87, FONT_DROID8x12, '_'); |
|
234 |
+ } |
|
219 | 235 |
} |
220 |
- WriteLcdString(15, 89, "dd.mm. mm/dd"); |
|
236 |
+ oswald_write_string(15, 83, FONT_DROID8x12, "dd.mm. mm/dd"); |
|
221 | 237 |
|
222 | 238 |
hal_lcd_update_display(); |
223 | 239 |
} |
224 | 240 |
|
225 |
-void datetime_handle_updown(u8t pos, s8t incr) |
|
241 |
+void datetime_handle_updown(uint8_t pos, int8_t incr) |
|
226 | 242 |
{ |
227 | 243 |
switch (pos) { |
228 | 244 |
case 0: // hour |
... | ... |
@@ -288,7 +304,7 @@ void datetime_handle_updown(u8t pos, s8t incr) |
288 | 304 |
hal_set_rtc(&OswaldClk, FALSE); |
289 | 305 |
} |
290 | 306 |
|
291 |
-void handle_setup_datetime_buttons(watch_button button, datetime_setup_data_t *sdata) |
|
307 |
+event_ret_t handle_setup_datetime_buttons(watch_button button, datetime_setup_data_t *sdata) |
|
292 | 308 |
{ |
293 | 309 |
switch (button) { |
294 | 310 |
case BUTTON_A: |
... | ... |
@@ -297,30 +313,41 @@ void handle_setup_datetime_buttons(watch_button button, datetime_setup_data_t *s |
297 | 313 |
case BUTTON_B: |
298 | 314 |
datetime_handle_updown(sdata->pos, -1); |
299 | 315 |
break; |
300 |
- case BUTTON_F: |
|
316 |
+ case BUTTON_C: |
|
301 | 317 |
sdata->pos++; |
302 | 318 |
sdata->pos %= 8; |
303 | 319 |
break; |
320 |
+ case BUTTON_F: |
|
321 |
+ OswaldState.screen->event_func(EVENT_SCREEN_DESTROY, NULL); |
|
322 |
+ OswaldState.screen_id = IDLE_SCREEN; |
|
323 |
+ OswaldState.screen = &OswaldScreens[OswaldState.screen_id]; |
|
324 |
+ OswaldState.screen->event_func(EVENT_SCREEN_VISIBLE, NULL); |
|
325 |
+ return EVENT_RET_HANDLED; |
|
326 |
+ break; |
|
304 | 327 |
default: |
328 |
+ return EVENT_RET_UNHANDLED; |
|
305 | 329 |
break; |
306 | 330 |
} |
307 | 331 |
draw_datetime_setup_screen(sdata); |
332 |
+ return EVENT_RET_HANDLED; |
|
308 | 333 |
} |
309 | 334 |
|
310 |
-void datetime_setup_events(u16t event, void *data) |
|
335 |
+event_ret_t datetime_setup_events(uint16_t event, void *data) |
|
311 | 336 |
{ |
312 | 337 |
switch (event) { |
313 | 338 |
case EVENT_SCREEN_VISIBLE: |
314 | 339 |
dt_setup_screen.pos = 0; |
315 | 340 |
draw_datetime_setup_screen(&dt_setup_screen); |
316 | 341 |
hal_enable_halfsecond_timer(); |
342 |
+ return EVENT_RET_HANDLED; |
|
317 | 343 |
break; |
318 | 344 |
case EVENT_SCREEN_DESTROY: |
319 | 345 |
hal_disable_halfsecond_timer(); |
346 |
+ return EVENT_RET_HANDLED; |
|
320 | 347 |
break; |
321 | 348 |
case EVENT_USER_BUTTONS: |
322 | 349 |
dbg_out("button event %d\n", *(int *)data); |
323 |
- handle_setup_datetime_buttons(*(watch_button *)data, &dt_setup_screen); |
|
350 |
+ return handle_setup_datetime_buttons(*(watch_button *)data, &dt_setup_screen); |
|
324 | 351 |
break; |
325 | 352 |
case EVENT_HALF_SEC_TIMER: |
326 | 353 |
if (dt_setup_screen.on) |
... | ... |
@@ -328,10 +355,13 @@ void datetime_setup_events(u16t event, void *data) |
328 | 355 |
else |
329 | 356 |
dt_setup_screen.on = TRUE; |
330 | 357 |
draw_datetime_setup_screen(&dt_setup_screen); |
358 |
+ return EVENT_RET_HANDLED; |
|
331 | 359 |
break; |
332 | 360 |
default: |
361 |
+ return EVENT_RET_UNHANDLED; |
|
333 | 362 |
break; |
334 | 363 |
}; |
364 |
+ return EVENT_RET_UNHANDLED; |
|
335 | 365 |
} |
336 | 366 |
|
337 | 367 |
|
... | ... |
@@ -340,11 +370,13 @@ void datetime_setup_events(u16t event, void *data) |
340 | 370 |
*/ |
341 | 371 |
|
342 | 372 |
typedef struct { |
343 |
- u8t pos; |
|
373 |
+ uint8_t pos; |
|
374 |
+ boolean set_mode; |
|
344 | 375 |
boolean on; |
345 | 376 |
} alarm_setup_data_t; |
346 | 377 |
static alarm_setup_data_t alarm_setup_screen = { |
347 | 378 |
0, |
379 |
+ FALSE, |
|
348 | 380 |
TRUE |
349 | 381 |
}; |
350 | 382 |
|
... | ... |
@@ -357,46 +389,44 @@ void draw_alarm_setup_screen(alarm_setup_data_t *sdata) |
357 | 389 |
oswald_draw_bitmap(81, 6, upbutton_icon_width, upbutton_icon_height, upbutton_icon_bits); |
358 | 390 |
oswald_draw_bitmap(81, 38, downbutton_icon_width, downbutton_icon_height, downbutton_icon_bits); |
359 | 391 |
|
360 |
- SetFont(MetaWatchTime); |
|
361 | 392 |
if ((sdata->pos == 0 && sdata->on) || sdata->pos != 0) { |
362 |
- WriteLcdCharacter(22, 30, (OswaldAlarm.hour / 10)); |
|
363 |
- WriteLcdCharacter(34, 30, (OswaldAlarm.hour % 10)); |
|
393 |
+ oswald_write_character(18, 30, FONT_LCD13x21, (OswaldAlarm.hour / 10)); |
|
394 |
+ oswald_write_character(32, 30, FONT_LCD13x21, (OswaldAlarm.hour % 10)); |
|
364 | 395 |
} |
365 |
- WriteLcdCharacter(46, 30, TIME_CHARACTER_COLON_INDEX); |
|
396 |
+ oswald_write_character(42, 30, FONT_LCD13x21, 10); |
|
366 | 397 |
|
367 | 398 |
if ((sdata->pos == 1 && sdata->on) || sdata->pos != 1) { |
368 |
- WriteLcdCharacter(51, 30, (OswaldAlarm.minute / 10)); |
|
369 |
- WriteLcdCharacter(63, 30, (OswaldAlarm.minute % 10)); |
|
399 |
+ oswald_write_character(53, 30, FONT_LCD13x21, (OswaldAlarm.minute / 10)); |
|
400 |
+ oswald_write_character(67, 30, FONT_LCD13x21, (OswaldAlarm.minute % 10)); |
|
370 | 401 |
} |
371 | 402 |
|
372 |
- SetFont(MetaWatchMonospaced10); |
|
373 |
- WriteLcdCharacter(3, 55, 'S'); |
|
374 |
- WriteLcdCharacter(15, 55, 'M'); |
|
375 |
- WriteLcdCharacter(27, 55, 'T'); |
|
376 |
- WriteLcdCharacter(39, 55, 'W'); |
|
377 |
- WriteLcdCharacter(51, 55, 'T'); |
|
378 |
- WriteLcdCharacter(63, 55, 'F'); |
|
379 |
- WriteLcdCharacter(75, 55, 'S'); |
|
403 |
+ oswald_write_character(3, 55, FONT_6x9, 'S'); |
|
404 |
+ oswald_write_character(15, 55, FONT_6x9, 'M'); |
|
405 |
+ oswald_write_character(27, 55, FONT_6x9, 'T'); |
|
406 |
+ oswald_write_character(39, 55, FONT_6x9, 'W'); |
|
407 |
+ oswald_write_character(51, 55, FONT_6x9, 'T'); |
|
408 |
+ oswald_write_character(63, 55, FONT_6x9, 'F'); |
|
409 |
+ oswald_write_character(75, 55, FONT_6x9, 'S'); |
|
380 | 410 |
|
381 | 411 |
if ((sdata->pos == 2 && sdata->on) || sdata->pos != 2) |
382 |
- WriteLcdCharacter(3, 65, (OswaldAlarm.wday & WDAY_SUNDAY) ? 'x' : '_'); |
|
412 |
+ oswald_write_character(3, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_SUNDAY) ? 'x' : '_'); |
|
383 | 413 |
if ((sdata->pos == 3 && sdata->on) || sdata->pos != 3) |
384 |
- WriteLcdCharacter(15, 65, (OswaldAlarm.wday & WDAY_MONDAY) ? 'x' : '_'); |
|
414 |
+ oswald_write_character(15, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_MONDAY) ? 'x' : '_'); |
|
385 | 415 |
if ((sdata->pos == 4 && sdata->on) || sdata->pos != 4) |
386 |
- WriteLcdCharacter(27, 65, (OswaldAlarm.wday & WDAY_TUESDAY) ? 'x' : '_'); |
|
416 |
+ oswald_write_character(27, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_TUESDAY) ? 'x' : '_'); |
|
387 | 417 |
if ((sdata->pos == 5 && sdata->on) || sdata->pos != 5) |
388 |
- WriteLcdCharacter(39, 65, (OswaldAlarm.wday & WDAY_WEDNESDAY) ? 'x' : '_'); |
|
418 |
+ oswald_write_character(39, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_WEDNESDAY) ? 'x' : '_'); |
|
389 | 419 |
if ((sdata->pos == 6 && sdata->on) || sdata->pos != 6) |
390 |
- WriteLcdCharacter(51, 65, (OswaldAlarm.wday & WDAY_THURSDAY) ? 'x' : '_'); |
|
420 |
+ oswald_write_character(51, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_THURSDAY) ? 'x' : '_'); |
|
391 | 421 |
if ((sdata->pos == 7 && sdata->on) || sdata->pos != 7) |
392 |
- WriteLcdCharacter(63, 65, (OswaldAlarm.wday & WDAY_FRIDAY) ? 'x' : '_'); |
|
422 |
+ oswald_write_character(63, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_FRIDAY) ? 'x' : '_'); |
|
393 | 423 |
if ((sdata->pos == 8 && sdata->on) || sdata->pos != 8) |
394 |
- WriteLcdCharacter(75, 65, (OswaldAlarm.wday & WDAY_SATURDAY) ? 'x' : '_'); |
|
424 |
+ oswald_write_character(75, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_SATURDAY) ? 'x' : '_'); |
|
395 | 425 |
|
396 | 426 |
hal_lcd_update_display(); |
397 | 427 |
} |
398 | 428 |
|
399 |
-void alarm_handle_updown(u8t pos, s8t incr) |
|
429 |
+void alarm_handle_updown(uint8_t pos, int8_t incr) |
|
400 | 430 |
{ |
401 | 431 |
switch (pos) { |
402 | 432 |
case 0: // hour |
... | ... |
@@ -443,50 +473,77 @@ void alarm_handle_updown(u8t pos, s8t incr) |
443 | 473 |
}; |
444 | 474 |
} |
445 | 475 |
|
446 |
-void handle_setup_alarm_buttons(watch_button button, alarm_setup_data_t *sdata) |
|
476 |
+event_ret_t handle_setup_alarm_buttons(watch_button button, alarm_setup_data_t *sdata) |
|
447 | 477 |
{ |
448 |
- switch (button) { |
|
449 |
- case BUTTON_A: |
|
450 |
- alarm_handle_updown(sdata->pos, 1); |
|
451 |
- break; |
|
452 |
- case BUTTON_B: |
|
453 |
- alarm_handle_updown(sdata->pos, -1); |
|
454 |
- break; |
|
455 |
- case BUTTON_F: |
|
456 |
- sdata->pos++; |
|
457 |
- sdata->pos %= 9; |
|
458 |
- break; |
|
459 |
- default: |
|
460 |
- break; |
|
478 |
+ if (alarm_setup_screen.set_mode) { |
|
479 |
+ switch (button) { |
|
480 |
+ case BUTTON_A: |
|
481 |
+ alarm_handle_updown(sdata->pos, 1); |
|
482 |
+ break; |
|
483 |
+ case BUTTON_B: |
|
484 |
+ alarm_handle_updown(sdata->pos, -1); |
|
485 |
+ break; |
|
486 |
+ case BUTTON_C: |
|
487 |
+ sdata->pos++; |
|
488 |
+ sdata->pos %= 9; |
|
489 |
+ break; |
|
490 |
+ case BUTTON_F: |
|
491 |
+ alarm_setup_screen.set_mode = FALSE; |
|
492 |
+ break; |
|
493 |
+ default: |
|
494 |
+ return EVENT_RET_UNHANDLED; |
|
495 |
+ break; |
|
496 |
+ } |
|
497 |
+ } else { |
|
498 |
+ switch (button) { |
|
499 |
+ case BUTTON_F: |
|
500 |
+ alarm_setup_screen.set_mode = TRUE; |
|
501 |
+ break; |
|
502 |
+ default: |
|
503 |
+ return EVENT_RET_UNHANDLED; |
|
504 |
+ break; |
|
505 |
+ } |
|
461 | 506 |
} |
462 | 507 |
draw_alarm_setup_screen(sdata); |
508 |
+ |
|
509 |
+ return EVENT_RET_HANDLED; |
|
463 | 510 |
} |
464 | 511 |
|
465 |
-void alarm_setup_events(u16t event, void *data) |
|
512 |
+event_ret_t alarm_setup_events(uint16_t event, void *data) |
|
466 | 513 |
{ |
467 | 514 |
switch (event) { |
468 | 515 |
case EVENT_SCREEN_VISIBLE: |
469 | 516 |
alarm_setup_screen.pos = 0; |
517 |
+ alarm_setup_screen.on = TRUE; |
|
518 |
+ alarm_setup_screen.set_mode = FALSE; |
|
470 | 519 |
draw_alarm_setup_screen(&alarm_setup_screen); |
471 | 520 |
hal_enable_halfsecond_timer(); |
521 |
+ return EVENT_RET_HANDLED; |
|
472 | 522 |
break; |
473 | 523 |
case EVENT_SCREEN_DESTROY: |
474 | 524 |
hal_disable_halfsecond_timer(); |
525 |
+ return EVENT_RET_HANDLED; |
|
475 | 526 |
break; |
476 | 527 |
case EVENT_USER_BUTTONS: |
477 | 528 |
dbg_out("button event %d\n", *(int *)data); |
478 |
- handle_setup_alarm_buttons(*(watch_button *)data, &alarm_setup_screen); |
|
529 |
+ return handle_setup_alarm_buttons(*(watch_button *)data, &alarm_setup_screen); |
|
479 | 530 |
break; |
480 | 531 |
case EVENT_HALF_SEC_TIMER: |
481 |
- if (alarm_setup_screen.on) |
|
482 |
- alarm_setup_screen.on = FALSE; |
|
483 |
- else |
|
532 |
+ if (alarm_setup_screen.set_mode) { |
|
533 |
+ if (alarm_setup_screen.on) |
|
534 |
+ alarm_setup_screen.on = FALSE; |
|
535 |
+ else |
|
536 |
+ alarm_setup_screen.on = TRUE; |
|
537 |
+ } else |
|
484 | 538 |
alarm_setup_screen.on = TRUE; |
485 | 539 |
draw_alarm_setup_screen(&alarm_setup_screen); |
540 |
+ return EVENT_RET_HANDLED; |
|
486 | 541 |
break; |
487 | 542 |
default: |
543 |
+ return EVENT_RET_UNHANDLED; |
|
488 | 544 |
break; |
489 | 545 |
}; |
546 |
+ return EVENT_RET_UNHANDLED; |
|
490 | 547 |
} |
491 | 548 |
|
492 | 549 |
|
... | ... |
@@ -495,13 +552,14 @@ void alarm_setup_events(u16t event, void *data) |
495 | 552 |
*/ |
496 | 553 |
|
497 | 554 |
typedef struct { |
498 |
- u8t menu_pos; |
|
555 |
+ uint8_t menu_pos; |
|
499 | 556 |
} test_menu_t; |
500 | 557 |
static test_menu_t test_menu = { 0 }; |
501 | 558 |
|
502 | 559 |
void draw_menu_test_screen(void) |
503 | 560 |
{ |
504 | 561 |
hal_lcd_clear_display(); |
562 |
+#if 0 |
|
505 | 563 |
SetFont(MetaWatch16); |
506 | 564 |
WriteLcdString(2, 2, "Menu"); |
507 | 565 |
SetFont(MetaWatch7); |
... | ... |
@@ -512,40 +570,55 @@ void draw_menu_test_screen(void) |
512 | 570 |
WriteLcdString(2, 56, "Item 5"); |
513 | 571 |
|
514 | 572 |
WriteLcdString(50, 20+(9*test_menu.menu_pos), "*"); |
573 |
+#endif |
|
574 |
+ oswald_write_string(2, 2, FONT_DROID11x14b, "Menu"); |
|
575 |
+ |
|
576 |
+ oswald_write_string(2, 20, FONT_DROID8x12, "Item 1"); |
|
577 |
+ oswald_write_string(2, 29, FONT_DROID8x12, "Item 2"); |
|
578 |
+ oswald_write_string(2, 38, FONT_DROID8x12, "Item 3"); |
|
579 |
+ oswald_write_string(2, 47, FONT_DROID8x12, "Item 4"); |
|
580 |
+ oswald_write_string(2, 56, FONT_DROID8x12, "Item 5"); |
|
581 |
+ |
|
582 |
+ oswald_write_character(50, 18+(9*test_menu.menu_pos), FONT_6x9, 0x11); |
|
583 |
+ |
|
515 | 584 |
hal_lcd_update_display(); |
516 | 585 |
} |
517 | 586 |
|
518 |
-static void handle_menu_user_buttons(watch_button button) |
|
587 |
+event_ret_t handle_menu_user_buttons(watch_button button) |
|
519 | 588 |
{ |
520 | 589 |
switch (button) { |
521 | 590 |
case BUTTON_A: |
522 | 591 |
test_menu.menu_pos--; |
523 |
- test_menu.menu_pos%=5; |
|
592 |
+ test_menu.menu_pos %= 5; |
|
524 | 593 |
break; |
525 | 594 |
case BUTTON_B: |
526 | 595 |
test_menu.menu_pos++; |
527 |
- test_menu.menu_pos%=5; |
|
596 |
+ test_menu.menu_pos %= 5; |
|
528 | 597 |
break; |
529 | 598 |
default: |
599 |
+ return EVENT_RET_UNHANDLED; |
|
530 | 600 |
break; |
531 | 601 |
} |
532 | 602 |
draw_menu_test_screen(); |
603 |
+ return EVENT_RET_HANDLED; |
|
533 | 604 |
} |
534 | 605 |
|
535 |
-void test_menu_handle_events(u16t event, void *data) |
|
606 |
+event_ret_t test_menu_handle_events(uint16_t event, void *data) |
|
536 | 607 |
{ |
537 | 608 |
switch (event) { |
538 | 609 |
case EVENT_USER_BUTTONS: |
539 | 610 |
dbg_out("button event %d\n", *(int *)data); |
540 |
- handle_menu_user_buttons(*(watch_button *)data); |
|
611 |
+ return handle_menu_user_buttons(*(watch_button *)data); |
|
541 | 612 |
break; |
542 | 613 |
case EVENT_SCREEN_VISIBLE: |
543 | 614 |
test_menu.menu_pos = 0; |
544 | 615 |
draw_menu_test_screen(); |
545 | 616 |
break; |
546 | 617 |
default: |
618 |
+ return EVENT_RET_UNHANDLED; |
|
547 | 619 |
break; |
548 | 620 |
}; |
621 |
+ return EVENT_RET_HANDLED; |
|
549 | 622 |
} |
550 | 623 |
|
551 | 624 |
|
... | ... |
@@ -554,42 +627,78 @@ void test_menu_handle_events(u16t event, void *data) |
554 | 627 |
*/ |
555 | 628 |
|
556 | 629 |
typedef struct { |
557 |
- u8t hr; |
|
558 |
- u8t min; |
|
559 |
- u8t sec; |
|
560 |
- u8t csec; |
|
561 |
- u8t lapse_hr; |
|
562 |
- u8t lapse_min; |
|
563 |
- u8t lapse_sec; |
|
564 |
- u8t lapse_csec; |
|
630 |
+ uint8_t hr; |
|
631 |
+ uint8_t min; |
|
632 |
+ uint8_t sec; |
|
633 |
+ uint8_t csec; |
|
634 |
+ uint8_t lapse_hr; |
|
635 |
+ uint8_t lapse_min; |
|
636 |
+ uint8_t lapse_sec; |
|
637 |
+ uint8_t lapse_csec; |
|
565 | 638 |
boolean running; |
566 | 639 |
} stopwatch_data_t; |
567 | 640 |
static stopwatch_data_t stopwatch_screen = { 0, 0, 0, 0, 0, 0, 0, 0, FALSE }; |
568 | 641 |
|
569 |
- |
|
642 |
+#if 0 |
|
570 | 643 |
static void update_stop_watch_screen(stopwatch_data_t *sdata) |
571 | 644 |
{ |
572 |
- char tstr[16]; |
|
645 |
+ //char tstr[16]; |
|
646 |
+#if 0 |
|
573 | 647 |
SetFont(MetaWatchMonospaced10); |
574 | 648 |
|
575 | 649 |
snprintf(tstr, 16, "%02d:%02d:%02d.%1d", sdata->hr, sdata->min, sdata->sec, sdata->csec / 10); |
576 | 650 |
WriteLcdString(5, 40, tstr); |
577 | 651 |
snprintf(tstr, 16, "%02d:%02d:%02d.%02d", sdata->lapse_hr, sdata->lapse_min, sdata->lapse_sec, sdata->lapse_csec); |
578 | 652 |
WriteLcdString(5, 60, tstr); |
653 |
+#endif |
|
654 |
+#if 0 |
|
655 |
+ snprintf(tstr, 16, "%02d:%02d:%02d.%1d", sdata->hr, sdata->min, sdata->sec, sdata->csec / 10); |
|
656 |
+ oswald_write_string(5, 40, FONT_6x9, tstr); |
|
657 |
+ |
|
658 |
+ snprintf(tstr, 16, "%02d:%02d:%02d.%02d", sdata->lapse_hr, sdata->lapse_min, sdata->lapse_sec, sdata->lapse_csec); |
|
659 |
+ oswald_write_string(5, 60, FONT_6x9, tstr); |
|
660 |
+#endif |
|
579 | 661 |
|
580 | 662 |
hal_lcd_update_display(); |
581 | 663 |
} |
664 |
+#endif |
|
582 | 665 |
|
583 | 666 |
static void draw_stop_watch_screen(stopwatch_data_t *sdata) |
584 | 667 |
{ |
668 |
+ int gRow = 1; |
|
669 |
+ int gColumn = 35; |
|
670 |
+ |
|
671 |
+ hal_lcd_clear_display(); |
|
672 |
+ |
|
585 | 673 |
oswald_draw_bitmap(36, 0, stopwatch_icon_width, stopwatch_icon_height, stopwatch_icon_bits); |
586 | 674 |
oswald_draw_bitmap(81, 6, startstopbutton_icon_width, startstopbutton_icon_height, startstopbutton_icon_bits); |
587 | 675 |
oswald_draw_bitmap(81, 38, lapsebutton_icon_width, lapsebutton_icon_height, lapsebutton_icon_bits); |
588 | 676 |
|
677 |
+#if 0 |
|
589 | 678 |
update_stop_watch_screen(sdata); |
679 |
+#else |
|
680 |
+ gRow += 3 + oswald_write_character(gRow, gColumn, FONT_LCD13x21, (sdata->hr % 10)); |
|
681 |
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, (sdata->min / 10)); |
|
682 |
+ gRow += 3 + oswald_write_character(gRow, gColumn, FONT_LCD13x21, (sdata->min % 10)); |
|
683 |
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, (sdata->sec / 10)); |
|
684 |
+ gRow += 3 + oswald_write_character(gRow, gColumn, FONT_LCD13x21, (sdata->sec % 10)); |
|
685 |
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, (sdata->csec / 10)); |
|
686 |
+ |
|
687 |
+ gRow = 6; |
|
688 |
+ gColumn = 62; |
|
689 |
+ gRow += 13 + oswald_write_character(gRow, gColumn, FONT_LCD8x13, (sdata->lapse_hr % 10)); |
|
690 |
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, (sdata->lapse_min / 10)); |
|
691 |
+ gRow += 13 + oswald_write_character(gRow, gColumn, FONT_LCD8x13, (sdata->lapse_min % 10)); |
|
692 |
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, (sdata->lapse_sec / 10)); |
|
693 |
+ gRow += 3 + oswald_write_character(gRow, gColumn, FONT_LCD8x13, (sdata->lapse_sec % 10)); |
|
694 |
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, (sdata->lapse_csec / 10)); |
|
695 |
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, (sdata->lapse_csec % 10)); |
|
696 |
+ |
|
697 |
+ hal_lcd_update_display(); |
|
698 |
+#endif |
|
590 | 699 |
} |
591 | 700 |
|
592 |
-static void handle_stop_watch_buttons(watch_button button) |
|
701 |
+event_ret_t handle_stop_watch_buttons(watch_button button) |
|
593 | 702 |
{ |
594 | 703 |
switch (button) { |
595 | 704 |
case BUTTON_A: // start/stop |
... | ... |
@@ -600,12 +709,14 @@ static void handle_stop_watch_buttons(watch_button button) |
600 | 709 |
hal_enable_centisecond_timer(); |
601 | 710 |
stopwatch_screen.running = TRUE; |
602 | 711 |
} |
712 |
+ return EVENT_RET_HANDLED; |
|
603 | 713 |
break; |
604 | 714 |
case BUTTON_B: // lapse |
605 | 715 |
stopwatch_screen.lapse_hr = stopwatch_screen.hr; |
606 | 716 |
stopwatch_screen.lapse_min = stopwatch_screen.min; |
607 | 717 |
stopwatch_screen.lapse_sec = stopwatch_screen.sec; |
608 | 718 |
stopwatch_screen.lapse_csec = stopwatch_screen.csec; |
719 |
+ return EVENT_RET_HANDLED; |
|
609 | 720 |
break; |
610 | 721 |
case BUTTON_F: // reset |
611 | 722 |
stopwatch_screen.hr = 0; |
... | ... |
@@ -616,27 +727,33 @@ static void handle_stop_watch_buttons(watch_button button) |
616 | 727 |
stopwatch_screen.lapse_min = 0; |
617 | 728 |
stopwatch_screen.lapse_sec = 0; |
618 | 729 |
stopwatch_screen.lapse_csec = 0; |
730 |
+ return EVENT_RET_HANDLED; |
|
619 | 731 |
break; |
620 | 732 |
default: |
733 |
+ return EVENT_RET_UNHANDLED; |
|
621 | 734 |
break; |
622 | 735 |
} |
736 |
+ return EVENT_RET_UNHANDLED; |
|
623 | 737 |
} |
624 | 738 |
|
625 |
-void stop_watch_handle_events(u16t event, void *data) |
|
739 |
+event_ret_t stop_watch_handle_events(uint16_t event, void *data) |
|
626 | 740 |
{ |
627 | 741 |
switch (event) { |
628 | 742 |
case EVENT_USER_BUTTONS: |
629 | 743 |
dbg_out("button event %d\n", *(int *)data); |
630 |
- handle_stop_watch_buttons(*(watch_button *)data); |
|
631 |
- update_stop_watch_screen(&stopwatch_screen); |
|
744 |
+ return handle_stop_watch_buttons(*(watch_button *)data); |
|
745 |
+ //update_stop_watch_screen(&stopwatch_screen); |
|
746 |
+ draw_stop_watch_screen(&stopwatch_screen); |
|
632 | 747 |
break; |
633 | 748 |
case EVENT_SCREEN_VISIBLE: |
634 | 749 |
hal_lcd_clear_display(); |
635 | 750 |
draw_stop_watch_screen(&stopwatch_screen); |
751 |
+ return EVENT_RET_HANDLED; |
|
636 | 752 |
break; |
637 | 753 |
case EVENT_SCREEN_DESTROY: |
638 | 754 |
hal_disable_centisecond_timer(); |
639 | 755 |
stopwatch_screen.running = FALSE; |
756 |
+ return EVENT_RET_HANDLED; |
|
640 | 757 |
break; |
641 | 758 |
case EVENT_CS_TIMER: |
642 | 759 |
stopwatch_screen.csec++; |
... | ... |
@@ -656,11 +773,15 @@ void stop_watch_handle_events(u16t event, void *data) |
656 | 773 |
stopwatch_screen.hr = 0; |
657 | 774 |
}; |
658 | 775 |
if (stopwatch_screen.csec % 10 == 0) |
659 |
- update_stop_watch_screen(&stopwatch_screen); |
|
776 |
+ draw_stop_watch_screen(&stopwatch_screen); |
|
777 |
+ //update_stop_watch_screen(&stopwatch_screen); |
|
778 |
+ return EVENT_RET_HANDLED; |
|
660 | 779 |
break; |
661 | 780 |
default: |
781 |
+ return EVENT_RET_UNHANDLED; |
|
662 | 782 |
break; |
663 | 783 |
}; |
784 |
+ return EVENT_RET_HANDLED; |
|
664 | 785 |
} |
665 | 786 |
|
666 | 787 |
|
... | ... |
@@ -671,39 +792,42 @@ void draw_alarm_screen(void) |
671 | 792 |
{ |
672 | 793 |
hal_lcd_clear_display(); |
673 | 794 |
|
674 |
-// SetFont(MetaWatch16); |
|
675 |
-// WriteLcdString(2, 2, "ALARM !"); |
|
676 | 795 |
oswald_draw_bitmap(36, 20, alarm_icon_width, alarm_icon_height, alarm_icon_bits); |
677 | 796 |
|
678 |
- |
|
679 | 797 |
hal_lcd_update_display(); |
680 | 798 |
} |
681 | 799 |
|
682 |
-void alarm_handle_events(u16t event, void *data) |
|
800 |
+event_ret_t alarm_handle_events(uint16_t event, void *data) |
|
683 | 801 |
{ |
684 | 802 |
switch (event) { |
685 | 803 |
case EVENT_SCREEN_VISIBLE: |
686 | 804 |
draw_alarm_screen(); |
687 | 805 |
hal_enable_halfsecond_timer(); |
688 | 806 |
hal_vibration_set_state(TRUE); |
807 |
+ return EVENT_RET_HANDLED; |
|
689 | 808 |
break; |
690 | 809 |
case EVENT_SCREEN_DESTROY: |
691 | 810 |
hal_disable_halfsecond_timer(); |
692 | 811 |
hal_lcd_set_backlight(FALSE); |
693 | 812 |
hal_vibration_set_state(FALSE); |
813 |
+ return EVENT_RET_HANDLED; |
|
694 | 814 |
break; |
695 | 815 |
case EVENT_USER_BUTTONS: |
696 | 816 |
dbg_out("button event %d\n", *(int *)data); |
697 | 817 |
// hal_lcd_set_backlight(FALSE); |
818 |
+ return EVENT_RET_HANDLED; |
|
698 | 819 |
break; |
699 | 820 |
case EVENT_HALF_SEC_TIMER: |
700 | 821 |
hal_lcd_set_backlight(!hal_lcd_get_backlight()); |
701 | 822 |
hal_vibration_set_state(!hal_vibration_get_state()); |
702 | 823 |
dbg_out("timer\n"); |
824 |
+ return EVENT_RET_HANDLED; |
|
703 | 825 |
break; |
704 | 826 |
default: |
827 |
+ return EVENT_RET_UNHANDLED; |
|
705 | 828 |
break; |
706 | 829 |
}; |
830 |
+ return EVENT_RET_HANDLED; |
|
707 | 831 |
} |
708 | 832 |
|
709 | 833 |
|
... | ... |
@@ -711,13 +835,15 @@ void alarm_handle_events(u16t event, void *data) |
711 | 835 |
* Bluetooth screen |
712 | 836 |
*/ |
713 | 837 |
typedef struct { |
714 |
- u8t pos; |
|
838 |
+ uint8_t pos; |
|
715 | 839 |
boolean bt_en; |
840 |
+ boolean set_mode; |
|
716 | 841 |
boolean on; |
717 | 842 |
} bluetooth_data_t; |
718 | 843 |
static bluetooth_data_t bluetooth_screen = { |
719 | 844 |
0, |
720 | 845 |
FALSE, |
846 |
+ FALSE, |
|
721 | 847 |
TRUE |
722 | 848 |
}; |
723 | 849 |
|
... | ... |
@@ -733,40 +859,40 @@ void draw_bluetooth_screen(bluetooth_data_t *sdata) |
733 | 859 |
oswald_draw_bitmap(81, 6, upbutton_icon_width, upbutton_icon_height, upbutton_icon_bits); |
734 | 860 |
oswald_draw_bitmap(81, 38, downbutton_icon_width, downbutton_icon_height, downbutton_icon_bits); |
735 | 861 |
|
736 |
- SetFont(MetaWatch5); |
|
737 |
- WriteLcdString(2, 30, "Enable:"); |
|
862 |
+ oswald_write_string(1, 30, FONT_DROID8x12, "Enable:"); |
|
738 | 863 |
if ((sdata->pos == 0 && sdata->on) || sdata->pos != 0) { |
739 |
- WriteLcdCharacter(45, 30, bluetooth_screen.bt_en ? 'x' : '_'); |
|
864 |
+ oswald_write_character(53, 30, FONT_DROID8x12, bluetooth_screen.bt_en ? 'x' : '_'); |
|
740 | 865 |
} |
741 |
- WriteLcdString(2, 39, "State:"); |
|
866 |
+ oswald_write_string(1, 40, FONT_DROID8x12, "State:"); |
|
742 | 867 |
switch (hal_bluetooth_get_state()) { |
743 | 868 |
case BLUETOOTH_OFF: |
744 |
- WriteLcdString(45, 39, "off"); |
|
869 |
+ oswald_write_string(53, 40, FONT_DROID8x12, "off"); |
|
745 | 870 |
break; |
746 | 871 |
case BLUETOOTH_ON: |
747 |
- WriteLcdString(45, 39, "on"); |
|
872 |
+ oswald_write_string(53, 40, FONT_DROID8x12, "on"); |
|
748 | 873 |
break; |
749 | 874 |
case BLUETOOTH_CONNECTED: |
750 |
- WriteLcdString(45, 39, "conn."); |
|
875 |
+ oswald_write_string(53, 40, FONT_DROID8x12, "conn."); |
|
751 | 876 |
break; |
752 | 877 |
default: |
753 | 878 |
break; |
754 | 879 |
}; |
880 |
+ oswald_write_string(1, 50, FONT_DROID8x12, "Visible:"); |
|
881 |
+ if ((sdata->pos == 1 && sdata->on) || sdata->pos != 1) { |
|
882 |
+ oswald_write_character(53, 50, FONT_DROID8x12, hal_bluetooth_get_visible() ? 'x' : '_'); |
|
883 |
+ } |
|
884 |
+ |
|
755 | 885 |
if (hal_bluetooth_get_state() >= BLUETOOTH_ON) { |
756 | 886 |
bd_addr = hal_bluetooth_get_local_bdaddr(); |
757 | 887 |
snprintf(bstr, 20, "%02x:%02x:%02x:%02x:%02x:%02x", bd_addr[5], bd_addr[4], bd_addr[3], bd_addr[2], bd_addr[1], bd_addr[0]); |
758 |
- WriteLcdString(2, 48, bstr); |
|
888 |
+ oswald_write_string(2, 85, FONT_5x7, bstr); |
|
759 | 889 |
} else { |
760 | 890 |
} |
761 |
- WriteLcdString(2, 57, "Visible:"); |
|
762 |
- if ((sdata->pos == 1 && sdata->on) || sdata->pos != 1) { |
|
763 |
- WriteLcdCharacter(45, 57, hal_bluetooth_get_visible() ? 'x' : '_'); |
|
764 |
- } |
|
765 | 891 |
|
766 | 892 |
hal_lcd_update_display(); |
767 | 893 |
} |
768 | 894 |
|
769 |
-void bluetooth_handle_updown(u8t pos, s8t incr) |
|
895 |
+void bluetooth_handle_updown(uint8_t pos, int8_t incr) |
|
770 | 896 |
{ |
771 | 897 |
switch (pos) { |
772 | 898 |
case 0: |
... | ... |
@@ -804,26 +930,44 @@ void bluetooth_handle_updown(u8t pos, s8t incr) |
804 | 930 |
}; |
805 | 931 |
} |
806 | 932 |
|
807 |
-void handle_bluetooth_buttons(watch_button button, bluetooth_data_t *sdata) |
|
933 |
+event_ret_t handle_bluetooth_buttons(watch_button button, bluetooth_data_t *sdata) |
|
808 | 934 |
{ |
809 |
- switch (button) { |
|
810 |
- case BUTTON_A: |
|
811 |
- bluetooth_handle_updown(sdata->pos, 1); |
|
812 |
- break; |
|
813 |
- case BUTTON_B: |
|
814 |
- bluetooth_handle_updown(sdata->pos, -1); |
|
815 |
- break; |
|
816 |
- case BUTTON_F: |
|
817 |
- sdata->pos++; |
|
818 |
- sdata->pos %= 2; |
|
819 |
- break; |
|
820 |
- default: |
|
821 |
- break; |
|
935 |
+ if (bluetooth_screen.set_mode) { |
|
936 |
+ switch (button) { |
|
937 |
+ case BUTTON_A: |
|
938 |
+ bluetooth_handle_updown(sdata->pos, 1); |
|
939 |
+ break; |
|
940 |
+ case BUTTON_B: |
|
941 |
+ bluetooth_handle_updown(sdata->pos, -1); |
|
942 |
+ break; |
|
943 |
+ case BUTTON_C: |
|
944 |
+ sdata->pos++; |
|
945 |
+ sdata->pos %= 2; |
|
946 |
+ break; |
|
947 |
+ case BUTTON_F: |
|
948 |
+ bluetooth_screen.set_mode = FALSE; |
|
949 |
+ break; |
|
950 |
+ default: |
|
951 |
+ return EVENT_RET_UNHANDLED; |
|
952 |
+ break; |
|
953 |
+ } |
|
954 |
+ } else { |
|
955 |
+ switch (button) { |
|
956 |
+ case BUTTON_F: |
|
957 |
+ bluetooth_screen.set_mode = TRUE; |
|
958 |
+ break; |
|
959 |
+ default: |
|
960 |
+ return EVENT_RET_UNHANDLED; |
|
961 |
+ break; |
|
962 |
+ } |
|
822 | 963 |
} |
964 |
+ |
|
823 | 965 |
draw_bluetooth_screen(sdata); |
966 |
+ |
|
967 |
+ return EVENT_RET_HANDLED; |
|
824 | 968 |
} |
825 | 969 |
|
826 |
-void bluetooth_screen_events(u16t event, void *data) |
|
970 |
+event_ret_t bluetooth_screen_events(uint16_t event, void *data) |
|
827 | 971 |
{ |
828 | 972 |
switch (event) { |
829 | 973 |
case EVENT_SCREEN_VISIBLE: |
... | ... |
@@ -837,17 +981,22 @@ void bluetooth_screen_events(u16t event, void *data) |
837 | 981 |
break; |
838 | 982 |
case EVENT_USER_BUTTONS: |
839 | 983 |
dbg_out("button event %d\n", *(int *)data); |
840 |
- handle_bluetooth_buttons(*(watch_button *)data, &bluetooth_screen); |
|
984 |
+ return handle_bluetooth_buttons(*(watch_button *)data, &bluetooth_screen); |
|
841 | 985 |
break; |
842 | 986 |
case EVENT_HALF_SEC_TIMER: |
843 |
- if (bluetooth_screen.on) |
|
844 |
- bluetooth_screen.on = FALSE; |
|
845 |
- else |
|
987 |
+ if (bluetooth_screen.set_mode) { |
|
988 |
+ if (bluetooth_screen.on) |
|
989 |
+ bluetooth_screen.on = FALSE; |
|
990 |
+ else |
|
991 |
+ bluetooth_screen.on = TRUE; |
|
992 |
+ } else |
|
846 | 993 |
bluetooth_screen.on = TRUE; |
847 | 994 |
draw_bluetooth_screen(&bluetooth_screen); |
848 | 995 |
break; |
849 | 996 |
default: |
997 |
+ return EVENT_RET_UNHANDLED; |
|
850 | 998 |
break; |
851 | 999 |
}; |
1000 |
+ return EVENT_RET_HANDLED; |
|
852 | 1001 |
} |
853 | 1002 |
|
... | ... |
@@ -3,20 +3,46 @@ |
3 | 3 |
#include "oswald.h" |
4 | 4 |
#include "oswald_main.h" |
5 | 5 |
#include "oswald_watch_faces.h" |
6 |
-#include "Fonts.h" |
|
7 |
-#include "LcdDisplay.h" |
|
6 |
+#include "oswald_graphics.h" |
|
8 | 7 |
#include "oswald_hal.h" |
9 | 8 |
|
10 | 9 |
#include "oswald_screens.h" |
11 | 10 |
|
12 |
-#include "timesetup_icon.xbm" |
|
13 |
-#include "stopwatch_icon.xbm" |
|
14 |
-#include "alarm_icon.xbm" |
|
15 |
-#include "startstopbutton_icon.xbm" |
|
16 |
-#include "lapsebutton_icon.xbm" |
|
17 |
-#include "upbutton_icon.xbm" |
|
18 |
-#include "downbutton_icon.xbm" |
|
19 |
-#include "Bluetooth_icon.xbm" |
|
11 |
+#include "LcdDisplay.h" |
|
12 |
+#include "Fonts.h" |
|
13 |
+ |
|
14 |
+#if defined(__GNUC__) && (__MSP430X__ > 0) |
|
15 |
+__attribute__((__far__)) |
|
16 |
+#endif |
|
17 |
+#include "bitmaps/timesetup_icon.xbm" |
|
18 |
+#if defined(__GNUC__) && (__MSP430X__ > 0) |
|
19 |
+__attribute__((__far__)) |
|
20 |
+#endif |
|
21 |
+#include "bitmaps/stopwatch_icon.xbm" |
|
22 |
+#if defined(__GNUC__) && (__MSP430X__ > 0) |
|
23 |
+__attribute__((__far__)) |
|
24 |
+#endif |
|
25 |
+#include "bitmaps/alarm_icon.xbm" |
|
26 |
+#if defined(__GNUC__) && (__MSP430X__ > 0) |
|
27 |
+__attribute__((__far__)) |
|
28 |
+#endif |
|
29 |
+#include "bitmaps/startstopbutton_icon.xbm" |
|
30 |
+#if defined(__GNUC__) && (__MSP430X__ > 0) |
|
31 |
+__attribute__((__far__)) |
|
32 |
+#endif |
|
33 |
+#include "bitmaps/lapsebutton_icon.xbm" |
|
34 |
+#if defined(__GNUC__) && (__MSP430X__ > 0) |
|
35 |
+__attribute__((__far__)) |
|
36 |
+#endif |
|
37 |
+#include "bitmaps/upbutton_icon.xbm" |
|
38 |
+#if defined(__GNUC__) && (__MSP430X__ > 0) |
|
39 |
+__attribute__((__far__)) |
|
40 |
+#endif |
|
41 |
+#include "bitmaps/downbutton_icon.xbm" |
|
42 |
+#if defined(__GNUC__) && (__MSP430X__ > 0) |
|
43 |
+__attribute__((__far__)) |
|
44 |
+#endif |
|
45 |
+#include "bitmaps/Bluetooth_icon.xbm" |
|
20 | 46 |
|
21 | 47 |
|
22 | 48 |
typedef struct { |
... | ... |
@@ -87,17 +113,20 @@ static accelscreen_data_t accel_screen = { |
87 | 113 |
void draw_accel_screen(accel_data_t *accel_data) |
88 | 114 |
{ |
89 | 115 |
hal_lcd_clear_display(); |
90 |
- SetFont(MetaWatch16); |
|
91 |
- WriteLcdString(2, 2, "X:"); |
|
92 |
- WriteLcdNumber(20, 2, accel_data->x); |
|
93 |
- WriteLcdString(2, 18, "Y:"); |
|
94 |
- WriteLcdNumber(20, 18, accel_data->y); |
|
95 |
- WriteLcdString(2, 34, "Z:"); |
|
96 |
- WriteLcdNumber(20, 34, accel_data->z); |
|
97 | 116 |
|
98 |
- WriteLcdString(2, 54, "Light:"); |
|
99 |
- WriteLcdNumber(40, 54, accel_data->z); |
|
117 |
+ oswald_write_string(0, 2, FONT_7x12b, "X:"); |
|
118 |
+ oswald_write_number(20, 2, FONT_7x12b, accel_data->x); |
|
119 |
+ oswald_write_string(0, 18, FONT_7x12b, "Y:"); |
|
120 |
+ oswald_write_number(20, 18, FONT_7x12b, accel_data->y); |
|
121 |
+#if 0 |
|
122 |
+ oswald_write_string(0, 34, FONT_8x12, "Z:"); |
|
123 |
+ oswald_write_number(20, 34, FONT_8x12, accel_data->z); |
|
100 | 124 |
|
125 |
+ oswald_write_string(0, 54, FONT_12x16, "Light:"); |
|
126 |
+ oswald_write_number(50, 54, FONT_12x16, accel_data->z); |
|
127 |
+ |
|
128 |
+ oswald_write_string(0, 70, FONT_12x20, "23:59"); |
|
129 |
+#endif |
|
101 | 130 |
hal_lcd_update_display(); |
102 | 131 |
} |
103 | 132 |
|
... | ... |
@@ -136,8 +165,7 @@ static datetime_setup_data_t dt_setup_screen = { |
136 | 165 |
void draw_datetime_setup_screen(datetime_setup_data_t *sdata) |
137 | 166 |
{ |
138 | 167 |
hal_lcd_clear_display(); |
139 |
-// SetFont(MetaWatch16); |
|
140 |
-// WriteLcdString(2, 2, "Set"); |
|
168 |
+ |
|
141 | 169 |
oswald_draw_bitmap(36, 0, timesetup_icon_width, timesetup_icon_height, timesetup_icon_bits); |
142 | 170 |
|
143 | 171 |
oswald_draw_bitmap(81, 6, upbutton_icon_width, upbutton_icon_height, upbutton_icon_bits); |
... | ... |
@@ -154,14 +182,7 @@ void draw_datetime_setup_screen(datetime_setup_data_t *sdata) |
154 | 182 |
WriteLcdCharacter(31, 30, (OswaldClk.minute / 10)); |
155 | 183 |
WriteLcdCharacter(43, 30, (OswaldClk.minute % 10)); |
156 | 184 |
} |
157 |
-/* |
|
158 |
- WriteLcdCharacter(55, 20, TIME_CHARACTER_COLON_INDEX); |
|
159 | 185 |
|
160 |
- if ((sdata->pos == 2 && sdata->on) || sdata->pos != 2) { |
|
161 |
- WriteLcdCharacter(60, 20, (OswaldClk.second / 10)); |
|
162 |
- WriteLcdCharacter(72, 20, (OswaldClk.second % 10)); |
|
163 |
- } |
|
164 |
-*/ |
|
165 | 186 |
SetFont(MetaWatch16); |
166 | 187 |
if ((sdata->pos == 2 && sdata->on) || sdata->pos != 2) { |
167 | 188 |
WriteLcdCharacter(59, 36, 0x30 + (OswaldClk.second / 10)); |
... | ... |
@@ -9,6 +9,15 @@ |
9 | 9 |
|
10 | 10 |
#include "oswald_screens.h" |
11 | 11 |
|
12 |
+#include "timesetup_icon.xbm" |
|
13 |
+#include "stopwatch_icon.xbm" |
|
14 |
+#include "alarm_icon.xbm" |
|
15 |
+#include "startstopbutton_icon.xbm" |
|
16 |
+#include "lapsebutton_icon.xbm" |
|
17 |
+#include "upbutton_icon.xbm" |
|
18 |
+#include "downbutton_icon.xbm" |
|
19 |
+#include "Bluetooth_icon.xbm" |
|
20 |
+ |
|
12 | 21 |
|
13 | 22 |
typedef struct { |
14 | 23 |
void (*screendraw_func)(boolean show_seconds); |
... | ... |
@@ -85,6 +94,10 @@ void draw_accel_screen(accel_data_t *accel_data) |
85 | 94 |
WriteLcdNumber(20, 18, accel_data->y); |
86 | 95 |
WriteLcdString(2, 34, "Z:"); |
87 | 96 |
WriteLcdNumber(20, 34, accel_data->z); |
97 |
+ |
|
98 |
+ WriteLcdString(2, 54, "Light:"); |
|
99 |
+ WriteLcdNumber(40, 54, accel_data->z); |
|
100 |
+ |
|
88 | 101 |
hal_lcd_update_display(); |
89 | 102 |
} |
90 | 103 |
|
... | ... |
@@ -123,57 +136,67 @@ static datetime_setup_data_t dt_setup_screen = { |
123 | 136 |
void draw_datetime_setup_screen(datetime_setup_data_t *sdata) |
124 | 137 |
{ |
125 | 138 |
hal_lcd_clear_display(); |
126 |
- SetFont(MetaWatch16); |
|
127 |
- WriteLcdString(2, 2, "Set"); |
|
139 |
+// SetFont(MetaWatch16); |
|
140 |
+// WriteLcdString(2, 2, "Set"); |
|
141 |
+ oswald_draw_bitmap(36, 0, timesetup_icon_width, timesetup_icon_height, timesetup_icon_bits); |
|
142 |
+ |
|
143 |
+ oswald_draw_bitmap(81, 6, upbutton_icon_width, upbutton_icon_height, upbutton_icon_bits); |
|
144 |
+ oswald_draw_bitmap(81, 38, downbutton_icon_width, downbutton_icon_height, downbutton_icon_bits); |
|
128 | 145 |
|
129 | 146 |
SetFont(MetaWatchTime); |
130 | 147 |
if ((sdata->pos == 0 && sdata->on) || sdata->pos != 0) { |
131 |
- WriteLcdCharacter(2, 20, (OswaldClk.hour / 10)); |
|
132 |
- WriteLcdCharacter(14, 20, (OswaldClk.hour % 10)); |
|
148 |
+ WriteLcdCharacter(2, 30, (OswaldClk.hour / 10)); |
|
149 |
+ WriteLcdCharacter(14, 30, (OswaldClk.hour % 10)); |
|
133 | 150 |
} |
134 |
- WriteLcdCharacter(26, 20, TIME_CHARACTER_COLON_INDEX); |
|
151 |
+ WriteLcdCharacter(26, 30, TIME_CHARACTER_COLON_INDEX); |
|
135 | 152 |
|
136 | 153 |
if ((sdata->pos == 1 && sdata->on) || sdata->pos != 1) { |
137 |
- WriteLcdCharacter(31, 20, (OswaldClk.minute / 10)); |
|
138 |
- WriteLcdCharacter(43, 20, (OswaldClk.minute % 10)); |
|
154 |
+ WriteLcdCharacter(31, 30, (OswaldClk.minute / 10)); |
|
155 |
+ WriteLcdCharacter(43, 30, (OswaldClk.minute % 10)); |
|
139 | 156 |
} |
140 |
- |
|
157 |
+/* |
|
141 | 158 |
WriteLcdCharacter(55, 20, TIME_CHARACTER_COLON_INDEX); |
142 | 159 |
|
143 | 160 |
if ((sdata->pos == 2 && sdata->on) || sdata->pos != 2) { |
144 | 161 |
WriteLcdCharacter(60, 20, (OswaldClk.second / 10)); |
145 | 162 |
WriteLcdCharacter(72, 20, (OswaldClk.second % 10)); |
146 | 163 |
} |
147 |
- |
|
164 |
+*/ |
|
148 | 165 |
SetFont(MetaWatch16); |
166 |
+ if ((sdata->pos == 2 && sdata->on) || sdata->pos != 2) { |
|
167 |
+ WriteLcdCharacter(59, 36, 0x30 + (OswaldClk.second / 10)); |
|
168 |
+ WriteLcdCharacter(66, 36, 0x30 + (OswaldClk.second % 10)); |
|
169 |
+ } |
|
170 |
+ |
|
171 |
+ |
|
149 | 172 |
if ((sdata->pos == 3 && sdata->on) || sdata->pos != 3) { |
150 |
- WriteLcdNumber(2, 45, OswaldClk.day); |
|
173 |
+ WriteLcdNumber(2, 55, OswaldClk.day); |
|
151 | 174 |
} |
152 |
- WriteLcdString(18, 45, "."); |
|
175 |
+ WriteLcdString(18, 55, "."); |
|
153 | 176 |
if ((sdata->pos == 4 && sdata->on) || sdata->pos != 4) { |
154 |
- WriteLcdNumber(22, 45, OswaldClk.month); |
|
177 |
+ WriteLcdNumber(22, 55, OswaldClk.month); |
|
155 | 178 |
} |
156 |
- WriteLcdString(38, 45, "."); |
|
179 |
+ WriteLcdString(38, 55, "."); |
|
157 | 180 |
if ((sdata->pos == 5 && sdata->on) || sdata->pos != 5) { |
158 |
- WriteLcdNumber(42, 45, OswaldClk.year); |
|
181 |
+ WriteLcdNumber(42, 55, OswaldClk.year); |
|
159 | 182 |
} |
160 | 183 |
|
161 | 184 |
SetFont(MetaWatch7); |
162 | 185 |
if ((sdata->pos == 6 && sdata->on) || sdata->pos != 6) { |
163 | 186 |
if (OswaldClk.clk24hr) |
164 |
- WriteLcdString(2, 66, "x"); |
|
187 |
+ WriteLcdString(2, 76, "x"); |
|
165 | 188 |
else |
166 |
- WriteLcdString(2, 66, "_"); |
|
189 |
+ WriteLcdString(2, 76, "_"); |
|
167 | 190 |
} |
168 |
- WriteLcdString(15, 66, "24hr"); |
|
191 |
+ WriteLcdString(15, 76, "24hr"); |
|
169 | 192 |
|
170 | 193 |
if ((sdata->pos == 7 && sdata->on) || sdata->pos != 7) { |
171 | 194 |
if (OswaldClk.day_first) |
172 |
- WriteLcdString(2, 79, "x"); |
|
195 |
+ WriteLcdString(2, 89, "x"); |
|
173 | 196 |
else |
174 |
- WriteLcdString(2, 79, "_"); |
|
197 |
+ WriteLcdString(2, 89, "_"); |
|
175 | 198 |
} |
176 |
- WriteLcdString(15, 79, "dd.mm. mm/dd"); |
|
199 |
+ WriteLcdString(15, 89, "dd.mm. mm/dd"); |
|
177 | 200 |
|
178 | 201 |
hal_lcd_update_display(); |
179 | 202 |
} |
... | ... |
@@ -290,6 +313,11 @@ void datetime_setup_events(u16t event, void *data) |
290 | 313 |
}; |
291 | 314 |
} |
292 | 315 |
|
316 |
+ |
|
317 |
+/* |
|
318 |
+ * Alarm setup |
|
319 |
+ */ |
|
320 |
+ |
|
293 | 321 |
typedef struct { |
294 | 322 |
u8t pos; |
295 | 323 |
boolean on; |
... | ... |
@@ -303,63 +331,47 @@ void draw_alarm_setup_screen(alarm_setup_data_t *sdata) |
303 | 331 |
{ |
304 | 332 |
hal_lcd_clear_display(); |
305 | 333 |
|
306 |
- SetFont(MetaWatch16); |
|
307 |
- WriteLcdString(2, 2, "Alarm"); |
|
334 |
+ oswald_draw_bitmap(36, 0, alarm_icon_width, alarm_icon_height, alarm_icon_bits); |
|
335 |
+ |
|
336 |
+ oswald_draw_bitmap(81, 6, upbutton_icon_width, upbutton_icon_height, upbutton_icon_bits); |
|
337 |
+ oswald_draw_bitmap(81, 38, downbutton_icon_width, downbutton_icon_height, downbutton_icon_bits); |
|
308 | 338 |
|
309 | 339 |
SetFont(MetaWatchTime); |
310 | 340 |
if ((sdata->pos == 0 && sdata->on) || sdata->pos != 0) { |
311 |
- WriteLcdCharacter(2, 20, (OswaldAlarm.hour / 10)); |
|
312 |
- WriteLcdCharacter(14, 20, (OswaldAlarm.hour % 10)); |
|
341 |
+ WriteLcdCharacter(22, 30, (OswaldAlarm.hour / 10)); |
|
342 |
+ WriteLcdCharacter(34, 30, (OswaldAlarm.hour % 10)); |
|
313 | 343 |
} |
314 |
- WriteLcdCharacter(26, 20, TIME_CHARACTER_COLON_INDEX); |
|
344 |
+ WriteLcdCharacter(46, 30, TIME_CHARACTER_COLON_INDEX); |
|
315 | 345 |
|
316 | 346 |
if ((sdata->pos == 1 && sdata->on) || sdata->pos != 1) { |
317 |
- WriteLcdCharacter(31, 20, (OswaldAlarm.minute / 10)); |
|
318 |
- WriteLcdCharacter(43, 20, (OswaldAlarm.minute % 10)); |
|
347 |
+ WriteLcdCharacter(51, 30, (OswaldAlarm.minute / 10)); |
|
348 |
+ WriteLcdCharacter(63, 30, (OswaldAlarm.minute % 10)); |
|
319 | 349 |
} |
320 | 350 |
|
321 | 351 |
SetFont(MetaWatchMonospaced10); |
322 |
- WriteLcdCharacter(3, 45, 'S'); |
|
323 |
- WriteLcdCharacter(15, 45, 'M'); |
|
324 |
- WriteLcdCharacter(27, 45, 'T'); |
|
325 |
- WriteLcdCharacter(39, 45, 'W'); |
|
326 |
- WriteLcdCharacter(51, 45, 'T'); |
|
327 |
- WriteLcdCharacter(63, 45, 'F'); |
|
328 |
- WriteLcdCharacter(75, 45, 'S'); |
|
352 |
+ WriteLcdCharacter(3, 55, 'S'); |
|
353 |
+ WriteLcdCharacter(15, 55, 'M'); |
|
354 |
+ WriteLcdCharacter(27, 55, 'T'); |
|
355 |
+ WriteLcdCharacter(39, 55, 'W'); |
|
356 |
+ WriteLcdCharacter(51, 55, 'T'); |
|
357 |
+ WriteLcdCharacter(63, 55, 'F'); |
|
358 |
+ WriteLcdCharacter(75, 55, 'S'); |
|
329 | 359 |
|
330 | 360 |
if ((sdata->pos == 2 && sdata->on) || sdata->pos != 2) |
331 |
- WriteLcdCharacter(3, 55, (OswaldAlarm.wday & WDAY_SUNDAY) ? 'x' : '_'); |
|
361 |
+ WriteLcdCharacter(3, 65, (OswaldAlarm.wday & WDAY_SUNDAY) ? 'x' : '_'); |
|
332 | 362 |
if ((sdata->pos == 3 && sdata->on) || sdata->pos != 3) |
333 |
- WriteLcdCharacter(15, 55, (OswaldAlarm.wday & WDAY_MONDAY) ? 'x' : '_'); |
|
363 |
+ WriteLcdCharacter(15, 65, (OswaldAlarm.wday & WDAY_MONDAY) ? 'x' : '_'); |
|
334 | 364 |
if ((sdata->pos == 4 && sdata->on) || sdata->pos != 4) |
335 |
- WriteLcdCharacter(27, 55, (OswaldAlarm.wday & WDAY_TUESDAY) ? 'x' : '_'); |
|
365 |
+ WriteLcdCharacter(27, 65, (OswaldAlarm.wday & WDAY_TUESDAY) ? 'x' : '_'); |
|
336 | 366 |
if ((sdata->pos == 5 && sdata->on) || sdata->pos != 5) |
337 |
- WriteLcdCharacter(39, 55, (OswaldAlarm.wday & WDAY_WEDNESDAY) ? 'x' : '_'); |
|
367 |
+ WriteLcdCharacter(39, 65, (OswaldAlarm.wday & WDAY_WEDNESDAY) ? 'x' : '_'); |
|
338 | 368 |
if ((sdata->pos == 6 && sdata->on) || sdata->pos != 6) |
339 |
- WriteLcdCharacter(51, 55, (OswaldAlarm.wday & WDAY_THURSDAY) ? 'x' : '_'); |
|
369 |
+ WriteLcdCharacter(51, 65, (OswaldAlarm.wday & WDAY_THURSDAY) ? 'x' : '_'); |
|
340 | 370 |
if ((sdata->pos == 7 && sdata->on) || sdata->pos != 7) |
341 |
- WriteLcdCharacter(63, 55, (OswaldAlarm.wday & WDAY_FRIDAY) ? 'x' : '_'); |
|
371 |
+ WriteLcdCharacter(63, 65, (OswaldAlarm.wday & WDAY_FRIDAY) ? 'x' : '_'); |
|
342 | 372 |
if ((sdata->pos == 8 && sdata->on) || sdata->pos != 8) |
343 |
- WriteLcdCharacter(75, 55, (OswaldAlarm.wday & WDAY_SATURDAY) ? 'x' : '_'); |
|
373 |
+ WriteLcdCharacter(75, 65, (OswaldAlarm.wday & WDAY_SATURDAY) ? 'x' : '_'); |
|
344 | 374 |
|
345 |
-#if 0 |
|
346 |
- SetFont(MetaWatch7); |
|
347 |
- if ((sdata->pos == 6 && sdata->on) || sdata->pos != 6) { |
|
348 |
- if (OswaldClk.clk24hr) |
|
349 |
- WriteLcdString(2, 66, "x"); |
|
350 |
- else |
|
351 |
- WriteLcdString(2, 66, "_"); |
|
352 |
- } |
|
353 |
- WriteLcdString(15, 66, "24hr"); |
|
354 |
- |
|
355 |
- if ((sdata->pos == 7 && sdata->on) || sdata->pos != 7) { |
|
356 |
- if (OswaldClk.day_first) |
|
357 |
- WriteLcdString(2, 79, "x"); |
|
358 |
- else |
|
359 |
- WriteLcdString(2, 79, "_"); |
|
360 |
- } |
|
361 |
- WriteLcdString(15, 79, "dd.mm. mm/dd"); |
|
362 |
-#endif |
|
363 | 375 |
hal_lcd_update_display(); |
364 | 376 |
} |
365 | 377 |
|
... | ... |
@@ -457,6 +469,10 @@ void alarm_setup_events(u16t event, void *data) |
457 | 469 |
} |
458 | 470 |
|
459 | 471 |
|
472 |
+/* |
|
473 |
+ * Test menu |
|
474 |
+ */ |
|
475 |
+ |
|
460 | 476 |
typedef struct { |
461 | 477 |
u8t menu_pos; |
462 | 478 |
} test_menu_t; |
... | ... |
@@ -512,6 +528,10 @@ void test_menu_handle_events(u16t event, void *data) |
512 | 528 |
} |
513 | 529 |
|
514 | 530 |
|
531 |
+/* |
|
532 |
+ * Stop Watch |
|
533 |
+ */ |
|
534 |
+ |
|
515 | 535 |
typedef struct { |
516 | 536 |
u8t hr; |
517 | 537 |
u8t min; |
... | ... |
@@ -531,36 +551,19 @@ static void update_stop_watch_screen(stopwatch_data_t *sdata) |
531 | 551 |
char tstr[16]; |
532 | 552 |
SetFont(MetaWatchMonospaced10); |
533 | 553 |
|
534 |
-#if 0 |
|
535 |
- WriteLcdNumber(0, 30, sdata->hr); |
|
536 |
- WriteLcdCharacter(14, 30, ':'); |
|
537 |
- WriteLcdNumber(19, 30, sdata->min); |
|
538 |
- WriteLcdCharacter(33, 30, ':'); |
|
539 |
- WriteLcdNumber(38, 30, sdata->sec); |
|
540 |
- WriteLcdCharacter(52, 30, '.'); |
|
541 |
- WriteLcdNumber(57, 30, sdata->csec / 10); |
|
542 |
- |
|
543 |
- WriteLcdNumber(0, 50, sdata->lapse_hr); |
|
544 |
- WriteLcdCharacter(14, 50, ':'); |
|
545 |
- WriteLcdNumber(19, 50, sdata->lapse_min); |
|
546 |
- WriteLcdCharacter(33, 50, ':'); |
|
547 |
- WriteLcdNumber(38, 50, sdata->lapse_sec); |
|
548 |
- WriteLcdCharacter(52, 50, '.'); |
|
549 |
- WriteLcdNumber(57, 50, sdata->lapse_csec / 10); |
|
550 |
-#else |
|
551 | 554 |
snprintf(tstr, 16, "%02d:%02d:%02d.%1d", sdata->hr, sdata->min, sdata->sec, sdata->csec / 10); |
552 |
- WriteLcdString(0, 30, tstr); |
|
555 |
+ WriteLcdString(5, 40, tstr); |
|
553 | 556 |
snprintf(tstr, 16, "%02d:%02d:%02d.%02d", sdata->lapse_hr, sdata->lapse_min, sdata->lapse_sec, sdata->lapse_csec); |
554 |
- WriteLcdString(0, 50, tstr); |
|
555 |
-#endif |
|
557 |
+ WriteLcdString(5, 60, tstr); |
|
556 | 558 |
|
557 | 559 |
hal_lcd_update_display(); |
558 | 560 |
} |
559 | 561 |
|
560 | 562 |
static void draw_stop_watch_screen(stopwatch_data_t *sdata) |
561 | 563 |
{ |
562 |
- SetFont(MetaWatch16); |
|
563 |
- WriteLcdString(2, 5, "StopWatch"); |
|
564 |
+ oswald_draw_bitmap(36, 0, stopwatch_icon_width, stopwatch_icon_height, stopwatch_icon_bits); |
|
565 |
+ oswald_draw_bitmap(81, 6, startstopbutton_icon_width, startstopbutton_icon_height, startstopbutton_icon_bits); |
|
566 |
+ oswald_draw_bitmap(81, 38, lapsebutton_icon_width, lapsebutton_icon_height, lapsebutton_icon_bits); |
|
564 | 567 |
|
565 | 568 |
update_stop_watch_screen(sdata); |
566 | 569 |
} |
... | ... |
@@ -640,12 +643,17 @@ void stop_watch_handle_events(u16t event, void *data) |
640 | 643 |
} |
641 | 644 |
|
642 | 645 |
|
646 |
+/* |
|
647 |
+ * when alarm is fired |
|
648 |
+ */ |
|
643 | 649 |
void draw_alarm_screen(void) |
644 | 650 |
{ |
645 | 651 |
hal_lcd_clear_display(); |
646 | 652 |
|
647 |
- SetFont(MetaWatch16); |
|
648 |
- WriteLcdString(2, 2, "ALARM !"); |
|
653 |
+// SetFont(MetaWatch16); |
|
654 |
+// WriteLcdString(2, 2, "ALARM !"); |
|
655 |
+ oswald_draw_bitmap(36, 20, alarm_icon_width, alarm_icon_height, alarm_icon_bits); |
|
656 |
+ |
|
649 | 657 |
|
650 | 658 |
hal_lcd_update_display(); |
651 | 659 |
} |
... | ... |
@@ -677,3 +685,148 @@ void alarm_handle_events(u16t event, void *data) |
677 | 685 |
}; |
678 | 686 |
} |
679 | 687 |
|
688 |
+ |
|
689 |
+/* |
|
690 |
+ * Bluetooth screen |
|
691 |
+ */ |
|
692 |
+typedef struct { |
|
693 |
+ u8t pos; |
|
694 |
+ boolean bt_en; |
|
695 |
+ boolean on; |
|
696 |
+} bluetooth_data_t; |
|
697 |
+static bluetooth_data_t bluetooth_screen = { |
|
698 |
+ 0, |
|
699 |
+ FALSE, |
|
700 |
+ TRUE |
|
701 |
+}; |
|
702 |
+ |
|
703 |
+void draw_bluetooth_screen(bluetooth_data_t *sdata) |
|
704 |
+{ |
|
705 |
+ char bstr[20]; |
|
706 |
+ uint8_t *bd_addr; |
|
707 |
+ |
|
708 |
+ hal_lcd_clear_display(); |
|
709 |
+ |
|
710 |
+ oswald_draw_bitmap(36, 0, Bluetooth_icon_width, Bluetooth_icon_height, Bluetooth_icon_bits); |
|
711 |
+ |
|
712 |
+ oswald_draw_bitmap(81, 6, upbutton_icon_width, upbutton_icon_height, upbutton_icon_bits); |
|
713 |
+ oswald_draw_bitmap(81, 38, downbutton_icon_width, downbutton_icon_height, downbutton_icon_bits); |
|
714 |
+ |
|
715 |
+ SetFont(MetaWatch5); |
|
716 |
+ WriteLcdString(2, 30, "Enable:"); |
|
717 |
+ if ((sdata->pos == 0 && sdata->on) || sdata->pos != 0) { |
|
718 |
+ WriteLcdCharacter(45, 30, bluetooth_screen.bt_en ? 'x' : '_'); |
|
719 |
+ } |
|
720 |
+ WriteLcdString(2, 39, "State:"); |
|
721 |
+ switch (hal_bluetooth_get_state()) { |
|
722 |
+ case BLUETOOTH_OFF: |
|
723 |
+ WriteLcdString(45, 39, "off"); |
|
724 |
+ break; |
|
725 |
+ case BLUETOOTH_ON: |
|
726 |
+ WriteLcdString(45, 39, "on"); |
|
727 |
+ break; |
|
728 |
+ case BLUETOOTH_CONNECTED: |
|
729 |
+ WriteLcdString(45, 39, "conn."); |
|
730 |
+ break; |
|
731 |
+ default: |
|
732 |
+ break; |
|
733 |
+ }; |
|
734 |
+ if (hal_bluetooth_get_state() >= BLUETOOTH_ON) { |
|
735 |
+ bd_addr = hal_bluetooth_get_local_bdaddr(); |
|
736 |
+ snprintf(bstr, 20, "%02x:%02x:%02x:%02x:%02x:%02x", bd_addr[5], bd_addr[4], bd_addr[3], bd_addr[2], bd_addr[1], bd_addr[0]); |
|
737 |
+ WriteLcdString(2, 48, bstr); |
|
738 |
+ } else { |
|
739 |
+ } |
|
740 |
+ WriteLcdString(2, 57, "Visible:"); |
|
741 |
+ if ((sdata->pos == 1 && sdata->on) || sdata->pos != 1) { |
|
742 |
+ WriteLcdCharacter(45, 57, hal_bluetooth_get_visible() ? 'x' : '_'); |
|
743 |
+ } |
|
744 |
+ |
|
745 |
+ hal_lcd_update_display(); |
|
746 |
+} |
|
747 |
+ |
|
748 |
+void bluetooth_handle_updown(u8t pos, s8t incr) |
|
749 |
+{ |
|
750 |
+ switch (pos) { |
|
751 |
+ case 0: |
|
752 |
+ if (hal_bluetooth_get_state() >= BLUETOOTH_ON) { |
|
753 |
+ hal_bluetooth_set_state(BLUETOOTH_OFF); |
|
754 |
+ bluetooth_screen.bt_en = FALSE; |
|
755 |
+ } else { |
|
756 |
+ hal_bluetooth_set_state(BLUETOOTH_ON); |
|
757 |
+ bluetooth_screen.bt_en = TRUE; |
|
758 |
+ } |
|
759 |
+ break; |
|
760 |
+ case 1: |
|
761 |
+ if (hal_bluetooth_get_state() >= BLUETOOTH_ON && !hal_bluetooth_get_visible()) { |
|
762 |
+ hal_bluetooth_set_visible(TRUE); |
|
763 |
+ } else { |
|
764 |
+ hal_bluetooth_set_visible(FALSE); |
|
765 |
+ } |
|
766 |
+ break; |
|
767 |
+ case 2: |
|
768 |
+ break; |
|
769 |
+ case 3: |
|
770 |
+ break; |
|
771 |
+ case 4: |
|
772 |
+ break; |
|
773 |
+ case 5: |
|
774 |
+ break; |
|
775 |
+ case 6: |
|
776 |
+ break; |
|
777 |
+ case 7: |
|
778 |
+ break; |
|
779 |
+ case 8: |
|
780 |
+ break; |
|
781 |
+ default: |
|
782 |
+ break; |
|
783 |
+ }; |
|
784 |
+} |
|
785 |
+ |
|
786 |
+void handle_bluetooth_buttons(watch_button button, bluetooth_data_t *sdata) |
|
787 |
+{ |
|
788 |
+ switch (button) { |
|
789 |
+ case BUTTON_A: |
|
790 |
+ bluetooth_handle_updown(sdata->pos, 1); |
|
791 |
+ break; |
|
792 |
+ case BUTTON_B: |
|
793 |
+ bluetooth_handle_updown(sdata->pos, -1); |
|
794 |
+ break; |
|
795 |
+ case BUTTON_F: |
|
796 |
+ sdata->pos++; |
|
797 |
+ sdata->pos %= 2; |
|
798 |
+ break; |
|
799 |
+ default: |
|
800 |
+ break; |
|
801 |
+ } |
|
802 |
+ draw_bluetooth_screen(sdata); |
|
803 |
+} |
|
804 |
+ |
|
805 |
+void bluetooth_screen_events(u16t event, void *data) |
|
806 |
+{ |
|
807 |
+ switch (event) { |
|
808 |
+ case EVENT_SCREEN_VISIBLE: |
|
809 |
+ bluetooth_screen.pos = 0; |
|
810 |
+ bluetooth_screen.bt_en = (hal_bluetooth_get_state() > 0); |
|
811 |
+ draw_bluetooth_screen(&bluetooth_screen); |
|
812 |
+ hal_enable_halfsecond_timer(); |
|
813 |
+ break; |
|
814 |
+ case EVENT_SCREEN_DESTROY: |
|
815 |
+ hal_disable_halfsecond_timer(); |
|
816 |
+ break; |
|
817 |
+ case EVENT_USER_BUTTONS: |
|
818 |
+ dbg_out("button event %d\n", *(int *)data); |
|
819 |
+ handle_bluetooth_buttons(*(watch_button *)data, &bluetooth_screen); |
|
820 |
+ break; |
|
821 |
+ case EVENT_HALF_SEC_TIMER: |
|
822 |
+ if (bluetooth_screen.on) |
|
823 |
+ bluetooth_screen.on = FALSE; |
|
824 |
+ else |
|
825 |
+ bluetooth_screen.on = TRUE; |
|
826 |
+ draw_bluetooth_screen(&bluetooth_screen); |
|
827 |
+ break; |
|
828 |
+ default: |
|
829 |
+ break; |
|
830 |
+ }; |
|
831 |
+} |
|
832 |
+ |
... | ... |
@@ -1,8 +1,11 @@ |
1 |
+#include <stdio.h> |
|
2 |
+ |
|
1 | 3 |
#include "oswald.h" |
2 | 4 |
#include "oswald_main.h" |
3 | 5 |
#include "oswald_watch_faces.h" |
4 | 6 |
#include "Fonts.h" |
5 | 7 |
#include "LcdDisplay.h" |
8 |
+#include "oswald_hal.h" |
|
6 | 9 |
|
7 | 10 |
#include "oswald_screens.h" |
8 | 11 |
|
... | ... |
@@ -14,7 +17,7 @@ typedef struct { |
14 | 17 |
} idle_data_t; |
15 | 18 |
static idle_data_t idle_screen = { |
16 | 19 |
DrawLcdDigitalClock, |
17 |
- FALSE, |
|
20 |
+ TRUE, |
|
18 | 21 |
FALSE, |
19 | 22 |
}; |
20 | 23 |
|
... | ... |
@@ -36,7 +39,7 @@ void idle_handle_user_buttons(watch_button button) |
36 | 39 |
idle_screen.screendraw_func = DrawLcdAnaClock; |
37 | 40 |
}; |
38 | 41 |
break; |
39 |
- case BUTTON_D: |
|
42 |
+ case BUTTON_F: |
|
40 | 43 |
OswaldState.screen_id = DATETIME_SETTING_SCREEN; |
41 | 44 |
OswaldState.screen = &OswaldScreens[OswaldState.screen_id]; |
42 | 45 |
OswaldState.screen->event_func(EVENT_SCREEN_VISIBLE, NULL); |
... | ... |
@@ -74,7 +77,7 @@ static accelscreen_data_t accel_screen = { |
74 | 77 |
|
75 | 78 |
void draw_accel_screen(accel_data_t *accel_data) |
76 | 79 |
{ |
77 |
- lcd_clear_display(); |
|
80 |
+ hal_lcd_clear_display(); |
|
78 | 81 |
SetFont(MetaWatch16); |
79 | 82 |
WriteLcdString(2, 2, "X:"); |
80 | 83 |
WriteLcdNumber(20, 2, accel_data->x); |
... | ... |
@@ -82,7 +85,7 @@ void draw_accel_screen(accel_data_t *accel_data) |
82 | 85 |
WriteLcdNumber(20, 18, accel_data->y); |
83 | 86 |
WriteLcdString(2, 34, "Z:"); |
84 | 87 |
WriteLcdNumber(20, 34, accel_data->z); |
85 |
- lcd_update_display(); |
|
88 |
+ hal_lcd_update_display(); |
|
86 | 89 |
} |
87 | 90 |
|
88 | 91 |
void accel_handle_events(u16t event, void *data) |
... | ... |
@@ -119,7 +122,7 @@ static datetime_setup_data_t dt_setup_screen = { |
119 | 122 |
|
120 | 123 |
void draw_datetime_setup_screen(datetime_setup_data_t *sdata) |
121 | 124 |
{ |
122 |
- lcd_clear_display(); |
|
125 |
+ hal_lcd_clear_display(); |
|
123 | 126 |
SetFont(MetaWatch16); |
124 | 127 |
WriteLcdString(2, 2, "Set"); |
125 | 128 |
|
... | ... |
@@ -172,7 +175,7 @@ void draw_datetime_setup_screen(datetime_setup_data_t *sdata) |
172 | 175 |
} |
173 | 176 |
WriteLcdString(15, 79, "dd.mm. mm/dd"); |
174 | 177 |
|
175 |
- lcd_update_display(); |
|
178 |
+ hal_lcd_update_display(); |
|
176 | 179 |
} |
177 | 180 |
|
178 | 181 |
void datetime_handle_updown(u8t pos, s8t incr) |
... | ... |
@@ -235,6 +238,10 @@ void datetime_handle_updown(u8t pos, s8t incr) |
235 | 238 |
default: |
236 | 239 |
break; |
237 | 240 |
}; |
241 |
+ if (pos == 2) |
|
242 |
+ hal_set_rtc(&OswaldClk, TRUE); |
|
243 |
+ else |
|
244 |
+ hal_set_rtc(&OswaldClk, FALSE); |
|
238 | 245 |
} |
239 | 246 |
|
240 | 247 |
void handle_setup_datetime_buttons(watch_button button, datetime_setup_data_t *sdata) |
... | ... |
@@ -246,7 +253,7 @@ void handle_setup_datetime_buttons(watch_button button, datetime_setup_data_t *s |
246 | 253 |
case BUTTON_B: |
247 | 254 |
datetime_handle_updown(sdata->pos, -1); |
248 | 255 |
break; |
249 |
- case BUTTON_D: |
|
256 |
+ case BUTTON_F: |
|
250 | 257 |
sdata->pos++; |
251 | 258 |
sdata->pos %= 8; |
252 | 259 |
break; |
... | ... |
@@ -260,11 +267,12 @@ void datetime_setup_events(u16t event, void *data) |
260 | 267 |
{ |
261 | 268 |
switch (event) { |
262 | 269 |
case EVENT_SCREEN_VISIBLE: |
270 |
+ dt_setup_screen.pos = 0; |
|
263 | 271 |
draw_datetime_setup_screen(&dt_setup_screen); |
264 |
- enable_halfsecond_timer(); |
|
272 |
+ hal_enable_halfsecond_timer(); |
|
265 | 273 |
break; |
266 | 274 |
case EVENT_SCREEN_DESTROY: |
267 |
- disable_halfsecond_timer(); |
|
275 |
+ hal_disable_halfsecond_timer(); |
|
268 | 276 |
break; |
269 | 277 |
case EVENT_USER_BUTTONS: |
270 | 278 |
dbg_out("button event %d\n", *(int *)data); |
... | ... |
@@ -282,6 +290,172 @@ void datetime_setup_events(u16t event, void *data) |
282 | 290 |
}; |
283 | 291 |
} |
284 | 292 |
|
293 |
+typedef struct { |
|
294 |
+ u8t pos; |
|
295 |
+ boolean on; |
|
296 |
+} alarm_setup_data_t; |
|
297 |
+static alarm_setup_data_t alarm_setup_screen = { |
|
298 |
+ 0, |
|
299 |
+ TRUE |
|
300 |
+}; |
|
301 |
+ |
|
302 |
+void draw_alarm_setup_screen(alarm_setup_data_t *sdata) |
|
303 |
+{ |
|
304 |
+ hal_lcd_clear_display(); |
|
305 |
+ |
|
306 |
+ SetFont(MetaWatch16); |
|
307 |
+ WriteLcdString(2, 2, "Alarm"); |
|
308 |
+ |
|
309 |
+ SetFont(MetaWatchTime); |
|
310 |
+ if ((sdata->pos == 0 && sdata->on) || sdata->pos != 0) { |
|
311 |
+ WriteLcdCharacter(2, 20, (OswaldAlarm.hour / 10)); |
|
312 |
+ WriteLcdCharacter(14, 20, (OswaldAlarm.hour % 10)); |
|
313 |
+ } |
|
314 |
+ WriteLcdCharacter(26, 20, TIME_CHARACTER_COLON_INDEX); |
|
315 |
+ |
|
316 |
+ if ((sdata->pos == 1 && sdata->on) || sdata->pos != 1) { |
|
317 |
+ WriteLcdCharacter(31, 20, (OswaldAlarm.minute / 10)); |
|
318 |
+ WriteLcdCharacter(43, 20, (OswaldAlarm.minute % 10)); |
|
319 |
+ } |
|
320 |
+ |
|
321 |
+ SetFont(MetaWatchMonospaced10); |
|
322 |
+ WriteLcdCharacter(3, 45, 'S'); |
|
323 |
+ WriteLcdCharacter(15, 45, 'M'); |
|
324 |
+ WriteLcdCharacter(27, 45, 'T'); |
|
325 |
+ WriteLcdCharacter(39, 45, 'W'); |
|
326 |
+ WriteLcdCharacter(51, 45, 'T'); |
|
327 |
+ WriteLcdCharacter(63, 45, 'F'); |
|
328 |
+ WriteLcdCharacter(75, 45, 'S'); |
|
329 |
+ |
|
330 |
+ if ((sdata->pos == 2 && sdata->on) || sdata->pos != 2) |
|
331 |
+ WriteLcdCharacter(3, 55, (OswaldAlarm.wday & WDAY_SUNDAY) ? 'x' : '_'); |
|
332 |
+ if ((sdata->pos == 3 && sdata->on) || sdata->pos != 3) |
|
333 |
+ WriteLcdCharacter(15, 55, (OswaldAlarm.wday & WDAY_MONDAY) ? 'x' : '_'); |
|
334 |
+ if ((sdata->pos == 4 && sdata->on) || sdata->pos != 4) |
|
335 |
+ WriteLcdCharacter(27, 55, (OswaldAlarm.wday & WDAY_TUESDAY) ? 'x' : '_'); |
|
336 |
+ if ((sdata->pos == 5 && sdata->on) || sdata->pos != 5) |
|
337 |
+ WriteLcdCharacter(39, 55, (OswaldAlarm.wday & WDAY_WEDNESDAY) ? 'x' : '_'); |
|
338 |
+ if ((sdata->pos == 6 && sdata->on) || sdata->pos != 6) |
|
339 |
+ WriteLcdCharacter(51, 55, (OswaldAlarm.wday & WDAY_THURSDAY) ? 'x' : '_'); |
|
340 |
+ if ((sdata->pos == 7 && sdata->on) || sdata->pos != 7) |
|
341 |
+ WriteLcdCharacter(63, 55, (OswaldAlarm.wday & WDAY_FRIDAY) ? 'x' : '_'); |
|
342 |
+ if ((sdata->pos == 8 && sdata->on) || sdata->pos != 8) |
|
343 |
+ WriteLcdCharacter(75, 55, (OswaldAlarm.wday & WDAY_SATURDAY) ? 'x' : '_'); |
|
344 |
+ |
|
345 |
+#if 0 |
|
346 |
+ SetFont(MetaWatch7); |
|
347 |
+ if ((sdata->pos == 6 && sdata->on) || sdata->pos != 6) { |
|
348 |
+ if (OswaldClk.clk24hr) |
|
349 |
+ WriteLcdString(2, 66, "x"); |
|
350 |
+ else |
|
351 |
+ WriteLcdString(2, 66, "_"); |
|
352 |
+ } |
|
353 |
+ WriteLcdString(15, 66, "24hr"); |
|
354 |
+ |
|
355 |
+ if ((sdata->pos == 7 && sdata->on) || sdata->pos != 7) { |
|
356 |
+ if (OswaldClk.day_first) |
|
357 |
+ WriteLcdString(2, 79, "x"); |
|
358 |
+ else |
|
359 |
+ WriteLcdString(2, 79, "_"); |
|
360 |
+ } |
|
361 |
+ WriteLcdString(15, 79, "dd.mm. mm/dd"); |
|
362 |
+#endif |
|
363 |
+ hal_lcd_update_display(); |
|
364 |
+} |
|
365 |
+ |
|
366 |
+void alarm_handle_updown(u8t pos, s8t incr) |
|
367 |
+{ |
|
368 |
+ switch (pos) { |
|
369 |
+ case 0: // hour |
|
370 |
+ if (OswaldAlarm.hour == 0 && incr == -1) { |
|
371 |
+ OswaldAlarm.hour = 23; |
|
372 |
+ break; |
|
373 |
+ }; |
|
374 |
+ OswaldAlarm.hour += incr; |
|
375 |
+ if (OswaldAlarm.hour > 23) |
|
376 |
+ OswaldAlarm.hour = 0; |
|
377 |
+ break; |
|
378 |
+ case 1: // minute |
|
379 |
+ if (OswaldAlarm.minute == 0 && incr == -1) { |
|
380 |
+ OswaldAlarm.minute = 59; |
|
381 |
+ break; |
|
382 |
+ }; |
|
383 |
+ OswaldAlarm.minute += incr; |
|
384 |
+ if (OswaldAlarm.minute > 59) |
|
385 |
+ OswaldAlarm.minute = 0; |
|
386 |
+ break; |
|
387 |
+ case 2: // sunday |
|
388 |
+ OswaldAlarm.wday ^= WDAY_SUNDAY; |
|
389 |
+ break; |
|
390 |
+ case 3: // monday |
|
391 |
+ OswaldAlarm.wday ^= WDAY_MONDAY; |
|
392 |
+ break; |
|
393 |
+ case 4: // tuesday |
|
394 |
+ OswaldAlarm.wday ^= WDAY_TUESDAY; |
|
395 |
+ break; |
|
396 |
+ case 5: // wednesday |
|
397 |
+ OswaldAlarm.wday ^= WDAY_WEDNESDAY; |
|
398 |
+ break; |
|
399 |
+ case 6: // thursday |
|
400 |
+ OswaldAlarm.wday ^= WDAY_THURSDAY; |
|
401 |
+ break; |
|
402 |
+ case 7: // friday |
|
403 |
+ OswaldAlarm.wday ^= WDAY_FRIDAY; |
|
404 |
+ break; |
|
405 |
+ case 8: // saturday |
|
406 |
+ OswaldAlarm.wday ^= WDAY_SATURDAY; |
|
407 |
+ break; |
|
408 |
+ default: |
|
409 |
+ break; |
|
410 |
+ }; |
|
411 |
+} |
|
412 |
+ |
|
413 |
+void handle_setup_alarm_buttons(watch_button button, alarm_setup_data_t *sdata) |
|
414 |
+{ |
|
415 |
+ switch (button) { |
|
416 |
+ case BUTTON_A: |
|
417 |
+ alarm_handle_updown(sdata->pos, 1); |
|
418 |
+ break; |
|
419 |
+ case BUTTON_B: |
|
420 |
+ alarm_handle_updown(sdata->pos, -1); |
|
421 |
+ break; |
|
422 |
+ case BUTTON_F: |
|
423 |
+ sdata->pos++; |
|
424 |
+ sdata->pos %= 9; |
|
425 |
+ break; |
|
426 |
+ default: |
|
427 |
+ break; |
|
428 |
+ } |
|
429 |
+ draw_alarm_setup_screen(sdata); |
|
430 |
+} |
|
431 |
+ |
|
432 |
+void alarm_setup_events(u16t event, void *data) |
|
433 |
+{ |
|
434 |
+ switch (event) { |
|
435 |
+ case EVENT_SCREEN_VISIBLE: |
|
436 |
+ alarm_setup_screen.pos = 0; |
|
437 |
+ draw_alarm_setup_screen(&alarm_setup_screen); |
|
438 |
+ hal_enable_halfsecond_timer(); |
|
439 |
+ break; |
|
440 |
+ case EVENT_SCREEN_DESTROY: |
|
441 |
+ hal_disable_halfsecond_timer(); |
|
442 |
+ break; |
|
443 |
+ case EVENT_USER_BUTTONS: |
|
444 |
+ dbg_out("button event %d\n", *(int *)data); |
|
445 |
+ handle_setup_alarm_buttons(*(watch_button *)data, &alarm_setup_screen); |
|
446 |
+ break; |
|
447 |
+ case EVENT_HALF_SEC_TIMER: |
|
448 |
+ if (alarm_setup_screen.on) |
|
449 |
+ alarm_setup_screen.on = FALSE; |
|
450 |
+ else |
|
451 |
+ alarm_setup_screen.on = TRUE; |
|
452 |
+ draw_alarm_setup_screen(&alarm_setup_screen); |
|
453 |
+ break; |
|
454 |
+ default: |
|
455 |
+ break; |
|
456 |
+ }; |
|
457 |
+} |
|
458 |
+ |
|
285 | 459 |
|
286 | 460 |
typedef struct { |
287 | 461 |
u8t menu_pos; |
... | ... |
@@ -290,7 +464,7 @@ static test_menu_t test_menu = { 0 }; |
290 | 464 |
|
291 | 465 |
void draw_menu_test_screen(void) |
292 | 466 |
{ |
293 |
- lcd_clear_display(); |
|
467 |
+ hal_lcd_clear_display(); |
|
294 | 468 |
SetFont(MetaWatch16); |
295 | 469 |
WriteLcdString(2, 2, "Menu"); |
296 | 470 |
SetFont(MetaWatch7); |
... | ... |
@@ -301,7 +475,7 @@ void draw_menu_test_screen(void) |
301 | 475 |
WriteLcdString(2, 56, "Item 5"); |
302 | 476 |
|
303 | 477 |
WriteLcdString(50, 20+(9*test_menu.menu_pos), "*"); |
304 |
- lcd_update_display(); |
|
478 |
+ hal_lcd_update_display(); |
|
305 | 479 |
} |
306 | 480 |
|
307 | 481 |
static void handle_menu_user_buttons(watch_button button) |
... | ... |
@@ -354,8 +528,10 @@ static stopwatch_data_t stopwatch_screen = { 0, 0, 0, 0, 0, 0, 0, 0, FALSE }; |
354 | 528 |
|
355 | 529 |
static void update_stop_watch_screen(stopwatch_data_t *sdata) |
356 | 530 |
{ |
531 |
+ char tstr[16]; |
|
357 | 532 |
SetFont(MetaWatchMonospaced10); |
358 | 533 |
|
534 |
+#if 0 |
|
359 | 535 |
WriteLcdNumber(0, 30, sdata->hr); |
360 | 536 |
WriteLcdCharacter(14, 30, ':'); |
361 | 537 |
WriteLcdNumber(19, 30, sdata->min); |
... | ... |
@@ -371,8 +547,14 @@ static void update_stop_watch_screen(stopwatch_data_t *sdata) |
371 | 547 |
WriteLcdNumber(38, 50, sdata->lapse_sec); |
372 | 548 |
WriteLcdCharacter(52, 50, '.'); |
373 | 549 |
WriteLcdNumber(57, 50, sdata->lapse_csec / 10); |
374 |
- |
|
375 |
- lcd_update_display(); |
|
550 |
+#else |
|
551 |
+ snprintf(tstr, 16, "%02d:%02d:%02d.%1d", sdata->hr, sdata->min, sdata->sec, sdata->csec / 10); |
|
552 |
+ WriteLcdString(0, 30, tstr); |
|
553 |
+ snprintf(tstr, 16, "%02d:%02d:%02d.%02d", sdata->lapse_hr, sdata->lapse_min, sdata->lapse_sec, sdata->lapse_csec); |
|
554 |
+ WriteLcdString(0, 50, tstr); |
|
555 |
+#endif |
|
556 |
+ |
|
557 |
+ hal_lcd_update_display(); |
|
376 | 558 |
} |
377 | 559 |
|
378 | 560 |
static void draw_stop_watch_screen(stopwatch_data_t *sdata) |
... | ... |
@@ -388,10 +570,10 @@ static void handle_stop_watch_buttons(watch_button button) |
388 | 570 |
switch (button) { |
389 | 571 |
case BUTTON_A: // start/stop |
390 | 572 |
if (stopwatch_screen.running) { |
391 |
- disable_centisecond_timer(); |
|
573 |
+ hal_disable_centisecond_timer(); |
|
392 | 574 |
stopwatch_screen.running = FALSE; |
393 | 575 |
} else { |
394 |
- enable_centisecond_timer(); |
|
576 |
+ hal_enable_centisecond_timer(); |
|
395 | 577 |
stopwatch_screen.running = TRUE; |
396 | 578 |
} |
397 | 579 |
break; |
... | ... |
@@ -401,7 +583,7 @@ static void handle_stop_watch_buttons(watch_button button) |
401 | 583 |
stopwatch_screen.lapse_sec = stopwatch_screen.sec; |
402 | 584 |
stopwatch_screen.lapse_csec = stopwatch_screen.csec; |
403 | 585 |
break; |
404 |
- case BUTTON_D: // reset |
|
586 |
+ case BUTTON_F: // reset |
|
405 | 587 |
stopwatch_screen.hr = 0; |
406 | 588 |
stopwatch_screen.min = 0; |
407 | 589 |
stopwatch_screen.sec = 0; |
... | ... |
@@ -425,11 +607,11 @@ void stop_watch_handle_events(u16t event, void *data) |
425 | 607 |
update_stop_watch_screen(&stopwatch_screen); |
426 | 608 |
break; |
427 | 609 |
case EVENT_SCREEN_VISIBLE: |
428 |
- lcd_clear_display(); |
|
610 |
+ hal_lcd_clear_display(); |
|
429 | 611 |
draw_stop_watch_screen(&stopwatch_screen); |
430 | 612 |
break; |
431 | 613 |
case EVENT_SCREEN_DESTROY: |
432 |
- disable_centisecond_timer(); |
|
614 |
+ hal_disable_centisecond_timer(); |
|
433 | 615 |
stopwatch_screen.running = FALSE; |
434 | 616 |
break; |
435 | 617 |
case EVENT_CS_TIMER: |
... | ... |
@@ -456,3 +638,42 @@ void stop_watch_handle_events(u16t event, void *data) |
456 | 638 |
break; |
457 | 639 |
}; |
458 | 640 |
} |
641 |
+ |
|
642 |
+ |
|
643 |
+void draw_alarm_screen(void) |
|
644 |
+{ |
|
645 |
+ hal_lcd_clear_display(); |
|
646 |
+ |
|
647 |
+ SetFont(MetaWatch16); |
|
648 |
+ WriteLcdString(2, 2, "ALARM !"); |
|
649 |
+ |
|
650 |
+ hal_lcd_update_display(); |
|
651 |
+} |
|
652 |
+ |
|
653 |
+void alarm_handle_events(u16t event, void *data) |
|
654 |
+{ |
|
655 |
+ switch (event) { |
|
656 |
+ case EVENT_SCREEN_VISIBLE: |
|
657 |
+ draw_alarm_screen(); |
|
658 |
+ hal_enable_halfsecond_timer(); |
|
659 |
+ hal_vibration_set_state(TRUE); |
|
660 |
+ break; |
|
661 |
+ case EVENT_SCREEN_DESTROY: |
|
662 |
+ hal_disable_halfsecond_timer(); |
|
663 |
+ hal_lcd_set_backlight(FALSE); |
|
664 |
+ hal_vibration_set_state(FALSE); |
|
665 |
+ break; |
|
666 |
+ case EVENT_USER_BUTTONS: |
|
667 |
+ dbg_out("button event %d\n", *(int *)data); |
|
668 |
+ // hal_lcd_set_backlight(FALSE); |
|
669 |
+ break; |
|
670 |
+ case EVENT_HALF_SEC_TIMER: |
|
671 |
+ hal_lcd_set_backlight(!hal_lcd_get_backlight()); |
|
672 |
+ hal_vibration_set_state(!hal_vibration_get_state()); |
|
673 |
+ dbg_out("timer\n"); |
|
674 |
+ break; |
|
675 |
+ default: |
|
676 |
+ break; |
|
677 |
+ }; |
|
678 |
+} |
|
679 |
+ |
... | ... |
@@ -82,6 +82,7 @@ void draw_accel_screen(accel_data_t *accel_data) |
82 | 82 |
WriteLcdNumber(20, 18, accel_data->y); |
83 | 83 |
WriteLcdString(2, 34, "Z:"); |
84 | 84 |
WriteLcdNumber(20, 34, accel_data->z); |
85 |
+ lcd_update_display(); |
|
85 | 86 |
} |
86 | 87 |
|
87 | 88 |
void accel_handle_events(u16t event, void *data) |
... | ... |
@@ -170,6 +171,8 @@ void draw_datetime_setup_screen(datetime_setup_data_t *sdata) |
170 | 171 |
WriteLcdString(2, 79, "_"); |
171 | 172 |
} |
172 | 173 |
WriteLcdString(15, 79, "dd.mm. mm/dd"); |
174 |
+ |
|
175 |
+ lcd_update_display(); |
|
173 | 176 |
} |
174 | 177 |
|
175 | 178 |
void datetime_handle_updown(u8t pos, s8t incr) |
... | ... |
@@ -298,6 +301,7 @@ void draw_menu_test_screen(void) |
298 | 301 |
WriteLcdString(2, 56, "Item 5"); |
299 | 302 |
|
300 | 303 |
WriteLcdString(50, 20+(9*test_menu.menu_pos), "*"); |
304 |
+ lcd_update_display(); |
|
301 | 305 |
} |
302 | 306 |
|
303 | 307 |
static void handle_menu_user_buttons(watch_button button) |
... | ... |
@@ -333,3 +337,122 @@ void test_menu_handle_events(u16t event, void *data) |
333 | 337 |
}; |
334 | 338 |
} |
335 | 339 |
|
340 |
+ |
|
341 |
+typedef struct { |
|
342 |
+ u8t hr; |
|
343 |
+ u8t min; |
|
344 |
+ u8t sec; |
|
345 |
+ u8t csec; |
|
346 |
+ u8t lapse_hr; |
|
347 |
+ u8t lapse_min; |
|
348 |
+ u8t lapse_sec; |
|
349 |
+ u8t lapse_csec; |
|
350 |
+ boolean running; |
|
351 |
+} stopwatch_data_t; |
|
352 |
+static stopwatch_data_t stopwatch_screen = { 0, 0, 0, 0, 0, 0, 0, 0, FALSE }; |
|
353 |
+ |
|
354 |
+ |
|
355 |
+static void update_stop_watch_screen(stopwatch_data_t *sdata) |
|
356 |
+{ |
|
357 |
+ SetFont(MetaWatchMonospaced10); |
|
358 |
+ |
|
359 |
+ WriteLcdNumber(0, 30, sdata->hr); |
|
360 |
+ WriteLcdCharacter(14, 30, ':'); |
|
361 |
+ WriteLcdNumber(19, 30, sdata->min); |
|
362 |
+ WriteLcdCharacter(33, 30, ':'); |
|
363 |
+ WriteLcdNumber(38, 30, sdata->sec); |
|
364 |
+ WriteLcdCharacter(52, 30, '.'); |
|
365 |
+ WriteLcdNumber(57, 30, sdata->csec / 10); |
|
366 |
+ |
|
367 |
+ WriteLcdNumber(0, 50, sdata->lapse_hr); |
|
368 |
+ WriteLcdCharacter(14, 50, ':'); |
|
369 |
+ WriteLcdNumber(19, 50, sdata->lapse_min); |
|
370 |
+ WriteLcdCharacter(33, 50, ':'); |
|
371 |
+ WriteLcdNumber(38, 50, sdata->lapse_sec); |
|
372 |
+ WriteLcdCharacter(52, 50, '.'); |
|
373 |
+ WriteLcdNumber(57, 50, sdata->lapse_csec / 10); |
|
374 |
+ |
|
375 |
+ lcd_update_display(); |
|
376 |
+} |
|
377 |
+ |
|
378 |
+static void draw_stop_watch_screen(stopwatch_data_t *sdata) |
|
379 |
+{ |
|
380 |
+ SetFont(MetaWatch16); |
|
381 |
+ WriteLcdString(2, 5, "StopWatch"); |
|
382 |
+ |
|
383 |
+ update_stop_watch_screen(sdata); |
|
384 |
+} |
|
385 |
+ |
|
386 |
+static void handle_stop_watch_buttons(watch_button button) |
|
387 |
+{ |
|
388 |
+ switch (button) { |
|
389 |
+ case BUTTON_A: // start/stop |
|
390 |
+ if (stopwatch_screen.running) { |
|
391 |
+ disable_centisecond_timer(); |
|
392 |
+ stopwatch_screen.running = FALSE; |
|
393 |
+ } else { |
|
394 |
+ enable_centisecond_timer(); |
|
395 |
+ stopwatch_screen.running = TRUE; |
|
396 |
+ } |
|
397 |
+ break; |
|
398 |
+ case BUTTON_B: // lapse |
|
399 |
+ stopwatch_screen.lapse_hr = stopwatch_screen.hr; |
|
400 |
+ stopwatch_screen.lapse_min = stopwatch_screen.min; |
|
401 |
+ stopwatch_screen.lapse_sec = stopwatch_screen.sec; |
|
402 |
+ stopwatch_screen.lapse_csec = stopwatch_screen.csec; |
|
403 |
+ break; |
|
404 |
+ case BUTTON_D: // reset |
|
405 |
+ stopwatch_screen.hr = 0; |
|
406 |
+ stopwatch_screen.min = 0; |
|
407 |
+ stopwatch_screen.sec = 0; |
|
408 |
+ stopwatch_screen.csec = 0; |
|
409 |
+ stopwatch_screen.lapse_hr = 0; |
|
410 |
+ stopwatch_screen.lapse_min = 0; |
|
411 |
+ stopwatch_screen.lapse_sec = 0; |
|
412 |
+ stopwatch_screen.lapse_csec = 0; |
|
413 |
+ break; |
|
414 |
+ default: |
|
415 |
+ break; |
|
416 |
+ } |
|
417 |
+} |
|
418 |
+ |
|
419 |
+void stop_watch_handle_events(u16t event, void *data) |
|
420 |
+{ |
|
421 |
+ switch (event) { |
|
422 |
+ case EVENT_USER_BUTTONS: |
|
423 |
+ dbg_out("button event %d\n", *(int *)data); |
|
424 |
+ handle_stop_watch_buttons(*(watch_button *)data); |
|
425 |
+ update_stop_watch_screen(&stopwatch_screen); |
|
426 |
+ break; |
|
427 |
+ case EVENT_SCREEN_VISIBLE: |
|
428 |
+ lcd_clear_display(); |
|
429 |
+ draw_stop_watch_screen(&stopwatch_screen); |
|
430 |
+ break; |
|
431 |
+ case EVENT_SCREEN_DESTROY: |
|
432 |
+ disable_centisecond_timer(); |
|
433 |
+ stopwatch_screen.running = FALSE; |
|
434 |
+ break; |
|
435 |
+ case EVENT_CS_TIMER: |
|
436 |
+ stopwatch_screen.csec++; |
|
437 |
+ if (stopwatch_screen.csec > 99) { |
|
438 |
+ stopwatch_screen.csec = 0; |
|
439 |
+ stopwatch_screen.sec++; |
|
440 |
+ }; |
|
441 |
+ if (stopwatch_screen.sec > 59) { |
|
442 |
+ stopwatch_screen.sec = 0; |
|
443 |
+ stopwatch_screen.min++; |
|
444 |
+ }; |
|
445 |
+ if (stopwatch_screen.min > 59) { |
|
446 |
+ stopwatch_screen.min = 0; |
|
447 |
+ stopwatch_screen.hr++; |
|
448 |
+ }; |
|
449 |
+ if (stopwatch_screen.hr > 59) { |
|
450 |
+ stopwatch_screen.hr = 0; |
|
451 |
+ }; |
|
452 |
+ if (stopwatch_screen.csec % 10 == 0) |
|
453 |
+ update_stop_watch_screen(&stopwatch_screen); |
|
454 |
+ break; |
|
455 |
+ default: |
|
456 |
+ break; |
|
457 |
+ }; |
|
458 |
+} |
... | ... |
@@ -1,12 +1,14 @@ |
1 | 1 |
#include "oswald.h" |
2 |
+#include "oswald_main.h" |
|
2 | 3 |
#include "oswald_watch_faces.h" |
3 | 4 |
#include "Fonts.h" |
4 | 5 |
#include "LcdDisplay.h" |
5 | 6 |
|
6 | 7 |
#include "oswald_screens.h" |
7 | 8 |
|
9 |
+ |
|
8 | 10 |
typedef struct { |
9 |
- void (*screendraw_func)(boolean shoq_seconds); |
|
11 |
+ void (*screendraw_func)(boolean show_seconds); |
|
10 | 12 |
boolean show_seconds; |
11 | 13 |
boolean analogue; |
12 | 14 |
} idle_data_t; |
... | ... |
@@ -19,13 +21,13 @@ static idle_data_t idle_screen = { |
19 | 21 |
void idle_handle_user_buttons(watch_button button) |
20 | 22 |
{ |
21 | 23 |
switch (button) { |
22 |
- case BUTTON_D: |
|
24 |
+ case BUTTON_A: |
|
23 | 25 |
if (idle_screen.show_seconds) |
24 | 26 |
idle_screen.show_seconds = FALSE; |
25 | 27 |
else |
26 | 28 |
idle_screen.show_seconds = TRUE; |
27 | 29 |
break; |
28 |
- case BUTTON_E: |
|
30 |
+ case BUTTON_B: |
|
29 | 31 |
if (idle_screen.analogue == TRUE) { |
30 | 32 |
idle_screen.analogue = FALSE; |
31 | 33 |
idle_screen.screendraw_func = DrawLcdDigitalClock; |
... | ... |
@@ -34,6 +36,12 @@ void idle_handle_user_buttons(watch_button button) |
34 | 36 |
idle_screen.screendraw_func = DrawLcdAnaClock; |
35 | 37 |
}; |
36 | 38 |
break; |
39 |
+ case BUTTON_D: |
|
40 |
+ OswaldState.screen_id = DATETIME_SETTING_SCREEN; |
|
41 |
+ OswaldState.screen = &OswaldScreens[OswaldState.screen_id]; |
|
42 |
+ OswaldState.screen->event_func(EVENT_SCREEN_VISIBLE, NULL); |
|
43 |
+ return; |
|
44 |
+ break; |
|
37 | 45 |
default: |
38 | 46 |
break; |
39 | 47 |
}; |
... | ... |
@@ -57,23 +65,38 @@ void idle_handle_events(u16t event, void *data) |
57 | 65 |
} |
58 | 66 |
|
59 | 67 |
|
60 |
-void draw_accel_screen(void) |
|
68 |
+typedef struct { |
|
69 |
+ accel_data_t accdata; |
|
70 |
+} accelscreen_data_t; |
|
71 |
+static accelscreen_data_t accel_screen = { |
|
72 |
+ { 0, 0, 0}, |
|
73 |
+}; |
|
74 |
+ |
|
75 |
+void draw_accel_screen(accel_data_t *accel_data) |
|
61 | 76 |
{ |
62 | 77 |
lcd_clear_display(); |
63 | 78 |
SetFont(MetaWatch16); |
64 | 79 |
WriteLcdString(2, 2, "X:"); |
65 |
- WriteLcdString(20, 2, "123"); |
|
66 |
- WriteLcdString(2, 18, "Z:"); |
|
67 |
- WriteLcdString(20, 18, "123"); |
|
68 |
- WriteLcdString(2, 34, "Y:"); |
|
69 |
- WriteLcdString(20, 34, "123"); |
|
80 |
+ WriteLcdNumber(20, 2, accel_data->x); |
|
81 |
+ WriteLcdString(2, 18, "Y:"); |
|
82 |
+ WriteLcdNumber(20, 18, accel_data->y); |
|
83 |
+ WriteLcdString(2, 34, "Z:"); |
|
84 |
+ WriteLcdNumber(20, 34, accel_data->z); |
|
70 | 85 |
} |
71 | 86 |
|
72 | 87 |
void accel_handle_events(u16t event, void *data) |
73 | 88 |
{ |
74 | 89 |
switch (event) { |
75 | 90 |
case EVENT_SCREEN_VISIBLE: |
76 |
- draw_accel_screen(); |
|
91 |
+ draw_accel_screen(&accel_screen.accdata); |
|
92 |
+ break; |
|
93 |
+ case EVENT_ACCEL_UPDATE: { |
|
94 |
+ accel_data_t *accel_data = (accel_data_t *)data; |
|
95 |
+ accel_screen.accdata.x = accel_data->x; |
|
96 |
+ accel_screen.accdata.y = accel_data->y; |
|
97 |
+ accel_screen.accdata.z = accel_data->z; |
|
98 |
+ draw_accel_screen(&accel_screen.accdata); |
|
99 |
+ }; |
|
77 | 100 |
break; |
78 | 101 |
case EVENT_USER_BUTTONS: |
79 | 102 |
dbg_out("button event %d\n", *(int *)data); |
... | ... |
@@ -84,24 +107,172 @@ void accel_handle_events(u16t event, void *data) |
84 | 107 |
} |
85 | 108 |
|
86 | 109 |
|
87 |
-void draw_datetime_setup_screen(void) |
|
110 |
+typedef struct { |
|
111 |
+ u8t pos; |
|
112 |
+ boolean on; |
|
113 |
+} datetime_setup_data_t; |
|
114 |
+static datetime_setup_data_t dt_setup_screen = { |
|
115 |
+ 0, |
|
116 |
+ TRUE |
|
117 |
+}; |
|
118 |
+ |
|
119 |
+void draw_datetime_setup_screen(datetime_setup_data_t *sdata) |
|
88 | 120 |
{ |
89 | 121 |
lcd_clear_display(); |
90 | 122 |
SetFont(MetaWatch16); |
91 |
- WriteLcdString(2, 2, "Date / Time"); |
|
92 |
- WriteLcdString(2, 18, "Setting"); |
|
93 |
- WriteLcdString(2, 34, "22:39"); |
|
94 |
- WriteLcdString(2, 50, "07.08.2012"); |
|
123 |
+ WriteLcdString(2, 2, "Set"); |
|
124 |
+ |
|
125 |
+ SetFont(MetaWatchTime); |
|
126 |
+ if ((sdata->pos == 0 && sdata->on) || sdata->pos != 0) { |
|
127 |
+ WriteLcdCharacter(2, 20, (OswaldClk.hour / 10)); |
|
128 |
+ WriteLcdCharacter(14, 20, (OswaldClk.hour % 10)); |
|
129 |
+ } |
|
130 |
+ WriteLcdCharacter(26, 20, TIME_CHARACTER_COLON_INDEX); |
|
131 |
+ |
|
132 |
+ if ((sdata->pos == 1 && sdata->on) || sdata->pos != 1) { |
|
133 |
+ WriteLcdCharacter(31, 20, (OswaldClk.minute / 10)); |
|
134 |
+ WriteLcdCharacter(43, 20, (OswaldClk.minute % 10)); |
|
135 |
+ } |
|
136 |
+ |
|
137 |
+ WriteLcdCharacter(55, 20, TIME_CHARACTER_COLON_INDEX); |
|
138 |
+ |
|
139 |
+ if ((sdata->pos == 2 && sdata->on) || sdata->pos != 2) { |
|
140 |
+ WriteLcdCharacter(60, 20, (OswaldClk.second / 10)); |
|
141 |
+ WriteLcdCharacter(72, 20, (OswaldClk.second % 10)); |
|
142 |
+ } |
|
143 |
+ |
|
144 |
+ SetFont(MetaWatch16); |
|
145 |
+ if ((sdata->pos == 3 && sdata->on) || sdata->pos != 3) { |
|
146 |
+ WriteLcdNumber(2, 45, OswaldClk.day); |
|
147 |
+ } |
|
148 |
+ WriteLcdString(18, 45, "."); |
|
149 |
+ if ((sdata->pos == 4 && sdata->on) || sdata->pos != 4) { |
|
150 |
+ WriteLcdNumber(22, 45, OswaldClk.month); |
|
151 |
+ } |
|
152 |
+ WriteLcdString(38, 45, "."); |
|
153 |
+ if ((sdata->pos == 5 && sdata->on) || sdata->pos != 5) { |
|
154 |
+ WriteLcdNumber(42, 45, OswaldClk.year); |
|
155 |
+ } |
|
156 |
+ |
|
157 |
+ SetFont(MetaWatch7); |
|
158 |
+ if ((sdata->pos == 6 && sdata->on) || sdata->pos != 6) { |
|
159 |
+ if (OswaldClk.clk24hr) |
|
160 |
+ WriteLcdString(2, 66, "x"); |
|
161 |
+ else |
|
162 |
+ WriteLcdString(2, 66, "_"); |
|
163 |
+ } |
|
164 |
+ WriteLcdString(15, 66, "24hr"); |
|
165 |
+ |
|
166 |
+ if ((sdata->pos == 7 && sdata->on) || sdata->pos != 7) { |
|
167 |
+ if (OswaldClk.day_first) |
|
168 |
+ WriteLcdString(2, 79, "x"); |
|
169 |
+ else |
|
170 |
+ WriteLcdString(2, 79, "_"); |
|
171 |
+ } |
|
172 |
+ WriteLcdString(15, 79, "dd.mm. mm/dd"); |
|
173 |
+} |
|
174 |
+ |
|
175 |
+void datetime_handle_updown(u8t pos, s8t incr) |
|
176 |
+{ |
|
177 |
+ switch (pos) { |
|
178 |
+ case 0: // hour |
|
179 |
+ if (OswaldClk.hour == 0 && incr == -1) { |
|
180 |
+ OswaldClk.hour = 23; |
|
181 |
+ break; |
|
182 |
+ }; |
|
183 |
+ OswaldClk.hour += incr; |
|
184 |
+ if (OswaldClk.hour > 23) |
|
185 |
+ OswaldClk.hour = 0; |
|
186 |
+ break; |
|
187 |
+ case 1: // minute |
|
188 |
+ if (OswaldClk.minute == 0 && incr == -1) { |
|
189 |
+ OswaldClk.minute = 59; |
|
190 |
+ break; |
|
191 |
+ }; |
|
192 |
+ OswaldClk.minute += incr; |
|
193 |
+ if (OswaldClk.minute > 59) |
|
194 |
+ OswaldClk.minute = 0; |
|
195 |
+ break; |
|
196 |
+ case 2: // second |
|
197 |
+ OswaldClk.second = 0; |
|
198 |
+ break; |
|
199 |
+ case 3: // day |
|
200 |
+ if (OswaldClk.day == 1 && incr == -1) { |
|
201 |
+ OswaldClk.day = 31; |
|
202 |
+ break; |
|
203 |
+ }; |
|
204 |
+ OswaldClk.day += incr; |
|
205 |
+ if (OswaldClk.day > 31) |
|
206 |
+ OswaldClk.day = 1; |
|
207 |
+ break; |
|
208 |
+ case 4: // month |
|
209 |
+ if (OswaldClk.month == 1 && incr == -1) { |
|
210 |
+ OswaldClk.month = 12; |
|
211 |
+ break; |
|
212 |
+ }; |
|
213 |
+ OswaldClk.month += incr; |
|
214 |
+ if (OswaldClk.month > 12) |
|
215 |
+ OswaldClk.month = 1; |
|
216 |
+ break; |
|
217 |
+ case 5: // year |
|
218 |
+ OswaldClk.year += incr; |
|
219 |
+ break; |
|
220 |
+ case 6: // 24hr / 12hr |
|
221 |
+ if (OswaldClk.clk24hr) |
|
222 |
+ OswaldClk.clk24hr = FALSE; |
|
223 |
+ else |
|
224 |
+ OswaldClk.clk24hr = TRUE; |
|
225 |
+ break; |
|
226 |
+ case 7: // dd.mm. / mm/dd |
|
227 |
+ if (OswaldClk.day_first) |
|
228 |
+ OswaldClk.day_first = FALSE; |
|
229 |
+ else |
|
230 |
+ OswaldClk.day_first = TRUE; |
|
231 |
+ break; |
|
232 |
+ default: |
|
233 |
+ break; |
|
234 |
+ }; |
|
235 |
+} |
|
236 |
+ |
|
237 |
+void handle_setup_datetime_buttons(watch_button button, datetime_setup_data_t *sdata) |
|
238 |
+{ |
|
239 |
+ switch (button) { |
|
240 |
+ case BUTTON_A: |
|
241 |
+ datetime_handle_updown(sdata->pos, 1); |
|
242 |
+ break; |
|
243 |
+ case BUTTON_B: |
|
244 |
+ datetime_handle_updown(sdata->pos, -1); |
|
245 |
+ break; |
|
246 |
+ case BUTTON_D: |
|
247 |
+ sdata->pos++; |
|
248 |
+ sdata->pos %= 8; |
|
249 |
+ break; |
|
250 |
+ default: |
|
251 |
+ break; |
|
252 |
+ } |
|
253 |
+ draw_datetime_setup_screen(sdata); |
|
95 | 254 |
} |
96 | 255 |
|
97 | 256 |
void datetime_setup_events(u16t event, void *data) |
98 | 257 |
{ |
99 | 258 |
switch (event) { |
100 | 259 |
case EVENT_SCREEN_VISIBLE: |
101 |
- draw_datetime_setup_screen(); |
|
260 |
+ draw_datetime_setup_screen(&dt_setup_screen); |
|
261 |
+ enable_halfsecond_timer(); |
|
262 |
+ break; |
|
263 |
+ case EVENT_SCREEN_DESTROY: |
|
264 |
+ disable_halfsecond_timer(); |
|
102 | 265 |
break; |
103 | 266 |
case EVENT_USER_BUTTONS: |
104 | 267 |
dbg_out("button event %d\n", *(int *)data); |
268 |
+ handle_setup_datetime_buttons(*(watch_button *)data, &dt_setup_screen); |
|
269 |
+ break; |
|
270 |
+ case EVENT_HALF_SEC_TIMER: |
|
271 |
+ if (dt_setup_screen.on) |
|
272 |
+ dt_setup_screen.on = FALSE; |
|
273 |
+ else |
|
274 |
+ dt_setup_screen.on = TRUE; |
|
275 |
+ draw_datetime_setup_screen(&dt_setup_screen); |
|
105 | 276 |
break; |
106 | 277 |
default: |
107 | 278 |
break; |
... | ... |
@@ -5,24 +5,58 @@ |
5 | 5 |
|
6 | 6 |
#include "oswald_screens.h" |
7 | 7 |
|
8 |
+typedef struct { |
|
9 |
+ void (*screendraw_func)(boolean shoq_seconds); |
|
10 |
+ boolean show_seconds; |
|
11 |
+ boolean analogue; |
|
12 |
+} idle_data_t; |
|
13 |
+static idle_data_t idle_screen = { |
|
14 |
+ DrawLcdDigitalClock, |
|
15 |
+ FALSE, |
|
16 |
+ FALSE, |
|
17 |
+}; |
|
18 |
+ |
|
8 | 19 |
void idle_handle_user_buttons(watch_button button) |
9 | 20 |
{ |
21 |
+ switch (button) { |
|
22 |
+ case BUTTON_D: |
|
23 |
+ if (idle_screen.show_seconds) |
|
24 |
+ idle_screen.show_seconds = FALSE; |
|
25 |
+ else |
|
26 |
+ idle_screen.show_seconds = TRUE; |
|
27 |
+ break; |
|
28 |
+ case BUTTON_E: |
|
29 |
+ if (idle_screen.analogue == TRUE) { |
|
30 |
+ idle_screen.analogue = FALSE; |
|
31 |
+ idle_screen.screendraw_func = DrawLcdDigitalClock; |
|
32 |
+ } else { |
|
33 |
+ idle_screen.analogue = TRUE; |
|
34 |
+ idle_screen.screendraw_func = DrawLcdAnaClock; |
|
35 |
+ }; |
|
36 |
+ break; |
|
37 |
+ default: |
|
38 |
+ break; |
|
39 |
+ }; |
|
40 |
+ idle_screen.screendraw_func(idle_screen.show_seconds); |
|
10 | 41 |
} |
42 |
+ |
|
11 | 43 |
void idle_handle_events(u16t event, void *data) |
12 | 44 |
{ |
13 | 45 |
switch (event) { |
14 | 46 |
case EVENT_ONE_SEC_TIMER: |
15 | 47 |
case EVENT_SCREEN_VISIBLE: |
16 |
- DrawLcdDigitalClock(); |
|
48 |
+ idle_screen.screendraw_func(idle_screen.show_seconds); |
|
17 | 49 |
break; |
18 | 50 |
case EVENT_USER_BUTTONS: |
19 | 51 |
dbg_out("button event %d\n", *(int *)data); |
52 |
+ idle_handle_user_buttons(*(watch_button *)data); |
|
20 | 53 |
break; |
21 | 54 |
default: |
22 | 55 |
break; |
23 | 56 |
}; |
24 | 57 |
} |
25 | 58 |
|
59 |
+ |
|
26 | 60 |
void draw_accel_screen(void) |
27 | 61 |
{ |
28 | 62 |
lcd_clear_display(); |
... | ... |
@@ -34,6 +68,7 @@ void draw_accel_screen(void) |
34 | 68 |
WriteLcdString(2, 34, "Y:"); |
35 | 69 |
WriteLcdString(20, 34, "123"); |
36 | 70 |
} |
71 |
+ |
|
37 | 72 |
void accel_handle_events(u16t event, void *data) |
38 | 73 |
{ |
39 | 74 |
switch (event) { |
... | ... |
@@ -48,6 +83,7 @@ void accel_handle_events(u16t event, void *data) |
48 | 83 |
}; |
49 | 84 |
} |
50 | 85 |
|
86 |
+ |
|
51 | 87 |
void draw_datetime_setup_screen(void) |
52 | 88 |
{ |
53 | 89 |
lcd_clear_display(); |
... | ... |
@@ -57,6 +93,7 @@ void draw_datetime_setup_screen(void) |
57 | 93 |
WriteLcdString(2, 34, "22:39"); |
58 | 94 |
WriteLcdString(2, 50, "07.08.2012"); |
59 | 95 |
} |
96 |
+ |
|
60 | 97 |
void datetime_setup_events(u16t event, void *data) |
61 | 98 |
{ |
62 | 99 |
switch (event) { |
... | ... |
@@ -71,7 +108,11 @@ void datetime_setup_events(u16t event, void *data) |
71 | 108 |
}; |
72 | 109 |
} |
73 | 110 |
|
74 |
-static u8t test_menu_pos = 0; |
|
111 |
+ |
|
112 |
+typedef struct { |
|
113 |
+ u8t menu_pos; |
|
114 |
+} test_menu_t; |
|
115 |
+static test_menu_t test_menu = { 0 }; |
|
75 | 116 |
|
76 | 117 |
void draw_menu_test_screen(void) |
77 | 118 |
{ |
... | ... |
@@ -85,19 +126,19 @@ void draw_menu_test_screen(void) |
85 | 126 |
WriteLcdString(2, 47, "Item 4"); |
86 | 127 |
WriteLcdString(2, 56, "Item 5"); |
87 | 128 |
|
88 |
- WriteLcdString(50, 20+(9*test_menu_pos), "*"); |
|
129 |
+ WriteLcdString(50, 20+(9*test_menu.menu_pos), "*"); |
|
89 | 130 |
} |
90 | 131 |
|
91 | 132 |
static void handle_menu_user_buttons(watch_button button) |
92 | 133 |
{ |
93 | 134 |
switch (button) { |
94 | 135 |
case BUTTON_A: |
95 |
- test_menu_pos--; |
|
96 |
- test_menu_pos%=5; |
|
136 |
+ test_menu.menu_pos--; |
|
137 |
+ test_menu.menu_pos%=5; |
|
97 | 138 |
break; |
98 | 139 |
case BUTTON_B: |
99 |
- test_menu_pos++; |
|
100 |
- test_menu_pos%=5; |
|
140 |
+ test_menu.menu_pos++; |
|
141 |
+ test_menu.menu_pos%=5; |
|
101 | 142 |
break; |
102 | 143 |
default: |
103 | 144 |
break; |
... | ... |
@@ -113,7 +154,7 @@ void test_menu_handle_events(u16t event, void *data) |
113 | 154 |
handle_menu_user_buttons(*(watch_button *)data); |
114 | 155 |
break; |
115 | 156 |
case EVENT_SCREEN_VISIBLE: |
116 |
- test_menu_pos = 0; |
|
157 |
+ test_menu.menu_pos = 0; |
|
117 | 158 |
draw_menu_test_screen(); |
118 | 159 |
break; |
119 | 160 |
default: |
1 | 1 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,123 @@ |
1 |
+#include "oswald.h" |
|
2 |
+#include "oswald_watch_faces.h" |
|
3 |
+#include "Fonts.h" |
|
4 |
+#include "LcdDisplay.h" |
|
5 |
+ |
|
6 |
+#include "oswald_screens.h" |
|
7 |
+ |
|
8 |
+void idle_handle_user_buttons(watch_button button) |
|
9 |
+{ |
|
10 |
+} |
|
11 |
+void idle_handle_events(u16t event, void *data) |
|
12 |
+{ |
|
13 |
+ switch (event) { |
|
14 |
+ case EVENT_ONE_SEC_TIMER: |
|
15 |
+ case EVENT_SCREEN_VISIBLE: |
|
16 |
+ DrawLcdDigitalClock(); |
|
17 |
+ break; |
|
18 |
+ case EVENT_USER_BUTTONS: |
|
19 |
+ dbg_out("button event %d\n", *(int *)data); |
|
20 |
+ break; |
|
21 |
+ default: |
|
22 |
+ break; |
|
23 |
+ }; |
|
24 |
+} |
|
25 |
+ |
|
26 |
+void draw_accel_screen(void) |
|
27 |
+{ |
|
28 |
+ lcd_clear_display(); |
|
29 |
+ SetFont(MetaWatch16); |
|
30 |
+ WriteLcdString(2, 2, "X:"); |
|
31 |
+ WriteLcdString(20, 2, "123"); |
|
32 |
+ WriteLcdString(2, 18, "Z:"); |
|
33 |
+ WriteLcdString(20, 18, "123"); |
|
34 |
+ WriteLcdString(2, 34, "Y:"); |
|
35 |
+ WriteLcdString(20, 34, "123"); |
|
36 |
+} |
|
37 |
+void accel_handle_events(u16t event, void *data) |
|
38 |
+{ |
|
39 |
+ switch (event) { |
|
40 |
+ case EVENT_SCREEN_VISIBLE: |
|
41 |
+ draw_accel_screen(); |
|
42 |
+ break; |
|
43 |
+ case EVENT_USER_BUTTONS: |
|
44 |
+ dbg_out("button event %d\n", *(int *)data); |
|
45 |
+ break; |
|
46 |
+ default: |
|
47 |
+ break; |
|
48 |
+ }; |
|
49 |
+} |
|
50 |
+ |
|
51 |
+void draw_datetime_setup_screen(void) |
|
52 |
+{ |
|
53 |
+ lcd_clear_display(); |
|
54 |
+ SetFont(MetaWatch16); |
|
55 |
+ WriteLcdString(2, 2, "Date / Time"); |
|
56 |
+ WriteLcdString(2, 18, "Setting"); |
|
57 |
+ WriteLcdString(2, 34, "22:39"); |
|
58 |
+ WriteLcdString(2, 50, "07.08.2012"); |
|
59 |
+} |
|
60 |
+void datetime_setup_events(u16t event, void *data) |
|
61 |
+{ |
|
62 |
+ switch (event) { |
|
63 |
+ case EVENT_SCREEN_VISIBLE: |
|
64 |
+ draw_datetime_setup_screen(); |
|
65 |
+ break; |
|
66 |
+ case EVENT_USER_BUTTONS: |
|
67 |
+ dbg_out("button event %d\n", *(int *)data); |
|
68 |
+ break; |
|
69 |
+ default: |
|
70 |
+ break; |
|
71 |
+ }; |
|
72 |
+} |
|
73 |
+ |
|
74 |
+static u8t test_menu_pos = 0; |
|
75 |
+ |
|
76 |
+void draw_menu_test_screen(void) |
|
77 |
+{ |
|
78 |
+ lcd_clear_display(); |
|
79 |
+ SetFont(MetaWatch16); |
|
80 |
+ WriteLcdString(2, 2, "Menu"); |
|
81 |
+ SetFont(MetaWatch7); |
|
82 |
+ WriteLcdString(2, 20, "Item 1"); |
|
83 |
+ WriteLcdString(2, 29, "Item 2"); |
|
84 |
+ WriteLcdString(2, 38, "Item 3"); |
|
85 |
+ WriteLcdString(2, 47, "Item 4"); |
|
86 |
+ WriteLcdString(2, 56, "Item 5"); |
|
87 |
+ |
|
88 |
+ WriteLcdString(50, 20+(9*test_menu_pos), "*"); |
|
89 |
+} |
|
90 |
+ |
|
91 |
+static void handle_menu_user_buttons(watch_button button) |
|
92 |
+{ |
|
93 |
+ switch (button) { |
|
94 |
+ case BUTTON_A: |
|
95 |
+ test_menu_pos--; |
|
96 |
+ test_menu_pos%=5; |
|
97 |
+ break; |
|
98 |
+ case BUTTON_B: |
|
99 |
+ test_menu_pos++; |
|
100 |
+ test_menu_pos%=5; |
|
101 |
+ break; |
|
102 |
+ default: |
|
103 |
+ break; |
|
104 |
+ } |
|
105 |
+ draw_menu_test_screen(); |
|
106 |
+} |
|
107 |
+ |
|
108 |
+void test_menu_handle_events(u16t event, void *data) |
|
109 |
+{ |
|
110 |
+ switch (event) { |
|
111 |
+ case EVENT_USER_BUTTONS: |
|
112 |
+ dbg_out("button event %d\n", *(int *)data); |
|
113 |
+ handle_menu_user_buttons(*(watch_button *)data); |
|
114 |
+ break; |
|
115 |
+ case EVENT_SCREEN_VISIBLE: |
|
116 |
+ test_menu_pos = 0; |
|
117 |
+ draw_menu_test_screen(); |
|
118 |
+ break; |
|
119 |
+ default: |
|
120 |
+ break; |
|
121 |
+ }; |
|
122 |
+} |
|
123 |
+ |