RK3288 USB触摸屏无法使用,需要添加PID和VID

 RK3288  Android5.1

 

现象:USB 接口触摸屏插到板子上,触摸屏无法使用,有可能出现更奇葩的,同一套代码,有的板子可以用,有的板子不能用。

 

1、打开串口调试,插上触摸屏,读取触摸屏的 PID(idVendor) 和 VID(idProduct)。

[   37.456833] usb 3-1.1.1: new full-speed USB device number 4 using usb20_host
[   37.558583] usb 3-1.1.1: New USB device found, idVendor=1ff7, idProduct=0013
[   37.558785] usb 3-1.1.1: New USB device strings: Mfr=1, Product=0, SerialNumber=0
[   37.558915] usb 3-1.1.1: Manufacturer: CVTouch
[   37.588785] input: CVTouch as /devices/ff540000.usb/usb3/3-1/3-1.1/3-1.1.1/3-1.1.1:1.0/input/input4
[   37.593900] hid-multitouch 0003:1FF7:0013.0001: input,hiddev0,hidraw0: USB HID v1.11 Pointer [CVTouch] on usb-ff540000.usb-1.1.1/input0

 

2、在 hid-ids.h 文件中定义此触摸屏的 PID 和 VID。

diff --git a/kernel/drivers/hid/hid-ids.h b/kernel/drivers/hid/hid-ids.h
index 45c593d..fe49ad2 100755
--- a/kernel/drivers/hid/hid-ids.h
+++ b/kernel/drivers/hid/hid-ids.h
@@ -235,9 +235,6 @@
 #define USB_VENDOR_ID_CREATIVELABS     0x041e
 #define USB_DEVICE_ID_PRODIKEYS_PCMIDI 0x2801
+ 
+#define USB_VENDOR_ID_CVTOUCH          0x1ff7
+#define USB_DEVICE_ID_CVTOUCH_SCREEN   0x0013

 #define USB_VENDOR_ID_CYGNAL           0x10c4
 #define USB_DEVICE_ID_CYGNAL_RADIO_SI470X      0x818a

 

3、将定义的 PID 和 VID 添加到 HID 特殊设备数组中。

diff --git a/kernel/drivers/hid/hid-core.c b/kernel/drivers/hid/hid-core.c
index 2bd798a..250fc52 100755
--- a/kernel/drivers/hid/hid-core.c
+++ b/kernel/drivers/hid/hid-core.c
@@ -2223,6 +2223,7 @@ static const struct hid_device_id hid_ignore_list[] = {
        { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_1_PHIDGETSERVO_20) },
        { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_8_8_4_IF_KIT) },
        { HID_USB_DEVICE(USB_VENDOR_ID_YEALINK, USB_DEVICE_ID_YEALINK_P1K_P4K_B2K) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_CVTOUCH, USB_DEVICE_ID_CVTOUCH_SCREEN) },
        { }
 };

 

转载于:https://www.cnblogs.com/lialong1st/p/9203710.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用WINUSB读取GUID,您需要执行以下步骤: 1. 打开设备 使用WinUsb_Initialize函数打开设备并获得设备句柄。您需要提供设备的PIDVID。 2. 获取GUID描述符 使用WinUsb_QueryDeviceInformation函数获取设备的GUID描述符。您需要指定GUID描述符的索引号。 3. 读取GUID 使用WinUsb_ReadPipe函数从设备中读取GUID。您需要指定读取的管道和缓冲区的大小。 以下是一个简单的代码示例,可帮助您开始使用WINUSB读取GUID: ```C++ #include <windows.h> #include <winusb.h> #include <setupapi.h> #include <devguid.h> #define GUID_INDEX 1 #define BUFFER_SIZE 16 int main() { // 打开设备 GUID guid; HDEVINFO hdevinfo = NULL; SP_DEVICE_INTERFACE_DATA interface_data; SP_DEVINFO_DATA devinfo_data; WINUSB_INTERFACE_HANDLE winusb_handle; BOOL result; // 获取设备信息 hdevinfo = SetupDiGetClassDevs(&GUID_DEVCLASS_USB, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); if (hdevinfo == INVALID_HANDLE_VALUE) { printf("Failed to get device info\n"); return 1; } // 枚举设备 interface_data.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA); result = SetupDiEnumDeviceInterfaces(hdevinfo, NULL, &GUID_DEVCLASS_USB, 0, &interface_data); if (!result) { printf("Failed to enum device interfaces\n"); return 1; } // 获取设备路径 DWORD required_size; result = SetupDiGetDeviceInterfaceDetail(hdevinfo, &interface_data, NULL, 0, &required_size, NULL); if (!result && GetLastError() != ERROR_INSUFFICIENT_BUFFER) { printf("Failed to get device interface detail\n"); return 1; } PSP_DEVICE_INTERFACE_DETAIL_DATA interface_detail_data; interface_detail_data = (PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(required_size); interface_detail_data->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA); result = SetupDiGetDeviceInterfaceDetail(hdevinfo, &interface_data, interface_detail_data, required_size, NULL, NULL); if (!result) { printf("Failed to get device interface detail\n"); return 1; } // 打开 WinUSB 设备 HANDLE device_handle = CreateFile(interface_detail_data->DevicePath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL); if (device_handle == INVALID_HANDLE_VALUE) { printf("Failed to open device\n"); return 1; } // 初始化 WinUSB result = WinUsb_Initialize(device_handle, &winusb_handle); if (!result) { printf("Failed to initialize WinUSB\n"); CloseHandle(device_handle); return 1; } // 获取 GUID 描述符 UCHAR guid_descriptor[BUFFER_SIZE]; ULONG guid_descriptor_length = BUFFER_SIZE; result = WinUsb_QueryDeviceInformation(winusb_handle, DeviceUxdGuid, &guid_descriptor_length, guid_descriptor); if (!result) { printf("Failed to query GUID descriptor\n"); WinUsb_Free(winusb_handle); CloseHandle(device_handle); return 1; } // 读取 GUID UCHAR guid_data[BUFFER_SIZE]; ULONG guid_length = BUFFER_SIZE; result = WinUsb_ReadPipe(winusb_handle, 0x81, guid_data, guid_length, NULL, NULL); if (!result) { printf("Failed to read GUID\n"); WinUsb_Free(winusb_handle); CloseHandle(device_handle); return 1; } // 关闭设备 WinUsb_Free(winusb_handle); CloseHandle(device_handle); return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值