3 de enero de 2011

Código. Código Fuente. Como conectar un dispositivo vía USB

Autor: Florian Fischer-Leitner     http://www.florian-leitner.de/

HID USB Driver / Biblioteca

C # (CSharp) , Inglés Mensajes , Software , USB HID Biblioteca Añadir comentario

Tabla de contenidos

- Motivación

- La clase de dispositivo de interfaz humana

- Cosas específicas USB

- El USB HID Dispositivo de Interfaz

- ¿Cómo Integrar la Biblioteca en un proyecto de Visual Studio

- ¿Cómo la HID USB colección de trabajos en el interior

- ¿Dónde puedo obtener la colección de USB HID

La motivación

Queríamos encontrar una nueva solución para conectar nuestro hardware para la PC vía USB, porque la experiencia que hicimos con FTDI Chips no fue satisfactoria en todos.

El controlador USB de nuestra elección fue el MAX3420E Maxim que está conectado al microcontrolador a través de un interfaz periférico serial (SPI).

El MAX3420E viene sin ningún controlador o bibliotecas que puede usar para "hablar" con él.

Esta es la razón por la cual tuve que desarrollar mi propia "conductor".

Después de un día de la lectura y google he decidido que lo mejor de una manera más sencilla es utilizar el dispositivo de interfaz humana Clase (HID). La HID-Class es una clase de dispositivo genérico que significa que todos los dispositivos de esta clase son compatibles con Microsoft Windows y ya existen archivos DLL con funciones que podemos utilizar.

El punto de partida para el "conductor" fue un artículo que encontré en la red de desarrolladores de Microsoft: "¿eres tú? Escribir mejor software para Cool USB hardware ", escrito por Scott Hanselman . ( http://msdn.microsoft.com/coding4fun/someassemblyrequired/isthatyou/default.aspx ). El software de Scott se basa en la clase USBSharp .

Afortunadamente, el MAX3420E viene con un ejemplo de código que configura el controlador como un dispositivo de interfaz humana, así que no tenía muchos problemas para encontrar la manera de configurarlo como HID.

La clase de dispositivo de interfaz humana

Como se mencionó anteriormente la clase HID es una clase de productos genéricos para que el conductor se integra en el sistema operativo que hace las cosas fáciles. Si un nuevo dispositivo HID está enchufado no hay necesidad de ninguna instalación del controlador. Las funciones para acceder y controlar un dispositivo HID están incluidos en el hid.dll Windows que se encuentra en la carpeta System32.

Si usted no sabe con seguridad si el dispositivo es un dispositivo HID usted debe echar un vistazo a esta pequeña aplicación. Es una parte de las ventanas y se puede ejecutar con el inicio -> ejecutar "msinfo32.exe" comando. O en Windows Vista simplemente pulse la tecla Windows msinfo32.exe Tipo y después presiona enter.


USB específico cosas
Identificar su dispositivo USB

dispositivo USB se identifican por su proveedor y la identificación del producto. Los identificadores se compone de un prefijo ("VID_" para la Identificación del vendedor o "PID_" para la Identificación del producto) y un número de 4 dígitos HEX. El MAX3420E por ejemplo, tiene la vid_06ba Identificación del proveedor y del producto Identificación pid_5346. Por lo general, ambos valores se pueden cambiar en el código fuente del dispositivo USB (se supone que tienen acceso a ese código).

Tamaño del paquete / Velocidad de comunicación

dispositivos HID son la comunicación con el PC a través de los llamados informes escondió. Los informes constan de 64 bytes de datos. Cada microsegundo informe se envía desde el PC al dispositivo USB y viceversa. Esto significa que una tasa de transferencia teórica de 64 Kbytes por segundo se puede lograr.

La interfaz USB HID Driver

El conductor está escrito en C # y diseñado como un archivo DLL, este tiene la ventaja por lo que es muy fácil de integrar la unidad en un nuevo proyecto. Sólo importa el archivo DLL o el proyecto y ya ha terminado.

Traté de mantener la interfaz tan simple como sea posible, por un lado y por otro lado la integración de la funcionalidad de lo posible.

En el momento en que tiene las siguientes funciones:

USBInterface (String, String)

Este método inicializa una nueva instancia de la clase USBInterface.

Parámetros

en

El vendedor de Identificación del dispositivo USB (por ejemplo, vid_06ba)

pid

El producto Identificación del dispositivo USB (por ejemplo, pid_5346)

USBInterface (String)

Este método inicializa una nueva instancia de la clase USBInterface.

Parámetros

en

El vendedor de Identificación del dispositivo USB (vid_06ba por ejemplo).

Método connect ()

Este método establece una conexión con el dispositivo USB. Sólo se puede establecer una conexión con un dispositivo de si ha utilizado la construcción con el proveedor Y Identificación del producto. De lo contrario, se conectará a un dispositivo que tiene el identificador mismo proveedor se especifica, que si es más de un dispositivo con estas Identificación del proveedor está conectado, no se puede determinar a cuál se conectará.

Devoluciones

False si se produce algún error

Desconectar () método

Desconecta el dispositivo

getDeviceList () método

Devuelve una lista de dispositivos con el proveedor de Identificación (o al vendedor y la identificación del producto) especificado en el constructor. Esta función es necesaria si quieres saber cuántos (y que) los dispositivos con el identificador de proveedor especificado son enchufado

Devoluciones

String lista con las rutas de dispositivo

escribir (byte []) método

Este método escribe los bytes especificados en el dispositivo USB. Si la longitud de la matriz supera los 64, mientras que la matriz se divide en varias matrices con cada uno con 64 bytes. El byte de 0 a 63 de la matriz se envía a continuación, en primer lugar, el byte de 64 a 127 y así sucesivamente.

Parámetros

bytes

Los bytes a enviar.

Devoluciones

Devuelve true si todos los bytes se han escrito correctamente

startRead () método

Este método se utiliza para activar la "lectura-Estado". Si se ejecuta este comando se inicia un subproceso que escucha en el dispositivo USB y espera datos.

stopRead () método

Este método cambia de "lectura-Estado" en "reposo-Estado". Al ejecutar este comando se detiene el hilo de la lectura de datos y ahora los datos se recibirán.

enableUsbBufferEvent (EventHandler) método

Al llamar a este método con un controlador de eventos (System.EventHandler) el oyente complemento caso de que el tampón de USB está activado. Por lo tanto cada vez que un conjunto de datos se agrega a la memoria intermedia (y así recibidos desde el dispositivo USB) el método de controlador de eventos se llama.

Parámetros

eHandler

El controlador de eventos (System.EventHandler) método.


¿Cómo integrar la HID USB Biblioteca en un proyecto de Visual Basic

Hay dos formas de integrar la colección de USB HID en un proyecto de Visual Studio. Una consiste en añadir el proyecto de biblioteca para la solución de Visual Studio. La otra forma consiste en añadir una referencia a la USBHIDDRIVER.dll en el proyecto de Visual Basic que desea utilizar.

Añadir el proyecto de biblioteca a una solución Visual Studio 2005

1. Abra la solución de Visual Studio. Ir a "Archivo> Agregar> Proyecto existente"

2. El siguiente cuadro de diálogo abierto. Vaya a la USBHIDDRIVER.csproj y haga clic en Abrir.

3. Haga clic derecho sobre el proyecto de Visual Studio y haga clic en "Agregar referencia»

4. Seleccione la opción "Proyectos", ficha. A continuación, seleccione el USBHIDDRIVER y haga clic en Aceptar.

Agregue el USBHIDDRIVER.dll a un proyecto de Visual Studio

1. Haga clic derecho sobre el proyecto de Visual Studio y haga clic en "Agregar referencia»

2. Seleccione la opción "Examinar", ficha. A continuación, vaya a la USBHIDDRIVER.dll.dll y haga clic en Aceptar.

Utilice el USBHIDDRIVER.dll con Visual Basic 6

El tiempo de ejecución. Net permite a los clientes COM no administrado consciente (como Visual Basic 6) para acceder. NET a través de la interoperabilidad COM ya través de las herramientas proporcionadas por el marco.

El USBHIDDRIVER.dll es un montaje. NET que no se puede acceder por Visual Basic 6. Por lo tanto tenemos que crear una biblioteca de tipos que se pueden utilizar con Visual Basic 6. Esto se puede hacer con la RegAsm.exe herramienta que se encuentra en el directorio de su archivo. Instalación de Net framework.

Cree un archivo. Bat en el directorio de la USBHIDDRIVER.dll y escribir el siguiente comando en él. A continuación, ejecute el archivo bat.

"C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ RegAsm.exe" USBHIDDRIVER.dll.dll / tlb: USBHIDDRIVER.dll.tlb

Ahora tienes que copiar la dll y el archivo TLB en el mismo directorio que la aplicación que está consumiendo.


Cómo utilizar la Biblioteca USB HID

Digamos que usted desea comunicarse con un dispositivo USB que tiene el vendedor de productos de Identificación vid_06ba y múltiples Identificación.

Así que la primera cosa que usted puede querer tener una lista de todos los dispositivos conectados a la pc que tiene el ID de proveedor especificado. Para ello simplemente hacer una nueva instancia de la clase USBInterface sólo con el Vendor ID como parámetro. Luego llame a la getDeviceList-mehtod y recibirá una lista de los dispositivos que están conectados.

USBHIDDRIVER.USBInterface usb = new USBInterface ("vid_06ba");

String [list] = usbI.getDeviceList ();

Para comunicarse con el dispositivo de hacer una nueva instancia de la clase USBInterface con la Identificación de vectores y el producto id como parámetro. Después de eso, puede llamar al método de conexión y una conexión se establecerá.

USBHIDDRIVER.USBInterface usb = new USBInterface ("vid_0b6a", "pid_5346");

usb.Connect ();

Una vez que el dispositivo está conectado, puede leer o escribir datos. Para escribir datos sólo llamar al método de escritura con una serie de bytes que desea enviar como parámetro.

Para leer de usted tiene dos opciones: por primera vez sin el evento de búfer USB y la segunda con el evento memoria intermedia de USB.

Si el evento es activado, el método controlador de eventos se llama cuando un nuevo conjunto de datos que se recibe.

De lo contrario, puede procesar los datos con un temporizador o algo así.

usb.write (startByte);

usb.enableUsbBufferEvent (nuevo System.EventHandler (myEventCacher));

Thread.Sleep (5);

usb.startRead ();

...

usb.stopRead ();

usb.write (stopByte)


¿Cómo la HID USB Biblioteca trabajos en el interior

La colección se basa en la clase USBSharp que las importaciones de todos los métodos necesarios de la kernel32.dll y hid.dll. La clase HIDUSBDevice envuelve estos métodos y se ocupa de leer el hilo. El USBInterface es la interfaz principal, que es accesible desde fuera de la DLL. En la clase USBInterface existe un objeto de la ListWithEvent, que es básicamente un ArrayList con la ventaja de que un evento se activa cuando un nuevo conjunto de datos se añade. Por último pero no menos importante en la clase HidApiDeclaration encontrará algunas declaraciones necesarias para el conjunto, lo escondió.

¿Dónde puedo obtener la colección de USB HID?

Puede descargar la biblioteca aquí .
Si te gusta la biblioteca y quiere dar algo a cambio aquí está mi
lista de deseos de Amazon .

1 comentario: