]> git.kernelconcepts.de Git - oswald.git/commitdiff
Add version information and info screen, some more work on the accel screen
authorNils Faerber <nils.faerber@kernelconcepts.de>
Sun, 5 May 2013 01:54:24 +0000 (03:54 +0200)
committerNils Faerber <nils.faerber@kernelconcepts.de>
Sun, 5 May 2013 01:54:24 +0000 (03:54 +0200)
14 files changed:
metawatch/Makefile
metawatch/bluetooth_init_cc2560_2.44.c
metawatch/bluetooth_init_cc256x.h
metawatch/mw_main.h
metawatch/oswald_hal.c
ui/Makefile.am
ui/oswald-ui.c
ui/oswald.h
ui/oswald_graphics.c
ui/oswald_graphics.h
ui/oswald_hal.h
ui/oswald_main.c
ui/oswald_screens.c
ui/oswald_screens.h

index e2302113dfa9e578aa4be96c856eca2ae1b341bc..70a7775fae64e59181cf3400378443366d431933 100644 (file)
@@ -17,10 +17,10 @@ MEMMODEL   = -mmemory-model=huge -fdata-sections -ffunction-sections # -mdata-re
 # MEMMODEL   = -mmemory-model=medium -misr20
 #MEMMODEL   = -mmemory-model=medium
 
-#APPCONFIG = -DDIGITAL -DMW_DEVBOARD_V2
+APPCONFIG = -DDIGITAL -DMW_DEVBOARD_V2
 #APPCONFIG = -DDIGITAL -DMW_DEVBOARD_V2 -DWITH_BTSTACK
 #APPCONFIG = -DDIGITAL -DMW_DEVBOARD_V2 -DCC256x_TRANSP
-APPCONFIG = -DDIGITAL -DMW_DIGITAL_V2
+#APPCONFIG = -DDIGITAL -DMW_DIGITAL_V2
 
 # List all the source files here
 # eg if you have a source file foo.c then list it here
@@ -48,9 +48,12 @@ SOURCES = mw_main.c mw_uart.c mw_lcd.c mw_adc.c mw_bt.c \
 #INCLUDES = $(BT_SMALLTOOTH_INV)
 INCLUDES = -I../ui/
 
+# BUILDNO = \"\#$(shell cat .buildno)-$(shell date +%y%m%d)\"
+BUILDNO = \"$(shell date +%y%m%d)-\#$(shell cat .buildno)\"
+
 # Add or subtract whatever MSPGCC flags you want. There are plenty more
 #######################################################################################
-CFLAGS   = -mmcu=$(MCU) $(MEMMODEL) -g -Os -Wall -Wunused $(INCLUDES) $(APPCONFIG)
+CFLAGS   = -mmcu=$(MCU) $(MEMMODEL) -g -Os -Wall -Wunused $(INCLUDES) $(APPCONFIG) -DBUILDNO=$(BUILDNO)
 ASFLAGS  = -mmcu=$(MCU) $(MEMMODEL) -x assembler-with-cpp -Wa,-gstabs
 LDFLAGS  = -mmcu=$(MCU) $(MEMMODEL) -Wl,-gc-sections -Wl,-Map=$(TARGET).map
 ########################################################################################
@@ -76,7 +79,7 @@ DEPEND = $(SOURCES:.c=.d)
 # all the object files
 OBJECTS = $(SOURCES:.c=.o)
 
-all: $(TARGET).elf $(TARGET).hex $(TARGET).txt 
+all: .buildno $(TARGET).elf $(TARGET).hex $(TARGET).txt
 
 prog: $(TARGET).hex
        mspdebug tilib -d /dev/ttyACM3 -v 2500 "prog $(TARGET).hex"
@@ -126,3 +129,7 @@ clean:
        -$(RM) $(TARGET).*
        -$(RM) $(SOURCES:.c=.lst)
        -$(RM) $(DEPEND)
+
+.buildno: $(OBJECTS)
+       @if ! test -f .buildno; then echo 0 > .buildno; fi
+       @echo $$(($$(cat .buildno) + 1)) > .buildno
index ae04c6a672b7601720d83417bf19a9aa455eb29d..858309cf17355fd441b54a02f1caf540afba3872 100644 (file)
@@ -1,6 +1,8 @@
 // init script created from bluetooth_init_cc2560_2.44.bts
 #include <stdint.h>
 
+const char *cc256x_version = "CC2560 v2.44";
+
 #if defined(__GNUC__) && (__MSP430X__ > 0)
 __attribute__((__far__))
 #endif
index 6e7025720115fc6d4acb18ca0186c1f5fab9b6e1..fcc092c03e6a27fd91fcef8f79606126b837357d 100644 (file)
@@ -6,6 +6,6 @@
 
 extern const uint8_t cc256x_init_script[];
 extern const uint8_t cc256x_init_script_2[];
-
 extern const uint32_t cc256x_init_script_size;
+extern const char *cc256x_version;
 #endif
index 902c4693347ca77fb972cf0ccdd780f9b760c8ba..23dcf5efa49f11341199ff2853cf28b039815968 100644 (file)
@@ -1,6 +1,8 @@
 #ifndef _GCCFWTEST_LCD_H
 #define _GCCFWTEST_LCD_H
 
+#define MW_MAIN_VERSION "MW v0.4"
+
 #if defined MW_DEVBOARD_V2
 #include "hal_devboard_v2_defs.h"
 #elif defined MW_DIGITAL_V2
index d731b51fa75f24f38ab6717ddcc297f1eecfbc1f..449355dabddc3b7129edecefb6f38d82b0b71f00 100644 (file)
 #include "mw_bt.h"
 #include "bt_hci.h"
 #include "bt_l2cap.h"
+#include "bluetooth_init_cc256x.h"
 
 #include "oswald.h"
 #include "oswald_hal.h"
 
 #include "calendar.h"
 
+
+const char *hal_get_version_string(void)
+{
+       return MW_MAIN_VERSION;
+}
+
+const char *hal_get_buildno_string(void)
+{
+       return BUILDNO;
+}
+
+const char *hal_get_radio_version_string(void)
+{
+       return cc256x_version;
+}
+
 void hal_lcd_set_pixel(uint8_t x, uint8_t y, uint8_t color)
 {
        x %= 96;
index d03d914df34c395954f2b5ba23b92db49abe9bc8..ac6e296d0476a8a0a54eed5c5f3469f086ad47c1 100644 (file)
@@ -1,15 +1,23 @@
 ACLOCAL_AMFLAGS = -I m4
 
-bin_PROGRAMS = oswald-gui
+bin_PROGRAMS = .buildno oswald-gui
 
 oswald_gui_SOURCES = oswald-ui.c oswald_main.c \
        oswald_watch_faces.c oswald_strings.c oswald_screens.c \
        embedvm.c oswald_graphics.c calendar.c oswald_fonts.c
 
-oswald_gui_CFLAGS = -g $(GTK_CFLAGS)
+# BUILDNO = \"$(shell cat .buildno)\"
+BUILDNO = \"$(shell date +%y%m%d)-\#$(shell cat .buildno)\"
+
+oswald_gui_CFLAGS = -DBUILDNO=$(BUILDNO) -g $(GTK_CFLAGS)
+
 oswald_gui_LDADD = $(GTK_LIBS)
 
 EXTRA_DIST = config.rpath m4/ChangeLog  \
        AUTHORS                 \
        COPYING                 \
        README.txt
+
+.buildno: $(oswald_gui_OBJECTS)
+       @if ! test -f .buildno; then echo 0 > .buildno; fi
+       @echo $$(($$(cat .buildno) + 1)) > .buildno
index 285d844d4434a5d7d9c3e0444c98f986fe0e6b60..c482c7834569b230839ee99ec181f062625ebc37 100644 (file)
@@ -94,6 +94,22 @@ void hal_bluetooth_send_data(const void *mdat, uint16_t mlen)
        g_printerr("write comm %d\n", mlen);
 }
 
+const char *hal_get_version_string(void)
+{
+       return "GTK v0.3";
+}
+
+const char *hal_get_buildno_string(void)
+{
+       return BUILDNO;
+}
+
+const char *hal_get_radio_version_string(void)
+{
+       return "BlueZ";
+}
+
+
 static gint
 configure_event (GtkWidget *widget, GdkEventConfigure *event, gpointer user_data)
 {
@@ -311,19 +327,19 @@ static void create_mainwin(oswald_ui *ui)
 
        l = gtk_label_new("X:");
        gtk_box_pack_start (GTK_BOX(hb), l, FALSE, FALSE, 5);
-       sc = gtk_hscale_new_with_range (0, 255, 1);
+       sc = gtk_hscale_new_with_range (-128, 127, 1);
        gtk_box_pack_start (GTK_BOX(hb), sc, TRUE, TRUE, 5);
        g_signal_connect(G_OBJECT(sc), "value-changed", G_CALLBACK(accelX_value_changed), ui);
 
        l = gtk_label_new("Y:");
        gtk_box_pack_start (GTK_BOX(hb), l, FALSE, FALSE, 5);
-       sc = gtk_hscale_new_with_range (0, 255, 1);
+       sc = gtk_hscale_new_with_range (-128, 127, 1);
        gtk_box_pack_start (GTK_BOX(hb), sc, TRUE, TRUE, 5);
        g_signal_connect(G_OBJECT(sc), "value-changed", G_CALLBACK(accelY_value_changed), ui);
 
        l = gtk_label_new("Z:");
        gtk_box_pack_start (GTK_BOX(hb), l, FALSE, FALSE, 5);
-       sc = gtk_hscale_new_with_range (0, 255, 1);
+       sc = gtk_hscale_new_with_range (-128, 127, 1);
        gtk_box_pack_start (GTK_BOX(hb), sc, TRUE, TRUE, 5);
        g_signal_connect(G_OBJECT(sc), "value-changed", G_CALLBACK(accelZ_value_changed), ui);
 
index b03a6b33331d7717679ba7e65bb7be65ad4c47c3..8d16b2e3b01b8f9f6f7c6d67264dd73c564f6324 100644 (file)
@@ -4,6 +4,8 @@
 #include <string.h>
 #include <stdint.h>
 
+#define OSWALD_VERSION "v0.3"
+
 //#define DEBUG 1
 #ifdef DEBUG
 #define dbg_out( args... ) fprintf(stderr, args)
@@ -55,9 +57,10 @@ typedef enum {
        STOP_WATCH_SCREEN,
        BLUETOOTH_SCREEN,
        ACCEL_DISPLAY_SCREEN,
-       MENU_TEST_SCREEN,
-//     APPLICATION_SCREEN,
+       INFO_SCREEN,
        LAST_SCREEN,            // a marker for the last (not valid) screen)
+       MENU_TEST_SCREEN,
+       APPLICATION_SCREEN,
        DATETIME_SETTING_SCREEN,
        ALARM_SCREEN,
        SCREENS_END,
@@ -103,9 +106,9 @@ typedef struct {
 } watch_state;
 
 typedef struct {
-       uint8_t x;
-       uint8_t y;
-       uint8_t z;
+       int8_t  x;
+       int8_t  y;
+       int8_t  z;
 } accel_data_t;
 
 #define POWER_SOURCE_BATTERY   0
index 238d1eabf53ccbd3e8dbfce0cb27da30d8ba21ff..e64476d61ed50f26a8c1cc4e886a3b7c0f040591 100644 (file)
@@ -6,6 +6,11 @@
 #include "oswald_graphics.h"
 
 
+void oswald_draw_pixel(const unsigned int xstart, const unsigned int ystart)
+{
+       hal_lcd_set_pixel(xstart, ystart, TRUE);
+}
+
 void oswald_draw_bitmap_opts(const unsigned int xstart, const unsigned int ystart, const unsigned int xoff, const unsigned int yoff, const unsigned int width, const unsigned int height, const unsigned int bmp_width, const unsigned int bmp_height, const void *bmp)
 {
        unsigned int x, y;
index 91b209f5799faabe516ec5ad14693084051288c8..cea57cb5adc666a3b6c5c1bcdb2849eca938b0e3 100644 (file)
@@ -9,6 +9,8 @@
 // #include "Fonts.h"
 
 
+void oswald_draw_pixel(const unsigned int xstart, const unsigned int ystart);
+
 void oswald_draw_bitmap(const unsigned int xstart, const unsigned int ystart, const unsigned int width, const unsigned int height, const void *bmp);
 
 void oswald_draw_line(const uint8_t xstart, const uint8_t ystart, const uint8_t xend, const uint8_t yend);
index f0ab7a4b2d561bbde26da80c0db735917052a89a..ad877d048f9e39d6f40f5ecb62d71b251cb042c3 100644 (file)
@@ -5,6 +5,10 @@
  * these functions must be implemented for a concrete hardware
  */
 
+const char *hal_get_version_string(void);
+const char *hal_get_buildno_string(void);
+const char *hal_get_radio_version_string(void);
+
 void hal_lcd_set_pixel(uint8_t x, uint8_t y, uint8_t color);
 void hal_lcd_clear_display(void);
 void hal_lcd_update_display(void);
index 9381636055cabef9ec5c987a5b8c700f92dfc910..f26603b9e4a085c9947d659cfef4a5f2d21be5e8 100644 (file)
@@ -211,6 +211,9 @@ void oswald_init(void)
        OswaldScreens[ALARM_SCREEN].event_mask = EVENT_USER_BUTTONS | EVENT_HALF_SEC_TIMER;
        OswaldScreens[ALARM_SCREEN].event_func = alarm_handle_events;
 
+       OswaldScreens[INFO_SCREEN].event_mask = 0x00; // this one does not consume any events
+       OswaldScreens[INFO_SCREEN].event_func = info_screen_handle_events;
+
        OswaldState.screen_id = IDLE_SCREEN;
        OswaldState.screen = &OswaldScreens[OswaldState.screen_id];
 
index 1da48271650d94fa394141ae772dce811a75b2d0..9952365145772194891e3f1d4145d5b8f88e8924 100644 (file)
@@ -48,7 +48,21 @@ __attribute__((__far__))
 #endif
 #include "bitmaps/Bluetooth_icon.xbm"
 
+#if defined(__GNUC__) && (__MSP430X__ > 0)
+__attribute__((__far__))
+#endif
+#include "bitmaps/info_icon.xbm"
+
+#if defined(__GNUC__) && (__MSP430X__ > 0)
+__attribute__((__far__))
+#endif
+#include "bitmaps/acc_icon.xbm"
+
+
 
+/*
+ * Common event handler part of the watch faces
+ */
 typedef struct {
        void (*screendraw_func)(boolean show_seconds);
        boolean show_seconds;
@@ -117,6 +131,9 @@ event_ret_t idle_handle_events(uint16_t event, void *data)
 }
 
 
+/*
+ * Accelerometer and sensor display screen
+ */
 typedef struct {
        accel_data_t accdata;
 } accelscreen_data_t;
@@ -128,15 +145,24 @@ void draw_accel_screen(accel_data_t *accel_data)
 {
        hal_lcd_clear_display();
 
-       oswald_write_string(0, 2, FONT_6x9, "X:");
-       oswald_write_number(20, 2, FONT_6x9, accel_data->x);
-       oswald_write_string(0, 16, FONT_6x9, "Y:");
-       oswald_write_number(20, 16, FONT_6x9, accel_data->y);
-       oswald_write_string(0, 32, FONT_6x9, "Z:");
-       oswald_write_number(20, 32, FONT_6x9, accel_data->z);
+       oswald_draw_bitmap(36, 0, acc_icon_width, acc_icon_height, acc_icon_bits);
+
+       oswald_write_string(1, 40, FONT_6x9, "X:");
+       oswald_write_number(15, 40, FONT_6x9, accel_data->x);
+       oswald_write_string(1, 52, FONT_6x9, "Y:");
+       oswald_write_number(15, 52, FONT_6x9, accel_data->y);
+       oswald_write_string(1, 64, FONT_6x9, "Z:");
+       oswald_write_number(15, 64, FONT_6x9, accel_data->z);
+
+       oswald_write_string(1, 85, FONT_6x9, "Light:");
+       oswald_write_number(50, 85, FONT_6x9, 0);
 
-       oswald_write_string(0, 54, FONT_6x9, "Light:");
-       oswald_write_number(50, 54, FONT_6x9, accel_data->z);
+       oswald_draw_line(40, 30, 92, 30);
+       oswald_draw_line(92, 30, 92, 82);
+       oswald_draw_line(40, 82, 92, 82);
+       oswald_draw_line(40, 82, 40, 30);
+
+       oswald_draw_pixel(41+25+((accel_data->x * 50) / (254)), 31+25+((accel_data->y * 50) / (254)));
 
        hal_lcd_update_display();
 }
@@ -168,6 +194,9 @@ event_ret_t accel_handle_events(uint16_t event, void *data)
 }
 
 
+/*
+ * Date / time setup screen
+ */
 typedef struct {
        uint8_t pos;
        boolean set_mode;
@@ -366,9 +395,8 @@ event_ret_t datetime_setup_events(uint16_t event, void *data)
 
 
 /*
- * Alarm setup
+ * Alarm setup screen
  */
-
 typedef struct {
        uint8_t pos;
        boolean set_mode;
@@ -550,7 +578,6 @@ event_ret_t alarm_setup_events(uint16_t event, void *data)
 /*
  * Test menu
  */
-
 typedef struct {
        uint8_t menu_pos;
 } test_menu_t;
@@ -625,7 +652,6 @@ event_ret_t test_menu_handle_events(uint16_t event, void *data)
 /*
  * Stop Watch
  */
-
 typedef struct {
        uint8_t hr;
        uint8_t min;
@@ -786,7 +812,7 @@ event_ret_t stop_watch_handle_events(uint16_t event, void *data)
 
 
 /*
- * when alarm is fired
+ * Alarm screen, shown when alarm is fired
  */
 void draw_alarm_screen(void)
 {
@@ -832,7 +858,7 @@ event_ret_t alarm_handle_events(uint16_t event, void *data)
 
 
 /*
- * Bluetooth screen
+ * Bluetooth setup screen
  */
 typedef struct {
        uint8_t pos;
@@ -1000,3 +1026,42 @@ event_ret_t bluetooth_screen_events(uint16_t event, void *data)
        return EVENT_RET_HANDLED;
 }
 
+
+/*
+ * Info Screen
+ */
+void draw_info_screen(accel_data_t *accel_data)
+{
+       hal_lcd_clear_display();
+
+       oswald_draw_bitmap(36, 0, info_icon_width, info_icon_height, info_icon_bits);
+
+       oswald_write_string(2, 29, FONT_DROID8x12, "Oswald");
+       oswald_write_string(35, 29, FONT_DROID8x12, OSWALD_VERSION);
+       oswald_write_string(2, 41, FONT_DROID8x12, "HAL");
+       oswald_write_string(35, 41, FONT_DROID8x12, (char *)hal_get_version_string());
+       oswald_write_string(2, 53, FONT_DROID8x12, "Build");
+       oswald_write_string(35, 53, FONT_DROID8x12, (char *)hal_get_buildno_string());
+       oswald_write_string(2, 65, FONT_DROID8x12, "Radio");
+       oswald_write_string(35, 65, FONT_DROID8x12, (char *)hal_get_radio_version_string());
+
+       hal_lcd_update_display();
+}
+
+event_ret_t info_screen_handle_events(uint16_t event, void *data)
+{
+       switch (event) {
+               case EVENT_SCREEN_VISIBLE:
+                       draw_info_screen(&accel_screen.accdata);
+                       return EVENT_RET_HANDLED;
+                       break;
+               case EVENT_USER_BUTTONS:
+                       dbg_out("button event %d\n", *(int *)data);
+                       break;
+               default:
+                       return EVENT_RET_UNHANDLED;
+                       break;
+       };
+       return EVENT_RET_UNHANDLED;
+}
+
index b8a38badfde4ba112231d5abb00476d465d12d4a..47a71e36ac38da15f3b365f3bd6770abbb3b72f4 100644 (file)
@@ -18,4 +18,6 @@ event_ret_t alarm_handle_events(uint16_t event, void *data);
 
 event_ret_t bluetooth_screen_events(uint16_t event, void *data);
 
+event_ret_t info_screen_handle_events(uint16_t event, void *data);
+
 #endif