Aplicaciones de Windows
Collapse the table of content
Expand the table of content

Dispositivos

Desarrolla una aplicación que esté lista para conectarse a una gran variedad de dispositivos inalámbricos o cableados, que permiten a los usuarios disfrutar de la movilidad y flexibilidad de un dispositivo de Windows 8.1 cuando están creando contenido en el hogar o el trabajo, o disfrutando de él.

Novedades o actualizaciones de Windows 8.1

Compatibilidad con dispositivos de interfaz de usuario (HID)

[Obtén ahora los ejemplos de acceso a dispositivos HID personalizados y de muestra del sensor de movimiento, firmware y la aplicación de Windows en tiempo de ejecución para HID].

La API Windows.Devices.HumanInterfaceDevice permite a tu aplicación de la Tienda Windows obtener acceso a los dispositivos que admiten el protocolo HID.

Cuando se desarrolló, el protocolo estaba destinado a dispositivos como teclados, mouse y joysticks. Inicialmente se diseñó para ejecutarse a través de transporte USB. En la actualidad, el protocolo admite un conjunto significativamente más grande de dispositivos. Además, en Windows 8.1, Microsoft incluye compatibilidad con los transportes USB, Bluetooth, Bluetooth LE e I²C.

La nueva API está destinada a dos públicos diferentes:

  1. El asociado de hardware que creó un periférico HID y necesita una aplicación de la Tienda Windows que permita que los usuarios de Windows 8.1 controlen ese dispositivo u obtengan acceso a él. (Los asociados de hardware pueden declarar una aplicación como adquirida automáticamente cuando el usuario conecta su periférico).

  2. El desarrollador de aplicaciones que quiera crear una aplicación para uno de estos periféricos.

El asociado de hardware ya está familiarizado con HID pero debe comprender los requisitos de las aplicaciones de la Tienda Windows. El desarrollador de aplicaciones probablemente tenga que aprender el protocolo. Si no conoces HID, consulta la introducción a los conceptos de HID en la documentación de los controladores HID, en MSDN.

Pero antes de usar la nueva API, revisa la sección de limitaciones para averiguar si tu dispositivo forma parte de una de las categorías admitidas.

Nota  El dispositivo de destino del siguiente ejemplo es el SuperMUTT, un dispositivo de prueba que puedes solicitar a JJG Technologies.

Conexión con HID

Este ejemplo de código muestra el modo en que una aplicación de la Tienda Windows, creada con XAML y C#, usa el método HidDevice.GetDeviceSelector para crear un selector para un dispositivo HID específico. A continuación, la aplicación usa el método HidDevice.FromIdAsync para abrir una conexión con ese dispositivo.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Windows.Devices.Enumeration;
using Windows.Devices.HumanInterfaceDevice;
using Windows.Storage;
using Windows.Storage.Streams;

namespace HidSampleCS
{
    class Enumeration
    {
        // Enumerate HID devices.
        private async void EnumerateHidDevices()
        {
            UInt32 vendorId = 0x045E;
            UInt32 productId = 0x078F;
            UInt32 usagePage = 0xFF00;
            UInt32 usageId = 0x0001;

            // Create a selector that gets a HID device using VID/PID and a 
            // VendorDefined usage.
            string selector = HidDevice.GetDeviceSelector(usagePage, usageId, 
                              vendorId, productId);

            // Enumerate devices using the selector.
            var devices = await DeviceInformation.FindAllAsync(selector);

            if (devices.Count > 0)
            {
                // Open the target HID device at index 0.
                HidDevice device = await HidDevice.FromIdAsync(devices.ElementAt(0).Id, 
                                   FileAccessMode.ReadWrite);

                // At this point the device is available to communicate with,
                // so we can send/receive HID reports from it or 
                // query it for control descriptions.
            }
            else
            {
                // There were no HID devices that met the selector criteria.
                this.NotifyUser("MUTT HID device not found");
            }
        }
    }
}


Recuperar datos desde un HID

Las aplicaciones recuperan datos de un dispositivo HID mediante informes de entrada. Este ejemplo muestra el modo en que una aplicación usa el método HidInputReport.GetNumericControl para recuperar un valor numérico de un dispositivo SuperMUTT.

En el ejemplo, el dispositivo HID conectado se representa mediante el objeto DeviceList.Current.CurrentDevice.


        private async Task GetNumericInputReportAsync()
        {
            var inputReport = await DeviceList.Current.CurrentDevice.GetInputReportAsync(SuperMutt.ReadWriteBuffer.ReportId);

            var inputReportControl = inputReport.GetNumericControl(SuperMutt.ReadWriteBuffer.NumericUsagePage, SuperMutt.ReadWriteBuffer.NumericUsageId);

            var data = inputReportControl.Value;

            rootPage.NotifyUser("Value read: " + data.ToString("X2", NumberFormatInfo.InvariantInfo), NotifyType.StatusMessage);
        }

Limitaciones de la API de HID

Ten en cuenta lo siguiente cuando estés pensando en implementar este conjunto de API.

La API de Windows.Devices.HumanInterfacDevice admite la mayoría de los dispositivos HID. No obstante, bloquea la colección de aplicaciones de nivel superior representada por estas páginas de uso:

  • HID_USAGE_PAGE_UNDEFINED
  • HID_USAGE_PAGE_GENERIC
  • HID_USAGE_GENERIC_KEYBOARD
  • HID_USAGE_GENERIC_KEYPAD
  • HID_USAGE_GENERIC_SYSTEM_CTL
  • HID_USAGE_PAGE_KEYBOARD
  • HID_USAGE_PAGE_CONSUMER
  • HID_USAGE_PAGE_DIGITIZER
  • HID_USAGE_PAGE_SENSOR
  • HID_USAGE_PAGE_BARCODE_SCANNER
  • HID_USAGE_PAGE_WEIGHING_DEVICE
  • HID_USAGE_PAGE_MAGNETIC_STRIPE_READER
  • HID_USAGE_PAGE_TELEPHONY

Solo controladores de dispositivo incluidos con el producto

Además de bloquear la compatibilidad con la lista anterior de páginas de uso, la nueva API también necesita que tu aplicación se ejecute con los controladores de dispositivo incluidos con Windows 8.1. La API no admite controladores de dispositivo proporcionados por el proveedor.

Compatibilidad exclusiva con dispositivos periféricos

La API de HID está diseñada principalmente para aplicaciones que obtienen acceso a dispositivos periféricos. El escenario de desarrollador de aplicaciones previamente descrito se aplica únicamente a dicho tipo de dispositivos.

Aunque la API puede usarse para obtener acceso a dispositivos internos (no periféricos), el acceso a estos dispositivos se limita a las aplicaciones privilegiadas creadas exclusivamente por el fabricante de dispositivos. Los desarrolladores de aplicaciones no pueden obtener acceso a dispositivos internos.

Sin compatibilidad con las aplicaciones del Panel de control

Las aplicaciones creadas con la API de HID son aplicaciones por usuario. Esto significa que no se puede guardar la configuración, que suele ser uno de los requisitos de las aplicaciones del Panel de control.

Compatibilidad con dispositivos de punto de servicio (POS)

[Obtén las muestras de escáner de códigos de barras y lector de bandas magnéticas ahora].

Windows 8.1 presenta un nuevo espacio de nombres Windows.Devices.PointOfService para dispositivos de punto de servicio (POS) especializados. Esta versión admite escáneres de códigos de barras y lectores de bandas magnéticas. Usa la API de POS independiente del fabricante para escribir aplicaciones de la Tienda Windows que puedan obtener acceso a dispositivos de POS de diversos fabricantes y permite la asignación de muchos a muchos entre aplicaciones de POS y dispositivos de POS.

Este espacio de nombres se basa en la especificación Unified Point of Service (UPOS) estándar del sector. Para obtener más información, consulta el sitio web de UnifiedPOS.

Para el escáner de códigos de barras, la creación de dispositivos se produce mediante la activación estática con el método GetDefaultAsync, que obtiene el primer escáner de códigos de barras disponible que está conectado a la tableta, si hay más de uno. También puedes crear un dispositivo específico mediante el método FromIdAsync, que obtiene un escáner de código de barras de un identificador de DeviceInformation. ClaimScannerAsync proporciona a la aplicación acceso exclusivo al dispositivo y evita que otras aplicaciones puedan usarlo. Y EnableAsync prepara el dispositivo para un evento DataReceived. Los mismos elementos de API y el mismo patrón se aplican al lector de bandas magnéticas.

Estos ejemplos de código muestran cómo hacer que un escáner de códigos de barras se conecte con una tableta y cómo activarlo para recibir datos.


// Creates the barcode scanner, claims it for exclusive use, and enables it to receive data.
var _scanner = null;
var _claimedScanner = null;

function startReceivingData() {
    Windows.Devices.PointOfService.BarcodeScanner.getDefaultAsync().then(function (scanner) {
        if (scanner !== null) {
            _scanner = scanner;

            scanner.claimScannerAsync().done(function (claimedScanner) {
                if (claimedScanner !== null) {
                    _claimedScanner = claimedScanner;
                    claimedScanner.isDecodeDataEnabled = true;

                    claimedScanner.addEventListener("datareceived", onDataReceived);
                    claimedScanner.enableAsync().done(function () {

                        document.getElementById("btnStartReading").disabled = true;
                        document.getElementById("btnEndReading").disabled = false;
                    }, function error(e) {
                        // Failed to enable scanner.
                    });

                } else {
                    // Could not claim the scanner.
                }
            }, function error(e) {
                // Could not claim the scanner.
            });

        } else {
            // Barcode scanner not found. Connect a barcode scanner.
        }

    }, function error(e) {
        // Asynchronous method failed.
    });
}

Para obtener más información sobre estos métodos, eventos y propiedades, consulta la referencia de Windows.Devices.PointOfService.

Esta API proporciona una ruta de acceso de migración sencilla para los desarrolladores de POS. Puedes usar Microsoft POS for .NET para convertir las aplicaciones de escritorio en aplicaciones de la Tienda Windows que usan Windows en tiempo de ejecución y se ejecutan en tabletas. El modelo de API es similar a POS for .NET, con algunas modificaciones.

Compatibilidad con dispositivos USB

[Obtén la muestra de acceso a dispositivos USB personalizados ahora.]

Un nuevo espacio de nombres de Windows 8.1 ofrece a las aplicaciones compatibilidad dispositivos USB: Windows.Devices.Usb. Puedes usarlo para escribir una aplicación de la Tienda Windows que se comunique con un dispositivo USB personalizado. En este contexto, "personalizado" hace referencia a un dispositivo periférico para el que Microsoft no proporciona un controlador de clases integrado.

La especificación USB oficial es el estándar del sector para los fabricantes de hardware que fabrican periféricos USB para equipos. Windows incluye controladores integrados para la mayoría de estos dispositivos. Para los dispositivos que no tienen controladores integrados, los usuarios pueden instalar el controlador Winusb.sys integrado genérico proporcionado por Microsoft. A medida que fabrican nuevos periféricos, los fabricantes pueden proporcionar sus propios controladores personalizados o usar Winusb.sys. Si eligen Winusb.sys, puedes escribir con facilidad las aplicaciones que lo acompañan y que permiten a los usuarios interactuar con el dispositivo. En versiones anteriores de Windows, estas aplicaciones eran aplicaciones de escritorio escritas mediante funciones WinUSB. En Windows 8.1, las aplicaciones de la Tienda Windows pueden escribirse usando el nuevo espacio de nombres Windows.Devices.Usb.

Cuándo usar la nueva API USB

Puedes usar la nueva API si se cumplen todas las condiciones siguientes:

  • El controlador de dispositivo es el controlador Winusb.sys proporcionado por Microsoft. El espacio de nombres no admite controladores de dispositivo suministrados por el fabricante. Cuando conectes el dispositivo, Windows instalará o no Winusb.sys automáticamente en función del diseño del dispositivo. Si el controlador no se instala automáticamente, tendrás que hacerlo manualmente en el Administrador de dispositivos.

    1. Haz clic con el botón derecho en el dispositivo y selecciona Actualizar software de controlador.

    2. En el asistente, selecciona Buscar software de controlador en el equipo.

    3. En la siguiente página, selecciona Elegir en una lista de controladores de dispositivo en el equipo.

    4. En la siguiente página, selecciona Dispositivos de bus serie universal en la lista.

    5. Selecciona Dispositivos WinUsb y haz clic en Siguiente para instalar el controlador.

  • Proporcionas la información acerca de tu dispositivo como declaraciones de funcionalidades del dispositivo en el manifiesto de la aplicación. De este modo, la aplicación se asocia al dispositivo.

    Para obtener más información, consulta Actualización del manifiesto del paquete de la aplicación para un dispositivo USB.

  • El dispositivo pertenece a una de las clases de dispositivo admitidas por el espacio de nombres. Ten en cuenta que un dispositivo puede pertenecer a una clase de dispositivo USB predefinida o bien puede ser el fabricante quien defina su funcionalidad.

Usa el espacio de nombres Windows.Devices.Usb para estos códigos de protocolo, esta subclase y esta clase de dispositivo USB:

  • Clase de control de CDC (código de clase: 0x02; código de subclase: cualquiera; código de protocolo: cualquiera)
  • Clase física (código de clase: 0x05; código de subclase: cualquiera; código de protocolo: cualquiera)
  • Clase PersonalHealthcare (código de clase: 0x0f; código de subclase: 0x00; código de protocolo: 0x00)
  • Clase ActiveSync (código de clase: 0xef; código de subclase: 0x01; código de protocolo: 0x01)
  • Clase PalmSync (código de clase: 0xef; código de subclase: 0x01; código de protocolo: 0x02)
  • Clase DeviceFirmwareUpdate (código de clase: 0xfe; código de subclase: 0x01; código de protocolo: 0x01)
  • Clase IrDA (código de clase: 0; código de subclase: 0x02; código de protocolo: 0x00)
  • Clase de medidas (código de clase: 0xfe; código de subclase: 0x03; código de protocolo: cualquiera)
  • Clase específica del proveedor (código de clase: 0xff; código de subclase: cualquiera; código de protocolo: cualquiera)

Cuándo no usar la nueva API USB

No puedes usar la nueva API si se cumple cualquiera de las condiciones siguientes:

  • Quieres que tu aplicación tenga acceso a dispositivos internos.Windows.Devices.Usb solo permite acceder a dispositivos periféricos. Una aplicación de la Tienda Windows puede obtener acceso a dispositivos USB internos solamente si es una aplicación privilegiada que el OEM declaró explícitamente para ese sistema.

  • Tu aplicación es una aplicación del Panel de control. Las aplicaciones que usan el espacio de nombres deben ser aplicaciones por usuario. Es decir, las aplicaciones pueden comunicarse con el dispositivo pero no pueden guardar los datos de configuración fuera de su ámbito, una funcionalidad que necesitan muchas aplicaciones del Panel de control.

No uses el espacio de nombres Windows.Devices.Usb para estas clases de dispositivo USB:

  • Clase de audio (0x01)
  • Clase de HID(0x03)
  • Clase de imagen (0x06)
  • Clase de impresora (0x07)
  • Clase de almacenamiento (0x08)
  • Clase de tarjeta inteligente (0x0B)
  • Clase de audio/vídeo (0x10)
  • Controlador inalámbrico (como host o concentrador USB inalámbrico) (0xE0)

El espacio de nombres bloquea estas clases de dispositivo USB para evitar conflictos con otras API. Para estas clases, usa las demás API relevantes. Por ejemplo, si tu dispositivo cumple con el protocolo HID, usa Windows.Devices.HumanInterfaceDevice.

Descubrir y conectarse con un dispositivo USB

Este ejemplo de código muestra cómo buscar un dispositivo USB y conectarse a él.


 
    var deviceQueryString = UsbDevice.GetDeviceSelector(deviceVid, devicePid, deviceInterfaceClass);

    var myDevices = await Windows.Devices.Enumeration.DeviceInformation.FindAllAsync(deviceQueryString, null);
    
    UsbDevice device = await UsbDevice.FromIdAsync(myDevices[0].Id);

    // Device is in use.
    if (device != null)
    {
        MainPage.Current.NotifyUser("Device " + id + " opened", NotifyType.StatusMessage);
    }
    else
    {
        MainPage.Current.NotifyUser("Unable to open device : " + id, NotifyType.ErrorMessage);
    }


Para comenzar a escribir una aplicación de la Tienda Windows compatible con USB, estudia la muestra de CustomUsbDeviceAccess. En ella se muestra cómo comunicarse con un dispositivo USB mediante el uso del espacio de nombres Windows.Devices.Usb.

Compatibilidad con dispositivos Bluetooth

[Obtén las muestras de chat de Bluetooth Rfcomm y perfil de atributo genérico de Bluetooth ahora.]

Para Windows 8.1, las aplicaciones de la Tienda Windows pueden usar las nuevas API de Windows en tiempo de ejecución de RFCOMM y GATT (Perfil de atributo genérico) para obtener acceso a dispositivos Bluetooth. Estas API proporcionan acceso a los transportes Bluetooth BR/EDR y Bluetooth LE.

Para que las API de Windows en tiempo de ejecución para Bluetooth puedan acceder a los dispositivos Bluetooth Classic y Bluetooth Smart, primero deben ser detectados y emparejados a través de la interfaz de usuario de configuración de Windows 8.1 (Equipo y dispositivos>Bluetooth>).

Proporcionas la información acerca de tu dispositivo como declaraciones de funcionalidades del dispositivo en el manifiesto de la aplicación. De este modo, la aplicación se asocia al dispositivo.

A continuación te indicamos algunos de los detalles principales de las nuevas API:

Bluetooth RFCOMMWindows.Devices.Bluetooth.Rfcomm

  • La API permite a los desarrolladores de aplicaciones de la Tienda Windows implementar perfiles de Bluetooth basados en el protocolo RFCOMM, por ejemplo, el perfil de puerto serie (SPP).

  • Se proporcionan los roles de servidor y cliente.

  • Se puede acceder a los registros del protocolo de detección de servicios (SDP) remotos y pueden publicarse registros de SDP locales.

  • La clase Sockets.ControlChannelTrigger no está disponible para sockets basados en RFCOMM.

  • La API de RFCOMM impide el acceso a los siguientes servicios integrados y no válidos:
    Id. de servicioServicio (nombre de SIG Bluetooth)

    0x1000

    Detección de servicios

    0x1001

    Descriptor de grupo de exploración

    0x1102

    Acceso a LAN basado en PPP

    0x1103

    Acceso telefónico a redes

    0x1108, 0x1112

    Auriculares

    0x1109

    Telefonía inalámbrica

    0x110A

    Origen de audio

    0x110B

    Receptor de audio

    0x110C, 0x110E, 0x110F

    Control remoto de A/V

    0x1110

    Interfono

    0x1111

    Fax

    0x1113, 0x1114

    WAP

    0x1115

    PANU

    0x1116

    NAP

    0x1117

    GN

    0x111E, 0x111F

    Manos libres

    0x1124

    Dispositivo de interfaz humana

    0x1126

    Impresión HCR

    0x1127

    Digitalización HCR

    0x1128

    Acceso a ISDN (RDSI) común

    0x112D

    Acceso a SIM

    0x1131

    Auriculares – HS

    0x1136

    Servidor GNSS

    0x1200

    Información PnP

    0x1201

    Red genérica

    0x1203

    Audio genérico

    0x1204

    Telefonía genérica

    0x1205, 0x1206

    UPnP

    0x1300, 0x1301, 0x1302

    ESDP UPnP IP

    0x1303

    Origen de vídeo

    0x1304

    Receptor de vídeo

    0x1305

    Distribución de vídeo

    0x1401

    Origen de HDP

    0x1402

    Receptor de HDP

     

Bluetooth GATTWindows.Device.Bluetooth.Gatt

  • La API permite que los desarrolladores de aplicaciones de la Tienda Windows implementen perfiles de cliente de GATT para recopilar datos desde sensores de bajo consumo.

  • Se requiere una radio de Bluetooth 4.0 para usar la API de GATT.

  • La API de GATT impide el acceso a los siguientes servicios integrados y no válidos:
    Id. de servicioServicio (nombre de SIG Bluetooth)

    0x1812

    Servicio de HID sobre GATT

     

  • La API de GATT proporciona acceso de solo lectura a los siguientes servicios integrados y no válidos:
    Id. de servicioServicio (nombre de SIG Bluetooth)

    0x1800

    Servicio de GAP

    0x1801

    Servicio de GATT

    0x1813

    Servicio de parámetros de examen

     

Nota  Las API de Windows en tiempo de ejecución para RFCOMM y GATT no están diseñadas para usarse en aplicaciones del Panel de control.

Hay dos escenarios que te ofrecen más información acerca del uso de la API Windows.Devices.Bluetooth.Rfcomm:

Hay tres escenarios que te ofrecen más información acerca del uso de la API Windows.Device.Bluetooth.Gatt:

Compatibilidad con impresoras 3D

[Obtén la muestra de impresión 3D ahora.]

Imprimir contenido 3D con Windows 8.1 es similar a imprimir contenido 2D. De hecho, simplemente hemos ampliado las interfaces IXpsOMPackageWriter y IXpsDocumentPackageTarget para incluir esta característica. Para enviar contenido 3D a una impresora desde una aplicación en Windows 8.1, tu aplicación debe acceder a la impresión de Windows y proporcionar el contenido con formato 3D que se va a imprimir.

La impresión 3D en Windows 8.1 implica crear contenido 3D y pasarlo a través de la canalización del administrador de trabajos en cola y de los filtros de controlador hasta el dispositivo de fabricación 3D, como una impresora 3D.

La API de impresión 3D incluye dos interfaces—IXpsDocumentPackageTarget3D y IXpsOMPackageWriter3D—. IXpsDocumentPackageTarget3D representa una cola de impresión y detalles del trabajo. IXpsOMPackageWriter3D proporciona métodos para enviar contenido a la canalización de impresión de Windows. Esta interfaz pasa contenido 3D en forma de transmisiones por secuencias opacas a través del administrador de trabajos en cola y de los filtros de controlador hasta el dispositivo de fabricación 3D.

Las interfaces de impresión 3D tienen estas características:

  • Admiten el envío de contenido 3D con el formato Open Packaging Conventions para su impresión.

  • Admiten el envío de contenido XPS para la impresión 2D, además del contenido 3D.

  • El contenido 3D se limita a un componente de modelo 3D con vínculos a cero o más componentes de textura y cero o un componente de vales de impresión.

  • La API considera que los datos de la textura y el modelo 3D son una transmisión por secuencias opaca y no se realiza ninguna validación ni análisis de ningún tipo.

Para ver una descripción general de la característica, ve a Compatibilidad con impresión 3D y consulta Inicio rápido: Impresión 3D para aprender cómo agregar impresión 3D a tu aplicación.

Compatibilidad con la digitalización

[Obtén la muestra de escaneado ahora].

Ahora puedes digitalizar contenido de tu aplicación de la Tienda Windows con un escáner plano, alimentador u origen de digitalización configurado automáticamente.

El nuevo espacio de nombres Windows.Devices.Scanners se basa en las API WIA existentes y se integra en la API de acceso a dispositivos.

Nota  Se compila una aplicación de digitalización en Windows 8.1.

Para obtener una introducción a la característica, consulta el tema sobre digitalización (JavaScript y HTML) o digitalización (C#/C++/VB y XAML).

 

 

Mostrar:
© 2017 Microsoft