diff --git a/include/lld/ginput/toggle.h b/include/lld/ginput/toggle.h index 826ace83..72b097f0 100644 --- a/include/lld/ginput/toggle.h +++ b/include/lld/ginput/toggle.h @@ -30,22 +30,28 @@ #ifndef GFX_USE_GINPUT #define GFX_USE_GINPUT FALSE #endif - -#if GFX_USE_GINPUT || defined(__DOXYGEN__) - -#if GINPUT_NEED_TOGGLE - // Describes how the toggle bits are obtained - typedef struct GToggleConfig_t { - void *id; - unsigned mask; - unsigned invert; - iomode_t mode; - } GToggleConfig; +#ifndef GINPUT_NEED_TOGGLE + #define GINPUT_NEED_TOGGLE FALSE #endif +#if (GFX_USE_GINPUT && GINPUT_NEED_TOGGLE) || defined(__DOXYGEN__) + +// Describes how the toggle bits are obtained +typedef struct GToggleConfig_t { + void *id; + unsigned mask; + unsigned invert; + iomode_t mode; +} GToggleConfig; + // This must be included after the above type definition #include "ginput.h" +// n - Millisecs between poll's +#ifndef GINPUT_TOGGLE_POLL_PERIOD + #define GINPUT_TOGGLE_POLL_PERIOD 200 +#endif + /*===========================================================================*/ /* External declarations. */ /*===========================================================================*/ @@ -54,18 +60,26 @@ extern "C" { #endif -#if GINPUT_NEED_TOGGLE extern const GToggleConfig GInputToggleConfigTable[GINPUT_TOGGLE_CONFIG_ENTRIES]; void ginput_lld_toggle_init(const GToggleConfig *ptc); unsigned ginput_lld_toggle_getbits(const GToggleConfig *ptc); -#endif + + /* This routine is provided to low level drivers to wakeup a value read from a thread context. + * Particularly useful if GINPUT_TOGGLE_POLL_PERIOD = TIME_INFINITE + */ + void ginputToggleWakeup(void); + + /* This routine is provided to low level drivers to wakeup a value read from an ISR + * Particularly useful if GINPUT_TOGGLE_POLL_PERIOD = TIME_INFINITE + */ + void ginputToggleWakeupI(void); #ifdef __cplusplus } #endif -#endif /* GFX_USE_GINPUT */ +#endif /* GFX_USE_GINPUT && GINPUT_NEED_TOGGLE */ #endif /* _LLD_GINPUT_TOGGLE_H */ /** @} */ diff --git a/src/ginput/toggle.c b/src/ginput/toggle.c index a49ebfd3..890ac1dc 100644 --- a/src/ginput/toggle.c +++ b/src/ginput/toggle.c @@ -34,10 +34,6 @@ #include "lld/ginput/toggle.h" -#ifndef GINPUT_TOGGLE_POLL_PERIOD - #define GINPUT_TOGGLE_POLL_PERIOD 250 -#endif - #define GINPUT_TOGGLE_ISON 0x01 #define GINPUT_TOGGLE_INVERT 0x02 @@ -157,5 +153,15 @@ bool_t ginputGetToggleStatus(uint16_t instance, GEventToggle *ptoggle) { return TRUE; } +/* Wake up the mouse driver from an interrupt service routine (there may be new readings available) */ +void ginputToggleWakeup(void) { + gtimerJab(&ToggleTimer); +} + +/* Wake up the mouse driver from an interrupt service routine (there may be new readings available) */ +void ginputToggleWakeupI(void) { + gtimerJabI(&ToggleTimer); +} + #endif /* GINPUT_NEED_TOGGLE */ /** @} */