Add analog clockface display, command dana <hour> <minute> <day#>

This commit is contained in:
Nils Faerber 2011-11-13 15:36:07 +01:00
parent 79e351fe38
commit 5668a2fcb1

View file

@ -14,6 +14,7 @@
#include <time.h> #include <time.h>
#include <termios.h> #include <termios.h>
#include <ctype.h> #include <ctype.h>
#include <math.h>
#include <errno.h> #include <errno.h>
@ -425,6 +426,66 @@ void test_application(mwdevice_t *mwdevice)
mw_free_pbuffer(mwbuf); 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) void test_oled(mwdevice_t *mwdevice, unsigned char oled)
{ {
mw_buffer *mwbuf; mw_buffer *mwbuf;
@ -670,6 +731,14 @@ void process_cmd(char *cmdline, int clinep, mwdata_t *mwdata)
mdata[0] = 0; mdata[0] = 0;
mw_nval_operation(&mwdata->mwdevice, MW_NVAL_OPERATION_READ, MW_NVAL_DATE_FORMAT, 1, mdata); 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); params_free(params);
} }