vb上位机usb hid
时间: 2023-07-29 19:14:55 浏览: 68
USB HID(人机接口设备)是一种用于在计算机和外部设备之间进行通信的协议。在VB上位机中使用USB HID需要使用一些特定的API函数来与USB设备进行通信。以下是一些参考步骤:
1. 使用Windows API函数创建HID设备的句柄。
2. 使用设备句柄读取和写入数据。
3. 使用设备句柄关闭HID设备。
下面是一个简单的示例代码,可用于读取HID设备的数据:
```vb
Private Declare Function HidD_GetHidGuid Lib "hid.dll" (ByRef HidGuid As Byte) As Long
Private Declare Function HidD_GetPreparsedData Lib "hid.dll" (ByVal HidDeviceObject As Long, ByRef PreparsedData As Long) As Long
Private Declare Function HidP_GetCaps Lib "hid.dll" (ByVal PreparsedData As Long, ByRef Capabilities As HIDP_CAPS) As Long
Private Declare Function HidD_FreePreparsedData Lib "hid.dll" (ByRef PreparsedData As Long) As Long
Private Declare Function HidD_GetAttributes Lib "hid.dll" (ByVal HidDeviceObject As Long, ByRef Attributes As HIDD_ATTRIBUTES) As Long
Private Declare Function HidD_GetSerialNumberString Lib "hid.dll" (ByVal HidDeviceObject As Long, ByVal Buffer As String, ByVal BufferLength As Long) As Long
Private Declare Function HidD_GetManufacturerString Lib "hid.dll" (ByVal HidDeviceObject As Long, ByVal Buffer As String, ByVal BufferLength As Long) As Long
Private Declare Function HidD_GetProductString Lib "hid.dll" (ByVal HidDeviceObject As Long, ByVal Buffer As String, ByVal BufferLength As Long) As Long
Private Declare Function HidD_SetFeature Lib "hid.dll" (ByVal HidDeviceObject As Long, ByRef ReportBuffer As Byte, ByVal ReportBufferLength As Long) As Long
Private Declare Function HidD_GetFeature Lib "hid.dll" (ByVal HidDeviceObject As Long, ByRef ReportBuffer As Byte, ByVal ReportBufferLength As Long) As Long
Private Declare Function HidD_GetNumInputBuffers Lib "hid.dll" (ByVal HidDeviceObject As Long, ByRef NumberBuffers As Long) As Long
Private Declare Function HidD_SetNumInputBuffers Lib "hid.dll" (ByVal HidDeviceObject As Long, ByVal NumberBuffers As Long) As Long
Private Declare Function HidD_GetInputReport Lib "hid.dll" (ByVal HidDeviceObject As Long, ByRef ReportBuffer As Byte, ByVal ReportBufferLength As Long) As Long
Private Declare Function HidD_SetOutputReport Lib "hid.dll" (ByVal HidDeviceObject As Long, ByRef ReportBuffer As Byte, ByVal ReportBufferLength As Long) As Long
Private Declare Function HidD_GetIndexedString Lib "hid.dll" (ByVal HidDeviceObject As Long, ByVal StringIndex As Long, ByVal Buffer As String, ByVal BufferLength As Long) As Long
Private Const HIDP_STATUS_SUCCESS = &H0
Private Const HIDP_CAPS = &H14
Private Const HIDP_INPUT_REPORT = &H1
Private Const HIDP_OUTPUT_REPORT = &H2
Private Type HIDP_CAPS
Usage As Integer
UsagePage As Integer
InputReportByteLength As Integer
OutputReportByteLength As Integer
FeatureReportByteLength As Integer
Reserved(21) As Integer
NumberLinkCollectionNodes As Integer
NumberInputButtonCaps As Integer
NumberInputValueCaps As Integer
NumberInputDataIndices As Integer
NumberOutputButtonCaps As Integer
NumberOutputValueCaps As Integer
NumberOutputDataIndices As Integer
NumberFeatureButtonCaps As Integer
NumberFeatureValueCaps As Integer
NumberFeatureDataIndices As Integer
End Type
Private Type HIDD_ATTRIBUTES
Size As Long
VendorID As Integer
ProductID As Integer
VersionNumber As Integer
End Type
Private Sub ReadHIDDevice()
Dim HidDeviceObject As Long
Dim PreparsedData As Long
Dim Capabilities As HIDP_CAPS
Dim Attributes As HIDD_ATTRIBUTES
Dim ReportBuffer(1023) As Byte
Dim ReportBufferLength As Long
Dim Result As Long
'获取HID设备的GUID
Dim HidGuid(15) As Byte
Result = HidD_GetHidGuid(HidGuid(0))
'打开HID设备的句柄
HidDeviceObject = CreateFile("\\.\HID#VID_XXXX&PID_XXXX#7&XXXXXXX&0&0000#{XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}", GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0)
'获取HID设备的属性
Result = HidD_GetAttributes(HidDeviceObject, Attributes)
'获取HID设备的预处理数据
Result = HidD_GetPreparsedData(HidDeviceObject, PreparsedData)
'获取HID设备的能力
Result = HidP_GetCaps(PreparsedData, Capabilities)
'读取输入报告
ReportBufferLength = Capabilities.InputReportByteLength
ReDim ReportBuffer(ReportBufferLength - 1)
Result = HidD_GetInputReport(HidDeviceObject, ReportBuffer(0), ReportBufferLength)
'关闭HID设备的句柄
CloseHandle(HidDeviceObject)
End Sub
```
请注意,代码中的HID设备GUID、文件路径、VendorID和ProductID需要根据实际情况进行更改。