主要内容

实现获取和设置支持特定于设备的属性金宝app

通过你的适配器连接到设备后,用户可能想查看或修改设备的属性值。例如,一个用户可能调整的价值亮度财产或检索的当前值温度财产。(如何定义你想要的属性信息暴露给用户,明白了创建设备属性。)

收到通知从发动机当用户想查看或修改属性,关联侦听器对象的属性。工具箱中定义了两种类型的侦听器类:得到听众的回应得到命令和听众的回应命令。

为获取和设置属性值提供金宝app支持,遵循这个过程:

  1. 定义一个合适的类型的侦听器类。工具箱中定义了两个抽象类,一个用于获取侦听器,一个用于设置侦听器,您得到您的类。

  2. 实现所需的虚函数类。

  3. 将侦听器类的实例与属性。

以下部分描述如何设置让听众设置监听器你的适配器。

设置监听器在你的适配器

从引擎接收通知当用户请求使用属性的当前值得到命令:

  1. 定义一个侦听器类,派生的IPropCustomGetFcn抽象的阶级将定义一个侦听器类

  2. 实现getValue ()阶级将虚函数在你的侦听器为你的类创建getValue()函数

  3. 副property-see侦听器类的一个实例将得到的听众与属性

定义一个侦听器类

创建一个侦听器类,派生从抽象类IPropCustomGetFcn,如以下示例所示。

在这个例子中,构造函数接受一个处理一个IAdaptor对象。因为工具箱建立听众每个实例的基础上,通过这种处理可以有帮助,但不是必需的。

IPropCustomGetFcn类定义了一个虚拟函数:getValue ()成员函数。在这个函数中,您定义适配器如何响应用户请求一个属性的当前值。更多的信息getValue ()功能,请参阅为你的类创建getValue()函数

# include“mwadaptorimaq。h MyDeviceImaq # include。h”/ /对于这个示例类MyDevicePropGetListener:公共IPropCustomGetFcn{构造/析构MyDevicePropGetListener公众:/ / (MyDeviceAdaptor *父母):_parent(父){}虚拟~ MyDevicePropGetListener () {};虚拟空间getValue (imaqkit:: IPropInfo * propertyInfo, void *值);私人:/ /声明父成员数据的句柄。MyDeviceAdaptor * _parent;};

为你的类创建getValue()函数

当用户请求一个属性的当前值,引擎调用getValue ()函数的侦听器类的属性。

你的getValue ()函数必须接受两个参数:

空白getValue (IPropInfo * propertyInfo, void *值)
  • propertyInfo是一个处理一个IPropInfoobject.-TheIPropInfo类的接口,可以让你得到关于属性的信息。例如,使用IPropInfo功能你可以检索属性名,它的存储类型和默认值。这些信息是有用的,如果你有一个通用的侦听器类来处理多个属性。

  • 价值是一个指针指向内存中的位置,你的适配器存储请求的属性值。——通过这个值作为一个引擎void *。你的getValue ()函数必须将值转换为相应的c++数据类型。下面的表告诉c++数据类型把所有财产类型支持的适配器套件。金宝app

    imaqkit: PropertyTypes

    c++数据类型

    CHARACTER_VECTOR

    char * *

    双*

    INT

    int *

    DOUBLE_ARRAY

    imaqkit: PropertyTypes: NDoubles *

    INT_ARRAY

    imaqkit: PropertyTypes: NInts *

    nonscalar数据类型,特征向量,双数组,和整数数组,你的侦听器类必须分配足够的内存使用的当前属性值新[]操作符。引擎删除该内存,称删除[]。使用一个特征向量属性:一个例子

    char * * returnStr = reinterpret_cast < char * * >(价值);* returnStr = imaqkit:: imaqmalloc (sizeof (char) * (stringLength));strcpy (* returnStr currentPropertyValueString);

建议算法getValue()函数。的设计getValue ()函数随你的需要其SDK提供的设备和设施。例如,您可以创建一个侦听器类,负责所有属性值查询在一个特定的属性容器(一般或特定于设备的)。在这种情况下,getValue ()函数包含一个switch语句的情况下,处理每一个属性。

另外,定义一个单独的侦听器类为每个属性或每个属性存储类型。然后,引擎调用特定的侦听器指定的属性。

你也可以定义侦听器类,符合设备SDK的方式组织属性配置。例如,如果一个SDK提供了一个函数来配置设备属性,您可以定义一个侦听器类为这些属性。

的例子。这个例子显示了一个实现的getValue ()函数的整数类型:

空白MyDevicePropGetListener:: getValue (IPropInfo * propertyInfo, void *值){/ /获得IPropInfo对象的属性名。const char * propname = propertyInfo - > getPropertyName ();/ /获取值使用任何设施设备的SDK提供了。* reinterpret_cast < const int * >(价值)= sdk_function_get ();/ /用于调试目的。imaqkit:: adaptorWarn(“在侦听器。属性名是% s \ n”, propname);}

将得到的听众与属性

为属性设置一个侦听器,您将侦听器对象与属性在属性的容器。下面的例子展示了如何添加获取听众的所有特定于设备的属性适配器属性的容器。适配器的作家通常设置属性constructor-see听众的适配器类实现你的适配器类的构造函数

  1. 处理到适当的容器对象属性。

    IEngine对象有两个成员函数,返回处理财产容器(IPropContainer对象)。示例调用IEnginegetAdaptorPropContainer ()成员函数来获取特定于设备的属性容器:

    imaqkit: IPropContainer * adaptorPropContainer = getEngine () - > getAdaptorPropContainer ();
  2. 得到侦听器添加到属性的容器,使用IPropContainer对象setCustomGetFcn ()函数。作为参数,指定属性名称和一个侦听器对象的句柄。

    请注意

    因为工具箱中删除的每个实例一个侦听器对象当用户删除视频的输入对象,将一个侦听器对象的新实例与每个属性。

    下面的例子容器适配器属性,遍历所有的属性将与每一个获取侦听器对象。

    空白MyDeviceAdaptor: MyDeviceAdaptor(){/ /对财产的处理容器IPropContainer * propContainer = getEngine () - > getAdaptorPropContainer ();/ /确定属性的容器的数量。int numDeviceProps = propContainer - > getNumberProps ();/ /获取容器中的所有属性的名字const char * * devicePropNames = new const char * [numDeviceProps];propContainer - > getPropNames (devicePropNames);/ /创建一个变量指向一个属性被监听器对象。MyDevicePropGetListener * getListener;/ /每个属性的容器……for (int i = 0;我< numDeviceProps; i++){ // Create a get listener object... getListener = new MyDevicePropGetListener(this); // and associate it with a specific property. propContainer->setCustomGetFcn(devicePropNames[i], getListener); } // clean up the array of property names. delete [] devicePropNames; }

在你的适配器设置设置监听器

收到通知从发动机当用户改变物业使用的价值命令:

  1. 定义一组监听器类,派生的IPropPostSetListener抽象的阶级将定义一个侦听器类

  2. 实现notify ()虚函数在你的阶级将设置监听器创建类的通知()函数

  3. 把你设置监听器类的实例与property-see将设置监听器与属性

定义一个侦听器类

创建一组侦听器类,抽象类IPropPostSetListener,如以下示例所示。(类名包括这个词帖子因为工具箱通知监听器后更新属性值存储在容器)。

在这个例子中,构造函数接受一个处理一个IAdaptor对象。因为工具箱建立听众每个实例的基础上,通过这种处理可以有帮助,但不是必需的。

IPropPostSetListener类定义了一个虚拟函数:notify ()成员函数。在这个函数中,您定义适配器如何回答当用户改变一个属性的值。有关更多信息,请参见创建类的通知()函数

# include“mwadaptorimaq。h MyDeviceImaq # include。h”/ /对于这个示例类MyDevicePropSetListener:公共IPropPostSetListener{构造/析构MyDevicePropSetListener公众:/ / (MyDeviceAdaptor *父母):_parent(父){}虚拟~ MyDevicePropSetListener () {};虚拟空间通知(imaqkit: IEnginePropInfo * propertyInfo, void * newValue);私人:/ /声明父成员数据MyDeviceAdaptor * _parent处理;/ /属性信息对象。imaqkit: IPropInfo * _propInfo;/ /整数属性的新值。int _lastIntValue;/ /双属性的新值。 double _lastDoubleValue; // The new value for character vector properties. char* _lastStrValue; };

创建类的通知()函数

当用户调用命令来改变财产的价值,引擎调用notify ()设置侦听器类与属性的函数。

一组侦听器类notify ()函数必须接受两个参数:

无效的通知(IPropInfo * propertyInfo, void * newValue)
  • propertyInfo是一个处理一个IPropInfo对象IPropInfo类的接口,可以让你得到关于属性的信息。例如,使用IPropInfo函数可以得到属性名,它的存储类型,其默认值。

  • newValue新的属性值是一个指针引擎通过这个值作为一个吗void *。你的notify ()函数必须将值转换为相应的c++数据类型。下面的表告诉c++数据类型把所有财产类型支持的适配器套件。金宝app

    imaqkit: PropertyTypes

    c++数据类型

    CHARACTER_VECTOR

    char *

    双*

    INT

    int *

    DOUBLE_ARRAY

    imaqkit: PropertyTypes: NDoubles *

    INT_ARRAY

    imaqkit: PropertyTypes: NInts *

建议通知()函数算法。的设计notify ()函数随你的需要其SDK提供的设备和设施。例如,您可以创建一个设置监听器类,它负责处理所有的所有属性值改变时在一个特定的属性容器(一般或特定于设备的)。在这种情况下,notify ()函数包含一个switch语句的情况下,处理每一个属性。

另外,你可以定义一个单独的组侦听器类为每个属性或每个属性存储类型。然后,引擎调用特定的侦听器指定的属性。

您还可以定义设置监听器类,适合SDK的方式组织属性配置。例如,如果一个SDK提供了一个函数来配置设备属性,这些属性可以定义一组监听器类。

的例子。这个例子显示了一个实现的notify ()函数的整数类型:

空白MyDevicePropSetListener::通知(IPropInfo * propertyInfo, void * newValue){/ /获得IPropInfo对象的属性名。const char * propname = propertyInfo - > getPropertyName ();/ /把newValue适当的类型newVal = * reinterpret_cast < const int * > (newValue);/ / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / /插入调用硬件设备SDK应用价值。/ / * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / /仅用于调试目的。imaqkit:: adaptorWarn(“在侦听器。属性名是% s \ n”, propname);}

将设置监听器与属性

为属性设置一个侦听器,您将侦听器对象与属性在属性的容器。下面的例子显示了如何添加设置监听器的所有特定于设备的属性在适配器属性的容器。适配器的作家通常设置属性constructor-see听众的适配器类实现你的适配器类的构造函数

  1. 处理到适当的容器对象属性。

    IEngine对象有两个成员函数,返回处理财产容器(IPropContainer对象)。示例调用IEnginegetAdaptorPropContainer ()成员函数来获取特定于设备的属性容器:

    imaqkit: IPropContainer * adaptorPropContainer = getEngine () - > getAdaptorPropContainer ();
  2. 添加一个侦听器设置为一个属性的容器,使用IPropContainer对象的addListener ()函数。作为参数,指定属性名称和一个侦听器对象的句柄。

    请注意

    因为工具箱中删除的每个实例一个侦听器对象当用户删除视频的输入对象,将一个侦听器对象的新实例与每个属性。

    下面的例子容器适配器属性,遍历所有的属性将与每个属性设置监听器对象:

    空白MyDeviceAdaptor: MyDeviceAdaptor(){/ /对财产的处理容器IPropContainer * propContainer = getEngine () - > getAdaptorPropContainer ();/ /确定属性的容器的数量。int numDeviceProps = propContainer - > getNumberProps ();/ /获取容器中的所有属性的名字const char * * devicePropNames = new const char * [numDeviceProps];propContainer - > getPropNames (devicePropNames);/ /创建一个变量指向一个属性侦听器对象。MyDevicePropSetListener * setListener;/ /每个属性的容器……for (int i = 0;我< numDeviceProps; i++){ // Create a set listener object... setListener = new MyDevicePropSetListener(this); // and associate it with a specific property. propContainer->addListener(devicePropNames[i], setListener); } // clean up the array of property names. delete [] devicePropNames; }