[#GADGETS] Como controlar el USB Email Notifier con C# (II)

image

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

image

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

image image image

One thought on “[#GADGETS] Como controlar el USB Email Notifier con C# (II)

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.