Androidデバイスノード照会およびデバイス情報読み出し

1667 ワード

先日、また新しいプロジェクトを开いて、1つのUSB dongleのバージョン番号の情报を読み取る时読み取れないことを発见して、最后に1つの新しいdongleであることを発见します
次に、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;