Helper Modules
This section refers to the following sample application(s):
00-hello00-hello_common
The 00-hello sample application contains a task dedicated at driving the local interface module by continuously calling the dnm_loc_processNotifications() function. To simplify the code of all sample applications, this task, together with the other required initialization code listed in A First Application, is put in the following helper modules:
common/loc_task.chandles the common code for interfacing with the local interface module.common/cli_task.chandles the common code for interfacing with the CLI module.
These helper modules are included in all sample applications.
The cli_task helper module
This helper module deals with the CLI, and avoids duplicated code across sample applications.
To use this module, your application needs to call the cli_task_init() function. It takes the following parameters:
cliContext, the CLI context of the application (as detailed in CLI Module).
appName, a string which will appear in the greeting banner.
cliCmds, an array of CLI commands which will appear next to the base CLI commands when typing "help". Pass
NULLto not register additional CLI commands.
This module:
Prints a banner with your application's name and the version number, as well as the version number of the
it is linked against.
Registers the list of CLI commands, if any.
Starts a task to receive indications when a user enters one of the CLI commands your application added.
The loc_task helper module
This helper module deals with joining a network and requesting a service, and avoids duplicated code across sample applications.
To use this module, your application needs to call the loc_task_init() function. It takes the following parameters:
cliContext, the CLI context of the application (as detailed in CLI Module).
fJoin, a flag to indicate whether you want the module to join a network. Pass
JOIN_NOto not join.netId, the Network ID of the network to join. Pass
NETID_NONEif you don't want to overwrite the one already present in the mote.udpPort, the UDP port you want your application to bind to. Pass
UDPPORT_NONEif you do not want to create a socket.joinedSem, a pointer to a uC/OS-II semaphore which will be posted when the
loc_taskhelper module is done joining the network. PassNULLif you don't need this functionality.bandwidth, the amount of bandwidth you'd like the
loc_taskhelper module to request after it has joined. PassBANDWIDTH_NONEif you don't require additional bandwidth.serviceSem, a pointer to a uC/OS-II semaphore which will be posted when the
loc_taskhelper module has been granted that additional bandwidth. PassNULLif you don't need this functionality.
This module will then:
Create the appropriate channel to communicate with the
.
Initialize the "Local Interface Module".
Optionally, configure the network identified of the mote.
Optionally, create a UDP socket and bind it to the specified UDP port.
Optionally, join a network.
Optionally, post a semaphore indicating it has joined a network.
Optionally, request a service to the
.
Optionally, post a semaphore indicating the service was granted.
The loc_task helper module allows the sample applications to perform these routine actions by calling a single function.
You cannot use the loc_task module in combination with the autojoin CLI settings. If you set autojoin to 1, the loc_task helper module will not be able to join a network.
The 00-hello_common Sample Application
This sample application is similar to the 00-hello sample application, but relies on the cli_task and loc_task to initialize the CLI and
.
When running the 00-hello_common sample application, a first banner prints the name of the application and the version. A second banner prints the version of the
.
> hello_common app, ver 1.0.0.1
SmartMeshIP stack, ver 1.2.1.3
>
> help
help <command>
Commands:
mtrace
mset
mget
minfo
mlog
mfs
mseti
mgeti
mshow
mxtal
mhwlog
>