The Iris architecture can be used to build software radios using plugin libraries called components. These components expose parameters which can be changed to control how the component operates. XML configuration files are used to specify the components and parameters of a particular radio and can be used to reconfigure a radio while it is running. Self-configuring software radios can be built using another type of plugin library called a controller.
Controllers have a global view of all engines and components in a radio and can reconfigure the running radio at any time by adjusting component parameters. A simple controller could be used for example to scan frequencies in a wireless receiver.
Here, the radio consists of a Usrp front-end receiver, an OFDM demodulator and a file writer. The controller simply enters a loop, reconfiguring the receive frequency on the Usrp radio front-end and then sleeping for a set amount of time. Of course, with this design there is no mechanism for the radio to lock onto a received signal – it will simply continue scanning forever. Some mechanism is needed to allow a component to notify the controller to stop when a signal is received.
In Iris, this is what component events are used for. Building on the previous example, we could design the OFDM demodulator so that it triggers an event whenever an incoming signal is detected. Controllers can subscribe to events on specific components in order to be notified when that event is triggered. In this way, our controller gets notified when the OFDM demodulator detects an incoming signal and exits the scanning loop, thus locking onto the signal of interest.
Using controllers, events and parameters in this way, we can build “smart” self-configuring radios which adapt to changes in their operating environment to maintain and optimize communications links.