...
- send packets to motes via the coap library
- wait on incoming packets
- keep track of all motes that are in its ring (in this case with a simple queue) and send instructions in a rotation
- handle error handling - motes dropping off unexpectedly, packet loss, receiving unexpected packets
Code - firmware
The firmware code is the main addition (openwsn-fw), which runs on the motes.
Here is the firmware pull request: https://github.com/openwsn-berkeley/openwsn-fw/pull/128/List of files changed:
File Changed | Description |
---|---|
bsp/boards/python/openwsnmodule_obj.h |
...
add rrt_vars_t struct to python OpenMote struct | |
inc/opendefs.h |
...
add ringmaster port constant on which to listen to and send ring master packets | |
openapps/SConscript |
...
add rrt as part of the default apps to be built with SCons | |
openapps/openapps. |
...
c | add rrt_init(), the initialization function for rrt resource |
openapps/rrt/rrt.c |
...
add rrt resource to openapps, with the code for handling all mote actions. A GET action sends confirmation to the ringmaster, a POST action accepts payloads and determines what to do next (forward, perform action, or nothing), and a DELETE (which unregisters a mote). rrt.c also defines a function sendCoAPMsg, which sends a char to either an address or a hardcoded ringmaster address | |
openapps/rrt/rrt.h |
...
define function signatures to be used outside of rrt.c, as well as the rrt_vars_t struct | |
openapps/rrt/rrt.py |
...
simple python program for testing python coap library functionality - no purpose other than coap library experimentation | |
openstack/04-TRAN/opencoap.h |
...
hardcoded ringmaster address added here | |
openstack/04-TRAN/openudp.c |
...
add switch blocks for the ringmaster port in |
...
openudp_receive and |
...
openudp_sendDone |
openstack/SConscript |
...
add proper path for rrt folder | |
projects/python/SConscript.env |
...
add proper constants to get the proper objectification |
...
Code - ringmaster.py
Here is the repo: https://github.com/openwsn-berkeley/ringmaster
To run the client, simply execute
python ringmaster.py
This will open up communication with OpenWSN motes on default port 15000.
This script maintains a stack (array) of registered motes that have sent a discovery packet to it. It maintains a pointer which rotates through the stack.