vnc: Orientation change support
* Detect orientation changes and reconfigure appropriately.
* Clean up the uinput code.
* FIXME: The virtual mouse isn't reconfiguring correctly yet.
diff --git a/src/InputDevice.h b/src/InputDevice.h
index 19595a2..20f5063 100644
--- a/src/InputDevice.h
+++ b/src/InputDevice.h
@@ -19,37 +19,51 @@
#define INPUT_DEVICE_H
#include <utils/Errors.h>
-#include <utils/RefBase.h>
+#include <utils/Mutex.h>
+#include <utils/Singleton.h>
#include <rfb/rfb.h>
-
+#include <linux/uinput.h>
#define UINPUT_DEVICE "/dev/uinput"
namespace android {
-class InputDevice : public RefBase {
-public:
- static status_t start(uint32_t width, uint32_t height);
- static status_t stop();
+class InputDevice : public Singleton<InputDevice> {
- static void keyEvent(rfbBool down, rfbKeySym key, rfbClientPtr cl);
- static void pointerEvent(int buttonMask, int x, int y, rfbClientPtr cl);
+friend class Singleton;
+
+public:
+ virtual status_t start(uint32_t width, uint32_t height);
+ virtual status_t stop();
+ virtual status_t reconfigure(uint32_t width, uint32_t height);
+
+ static void onKeyEvent(rfbBool down, rfbKeySym key, rfbClientPtr cl);
+ static void onPointerEvent(int buttonMask, int x, int y, rfbClientPtr cl);
+
+ InputDevice() : mFD(-1) {}
+ virtual ~InputDevice() {}
private:
- static status_t inject(uint16_t type, uint16_t code, int32_t value);
- static status_t injectSyn(uint16_t type, uint16_t code, int32_t value);
- static status_t movePointer(int32_t x, int32_t y);
- static status_t setPointer(int32_t x, int32_t y);
- static status_t press(uint16_t code);
- static status_t release(uint16_t code);
- static status_t click(uint16_t code);
+ status_t inject(uint16_t type, uint16_t code, int32_t value);
+ status_t injectSyn(uint16_t type, uint16_t code, int32_t value);
+ status_t movePointer(int32_t x, int32_t y);
+ status_t setPointer(int32_t x, int32_t y);
+ status_t press(uint16_t code);
+ status_t release(uint16_t code);
+ status_t click(uint16_t code);
- static int keysym2scancode(rfbKeySym c, rfbClientPtr cl, int* sh, int* alt);
+ void keyEvent(rfbBool down, rfbKeySym key, rfbClientPtr cl);
+ void pointerEvent(int buttonMask, int x, int y, rfbClientPtr cl);
- static int sFD;
+ int keysym2scancode(rfbKeySym c, rfbClientPtr cl, int* sh, int* alt);
+ Mutex mLock;
+
+ int mFD;
+
+ struct uinput_user_dev mUserDev;
};
};