ハードウェアイベントをプログラムに通知する方法は?

ハードウェアイベントをプログラムに通知する方法は?

私はイベントを無限に待つプログラムを書くのが好きです。この場合は、USBを接続して後続の操作を行います。

CやPythonで書く予定です。

問題は、イベントが発生したとき(USBデバイスに接続されている)プログラムにどのように通知するかです。

第二に、Pythonで実行されている場合、ループに加えてイベントを待つためにリソースをあまり使用する方法はありますか?

ベストアンサー1

Linuxではudev

  1. USBデバイスを識別するために使用されますudevadm info -a /dev/yourdevice。バラよりudevルールの作成

  2. デバイス情報に基づいてudevルールを作成します。

    SUBSYSTEM=="zzz", ATTRS{idVendor}=="xxx", ATTRS{idProduct}=="yyy",  RUN+="/usr/bin/my_signaler /dev/%k
    
  3. シグナルルーチンを作成します(私のudevルールでは次のようになります/usr/bin/my_sampler)。

    #! /bin/bash
    NEW_DEVICE="$1"
    TARGETS=$(pgrep program_name)
    for proc in $TARGETS
    do
        kill -s SIGUSR1 $proc
    done
    
  4. プログラムで処理するようにしてください。SIGUSR1

    #include <stdio.h>
    #include <signal.h> 
    #include <unistd.h>
    
    void wakeup(int sig) {
         printf("go check /dev" );
    }
    
    int main(void) {
        signal(SIGUSR1, wakeup);
    
        while (1) { 
            /* if the SIGUSR1 signal is received while sleep is waiting, sleep will return*/
            sleep(20);
        }
        return 0;
    }
    

おすすめ記事