aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Hannam <andrewh@inmarket.com.au>2012-12-02 16:43:28 +1000
committerAndrew Hannam <andrewh@inmarket.com.au>2012-12-02 16:43:28 +1000
commit99a9bf45e747f612ce2c2317a913f7d1fdf696f0 (patch)
tree3309edc9156ac7748036b85ffaaba855fcb08b4d
parente23485273e9ba9cfa51ba5e73e69f8c61b9a629d (diff)
downloaduGFX-99a9bf45e747f612ce2c2317a913f7d1fdf696f0.tar.gz
uGFX-99a9bf45e747f612ce2c2317a913f7d1fdf696f0.tar.bz2
uGFX-99a9bf45e747f612ce2c2317a913f7d1fdf696f0.zip
Add support for interrupt driven Toggle Inputs
-rw-r--r--include/lld/ginput/toggle.h40
-rw-r--r--src/ginput/toggle.c14
2 files changed, 37 insertions, 17 deletions
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
+#ifndef GINPUT_NEED_TOGGLE
+ #define GINPUT_NEED_TOGGLE FALSE
+#endif
-#if GFX_USE_GINPUT || defined(__DOXYGEN__)
+#if (GFX_USE_GINPUT && GINPUT_NEED_TOGGLE) || 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;
-#endif
+// 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 */
/** @} */