這篇將摘要說明 V-USB custom-class 範例的程式碼。要讀這篇,讀者必須對 USB 有足夠的認識。
customer-class 分成兩個部份:韌體和 PC 端的指令列工具 (commandline)
韌體
usbconfig.h
usbconfig.h 是 V-USB 的設定檔,每個 V-USB 的程式都會從 V-USB 的 usbconfig-prototype.h 複製過來並改名為 usbconfig.h 然後根據自己的硬體調整設定。
底下是 custom-class 對 usbconfig.h 所做的調整:
- USB_CFG_IOPORTNAME, USB_CFG_DMINUS_BIT and USB_CFG_DPLUS_BIT
這些設定 USB bus D+ 和 D- 所用的接腳。預設是:
#define USB_CFG_IOPORTNAME D
#define USB_CFG_DMINUS_BIT 4
#define USB_CFG_DPLUS_BIT 2
- USB_CFG_VENDOR_ID and USB_CFG_DEVICE_ID
這些設定 VID 和 PID。預設是:
#define USB_CFG_VENDOR_ID 0xc0, 0x16
#define USB_CFG_DEVICE_ID 0xdc, 0x05資料表示方式是 low byte first,VID 0x16c0 和 PID 0x05dc 是 obdev 提供的共享 VID/PID。
- USB_CFG_DEVICE_NAME and USB_CFG_DEVICE_NAME_LEN
這些設定 Device Name 和資料長度,custom-class 把 Device Name 設成 "LEDControl",資料長度是 10:
#define USB_CFG_DEVICE_NAME 'L', 'E', 'D', 'C', 'o', 'n', 't', 'r', 'o', 'l'
#define USB_CFG_DEVICE_NAME_LEN 10
- USB_CFG_DEVICE_CLASS = 0xff
這個設定 Device Class。USB 定義了一些常用的 device class,你可以在 USB Class Codes 這個頁面中找到。0xff 代表的是 "Vendor Specific",也就是廠商自行定義的 function。