¿Le resultó útil esta página?
Sus comentarios sobre este contenido son muy importantes. Háganos saber su opinión.
¿Tiene comentarios adicionales?
Caracteres restantes: 1500
Exportar (0) Imprimir
Expandir todo

Cómo crear un comando definido por el fabricante



Como para otros objetos extensibles, puede implementar un comando definido por el fabricante pasando información a través de un comando DSPI existente o creando su propio comando.

Para crear un comando definido por el fabricante

  1. Use un diccionario VendorEntityParameterMetadata para describir los parámetros del comando.

  2. Coloque el diccionario definido en el paso 1 en un diccionario VendorEntityMetadata.

    Si tiene varias extensiones definidas por el fabricante, también tendrá que colocar los metadatos en este diccionario.

  3. Cree una clave VendorEntityKey con una type apropiada para el comando, de forma que pueda utilizarse como la clave de VendorEntityMetadata.

    Si está creando un comando nuevo, use VendorCommand en el tipo. Si planea utilizar VendorSpecificData en un comando DSPI existente, utilice el nombre del comando en su lugar.

  4. Establezca el EntityType de la clave en Comando.

  5. Use el diccionario de VendorEntityMetadata en la implementación de ProviderMetadata.

  6. Para utilizar el comando definido por el fabricante en una aplicación, utilice ExecuteVendorDefinedCommand.

    Cuando se usa un comando definido por el fabricante, Name es el nombre del comando definido en el Paso 1. Por el contrario, Command es un subtipo opcional. Si el comando no tiene un subtipo, puede inicializarlo con la misma información que introdujo en Name.

    Si va a usar un comando derivado, llame al comando normalmente, pero pase los parámetros específicos del fabricante mediante VendorSpecificData.

Ejemplo

En el ejemplo siguiente se describe cómo implementar un comando definido por el fabricante denominado SetProgramOnDevice. También prepara un marco de trabajo para crear una respuesta del mismo nombre, un valor de transporte, modifica TagReadEvent y agrega un nuevo evento.


using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO.SensorServices.Rfid.Client;
using System.Text;
using Microsoft.SensorServices.Rfid;
using Microsoft.SensorServices.Rfid.Dspi;

namespace ScratchCSharp
{
    class VendorExtensions
    {
        private static void DefineVendorExtensionsMetadata()
        {

            Dictionary<VendorEntityKey, VendorEntityMetadata> vendorExtensions = new Dictionary<VendorEntityKey, VendorEntityMetadata>();

            //////////////////////////////////////////////////////////////
            // Extension 1: A vendor defined command called SetProgramOnDevice
            //////////////////////////////////////////////////////////////

            //Define the metadata for the command extension
            Dictionary<string, VendorEntityParameterMetadata> parametersForSetProgramOnDevice = new Dictionary<string, VendorEntityParameterMetadata>();

            //Parameter1 is the GPIO port for whose state change we do something
            Collection<object> availableGPIOPorts = new Collection<object>();
            availableGPIOPorts.Add("1");
            availableGPIOPorts.Add("2");
            availableGPIOPorts.Add("3");
            availableGPIOPorts.Add("4");

            //Use the VendorEntityParameterMetadata corresponding to Valueset (similar to enums)
            parametersForSetProgramOnDevice.Add("gpIOPort", new VendorEntityParameterMetadata(
                                                                typeof(string),
                                                                "The GPIO port, for whose state change event, some action shuld be taken",
                                                                null,
                                                                true,
                                                                availableGPIOPorts
                                                                ));

            //Parameter2 is the value the GPIO port should change to, for the action to execute
            //Use the VendorEntityParameterMetadata corresponding to max (1) / min (0)
            parametersForSetProgramOnDevice.Add("newValue", new VendorEntityParameterMetadata(
                                                                typeof(int),
                                                                "The value the GPIO port should change to, for executing the action",
                                                                1,
                                                                true,
                                                                0,
                                                                1
                                                                ));

            //Parameter3 is the command that must be executed when the GPIO Port value changes
            Collection<object> availableActions = new Collection<object>();
            availableActions.Add("TurnOffRF");
            availableActions.Add("TurnOnRF");
            availableActions.Add("SetDenseMode");

            //Use the VendorEntityParameterMetadata corresponding to Valueset (similar to enums)
            parametersForSetProgramOnDevice.Add("action", new VendorEntityParameterMetadata(
                                                              typeof(string),
                                                              "The action to execute",
                                                              availableActions[0],
                                                              true,
                                                              availableActions
                                                               ));
            VendorEntityKey commandKey = new VendorEntityKey(typeof(VendorDefinedCommand), "SetProgramOnDevice", EntityType.Command);
            VendorEntityMetadata commandMetadata = new VendorEntityMetadata(
                "Sets programs on the device",
                parametersForSetProgramOnDevice);

            vendorExtensions[commandKey] = commandMetadata;

            //////////////////////////////////////////////////////////////
            // Extension 2
            //////////////////////////////////////////////////////////////
            //Define the metadata for the response to this command
            VendorEntityKey responseKey = new VendorEntityKey(typeof(VendorDefinedResponse), "SetProgramOnDevice", EntityType.Response);

            //.
            //.
            //Define the parameters in the dictionary returned
            //and add to vendorExtensions
            //.

            //////////////////////////////////////////////////////////////
            // Extension 3
            //////////////////////////////////////////////////////////////
            //Define the metadata for the MyVendorTransportSetting
            VendorEntityKey myTransportVendorEntityKey = new VendorEntityKey(typeof(VendorDefinedTransportSettings), "MyVendorTransportSetting", EntityType.TransportSettings);

            //.
            //.
            //Define the parameters which the vendor expects in the dictionary
            //and add to vendorExtensions
            //

            //////////////////////////////////////////////////////////////
            // Extension 4
            //////////////////////////////////////////////////////////////
            VendorEntityKey tagReadEventExtension = new VendorEntityKey(typeof(TagReadEvent), EntityType.Observation);

            //.
            //.
            //Define the parameters which the vendor returns in the dictionary in the TagReadEvent
            //and add to vendorExtensions
            //.


            //////////////////////////////////////////////////////////////
            // Extension 5
            //////////////////////////////////////////////////////////////
            VendorEntityKey buttonPressedEvent = new VendorEntityKey(typeof(VendorDefinedEvent), "ButtonPressedEvent", EntityType.Observation);

            //.
            //.
            //Define the parameters which the vendor returns in the dictionary in the ButtonPressedEvent
            //and add to vendorExtensions
            //.

            ProviderMetadata myProviderMetadata = new ProviderMetadata
                (
                null, //provide some ProviderInformation
                null, //provide some provider capabilities,
                null, //provide property meta data
                vendorExtensions,
                null  //provider device property metadata
            );

        }

        
    }
}

© 2013 Microsoft Corporation. Reservados todos los derechos.
Mostrar:
© 2015 Microsoft