android之修改usb觸摸旋轉(zhuǎn)

如果usb觸摸點(diǎn)是水平反向或者對(duì)角反向飒泻,可以修改frameworks/base/services/input/InputReader.cpp中的代碼。

?void MultiTouchInputMapper::syncTouch(nsecs_t when, bool* outHavePointerIds) {

? ? ? ? outPointer.distance = inSlot->getDistance();

? ? ? ? outPointer.tiltX = 0;

? ? ? ? outPointer.tiltY = 0;

+

+ //int32_t temp;

+? ? ? ? //temp = outPointer.x;

+? ? ? ? //outPointer.x = outPointer.y;

+? ? ? ? outPointer.x = (3657 - outPointer.x);

+? ? ? ? outPointer.y = (2065 - outPointer.y);

+? ? ? ? //ALOGD("outPointer.x = %d,outPointer.y = %d",outPointer.x,outPointer.y);

? ? ? ? outPointer.toolType = inSlot->getToolType();

? ? ? ? if (outPointer.toolType == AMOTION_EVENT_TOOL_TYPE_UNKNOWN) {

以上代碼可以通過(guò)getDeviceName().string()比較驅(qū)動(dòng)名來(lái)針對(duì)不同型號(hào)的tp進(jìn)行判斷修改噪窘,這樣就不會(huì)影響其他tp了笋庄。

如果tp是橫屏,但是顯示屏是豎屏的修改usb tp驅(qū)動(dòng)kernel/drivers/hid/hid-multitouch.c

具體修改如下:

@@ -136,6 +136,7 @@ static void mt_post_parse(struct mt_device *td);

/* vendor specific classes */

#define MT_CLS_3M 0x0101

+#define MT_ILITEK 0x222a

#define MT_CLS_CYPRESS 0x0102

#define MT_CLS_EGALAX 0x0103

#define MT_CLS_EGALAX_SERIAL 0x0104

@@ -150,7 +151,9 @@ static void mt_post_parse(struct mt_device *td);

#define MT_USB_DEVICE(v, p) HID_DEVICE(BUS_USB, HID_GROUP_MULTITOUCH, v, p)

#define MT_BT_DEVICE(v, p) HID_DEVICE(BUS_BLUETOOTH, HID_GROUP_MULTITOUCH, v, p)

-

+//rotation modify

+static int X_max=0;

+static int Y_max=0;

/*

? * these device-dependent functions determine what slot corresponds

? * to a valid contact that was just read.

@@ -460,7 +463,11 @@ static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,

case HID_UP_GENDESK:

switch (usage->hid) {

- case HID_GD_X:

+ //rotation modify

+ //case HID_GD_X:

+ case HID_GD_Y:

+ X_max = field->logical_maximum;

+ // printk("lwx-mt_touch_input_mapping HID_GD_Y cls->sn_move=%d,max=%d,X_max=%d\n",cls->sn_move,*max,X_max);

if (prev_usage && (prev_usage->hid == usage->hid)) {

hid_map_usage(hi, usage, bit, max,

EV_ABS, ABS_MT_TOOL_X);

@@ -475,7 +482,11 @@ static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,

mt_store_field(usage, td, hi);

return 1;

- case HID_GD_Y:

+ //rotation modify

+ //case HID_GD_Y:

+ case HID_GD_X:

+ Y_max = field->logical_maximum;

+ // printk("lwx-mt_touch_input_mapping HID_GD_X cls->sn_move=%d,max=%d,Y_max=%d\n",cls->sn_move,*max,Y_max);

if (prev_usage && (prev_usage->hid == usage->hid)) {

hid_map_usage(hi, usage, bit, max,

EV_ABS, ABS_MT_TOOL_Y);

@@ -520,20 +531,35 @@ static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,

case HID_DG_WIDTH:

hid_map_usage(hi, usage, bit, max,

EV_ABS, ABS_MT_TOUCH_MAJOR);

+ #if 1// //rotation modify

if (!(cls->quirks & MT_QUIRK_NO_AREA))

set_abs(hi->input, ABS_MT_TOUCH_MAJOR, field,

- cls->sn_width);

+ cls->sn_width);

+ #else

+ if (!(cls->quirks & MT_QUIRK_NO_AREA))

+ set_abs(hi->input, ABS_MT_TOUCH_MAJOR, field,

+ cls->sn_height);

+ #endif

mt_store_field(usage, td, hi);

return 1;

case HID_DG_HEIGHT:

hid_map_usage(hi, usage, bit, max,

EV_ABS, ABS_MT_TOUCH_MINOR);

+ #if 1// //rotation modify

if (!(cls->quirks & MT_QUIRK_NO_AREA)) {

set_abs(hi->input, ABS_MT_TOUCH_MINOR, field,

cls->sn_height);

input_set_abs_params(hi->input,

ABS_MT_ORIENTATION, 0, 1, 0, 0);

}

+ #else

+ if (!(cls->quirks & MT_QUIRK_NO_AREA)) {

+ set_abs(hi->input, ABS_MT_TOUCH_MINOR, field,

+ cls->sn_width);

+ input_set_abs_params(hi->input,

+ ABS_MT_ORIENTATION, 0, 0, 0, 0);

+ }

+ #endif

mt_store_field(usage, td, hi);

return 1;

case HID_DG_TIPPRESSURE:

@@ -640,9 +666,15 @@ static void mt_complete_slot(struct mt_device *td, struct input_dev *input)

/* divided by two to match visual scale of touch */

int major = max(s->w, s->h) >> 1;

int minor = min(s->w, s->h) >> 1;

-

+ #if 0// //rotation modify

input_event(input, EV_ABS, ABS_MT_POSITION_X, s->x);

- input_event(input, EV_ABS, ABS_MT_POSITION_Y, s->y);

+ input_event(input, EV_ABS, ABS_MT_POSITION_Y, s->y);

+ #else

+ //input_event(input, EV_ABS, ABS_MT_POSITION_X, s->y);

+ input_event(input, EV_ABS, ABS_MT_POSITION_X, X_max-s->y);

+ input_event(input, EV_ABS, ABS_MT_POSITION_Y, s->x);

+ //input_event(input, EV_ABS, ABS_MT_POSITION_Y, Y_max-s->x);

+ #endif

input_event(input, EV_ABS, ABS_MT_TOOL_X, s->cx);

input_event(input, EV_ABS, ABS_MT_TOOL_Y, s->cy);

input_event(input, EV_ABS, ABS_MT_DISTANCE,


以上+號(hào)后面的是修改的代碼倔监,-號(hào)后面是去掉的代碼直砂。

如果tp水平或者對(duì)角反向了可以將下面的注釋的代碼打開(kāi),把使用的代碼注釋掉

+ //input_event(input, EV_ABS, ABS_MT_POSITION_X, s->y);

+ input_event(input, EV_ABS, ABS_MT_POSITION_X, X_max-s->y);

+ input_event(input, EV_ABS, ABS_MT_POSITION_Y, s->x);

+ //input_event(input, EV_ABS, ABS_MT_POSITION_Y, Y_max-s->x);

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末浩习,一起剝皮案震驚了整個(gè)濱河市静暂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌谱秽,老刑警劉巖洽蛀,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件摹迷,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡郊供,警方通過(guò)查閱死者的電腦和手機(jī)峡碉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)颂碘,“玉大人,你說(shuō)我怎么就攤上這事椅挣⊥凡恚” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵鼠证,是天一觀的道長(zhǎng)峡竣。 經(jīng)常有香客問(wèn)我,道長(zhǎng)量九,這世上最難降的妖魔是什么适掰? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮荠列,結(jié)果婚禮上类浪,老公的妹妹穿的比我還像新娘。我一直安慰自己肌似,他們只是感情好费就,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著川队,像睡著了一般力细。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上固额,一...
    開(kāi)封第一講書(shū)人閱讀 51,763評(píng)論 1 307
  • 那天眠蚂,我揣著相機(jī)與錄音,去河邊找鬼斗躏。 笑死逝慧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的啄糙。 我是一名探鬼主播馋艺,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼迈套!你這毒婦竟也來(lái)了捐祠?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤桑李,失蹤者是張志新(化名)和其女友劉穎踱蛀,沒(méi)想到半個(gè)月后窿给,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡率拒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年崩泡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片猬膨。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡角撞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出勃痴,到底是詐尸還是另有隱情谒所,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布沛申,位于F島的核電站劣领,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏铁材。R本人自食惡果不足惜尖淘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望著觉。 院中可真熱鬧村生,春花似錦、人聲如沸饼丘。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)葬毫。三九已至镇辉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間贴捡,已是汗流浹背忽肛。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留烂斋,地道東北人屹逛。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像汛骂,于是被迫代替她去往敵國(guó)和親罕模。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容