#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);
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();
}
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();
}
};
}
+
+/*
+ * Alarm setup
+ */
+
typedef struct {
u8t pos;
boolean on;
{
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();
}
}
+/*
+ * Test menu
+ */
+
typedef struct {
u8t menu_pos;
} test_menu_t;
}
+/*
+ * Stop Watch
+ */
+
typedef struct {
u8t hr;
u8t min;
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);
}
}
+/*
+ * 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();
}
};
}
+
+/*
+ * 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;
+ };
+}
+