Androidデバイスノード照会およびデバイス情報読み出し
1667 ワード
先日、また新しいプロジェクトを开いて、1つのUSB dongleのバージョン番号の情报を読み取る时読み取れないことを発见して、最后に1つの新しいdongleであることを発见します
次に、nativeレイヤのC++アプリケーションを変更する必要があります.
1.最初に/devディレクトリのhidrawデバイスノードを見てみましょう.
2.次に、各デバイスノードについて、条件を満たすデバイスであるか否かを判定する.
後でデバイス情報を検出すると,新しいデバイスであることが判明し,新しいデバイスのノード情報を取得できるため,このdongleの検出条件をプログラムに追加して検出できるようにした.
通信プロトコルは同じなので、このデバイスを追加すると、同じ通信プロトコルでdongle情報を取得するコマンドをデバイスノードに書き、ファイルIOで結果を得ることができます.
次に、nativeレイヤのC++アプリケーションを変更する必要があります.
1.最初に/devディレクトリのhidrawデバイスノードを見てみましょう.
fd = open(DEVICE_NFC_PATH, O_RDWR /*| O_NONBLOCK*/);
if (fd < 0){
printf("Maybe the device have been reboot
");
int i = 0;
for ( ;i < 20; i++) {
sprintf(filename, "/dev/hidraw%d", i);
printf("
print filename =%s
",filename);
fd = open(filename, O_RDWR /*| O_NONBLOCK*/);
if (fd < 0){
printf("can't find the device !!
");
return 0;
}
if (freespace_checkDeviceInfo(fd , filename )) {
printf("Found Freespace device interface.
");
return 1;
}
close(fd);
}
}
else if (freespace_checkDeviceInfo(fd , filename )) {
printf("Found Freespace device interface.
");
return 1;
}
2.次に、各デバイスノードについて、条件を満たすデバイスであるか否かを判定する.
int rc = ioctl(hid_device->_fd, HIDIOCGRAWINFO, &info);
if (rc < 0) {
perror("HIDIOCGRAWINFO");
goto fail;
}
printf("HID device info %04x:%04x:%04x is
", info.bustype,info.vendor, info.product);
後でデバイス情報を検出すると,新しいデバイスであることが判明し,新しいデバイスのノード情報を取得できるため,このdongleの検出条件をプログラムに追加して検出できるようにした.
通信プロトコルは同じなので、このデバイスを追加すると、同じ通信プロトコルでdongle情報を取得するコマンドをデバイスノードに書き、ファイルIOで結果を得ることができます.
rc=fdp_->waitForReadReady(1000, &readReady);
if(readReady)
rc = read(fd_, ProRdBuf, sizeof(ProRdBuf));
if(rc<0){
printf("can't read dongle's version
");
return -1;
}
_cmd->_return_value = ProRdBuf;