4

Android Gingerbread をカスタム ボード (Samsung S5PV210 プロセッサを搭載) に移植しています。ESC7000 チップを搭載したタッチ スクリーンを使用しています。/kernel/drivers/input/touchscreen/usbtouchscreen.c でドライバーを見つけました。ほとんど機能しましたが、USB パケットのビット範囲、順序、およびバイト順序が適切ではありませんでした。正しい RAW 位置を取得するようにコードを変更しました (コンソールで printk を使用して確認しました) が、ほとんど機能するようになりました。xmin、ymin から xmax、ymax までの私のデータ範囲は 420,430 から 3650, 3650 ですが、理論的には 0,0 から 4095,4095 である必要があります。静電容量式タッチにはキャリブレーションが必要なため、これは驚くべきことではありません。これは、各軸の y=mx+b のような単純なキャリブレーションです (単純な線形キャリブレーション)。ドライバーを調べてみましたが、キャリブレーションがどこで処理されているのかわかりません。プログラム可能である必要があります。s はユニットに依存し、システムの製造時に各ユニットに対して 1 回校正する必要があります。他のAndroid端末と同じようにきれいにしたい。キャリブレーション情報が Android システムのどこに保存されているか知っている人はいますか? 補償計算を行うコードはどこにありますか。それについてのウェブ検索は、自分の電話を再調整したい人々に関する情報を提供します. だから私には駄目です。

4

1 に答える 1

3

次のスレッドをご覧ください: https://groups.google.com/forum/#!msg/rowboat/jlbwnmCIDg0/makHFil31pQJ

EVM では、キャリブレーションされた値 (または、Xmin/max、Ymin/max、および XY 解像度のハードコードされた値) をドライバーからユーザー空間に渡します。

生のイベントはここで処理されますframeworks/base/libs/ui/InputReader.cpp

SingleTouchInputMapper::process(const RawEvent* rawEvent)シングル タッチ デバイスの raw イベントを処理します。ABS_X と ABS_Y はドライバーから渡された値 であり、以前のメールでお伝えしたように、これらはこの場合の絶対座標です。

私が間違っている場合は訂正してください。私の知る限り、Android フォンにはユーザー空間からキャリブレーションを行うメカニズムがありません。ドライバー自体からキャリブレーション値を送信することは、Android フォンの一種の標準です。

私が提案するのは、tslib を使用して調整し、値を /etc/pointercal に保存することです。SingleTouchInputMapper::sync(nsecs_t when)/etc/pointercal ファイルの値を解析して絶対座標を計算します。

于 2011-09-21T12:14:19.510 に答える