]> git.karo-electronics.de Git - oswald.git/blobdiff - ui/oswald_watch_faces.c
Starting to get rid of borrowed code (LcdDisplay, Fonts), integrate
[oswald.git] / ui / oswald_watch_faces.c
index 6db3196abd2d39baba91ff3e415e07866066b96c..49cf73a6bacd0cd2d81164701b2a85e3bd5004a2 100644 (file)
@@ -6,9 +6,48 @@
 #include "Fonts.h"
 #include "LcdDisplay.h"
 #include "oswald_hal.h"
+#include "oswald_graphics.h"
 
 #include "oswald_watch_faces.h"
 
+#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,
@@ -61,6 +100,43 @@ int16_t f_cos(int16_t v)
        return sintab[v];
 }
 
+void draw_status_icons(void)
+{
+       static uint8_t ci = 0;
+       
+       if (OswaldPowerState.source) {
+               oswald_draw_bitmap(81, 0, charger_icon_width, charger_icon_height, charger_icon_bits);
+
+               if (OswaldPowerState.charge_state != POWER_CHARGER_DONE) {
+                       if (ci==0) oswald_draw_bitmap(81, 0, battery0_icon_width, battery0_icon_height, battery0_icon_bits);
+                       else if (ci==1) oswald_draw_bitmap(81, 0, battery25_icon_width, battery25_icon_height, battery25_icon_bits);
+                       else if (ci==2) oswald_draw_bitmap(81, 0, battery50_icon_width, battery50_icon_height, battery50_icon_bits);
+                       else if (ci==3) oswald_draw_bitmap(81, 0, battery75_icon_width, battery75_icon_height, battery75_icon_bits);
+                       else if (ci==4) oswald_draw_bitmap(81, 0, battery100_icon_width, battery100_icon_height, battery100_icon_bits);
+                       ci++;
+                       ci %= 5;
+               } else {
+                       oswald_draw_bitmap(81, 0, battery100_icon_width, battery100_icon_height, battery100_icon_bits);
+               }
+       } else {
+               if (OswaldPowerState.percent > 75)
+                       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_offset(81, 0, 0,0, battery75_icon_width, battery75_icon_height, battery75_icon_bits);
+               else if (OswaldPowerState.percent > 25)
+                       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_offset(81, 0, 0,0, battery25_icon_width, battery25_icon_height, battery25_icon_bits);
+               else
+                       oswald_draw_bitmap_offset(81, 0, 0,0, battery0_icon_width, battery0_icon_height, battery0_icon_bits);
+       }
+
+       if (hal_bluetooth_get_state() == BLUETOOTH_ON)
+               oswald_draw_bitmap(81, 0, bluetooth_icon_width, bluetooth_icon_height, bluetooth_icon_bits);
+       else if (hal_bluetooth_get_state() == BLUETOOTH_CONNECTED)
+               oswald_draw_bitmap(81, 0, bluetooth_con_icon_width, bluetooth_con_icon_height, bluetooth_con_icon_bits);
+}
+
 void DrawLcdAnaClock(boolean show_seconds)
 {
        int16_t i, x, y, x2, y2;
@@ -85,44 +161,50 @@ 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))
        for (i=0; i<12; i++) {
-               tmp = 48 + ((43 * f_cos((360 / 12) * i)) / 100);
-               x =  tmp;
-               tmp = 48 + ((43 * f_sin((360 / 12) * i)) / 100);
-               y =  tmp;
-               tmp = 48 + ((48 * f_cos((360 / 12) * i)) / 100);
-               x2 =  tmp;
-               tmp = 48 + ((48 * f_sin((360 / 12) * i)) / 100);
-               y2 =  tmp;
-               DrawLcdLineBresenhamWW(x, y, x2, y2, 2);
+               x = 47 + ((43 * f_cos((360 / 12) * i)) / 100);
+               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);
+               oswald_draw_line_ww(x, y, x2, y2, 2);
+               // g_printerr("br %d,%d %d,%d\n", x,y,x2,y2);
        };
 
        // Hour
-       tmp = 48 + (30 * f_cos(((360 / 12) * hour) + ((OswaldClk.minute * 360) /12 / 60)) / 100);
+       tmp = 47 + (30 * f_cos(((360 / 12) * hour) + ((OswaldClk.minute * 360) /12 / 60)) / 100);
        x =  tmp;
-       tmp = 48 + (30 * f_sin(((360 / 12) * hour) + ((OswaldClk.minute * 360) /12 / 60)) / 100);
+       tmp = 47 + (30 * f_sin(((360 / 12) * hour) + ((OswaldClk.minute * 360) /12 / 60)) / 100);
        y =  tmp;
-       DrawLcdLineBresenhamWW(48, 48, x, y, 2);
+       oswald_draw_line_ww(47, 47, x, y, 2);
+
        // Minute
-       tmp = 48 + ((40 * f_cos((360 / 60) * minute)) / 100);
+       tmp = 47 + ((40 * f_cos((360 / 60) * minute)) / 100);
        x =  tmp;
-       tmp = 48 + ((40 * f_sin((360 / 60) * minute)) / 100);
+       tmp = 47 + ((40 * f_sin((360 / 60) * minute)) / 100);
        y =  tmp;
-       DrawLcdLineBresenhamWW(48, 48, x, y, 2);
+       oswald_draw_line_ww(47, 47, x, y, 2);
+
        if (show_seconds) {
                // Seconds
-               tmp = 48 + ((40 * f_cos((360 / 60) * seconds)) / 100);
+               tmp = 47 + ((40 * f_cos((360 / 60) * seconds)) / 100);
                x =  tmp;
-               tmp = 48 + ((40 * f_sin((360 / 60) * seconds)) / 100);
+               tmp = 47 + ((40 * f_sin((360 / 60) * seconds)) / 100);
                y =  tmp;
-               DrawLcdLineBresenham(48, 48, x, y);
+               oswald_draw_line(47, 47, x, y);
        };
 
+       draw_status_icons();
+
        hal_lcd_update_display();
 }
 
@@ -131,7 +213,9 @@ void DrawLcdDigitalClock(boolean show_seconds)
        int gRow = 3;
        int gColumn = 3;
        char tstr[16];
+       int i;
 
+#if 0
        SetFont(MetaWatchTime);
 
        hal_lcd_clear_display();
@@ -175,6 +259,21 @@ void DrawLcdDigitalClock(boolean show_seconds)
                snprintf(tstr, 16, "%d/%d %d", OswaldClk.month, OswaldClk.day, OswaldClk.year);
        WriteLcdString(3, 25, tstr);
 
+       draw_status_icons();
+
+       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);
        WriteLcdString(2, 64, OswaldPowerState.source ? "ext" : "bat");
@@ -198,6 +297,35 @@ 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<strlen(MainMessage); i++) {
+               gRow += oswald_write_character(gRow, gColumn, FONT_6x8, MainMessage[i]);
+               if (gRow > 90) {
+                       gRow = 0;
+                       gColumn += 9;
+               }
+               if (gColumn > 95)
+                       i = 255;
+       }
+
+       draw_status_icons();
+#endif
        hal_lcd_update_display();
 }