Phidget Dictionary: Difference between revisions

From Phidgets Support
No edit summary
 
(5 intermediate revisions by 3 users not shown)
Line 2: Line 2:
==General Overview==
==General Overview==


Dictionary is Phidget channel class that exports a key-value pair database.  Dictionaries are create and made accessible by the [[Phidget Network Server]].  A Dictionary channel is created and opened like any other Phidget channel.  Matching is done using either the serial number or the label assigned to the dictionary.
[[Image:Dictionary-networkserver.jpg|600px|link=|alt=]]
 
The Dictionary is a Phidget channel class that exports a key-value pair database.  Dictionaries are created and made accessible by the [[Phidget Network Server]].  A Dictionary channel is created and opened like any other Phidget channel.  Matching is done using either the serial number or the label assigned to the dictionary.


The backing pseudo-device that exports the Dictionary device channel is maintained by the [[Phidget Network Server]], and is created when the server starts.  When the server exits, the pseudo-device is deleted, and any changes made to a dictionary are lost.
The backing pseudo-device that exports the Dictionary device channel is maintained by the [[Phidget Network Server]], and is created when the server starts.  When the server exits, the pseudo-device is deleted, and any changes made to a dictionary are lost.
Line 43: Line 45:
</syntaxhighlight>
</syntaxhighlight>
</div>
</div>
==Notes==
A common mistake is to assume an event will be delivered to the channel that triggered the event.  This is not the case.  For example, when a channel adds a key, that channel's add event handler is not called.
It is an error to {{Code|Add()}} a key that already exists in the dictionary.  {{Code|Set()}} should be used to update existing keys, creating the key if it does not already exist.
There is no way to directly list all of the keys in a dictionary.  The {{Code|Scan()}} method allows code to access the existing keys, but only returns the number of keys that can be held in a limited sized buffer.  This interface was chosen as the dictionary could contain more keys than could reasonably be returned in a single network request.

Latest revision as of 17:53, 6 March 2019

General Overview

The Dictionary is a Phidget channel class that exports a key-value pair database. Dictionaries are created and made accessible by the Phidget Network Server. A Dictionary channel is created and opened like any other Phidget channel. Matching is done using either the serial number or the label assigned to the dictionary.

The backing pseudo-device that exports the Dictionary device channel is maintained by the Phidget Network Server, and is created when the server starts. When the server exits, the pseudo-device is deleted, and any changes made to a dictionary are lost.

The basic functionality of a Dictionary is to maintain configuration information in a central location. Multiple clients can attach to the same dictionary, and set handlers for add, update and delete events, making the dictionary useful for monitoring and communicating state.

Creating a Dictionary

Dictionaries are managed by the Phidget Network Server. To create a dictionary, go to the Phidget Control Panel and click on the Network Server tab. There are options to create and manage dictionaries. The server must be enabled for clients to access dictionaries.

On Linux, refer to the README for information on how to enable the dictionary feature in the Phidget Network Server, and for the syntax of dictionary configuration files.

Using The Dictionary

To access a dictionary, create a channel, set the serial number or the label, and open the channel. To "listen" for changes to the Dictionary, onAdd(), onRemove(), and onUpdate() event handlers can be set. Refer to the Phidget22 API to see the methods supported by Dictionary.

Here's an example of how you might use the dictionary in a C program:

PhidgetDictionaryHandle dict;
char val[32];

PhidgetDictionary_create(&dict);

// Open connection to the dictionary using the serial number
Phidget_setDeviceSerialNumber(dict, 5000);
Phidget_open(dict);

PhidgetDictionary_add(dict, "my_key", "my_value"); // add a key that does not already exist 
PhidgetDictionary_get(dict, "my_key", val, sizeof (val)); // get the value back
printf("Value: %s\n",newValue);

PhidgetDictionary_remove(dict, "my_key"); // remove the key

Phidget_close(dict);
PhidgetDictionary_delete(&dict);

Notes

A common mistake is to assume an event will be delivered to the channel that triggered the event. This is not the case. For example, when a channel adds a key, that channel's add event handler is not called.

It is an error to Add() a key that already exists in the dictionary. Set() should be used to update existing keys, creating the key if it does not already exist.

There is no way to directly list all of the keys in a dictionary. The Scan() method allows code to access the existing keys, but only returns the number of keys that can be held in a limited sized buffer. This interface was chosen as the dictionary could contain more keys than could reasonably be returned in a single network request.