]> git.karo-electronics.de Git - oswald.git/blobdiff - ui/oswald_watch_faces.c
Some minor improvements.
[oswald.git] / ui / oswald_watch_faces.c
index 4ca034fb9951a97e4938cbac5a9e80b4d5e2771c..b955c74af738776008b35a775c8617b7c6d7dbf4 100644 (file)
@@ -3,23 +3,49 @@
 
 #include "oswald.h"
 #include "oswald_main.h"
-#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,
@@ -133,9 +159,8 @@ void DrawLcdAnaClock(boolean show_seconds)
 
        hal_lcd_clear_display();
 
-       SetFont(MetaWatch16);
-       snprintf(tstr, 16, "%02d", OswaldClk.day);
-       WriteLcdString(70, 40, tstr);
+       snprintf(tstr, 16, "%2d", OswaldClk.day);
+       oswald_write_string(70, 43, FONT_6x9, FALSE, tstr);
 
        // Marker
        // plot(R*cos(360° * i/N), R*sin(360° * i/N))
@@ -144,7 +169,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 +178,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 +193,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();
@@ -176,90 +201,15 @@ void DrawLcdAnaClock(boolean show_seconds)
        hal_lcd_update_display();
 }
 
+static const char *daynames[7] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
+
 void DrawLcdDigitalClock(boolean show_seconds)
 {
-       int gRow = 3;
-       int gColumn = 3;
+       int gRow = 1;
+       int gColumn = 1;
        char tstr[16];
        int i;
 
-       SetFont(MetaWatchTime);
-
-       hal_lcd_clear_display();
-       //gRow += WriteLcdCharacter(ui, gRow, gColumn, TIME_CHARACTER_SPACE_INDEX);
-       if (OswaldClk.clk24hr) {
-               gRow += WriteLcdCharacter(gRow, gColumn, (OswaldClk.hour / 10));
-               gRow += WriteLcdCharacter(gRow, gColumn, (OswaldClk.hour % 10));
-       } else {
-               unsigned char val = OswaldClk.hour;
-               if (val > 12)
-                       val -= 12;
-               gRow += WriteLcdCharacter(gRow, gColumn, (val / 10));
-               gRow += WriteLcdCharacter(gRow, gColumn, (val % 10));
-       }
-       gRow += WriteLcdCharacter(gRow, gColumn, TIME_CHARACTER_COLON_INDEX);
-       gRow += WriteLcdCharacter(gRow, gColumn, (OswaldClk.minute / 10));
-       gRow += WriteLcdCharacter(gRow, gColumn, (OswaldClk.minute % 10));
-
-       gRow += 3;
-       if (show_seconds) {
-               SetFont(MetaWatch16);
-               snprintf(tstr, 16, "%02d", OswaldClk.second);
-               WriteLcdString(gRow, 9, tstr);
-       };
-
-       SetFont(MetaWatch7);
-
-       if (!OswaldClk.clk24hr) {
-               if (OswaldClk.hour > 12) {
-                       WriteLcdString(gRow, 3, "PM");
-               } else {
-                       WriteLcdString(gRow, 3, "AM");
-               }
-       }
-
-       SetFont(MetaWatch16);
-
-       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);
-       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;
-       SetFont(MetaWatch5);
-       for (i=0; i<strlen(MainMessage); i++) {
-               gRow += WriteLcdCharacter(gRow, gColumn, MainMessage[i]);
-               if (gRow > 90) {
-                       gRow = 0;
-                       gColumn += 7;
-               }
-               if (gColumn > 95)
-                       i = 255;
-       }
 #if 0
        snprintf(tstr, 16, "%d%% (%dmV)", OswaldPowerState.percent, OswaldPowerState.level);
        WriteLcdString(2, 48, tstr);
@@ -285,6 +235,64 @@ void DrawLcdDigitalClock(boolean show_seconds)
                };
        };
 #endif
+       hal_lcd_clear_display();
+
+       if (OswaldClk.clk24hr) {
+               gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (OswaldClk.hour / 10));
+               gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (OswaldClk.hour % 10));
+       } else {
+               unsigned char val = OswaldClk.hour;
+               if (val > 12) {
+                       val -= 12;
+                       oswald_write_string(59, 0, FONT_6x9, FALSE, "PM");
+               } else {
+                       oswald_write_string(59, 0, FONT_6x9, FALSE, "AM");
+               }
+               gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (val / 10));
+               gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (val % 10));
+       }
+       if (OswaldClk.second % 2)
+               oswald_write_character(gRow-4, gColumn, FONT_LCD13x21, FALSE, 10);
+       gRow += 5;
+       gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (OswaldClk.minute / 10));
+       gRow += oswald_write_character(gRow, gColumn, FONT_LCD13x21, FALSE, (OswaldClk.minute % 10));
+
+       if (show_seconds) {
+               oswald_write_character(59, 9, FONT_LCD8x13, FALSE, (OswaldClk.second / 10));
+               oswald_write_character(67, 9, FONT_LCD8x13, FALSE, (OswaldClk.second % 10));
+       }
+
+       if (OswaldClk.day_first)
+               snprintf(tstr, 16, "%s %d.%d.%d", daynames[OswaldClk.wday], OswaldClk.day, OswaldClk.month, OswaldClk.year);
+       else
+               snprintf(tstr, 16, "%s %d/%d %d", daynames[OswaldClk.wday], OswaldClk.month, OswaldClk.day, OswaldClk.year);
+       oswald_write_string(0, 25, FONT_DROID8x12, FALSE, tstr);
+
+       gRow = 0;
+       gColumn = 45;
+       for (i=0; i<strlen(MainMessage); i++) {
+               // do not draw a whitespace as first character of a row
+               if (gRow == 0 && MainMessage[i] == ' ')
+                       continue;
+               // interpret new line
+               if (MainMessage[i] == '\n') {
+                       gRow = 0;
+                       gColumn += 9;
+                       continue;
+               }
+               gRow += oswald_write_character(gRow, gColumn, FONT_DROID8x12, FALSE, MainMessage[i]);
+               // wrap to new line if line is full
+               if (gRow > 90) {
+                       gRow = 0;
+                       gColumn += 9;
+               }
+               // OK, screen ends, leave the loop, no matter what
+               if (gColumn > 86)
+                       i = 255;
+       }
+
+       draw_status_icons();
+
        hal_lcd_update_display();
 }