Forlinx RK3568 SoM 自動スクリーンオフ構成プログラムの実装

ソフトウェアバージョン: Linux 4.19

設計アイデア: 画面タッチ イベントを検出して、画面が自動ブレーク アプリケーションで使用されているかどうかを判断します。画面が入力イベントを検出すると、オンのままになります。一定期間タッチ イベントが受信されない場合、画面はオンから薄暗くなった状態に移行し、画面オフ モードに入ろうとしていることをユーザーに思い出させます。調光後にタッチイベントが発生しない場合、画面は画面オフモードに入ります。再度タッチイベントが発生すると、画面は画面オフモードからオン状態に遷移します。

現在、自動スクリーンオフを実装するアプローチは、タッチ イベントを使い慣れたボードに適用できる固定パスとして扱うことです。アプリケーションの利便性を高めるために、以下に 2 つの追加の代替アプローチが提供されています。

▊ 最初の実装方法

evtest コマンドを適用して、/dev/input/event1 へのパスを取得できます (event1 はボード上のタッチ イベントの名前です)。その後、パスをパラメータとしてプログラムに渡すことができます。

たとえば、コマンドライン引数を受け入れるようにプログラムを変更して、開くデバイス ファイルのパスを指定できます。

int argc, char *argv[];

デバイスファイルパスとして渡されたパラメータを使用してファイルを開きます

int fd = open(argv[1], O_RDONLY);

次のように、/dev/input/event1 をコマンドライン引数として渡して、プログラムをコンパイルして実行できます。

./your_program /dev/input/event1

▊ 2 番目の実装方法は、デバイス ツリー内の画面タッチ ノードを修正することです。

デバイス ツリーでスクリーン タッチ ノードを探し、そのアドレスをメモします。

I2C バスでは、タッチ ノードのアドレスは単純に 2-0038 です。

したがって、grep を使用して、アドレスに基づいてタッチ ノードをフィルタリングできます。

ls -l /sys/class/input | grep "0038" | awk -F ' ' '{print $9}' | grep「イベント」

次のコマンドは、タッチ アドレスに基づいてタッチ イベントを見つけるためにアプリケーションで使用されます。

char *command_output = exec("ls -l /sys/class/input | grep '0038' | awk -F ' ' '{print $9}' | grep 'event'");
Use the sprintf function to splice the path containing the event, and then read the event. 
   Examples of using Sprintf: int main() {
    char str[100];
    int num = 123;
float f = 3.14;
    //Write the formatted data to the string
    sprintf(str, "%d%.2f", num, f);
    //print the generated string
    printf("The output is. %s\n", str);
    return 0;
}

 

元は www.forlinx.net で公開されています。

www.forlinx.net

www.forlinx.net