1. Open an ADDP handle
Any interaction with the ADDP library must begin by calling the
ADDPOpen function.
addp_handle_t handle = ADDPOpen(ADDP_VENDOR_ID_DIGI);
Calling ADDPOpen establishes a new session
with the ADDP library, and returns a handle of type
addp_handle_t that is needed for all of the other ADDP
library APIs.
For each successful call to ADDPOpen there
must also be a call to ADDPClose to close the
ADDP session and invalidate the addp_handle_t (see
step 6).
2. Discover devices
After calling ADDPOpen and verifying the
handle returned is valid, a device search may be started. The ADDP
library provides two different types of device search mechanisms,
synchronous and asynchronous. This sample application demonstrates
both.
The first mechanism is synchronous, whereby the API used to
start the device search does not return until an entire search has
completed. The sample calls
ADDPStartSyncSearch.
The ADDPStartSyncSearch uses two separate
timeout values to determine when the device search should
terminate. The first timeout value is the maximum amount of time to
wait between search responses received from devices, and the second
is the maximum time the entire search should ever take. The
ADDPStartSyncSearch API uses default values for
these two timeouts. The ADDPStartSyncSearchEx
function may be used to specify alternative timeout values.
The second search search mechanism is asynchronous. The
asynchronous search APIs return immediately, and use one of three
mechanisms to notify the caller that search results have been
received. The three notification mechanisms are: send a window an
application defined message, call an application defined callback
function, or signal an event. The sample uses the
ADDPStartAsyncSearchMessage API.
The ADDPStartAsyncSearchMessage takes as
parameters the addp_handle_t returned from
ADDPOpen, a HWND window handle, a
application defined window message to be sent to that window, and
optionally a void pointer that will be sent as the
LPARAM of the window message. The ADDP library
notifies the sample application that search responses have been
received by sending the window specified the application defined
message. Note that not every response results in the window message
being sent.
The other two asynchronous search APIs are
ADDPStartAsyncSearchCallback, and
ADDPStartAsyncSearchEvent.
After completing a call to
ADDPStartSyncSearch or when being notified
asynchronously that there are search results to be retrieved, the
sample gets the results with the following code:
addp_device_info_t DevInfo = {0};
while (ADDPGetSearchResultCount(handle) > 0)
{
ADDPGetSearchResults(handle, &DevInfo, 1);
}
ADDPGetSearchResultCount returns the current
number of results available to be retrieved, and the
ADDPGetSearchResults function is used to copy
search results into a storage space defined by the application. For
each device discovered on the network, a
addp_device_info_t will be returned. See the
ADDP library header file addp.h for the current
definition of the addp_device_info_t data
structure.
When a search is complete, or to stop an active asynchronous
search the sample application calls
ADDPStopSearch.
3. Configure network settings
The sample provides a means to configure the network settings of
a device. The settings that may be configured are DHCP mode, IP
address, subnet mask, and default gateway address.
To change the DHCP mode, the sample calls:
ADDPSetDHCP(handle,
MACAddress,
DHCPMode,
Password);
Where handle is the addp_handle_t
returned by ADDPOpen, MACAddress
is the MAC address of the device you wish to change the DHCP mode
on, DHCPMode is either
ADDP_DHCP_MODE_ENABLED or
ADDP_DHCP_MODE_DISABLED, and Password is
the root user's password for the devices.
To configure a static IP address, subnet mask, and default
gateway on a device, the sample application uses the
ADDPSetNetwork API.
ADDPSetNetwork(handle,
MACAddress,
IPAddress,
SubnetMask,
DefaultGateway,
Password);
Here again, handle is the handle returned by
ADDPOpen, and MACAddress is the
MAC address of the device to configure. The next three parameters,
IPAddress, SubnetMask, and
DefaultGateway are IN_ADDR variables
defining the static IP address, subnet mask, and default gateway to
assign. Finally, Password is the password for the root
user on the device.
Note that the device should be rebooted for these changes to
take affect.
4. Get device information
Device information, like that retrieved from conducting a
search, can be gotten from an individual device. The ADDP library
provides the following API to process that request:
addp_device_info_t DevInfo = {0};
ADDPGetDeviceInfo(handle,
MACAddress,
&DevInfo);
Similar to the network configuration APIs,
ADDPGetDeviceInfo takes as parameters the
addp_handle_t returned from
ADDPOpen and the MAC address of the device to
retrieve information from. The caller must also provide space to
copy the addp_device_info_t data to as the
DevInfo parameter.
5. Reboot a device
The ADDPRebootDevice function can be used to
cause a device to perform a reboot.
ADDPRebootDevice takes as parameters the
addp_handle_t returned from
ADDPOpen and the MAC address of the device to
reboot. The reboot operation also requires the device's root user
password, which is sent as the third parameter.
The sample also provides the following bit of code:
addp_device_info_t DevInfo = {0};
int Iterations = 0;
while ((ADDP_SUCCESS != ADDPGetDeviceInfo(handle,
MACAddress,
&DevInfo))
&&
(Iterations < MAX_ITERATIONS))
{
Sleep(RETRY_TIME);
Iterations++;
}
which is used to discover when a rebooting device comes back
online. The ADDPGetDeviceInfo function can be
used as a sort of "ping" operation, where a return value of
ADDP_SUCCESS would indicate that the device has
rebooted and can be communicated with.
6. Close the ADDP handle
When the ADDP handle returned by ADDPOpen is
not longer needed, it must be closed in order to invalidate the
session and free any resources the ADDP library may have allocated.
Do this by calling ADDPClose which takes only
the addp_handle_t you wish to close as a
parameter.