From bd041926b43676e2bf597c98149f9a6df8f8004b Mon Sep 17 00:00:00 2001 From: inmarket Date: Fri, 7 Nov 2014 12:02:41 +1000 Subject: [PATCH] Allow a mouse driver to not return any results when it is polled. --- .../Mikromedia-STM32-M4-ILI9341/gmouse_lld_MCU_board.h | 3 ++- boards/base/Olimex-STM32-LCD/gmouse_lld_MCU_board.h | 3 ++- drivers/ginput/touch/ADS7843/gmouse_lld_ADS7843.c | 3 ++- drivers/ginput/touch/FT5x06/gmouse_lld_FT5x06.c | 3 ++- drivers/multiple/Win32/gdisp_lld_Win32.c | 6 ++++-- drivers/multiple/X/gdisp_lld_X.c | 5 +++-- drivers/multiple/uGFXnet/gdisp_lld_uGFXnet.c | 5 +++-- src/ginput/driver_mouse.h | 8 ++++---- src/ginput/ginput_mouse.c | 5 +++-- 9 files changed, 25 insertions(+), 16 deletions(-) diff --git a/boards/base/Mikromedia-STM32-M4-ILI9341/gmouse_lld_MCU_board.h b/boards/base/Mikromedia-STM32-M4-ILI9341/gmouse_lld_MCU_board.h index 15c00e66..bad8b9ab 100644 --- a/boards/base/Mikromedia-STM32-M4-ILI9341/gmouse_lld_MCU_board.h +++ b/boards/base/Mikromedia-STM32-M4-ILI9341/gmouse_lld_MCU_board.h @@ -57,7 +57,7 @@ static bool_t init_board(GMouse *m, unsigned driverinstance) { return TRUE; } -static void read_xyz(GMouse *m, GMouseReading *prd) { +static bool_t read_xyz(GMouse *m, GMouseReading *prd) { adcsample_t samples[ADC_NUM_CHANNELS * ADC_BUF_DEPTH]; (void) m; @@ -89,6 +89,7 @@ static void read_xyz(GMouse *m, GMouseReading *prd) { palClearPad(GPIOB, GPIOB_DRIVEA); palClearPad(GPIOB, GPIOB_DRIVEB); } + return TRUE; } #endif /* _LLD_GMOUSE_MCU_BOARD_H */ diff --git a/boards/base/Olimex-STM32-LCD/gmouse_lld_MCU_board.h b/boards/base/Olimex-STM32-LCD/gmouse_lld_MCU_board.h index 8c90946f..414587cf 100644 --- a/boards/base/Olimex-STM32-LCD/gmouse_lld_MCU_board.h +++ b/boards/base/Olimex-STM32-LCD/gmouse_lld_MCU_board.h @@ -73,7 +73,7 @@ static bool_t init_board(GMouse *m, unsigned driverinstance) { return TRUE; } -static void read_xyz(GMouse *m, GMouseReading *prd) { +static bool_t read_xyz(GMouse *m, GMouseReading *prd) { adcsample_t samples[ADC_NUM_CHANNELS * ADC_BUF_DEPTH]; uint16_t val1, val2; (void) m; @@ -130,6 +130,7 @@ static void read_xyz(GMouse *m, GMouseReading *prd) { // Set up for reading z again. We know it will be 20ms before we get called again so don't worry about settling time setup_z(); } + return TRUE; } #endif /* _LLD_GMOUSE_MCU_BOARD_H */ diff --git a/drivers/ginput/touch/ADS7843/gmouse_lld_ADS7843.c b/drivers/ginput/touch/ADS7843/gmouse_lld_ADS7843.c index ac315262..5f1eb226 100644 --- a/drivers/ginput/touch/ADS7843/gmouse_lld_ADS7843.c +++ b/drivers/ginput/touch/ADS7843/gmouse_lld_ADS7843.c @@ -19,7 +19,7 @@ #define CMD_Y 0x91 #define CMD_ENABLE_IRQ 0x80 -static void MouseXYZ(GMouse* m, GMouseReading* pdr) +static bool_t MouseXYZ(GMouse* m, GMouseReading* pdr) { (void)m; @@ -42,6 +42,7 @@ static void MouseXYZ(GMouse* m, GMouseReading* pdr) release_bus(m); } + return TRUE; } const GMouseVMT const GMOUSE_DRIVER_VMT[1] = {{ diff --git a/drivers/ginput/touch/FT5x06/gmouse_lld_FT5x06.c b/drivers/ginput/touch/FT5x06/gmouse_lld_FT5x06.c index ed2e68fa..6b0bcdb2 100644 --- a/drivers/ginput/touch/FT5x06/gmouse_lld_FT5x06.c +++ b/drivers/ginput/touch/FT5x06/gmouse_lld_FT5x06.c @@ -56,7 +56,7 @@ static bool_t MouseInit(GMouse* m, unsigned driverinstance) { return TRUE; } -static void MouseXYZ(GMouse* m, GMouseReading* pdr) +static bool_t MouseXYZ(GMouse* m, GMouseReading* pdr) { // Assume not touched. pdr->buttons = 0; @@ -80,6 +80,7 @@ static void MouseXYZ(GMouse* m, GMouseReading* pdr) } release_bus(m); + return TRUE; } const GMouseVMT const GMOUSE_DRIVER_VMT[1] = {{ diff --git a/drivers/multiple/Win32/gdisp_lld_Win32.c b/drivers/multiple/Win32/gdisp_lld_Win32.c index ecb100f6..13c5e544 100644 --- a/drivers/multiple/Win32/gdisp_lld_Win32.c +++ b/drivers/multiple/Win32/gdisp_lld_Win32.c @@ -69,7 +69,7 @@ // Forward definitions static bool_t Win32MouseInit(GMouse *m, unsigned driverinstance); - static void Win32MouseRead(GMouse *m, GMouseReading *prd); + static bool_t Win32MouseRead(GMouse *m, GMouseReading *prd); const GMouseVMT const GMOUSE_DRIVER_VMT[1] = {{ { @@ -1169,7 +1169,7 @@ LLDSPEC bool_t gdisp_lld_init(GDisplay *g) { (void) driverinstance; return TRUE; } - static void Win32MouseRead(GMouse *m, GMouseReading *pt) { + static bool_t Win32MouseRead(GMouse *m, GMouseReading *pt) { GDisplay * g; winPriv * priv; @@ -1207,6 +1207,8 @@ LLDSPEC bool_t gdisp_lld_init(GDisplay *g) { } } #endif + + return TRUE; } #endif /* GINPUT_NEED_MOUSE */ diff --git a/drivers/multiple/X/gdisp_lld_X.c b/drivers/multiple/X/gdisp_lld_X.c index 6e0233ba..d62f52e6 100644 --- a/drivers/multiple/X/gdisp_lld_X.c +++ b/drivers/multiple/X/gdisp_lld_X.c @@ -33,7 +33,7 @@ // Forward definitions static bool_t XMouseInit(GMouse *m, unsigned driverinstance); - static void XMouseRead(GMouse *m, GMouseReading *prd); + static bool_t XMouseRead(GMouse *m, GMouseReading *prd); const GMouseVMT const GMOUSE_DRIVER_VMT[1] = {{ { @@ -364,7 +364,7 @@ LLDSPEC void gdisp_lld_draw_pixel(GDisplay *g) (void) driverinstance; return TRUE; } - static void XMouseRead(GMouse *m, GMouseReading *pt) { + static bool_t XMouseRead(GMouse *m, GMouseReading *pt) { xPriv * priv; priv = m->display->priv; @@ -372,6 +372,7 @@ LLDSPEC void gdisp_lld_draw_pixel(GDisplay *g) pt->y = priv->mousey; pt->z = (priv->buttons & GINPUT_MOUSE_BTN_LEFT) ? 1 : 0; pt->buttons = priv->buttons; + return TRUE; } #endif /* GINPUT_NEED_MOUSE */ diff --git a/drivers/multiple/uGFXnet/gdisp_lld_uGFXnet.c b/drivers/multiple/uGFXnet/gdisp_lld_uGFXnet.c index 559b0c69..3b42bcda 100644 --- a/drivers/multiple/uGFXnet/gdisp_lld_uGFXnet.c +++ b/drivers/multiple/uGFXnet/gdisp_lld_uGFXnet.c @@ -40,7 +40,7 @@ // Forward definitions static bool_t NMouseInit(GMouse *m, unsigned driverinstance); - static void NMouseRead(GMouse *m, GMouseReading *prd); + static bool_t NMouseRead(GMouse *m, GMouseReading *prd); const GMouseVMT const GMOUSE_DRIVER_VMT[1] = {{ { @@ -710,7 +710,7 @@ LLDSPEC bool_t gdisp_lld_init(GDisplay *g) { (void) driverinstance; return TRUE; } - static void NMouseRead(GMouse *m, GMouseReading *pt) { + static bool_t NMouseRead(GMouse *m, GMouseReading *pt) { GDisplay * g; netPriv * priv; @@ -721,6 +721,7 @@ LLDSPEC bool_t gdisp_lld_init(GDisplay *g) { pt->y = priv->mousey; pt->z = (priv->mousebuttons & GINPUT_MOUSE_BTN_LEFT) ? 1 : 0; pt->buttons = priv->mousebuttons; + return TRUE; } #endif /* GINPUT_NEED_MOUSE */ diff --git a/src/ginput/driver_mouse.h b/src/ginput/driver_mouse.h index 037f9c0f..836ae1de 100644 --- a/src/ginput/driver_mouse.h +++ b/src/ginput/driver_mouse.h @@ -86,10 +86,10 @@ typedef struct GMouseVMT { GMouseJitter pen_jitter; // PEN MODE: Jitter settings GMouseJitter finger_jitter; // FINGER MODE: Jitter settings - bool_t (*init)(GMouse *m, unsigned driverinstance); // Required - void (*deinit)(GMouse *m); // Optional - void (*get)(GMouse *m, GMouseReading *prd); // Required - void (*calsave)(GMouse *m, void *buf, size_t sz); // Optional + bool_t (*init)(GMouse *m, unsigned driverinstance); // Required + void (*deinit)(GMouse *m); // Optional + bool_t (*get)(GMouse *m, GMouseReading *prd); // Required + void (*calsave)(GMouse *m, void *buf, size_t sz); // Optional const char *(*calload)(GMouse *m, size_t sz); // Optional: Can return NULL if no data is saved. } GMouseVMT; diff --git a/src/ginput/ginput_mouse.c b/src/ginput/ginput_mouse.c index 9cdcaec2..570839a2 100644 --- a/src/ginput/ginput_mouse.c +++ b/src/ginput/ginput_mouse.c @@ -78,7 +78,7 @@ static void SendMouseEvent(GSourceListener *psl, GMouse *m, GMouseReading *r) { // Send the event only if we are listening for it if (!((r->buttons & GINPUT_MOUSE_BTN_LEFT) && (psl->listenflags & GLISTEN_MOUSEDOWNMOVES)) - && !((r->buttons & GINPUT_MOUSE_BTN_LEFT) && (psl->listenflags & GLISTEN_MOUSEUPMOVES)) + && !(!(r->buttons & GINPUT_MOUSE_BTN_LEFT) && (psl->listenflags & GLISTEN_MOUSEUPMOVES)) && !((r->buttons & GMETA_MASK) && (psl->listenflags & GLISTEN_MOUSEMETA))) return; @@ -102,7 +102,8 @@ static void GetMouseReading(GMouse *m) { // Step 1 - Get the Raw Reading { m->flags &= ~GMOUSE_FLG_NEEDREAD; - gmvmt(m)->get(m, &r); + if (!gmvmt(m)->get(m, &r)) + return; } // Step 2 - Handle touch and button 0 debouncing