Phidget Dictionary: Difference between revisions
No edit summary |
|||
(13 intermediate revisions by 3 users not shown) | |||
Line 2: | Line 2: | ||
==General Overview== | ==General Overview== | ||
[[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 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== | ==Using The Dictionary== | ||
To | 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, {{Code|onAdd()}}, {{Code|onRemove()}}, and {{Code|onUpdate()}} event handlers can be set. Refer to the {{Phidget22API}} to see the methods supported by Dictionary. | |||
Here's an example of how you might use the dictionary in a C program: | Here's an example of how you might use the dictionary in a C program: | ||
<div class="source"> | <div class="source"> | ||
<syntaxhighlight lang=c> | <syntaxhighlight lang=c> | ||
PhidgetDictionaryHandle dict; | PhidgetDictionaryHandle dict; | ||
char val[32]; | |||
PhidgetDictionary_create(&dict); | PhidgetDictionary_create(&dict); | ||
// Open connection to the dictionary using the | // 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); | PhidgetDictionary_delete(&dict); | ||
Line 72: | Line 46: | ||
</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.