blob: be4367f832ef87ad45288a594cef4ae18f9d4495 [file] [log] [blame] [edit]
//
// vncflinger - Copyright (C) 2017 Steve Kondik
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
#ifndef INPUT_DEVICE_H
#define INPUT_DEVICE_H
#include <utils/Errors.h>
#include <utils/Mutex.h>
#include <utils/RefBase.h>
#include <linux/uinput.h>
#define UINPUT_DEVICE "/dev/uinput"
namespace android {
class InputDevice : public RefBase {
public:
virtual status_t start(uint32_t width, uint32_t height);
virtual status_t start_async(uint32_t width, uint32_t height);
virtual status_t stop();
virtual status_t reconfigure(uint32_t width, uint32_t height);
virtual void keyEvent(bool down, uint32_t key);
virtual void pointerEvent(int buttonMask, int x, int y);
InputDevice() : mFD(-1) {
}
virtual ~InputDevice() {
stop();
}
private:
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);
int keysym2scancode(uint32_t c, int* sh, int* alt);
Mutex mLock;
int mFD;
bool mOpened;
struct uinput_user_dev mUserDev;
bool mLeftClicked;
bool mRightClicked;
bool mMiddleClicked;
};
};
#endif