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

Một phần của tài liệu Tìm hiểu chuẩn USB 2.0 (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ỉ ram ộ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). Ngoà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. Hoà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 một giao thức đã được đơn giản hoá được hỗ trợ bởi hệ thống vào ra cơ sở

(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ả đã

Một phần của tài liệu Tìm hiểu chuẩn USB 2.0 (Trang 51 - 55)

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

(71 trang)