X-Git-Url: https://git.kernelconcepts.de/?p=metawatch.git;a=blobdiff_plain;f=mw_utility.c;h=53c5f7ab3000e401e5d4f511d25eefe6453763f4;hp=2ddc12dde098f7e2dafe4f9b9bb2ac0f5ed2893f;hb=45df0eb30c5119f66f332d35a411f508a4f1b69a;hpb=59068bbd135c3d2ed046be5fd64850166ca04a5c diff --git a/mw_utility.c b/mw_utility.c index 2ddc12d..53c5f7a 100644 --- a/mw_utility.c +++ b/mw_utility.c @@ -21,11 +21,15 @@ #include #include -#include "mw_utility.h" #include "metawatch.h" +#include "mw_utility.h" #include "fonts.h" +/* ---------------------------------------------------------------------- + * Generic drawing functions + * ---------------------------------------------------------------------- */ + /* * The pixmap buffer has at least one byte per pixel, even for monochrome (bpp=1) * bitmaps @@ -252,3 +256,93 @@ void mw_buf_draw_line_bresenham(mw_buffer *mwbuf, unsigned int xstart, unsigned } } + +/* ---------------------------------------------------------------------- + * Complex combined functions, for user convenience + * ---------------------------------------------------------------------- */ + +/* + * send a text notification, automatically take care of device type (ana/digi) + * char *title is displayed inverse in top line + * char *text is the notification text + * vibrate is the number of 300ms vibrations, 0 for none + */ +void mw_do_notification(mwdevice_t *mwdevice, char *title, char *text, unsigned char vibrate) +{ + mw_buffer *mwbuf; + unsigned char *bbuf; + int len,i,c,r; + char sstr[32]; + + // fprintf(stderr, "do_notify devtype=%d, title='%s', text='%s', vibrate=%d\n", mwdevice->devtype, title, text, vibrate); + if (mwdevice->devtype == MW_DEVICE_TYPE_DIGITAL || mwdevice->devtype == MW_DEVICE_TYPE_DEVB_DIGI) { + mwbuf = mw_alloc_pbuffer(96, 96, 1); + mw_buf_clear(mwbuf, MW_BLACK); + + mw_buf_print(mwbuf, 0, 0, title, 0, MW_BLACK, MW_WHITE); + + i=0; + c=0; r=1; + memset(sstr,0,32); + while (i=16 || i>=strlen(text)) { + mw_buf_print(mwbuf, 0, r*9, sstr, 0, MW_WHITE, MW_BLACK); + memset(sstr,0,32); + c=0; r++; + if (r>10) + break; + }; + }; + + bbuf = mw_make_mw_buffer(mwbuf, &len); + mw_send_bitmap(mwdevice, MW_SCREEN_MODE_NOTIFICATION, 96, 96, 0, bbuf, len); + mw_update_display(mwdevice, MW_SCREEN_MODE_NOTIFICATION, 1); + mw_free_pbuffer(mwbuf); + } else if (mwdevice->devtype == MW_DEVICE_TYPE_ANA_DIGI || mwdevice->devtype == MW_DEVICE_TYPE_DEVB_ANA_DIGI) { + fprintf(stderr, "do notify OLED\n"); + mwbuf = mw_alloc_pbuffer(80, 16, 1); + mw_buf_clear(mwbuf, MW_BLACK); + + mw_buf_print(mwbuf, 0, 0, title, 0, MW_BLACK, MW_WHITE); + + i=0; + c=0; r=1; + memset(sstr,0,32); + while (i=13 || i>=strlen(text)) { + mw_buf_print(mwbuf, 0, r*9, sstr, 0, MW_WHITE, MW_BLACK); + memset(sstr,0,32); + c=0; r++; + }; + }; + + bbuf = mw_make_mw_oled_buffer(mwbuf, &len); + mw_write_oled_buffer(mwdevice, 0, MW_OLED_UPPER, 80, 0, bbuf, len); + + mw_buf_clear(mwbuf, MW_BLACK); + c=0; r=0; + memset(sstr,0,32); + while (i=13 || i>=strlen(text)) { + mw_buf_print(mwbuf, 0, r*9, sstr, 0, MW_WHITE, MW_BLACK); + memset(sstr,0,32); + c=0; r++; + if (r>2) + break; + }; + }; + + bbuf = mw_make_mw_oled_buffer(mwbuf, &len); + mw_write_oled_buffer(mwdevice, 0, MW_OLED_LOWER, 80, 0, bbuf, len); + + mw_free_pbuffer(mwbuf); + } else + fprintf(stderr, "Watch type not set - forgot to call mw_init()?\n"); + + if (vibrate) + mw_set_vibrate_mode(mwdevice, 1, 300, 300, vibrate); +} +