Geoffrey Mainland

Geoffrey Mainland: TinyOS

Much of my past research dealt with sensor networks, so I spent a great deal of time working with TinyOS. I no longer work with TinyOS, so the software here is becoming increasingly out of date. You're welcome to use it as you see fit (and in accordance with the included license), but I'm afraid I can't offer active technical support.

Flows

Flows is the multi-hop publish/subscribe routing protocol for sensor networks that is used in Flask. The goal of the Flows protocol was not to come up with a new protocol per se, but to provide a specific application interface to help support macroprogramming systems. A visualization application is included that allows interactive control of applications using the Flows protocol as they are run on real hardware. This tools is written in Python and requires py-gtk.

This code requires NesC 1.2 and a version of TinyOS that supports NesC 1.2 (currently it is built with TinyOS 1.1.15).

The flow code is available via subversion from:

Fibers

Fibers allow a limited form of cooperative multi-threading on the TinyOS platform in which there can be a single blocking task. BlinkFiber is a version of Blink adapted to use fibers.

Abstract Regions

My implementation of abstract regions from our NSDI '04 paper includes a version of GPSR built on abstract regions, and is available here. Matt Welsh has a separate implementation.

TinyOS on FreeBSD

Because my operating system of choice is FreeBSD, I've collected some hints on using TinyOS under FreeBSD. I'd aslso like to enter my own personal plea to PLEASE use $(MAKE) in makefiles instead of invoking make directly! Remember, GNU make is not always named make!

FreeBSD ports for TinyOS Tools

I've made FreeBSD ports of most of the TinyOS tools for both the AVR and MSP430 platforms. They are available here:

FTDI on FreeBSD

The Telos motes have given me a lot of trouble. FreeBSD has an FTDI driver, but it consistently dropped bytes for me so I couldn't reprogram any devices. The ucom.c patch below mostly fixes the problem for me, but undoubtedly breaks other things (just not anything I care about yet). Telos motes will still sometimes wedge, but unplugging them and plugging them back in usually gets them to work again. Sometimes manually resetting the motes is also required.

Note: FreeBSD 8.0 has a new USB stack. Hopefully this has corrected the ucom issue, but I have not checked. In any event, the patch here will not work with FreeBSD 8.0 or later.