2010-01-18 11 views
5

Tôi có một số thiết bị quét mã vạch có thể xử lý nhiều giao diện USB (Giao diện COMM, Bàn phím HID, HID POS, v.v.) Vấn đề là, trong khi tôi có thể cho biết nếu thiết bị đang ở trong một chế độ HID, tôi cần để có thể xác định nếu nó HID Keyboard hoặc HID POS.Xác định giao diện HID là POS hoặc Bàn phím trong C++

Có cách nào để xác định điều này bằng cách sử dụng Win32 C++, tốt nhất là với thư viện HID được xây dựng trong cửa sổ (hidsdi.h)?

Trả lời

3

Bạn có thể sử dụng HidD_GetHidGuid để nhận GUID duy nhất cho thiết bị. Các giao diện thiết bị được xác định bởi từng nhà cung cấp phần mềm ứng dụng/thiết bị, Microsoft hoặc bên thứ ba khi họ thấy phù hợp. Trong một số trường hợp, các hướng dẫn được công bố và hiểu biết công khai và là các giao diện chuẩn, trong một số trường hợp chúng không có.

Bạn cũng có thể sử dụng USBView utility từ Microsoft sẽ cho phép bạn duyệt cây USB hoặc bạn có thể tìm trong sổ đăng ký và xem liệu bạn có thể tìm GUID cho thiết bị của mình hay không. Bạn vẫn có thể phải query thiết bị của mình để xác định loại thiết bị nếu dữ liệu cấu hình không hiện diện hoặc nó không tự tiết lộ ngoài thiết bị chung, nếu thiết bị của bạn hỗ trợ thiết bị này.

Có hai loại GUID: Lớp thiết bị và Giao diện thiết bị. Một thiết bị chỉ có thể là một phần của một lớp. Thật không may, các thiết bị Class và Device Interface GUID đôi khi giống nhau, do đó gây nhầm lẫn cho các nhà phát triển. Trong DDX của WinXP, các tiêu chuẩn được tạo ra để thử và làm cho định nghĩa của GUIDs ít khó hiểu hơn.

Xem thêm này trước SO câu hỏi: Use RegisterDeviceNotification() for ALL USB devices.

+0

Điều đó có thể hoạt động, nhưng có danh sách GUID ở đâu đó không? GUID sẽ không có ý nghĩa gì với tôi. –

+0

xem chỉnh sửa [15 ký tự] –

+0

PID thiết bị thay đổi trên đầu đọc mã vạch của tôi tùy thuộc vào chế độ cáp USB đang hoạt động. HTH –

1

Dưới đây là danh sách các Guids HID có thể: http://msdn.microsoft.com/en-us/library/ms791134.aspx và sử dụng HidD_GetHidGuid như Roboto gợi ý

+0

Ok, gần hơn bây giờ, nhưng danh sách đó chỉ bao gồm một mục cho HID, nhưng tôi cần HID POS vs HID Keyboard. POS là hai chiều và bàn phím là một chiều, vì vậy chúng hoàn toàn khác nhau. Có lẽ điều này không thể được xác định với HidD_GetHidGuid? –

+0

Bạn nhận được GUID nào trong chế độ POS và chế độ Bàn phím? Là giống nhau? –

+0

Có, nó giống nhau và được liệt kê ở đây: http://msdn.microsoft.com/en-us/library/bb663084.aspx Chỉ dành cho HID nói chung –

1

Bạn sẽ cần phải sử dụng các chức năng HidP_ để kiểm tra các báo cáo HID khả năng. Tìm hiểu khả năng (usages) được trình bày bởi thiết bị HIDPOS, và kiểm tra xem những tập quán đó có hiện diện bằng cách sử dụng HidD_GetPreparsedData(), HidP_GetCaps() và sau đó HidP_GetValueCaps (và/hoặc ..ButtonCaps, v.v.). Một nơi tốt để tìm kiếm các ví dụ là Jan Axelson's page. Nếu các tập quán có mặt, thì bạn đã có thiết bị POS. Nếu không, thì đó phải là bàn phím (giả sử bạn đã xác nhận thiết bị được đính kèm.)