From 16600ff42846105227c8a3cbb4f2b818ca41811d Mon Sep 17 00:00:00 2001 From: Nils Faerber Date: Mon, 29 Apr 2013 00:38:41 +0200 Subject: [PATCH] Starting to get rid of borrowed code (LcdDisplay, Fonts), integrate new fonts and stuff --- metawatch/Makefile | 5 +- metawatch/bt_hci.c | 1 + metawatch/bt_hci.h | 10 +-- ui/LcdDisplay.c | 15 ----- ui/LcdDisplay.h | 1 - ui/Makefile.am | 6 +- ui/oswald_fonts.c | 68 ++++++++++---------- ui/oswald_fonts.h | 36 +++++------ ui/oswald_graphics.c | 136 +++++++++++++++++++++++++++++++--------- ui/oswald_graphics.h | 14 +++-- ui/oswald_screens.c | 77 ++++++++++++++--------- ui/oswald_watch_faces.c | 117 +++++++++++++++++++++++----------- 12 files changed, 308 insertions(+), 178 deletions(-) diff --git a/metawatch/Makefile b/metawatch/Makefile index 64ef09f..48a60ce 100644 --- a/metawatch/Makefile +++ b/metawatch/Makefile @@ -25,8 +25,9 @@ APPCONFIG = -DDIGITAL -DMW_DEVBOARD_V2 # List all the source files here # eg if you have a source file foo.c then list it here OSWALD_SRC = ../ui/oswald_main.c ../ui/oswald_screens.c \ - ../ui/oswald_watch_faces.c ../ui/Fonts.c ../ui/LcdDisplay.c \ + ../ui/oswald_watch_faces.c \ ../ui/oswald_strings.c ../ui/calendar.c \ + ../ui/oswald_graphics.c ../ui/oswald_fonts.c \ ../ui/embedvm.c SOURCES = mw_main.c mw_uart.c mw_lcd.c mw_adc.c mw_bt.c \ @@ -41,7 +42,7 @@ SOURCES = mw_main.c mw_uart.c mw_lcd.c mw_adc.c mw_bt.c \ # Include are located in the Include directory #INCLUDES = $(BT_STACK_INC) #INCLUDES = $(BT_SMALLTOOTH_INV) -INCLUDES = -I../ui/ -I../ui/bitmaps/ +INCLUDES = -I../ui/ # Add or subtract whatever MSPGCC flags you want. There are plenty more ####################################################################################### diff --git a/metawatch/bt_hci.c b/metawatch/bt_hci.c index 265b00c..38ffb7f 100644 --- a/metawatch/bt_hci.c +++ b/metawatch/bt_hci.c @@ -232,6 +232,7 @@ void bt_hci_process_event_packet(unsigned char *packet) #endif memmove(packet, (packet+2), 6); packet[6] = 0x04; // PIN has length of 4 + memcpy((packet+7), BT_PIN, 4); packet[7] = '4'; packet[8] = '3'; packet[9] = '1'; diff --git a/metawatch/bt_hci.h b/metawatch/bt_hci.h index deecc91..7a0f99a 100644 --- a/metawatch/bt_hci.h +++ b/metawatch/bt_hci.h @@ -2,10 +2,10 @@ #define _BT_HCI_H /* HCI Command OGF */ -#define HCI_LINK_CTRL_OGF 0x01 -#define HCI_LINK_POLICY_OGF 0x02 -#define HCI_HC_BB_OGF 0x03 -#define HCI_INFO_PARAM_OGF 0x04 +#define HCI_LINK_CTRL_OGF 0x01 +#define HCI_LINK_POLICY_OGF 0x02 +#define HCI_HC_BB_OGF 0x03 +#define HCI_INFO_PARAM_OGF 0x04 /* HCI Command OCF */ #define HCI_DISCONN_OCF 0x06 @@ -83,6 +83,8 @@ #define EHCILL_WAKE_UP_IND 0x32 #define EHCILL_WAKE_UP_ACK 0x33 +#define BT_PIN "4312" + void bt_hci_init(void); void bt_hci_cmd(const uint8_t OGF, const uint8_t OCF, const uint8_t data_len, const void *data); void bt_acl_send(const uint16_t handle, const uint8_t PB, const uint8_t BC, const uint16_t channel, const uint16_t len, const void *dat); diff --git a/ui/LcdDisplay.c b/ui/LcdDisplay.c index f4e26c9..ae4aea5 100644 --- a/ui/LcdDisplay.c +++ b/ui/LcdDisplay.c @@ -6,21 +6,6 @@ #include "LcdDisplay.h" -void oswald_draw_bitmap(const uint8_t xstart, const uint8_t ystart, const uint8_t width, const uint8_t height, const void *bmp) -{ - uint8_t x, y; - uint8_t *cb; - - // we only draw set pixel, unset pixel remain as they are - for (y=0; ydy) { - pdx = incx; pdy = 0; - ddx=incx; ddy=incy; - es =dy; el =dx; + pdx = incx; + pdy = 0; + ddx=incx; + ddy=incy; + es =dy; + el =dx; } else { - pdx=0; pdy=incy; - ddx=incx; ddy=incy; - es =dx; el =dy; + pdx=0; + pdy=incy; + ddx=incx; + ddy=incy; + es =dx; + el =dy; } x = xstart; @@ -121,10 +177,10 @@ void oswald_draw_line_ww(u8t xstart, u8t ystart, u8t xend, u8t yend, u8t thickne hal_lcd_set_pixel(x, y+i, TRUE); } } - hal_lcd_update_display(); + // hal_lcd_update_display(); } -u8t oswald_write_character(u8t x, u8t y, oswald_font_face face, u8t Character) +uint8_t oswald_write_character(const uint8_t x, const uint8_t y, const oswald_font_face face, const uint8_t Character) { #if 0 u8t CharacterHeight = GetCharacterHeight(); @@ -140,25 +196,44 @@ u8t oswald_write_character(u8t x, u8t y, oswald_font_face face, u8t Character) if (bitmap[ly] & (1< 0 ? (8-(oswald_fonts[face].width % 8)) : 0, 0, ((oswald_fonts[face].width / 8) + ((oswald_fonts[face].width % 8) ? 1 : 0))*8, oswald_fonts[face].height, cdata); + + return oswald_fonts[face].width; +#endif } -void oswald_write_string(u8t x, u8t y, oswald_font_face face, u8t *str) +void oswald_write_string(const uint8_t x, const uint8_t y, const oswald_font_face face, char *str) { - register lx, i, strl; + uint8_t lx, i, strl; strl = oswald_strlen(str); if (strl == 0) @@ -166,15 +241,15 @@ void oswald_write_string(u8t x, u8t y, oswald_font_face face, u8t *str) lx = x; for (i=0; i 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/startstopbutton_icon.xbm" +#if defined(__GNUC__) && (__MSP430X__ > 0) +__attribute__((__far__)) +#endif +#include "bitmaps/lapsebutton_icon.xbm" +#if defined(__GNUC__) && (__MSP430X__ > 0) +__attribute__((__far__)) +#endif +#include "bitmaps/upbutton_icon.xbm" +#if defined(__GNUC__) && (__MSP430X__ > 0) +__attribute__((__far__)) +#endif +#include "bitmaps/downbutton_icon.xbm" +#if defined(__GNUC__) && (__MSP430X__ > 0) +__attribute__((__far__)) +#endif +#include "bitmaps/Bluetooth_icon.xbm" typedef struct { @@ -87,17 +113,20 @@ static accelscreen_data_t accel_screen = { void draw_accel_screen(accel_data_t *accel_data) { hal_lcd_clear_display(); - SetFont(MetaWatch16); - WriteLcdString(2, 2, "X:"); - WriteLcdNumber(20, 2, accel_data->x); - WriteLcdString(2, 18, "Y:"); - 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); + oswald_write_string(0, 2, FONT_7x12b, "X:"); + oswald_write_number(20, 2, FONT_7x12b, accel_data->x); + oswald_write_string(0, 18, FONT_7x12b, "Y:"); + oswald_write_number(20, 18, FONT_7x12b, accel_data->y); +#if 0 + oswald_write_string(0, 34, FONT_8x12, "Z:"); + oswald_write_number(20, 34, FONT_8x12, accel_data->z); + oswald_write_string(0, 54, FONT_12x16, "Light:"); + oswald_write_number(50, 54, FONT_12x16, accel_data->z); + + oswald_write_string(0, 70, FONT_12x20, "23:59"); +#endif hal_lcd_update_display(); } @@ -136,8 +165,7 @@ 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"); + 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); @@ -154,14 +182,7 @@ void draw_datetime_setup_screen(datetime_setup_data_t *sdata) 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)); diff --git a/ui/oswald_watch_faces.c b/ui/oswald_watch_faces.c index 4ca034f..49cf73a 100644 --- a/ui/oswald_watch_faces.c +++ b/ui/oswald_watch_faces.c @@ -6,20 +6,48 @@ #include "Fonts.h" #include "LcdDisplay.h" #include "oswald_hal.h" +#include "oswald_graphics.h" #include "oswald_watch_faces.h" -#include "battery0_icon.xbm" -#include "battery25_icon.xbm" -#include "battery50_icon.xbm" -#include "battery75_icon.xbm" -#include "battery100_icon.xbm" -#include "charger_icon.xbm" -#include "bluetooth_icon.xbm" -#include "bluetooth_con_icon.xbm" +#if defined(__GNUC__) && (__MSP430X__ > 0) +__attribute__((__far__)) +#endif +#include "bitmaps/battery0_icon.xbm" +#if defined(__GNUC__) && (__MSP430X__ > 0) +__attribute__((__far__)) +#endif +#include "bitmaps/battery25_icon.xbm" +#if defined(__GNUC__) && (__MSP430X__ > 0) +__attribute__((__far__)) +#endif +#include "bitmaps/battery50_icon.xbm" +#if defined(__GNUC__) && (__MSP430X__ > 0) +__attribute__((__far__)) +#endif +#include "bitmaps/battery75_icon.xbm" +#if defined(__GNUC__) && (__MSP430X__ > 0) +__attribute__((__far__)) +#endif +#include "bitmaps/battery100_icon.xbm" +#if defined(__GNUC__) && (__MSP430X__ > 0) +__attribute__((__far__)) +#endif +#include "bitmaps/charger_icon.xbm" +#if defined(__GNUC__) && (__MSP430X__ > 0) +__attribute__((__far__)) +#endif +#include "bitmaps/bluetooth_icon.xbm" +#if defined(__GNUC__) && (__MSP430X__ > 0) +__attribute__((__far__)) +#endif +#include "bitmaps/bluetooth_con_icon.xbm" /* sine table, per degree, factor 100 */ +#if defined(__GNUC__) && (__MSP430X__ > 0) +__attribute__((__far__)) +#endif int16_t sintab[]={ 0, 2, 3, 5, 7, 9, 10, 12, 14, 16, 17, 19, 21, 22, 24, 26, 28, 29, 31, 33, @@ -92,15 +120,15 @@ void draw_status_icons(void) } } else { if (OswaldPowerState.percent > 75) - oswald_draw_bitmap(81, 0, battery100_icon_width, battery100_icon_height, battery100_icon_bits); + oswald_draw_bitmap_offset(81, 0, 0,0, battery100_icon_width, battery100_icon_height, battery100_icon_bits); else if (OswaldPowerState.percent > 50) - oswald_draw_bitmap(81, 0, battery75_icon_width, battery75_icon_height, battery75_icon_bits); + oswald_draw_bitmap_offset(81, 0, 0,0, battery75_icon_width, battery75_icon_height, battery75_icon_bits); else if (OswaldPowerState.percent > 25) - oswald_draw_bitmap(81, 0, battery50_icon_width, battery50_icon_height, battery50_icon_bits); + oswald_draw_bitmap_offset(81, 0, 0,0, battery50_icon_width, battery50_icon_height, battery50_icon_bits); else if (OswaldPowerState.percent > 5) - oswald_draw_bitmap(81, 0, battery25_icon_width, battery25_icon_height, battery25_icon_bits); + oswald_draw_bitmap_offset(81, 0, 0,0, battery25_icon_width, battery25_icon_height, battery25_icon_bits); else - oswald_draw_bitmap(81, 0, battery0_icon_width, battery0_icon_height, battery0_icon_bits); + oswald_draw_bitmap_offset(81, 0, 0,0, battery0_icon_width, battery0_icon_height, battery0_icon_bits); } if (hal_bluetooth_get_state() == BLUETOOTH_ON) @@ -133,9 +161,13 @@ void DrawLcdAnaClock(boolean show_seconds) hal_lcd_clear_display(); - SetFont(MetaWatch16); snprintf(tstr, 16, "%02d", OswaldClk.day); +#if 0 + SetFont(MetaWatch16); WriteLcdString(70, 40, tstr); +#else + oswald_write_string(70, 43, FONT_7x12b, tstr); +#endif // Marker // plot(R*cos(360° * i/N), R*sin(360° * i/N)) @@ -144,7 +176,7 @@ void DrawLcdAnaClock(boolean show_seconds) y = 47 + ((43 * f_sin((360 / 12) * i)) / 100); x2 = 47 + ((47 * f_cos((360 / 12) * i)) / 100); y2 = 47 + ((47 * f_sin((360 / 12) * i)) / 100); - DrawLcdLineBresenhamWW(x, y, x2, y2, 2); + oswald_draw_line_ww(x, y, x2, y2, 2); // g_printerr("br %d,%d %d,%d\n", x,y,x2,y2); }; @@ -153,14 +185,14 @@ void DrawLcdAnaClock(boolean show_seconds) x = tmp; tmp = 47 + (30 * f_sin(((360 / 12) * hour) + ((OswaldClk.minute * 360) /12 / 60)) / 100); y = tmp; - DrawLcdLineBresenhamWW(47, 47, x, y, 2); + oswald_draw_line_ww(47, 47, x, y, 2); // Minute tmp = 47 + ((40 * f_cos((360 / 60) * minute)) / 100); x = tmp; tmp = 47 + ((40 * f_sin((360 / 60) * minute)) / 100); y = tmp; - DrawLcdLineBresenhamWW(47, 47, x, y, 2); + oswald_draw_line_ww(47, 47, x, y, 2); if (show_seconds) { // Seconds @@ -168,7 +200,7 @@ void DrawLcdAnaClock(boolean show_seconds) x = tmp; tmp = 47 + ((40 * f_sin((360 / 60) * seconds)) / 100); y = tmp; - DrawLcdLineBresenham(47, 47, x, y); + oswald_draw_line(47, 47, x, y); }; draw_status_icons(); @@ -183,6 +215,7 @@ void DrawLcdDigitalClock(boolean show_seconds) char tstr[16]; int i; +#if 0 SetFont(MetaWatchTime); hal_lcd_clear_display(); @@ -226,27 +259,7 @@ void DrawLcdDigitalClock(boolean show_seconds) snprintf(tstr, 16, "%d/%d %d", OswaldClk.month, OswaldClk.day, OswaldClk.year); WriteLcdString(3, 25, tstr); -#if 0 - if (OswaldPowerState.source) - oswald_draw_bitmap(81, 4, charger_icon_width, charger_icon_height, charger_icon_bits); - - if (OswaldPowerState.percent > 75) - oswald_draw_bitmap(81, 4, battery100_icon_width, battery100_icon_height, battery100_icon_bits); - else if (OswaldPowerState.percent > 50) - oswald_draw_bitmap(81, 4, battery75_icon_width, battery75_icon_height, battery75_icon_bits); - else if (OswaldPowerState.percent > 25) - oswald_draw_bitmap(81, 4, battery50_icon_width, battery50_icon_height, battery50_icon_bits); - else if (OswaldPowerState.percent > 5) - oswald_draw_bitmap(81, 4, battery25_icon_width, battery25_icon_height, battery25_icon_bits); - else - oswald_draw_bitmap(81, 4, battery0_icon_width, battery0_icon_height, battery0_icon_bits); - - - if (hal_bluetooth_get_state() >= BLUETOOTH_ON) - oswald_draw_bitmap(81, 4, bluetooth_icon_width, bluetooth_icon_height, bluetooth_icon_bits); -#else draw_status_icons(); -#endif gRow = 0; gColumn = 45; @@ -284,6 +297,34 @@ void DrawLcdDigitalClock(boolean show_seconds) break; }; }; +#endif +#else + hal_lcd_clear_display(); + snprintf(tstr, 16, "%02d", OswaldClk.hour); + oswald_write_string(0, 0, FONT_16x26, tstr); + oswald_write_character(26, 0, FONT_16x26, ':'); + snprintf(tstr, 16, "%02d", OswaldClk.minute); + oswald_write_string(36, 0, FONT_16x26, tstr); + + if (OswaldClk.day_first) + snprintf(tstr, 16, "%d.%d.%d", OswaldClk.day, OswaldClk.month, OswaldClk.year); + else + snprintf(tstr, 16, "%d/%d %d", OswaldClk.month, OswaldClk.day, OswaldClk.year); + oswald_write_string(0, 25, FONT_7x12b, tstr); + + gRow = 0; + gColumn = 45; + for (i=0; i 90) { + gRow = 0; + gColumn += 9; + } + if (gColumn > 95) + i = 255; + } + + draw_status_icons(); #endif hal_lcd_update_display(); } -- 2.39.2