Buenas,
después del post donde comenté cómo identificar la información de un gadget USB conectado a un ordenador, hoy veremos como trabajar con el mismo desde una aplicación C#.
A partir de la información del dispositivo
Lo primero que haremos será definir un array de bytes de 6 elementos para enviar información al led (línea 1).
Luego definimos un par de constantes para identificar el gadget (líneas 7 y 8) y creando una clase del tipo USBInterface (ver el post anterior), podremos conectarnos a nuestro dispositivo.
1: private readonly byte[] _cmdData = new byte[] { 0, 0, 0, 0, 0, 0 };
2: private readonly USBInterface _device;
3: private readonly bool _connected;
4:
5: public LightController()
6: {
7: const string vendorId = "vid_1294";
8: const string productId = "pid_1320";
9: _device = new USBInterface(vendorId, productId);
10:
11: if (_connected)
12: {
13: return;
14: }
15: _device.enableUsbBufferEvent(UsbDeviceEventCacher);
16: _connected = true;
17: }
Lo siguiente será crear una función para encender o apagar el Led del dispositivo. El escenario de encender es muy simple, cambiamos el 2do elemento del array de 0 a 1 y lo enviamos con la función writeDataSimple().
1: public void TurnLight(bool lightOn)
2: {
3: _cmdData[1] = 0;
4: if (lightOn)
5: {
6: _cmdData[1] = 1;
7: }
8: _device.UsbDevice.writeDataSimple(_cmdData);
9: }
Para apagar hacemos lo mismo, pero con el 2do elemento igual a 0.
El código completo de la clase quedaría así:
1: using System;
2: using System.Diagnostics;
3: using System.Linq;
4: using USBHIDDRIVER;
5:
6: namespace ElBruno.LightNotifier
7: {
8: public class LightController
9: {
10: private readonly byte[] _cmdData = new byte[] { 0, 0, 0, 0, 0, 0 };
11: private readonly USBInterface _device;
12: private readonly bool _connected;
13:
14: public LightController()
15: {
16: const string vendorId = "vid_1294";
17: const string productId = "pid_1320";
18: _device = new USBInterface(vendorId, productId);
19:
20: if (_connected)
21: {
22: return;
23: }
24: _device.enableUsbBufferEvent(UsbDeviceEventCacher);
25: _connected = true;
26: }
27:
28:
29: public void TurnLight(bool lightOn)
30: {
31: _cmdData[1] = 0;
32: if (lightOn)
33: {
34: _cmdData[1] = 1;
35: }
36: _device.UsbDevice.writeDataSimple(_cmdData);
37: }
38:
39: private void UsbDeviceEventCacher(object sender, EventArgs e)
40: {
41: if (USBInterface.usbBuffer.Count <= 0) return;
42: const int counter = 0;
43: while (USBInterface.usbBuffer[counter] == null)
44: {
45: lock (USBInterface.usbBuffer.SyncRoot)
46: {
47: USBInterface.usbBuffer.RemoveAt(0);
48: }
49: }
50: var currentRecord = (byte[])USBInterface.usbBuffer[0];
51: lock (USBInterface.usbBuffer.SyncRoot)
52: {
53: USBInterface.usbBuffer.RemoveAt(0);
54: }
55: if (currentRecord == null) return;
56: var msg = currentRecord.Aggregate("current record:", (current, t) => current + t);
57: msg += "\r\n";
58: Trace.WriteLine(msg);
59: }
60: }
61: }
Y listo! en 60 líneas tenemos una clase que nos permite encender y apagar el LEG de nuestro gadget USB.
Mañana el código fuente y el ejemplo completo.
Saludos @ La Finca
El Bruno

Leave a reply to [#GADGETS] HowTo: Integrar el USB Email Notifier para mostrar los estados de Lync 2013 Beta (III) « El Bruno Cancel reply