#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,
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;
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();
}
int gRow = 3;
int gColumn = 3;
char tstr[16];
+ int i;
+#if 0
SetFont(MetaWatchTime);
hal_lcd_clear_display();
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");
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();
}