AddAttributeInvalidation

IVI Library

Ivi_AddAttributeInvalidation

Usage

ViStatus Ivi_AddAttributeInvalidation(ViSession vi, ViAttr attributeID, ViAttr dependentAttributeID, ViBoolean allInstances);

Purpose

This function creates an invalidation dependency relationship between two attributes. When you set the first attribute to a new value, the IVI engine marks the cache value for the second attribute value as invalid. When an attribute cache value is invalid, any attempt to obtain or change the current value of the attribute causes the IVI engine to invoke the read or write callback function for the attribute regardless of the cache value.

Create a dependency relationship if setting the value of one attribute can cause the value of another attribute to change or become out-of-range in the instrument. When this occurs, the cache value of the second attribute no longer reflects the true state of the instrument.

Two-Way Invalidations

Although you can create a two-way invalidation dependency relationship between attributes, it is rarely the correct thing to do. Cases can occur where changing one instrument setting affects another instrument setting, and changing the second instrument setting affects the first. The proper way to handle this situation is to impose a one-way invalidation model in the instrument driver. Identify one attribute as dominant and the other as dependent. Call Ivi_AddAttributeInvalidation to notify the IVI engine that changing the value of the dominant attribute invalidates the dependent attribute. Range check values for the dependent attribute based on the current setting of the dominant attribute. Do not allow the end-user to set the dependent attribute to a value that would cause the instrument to modify the setting of the dominant attribute.

Parameters

Name Type Description
vi ViSession

The ViSession handle that you obtain from Ivi_SpecificDriverNew. The handle identifies a particular IVI session.

attributeID ViAttr

Pass the ID of an attribute for this parameter.

The include file for a specific instrument driver defines constant names for all of the user-accessible attributes that apply to the driver. This includes attributes that the IVI engine defines, attributes that the instrument class defines, and attributes that are specific to the particular instrument. Each defined constant name begins with PREFIX_ATTR_, where PREFIX is the specific instrument prefix.

For each IVI engine attribute, the specific driver include file uses the same constant name that appears in ivi.h, except that the specific instrument prefix replaces the IVI prefix. For example, ivi.h defines IVI_ATTR_CACHE, and the Fluke 45 include file, fl45.h, defines the following constant name:

#define FL45_ATTR_CACHEĀ  IVI_ATTR_CACHE

For each instrument class attribute, the specific driver include file uses the same constant name that appears in the instrument class include file, except that the specific instrument prefix replaces the class prefix. For example, the DMM class include file, ividmm.h, defines IVIDMM_ATTR_RANGE, and fl45.h defines the following constant name:

#define FL45_ATTR_RANGEĀ  IVIDMM_ATTR_RANGE

For each specific instrument attribute, the specific driver include file defines a constant name and assigns a value that is an offset from IVI_SPECIFIC_PUBLIC_ATTR_BASE. For example, fl45.h defines the following constant name:

#define FL45_ATTR_HOLD_THRESHOLD \ (IVI_SPECIFIC_PUBLIC_ATTR_BASE + 3L)

For each attribute that is private to an instrument driver, the instrument driver source file defines a constant name and assigns a value that is an offset from IVI_SPECIFIC_PRIVATE_ATTR_BASE. For example, hp34401a.c defines the following constant name:

#define HP34401A_ATTR_TRIGGER_TYPE \ (IVI_SPECIFIC_PRIVATE_ATTR_BASE + 1L)

dependentAttributeID ViAttr

Pass the ID of the attribute to invalidate when the value of the first attribute changes.

allInstances ViBoolean

Specify whether the invalidation occurs on all possible repeated capability instances or only on the instance on which the value of the first attribute changes. This option is relevant only if both attributes are based on the same repeated capability.

Pass VI_TRUE (1) if you want the invalidation to occur on all repeated capability instances. Otherwise, pass VI_FALSE (0).

Return Value

Contains the status code that the function call returns. IVI engine functions can return error and warning values from several sets of status codes. Some status codes are unique to the IVI engine. Other status codes are the same codes that VISA Library functions return. Still others are error or warning values that functions in specific instrument drivers return. Each set of status codes has its own numeric range.

Regardless of the source of the status code, 0 always indicates success, a positive value indicates a warning, and a negative value indicates an error.

Related Topic

IVI Status Codes