RK Android7.1 禁用 USB触摸
一.
二.禁用触摸
2.1.\frameworks\native\services\inputflinger\EventHub.h
EventHub->getEvents(),获取输入事件和设备增删事件
/*
* Input device classes.
*/
enum {
/* The input device is a keyboard or has buttons. */
INPUT_DEVICE_CLASS_KEYBOARD = 0x00000001,
/* The input device is an alpha-numeric keyboard (not just a dial pad). */
INPUT_DEVICE_CLASS_ALPHAKEY = 0x00000002,
/* The input device is a touchscreen or a touchpad (either single-touch or multi-touch). */
INPUT_DEVICE_CLASS_TOUCH = 0x00000004,
/* The input device is a cursor device such as a trackball or mouse. */
INPUT_DEVICE_CLASS_CURSOR = 0x00000008,
/* The input device is a multi-touch touchscreen. */
INPUT_DEVICE_CLASS_TOUCH_MT = 0x00000010,
/* The input device is a directional pad (implies keyboard, has DPAD keys). */
INPUT_DEVICE_CLASS_DPAD = 0x00000020,
/* The input device is a gamepad (implies keyboard, has BUTTON keys). */
INPUT_DEVICE_CLASS_GAMEPAD = 0x00000040,
/* The input device has switches. */
INPUT_DEVICE_CLASS_SWITCH = 0x00000080,
/* The input device is a joystick (implies gamepad, has joystick absolute axes). */
INPUT_DEVICE_CLASS_JOYSTICK = 0x00000100,
/* The input device has a vibrator (supports FF_RUMBLE). */
INPUT_DEVICE_CLASS_VIBRATOR = 0x00000200,
/* The input device has a mouse. */
INPUT_DEVICE_CLASS_KEYMOUSE = 0x00000400,
/* The input device has a microphone. */
INPUT_DEVICE_CLASS_MIC = 0x00000400,
/* The input device is an external stylus (has data we want to fuse with touch data). */
INPUT_DEVICE_CLASS_EXTERNAL_STYLUS = 0x00000800,
/* The input device has a rotary encoder */
INPUT_DEVICE_CLASS_ROTARY_ENCODER = 0x00001000,
/* The input device is virtual (not a real device, not part of UI configuration). */
INPUT_DEVICE_CLASS_VIRTUAL = 0x40000000,
/* The input device is external (not built-in). */
INPUT_DEVICE_CLASS_EXTERNAL = 0x80000000,
};
2.2.frameworks\native\services\inputflinger\EventHub.cpp Mapper只处理一次 不能根据属性同步
触摸
--- a/frameworks/native/services/inputflinger/EventHub.cpp
+++ b/frameworks/native/services/inputflinger/EventHub.cpp
@@ -1199,7 +1199,10 @@ status_t EventHub::openDeviceLocked(const char *devicePath) {
device->classes |= INPUT_DEVICE_CLASS_ROTARY_ENCODER;
}
}
-
+ char usb_touch [PROPERTY_VALUE_MAX];
+ int usb_touch_flag = 0;
+ property_get("persist.sys.UsbTouch", usb_touch, "0");
+ usb_touch_flag = strtol(usb_touch,0,0);
// See if this is a touch pad.
// Is this a new modern multi-touch driver?
if (test_bit(ABS_MT_POSITION_X, device->absBitmask)
@@ -1208,13 +1211,21 @@ status_t EventHub::openDeviceLocked(const char *devicePath) {
// with the ABS_MT range. Try to confirm that the device really is
// a touch screen.
if (test_bit(BTN_TOUCH, device->keyBitmask) || !haveGamepadButtons) {
- device->classes |= INPUT_DEVICE_CLASS_TOUCH | INPUT_DEVICE_CLASS_TOUCH_MT;
+ device->classes |= INPUT_DEVICE_CLASS_TOUCH | INPUT_DEVICE_CLASS_TOUCH_MT;
+ if(usb_touch_flag){
+ ALOGD("gatsby INPUT_DEVICE_CLASS_TOUCH INPUT_DEVICE_CLASS_TOUCH_MT");
+ return -1;
+ }
}
// Is this an old style single-touch driver?
} else if (test_bit(BTN_TOUCH, device->keyBitmask)
&& test_bit(ABS_X, device->absBitmask)
&& test_bit(ABS_Y, device->absBitmask)) {
- device->classes |= INPUT_DEVICE_CLASS_TOUCH;
+ device->classes |= INPUT_DEVICE_CLASS_TOUCH;
+ if(usb_touch_flag){
+ ALOGD("gatsby INPUT_DEVICE_CLASS_TOUCH");
+ return -1;
+ }
// Is this a BT stylus?
} else if ((test_bit(ABS_PRESSURE, device->absBitmask) ||
test_bit(BTN_TOUCH, device->keyBitmask))
键盘
device->classes |= INPUT_DEVICE_CLASS_KEYBOARD | INPUT_DEVICE_CLASS_KEYMOUSE;
鼠标
device->classes |= INPUT_DEVICE_CLASS_CURSOR;
2.3.frameworks\native\services\inputflinger\InputReader.cpp 多点触摸屏处理函数 处理数据上报
输入系统 InputReader
- 键盘类设备:KeyboardInputMapper
- 触摸屏设备:MultiTouchInputMapper或SingleTouchInputMapper
- 鼠标类设备:CursorInputMapper
--- a/frameworks/native/services/inputflinger/InputReader.cpp
+++ b/frameworks/native/services/inputflinger/InputReader.cpp
@@ -85,6 +85,9 @@ static const nsecs_t STYLUS_DATA_LATENCY = ms2ns(10);
static const int KEYCODE_ENTER = 28;
static const int KEYCODE_DPAD_CENTER = 232;
+static char usb_touch [PROPERTY_VALUE_MAX];
+static int usb_touch_flag = 0;
+
// --- Static Functions ---
template<typename T>
@@ -1739,6 +1742,10 @@ void MultiTouchMotionAccumulator::clearSlots(int32_t initialSlot) {
}
void MultiTouchMotionAccumulator::process(const RawEvent* rawEvent) {
+ //ALOGD("gatsby MultiTouchMotionAccumulator");
+ property_get("persist.sys.UsbTouch", usb_touch, "0");
+ usb_touch_flag = strtol(usb_touch,0,0);
+if(usb_touch_flag){
if (rawEvent->type == EV_ABS) {
bool newSlot = false;
if (mUsingSlotsProtocol) {
@@ -1821,6 +1828,7 @@ void MultiTouchMotionAccumulator::process(const RawEvent* rawEvent) {
// MultiTouch Sync: The driver has returned all data for *one* of the pointers.
mCurrentSlot += 1;
}
+}
}
三.禁用鼠标
3.1.鼠标、触摸休眠唤醒
mCursorButtonAccumulator.process(rawEvent);//按键
mCursorMotionAccumulator.process(rawEvent);//移动
mCursorScrollAccumulator.process(rawEvent);//滚动
--- a/frameworks/native/services/inputflinger/InputReader.cpp
+++ b/frameworks/native/services/inputflinger/InputReader.cpp
@@ -85,6 +85,9 @@ static const nsecs_t STYLUS_DATA_LATENCY = ms2ns(10);
static const int KEYCODE_ENTER = 28;
static const int KEYCODE_DPAD_CENTER = 232;
+static char usb_mouse [PROPERTY_VALUE_MAX];
+static int usb_mouse_flag = 0;
+
// --- Static Functions ---
template<typename T>
@@ -2622,6 +2625,11 @@ void CursorInputMapper::reset(nsecs_t when) {
}
void CursorInputMapper::process(const RawEvent* rawEvent) {
+ property_get("persist.sys.UsbMouse", usb_mouse, "0");
+ usb_mouse_flag = strtol(usb_mouse,0,0);
+ //ALOGD("gatsby CursorInputMapper %d",usb_mouse_flag);
+ if(!usb_mouse_flag){
+ //ALOGD("gatsby CursorInputMapperxxxxx %d",usb_mouse_flag);
mCursorButtonAccumulator.process(rawEvent);
mCursorMotionAccumulator.process(rawEvent);
mCursorScrollAccumulator.process(rawEvent);
@@ -2629,6 +2637,7 @@ void CursorInputMapper::process(const RawEvent* rawEvent) {
if (rawEvent->type == EV_SYN && rawEvent->code == SYN_REPORT) {
sync(rawEvent->when);
}
+ }
}
void CursorInputMapper::sync(nsecs_t when) {
@@ -3372,7 +3381,8 @@ void TouchInputMapper::configureParameters() {
// Initial downs on external touch devices should wake the device.
// Normally we don't do this for internal touch screens to prevent them from waking
// up in your pocket but you can enable it using the input device configuration.
- mParameters.wake = getDevice()->isExternal();
+ //mParameters.wake = getDevice()->isExternal();
+ mParameters.wake = 0;
getDevice()->getConfiguration().tryGetProperty(String8("touch.wake"),
mParameters.wake);
}
3.2.异常 init.rc里面的服务老是重启
[ 3.434014] init: Service 'inputflinger' (pid 226) killed by signal 6
[ 3.434052] init: Service 'inputflinger' (pid 226) killing any children in process group
[ 2.837536] init: Starting service 'inputflinger'... [ 2.838752] init: Starting service 'installd'... [ 2.839252] init: Starting service 'keystore'... [ 2.845439] init: Starting service 'mediacodec'... [ 2.845861] init: Starting service 'mediadrm'... [ 2.848736] init: Starting service 'mediaextractor'... [ 2.851013] init: Starting service 'media'... [ 2.855864] init: Starting service 'netd'... [ 2.856386] init: Service 'rootservice' (pid 217) exited with status 0 [ 2.856576] init: Starting service 'gatekeeperd'... [ 2.864264] logd.daemon: reinit [ 2.871770] rk_gmac-dwmac ff290000.ethernet: rk_get_eth_addr: mac address: 3e:6e:85:07:a7:0e [ 2.871786] eth0: device MAC address 3e:6e:85:07:a7:0e [ 2.872398] init: Starting service 'perfprofd'... [ 2.872895] init: Service 'logd-reinit' (pid 202) exited with status 0 [ 2.873057] init: Service 'akmd' (pid 221) exited with status 254 [ 2.910133] ret = ffffffff [ 2.910574] init: Service 'up_eth0' (pid 220) exited with status 0 [ 2.914185] init: Service 'drmservice' (pid 219) exited with status 0 [ 2.945194] capability: warning: `daemonsu' uses 32-bit capabilities (legacy support in use) [ 2.946996] init: Untracked pid 233 exited with status 0 [ 3.034081] read descriptors [ 3.034182] read strings [ 3.034962] pcd_pullup, is_on 1 [ 3.226907] EXT4-fs (mmcblk2p10): re-mounted. Opts: (null) [ 3.231591] random: nonblocking pool is initialized [ 3.434014] init: Service 'inputflinger' (pid 226) killed by signal 6 [ 3.434052] init: Service 'inputflinger' (pid 226) killing any children in process group
3.3.优化
--- a/frameworks/native/services/inputflinger/InputReader.cpp
+++ b/frameworks/native/services/inputflinger/InputReader.cpp
@@ -85,6 +85,9 @@ static const nsecs_t STYLUS_DATA_LATENCY = ms2ns(10);
static const int KEYCODE_ENTER = 28;
static const int KEYCODE_DPAD_CENTER = 232;
+static char usb_mouse [PROPERTY_VALUE_MAX];
+static int usb_mouse_flag = 0;
+
// --- Static Functions ---
template<typename T>
@@ -1260,6 +1263,7 @@ void CursorButtonAccumulator::clearButtons() {
}
void CursorButtonAccumulator::process(const RawEvent* rawEvent) {
+ if(!usb_mouse_flag){
if (rawEvent->type == EV_KEY) {
switch (rawEvent->code) {
case BTN_LEFT:
@@ -1292,6 +1296,7 @@ void CursorButtonAccumulator::process(const RawEvent* rawEvent) {
break;
}
}
+ }
}
uint32_t CursorButtonAccumulator::getButtonState() const {
@@ -1334,6 +1339,7 @@ void CursorMotionAccumulator::clearRelativeAxes() {
}
void CursorMotionAccumulator::process(const RawEvent* rawEvent) {
+ if(!usb_mouse_flag){
if (rawEvent->type == EV_REL) {
switch (rawEvent->code) {
case REL_X:
@@ -1344,6 +1350,7 @@ void CursorMotionAccumulator::process(const RawEvent* rawEvent) {
break;
}
}
+ }
}
void CursorMotionAccumulator::finishSync() {
@@ -1373,6 +1380,7 @@ void CursorScrollAccumulator::clearRelativeAxes() {
}
void CursorScrollAccumulator::process(const RawEvent* rawEvent) {
+ if(!usb_mouse_flag){
if (rawEvent->type == EV_REL) {
switch (rawEvent->code) {
case REL_WHEEL:
@@ -1383,6 +1391,7 @@ void CursorScrollAccumulator::process(const RawEvent* rawEvent) {
break;
}
}
+ }
}
void CursorScrollAccumulator::finishSync() {
@@ -2622,6 +2631,9 @@ void CursorInputMapper::reset(nsecs_t when) {
}
void CursorInputMapper::process(const RawEvent* rawEvent) {
+ property_get("persist.sys.UsbMouse", usb_mouse, "0");
+ usb_mouse_flag = strtol(usb_mouse,0,0);
+ //ALOGD("gatsby CursorInputMapper %d",usb_mouse_flag);
mCursorButtonAccumulator.process(rawEvent);
mCursorMotionAccumulator.process(rawEvent);
mCursorScrollAccumulator.process(rawEvent);
@@ -3372,7 +3384,8 @@ void TouchInputMapper::configureParameters() {
// Initial downs on external touch devices should wake the device.
// Normally we don't do this for internal touch screens to prevent them from waking
// up in your pocket but you can enable it using the input device configuration.
- mParameters.wake = getDevice()->isExternal();
+ //mParameters.wake = getDevice()->isExternal();
+ mParameters.wake = 0;
getDevice()->getConfiguration().tryGetProperty(String8("touch.wake"),
mParameters.wake);
}

浙公网安备 33010602011771号