X-Git-Url: https://git.karo-electronics.de/?p=oswald.git;a=blobdiff_plain;f=ui%2Foswald_screens.c;h=a16bf398699d87ba692beef508fd3a18e2562558;hp=c09958fd2c6635d99f2486f9e3e917dabb326e5e;hb=b83e605bc8ba69950a84b6ed268f0c196f68762c;hpb=5d0ff002cee35d109f4a60eff415b2db556fb8f4 diff --git a/ui/oswald_screens.c b/ui/oswald_screens.c index c09958f..a16bf39 100644 --- a/ui/oswald_screens.c +++ b/ui/oswald_screens.c @@ -9,6 +9,15 @@ #include "oswald_screens.h" +#include "timesetup_icon.xbm" +#include "stopwatch_icon.xbm" +#include "alarm_icon.xbm" +#include "startstopbutton_icon.xbm" +#include "lapsebutton_icon.xbm" +#include "upbutton_icon.xbm" +#include "downbutton_icon.xbm" +#include "Bluetooth_icon.xbm" + typedef struct { void (*screendraw_func)(boolean show_seconds); @@ -85,6 +94,10 @@ void draw_accel_screen(accel_data_t *accel_data) WriteLcdNumber(20, 18, accel_data->y); WriteLcdString(2, 34, "Z:"); WriteLcdNumber(20, 34, accel_data->z); + + WriteLcdString(2, 54, "Light:"); + WriteLcdNumber(40, 54, accel_data->z); + hal_lcd_update_display(); } @@ -123,57 +136,67 @@ static datetime_setup_data_t dt_setup_screen = { void draw_datetime_setup_screen(datetime_setup_data_t *sdata) { hal_lcd_clear_display(); - SetFont(MetaWatch16); - WriteLcdString(2, 2, "Set"); +// SetFont(MetaWatch16); +// WriteLcdString(2, 2, "Set"); + oswald_draw_bitmap(36, 0, timesetup_icon_width, timesetup_icon_height, timesetup_icon_bits); + + oswald_draw_bitmap(81, 6, upbutton_icon_width, upbutton_icon_height, upbutton_icon_bits); + oswald_draw_bitmap(81, 38, downbutton_icon_width, downbutton_icon_height, downbutton_icon_bits); SetFont(MetaWatchTime); if ((sdata->pos == 0 && sdata->on) || sdata->pos != 0) { - WriteLcdCharacter(2, 20, (OswaldClk.hour / 10)); - WriteLcdCharacter(14, 20, (OswaldClk.hour % 10)); + WriteLcdCharacter(2, 30, (OswaldClk.hour / 10)); + WriteLcdCharacter(14, 30, (OswaldClk.hour % 10)); } - WriteLcdCharacter(26, 20, TIME_CHARACTER_COLON_INDEX); + WriteLcdCharacter(26, 30, TIME_CHARACTER_COLON_INDEX); if ((sdata->pos == 1 && sdata->on) || sdata->pos != 1) { - WriteLcdCharacter(31, 20, (OswaldClk.minute / 10)); - WriteLcdCharacter(43, 20, (OswaldClk.minute % 10)); + WriteLcdCharacter(31, 30, (OswaldClk.minute / 10)); + WriteLcdCharacter(43, 30, (OswaldClk.minute % 10)); } - +/* WriteLcdCharacter(55, 20, TIME_CHARACTER_COLON_INDEX); if ((sdata->pos == 2 && sdata->on) || sdata->pos != 2) { WriteLcdCharacter(60, 20, (OswaldClk.second / 10)); WriteLcdCharacter(72, 20, (OswaldClk.second % 10)); } - +*/ SetFont(MetaWatch16); + if ((sdata->pos == 2 && sdata->on) || sdata->pos != 2) { + WriteLcdCharacter(59, 36, 0x30 + (OswaldClk.second / 10)); + WriteLcdCharacter(66, 36, 0x30 + (OswaldClk.second % 10)); + } + + if ((sdata->pos == 3 && sdata->on) || sdata->pos != 3) { - WriteLcdNumber(2, 45, OswaldClk.day); + WriteLcdNumber(2, 55, OswaldClk.day); } - WriteLcdString(18, 45, "."); + WriteLcdString(18, 55, "."); if ((sdata->pos == 4 && sdata->on) || sdata->pos != 4) { - WriteLcdNumber(22, 45, OswaldClk.month); + WriteLcdNumber(22, 55, OswaldClk.month); } - WriteLcdString(38, 45, "."); + WriteLcdString(38, 55, "."); if ((sdata->pos == 5 && sdata->on) || sdata->pos != 5) { - WriteLcdNumber(42, 45, OswaldClk.year); + WriteLcdNumber(42, 55, OswaldClk.year); } SetFont(MetaWatch7); if ((sdata->pos == 6 && sdata->on) || sdata->pos != 6) { if (OswaldClk.clk24hr) - WriteLcdString(2, 66, "x"); + WriteLcdString(2, 76, "x"); else - WriteLcdString(2, 66, "_"); + WriteLcdString(2, 76, "_"); } - WriteLcdString(15, 66, "24hr"); + WriteLcdString(15, 76, "24hr"); if ((sdata->pos == 7 && sdata->on) || sdata->pos != 7) { if (OswaldClk.day_first) - WriteLcdString(2, 79, "x"); + WriteLcdString(2, 89, "x"); else - WriteLcdString(2, 79, "_"); + WriteLcdString(2, 89, "_"); } - WriteLcdString(15, 79, "dd.mm. mm/dd"); + WriteLcdString(15, 89, "dd.mm. mm/dd"); hal_lcd_update_display(); } @@ -290,6 +313,11 @@ void datetime_setup_events(u16t event, void *data) }; } + +/* + * Alarm setup + */ + typedef struct { u8t pos; boolean on; @@ -303,63 +331,47 @@ void draw_alarm_setup_screen(alarm_setup_data_t *sdata) { hal_lcd_clear_display(); - SetFont(MetaWatch16); - WriteLcdString(2, 2, "Alarm"); + oswald_draw_bitmap(36, 0, alarm_icon_width, alarm_icon_height, alarm_icon_bits); + + oswald_draw_bitmap(81, 6, upbutton_icon_width, upbutton_icon_height, upbutton_icon_bits); + oswald_draw_bitmap(81, 38, downbutton_icon_width, downbutton_icon_height, downbutton_icon_bits); SetFont(MetaWatchTime); if ((sdata->pos == 0 && sdata->on) || sdata->pos != 0) { - WriteLcdCharacter(2, 20, (OswaldAlarm.hour / 10)); - WriteLcdCharacter(14, 20, (OswaldAlarm.hour % 10)); + WriteLcdCharacter(22, 30, (OswaldAlarm.hour / 10)); + WriteLcdCharacter(34, 30, (OswaldAlarm.hour % 10)); } - WriteLcdCharacter(26, 20, TIME_CHARACTER_COLON_INDEX); + WriteLcdCharacter(46, 30, TIME_CHARACTER_COLON_INDEX); if ((sdata->pos == 1 && sdata->on) || sdata->pos != 1) { - WriteLcdCharacter(31, 20, (OswaldAlarm.minute / 10)); - WriteLcdCharacter(43, 20, (OswaldAlarm.minute % 10)); + WriteLcdCharacter(51, 30, (OswaldAlarm.minute / 10)); + WriteLcdCharacter(63, 30, (OswaldAlarm.minute % 10)); } SetFont(MetaWatchMonospaced10); - WriteLcdCharacter(3, 45, 'S'); - WriteLcdCharacter(15, 45, 'M'); - WriteLcdCharacter(27, 45, 'T'); - WriteLcdCharacter(39, 45, 'W'); - WriteLcdCharacter(51, 45, 'T'); - WriteLcdCharacter(63, 45, 'F'); - WriteLcdCharacter(75, 45, 'S'); + WriteLcdCharacter(3, 55, 'S'); + WriteLcdCharacter(15, 55, 'M'); + WriteLcdCharacter(27, 55, 'T'); + WriteLcdCharacter(39, 55, 'W'); + WriteLcdCharacter(51, 55, 'T'); + WriteLcdCharacter(63, 55, 'F'); + WriteLcdCharacter(75, 55, 'S'); if ((sdata->pos == 2 && sdata->on) || sdata->pos != 2) - WriteLcdCharacter(3, 55, (OswaldAlarm.wday & WDAY_SUNDAY) ? 'x' : '_'); + WriteLcdCharacter(3, 65, (OswaldAlarm.wday & WDAY_SUNDAY) ? 'x' : '_'); if ((sdata->pos == 3 && sdata->on) || sdata->pos != 3) - WriteLcdCharacter(15, 55, (OswaldAlarm.wday & WDAY_MONDAY) ? 'x' : '_'); + WriteLcdCharacter(15, 65, (OswaldAlarm.wday & WDAY_MONDAY) ? 'x' : '_'); if ((sdata->pos == 4 && sdata->on) || sdata->pos != 4) - WriteLcdCharacter(27, 55, (OswaldAlarm.wday & WDAY_TUESDAY) ? 'x' : '_'); + WriteLcdCharacter(27, 65, (OswaldAlarm.wday & WDAY_TUESDAY) ? 'x' : '_'); if ((sdata->pos == 5 && sdata->on) || sdata->pos != 5) - WriteLcdCharacter(39, 55, (OswaldAlarm.wday & WDAY_WEDNESDAY) ? 'x' : '_'); + WriteLcdCharacter(39, 65, (OswaldAlarm.wday & WDAY_WEDNESDAY) ? 'x' : '_'); if ((sdata->pos == 6 && sdata->on) || sdata->pos != 6) - WriteLcdCharacter(51, 55, (OswaldAlarm.wday & WDAY_THURSDAY) ? 'x' : '_'); + WriteLcdCharacter(51, 65, (OswaldAlarm.wday & WDAY_THURSDAY) ? 'x' : '_'); if ((sdata->pos == 7 && sdata->on) || sdata->pos != 7) - WriteLcdCharacter(63, 55, (OswaldAlarm.wday & WDAY_FRIDAY) ? 'x' : '_'); + WriteLcdCharacter(63, 65, (OswaldAlarm.wday & WDAY_FRIDAY) ? 'x' : '_'); if ((sdata->pos == 8 && sdata->on) || sdata->pos != 8) - WriteLcdCharacter(75, 55, (OswaldAlarm.wday & WDAY_SATURDAY) ? 'x' : '_'); + WriteLcdCharacter(75, 65, (OswaldAlarm.wday & WDAY_SATURDAY) ? 'x' : '_'); -#if 0 - SetFont(MetaWatch7); - if ((sdata->pos == 6 && sdata->on) || sdata->pos != 6) { - if (OswaldClk.clk24hr) - WriteLcdString(2, 66, "x"); - else - WriteLcdString(2, 66, "_"); - } - WriteLcdString(15, 66, "24hr"); - - if ((sdata->pos == 7 && sdata->on) || sdata->pos != 7) { - if (OswaldClk.day_first) - WriteLcdString(2, 79, "x"); - else - WriteLcdString(2, 79, "_"); - } - WriteLcdString(15, 79, "dd.mm. mm/dd"); -#endif hal_lcd_update_display(); } @@ -457,6 +469,10 @@ void alarm_setup_events(u16t event, void *data) } +/* + * Test menu + */ + typedef struct { u8t menu_pos; } test_menu_t; @@ -512,6 +528,10 @@ void test_menu_handle_events(u16t event, void *data) } +/* + * Stop Watch + */ + typedef struct { u8t hr; u8t min; @@ -531,36 +551,19 @@ static void update_stop_watch_screen(stopwatch_data_t *sdata) char tstr[16]; SetFont(MetaWatchMonospaced10); -#if 0 - WriteLcdNumber(0, 30, sdata->hr); - WriteLcdCharacter(14, 30, ':'); - WriteLcdNumber(19, 30, sdata->min); - WriteLcdCharacter(33, 30, ':'); - WriteLcdNumber(38, 30, sdata->sec); - WriteLcdCharacter(52, 30, '.'); - WriteLcdNumber(57, 30, sdata->csec / 10); - - WriteLcdNumber(0, 50, sdata->lapse_hr); - WriteLcdCharacter(14, 50, ':'); - WriteLcdNumber(19, 50, sdata->lapse_min); - WriteLcdCharacter(33, 50, ':'); - WriteLcdNumber(38, 50, sdata->lapse_sec); - WriteLcdCharacter(52, 50, '.'); - WriteLcdNumber(57, 50, sdata->lapse_csec / 10); -#else snprintf(tstr, 16, "%02d:%02d:%02d.%1d", sdata->hr, sdata->min, sdata->sec, sdata->csec / 10); - WriteLcdString(0, 30, tstr); + WriteLcdString(5, 40, tstr); snprintf(tstr, 16, "%02d:%02d:%02d.%02d", sdata->lapse_hr, sdata->lapse_min, sdata->lapse_sec, sdata->lapse_csec); - WriteLcdString(0, 50, tstr); -#endif + WriteLcdString(5, 60, tstr); hal_lcd_update_display(); } static void draw_stop_watch_screen(stopwatch_data_t *sdata) { - SetFont(MetaWatch16); - WriteLcdString(2, 5, "StopWatch"); + oswald_draw_bitmap(36, 0, stopwatch_icon_width, stopwatch_icon_height, stopwatch_icon_bits); + oswald_draw_bitmap(81, 6, startstopbutton_icon_width, startstopbutton_icon_height, startstopbutton_icon_bits); + oswald_draw_bitmap(81, 38, lapsebutton_icon_width, lapsebutton_icon_height, lapsebutton_icon_bits); update_stop_watch_screen(sdata); } @@ -640,12 +643,17 @@ void stop_watch_handle_events(u16t event, void *data) } +/* + * when alarm is fired + */ void draw_alarm_screen(void) { hal_lcd_clear_display(); - SetFont(MetaWatch16); - WriteLcdString(2, 2, "ALARM !"); +// SetFont(MetaWatch16); +// WriteLcdString(2, 2, "ALARM !"); + oswald_draw_bitmap(36, 20, alarm_icon_width, alarm_icon_height, alarm_icon_bits); + hal_lcd_update_display(); } @@ -677,3 +685,148 @@ void alarm_handle_events(u16t event, void *data) }; } + +/* + * Bluetooth screen + */ +typedef struct { + u8t pos; + boolean bt_en; + boolean on; +} bluetooth_data_t; +static bluetooth_data_t bluetooth_screen = { + 0, + FALSE, + TRUE +}; + +void draw_bluetooth_screen(bluetooth_data_t *sdata) +{ + char bstr[20]; + uint8_t *bd_addr; + + hal_lcd_clear_display(); + + oswald_draw_bitmap(36, 0, Bluetooth_icon_width, Bluetooth_icon_height, Bluetooth_icon_bits); + + oswald_draw_bitmap(81, 6, upbutton_icon_width, upbutton_icon_height, upbutton_icon_bits); + oswald_draw_bitmap(81, 38, downbutton_icon_width, downbutton_icon_height, downbutton_icon_bits); + + SetFont(MetaWatch5); + WriteLcdString(2, 30, "Enable:"); + if ((sdata->pos == 0 && sdata->on) || sdata->pos != 0) { + WriteLcdCharacter(45, 30, bluetooth_screen.bt_en ? 'x' : '_'); + } + WriteLcdString(2, 39, "State:"); + switch (hal_bluetooth_get_state()) { + case BLUETOOTH_OFF: + WriteLcdString(45, 39, "off"); + break; + case BLUETOOTH_ON: + WriteLcdString(45, 39, "on"); + break; + case BLUETOOTH_CONNECTED: + WriteLcdString(45, 39, "conn."); + break; + default: + break; + }; + if (hal_bluetooth_get_state() >= BLUETOOTH_ON) { + bd_addr = hal_bluetooth_get_local_bdaddr(); + 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]); + WriteLcdString(2, 48, bstr); + } else { + } + WriteLcdString(2, 57, "Visible:"); + if ((sdata->pos == 1 && sdata->on) || sdata->pos != 1) { + WriteLcdCharacter(45, 57, hal_bluetooth_get_visible() ? 'x' : '_'); + } + + hal_lcd_update_display(); +} + +void bluetooth_handle_updown(u8t pos, s8t incr) +{ + switch (pos) { + case 0: + if (hal_bluetooth_get_state() >= BLUETOOTH_ON) { + hal_bluetooth_set_state(BLUETOOTH_OFF); + bluetooth_screen.bt_en = FALSE; + } else { + hal_bluetooth_set_state(BLUETOOTH_ON); + bluetooth_screen.bt_en = TRUE; + } + break; + case 1: + if (hal_bluetooth_get_state() >= BLUETOOTH_ON && !hal_bluetooth_get_visible()) { + hal_bluetooth_set_visible(TRUE); + } else { + hal_bluetooth_set_visible(FALSE); + } + break; + case 2: + break; + case 3: + break; + case 4: + break; + case 5: + break; + case 6: + break; + case 7: + break; + case 8: + break; + default: + break; + }; +} + +void handle_bluetooth_buttons(watch_button button, bluetooth_data_t *sdata) +{ + switch (button) { + case BUTTON_A: + bluetooth_handle_updown(sdata->pos, 1); + break; + case BUTTON_B: + bluetooth_handle_updown(sdata->pos, -1); + break; + case BUTTON_F: + sdata->pos++; + sdata->pos %= 2; + break; + default: + break; + } + draw_bluetooth_screen(sdata); +} + +void bluetooth_screen_events(u16t event, void *data) +{ + switch (event) { + case EVENT_SCREEN_VISIBLE: + bluetooth_screen.pos = 0; + bluetooth_screen.bt_en = (hal_bluetooth_get_state() > 0); + draw_bluetooth_screen(&bluetooth_screen); + hal_enable_halfsecond_timer(); + break; + case EVENT_SCREEN_DESTROY: + hal_disable_halfsecond_timer(); + break; + case EVENT_USER_BUTTONS: + dbg_out("button event %d\n", *(int *)data); + handle_bluetooth_buttons(*(watch_button *)data, &bluetooth_screen); + break; + case EVENT_HALF_SEC_TIMER: + if (bluetooth_screen.on) + bluetooth_screen.on = FALSE; + else + bluetooth_screen.on = TRUE; + draw_bluetooth_screen(&bluetooth_screen); + break; + default: + break; + }; +} +