哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【RK3588 Android驅(qū)動實戰(zhàn)】USB TP XY軸反轉(zhuǎn)?不用改TP固件!系統(tǒng)端改上報數(shù)據(jù)快速搞定

jf_44130326 ? 來源:Linux1024 ? 2026-02-06 17:09 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

嵌入式Android開發(fā)的同學(xué),大概率遇到過USB觸控面板(TP)的適配坑——比如XY軸反轉(zhuǎn):明明點屏幕左邊,系統(tǒng)卻識別成右邊;向上滑動,頁面反而向下走。最近在RK3588平臺調(diào)試USB TP時,就碰到了這個問題,TP供應(yīng)商給的方案是改TP端固件,但需要重新燒錄TP程序、協(xié)調(diào)供應(yīng)商聯(lián)調(diào),操作麻煩還耗時間。

后來我們換了個思路:直接在Android系統(tǒng)端修改TP上報的坐標(biāo)數(shù)據(jù),不用動TP硬件/固件,半小時就搞定了。今天就把這個實戰(zhàn)方案拆解清楚,附上核心patch解析,希望能幫到有同樣需求的同學(xué)。

一、問題回顧:RK3588 USB TP反向煩惱

先明確下我們遇到的具體問題:

RK3588 Android 12/13系統(tǒng)上,接入某款USB TP后,觸控功能正常,但坐標(biāo)映射完全反了——比如TP物理坐標(biāo)的X軸(橫向)對應(yīng)系統(tǒng)的Y軸(縱向),且單軸方向還存在反轉(zhuǎn)(比如按TP右側(cè),系統(tǒng)識別為左側(cè))。

最初聯(lián)系TP供應(yīng)商,得到的解決方案是:

1.提供TP的固件燒錄工具;

2.修改TP內(nèi)部的坐標(biāo)映射參數(shù);

3.重新燒錄固件到TP芯片。

但這個方案有明顯痛點:

?需額外安裝燒錄工具,部分工具還依賴Windows系統(tǒng);

?燒錄過程有風(fēng)險,操作不當(dāng)可能導(dǎo)致TP變磚;

?若后續(xù)換批次TP,可能需要重復(fù)適配,靈活性差。

既然TP是通過USB HID協(xié)議向系統(tǒng)上報坐標(biāo)數(shù)據(jù),那能不能在系統(tǒng)驅(qū)動層攔截并修改這些數(shù)據(jù)?答案是肯定的——這就是我們最終采用的方案。

二、核心方案

1.核心邏輯:hid-multitouch.c(坐標(biāo)轉(zhuǎn)換的關(guān)鍵)

文件路徑:kernel-5.10/drivers/hid/hid-multitouch.c

wKgZPGkaixGAUs5yAACFuC-kohc057.png

這是USB HID多點觸控驅(qū)動的核心文件,我們的坐標(biāo)反轉(zhuǎn)+交換邏輯就加在這里。TP上報的原始X/Y坐標(biāo)會經(jīng)過這個文件處理后,再傳遞給Android輸入子系統(tǒng),所以在這里修改數(shù)據(jù)最直接有效。

先看原代碼和修改后的對比:

// 原代碼(直接上報原始坐標(biāo))input_event(input, EV_ABS, ABS_MT_POSITION_X, *slot->x);input_event(input, EV_ABS, ABS_MT_POSITION_Y, *slot->y);// 修改后(先轉(zhuǎn)換坐標(biāo),再上報)intmax_x = input_abs_get_max(input, ABS_MT_POSITION_X);intmax_y = input_abs_get_max(input, ABS_MT_POSITION_Y);intnew_x = max_y - *slot->y;    intnew_y = *slot->x; new_x = clamp_val(new_x,0, max_y);new_y = clamp_val(new_y,0, max_x);input_event(input, EV_ABS, ABS_MT_POSITION_X, new_x);input_event(input, EV_ABS, ABS_MT_POSITION_Y, new_y);

這部分是核心,必須逐行理解

步驟1:獲取TP的最大坐標(biāo)值

intmax_x = input_abs_get_max(input, ABS_MT_POSITION_X);intmax_y = input_abs_get_max(input, ABS_MT_POSITION_Y);

?input_abs_get_maxLinux輸入子系統(tǒng)提供的API,用于獲取指定輸入設(shè)備(這里是USB TP)的絕對坐標(biāo)最大值;

?比如TP的分辨率是1920x1080,那么max_x=1919,max_y=1079(坐標(biāo)從0開始計數(shù));

?為什么要獲取最大值?因為后續(xù)要通過最大值-原始坐標(biāo)實現(xiàn)單軸方向反轉(zhuǎn)。

步驟2:坐標(biāo)交換+方向反轉(zhuǎn)

intnew_x = max_y - *slot->y;    intnew_y = *slot->x; 

這兩行是解決“XY軸反轉(zhuǎn)的關(guān)鍵,我們用一個實際例子理解:

假設(shè)TP原始上報坐標(biāo)是(x=200,y=500),且TPmax_x=1919max_y=1079

?原邏輯:系統(tǒng)收到X=200,Y=500(對應(yīng)錯誤的軸映射);

?新邏輯:

new_x = 1079 - 500 = 579(用Y軸最大值減原始Y,實現(xiàn)Y軸反轉(zhuǎn),再作為新X);

new_y = 200(直接把原始X作為新Y,實現(xiàn)XY軸交換);

最終系統(tǒng)收到X=579,Y=200,正好修正了軸反轉(zhuǎn)問題。

步驟3:限制坐標(biāo)范圍(防異常)

new_x= clamp_val(new_x,0, max_y);new_y= clamp_val(new_y,0, max_x);

?clamp_valLinux內(nèi)核的工具函數(shù),作用是將數(shù)值限制在指定范圍內(nèi)(小于最小值則取最小值,大于最大值則取最大值);

?為什么需要?防止TP上報異常數(shù)據(jù)(比如負(fù)數(shù)、超出最大值),導(dǎo)致系統(tǒng)識別到無效坐標(biāo),出現(xiàn)觸控漂移或無響應(yīng);

?比如new_x計算后是- 10,會被修正為0;若new_x1080(超過max_y=1079),會被修正為1079。

三、測試驗證:修改后效果如何?

修改完上述3個文件后,按以下步驟驗證:

1.重新編譯RK3588內(nèi)核;

2.將編譯后的內(nèi)核鏡像(boot.img)燒錄到RK3588開發(fā)板;

3.接入USB TP,測試觸控功能。

驗證結(jié)果

?單點觸控:點擊屏幕任意位置,光標(biāo)精準(zhǔn)對應(yīng),無偏移;

?滑動操作:向上///右滑動,頁面滾動方向完全正確;

?多點觸控:雙指縮放圖片、雙指旋轉(zhuǎn),功能正常無異常;

?邊緣測試:點擊TP邊緣區(qū)域,無超出范圍無響應(yīng)問題。

整個適配過程從修改代碼到驗證通過,流程簡單,比供應(yīng)商提供的TP固件方案效率高太多。

四、實用小貼士:適配其他TP的擴(kuò)展思路

這個方案的優(yōu)勢在于通用性”——如果后續(xù)換其他型號的USB TP,只要遇到類似的軸反轉(zhuǎn)方向反問題,都可以參考這個思路修改,只需調(diào)整hid-multitouch.c中的坐標(biāo)轉(zhuǎn)換公式:

問題類型

調(diào)整思路

示例公式(假設(shè)原始x/y,max_x/max_y

XY軸交換

new_x =原始y;new_y =原始x

new_x=*slot->y; new_y=*slot->x

X軸方向反

new_x = max_x -原始x;new_y =原始y

new_x=max_x-*slot->x; new_y=*slot->y

Y軸方向反

new_x =原始x;new_y = max_y -原始y

new_x=*slot->x; new_y=max_y-*slot->y

XY軸交換+雙軸方向反

new_x = max_y -原始y;new_y = max_x -原始x

new_x=max_y-*slot->y; new_y=max_x-*slot->x

修改前必做的準(zhǔn)備

getevent命令查看TP的原始坐標(biāo)數(shù)據(jù)(Android終端執(zhí)行getevent -l),確認(rèn)原始x/y的范圍和上報規(guī)律,再針對性調(diào)整公式,避免盲目修改。

五、總結(jié):嵌入式適配的靈活思維

這次RK3588 USB TP的適配,本質(zhì)上是繞開硬件限制,用軟件靈活解決問題。在嵌入式開發(fā)中,我們常會遇到硬件端修改麻煩的場景,此時不妨多想想:

?驅(qū)動層能不能攔截數(shù)據(jù)做處理?

?系統(tǒng)層有沒有API能適配需求?

?應(yīng)用層能不能通過配置兼容差異?

畢竟,軟件的靈活性才是嵌入式開發(fā)的核心優(yōu)勢。如果大家在TP適配中還遇到過其他坑(比如多點觸控失效、觸控延遲),歡迎在評論區(qū)分享,我們一起探討解決方案~

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5208

    文章

    20620

    瀏覽量

    336658
  • Android
    +關(guān)注

    關(guān)注

    12

    文章

    4035

    瀏覽量

    134424
  • RK3588
    +關(guān)注

    關(guān)注

    8

    文章

    585

    瀏覽量

    7531
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    瑞芯微RK3588開發(fā)板RK3588 EVB和RK3588S EVB解讀

    瑞芯微RK3588開發(fā)板RK3588 EVB和RK3588S EVB解讀 瑞芯微旗艦芯RK3588系列開發(fā)板受到廣大開發(fā)者伙伴的關(guān)注和問詢。針對相關(guān)的開發(fā)板功能、操作指南等問題,我們一
    的頭像 發(fā)表于 09-22 15:54 ?2.3w次閱讀
    瑞芯微<b class='flag-5'>RK3588</b>開發(fā)板<b class='flag-5'>RK3588</b> EVB和<b class='flag-5'>RK3588</b>S EVB解讀

    RK3588 Android+Linux雙系統(tǒng)方案的實現(xiàn)

    12 SDK + RK3588 linux Debian系統(tǒng) 要求 Android和linux的固件的代碼uboot和rkbin部分需要一致,因為uboot和loader是共用一份 u
    的頭像 發(fā)表于 10-10 14:25 ?1.2w次閱讀
    <b class='flag-5'>RK3588</b> <b class='flag-5'>Android</b>+Linux雙<b class='flag-5'>系統(tǒng)</b>方案的實現(xiàn)

    RK3588 PCB推薦疊層及阻抗設(shè)計

    近期華秋電子聯(lián)合瑞芯微、凡億重磅發(fā)布了:《RK3588 PCB設(shè)計指導(dǎo)白皮書》,幫助開發(fā)者更好地規(guī)范利用RK3588開發(fā)產(chǎn)品,提高所設(shè)計的PCB質(zhì)量,在實戰(zhàn)中鞏固及提高PCB設(shè)計水平。本文
    發(fā)表于 08-10 09:32 ?2014次閱讀
    <b class='flag-5'>RK3588</b> PCB推薦疊層及阻抗設(shè)計

    迅為RK3588開發(fā)板Android系統(tǒng)燒寫及注意事項

    迅為RK3588開發(fā)板Android系統(tǒng)燒寫及注意事項
    的頭像 發(fā)表于 12-03 15:17 ?7339次閱讀
    迅為<b class='flag-5'>RK3588</b>開發(fā)板<b class='flag-5'>Android</b><b class='flag-5'>系統(tǒng)</b>燒寫及注意事項

    用這份PCB設(shè)計實戰(zhàn)手冊輕松搞定RK3588

    煩惱。那么,如果擁有一份嚴(yán)謹(jǐn)而全面的PCB設(shè)計指導(dǎo)大全,并包含完善的問題解決系統(tǒng),相信絕大部分設(shè)計隱患,都將迎刃而解! 所以華秋電子聯(lián)合瑞芯微、凡億重磅發(fā)布了PCB設(shè)計秘籍: 《RK3588
    發(fā)表于 12-25 14:32

    用這份PCB設(shè)計實戰(zhàn)手冊,輕松搞定RK3588

    煩惱。那么,如果擁有一份嚴(yán)謹(jǐn)而全面的PCB設(shè)計指導(dǎo)大全,并包含完善的問題解決系統(tǒng),相信絕大部分設(shè)計隱患,都將迎刃而解! 所以華秋電子聯(lián)合瑞芯微、凡億重磅發(fā)布了PCB設(shè)計秘籍: 《RK3588
    發(fā)表于 12-25 14:38

    迅為RK3588開發(fā)板深度剖析丨首選的性能

    OTG/ USB2.0 OTG/ TypeC)。支持雙路千兆以太網(wǎng)等等。 注:底板原理圖,PCB工程全部開源,另提供基于迅為RK3588核心板的底板最小系統(tǒng)原理圖。 RK3588開發(fā)
    發(fā)表于 09-03 15:49

    RK3588采集Cameralink圖像快速搭建系統(tǒng)辦法

    : CL-U3,便攜式應(yīng)用。 瑞芯微的RK3588開發(fā)板很多,種類各式各樣。如何快速搭建一套自己的基于RK3588的嵌入式Cameralink圖像采集處理方案呢。下面推薦一下。 快速
    發(fā)表于 12-19 10:07

    RK3588快速上手資料合集

    內(nèi)存 250GB 空閑的磁盤空間 編譯系統(tǒng)最好選用 Ubuntu 18.04,以下是基于 18.04 的環(huán)境搭建:2、使用USB線刷官方固件到Firefly ITX-3588J主板工欲
    發(fā)表于 04-06 15:27

    如何實現(xiàn)基于RK3588Android系統(tǒng)與Linux系統(tǒng)切換呢

    Android12 SDK + RK3588 linux Debian系統(tǒng)要求Android和linux的固件的代碼uboot和rkbin
    發(fā)表于 05-26 10:16

    RK3588 SDK編譯與固件燒寫步驟

    ; make ARCH=arm64 rk3588sevb1-lp4x-v10.img -j24  單獨編譯uboot  $ 。/make.sh rk3588  2、固件燒寫  升級工具
    發(fā)表于 08-31 17:45

    RK3588 Android系統(tǒng)編譯命令

    rk3588 代碼kernel內(nèi)核版本是5.10,Android 12,編譯命令如下:source build/envsetup.shlunch rk3588
    發(fā)表于 09-20 16:55

    RK3588 Android 12.0 SDK編譯步驟分享

    rk3588sevb1-lp4x-v10.img -j24單獨編譯uboot$ ./make.sh rk35882、固件燒寫升級工具版本:AndroidTool_Release_v
    發(fā)表于 09-20 17:11

    RK3588參數(shù)與主要特性 RK3588數(shù)據(jù)手冊解讀

    RK3588參數(shù)與主要特性 RK3588數(shù)據(jù)手冊解讀
    的頭像 發(fā)表于 05-19 18:34 ?1.5w次閱讀
    <b class='flag-5'>RK3588</b>參數(shù)與主要特性  <b class='flag-5'>RK3588</b><b class='flag-5'>數(shù)據(jù)</b>手冊解讀

    保姆級教程!RK3588 Linux6.1?固件簽名完整實現(xiàn)方案(不含rootfs)

    內(nèi)核)上實操固件簽名時,踩了不少官方文檔的坑,經(jīng)過反復(fù)調(diào)試終于打通全流程。今天就把這份實戰(zhàn)經(jīng)驗整理成保姆級教程,從配置到問題排查,一步步帶大家搞定 RK3588
    的頭像 發(fā)表于 01-14 17:21 ?2236次閱讀
    保姆級教程!<b class='flag-5'>RK3588</b> Linux6.1?<b class='flag-5'>固件</b>簽名完整實現(xiàn)方案(不含rootfs)
    肥乡县| 张家界市| 玛纳斯县| 锡林郭勒盟| 仁化县| 云阳县| 十堰市| 集贤县| 永济市| 凤冈县| 邓州市| 兴城市| 曲麻莱县| 洛隆县| 招远市| 资阳市| 阳高县| 梅河口市| 九江市| 临沧市| 佳木斯市| 贵德县| 莲花县| 乌鲁木齐县| 上思县| 隆化县| 甘孜县| 嵊州市| 澄江县| 绥滨县| 普格县| 湖口县| 钟山县| 道真| 洪泽县| 呈贡县| 积石山| 上栗县| 怀集县| 萨嘎县| 哈巴河县|