diff --git a/gui.c b/gui.c index 344ff0c5..ad4f3333 100644 --- a/gui.c +++ b/gui.c @@ -6,7 +6,16 @@ volatile uint16_t x, y; -static WORKING_AREA(waTouchPadThread, 512); +static msg_t buttonThread(struct buttonStruct_t *a) { + while(TRUE) { + if(x >= a->x0 && x <= a->x1 && y >= a->y0 && y <= a->y1) + *(a->state) = 1; + else + *(a->state) = 0; + chThdSleepMilliseconds(50); + } +} + static msg_t TouchPadThread(void *arg) { (void)arg; unsigned char buffer[10]; @@ -30,10 +39,25 @@ static msg_t TouchPadThread(void *arg) { void guiInit(void) { - chThdCreateStatic(TouchPadThread, sizeof(TouchPadThread), HIGHPRIO, TouchPadThread, NULL); + Thread *tp = NULL; + tp = chThdCreateFromHeap(NULL, THD_WA_SIZE(512), HIGHPRIO-1, TouchPadThread, NULL); } -void guiDrawButton(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, unsigned char *str, uint16_t fontColor, uint16_t buttonColor, uint8_t *state) { +Thread *guiDrawButton(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, unsigned char *str, uint16_t fontColor, uint16_t buttonColor, uint8_t *state) { + struct buttonStruct_t *buttonStruct; + Thread *tp = NULL; + + buttonStruct = chHeapAlloc(NULL, sizeof(struct buttonStruct_t)); + + buttonStruct->x0 = 100; + buttonStruct->y0 = 100; + buttonStruct->x1 = 200; + buttonStruct->y1 = 200; + buttonStruct->state = state; + lcdDrawRectString(x0, y0, x1, y1, str, fontColor, buttonColor); + tp = chThdCreateFromHeap(NULL, THD_WA_SIZE(128), NORMALPRIO+1, buttonThread, buttonStruct); + + return tp; } diff --git a/gui.h b/gui.h index 3a6835ca..045d0f2d 100644 --- a/gui.h +++ b/gui.h @@ -1,7 +1,15 @@ #ifndef GUI_H #define GUI_H -void guiDrawButton(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, unsigned char *str, uint16_t fontColor, uint16_t buttonColor, uint8_t *state); +struct buttonStruct_t { + uint16_t x0; + uint16_t y0; + uint16_t x1; + uint16_t y1; + uint8_t *state; +}; + +Thread *guiDrawButton(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, unsigned char *str, uint16_t fontColor, uint16_t buttonColor, uint8_t *state); #endif