Red de conocimiento informático - Material del sitio web - Cómo realizar la transmisión y lectura de datos del puerto USB bajo VB

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>

'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

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

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)