+#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,
+ 34, 36, 37, 39, 41, 42, 44, 45, 47, 48,
+ 50, 52, 53, 54, 56, 57, 59, 60, 62, 63,
+ 64, 66, 67, 68, 69, 71, 72, 73, 74, 75,
+ 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
+ 87, 87, 88, 89, 90, 91, 91, 92, 93, 93,
+ 94, 95, 95, 96, 96, 97, 97, 97, 98, 98,
+ 98, 99, 99, 99, 99, 100, 100, 100, 100, 100,
+ 100, 100, 100, 100, 100, 100, 99, 99, 99, 99,
+ 98, 98, 98, 97, 97, 97, 96, 96, 95, 95,
+ 94, 93, 93, 92, 91, 91, 90, 89, 88, 87,
+ 87, 86, 85, 84, 83, 82, 81, 80, 79, 78,
+ 77, 75, 74, 73, 72, 71, 69, 68, 67, 66,
+ 64, 63, 62, 60, 59, 57, 56, 54, 53, 52,
+ 50, 48, 47, 45, 44, 42, 41, 39, 37, 36,
+ 34, 33, 31, 29, 28, 26, 24, 22, 21, 19,
+ 17, 16, 14, 12, 10, 9, 7, 5, 3, 2,
+ 0, -2, -3, -5, -7, -9, -10, -12, -14, -16,
+ -17, -19, -21, -22, -24, -26, -28, -29, -31, -33,
+ -34, -36, -37, -39, -41, -42, -44, -45, -47, -48,
+ -50, -52, -53, -54, -56, -57, -59, -60, -62, -63,
+ -64, -66, -67, -68, -69, -71, -72, -73, -74, -75,
+ -77, -78, -79, -80, -81, -82, -83, -84, -85, -86,
+ -87, -87, -88, -89, -90, -91, -91, -92, -93, -93,
+ -94, -95, -95, -96, -96, -97, -97, -97, -98, -98,
+ -98, -99, -99, -99, -99,-100,-100,-100,-100,-100,
+ -100,-100,-100,-100,-100,-100, -99, -99, -99, -99,
+ -98, -98, -98, -97, -97, -97, -96, -96, -95, -95,
+ -94, -93, -93, -92, -91, -91, -90, -89, -88, -87,
+ -87, -86, -85, -84, -83, -82, -81, -80, -79, -78,
+ -77, -75, -74, -73, -72, -71, -69, -68, -67, -66,
+ -64, -63, -62, -60, -59, -57, -56, -54, -53, -52,
+ -50, -48, -47, -45, -44, -42, -41, -39, -37, -36,
+ -34, -33, -31, -29, -28, -26, -24, -22, -21, -19,
+ -17, -16, -14, -12, -10, -9, -7, -5, -3, -2
+};
+
+int16_t f_sin(int16_t v)
+{
+ v %= 360;
+ return sintab[v];
+}
+
+int16_t f_cos(int16_t v)
+{
+ v += 90;
+ v %= 360;
+ 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(81, 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);
+ else if (OswaldPowerState.percent > 25)
+ oswald_draw_bitmap(81, 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);
+ else
+ oswald_draw_bitmap(81, 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);
+}
+