#if defined(__GNUC__) && (__MSP430X__ > 0)
__attribute__((__far__))
#endif
-#include "bitmaps/timesetup_icon.xbm"
+#include "bitmaps/startstopbutton_icon.xbm"
#if defined(__GNUC__) && (__MSP430X__ > 0)
__attribute__((__far__))
#endif
-#include "bitmaps/stopwatch_icon.xbm"
+#include "bitmaps/lapsebutton_icon.xbm"
#if defined(__GNUC__) && (__MSP430X__ > 0)
__attribute__((__far__))
#endif
-#include "bitmaps/alarm_icon.xbm"
+#include "bitmaps/upbutton_icon.xbm"
#if defined(__GNUC__) && (__MSP430X__ > 0)
__attribute__((__far__))
#endif
-#include "bitmaps/startstopbutton_icon.xbm"
+#include "bitmaps/downbutton_icon.xbm"
#if defined(__GNUC__) && (__MSP430X__ > 0)
__attribute__((__far__))
#endif
-#include "bitmaps/lapsebutton_icon.xbm"
+#include "bitmaps/leftbutton_icon.xbm"
#if defined(__GNUC__) && (__MSP430X__ > 0)
__attribute__((__far__))
#endif
-#include "bitmaps/upbutton_icon.xbm"
+#include "bitmaps/rightbutton_icon.xbm"
#if defined(__GNUC__) && (__MSP430X__ > 0)
__attribute__((__far__))
#endif
-#include "bitmaps/downbutton_icon.xbm"
+#include "bitmaps/enterbutton_icon.xbm"
+
+#if defined(__GNUC__) && (__MSP430X__ > 0)
+__attribute__((__far__))
+#endif
+#include "bitmaps/checked_icon.xbm"
+
+#if defined(__GNUC__) && (__MSP430X__ > 0)
+__attribute__((__far__))
+#endif
+#include "bitmaps/unchecked_icon.xbm"
+
+#if defined(__GNUC__) && (__MSP430X__ > 0)
+__attribute__((__far__))
+#endif
+#include "bitmaps/main_menu_icon.xbm"
+
+#if defined(__GNUC__) && (__MSP430X__ > 0)
+__attribute__((__far__))
+#endif
+#include "bitmaps/timesetup_icon.xbm"
+
+#if defined(__GNUC__) && (__MSP430X__ > 0)
+__attribute__((__far__))
+#endif
+#include "bitmaps/stopwatch_icon.xbm"
+
+#if defined(__GNUC__) && (__MSP430X__ > 0)
+__attribute__((__far__))
+#endif
+#include "bitmaps/alarm_icon.xbm"
#if defined(__GNUC__) && (__MSP430X__ > 0)
__attribute__((__far__))
#endif
#include "bitmaps/acc_icon.xbm"
+#if defined(__GNUC__) && (__MSP430X__ > 0)
+__attribute__((__far__))
+#endif
+#include "bitmaps/Message_icon.xbm"
+
+#if defined(__GNUC__) && (__MSP430X__ > 0)
+__attribute__((__far__))
+#endif
+#include "bitmaps/Exit_icon.xbm"
/*
};
break;
case BUTTON_C:
- return EVENT_RET_UNHANDLED;
+ OswaldState.screen_id = MAIN_MENU_SCREEN;
+ OswaldState.screen = &OswaldScreens[OswaldState.screen_id];
+ OswaldState.screen->event_func(EVENT_SCREEN_VISIBLE, NULL);
+ return EVENT_RET_HANDLED;
break;
case BUTTON_F:
OswaldState.screen_id = DATETIME_SETTING_SCREEN;
}
+/*
+ * Main Menu Screen
+ */
+typedef struct {
+ int8_t pos;
+ uint8_t tmo;
+} main_menu_data_t;
+static main_menu_data_t main_menu_screen = {
+ ALARM_SETUP_SCREEN,
+ 0,
+};
+
+#define MAIN_MENU_GRID_PIXEL 84
+#define MAIN_MENU_GRID_X 3
+// GRID_Y is +1 since there is one empty row for title icon
+#define MAIN_MENU_GRID_Y 3
+#define MAIN_MENU_GRID_SPACING 0
+#define MAIN_MENU_OFFSET_X 6
+#define MAIN_MENU_OFFSET_Y 8
+
+void draw_main_menu_screen(main_menu_data_t *sdata)
+{
+ uint8_t pf = sdata->pos - 2;
+
+ hal_lcd_clear_display();
+
+// oswald_draw_bitmap(36, 0, main_menu_icon_width, main_menu_icon_height, main_menu_icon_bits);
+
+ oswald_draw_bitmap(81, 6, rightbutton_icon_width, rightbutton_icon_height, rightbutton_icon_bits);
+ oswald_draw_bitmap(81, 38, leftbutton_icon_width, leftbutton_icon_height, leftbutton_icon_bits);
+ oswald_draw_bitmap(81, 70, enterbutton_icon_width, enterbutton_icon_height, enterbutton_icon_bits);
+
+ oswald_draw_bitmpa_invert_opt(MAIN_MENU_OFFSET_X+((0+1) * MAIN_MENU_GRID_SPACING) + (0 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)),
+ MAIN_MENU_OFFSET_Y+(0 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)),
+ alarm_icon_width, alarm_icon_height, alarm_icon_bits, (sdata->pos == ALARM_SETUP_SCREEN));
+ oswald_draw_bitmpa_invert_opt(MAIN_MENU_OFFSET_X+((1+1) * MAIN_MENU_GRID_SPACING) + (1 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)),
+ MAIN_MENU_OFFSET_Y+(0 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)),
+ stopwatch_icon_width, stopwatch_icon_height, stopwatch_icon_bits, (sdata->pos == STOP_WATCH_SCREEN));
+ oswald_draw_bitmpa_invert_opt(MAIN_MENU_OFFSET_X+((2+1) * MAIN_MENU_GRID_SPACING) + (2 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)),
+ MAIN_MENU_OFFSET_Y+(0 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)),
+ Bluetooth_icon_width, Bluetooth_icon_height, Bluetooth_icon_bits, (sdata->pos == BLUETOOTH_SCREEN));
+ oswald_draw_bitmpa_invert_opt(MAIN_MENU_OFFSET_X+((0+1) * MAIN_MENU_GRID_SPACING) + (0 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)),
+ MAIN_MENU_OFFSET_Y+(1 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)),
+ acc_icon_width, acc_icon_height, acc_icon_bits, (sdata->pos == ACCEL_DISPLAY_SCREEN));
+ oswald_draw_bitmpa_invert_opt(MAIN_MENU_OFFSET_X+((1+1) * MAIN_MENU_GRID_SPACING) + (1 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)),
+ MAIN_MENU_OFFSET_Y+(1 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)),
+ Message_icon_width, Message_icon_height, Message_icon_bits, (sdata->pos == MESSAGES_SCREEN));
+ oswald_draw_bitmpa_invert_opt(MAIN_MENU_OFFSET_X+((2+1) * MAIN_MENU_GRID_SPACING) + (2 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)),
+ MAIN_MENU_OFFSET_Y+(1 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)),
+ info_icon_width, info_icon_height, info_icon_bits, (sdata->pos == INFO_SCREEN));
+ oswald_draw_bitmpa_invert_opt(MAIN_MENU_OFFSET_X+((0+1) * MAIN_MENU_GRID_SPACING) + (0 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_X)),
+ MAIN_MENU_OFFSET_Y+(2 * (MAIN_MENU_GRID_PIXEL / MAIN_MENU_GRID_Y)),
+ Exit_icon_width, Exit_icon_height, Exit_icon_bits, (sdata->pos == LAST_SCREEN));
+
+ // round the corners of the inverted icon a little
+ 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)),
+ 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);
+ 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)),
+ 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);
+ 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)),
+ 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);
+ 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)),
+ 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);
+
+
+ // finally a nice border
+ oswald_draw_line(3, 0, 95, 0);
+ oswald_draw_line(2, 1, 95, 1);
+ oswald_draw_line(1, 2, 95, 2);
+
+ oswald_draw_line(0, 3, 0, 92);
+ oswald_draw_line(1, 3, 1, 93);
+ oswald_draw_line(2, 3, 2, 94);
+
+ oswald_draw_line(1, 93, 95, 93);
+ oswald_draw_line(2, 94, 95, 94);
+ oswald_draw_line(3, 95, 95, 95);
+
+ hal_lcd_update_display();
+}
+
+event_ret_t handle_main_menu_buttons(watch_button button, main_menu_data_t *sdata)
+{
+ switch (button) {
+ case BUTTON_A:
+ sdata->pos++;
+ if (sdata->pos > LAST_SCREEN)
+ sdata->pos = 2;
+ draw_main_menu_screen(&main_menu_screen);
+ return EVENT_RET_HANDLED;
+ break;
+ case BUTTON_B:
+ sdata->pos--;
+ if (sdata->pos < 2)
+ sdata->pos = LAST_SCREEN;
+ draw_main_menu_screen(&main_menu_screen);
+ return EVENT_RET_HANDLED;
+ break;
+ case BUTTON_C:
+ if (sdata->pos < LAST_SCREEN) {
+ OswaldState.screen_id = sdata->pos;
+ OswaldState.screen = &OswaldScreens[OswaldState.screen_id];
+ OswaldState.screen->event_func(EVENT_SCREEN_VISIBLE, NULL);
+ } else {
+ OswaldState.screen_id = IDLE_SCREEN;
+ OswaldState.screen = &OswaldScreens[OswaldState.screen_id];
+ OswaldState.screen->event_func(EVENT_SCREEN_VISIBLE, NULL);
+ }
+ return EVENT_RET_HANDLED;
+ break;
+ default:
+ break;
+ }
+
+ return EVENT_RET_UNHANDLED;
+}
+
+/* after MAIN_MENU_TIMEOUT seconds return to IDLE_SCREEN */
+#define MAIN_MENU_TIMEOUT 10
+
+event_ret_t main_menu_handle_events(uint16_t event, void *data)
+{
+ switch (event) {
+ case EVENT_SCREEN_VISIBLE:
+ main_menu_screen.tmo = 0;
+ main_menu_screen.pos = 2;
+ draw_main_menu_screen(&main_menu_screen);
+ return EVENT_RET_HANDLED;
+ break;
+ case EVENT_USER_BUTTONS:
+ dbg_out("button event %d\n", *(int *)data);
+ main_menu_screen.tmo = 0;
+ return handle_main_menu_buttons(*(watch_button *)data, &main_menu_screen);
+ break;
+ case EVENT_ONE_SEC_TIMER:
+ main_menu_screen.tmo++;
+ if (main_menu_screen.tmo > MAIN_MENU_TIMEOUT) {
+ OswaldState.screen_id = IDLE_SCREEN;
+ OswaldState.screen = &OswaldScreens[OswaldState.screen_id];
+ OswaldState.screen->event_func(EVENT_SCREEN_VISIBLE, NULL);
+ }
+ return EVENT_RET_HANDLED;
+ default:
+ break;
+ };
+ return EVENT_RET_UNHANDLED;
+}
+
+
/*
* Accelerometer and sensor display screen
*/
oswald_draw_bitmap(36, 0, acc_icon_width, acc_icon_height, acc_icon_bits);
- oswald_write_string(1, 40, FONT_6x9, "X:");
- oswald_write_number(15, 40, FONT_6x9, accel_data->x);
- oswald_write_string(1, 52, FONT_6x9, "Y:");
- oswald_write_number(15, 52, FONT_6x9, accel_data->y);
- oswald_write_string(1, 64, FONT_6x9, "Z:");
- oswald_write_number(15, 64, FONT_6x9, accel_data->z);
+ oswald_draw_bitmap(81, 79, enterbutton_icon_width, enterbutton_icon_height, enterbutton_icon_bits);
+
+ oswald_write_string(1, 40, FONT_6x9, FALSE, "X:");
+ oswald_write_number(15, 40, FONT_6x9, FALSE, accel_data->x);
+ oswald_write_string(1, 52, FONT_6x9, FALSE, "Y:");
+ oswald_write_number(15, 52, FONT_6x9, FALSE, accel_data->y);
+ oswald_write_string(1, 64, FONT_6x9, FALSE, "Z:");
+ oswald_write_number(15, 64, FONT_6x9, FALSE, accel_data->z);
- oswald_write_string(1, 85, FONT_6x9, "Light:");
- oswald_write_number(50, 85, FONT_6x9, 0);
+ oswald_write_string(1, 85, FONT_6x9, FALSE, "Light:");
+ oswald_write_number(50, 85, FONT_6x9, FALSE, 0);
oswald_draw_line(40, 30, 92, 30);
oswald_draw_line(92, 30, 92, 82);
oswald_draw_line(40, 82, 40, 30);
x = 41+25+((accel_data->x * 50) / (254));
- y = 31+25+((accel_data->y * 50) / (254));
- oswald_draw_pixel(x, y);
- oswald_draw_pixel(x+1, y);
- oswald_draw_pixel(x-1, y);
- oswald_draw_pixel(x, y+1);
- oswald_draw_pixel(x, y-1);
+ y = 31+25-((accel_data->y * 50) / (254));
+ oswald_draw_pixel(x, y, TRUE);
+ oswald_draw_pixel(x+1, y, TRUE);
+ oswald_draw_pixel(x-1, y, TRUE);
+ oswald_draw_pixel(x, y+1, TRUE);
+ oswald_draw_pixel(x, y-1, TRUE);
hal_lcd_update_display();
}
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);
+ oswald_draw_bitmap(81, 70, rightbutton_icon_width, rightbutton_icon_height, rightbutton_icon_bits);
if ((sdata->pos == 0 && sdata->on) || sdata->pos != 0) {
- oswald_write_character(2, 30, FONT_LCD13x21, (OswaldClk.hour / 10));
- oswald_write_character(15, 30, FONT_LCD13x21, (OswaldClk.hour % 10));
+ oswald_write_character(2, 30, FONT_LCD13x21, FALSE, (OswaldClk.hour / 10));
+ oswald_write_character(15, 30, FONT_LCD13x21, FALSE, (OswaldClk.hour % 10));
}
- oswald_write_character(25, 30, FONT_LCD13x21, 10);
+ oswald_write_character(25, 30, FONT_LCD13x21, FALSE, 10);
if ((sdata->pos == 1 && sdata->on) || sdata->pos != 1) {
- oswald_write_character(34, 30, FONT_LCD13x21, (OswaldClk.minute / 10));
- oswald_write_character(47, 30, FONT_LCD13x21, (OswaldClk.minute % 10));
+ oswald_write_character(34, 30, FONT_LCD13x21, FALSE, (OswaldClk.minute / 10));
+ oswald_write_character(47, 30, FONT_LCD13x21, FALSE, (OswaldClk.minute % 10));
}
if ((sdata->pos == 2 && sdata->on) || sdata->pos != 2) {
- oswald_write_character(61, 38, FONT_LCD8x13, (OswaldClk.second / 10));
- oswald_write_character(69, 38, FONT_LCD8x13, (OswaldClk.second % 10));
+ oswald_write_character(61, 38, FONT_LCD8x13, FALSE, (OswaldClk.second / 10));
+ oswald_write_character(69, 38, FONT_LCD8x13, FALSE, (OswaldClk.second % 10));
}
if ((sdata->pos == 3 && sdata->on) || sdata->pos != 3) {
- oswald_write_number(2, 55, FONT_DROID8x12, OswaldClk.day);
+ oswald_write_number(2, 55, FONT_DROID8x12, FALSE, OswaldClk.day);
}
- oswald_write_character(15, 55, FONT_DROID8x12, '.');
+ oswald_write_character(15, 55, FONT_DROID8x12, FALSE, '.');
if ((sdata->pos == 4 && sdata->on) || sdata->pos != 4) {
- oswald_write_number(21, 55, FONT_DROID8x12, OswaldClk.month);
+ oswald_write_number(21, 55, FONT_DROID8x12, FALSE, OswaldClk.month);
}
- oswald_write_character(36, 55, FONT_DROID8x12, '.');
+ oswald_write_character(36, 55, FONT_DROID8x12, FALSE, '.');
if ((sdata->pos == 5 && sdata->on) || sdata->pos != 5) {
- oswald_write_number(43, 55, FONT_DROID8x12, OswaldClk.year);
+ oswald_write_number(43, 55, FONT_DROID8x12, FALSE, OswaldClk.year);
}
if ((sdata->pos == 6 && sdata->on) || sdata->pos != 6) {
if (OswaldClk.clk24hr) {
- oswald_write_character(2, 76, FONT_6x9, 'x');
+ oswald_draw_bitmap(2, 76, checked_icon_width, checked_icon_height, checked_icon_bits);
} else {
- oswald_write_character(2, 76, FONT_6x9, '_');
+ oswald_draw_bitmap(2, 76, unchecked_icon_width, unchecked_icon_height, unchecked_icon_bits);
}
}
- oswald_write_string(15, 73, FONT_DROID8x12, "24hr");
+ oswald_write_string(15, 73, FONT_DROID8x12, FALSE, "24hr");
if ((sdata->pos == 7 && sdata->on) || sdata->pos != 7) {
if (OswaldClk.day_first) {
- oswald_write_character(2, 86, FONT_6x9, 'x');
+ oswald_draw_bitmap(2, 86, checked_icon_width, checked_icon_height, checked_icon_bits);
} else {
- oswald_write_character(2, 86, FONT_6x9, '_');
+ oswald_draw_bitmap(2, 86, unchecked_icon_width, unchecked_icon_height, unchecked_icon_bits);
}
}
- oswald_write_string(15, 83, FONT_DROID8x12, "dd.mm. mm/dd");
+ oswald_write_string(15, 83, FONT_DROID8x12, FALSE, "dd.mm. mm/dd");
hal_lcd_update_display();
}
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);
+ if (sdata->set_mode) {
+ 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);
+ oswald_draw_bitmap(81, 70, rightbutton_icon_width, rightbutton_icon_height, rightbutton_icon_bits);
+ } else {
+ oswald_draw_bitmap(81, 70, enterbutton_icon_width, enterbutton_icon_height, enterbutton_icon_bits);
+ }
if ((sdata->pos == 0 && sdata->on) || sdata->pos != 0) {
- oswald_write_character(18, 30, FONT_LCD13x21, (OswaldAlarm.hour / 10));
- oswald_write_character(32, 30, FONT_LCD13x21, (OswaldAlarm.hour % 10));
+ oswald_write_character(18, 30, FONT_LCD13x21, FALSE, (OswaldAlarm.hour / 10));
+ oswald_write_character(32, 30, FONT_LCD13x21, FALSE, (OswaldAlarm.hour % 10));
}
- oswald_write_character(42, 30, FONT_LCD13x21, 10);
+ oswald_write_character(42, 30, FONT_LCD13x21, FALSE, 10);
if ((sdata->pos == 1 && sdata->on) || sdata->pos != 1) {
- oswald_write_character(53, 30, FONT_LCD13x21, (OswaldAlarm.minute / 10));
- oswald_write_character(67, 30, FONT_LCD13x21, (OswaldAlarm.minute % 10));
+ oswald_write_character(53, 30, FONT_LCD13x21, FALSE, (OswaldAlarm.minute / 10));
+ oswald_write_character(67, 30, FONT_LCD13x21, FALSE, (OswaldAlarm.minute % 10));
}
- oswald_write_character(3, 55, FONT_6x9, 'S');
- oswald_write_character(15, 55, FONT_6x9, 'M');
- oswald_write_character(27, 55, FONT_6x9, 'T');
- oswald_write_character(39, 55, FONT_6x9, 'W');
- oswald_write_character(51, 55, FONT_6x9, 'T');
- oswald_write_character(63, 55, FONT_6x9, 'F');
- oswald_write_character(75, 55, FONT_6x9, 'S');
-
- if ((sdata->pos == 2 && sdata->on) || sdata->pos != 2)
- oswald_write_character(3, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_SUNDAY) ? 'x' : '_');
- if ((sdata->pos == 3 && sdata->on) || sdata->pos != 3)
- oswald_write_character(15, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_MONDAY) ? 'x' : '_');
- if ((sdata->pos == 4 && sdata->on) || sdata->pos != 4)
- oswald_write_character(27, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_TUESDAY) ? 'x' : '_');
- if ((sdata->pos == 5 && sdata->on) || sdata->pos != 5)
- oswald_write_character(39, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_WEDNESDAY) ? 'x' : '_');
- if ((sdata->pos == 6 && sdata->on) || sdata->pos != 6)
- oswald_write_character(51, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_THURSDAY) ? 'x' : '_');
- if ((sdata->pos == 7 && sdata->on) || sdata->pos != 7)
- oswald_write_character(63, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_FRIDAY) ? 'x' : '_');
- if ((sdata->pos == 8 && sdata->on) || sdata->pos != 8)
- oswald_write_character(75, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_SATURDAY) ? 'x' : '_');
+ oswald_write_character(3, 55, FONT_6x9, FALSE, 'S');
+ oswald_write_character(15, 55, FONT_6x9, FALSE, 'M');
+ oswald_write_character(27, 55, FONT_6x9, FALSE, 'T');
+ oswald_write_character(39, 55, FONT_6x9, FALSE, 'W');
+ oswald_write_character(51, 55, FONT_6x9, FALSE, 'T');
+ oswald_write_character(63, 55, FONT_6x9, FALSE, 'F');
+ oswald_write_character(75, 55, FONT_6x9, FALSE, 'S');
+
+ if ((sdata->pos == 2 && sdata->on) || sdata->pos != 2) {
+ // oswald_write_character(3, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_SUNDAY) ? 'x' : '_');
+ if ((OswaldAlarm.wday & WDAY_SUNDAY))
+ oswald_draw_bitmap(3, 66, checked_icon_width, checked_icon_height, checked_icon_bits);
+ else
+ oswald_draw_bitmap(3, 66, unchecked_icon_width, unchecked_icon_height, unchecked_icon_bits);
+ }
+ if ((sdata->pos == 3 && sdata->on) || sdata->pos != 3) {
+ // oswald_write_character(15, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_MONDAY) ? 'x' : '_');
+ if ((OswaldAlarm.wday & WDAY_MONDAY))
+ oswald_draw_bitmap(15, 66, checked_icon_width, checked_icon_height, checked_icon_bits);
+ else
+ oswald_draw_bitmap(15, 66, unchecked_icon_width, unchecked_icon_height, unchecked_icon_bits);
+ }
+ if ((sdata->pos == 4 && sdata->on) || sdata->pos != 4) {
+ // oswald_write_character(27, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_TUESDAY) ? 'x' : '_');
+ if ((OswaldAlarm.wday & WDAY_TUESDAY))
+ oswald_draw_bitmap(27, 66, checked_icon_width, checked_icon_height, checked_icon_bits);
+ else
+ oswald_draw_bitmap(27, 66, unchecked_icon_width, unchecked_icon_height, unchecked_icon_bits);
+ }
+ if ((sdata->pos == 5 && sdata->on) || sdata->pos != 5) {
+ // oswald_write_character(39, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_WEDNESDAY) ? 'x' : '_');
+ if ((OswaldAlarm.wday & WDAY_WEDNESDAY))
+ oswald_draw_bitmap(39, 66, checked_icon_width, checked_icon_height, checked_icon_bits);
+ else
+ oswald_draw_bitmap(39, 66, unchecked_icon_width, unchecked_icon_height, unchecked_icon_bits);
+ }
+ if ((sdata->pos == 6 && sdata->on) || sdata->pos != 6) {
+ // oswald_write_character(51, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_THURSDAY) ? 'x' : '_');
+ if ((OswaldAlarm.wday & WDAY_THURSDAY))
+ oswald_draw_bitmap(51, 66, checked_icon_width, checked_icon_height, checked_icon_bits);
+ else
+ oswald_draw_bitmap(51, 66, unchecked_icon_width, unchecked_icon_height, unchecked_icon_bits);
+ }
+ if ((sdata->pos == 7 && sdata->on) || sdata->pos != 7) {
+ // oswald_write_character(63, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_FRIDAY) ? 'x' : '_');
+ if ((OswaldAlarm.wday & WDAY_FRIDAY))
+ oswald_draw_bitmap(63, 66, checked_icon_width, checked_icon_height, checked_icon_bits);
+ else
+ oswald_draw_bitmap(63, 66, unchecked_icon_width, unchecked_icon_height, unchecked_icon_bits);
+ }
+ if ((sdata->pos == 8 && sdata->on) || sdata->pos != 8) {
+ // oswald_write_character(75, 65, FONT_6x9, (OswaldAlarm.wday & WDAY_SATURDAY) ? 'x' : '_');
+ if ((OswaldAlarm.wday & WDAY_SATURDAY))
+ oswald_draw_bitmap(75, 66, checked_icon_width, checked_icon_height, checked_icon_bits);
+ else
+ oswald_draw_bitmap(75, 66, unchecked_icon_width, unchecked_icon_height, unchecked_icon_bits);
+ }
hal_lcd_update_display();
}
WriteLcdString(50, 20+(9*test_menu.menu_pos), "*");
#endif
- oswald_write_string(2, 2, FONT_DROID11x14b, "Menu");
+ oswald_write_string(2, 2, FONT_DROID8x12, FALSE, "Menu");
- oswald_write_string(2, 20, FONT_DROID8x12, "Item 1");
- oswald_write_string(2, 29, FONT_DROID8x12, "Item 2");
- oswald_write_string(2, 38, FONT_DROID8x12, "Item 3");
- oswald_write_string(2, 47, FONT_DROID8x12, "Item 4");
- oswald_write_string(2, 56, FONT_DROID8x12, "Item 5");
+ oswald_write_string(2, 20, FONT_DROID8x12, FALSE, "Item 1");
+ oswald_write_string(2, 29, FONT_DROID8x12, FALSE, "Item 2");
+ oswald_write_string(2, 38, FONT_DROID8x12, FALSE, "Item 3");
+ oswald_write_string(2, 47, FONT_DROID8x12, FALSE, "Item 4");
+ oswald_write_string(2, 56, FONT_DROID8x12, FALSE, "Item 5");
- oswald_write_character(50, 18+(9*test_menu.menu_pos), FONT_6x9, 0x11);
+ oswald_write_character(50, 18+(9*test_menu.menu_pos), FONT_6x9, FALSE, 0x11);
hal_lcd_update_display();
}
} stopwatch_data_t;
static stopwatch_data_t stopwatch_screen = { 0, 0, 0, 0, 0, 0, 0, 0, FALSE };
-#if 0
-static void update_stop_watch_screen(stopwatch_data_t *sdata)
-{
- //char tstr[16];
-#if 0
- SetFont(MetaWatchMonospaced10);
-
- snprintf(tstr, 16, "%02d:%02d:%02d.%1d", sdata->hr, sdata->min, sdata->sec, sdata->csec / 10);
- WriteLcdString(5, 40, tstr);
- snprintf(tstr, 16, "%02d:%02d:%02d.%02d", sdata->lapse_hr, sdata->lapse_min, sdata->lapse_sec, sdata->lapse_csec);
- WriteLcdString(5, 60, tstr);
-#endif
-#if 0
- snprintf(tstr, 16, "%02d:%02d:%02d.%1d", sdata->hr, sdata->min, sdata->sec, sdata->csec / 10);
- oswald_write_string(5, 40, FONT_6x9, tstr);
-
- snprintf(tstr, 16, "%02d:%02d:%02d.%02d", sdata->lapse_hr, sdata->lapse_min, sdata->lapse_sec, sdata->lapse_csec);
- oswald_write_string(5, 60, FONT_6x9, tstr);
-#endif
-
- hal_lcd_update_display();
-}
-#endif
static void draw_stop_watch_screen(stopwatch_data_t *sdata)
{
hal_lcd_clear_display();
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);
+ oswald_draw_bitmap(81, 70, enterbutton_icon_width, enterbutton_icon_height, enterbutton_icon_bits);
-#if 0
- update_stop_watch_screen(sdata);
-#else
- gRow += 3 + oswald_write_character(gRow, gColumn, FONT_LCD13x21, (sdata->hr % 10));
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, (sdata->min / 10));
- gRow += 3 + oswald_write_character(gRow, gColumn, FONT_LCD13x21, (sdata->min % 10));
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, (sdata->sec / 10));
- gRow += 3 + oswald_write_character(gRow, gColumn, FONT_LCD13x21, (sdata->sec % 10));
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, (sdata->csec / 10));
+ gRow += 3 + oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (sdata->hr % 10));
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (sdata->min / 10));
+ gRow += 3 + oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (sdata->min % 10));
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (sdata->sec / 10));
+ gRow += 3 + oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (sdata->sec % 10));
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->csec / 10));
gRow = 6;
- gColumn = 62;
- gRow += 13 + oswald_write_character(gRow, gColumn, FONT_LCD8x13, (sdata->lapse_hr % 10));
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, (sdata->lapse_min / 10));
- gRow += 13 + oswald_write_character(gRow, gColumn, FONT_LCD8x13, (sdata->lapse_min % 10));
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, (sdata->lapse_sec / 10));
- gRow += 3 + oswald_write_character(gRow, gColumn, FONT_LCD8x13, (sdata->lapse_sec % 10));
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, (sdata->lapse_csec / 10));
- gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, (sdata->lapse_csec % 10));
+ gColumn = 61;
+ gRow += 13 + oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->lapse_hr % 10));
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->lapse_min / 10));
+ gRow += 13 + oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->lapse_min % 10));
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->lapse_sec / 10));
+ gRow += 3 + oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->lapse_sec % 10));
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->lapse_csec / 10));
+ gRow += oswald_write_character(gRow, gColumn, FONT_LCD8x13, FALSE, (sdata->lapse_csec % 10));
hal_lcd_update_display();
-#endif
}
event_ret_t handle_stop_watch_buttons(watch_button button)
switch (event) {
case EVENT_USER_BUTTONS:
dbg_out("button event %d\n", *(int *)data);
- return handle_stop_watch_buttons(*(watch_button *)data);
- //update_stop_watch_screen(&stopwatch_screen);
draw_stop_watch_screen(&stopwatch_screen);
+ return handle_stop_watch_buttons(*(watch_button *)data);
break;
case EVENT_SCREEN_VISIBLE:
- hal_lcd_clear_display();
draw_stop_watch_screen(&stopwatch_screen);
return EVENT_RET_HANDLED;
break;
oswald_draw_bitmap(36, 20, alarm_icon_width, alarm_icon_height, alarm_icon_bits);
+ oswald_draw_bitmap(81, 70, enterbutton_icon_width, enterbutton_icon_height, enterbutton_icon_bits);
+
hal_lcd_update_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);
+ if (sdata->set_mode) {
+ 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);
+ oswald_draw_bitmap(81, 70, rightbutton_icon_width, rightbutton_icon_height, rightbutton_icon_bits);
+ } else {
+ oswald_draw_bitmap(81, 70, enterbutton_icon_width, enterbutton_icon_height, enterbutton_icon_bits);
+ }
- oswald_write_string(1, 30, FONT_DROID8x12, "Enable:");
+ oswald_write_string(1, 30, FONT_DROID8x12, FALSE, "Enable:");
if ((sdata->pos == 0 && sdata->on) || sdata->pos != 0) {
- oswald_write_character(53, 30, FONT_DROID8x12, bluetooth_screen.bt_en ? 'x' : '_');
+ if (bluetooth_screen.bt_en)
+ oswald_draw_bitmap(53, 33, checked_icon_width, checked_icon_height, checked_icon_bits);
+ else
+ oswald_draw_bitmap(53, 33, unchecked_icon_width, unchecked_icon_height, unchecked_icon_bits);
}
- oswald_write_string(1, 40, FONT_DROID8x12, "State:");
+ oswald_write_string(1, 40, FONT_DROID8x12, FALSE, "State:");
switch (hal_bluetooth_get_state()) {
case BLUETOOTH_OFF:
- oswald_write_string(53, 40, FONT_DROID8x12, "off");
+ oswald_write_string(53, 40, FONT_DROID8x12, FALSE, "off");
break;
case BLUETOOTH_ON:
- oswald_write_string(53, 40, FONT_DROID8x12, "on");
+ oswald_write_string(53, 40, FONT_DROID8x12, FALSE, "on");
break;
case BLUETOOTH_CONNECTED:
- oswald_write_string(53, 40, FONT_DROID8x12, "conn.");
+ oswald_write_string(53, 40, FONT_DROID8x12, FALSE, "conn.");
break;
default:
break;
};
- oswald_write_string(1, 50, FONT_DROID8x12, "Visible:");
+ oswald_write_string(1, 50, FONT_DROID8x12, FALSE, "Visible:");
if ((sdata->pos == 1 && sdata->on) || sdata->pos != 1) {
- oswald_write_character(53, 50, FONT_DROID8x12, hal_bluetooth_get_visible() ? 'x' : '_');
+ // oswald_write_character(53, 50, FONT_DROID8x12, hal_bluetooth_get_visible() ? 'x' : '_');
+ if (hal_bluetooth_get_visible())
+ oswald_draw_bitmap(53, 53, checked_icon_width, checked_icon_height, checked_icon_bits);
+ else
+ oswald_draw_bitmap(53, 53, unchecked_icon_width, unchecked_icon_height, unchecked_icon_bits);
}
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]);
- oswald_write_string(2, 85, FONT_5x7, bstr);
+ oswald_write_string(2, 85, FONT_5x7, FALSE, bstr);
} 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;
};
/*
* Info Screen
*/
-void draw_info_screen(accel_data_t *accel_data)
+void draw_info_screen(void)
{
hal_lcd_clear_display();
oswald_draw_bitmap(36, 0, info_icon_width, info_icon_height, info_icon_bits);
- oswald_write_string(2, 29, FONT_DROID8x12, "Oswald");
- oswald_write_string(35, 29, FONT_DROID8x12, OSWALD_VERSION);
- oswald_write_string(2, 41, FONT_DROID8x12, "HAL");
- oswald_write_string(35, 41, FONT_DROID8x12, (char *)hal_get_version_string());
- oswald_write_string(2, 53, FONT_DROID8x12, "Build");
- oswald_write_string(35, 53, FONT_DROID8x12, (char *)hal_get_buildno_string());
- oswald_write_string(2, 65, FONT_DROID8x12, "Radio");
- oswald_write_string(35, 65, FONT_DROID8x12, (char *)hal_get_radio_version_string());
+ oswald_draw_bitmap(81, 70, enterbutton_icon_width, enterbutton_icon_height, enterbutton_icon_bits);
+
+ oswald_write_string(2, 29, FONT_DROID8x12, FALSE, "Oswald");
+ oswald_write_string(35, 29, FONT_DROID8x12, FALSE, OSWALD_VERSION);
+ oswald_write_string(2, 41, FONT_DROID8x12, FALSE, "HAL");
+ oswald_write_string(35, 41, FONT_DROID8x12, FALSE, (char *)hal_get_version_string());
+ oswald_write_string(2, 53, FONT_DROID8x12, FALSE, "Build");
+ oswald_write_string(35, 53, FONT_DROID8x12, FALSE, (char *)hal_get_buildno_string());
+ oswald_write_string(2, 65, FONT_DROID8x12, FALSE, "Radio");
+ oswald_write_string(35, 65, FONT_DROID8x12, FALSE, (char *)hal_get_radio_version_string());
hal_lcd_update_display();
}
{
switch (event) {
case EVENT_SCREEN_VISIBLE:
- draw_info_screen(&accel_screen.accdata);
+ draw_info_screen();
return EVENT_RET_HANDLED;
break;
case EVENT_USER_BUTTONS:
return EVENT_RET_UNHANDLED;
}
+
+/*
+ * Messages Screens
+ */
+typedef struct {
+ int8_t pos; // marker position
+ int8_t offset; // offset in msg list
+} messages_data_t;
+static messages_data_t messages_screen = {
+ 0,
+ 0,
+};
+
+typedef struct {
+ uint8_t day;
+ uint8_t month;
+ uint8_t year; // without century, add +1900
+ uint8_t hour;
+ uint8_t minute;
+} msg_timedate_t;
+
+#define MSG_TYPE_READ 0
+#define MSG_TYPE_NEW 1
+#define MSG_TYPE_END 127
+
+typedef struct {
+ uint8_t type;
+ msg_timedate_t td;
+ char *msg;
+} message_t;
+
+uint8_t Msgs = 15;
+message_t Msg[] = {
+ { MSG_TYPE_READ, {9,5,113,0,38}, "Testmessage with more text than fits into the menu." },
+ { MSG_TYPE_NEW, {9,5,113,0,39}, "Sitting in the train waiting to arrive." },
+ { MSG_TYPE_READ, {9,5,113,0,40}, "People in the train are annoying!" },
+ { MSG_TYPE_READ, {9,5,113,0,40}, "Auch auf Deutsch geht das hier und Text können lang sein." },
+ { MSG_TYPE_NEW, {8,5,113,0,40}, "Und hier noch eine neue Nachricht, die nun wirklich lang ist, laenger als die anderen." },
+ { MSG_TYPE_READ, {9,5,113,0,38}, "Testmessage with more text than fits into the menu." },
+ { MSG_TYPE_NEW, {9,5,113,0,39}, "Sitting in the train waiting to arrive." },
+ { MSG_TYPE_READ, {9,5,113,0,40}, "People in the train are annoying!" },
+ { MSG_TYPE_READ, {9,5,113,0,40}, "Auch auf Deutsch geht das hier und Text können lang sein." },
+ { MSG_TYPE_NEW, {8,5,113,0,40}, "Und hier noch eine neue Nachricht, die nun wirklich lang ist, laenger als die anderen." },
+ { MSG_TYPE_READ, {9,5,113,0,38}, "Testmessage with more text than fits into the menu." },
+ { MSG_TYPE_NEW, {9,5,113,0,39}, "Sitting in the train waiting to arrive." },
+ { MSG_TYPE_READ, {9,5,113,0,40}, "People in the train are annoying!" },
+ { MSG_TYPE_READ, {9,5,113,0,40}, "Auch auf Deutsch geht das hier und Text können lang sein." },
+ { MSG_TYPE_NEW, {8,5,113,0,40}, "Und hier noch eine neue Nachricht, die nun wirklich lang ist, laenger als die anderen." },
+ { MSG_TYPE_END, {0,0,0,0,0}, "Exit" },
+};
+
+void draw_message_screen(messages_data_t *sdata)
+{
+ char dstr[32];
+ uint8_t strpos, msglen;
+ uint8_t line;
+
+ hal_lcd_clear_display();
+
+#if 0
+ 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);
+#endif
+ oswald_draw_bitmap(81, 70, enterbutton_icon_width, enterbutton_icon_height, enterbutton_icon_bits);
+
+ Msg[sdata->offset + sdata->pos].type = MSG_TYPE_READ;
+ snprintf(dstr, 19, "#%02d/%02d", sdata->pos + sdata->offset + 1, Msgs);
+ oswald_write_string(30, 0, FONT_5x7, FALSE, dstr);
+ oswald_draw_line(0,7,95,7);
+
+
+ // here goes the text
+ msglen = strlen(Msg[sdata->pos+sdata->offset].msg);
+ strpos=0;
+ line=0;
+ while ((strpos < msglen) && (line < 6)) {
+ strpos += oswald_write_string_length(4, 9+(line*12), 84, FONT_DROID8x12, FALSE, &Msg[sdata->pos+sdata->offset].msg[strpos]);
+ line++;
+ }
+
+
+ oswald_draw_line(0,87,95,87);
+
+ if (Msg[sdata->offset + sdata->pos].type != MSG_TYPE_END) {
+ 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);
+ oswald_write_string(2, 89, FONT_5x7, FALSE, dstr);
+ }
+
+ hal_lcd_update_display();
+}
+
+event_ret_t handle_message_screen_buttons(watch_button button, messages_data_t *sdata)
+{
+ switch (button) {
+ case BUTTON_A:
+ break;
+ case BUTTON_B:
+ return EVENT_RET_HANDLED;
+ break;
+ case BUTTON_C:
+ // OswaldState.screen->event_func(EVENT_SCREEN_DESTROY, NULL);
+ OswaldState.screen_id = MESSAGES_SCREEN;
+ OswaldState.screen = &OswaldScreens[OswaldState.screen_id];
+ OswaldState.screen->event_func(EVENT_SCREEN_VISIBLE, NULL);
+ return EVENT_RET_HANDLED;
+ break;
+ default:
+ break;
+ }
+
+ return EVENT_RET_UNHANDLED;
+}
+
+event_ret_t message_screen_handle_events(uint16_t event, void *data)
+{
+ switch (event) {
+ case EVENT_SCREEN_VISIBLE:
+ draw_message_screen(&messages_screen);
+ return EVENT_RET_HANDLED;
+ break;
+ case EVENT_USER_BUTTONS:
+ dbg_out("button event %d\n", *(int *)data);
+ return handle_message_screen_buttons(*(watch_button *)data, &messages_screen);
+ break;
+ default:
+ break;
+ };
+ return EVENT_RET_UNHANDLED;
+}
+
+void draw_messages_screen(messages_data_t *sdata)
+{
+ char dstr[32];
+ int i;
+
+ hal_lcd_clear_display();
+
+ // oswald_draw_bitmap(36, 0, Message_icon_width, Message_icon_height, Message_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);
+ oswald_draw_bitmap(81, 70, enterbutton_icon_width, enterbutton_icon_height, enterbutton_icon_bits);
+
+ if (Msg[sdata->offset + sdata->pos].type != MSG_TYPE_END) {
+ snprintf(dstr, 19, "#%02d/%02d", sdata->pos + sdata->offset + 1, Msgs);
+ oswald_write_string(30, 0, FONT_5x7, FALSE, dstr);
+ }
+ oswald_draw_line(0,7,95,7);
+
+ for (i=0; i<6; i++) {
+ if (Msg[i+sdata->offset].type != MSG_TYPE_END) {
+ //oswald_write_string_length(4, 9+(i*12), 84, FONT_DROID8x12, (Msg[i+sdata->offset].type == MSG_TYPE_NEW), Msg[i+sdata->offset].msg);
+ if (Msg[i+sdata->offset].type == MSG_TYPE_NEW)
+ oswald_write_string_length(4, 9+(i*12), 84, FONT_DROID8x12b, (i+sdata->offset) == (sdata->offset + sdata->pos), Msg[i+sdata->offset].msg);
+ else
+ oswald_write_string_length(4, 9+(i*12), 84, FONT_DROID8x12, (i+sdata->offset) == (sdata->offset + sdata->pos), Msg[i+sdata->offset].msg);
+ } else {
+ oswald_draw_bitmap(0, 66, leftbutton_icon_width, leftbutton_icon_height, leftbutton_icon_bits);
+ }
+ }
+
+ // marker selected msg
+ oswald_draw_line(1,9,1,81);
+ oswald_draw_line_ww(1,10+(sdata->pos*12),1,20+(sdata->pos*12),2);
+
+ oswald_draw_line(0,87,95,87);
+
+ if (Msg[sdata->offset + sdata->pos].type != MSG_TYPE_END) {
+ 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);
+ oswald_write_string(2, 89, FONT_5x7, FALSE, dstr);
+ }
+
+ hal_lcd_update_display();
+}
+
+event_ret_t handle_messages_screen_buttons(watch_button button, messages_data_t *sdata)
+{
+ switch (button) {
+ case BUTTON_A:
+ sdata->pos--;
+ if (sdata->pos < 0) {
+ if (sdata->offset > 0) {
+ sdata->pos = 0;
+ sdata->offset--;
+ if (sdata->offset < 0)
+ sdata->offset = 0;
+ } else {
+ sdata->pos = 5;
+ sdata->offset = (Msgs - 5);
+ if (sdata->offset < 0)
+ sdata->offset = 0;
+ }
+ }
+ draw_messages_screen(&messages_screen);
+ return EVENT_RET_HANDLED;
+ break;
+ case BUTTON_B:
+ sdata->pos++;
+ if (sdata->pos > 5) {
+ sdata->pos = 5;
+ sdata->offset++;
+ if ((sdata->offset + 5) > Msgs) {
+ sdata->offset = 0;
+ sdata->pos = 0;
+ }
+ }
+ draw_messages_screen(&messages_screen);
+ return EVENT_RET_HANDLED;
+ break;
+ case BUTTON_C:
+ if (Msg[sdata->offset + sdata->pos].type == MSG_TYPE_END)
+ return EVENT_RET_UNHANDLED;
+ else
+ // OswaldState.screen->event_func(EVENT_SCREEN_DESTROY, NULL);
+ OswaldState.screen_id = MESSAGE_SCREEN;
+ OswaldState.screen = &OswaldScreens[OswaldState.screen_id];
+ OswaldState.screen->event_func(EVENT_SCREEN_VISIBLE, NULL);
+ return EVENT_RET_HANDLED;
+ break;
+ default:
+ break;
+ }
+
+ return EVENT_RET_UNHANDLED;
+}
+
+event_ret_t messages_screen_handle_events(uint16_t event, void *data)
+{
+ switch (event) {
+ case EVENT_SCREEN_VISIBLE:
+// messages_screen.pos = 0;
+// messages_screen.offset = 0;
+ draw_messages_screen(&messages_screen);
+ return EVENT_RET_HANDLED;
+ break;
+ case EVENT_USER_BUTTONS:
+ dbg_out("button event %d\n", *(int *)data);
+ return handle_messages_screen_buttons(*(watch_button *)data, &messages_screen);
+ break;
+ default:
+ break;
+ };
+ return EVENT_RET_UNHANDLED;
+}
+