2016-05-24 35 views
2

大家好,感謝您的閱讀。用輸入模擬多點觸控事件

我正在嘗試使用uinput界面來執行某些操作。最終,這些數據將通過UART串行連接進行解釋。

我可以打開,關閉等輸入,它可以很好地用於單點觸摸。

EV_KEY BTN_TOUCH 1 
EV_ABS ABS_X 400 
EV_ABS ABS_Y 400 
EV_SYN SYN_REPORT 0 

執行觸摸。輕掃,雙擊,使用ABS_X和ABS_Y正常工作。

然後,我想實現多點觸控支持,所以我實現了ABS_MT_POSITION_X,ABS_MT_POSITION_Y,ABS_MT_TRACKING_ID,ABS_MT_SLOT。

我設法進行觸摸和刷卡:

EV_ABS ABS_MT_TRACKING_ID 20 
EV_KEY BTN_TOUCH 1 
EV_ABS ABS_MT_POSITION_X 425 
EV_ABS ABS_MT_POSITION_Y 400 
EV_SYN SYN_REPORT 0 

但是......我不能使用的插槽。我正在嘗試執行一個捏(dezoomer)。

EV_ABS ABS_MT_SLOT 0 
EV_ABS ABS_MT_TRACKING_ID 20 
EV_KEY BTN_TOUCH 1 
EV_ABS ABS_MT_POSITION_X 425 
EV_ABS ABS_MT_POSITION_Y 400 
EV_ABS ABS_MT_SLOT 1 
EV_ABS ABS_MT_TRACKING_ID 21 
EV_ABS ABS_MT_POSITION_X 650 
EV_ABS ABS_MT_POSITION_Y 400 
EV_SYN SYN_REPORT 0 
EV_ABS ABS_MT_SLOT 0 
EV_ABS ABS_MT_POSITION_X 450 
EV_ABS ABS_MT_POSITION_Y 400 
EV_ABS ABS_MT_SLOT 1 
EV_ABS ABS_MT_POSITION_X 550 
EV_ABS ABS_MT_POSITION_Y 400 
EV_ABS ABS_MT_SLOT 0 
EV_ABS ABS_MT_TRACKING_ID -1 
EV_ABS ABS_MT_SLOT 1 
EV_ABS ABS_MT_TRACKING_ID -1 
EV_KEY BTN_TOUCH 0 
EV_SYN SYN_REPORT 0 

該序列不起作用,但根據Linux Multi Touch Protocol,應該是。我看不出問題來自哪裏。它是時間依賴性的嗎?當我發送這些指令時,他們之間沒有任何延遲,可能需要一段時間。

有誰知道如何模擬協議B之後的多點觸控事件?什麼序列應該工作?

注意:這些觸摸是在Android設備上執行的,可執行Android NDK。

回答

2

所以我終於找到了答案。 上面的順序是正確的,但是:

  1. 您需要添加延遲。從我可以從Android上的舊三星Edge獲得的序列中,每次刷新ABS_MT_POSITION_X/Y之間的時間爲8000微秒。
  2. 您需要發送更多活動。所以我基本上實現了一個for循環。

Gautier