Если это поможет, вот часть кода:
В отдельном модуле (CP210x_Main) объявил функции:
| Код | Public Declare Function CP210x_SetSerialNumber Lib "CP210xManufacturing.dll" (ByVal cyHandle As Long, ByRef lpSerialNumber As Byte, bLength As Long, bConvertToUnicode As Boolean) As Integer Public Declare Function CP210x_SetVid Lib "CP210xManufacturing.dll" (ByVal cyHandle As Long, wVid As Long) As Integer Public Declare Function CP210x_SetPid Lib "CP210xManufacturing.dll" (ByVal cyHandle As Long, wPid As Long) As Integer
Public Declare Function CP210x_GetDeviceVid Lib "CP210xManufacturing.dll" (ByVal cyHandle As Long, ByRef wVid As Long) As Integer Public Declare Function CP210x_GetDevicePid Lib "CP210xManufacturing.dll" (ByVal cyHandle As Long, ByRef wPid As Long) As Integer Public Declare Function CP210x_GetDeviceSerialNumber Lib "CP210xManufacturing.dll" (ByVal cyHandle As Long, ByRef lpSerialNumber As Byte, ByRef bLength As Long, bConvertToUnicode As Boolean) As Integer
|
В этом же модуле на основании даташита объявил константы:
| Код | Public Const CP210x_RETURN_SERIAL_NUMBER = &H0 Public Const CP210x_RETURN_DESCRIPTION = &H1 Public Const CP210x_RETURN_FULL_PATH = &H2
Public Const CP210x_SUCCESS = &H0 Public Const CP210x_DEVICE_NOT_FOUND = &HFF Public Const CP210x_INVALID_HANDLE = &H1 Public Const CP210x_INVALID_PARAMETER = &H2 Public Const CP210x_DEVICE_IO_FAILED = &H3
'Максимальная длинна строки Public Const CP210x_MAX_DEVICE_STRLEN = 256 Public Const CP210x_MAX_PRODUCT_STRLEN = 126 Public Const CP210x_MAX_SERIAL_STRLEN = 63 Public Const CP210x_MAX_MAXPOWER = 250 Public Const CP210x_MAX_PID = 4
Public Const INVALID_HANDLE_VALUE = &H1
|
В другом модуле ( modMain ) определил переменные:
| Код | Global devNum As Long Global hUSBDevice As Long Global hUSBDevice2 As Long Global Status As Integer Global SpeedDevice As Long Global SpeedLock As Long Global DeviceNum As Long Global DeviceString(CP210x_MAX_PRODUCT_STRLEN) As Byte 'Global DeviceOption As Long
Global SerialLength2 As Long Global SerialLingthProduct As Long Global SerialString(CP210x_MAX_SERIAL_STRLEN) As Byte Global ConvertArray2(CP210x_MAX_SERIAL_STRLEN) As Byte Global ConvertProduct2(CP210x_MAX_PRODUCT_STRLEN) As Byte Global ConvertPid(CP210x_MAX_PID) As Byte Global NewSerialNumber As String Global NewSerialProduct As String Global NewPid As Long Global Pid2 As Long Global CodTex As Variant
|
В форме ( FormMain ) код для получения всей информации от устройства:
| Код | Public Sub GetDeviceData()
Dim CR As String CR = Chr(13) + Chr(10) Dim Vid As Long Dim Pid As Long Dim SerialLength As Long Dim DeviceOption As Long DeviceNum = 0 SerialLength = 0 DeviceOption = 0 Dim TempString As String TempString = "" Dim i For i = 0 To devNum - 1 Status = CP210x_Open(i, hUSBDevice) If Status = CP210x_SUCCESS Then Status = CP210x_GetDeviceVid(hUSBDevice, Vid) If Status = CP210x_SUCCESS Then Status = CP210x_GetDevicePid(hUSBDevice, Pid) If Status = CP210x_SUCCESS Then Status = CP210x_GetDeviceProductString(hUSBDevice, DeviceString(0), DeviceOption, True) If Status = CP210x_SUCCESS Then Status = CP210x_GetDeviceSerialNumber(hUSBDevice, SerialString(0), SerialLength, True) If Status = CP210x_SUCCESS Then Status = CP210x_Close(hUSBDevice) TempString = TempString + "Found Device: VID=" + Hex(Vid) + ", PID=" + Hex(Pid) + CR TempString = TempString + "Serial Num= " + ConvertToString(SerialString(), SerialLength) + CR TempString = TempString + "Product String= " + ConvertToProduct(DeviceString(), DeviceOption) + CR Text2.Text = Hex(Vid) Text3.Text = Hex(Pid) Text1.Text = ConvertToString(SerialString(), SerialLength) End If Status = CP210x_Close(hUSBDevice) End If Status = CP210x_Close(hUSBDevice) End If Status = CP210x_Close(hUSBDevice) End If Status = CP210x_Close(hUSBDevice) End If Status = CP210x_Close(hUSBDevice) Dim Port As Integer Dim WinVersion As Long
Next DataText.Text = TempString + CR + CR i = 0 For i = 0 To SerialLength - 1 SerialString(i) = 0 Next i = 0 For i = 0 To DeviceOption - 1 DeviceString(i) = 0 Next End Sub
Public Function ConvertToString(ConvertArray() As Byte, ConvertLength As Long) As String
Dim ConvertString As String ConvertString = "" Dim i For i = 0 To ConvertLength - 1 ConvertString = ConvertString + Chr$(ConvertArray(i)) Next ConvertToString = ConvertString End Function
|
В форме ( FormMain ) код для настройки требуемых параметров:
| Код | Private Sub SetDeviceSeria()
Dim CheckPro As String Dim SerialString2(CP210x_MAX_SERIAL_STRLEN) As Byte Dim SerialProduct2(CP210x_MAX_PRODUCT_STRLEN) As Byte Dim PidLength As Long Dim ind As String Dim SerialByte As Long Dim NewPidDevice As String
CheckPro = 0 CodTex = Chr$(127) Text6.Text = ""
NewSerialProduct = Text8.Text NewSerialNumber = Text4.Text NewPidDevice = Text3.Text
hUSBDevice = INVALID_HANDLE_VALUE SerialLength2 = Len(NewSerialNumber) SerialLingthProduct = Len(NewSerialProduct) PidLength = Len(NewPidDevice) Pid2 = &H83C4& Pid2 = 33732
Call ConvertToPid(NewPidDevice, PidLength) Call ConvertToByte(NewSerialNumber, SerialLength2) Call ConvertToNewProduct(NewSerialProduct, SerialLingthProduct) 'SerialProduct2(0) ind = 0
Status = CP210x_Open(ind, hUSBDevice) If Status = CP210x_SUCCESS Then Status = CP210x_SetSerialNumber(hUSBDevice, ConvertArray2(0), SerialLength2, True) If Status = CP210x_SUCCESS Then Status = CP210x_SetProductString(hUSBDevice, ConvertProduct2(0), SerialLingthProduct, True) If Status = CP210x_SUCCESS Then Status = CP210x_SetPid(hUSBDevice, Pid2) If Status = CP210x_SUCCESS Then Status = CP210x_Reset(hUSBDevice) CheckPro = CheckPro + 1 If Status = CP210x_SUCCESS Then Status = CP210x_Close(hUSBDevice) End If 'CP210x_Close (hUSBDevice) 'End If Status = CP210x_Close(hUSBDevice) End If Status = CP210x_Close(hUSBDevice) End If Status = CP210x_Close(hUSBDevice) End If If Not CheckPro = 0 Then Text7.Text = "SUCCESS" Text7.BackColor = (&HFF00&) GoTo EndCheck End If Text7.Text = "ERROR" Text7.BackColor = (&HFF&) EndCheck: Call GetDeviceData End Sub
Public Function ConvertToNewProduct(ConvertStringProductArray As String, ConvertLengthStringProduct As Long) As Byte
Dim i For i = 1 To ConvertLengthStringProduct ConvertProduct2(i - 1) = Asc(Mid(ConvertStringProductArray, i, ConvertLengthStringProduct)) Next End Function Public Function ConvertToPid(ConvertPidArray As String, ConvertLengthPid As Long) As Byte
Dim i For i = 1 To ConvertLengthPid ConvertPid(i - 1) = Asc(Mid(ConvertPidArray, i, ConvertLengthPid)) Next End Function
Public Function ConvertToByte(ConvertString2 As String, ConvertLength2 As Long) As Byte
Dim CheckString As String Dim i For i = 1 To ConvertLength2 ConvertArray2(i - 1) = Asc(Mid(ConvertString2, i, ConvertLength2)) Next End Function
|
|