USB デバイス用のカーネルスペース ドライバーを作成しました。接続されている場合、たとえば /dev/myusbdev0 にマウントされます。コマンド ラインで echo -en "command" > /dev/myusbdev0 を使用して、デバイスにコマンドを送信し、cat /dev/myusbdev0 で結果を読み取ることができます。
さて、C++ プログラムを書かなければなりません。最初に、次のように読み取り/書き込み用にデバイスファイルを開きます。
int fd = open("/dev/echo", O_RDRW);
その後、デバイスを動作させるためにコマンドが送信されます。
char cmd[] = { "\x02sEN LMDscandata 1\x03" };
write(fd, cmd, sizeof(cmd));
これで、まだ処理方法がわからない部分に到達します。データを継続的に送信し続けるため、デバイスから読み取る必要があります。このデータを今すぐ読み取って解析する必要があります...
char buf[512];
read(fd, buf, sizeof(buf);
データは次のようになります。それぞれが \x02 で始まり、\x03 で終わります。必ずしも同じサイズではありません。
sRA LMDscandata 1 1 89A27F 0 0 343 347 27477BA9 2747813B 0 0 7 0 0 1388 168 0 1 DIST1 3F800000 00000000 186A0 1388 15 8A1 8A5 8AB 8AC 8A6 8AC 8B6 8C8 8C2 8C9 8CB 8C4 8E4 8E1 8EB 8E0 8F5 908 8FC 907 906 0 0 0 0 0 0 すべての値は 20hex {SPC} で区切られています
\x03 を読み取るまで、\x02 から継続的にデータを読み取るには、ある種の while ループが必要だと思います。完全なスキャンがある場合は、この ascii メッセージを個別の部分 (いくつかの変数 uint_16、uint_8、enum_16 など) で解析する必要があります。
完全なスキャンを buf[] に読み込み、そのコンポーネントを解析する方法はありますか?