X-Git-Url: https://git.karo-electronics.de/?a=blobdiff_plain;f=mw_main.c;h=b9a547c305ce793f1ff2dcb8c0b2eadd11dda77d;hb=c0807b3785b36e8b31b42964cd8fe02d9c43a435;hp=406e09c832017124a59b624df32dba0d0f8a8727;hpb=887641a905eb3f68aa8eac5410640d7bd331f029;p=metawatch.git diff --git a/mw_main.c b/mw_main.c index 406e09c..b9a547c 100644 --- a/mw_main.c +++ b/mw_main.c @@ -25,6 +25,11 @@ #include #include +#include + +#include +#include + /* #include #include @@ -44,6 +49,8 @@ typedef struct { int con_fd; /* console input fd */ char cmdline[128]; int cmdline_pos; + SoupSession *msoup; + SoupMessage *smsg; } mwdata_t; void bitmap_test(mwdevice_t *mwdevice) @@ -250,8 +257,8 @@ int days(int m1, int y1) void draw_idle_calendar(mwdevice_t *mwdevice) { long unsigned int t; - unsigned int y,y1,m,m1,d,da,i,j,k; - const char a[12][20]={"January","February","March","April","May","June","July","August","September","October","November","December"}; + unsigned int y,y1,m,m1,d,i,j,k; + /* const char a[12][20]={"January","February","March","April","May","June","July","August","September","October","November","December"}; */ const char dnames[7][3] = { "Mo", "Di", "Mi", "Do", "Fr", "Sa", "So" }; mw_buffer *mwbuf; unsigned char *bbuf; @@ -303,7 +310,7 @@ void draw_idle_calendar(mwdevice_t *mwdevice) px=0; py=3; for (i=0; i<7; i++) { - snprintf(pnum, 3, dnames[i]); + snprintf(pnum, 3, "%s", dnames[i]); mw_buf_print(mwbuf, px, py, pnum, 0, MW_WHITE, MW_BLACK); px += 14; }; @@ -389,7 +396,13 @@ void test_application(mwdevice_t *mwdevice) unsigned char *bbuf; int len; + mw_enable_button(mwdevice, MW_SCREEN_MODE_IDLE, MW_BUTTON_A, MW_BUTTON_IMMEDIATE, MW_BUTTON_EVENT_MESSAGE, MW_BUTTON_A); + mw_enable_button(mwdevice, MW_SCREEN_MODE_APPLICATION, MW_BUTTON_A, MW_BUTTON_IMMEDIATE, MW_BUTTON_EVENT_MESSAGE, MW_BUTTON_A); + mw_enable_button(mwdevice, MW_SCREEN_MODE_APPLICATION, MW_BUTTON_B, MW_BUTTON_IMMEDIATE, MW_BUTTON_EVENT_MESSAGE, MW_BUTTON_B); + mw_enable_button(mwdevice, MW_SCREEN_MODE_APPLICATION, MW_BUTTON_C, MW_BUTTON_IMMEDIATE, MW_BUTTON_EVENT_MESSAGE, MW_BUTTON_C); + mw_enable_button(mwdevice, MW_SCREEN_MODE_APPLICATION, MW_BUTTON_E, MW_BUTTON_IMMEDIATE, MW_BUTTON_EVENT_MESSAGE, MW_BUTTON_E); + mw_enable_button(mwdevice, MW_SCREEN_MODE_APPLICATION, MW_BUTTON_F, MW_BUTTON_IMMEDIATE, MW_BUTTON_EVENT_MESSAGE, MW_BUTTON_F); mw_configure_watch_mode(mwdevice, MW_SCREEN_MODE_APPLICATION, 0, 30, 0); mwbuf = mw_alloc_pbuffer(96, 96, 1); @@ -416,7 +429,7 @@ void test_oled(mwdevice_t *mwdevice, unsigned char oled) { mw_buffer *mwbuf; unsigned char *bbuf; - int len, i; + int len; mwbuf = mw_alloc_pbuffer(80, 16, 1); mw_buf_clear(mwbuf, MW_BLACK); @@ -430,6 +443,32 @@ void test_oled(mwdevice_t *mwdevice, unsigned char oled) mw_free_pbuffer(mwbuf); } +static void +weather_soup_callback (SoupSession *session, SoupMessage *msg, gpointer user_data) +{ + xmlDocPtr xdoc; + + /* Handle the response here */ + if (msg->response_body->data != NULL && msg->response_body->length != 0) { + fprintf(stderr, "%s\n", msg->response_body->data); + xdoc = xmlReadMemory(msg->response_body->data, msg->response_body->length, "noname.xml", NULL, 0); + if (xdoc == NULL) { + fprintf(stderr, "Failed to parse document\n"); + return; + } + xmlFreeDoc(xdoc); + xmlCleanupParser(); + } +} + +void do_weather(mwdata_t *mwdata) +{ + mwdata->msoup = soup_session_async_new(); + mwdata->smsg = soup_message_new ("GET", "http://www.google.com/ig/api?weather=siegen&hl=de"); + soup_session_send_message (mwdata->msoup, mwdata->smsg); + soup_session_queue_message (mwdata->msoup, mwdata->smsg, weather_soup_callback, mwdata); +} + void print_help(void) { } @@ -444,6 +483,8 @@ void process_cmd(char *cmdline, int clinep, mwdata_t *mwdata) if (strncmp(cmdline, "quit", 4) == 0) { //close(mw_fd); //exit(0); + /* just in case we quit and show another screen */ + mw_update_display(&mwdata->mwdevice, MW_SCREEN_MODE_IDLE, 0); g_main_loop_quit (mwdata->mloop); } if (strncmp(cmdline, "help", 4) == 0) { @@ -458,8 +499,14 @@ void process_cmd(char *cmdline, int clinep, mwdata_t *mwdata) mw_send_frame(&mwdata->mwdevice, MW_ADVANCE_WATCH_HANDS, 0, mdata, 3); } if (strncmp(cmdline, "srtc", 4) == 0) { + time_t mtime; + struct tm mtm; + + mtime = time(NULL); + localtime_r(&mtime, &mtm); + fprintf(stderr, "Setting RTC from system time..."); - mw_set_rtc(&mwdata->mwdevice, MW_RTC_CLOCK_24HR, MW_RTC_DATE_DDMM); + mw_set_rtc(&mwdata->mwdevice, &mtm); fprintf(stderr, "OK\n"); } if (strncmp(cmdline, "grtc", 4) == 0) { @@ -486,6 +533,7 @@ void process_cmd(char *cmdline, int clinep, mwdata_t *mwdata) mw_configure_watch_mode(&mwdata->mwdevice, MW_SCREEN_MODE_IDLE, 0, 4, 1); mw_update_display(&mwdata->mwdevice, MW_SCREEN_MODE_IDLE, 0); } +#if 0 if (strncmp(cmdline, "rbtcfg", 6) == 0) { intopt = cmdline[7]-0x30; mdata[0] = 0; /* idle screen */ @@ -496,6 +544,7 @@ void process_cmd(char *cmdline, int clinep, mwdata_t *mwdata) mdata[4] = 0; /* callback message option */ mw_send_frame(&mwdata->mwdevice, MW_READ_BUTTON_CONFIG, 0, mdata, 5); } +#endif if (strncmp(cmdline, "svib", 4) == 0) { mw_set_vibrate_mode(&mwdata->mwdevice, 1, 300, 300, 5); } @@ -535,6 +584,25 @@ void process_cmd(char *cmdline, int clinep, mwdata_t *mwdata) if (strncmp(cmdline, "cal", 3) == 0) { draw_idle_calendar(&mwdata->mwdevice); } + if (strncmp(cmdline, "wet", 3) == 0) { + do_weather(mwdata); + } + if (strncmp(cmdline, "c24", 3) == 0) { + mdata[0] = MW_RTC_CLOCK_24HR; + mw_nval_operation(&mwdata->mwdevice, MW_NVAL_OPERATION_WRITE, MW_NVAL_TIME_FORMAT, 1, mdata); + } + if (strncmp(cmdline, "g24", 3) == 0) { + mdata[0] = 0; + mw_nval_operation(&mwdata->mwdevice, MW_NVAL_OPERATION_READ, MW_NVAL_TIME_FORMAT, 1, mdata); + } + if (strncmp(cmdline, "sdm", 3) == 0) { + mdata[0] = MW_RTC_DATE_DDMM; + mw_nval_operation(&mwdata->mwdevice, MW_NVAL_OPERATION_WRITE, MW_NVAL_DATE_FORMAT, 1, mdata); + } + if (strncmp(cmdline, "gdm", 3) == 0) { + mdata[0] = 0; + mw_nval_operation(&mwdata->mwdevice, MW_NVAL_OPERATION_READ, MW_NVAL_TIME_FORMAT, 1, mdata); + } } @@ -636,6 +704,20 @@ signal_filter (DBusConnection *connection, DBusMessage *message, void *user_data return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; } +void mw_button_event_message_cb(mwdevice_t *mwdevice, unsigned char buttons, unsigned char options, void *user_data) +{ + g_print("button event cb:0x%02x 0x%02x\n", buttons, options); + g_print("screen is %d\n", mwdevice->screen_mode); + if (mwdevice->screen_mode == MW_SCREEN_MODE_IDLE) { + if (buttons == MW_BUTTON_A) + test_application(mwdevice); + } + if (mwdevice->screen_mode == MW_SCREEN_MODE_APPLICATION) { + if (buttons == MW_BUTTON_C) + mw_update_display(mwdevice, MW_SCREEN_MODE_IDLE, 0); + } +} + int main(int argc, char **argv) { int mw_fd; @@ -718,6 +800,7 @@ int main(int argc, char **argv) mdata.cmdline_pos = 0; mw_init(&mdata.mwdevice, mw_fd); + mw_set_button_event_message_cb(&mdata.mwdevice, mw_button_event_message_cb, NULL); g_main_loop_run (mdata.mloop);