[#HDI] HowTo: Listar dispositivos #HDI conectados en Windows 8.1

Hola!

Primero lo más importante: como me he dejado estar con este tema. En Windows 8.1 tenemos una nueva capacidad que nos permite trabajar con dispositivos HDI, con lo que mis posts sobre el lanza missiles USB conectado al Kinect o el notificador de correos por USB, ahora es mucho más simple.

Vamos por partes, el primer artículo que deberías leer al respecto es el siguiente:

En el mismo explican las capacidades que tenemos en Win81 para conectarnos con:

  • Impresoras 3D
  • Dispositivos USB
  • Human Devices Interfaces
  • etc.

Para este ejemplo el que me importa es el 3ro, la capacidad para conectar con HDI. Y vamos con un paso a paso donde crearemos una app Win81 que muestre los HDI conectados.

1. Crear una app Windows Store para Windows 8.1

2. Una vez creada la app, debemos definir en su manifiesto que la misma se conectará con un device HDI. El editor de appxmanifiest no soporta esta funcionalidad, con lo que debemos editar el mismo en modo texto. La sección que modificamos es la sección de Capabilities y en la misma definimos el acceso a HID.

   1: <?xml version="1.0" encoding="utf-8"?>

   2: <Package xmlns="http://schemas.microsoft.com/appx/2010/manifest" 

   3:          xmlns:m2="http://schemas.microsoft.com/appx/2013/manifest">

   4: ...

   5: ...

   6:   <Capabilities>

   7:     <Capability Name="internetClient" />

   8:     <m2:DeviceCapability Name="humaninterfacedevice">

   9:       <m2:Device Id="any">

  10:         <m2:Function Type="usage:0001 FFFF"/>

  11:       </m2:Device>

  12:     </m2:DeviceCapability>

  13:   </Capabilities>

  14: </Package>

Importante: En el ejemplo anterior definimos el acceso a cualquier tipo de HDI (línea 10), sin embargo si conocemos los valores de Vendor Id y Product ID, podemos refinar el mismo como en el siguiente ejemplo:

   1: <wb:DeviceCapability Name="humaninterfacedevice">

   2:   <!--Light Sensor Device-->

   3:   <wb:Device Id="vidpid:1294 1320">

   4:     <wb:Function Type="usage:FF55 00A5" />

   5:   </wb:Device>

   6: </wb:DeviceCapability>

En próximos posts mostraré el detalle para un lanza misiles o el light notifier.

4. Una vez modificado el appxmanifiest, podemos agregar un listview y un boton para mostrar en el mismo los dispositivos conectados. La siguiente función realiza esta tarea.

   1: private async void EnumerateHidDevices()

   2: {

   3:     var deviceSelector = HidDevice.GetDeviceSelector(0xFF00, 0x0001);

   4:     var devices = await DeviceInformation.FindAllAsync(deviceSelector);

   5:  

   6:     if (ListViewDevices.Items == null) return;

   7:     ListViewDevices.Items.Clear();

   8:     foreach (var deviceInformation in devices)

   9:     {

  10:         ListViewDevices.Items.Add("Name: " + deviceInformation.Name);

  11:         ListViewDevices.Items.Add("- Id: " + deviceInformation.Id);

  12:         ListViewDevices.Items.Add("- Is Default: " + deviceInformation.IsDefault);

  13:         ListViewDevices.Items.Add("- Is Enabled: " + deviceInformation.IsEnabled);

  14:     }

  15: }

5. Si ejecutamos la aplicación, con el USB EMail Notifier (del que hablé aquí), veremos el siguiente resultado

image

Este es el sensor

image

Dentro del string de resultado, podemos ver que el identificador del device es el siguiente

  • Vendor Id: 1294
  • Product Id: 1320

Vemos que son los mismos valores que nos entrega el HID.

image

Y listo! ya podemos realizar un sondeo por todos los devices conectados a nuestro ordenador y en próximos posts mostraré como interactuar con los mismos.

 

Fuentes:

Saludos @ Home

El Bruno

image image image Google

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *