KeyboardManager: a class to manage the polling of a switch-matrix keyboard

Dependents:   KeyboardTest

Revision:
3:1310c57aca77
Parent:
2:eb4cc53ff33d
--- a/kbd_mgr/KeyboardMonitor.h	Sun Jan 23 23:15:36 2011 +0000
+++ b/kbd_mgr/KeyboardMonitor.h	Thu Feb 03 22:01:57 2011 +0000
@@ -1,58 +1,57 @@
-#ifndef KEYBOARD_MONITOR_H_
-#define KEYBOARD_MONITOR_H_
-
-#include "kbd_mgr/KeyboardState.h"
-#include "kbd_mgr/KeyboardStateHandler.h"
-
-#include "mbed.h"
-#include <vector>
-
-namespace kbd_mgr {
-
-/**
- * @brief A class that polls the state of a switch-matrix keyboard.
- * For efficiency reasons, this class uses contiguous bits in a GPIO ports for reading the state of the keys in a row.
- * Key rows are activated one by one using a set of digital outputs.
- * When a full keyboard scan has been done, it is provided to the registered handler.
- */
-class KeyboardMonitor {
-public:
-    typedef std::vector<PinName> OutPinsSet;
-    
-    /**
-     * @param inPort        Port to be used for reading the key state.
-     * @param numKeysPerRow Number of keys in a row (N)
-     * @param inLowestBit   Index of the lowest bit of inPort (using inLowestBit to inLowestBit+N).
-     * @param outPins       Pins to be used for powering each key row.
-     * @param handler       Event handler called to report keyboard state after each complete scan.
-     */
-    KeyboardMonitor(PortName inPort, std::size_t numKeysPerRow, std::size_t inLowestBit, 
-            const OutPinsSet &outPins, KeyboardStateHandler *handler);
-    
-    /**
-     * @brief Enables the polling of the keyboard state.
-     * @param pollingPeriod Frequency of the polling ticker (1kHz by default, min 20 microsec).
-     */
-    void start(float pollingPeriod = 0.001);
-    
-    /**
-     * @brief Disables the polling of the keyboard state.
-     */
-    void stop();
-    
-private:
-    void timerHandler();
-
-    PortIn in;
-    int inBitShift;
-    OutPinsSet outPins;
-    KeyboardStateHandler *handler;
-
-    Ticker ticker;
-    std::size_t scanRow;            /*!< next key row to be scanned */
-    KeyboardState currentState;     /*!< currently being built keyboard state */
-};
-
-} // kbd_mgr
-
-#endif // KEYBOARD_MONITOR_H_
+#ifndef KEYBOARD_MONITOR_H_
+#define KEYBOARD_MONITOR_H_
+
+#include "kbd_mgr/KeyboardStateEventServer.h"
+#include "kbd_mgr/KeyboardState.h"
+
+#include "mbed.h"
+#include <vector>
+
+namespace kbd_mgr {
+
+/**
+ * @brief A class that polls the state of a switch-matrix keyboard.
+ * For efficiency reasons, this class uses contiguous bits in a GPIO ports for reading the state of the keys in a row.
+ * Key rows are activated one by one using a set of digital outputs.
+ * When a full keyboard scan has been done, it is provided to the registered handler.
+ */
+class KeyboardMonitor : public KeyboardStateEventServer {
+public:
+    typedef std::vector<PinName> OutPinsSet;
+    
+    /**
+     * @param inPort        Port to be used for reading the key state.
+     * @param numKeysPerRow Number of keys in a row (N)
+     * @param inLowestBit   Index of the lowest bit of inPort (using inLowestBit to inLowestBit+N).
+     * @param outPins       Pins to be used for powering each key row.
+     */
+    KeyboardMonitor(PortName inPort, std::size_t numKeysPerRow, std::size_t inLowestBit, 
+            const OutPinsSet &outPins);
+    
+    ~KeyboardMonitor();
+    
+    /**
+     * @brief Starts the polling of the keyboard state.
+     */
+    void start(float pollingPeriod = 0.001);
+    
+    /**
+     * @brief Disables the polling of the keyboard state.
+     */
+    void stop();
+    
+private:
+    void timerHandler();
+
+    PortIn in;
+    int inBitShift;
+    OutPinsSet outPins;
+
+    Ticker ticker;
+    std::size_t scanRow;            /*!< next key row to be scanned */
+    KeyboardState currentState;     /*!< currently being built keyboard state */
+};
+
+} // kbd_mgr
+
+#endif // KEYBOARD_MONITOR_H_