Add analog clockface display, command dana <hour> <minute> <day#>
This commit is contained in:
parent
79e351fe38
commit
5668a2fcb1
1 changed files with 69 additions and 0 deletions
69
mw_main.c
69
mw_main.c
|
@ -14,6 +14,7 @@
|
|||
#include <time.h>
|
||||
#include <termios.h>
|
||||
#include <ctype.h>
|
||||
#include <math.h>
|
||||
|
||||
#include <errno.h>
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue