Cách thức để chỉ ra một thiết bị thuộc lớp HID

Một phần của tài liệu đồ án tốt nghiệp chuẩn giao tiếp usb (Trang 51 - 55)

Chương 5: Lớp thiết bị giao diện người sử dụng

5.4 Cách thức để chỉ ra một thiết bị thuộc lớp HID

Với bất kỳ thiết bị USB nào thuộc lớp HID thì các bộ mơ tả của nó chỉ cho máy chủ cái máy chủ cần biết để giao tiếp với thiết bị. Máy chủ tìm hiểu về giao diện HID trong suốt quá trình thiết lập bằng cách gửi một yêu cầu Get_Descriptor. Các bộ mô tả của một thiết bị thuộc lớp HID bao gồm: Bộ mô tả thiết bị (Device Descriptor), bộ mơ tả cấu hình (Configuration Descriptor), bộ mô tả giao diện (Interface Descriptor), bộ mô tả HID (HID Descriptor), bộ mô tả điểm cuối ngắt vào (IN interrupt Enpoint Descriptor), bộ mô tả điểm cuối ngắt ra (OUT Interrupt Endpoint Descriptor) và bộ mô tả điểm cuối ngắt đặc

biệt (Feature Interrupt Endpoint Descriptor). Hai bộ mơ tả sau cùng là tuỳ chọn (tức có thể có hoặc khơng). Ngồi các bộ mơ tả vừa liệt kê ở trên thiết bị thuộc lớp HID còn phải có một bộ mơ tả nữa đó là bộ mơ tả Report (bộ mơ tả Report sẽ được nói cụ thể sau). Sau đây là một ví dụ về các bộ mô tả cho một thiết bị thuộc lớp HID của một nhà cung cấp [2].

{

// Device Descriptor

0x12, // Descriptor size in bytes 0x01, // Descriptor type (Device)

0x0200, // USB Specification release number (BCD) (2.00) 0x00, // Class Code

0x00, // Subclass code 0x00, // Protocol code

0x08, // Endpoint 0 maximum packet size 0x0925, // Vendor ID (Lakeview Research)

0x1234, // Product ID

0x0100, // Device release number (BCD) 0x01, // Manufacturer string index 0x02, // Product string index

0x00, // Device serial number string index 0x01 // Number of configurations

// Configuration Descriptor

0x09, // Descriptor size in bytes

0x02, // Descriptor type (Configuration)

0x0029, // Total length of this and subordinate descriptors 0x01, // Number of interfaces in this configuration 0x01, // Index of this configuration

0x00, // Configuration string index

0xA0, // Attributes (bus powered, remote wakeup supported) 0x50, // Maximum power consumption (100 mA)

// Interface Descriptor

0x09, // Descriptor size in bytes 0x04, // Descriptor type (Interface) 0x00, // Interface Number

0x00, // Alternate Setting Number

0x02, // Number of endpoints in this interface 0x03, // Interface class (HID)

0x00, // Interface subclass 0x00, // Interface protocol 0x00, // Interface string index // HID Descriptor

0x09, // Descriptor size in bytes 0x21, // Descriptor type (HID)

0x00, // Country code

0x01, // Number of subordinate class descriptors 0x22, // Descriptor type (report)

002F, // Report descriptor size in bytes // IN Interrupt Endpoint Descriptor

0x07, // Descriptor size in bytes 0x05, // Descriptor type (Endpoint)

0x81, // Endpoint number and direction (1 IN) 0x03, // Transfer type (interrupt)

0x40, // Maximum packet size

0x0A, // Polling interval (milliseconds) // OUT Interrupt Endpoint Descriptor

0x07, // Descriptor size in bytes 0x05, // Descriptor type (Endpoint)

0x01, // Endpoint number and direction (1 OUT) 0x03, // Transfer type (interrupt)

0x40, // Maximum packet size

0x0A // Polling interval (milliseconds) }

Trong ví dụ trên, ta thấy dịng thứ sáu của bộ mơ tả giao diện (Interface Descriptor) có giá trị là 03 h để chỉ ra giao diện của thiết bị là giao diện của một HID. Các trường khác đáng lưu ý trong bộ mô tả giao diện là trường subclass và protocol ở các dòng thứ 7 và 8. Nếu bit subclass=1 thì có nghĩa là thiết bị hỗ trợ giao diện khởi động. Một HID với giao diện khởi động sẽ có thể thực hiện một phần chức năng của mình khi mà driver của nó chưa được máy chủ tải đến. Hồn cảnh này có thể xuất hiện khi máy tính khởi động trực tiếp từ DOS hoặc khi sử dụng chế độ an toàn (safe mode) của Windows để gỡ lỗi hệ thống. Một bàn phím hoặc con chuột với giao diện khởi động có thể sử dụng

(BIOS) của nhiều máy tính chủ. Trường protocol=1 tức là thiết bị hỗ trợ giao diện bàn phím cịn nếu bằng 2 thì thiết bị hỗ trợ giao diện con chuột.

Bộ mô tả HID (HID Descriptor) là bộ mô tả được bổ sung cho lớp HID. Bộ mơ tả này có thể có 7 trường hoặc nhiều hơn tuỳ thuộc vào số lượng các bộ mô tả được thêm vào cho thiết bị:

- Trường bLength có kích thước 1 byte cho biết độ dài của bộ mơ tả

HID tính theo byte.

- Trường bDescriptorType có giá trị là 21h để chỉ ra bộ mô tả này là bộ mô tả HID.

- Trường bcdHID có kích thước 2 byte để chỉ ra phiên bản USB mà thiết bị tuân theo.

- Trường bCountryCode, Nếu thiết bị được sử dụng chỉ trong phạm vi

địa lý của một nước nào đó thì trường này sẽ mang mã của quốc gia đó (Đặc tả HID có danh sách mã của các nước). Nếu việc sử dụng

thiết bị không phụ thuộc vào vị trí địa lý thì trường này có giá trị 00h - Trường bNumDescriptors chỉ ra số lượng các bộ mô tả lớp thuộc cấp

dưới của bộ mô tả này.

- Trường bDescriptorType chỉ ra loại của bộ mô tả thuộc cấp dưới của bộ mô tả này. (Ví dụ như trường này có giá trị 22h để chỉ ra rằng bộ mô tả cấp dưới của nó là bộ mơ tả Report)

- wDescriptorLength cho biết kích thước tổng cộng của các bộ mơ tả

đã được mơ tả trước nó và phần kích thước kể từ đầu cho đến trường

này của bộ mơ tả HID.

Nếu thiết bị có thêm một bộ mơ tả vật lý (physical descriptor) thì bộ mơ tả HID sẽ có thêm hai trường nữa được liệt kê lần lượt là:

- bDescriptorType có giá trị là 23h để chỉ ra bộ mô tả cấp dưới là bộ mô tả vật lý.

- wDescriptorLength cho biết tổng kích thước của các bộ mơ tả đã được mơ tả tính từ đầu cho đến hết trường này.

Một phần của tài liệu đồ án tốt nghiệp chuẩn giao tiếp usb (Trang 51 - 55)

Tải bản đầy đủ (PDF)

(71 trang)