From 5668a2fcb129077040e1856c5a3d1595c7ef06e7 Mon Sep 17 00:00:00 2001 From: Nils Faerber Date: Sun, 13 Nov 2011 15:36:07 +0100 Subject: [PATCH 1/1] Add analog clockface display, command dana --- mw_main.c | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/mw_main.c b/mw_main.c index a799dd8..eb98255 100644 --- a/mw_main.c +++ b/mw_main.c @@ -14,6 +14,7 @@ #include #include #include +#include #include @@ -425,6 +426,66 @@ void test_application(mwdevice_t *mwdevice) mw_free_pbuffer(mwbuf); } +void draw_app_ana_clock(mwdevice_t *mwdevice, int hour, int minute, unsigned char day) +{ + mw_buffer *mwbuf; + unsigned char *bbuf; + char daystr[5]; + int len; + unsigned int i, x, y, x2, y2; + double tmp, mf; + + 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); + mw_buf_clear(mwbuf, MW_BLACK); + + hour -= 3; + mf = (1. / 59.) * (double)minute; + minute -= 15; + + // plot(R*cos(360° * i/N), R*sin(360° * i/N)) + for (i=0; i<12; i++) { + tmp = 48. + (43. * cos(((2. * M_PI) / 12.) * (double)i)); + x = tmp; + tmp = 48 + (43. * sin(((2. * M_PI) / 12.) * (double)i)); + y = tmp; + tmp = 48. + (48. * cos(((2. * M_PI) / 12.) * (double)i)); + x2 = tmp; + tmp = 48 + (48. * sin(((2. * M_PI) / 12.) * (double)i)); + y2 = tmp; + mw_buf_draw_line_bresenham(mwbuf, x, y, x2, y2, MW_WHITE); + }; + // Hour + g_print("hour = %d -> %f (%f)\n", hour, (double)hour + mf, mf); + tmp = 48. + (30. * cos(((2. * M_PI) / 12.) * ((double)hour + mf))); + x = tmp; + tmp = 48 + (30. * sin(((2. * M_PI) / 12.) * ((double)hour + mf))); + y = tmp; + mw_buf_draw_line_bresenham(mwbuf, 48, 48, x, y, MW_WHITE); + // Minute + tmp = 48. + (40. * cos(((2. * M_PI) / 60.) * (double)minute)); + x = tmp; + tmp = 48 + (40. * sin(((2. * M_PI) / 60.) * (double)minute)); + y = tmp; + mw_buf_draw_line_bresenham(mwbuf, 48, 48, x, y, MW_WHITE); + + snprintf(daystr, 5, "%d", day); + mw_buf_print(mwbuf, 74, 45, daystr, 0, MW_WHITE, MW_BLACK); + + bbuf = mw_make_mw_buffer(mwbuf, &len); + mw_send_bitmap(mwdevice, MW_SCREEN_MODE_APPLICATION, 96, 96, 0, bbuf, len); + mw_update_display(mwdevice, MW_SCREEN_MODE_APPLICATION, 1); + mw_free_pbuffer(mwbuf); +} + void test_oled(mwdevice_t *mwdevice, unsigned char oled) { mw_buffer *mwbuf; @@ -670,6 +731,14 @@ void process_cmd(char *cmdline, int clinep, mwdata_t *mwdata) mdata[0] = 0; mw_nval_operation(&mwdata->mwdevice, MW_NVAL_OPERATION_READ, MW_NVAL_DATE_FORMAT, 1, mdata); } + if (strncmp(cmd, "dana", 4) == 0) { + if (pcnt < 3) + g_print("two few params, hour minute\n"); + else { + draw_app_ana_clock(&mwdata->mwdevice, atoi(params[0]), atoi(params[1]), atoi(params[2])); + } + } + params_free(params); } -- 2.39.2