Cómo realizar la transmisión y lectura de datos del puerto USB bajo VB
VERSIÓN 5.00
Comenzar VB.Form frmMain
Caption = "USB completo"
ClientHeight = 4392
ClientLeft = 252
ClientTop = 336
ClientWidth = 6132
LinkTopic = "Form1"
ScaleHeight = 4392
ScaleWidth = 6132
Inicio VB.Timer tmrContinuousDataCollect
Izquierda = 120
Arriba = 3960
Fin
Begin VB.Frame fraSendAndReceive
Caption = "Enviar y recibir datos"
Alto = 1692
Izquierda = 3960
TabIndex = 7
Superior = 120
Ancho = 2052
Comenzar VB.CommandButton cmdContinuous
Título = "Continuo"
Alto = 372
Izquierda = 360
TabIndex = 9
Arriba = 1080
Ancho = 1452
Fin
Comienzo VB.CommandButton cmdOnce
Caption = "Once"
Alto = 372
Izquierda = 360
TabIndex = 8
Superior = 360
Ancho = 1452
Fin
Fin
Comenzar VB.Frame fraBytesReceived
Caption = "Bytes recibidos"
Alto
= 1692
Izquierda = 2400
TabIndex = 4
Superior = 120
Ancho = 1452
Inicio VB.TextBox txtBytesReceived
Alto = 732
Izquierda = 360
MultiLine = -1 'True
TabIndex = 5
Top = 600
Ancho = 732
Fin
Fin
Comenzar VB.Frame fraBytesToSend
Título = "Bytes para enviar"
Alto = 1692
Izquierda = 120
TabIndex = 1
Arriba = 120
Ancho = 2172
Comenzar VB.CheckBox chkAutoincrement
Título = "Valores de incremento automático"
Alto = 372
Izquierda = 240
TabIndex = 6
Arriba = 1200
Ancho = 2412
Fin
Inicio VB.ComboBox cboByte1
Alto = 288
Izquierda = 240
Estilo = 2 'Lista desplegable
TabIndex = 3
Superior = 840
Ancho = 1212
Fin
Inicio VB.ComboBox cboByte0
Alto = 288
Izquierda = 240
Orzuelo
le = 2 'Lista desplegable
TabIndex = 2
Superior = 360
Ancho = 1212
Fin
Fin
Comenzar VB.Timer tmrDelay
Habilitado = 0 'Falso
Izquierda = 120
Arriba = 11400
Fin
Inicio VB.ListBox lstResults
Alto = 2352
Izquierda = 120
TabIndex = 0
Superior = 1920
Ancho = 5892
Fin
Fin
Atributo VB_Name = "frmMain"
Atributo VB_GlobalNameSpace = False
Atributo VB_Creatable = False
Atributo VB_PredeclaredId = True
Atributo VB_Exposed = False
Opción explícita p> p>
'Proyecto: usbhidio.vbp
'Versión: 1.1
'Fecha: 20/11/99
'Copyright 1999 de Jan Axelson (jan@lvr.com)
'
'Propósito: demuestra las comunicaciones USB con un dispositivo de clase HID
'Descripción:
'Encuentra un dispositivo conectado que coincide con ID de producto y proveedor específicos.
'Recupera las capacidades del dispositivo.
'Envía dos bytes al dispositivo mediante informes de entrada.
'Recibe dos bytes del dispositivo en informes de salida.
'(Para realizar pruebas, el firmware del dispositivo actual agrega 1 a los bytes recibidos
'y los envía de vuelta. )
'Un cuadro de lista muestra los datos enviados y recibidos,
'junto con mensajes de error y de estado.
'Los cuadros combinados le permiten
para seleccionar datos para enviar y seleccionar transferencias únicas o
'continuas.
'El firmware del dispositivo complementario es usbhidio.asm,
'para Microcontrolador USB CY7C63001 de Cypress Semiconductor.
'Para obtener más información, visite Lakeview Research en .
'Envíe comentarios, informes de errores, etc. a jan@lvr.com .
'Cambios y actualizaciones:
'20/11/99 Se revisaron algunos de los comentarios.
'v1.1 se agregó la declaración Else en la rutina InitializeDisplay
.Así que ambos cuadros combinados tienen todos los valores.
Atenuar capacidades como HIDP_CAPS
Atenuar cadena de datos como cadena
Atenuar datos de detalle como largo
Atenuar DetailDataBuffer() como byte
Atenuar DeviceAttributes como HIDD_ATTRIBUTES
Atenuar DevicePathName como cadena
Atenuar DeviceInfoSet como largo
Atenuar ErrorString como cadena
Atenuar HidDevice mientras
Atenuar LastDevice como booleano
Atenuar MyDeviceDetected como booleano
Atenuar MyDeviceInfoData como SP_DEVINFO_DATA p>
Atenuar MyDeviceInterfaceDetailData como SP_DEVICE_INTERFACE_DETAIL_DATA
Atenuar MyDeviceInterfaceData como SP_DEVICE_INTERFACE_DATA
Atenuar el tiempo necesario
Atenuar OutputReportData(7) como byte
Atenuar los datos preparados mientras
Atenuar el resultado mientras
Tiempo de espera de atenuación como booleano
'Establezca estos valores para que coincidan con los valores en el firmware e INF del dispositivo file.
Const MyVendorID = &H925
Const MyProductID = &H1234
Función FindTheHid() como booleana
'Crea una serie de API. llamadas para localizar el dispositivo de clase HID deseado.
'Devuelve True si el dispositivo
Se detecta e, Falso si no se detecta.
Dim Count As Integer
Dim GUIDString As String
Dim HidGuid As GUID
Dim MemberIndex siempre que
LastDevice = False
MyDeviceDetected = False
'********************* ***** ********************************************** ****** *********
'HidD_GetHidGuid
'Obtiene el GUID para todos los HID del sistema.
'Devuelve: el GUID en HidGuid.
'La rutina no devuelve un valor en Resultado
'pero la rutina se declara como una función para mantener la coherencia con las otras llamadas API.
'* ********************************************** ******* ****************************
Resultado = HidD_GetHidGuid(HidGuid)
Llamar a DisplayResultOfAPICall( "GetHidGuid")
'Mostrar el GUID.
GUIDString = _
Hex$(HidGuid.Data1) & "- " & _
Hex$(HidGuid.Data2) & "-" & _
Hex$(HidGuid.Data3) & "-"
Para recuento = 0 a 7
'Asegúrese de que cada uno de los 8 bytes del GUID muestre dos caracteres.
Si HidGuid.Data4(Count) >= &H10 Entonces
GUIDString = GUIDString & Hex$ (HidGuid.Data4(Count)) & " "
Else
GUIDString = GUIDString & "0" & Hex$(HidGuid.Data4( Count)) & " "
Finalizar si
Siguiente recuento
lstResults.AddItem " GUID para HID del sistema: " & GUIDString
'********* ******************************************* ********** *************************
'SetupDiGetClassDevs
'Devuelve: un identificador para una información del dispositivo
configuración configurada para todos los dispositivos instalados.
'Requiere: el HidGuid devuelto en GetHidGuid.
'********************* *** ************************************************* **** *********
DeviceInfoSet = SetupDiGetClassDevs _
(HidGuid, _
vbNullString, _
0, _
(DIGCF_PRESENT O DIGCF_DEVICEINTERFACE))
Llamar a DisplayResultOfAPICall("SetupDiClassDevs")
DataString = GetDataString(DeviceInfoSet, 32)
'********************************************* *** *******************************
'SetupDiEnumDeviceInterfaces
'Al regresar, MyDeviceInterfaceData contiene el identificador de una
'estructura SP_DEVICE_INTERFACE_DATA para un dispositivo detectado.
'Requiere:
'el DeviceInfoSet devuelto en SetupDiGetClassDevs.
'el HidGuid devuelto en GetHidGuid.
'Un índice para especificar un dispositivo.
'************** ******** ******************************************* ********* *********
'Empiece con 0 y aumente hasta que no se detecten más dispositivos.
MemberIndex = 0 p>
Hacer
'El elemento cbSize de la estructura MyDeviceInterfaceData debe establecerse en
'el tamaño de la estructura en bytes. El tamaño es 28 bytes.
MyDeviceInterfaceData.cbSize = LenB(MyDeviceInterfaceData )
Resultado = SetupDiEnumDeviceInterfaces _
(DeviceInfoSet, _
0, _
HidGuid , _
MemberIndex, _
MyDeviceInterfaceData)
Llamada a DisplayResultOfAPICall("SetupDiEnumDeviceInt
erfaces")
Si Resultado = 0 Entonces ÚltimoDispositivo = Verdadero
'Si existe un dispositivo, muestra la información devuelta.
Si Resultado <> 0 Entonces
lstResults.AddItem " DeviceInfoSet para el dispositivo #" & CStr(MemberIndex) & ": "
lstResults.AddItem " cbSize = " & CStr(MyDeviceInterfaceData.cbSize)
lstResults.AddItem _
" InterfaceClassGuid.Data1 = " & Hex$(MyDeviceInterfaceData.InterfaceClassGuid.Data1)
lstResults.AddItem _
" InterfaceClassGuid. Data2 = " & Hex$(MyDeviceInterfaceData.InterfaceClassGuid.Data2)
lstResults.AddItem _
" InterfaceClassGuid.Data3 = " & Hex$(MyDeviceInterfaceData.InterfaceClassGuid.Data3)
lstResults.AddItem _
" Flags = " & Hex$(MyDeviceInterfaceData.Flags)