Components of the System

There are several major components:

    1. The central core of the system, the component through which all others  communicate with each other.
    2. The application, the logic of what processes a  software radio needs to go through in order to carry out its instructions, whether those instructions come from a human user or some internal or external process.
    3. The user interface which interprets the user gestures and presents operational information back to the user.
    4. The signal processing core.
    5. The external interfaces to the radio hardware and audio or sampling sub-systems.

System Core

The system core is a messaging hub. It deals with the mechanics of  communications between components thus relieving the components of needing to know the details of  physical names and locations. Components are required to register with the core when they are created and de-register when they are terminated. Between times they only need to know the class name of any component they need to talk to. Such class names are provided as arguments to a component when it is started.

Application

It's a generally accepted rule that the presentation and application logic should be separated . The ultimate separation is of course to have them as separate processes completely. The application is responsible for accepting requests from any other part of the system and orchestrating the commands to the rest of the system, if you like the business components of the system in order t o execute that request.. Requests of course usually have a response, the response is often in the form of updates to some other parts of the system, the user interface being typical.  The application component has been designed in such a way that changing or extending the behaviour is a defined procedure. This means the usual stumbling block of 'where do I add code to do such and such' is not an issue. The developer guide will eventually contain all this type of information, recipies and patterns to change and extend behaviour.

User Interface

The user interface is a flexible container which can support mixed content and is not limited by size or the number of controls it needs to provide to the user for any particular radio application. It is one area where frequent extension and customisation is expected.

Signal Processing Core

The DSP core is pure signal processing. A flexible architecture is needed as this area is also expected to undergo frequent changes and be the subject of experimentation. Currently the main core is DttSp and this will remain a prime implementation on all platforms. There is also another core under development which will be modelled algorithmically on DttSp but will be quite a different architecture. This is known as jDSP and is currently a very embroyonic implementation. It is in Java with an Erlang and Jython interface and described on the Architecture page.  

External Interfaces

The external interfaces are control of the radio hardware and interfacing either to audio sub-systems such as ASIO, ALSA/Jack etc or to dedicated digitising hardware through USB or Ethernet interfaces.

Technologies

It is necessary to introduce some technical aspects at this time as some knowledge is needed for the User Interface and more particularly the System Management  sections.

Component Technology
System Core Although the core is essentially a single component all system components contain core libraries so the core is effectively some central management and the distributed interconnections of the system. The core is implemented in Erlang which is a highly capable language specifically aimed at fault tolerant distributed systems. By design Erlang is a cross-platform dynamic functional language and therefore the core is cross-platform.
Application The application talks to every other component of the system and therefore spends much of its time constructing and sending messages. It is also an implementation of a finite state machine. It turns out that both these requirements are best addressed by Erlang and thus the application is a pure Erlang implementation. 
User Interface The user interface is implemented in Jython using the Java Swing GUI libraries and the Erlang jInterface libraries. Jython is a dynamic language with the same syntax as Python but implemented in 100% pure Java. Again this makes the GUI fully cross-platform and agile to change.
Signal Processing Core The current implementation is 'C' using the Erlang ei library and binding to the DttSp core. However as indicated above this will be augmented by jDSP.
External Interfaces There are a number of these which are/will be implemented as Erlang port drivers to C dynamic libraries. These interfaces will require compilation for each platform.


Communications

All control paths are implemented by message passing between the components (via the system core). Samples however are managed in a shared memory area for efficiency reasons. External interfaces are responsible for acquiring and dispatching samples and any other component manipulating or requiring samples uses this shared memory area with access controlled by a simple protocol.