Clone our GitHub Firmware repository!
The Texas Instruments CC430F6137 powers the Faraday radio. This was a deliberate choice as the documentation provided from TI for the MSP430 family is excellent and learning bare-metal programming fundamentals is a great way to understand what’s going on under the hood. This constraint also forced us to attack each problem along the way with deliberate understanding of the solution. Thus, ensuring we too understood exactly how each part of the radio functions.
Units will be shipped without any JTAG connector populated. Optionally, radio owners can purchase the additional JTAG connector from us or any preferred distributor if they intend to develop firmware on the PCBA. Easily hand-soldered, the JTAG connector allows a TI MSP-FET adapter to connect to Faraday on the bottom of the PCB. This is an awkward location remedied with standoff mounting but a necessity to keep costs low and automate production for a majority of the users who will likely not develop the firmware.
Firmware binaries are installed via the Micro-USB B connector using an on-board bootloader. This means owners of Faraday radios can enjoy upgraded firmware without the expense or inconvenience of setting the radio up for firmware development.
Clone our GitHub software repository!
We’re learning too, therefore we’ve realized that the POST and GET architecture detailed below is fundamentally the best path forward. While our code base implements similar architecture it is not strictly compliant. We are actively updating our code base to strictly follow the architecture below during the initial launch of Faraday.
Most developers implementing the Faraday platform will interface with our Software Proxy. This is the fundamental program which connects to Faraday over a serial COM port via the micro-USB and provides a RESTful interface to all upstream programs. These interactions all occur in one common place, the network interface. Most people know this as localhost. There’s no place like 127.0.0.1!
Faraday Core programs include everything needed to use the radio out of the box. These applications are akin to the core applications on your iPhone or Android device. They serve as building blocks to provide basic services as well as examples for those interested in learning. As you can see, all applications interact with the world via POST and GET requests, this is RESTful. The Faraday platform boils the interfaces down to the simplest solution.
Faraday Core programs include everything needed to use the radio out of the box. These applications are akin to the core applications on your iPhone or Android device.
Proxy | The Gateway to Faraday
Proxy is the gateway to Faraday. It is a Flask server providing a RESTful interface to the radio. Binary data is BASE64 encoded for transmission across the localhost. Unless you really know what you’re doing, use Proxy to communicate with Faraday over the Micro-USB cable.
Applications provide a function using the data sent over the Faraday radio. Data is exchanged over localhost between programs efficiently. BASE64 encoded messages are used when interfacing Proxy however most applications will provide their own localhost interface which could be more human readable formats such as JSON. Our core applications give the Faraday platform value out of the box.
Applications do not need to be written in Python. We’ve published the interface specifications expected by the firmware. Any program communicating over localhost RESTfully can be an application.
Telemetry | Remotely Sensing The World
This application decodes telemetry packets from Proxy, parsing them into JSON dictionaries, and saving them to a local SQLite database. The database is then queried to provide telemetry and metadata regarding all local and RF radios. An upstream facing flask server then provides a RESTful interface to this queried data over localhost.
Messaging | Connecting Radio Amateurs
Message data packets are decoded and combined after being fragmented depending on message length. They are then provided to upstream programs via a flask server RESTfully over localhost. In reverse, the messages to be sent are fragmented and encoded into BASE64 packets sent to the Proxy. This application enables simple point-to-point and network based text communications between stations.
File | Transferring Arbitrary Data
Inherently similar to the messaging application, this application combines fragmented packets from the Proxy and stores them locally to be accessed over a RESTful interface with flask. Data to be sent to Faraday is similarly fragmented and encoded into BASE64 packets to be sent to the Proxy. Data sent as files could be actual files, images, digital audio, etc.
APRS-IS | Situational Awareness
The Faraday platform is not intended to be just another APRS. However, it’s convenient to interface with the APRS network. This actually highlights our ideology that we should as radio amateurs bridge networks to provide interoperability. This program interfaces with the telemetry application to send APRS formatted data over a socket to the APRS-IS network once every 60 seconds by default. All APRS formatted packets are also by default set to not repeat over RF.
Faraday platform based radios will show up on the APRS system with significantly less positional accuracy than Faraday telemetry. However, excellent services such as www.APRS.fi provide a convenient way to map stations. FaradayRF is not in the business of providing APRS-IS mapping services. We’ll let the people who know what their doing provide that.
This is where RESTful interfaces absolutely shine! Amateur radio can now leverage technological improvements from modern projects to remain relevant and stylish. Web developers will feel at home designing interfaces for the Faraday platform radios. We have already leveraged projects such as jQuery and turf.js to quickly enhance the capabilities of the system.
Interfacing the RESTful applications, our base user interface implements bootstrap to dynamically present data and interact with radio stations, local or remote, via the web browser. Simply navigating to http://localhost when the Faraday platform is running will pull up the UI.
As shown above as an example, our bootstrap based UI is clean and modern. The mission specific code such as our High Altitude Balloon page utilized the turf.js library from MapBox to easily calculate geographic information. We even utilized the beautiful chart.js to plot data live from any station received by Faraday. FaradayRF is committed to bringing amateur radio the tools and platform necessary to enhance our ability to innovate.
Don’t like the UI? Feel free to build one that suits your needs. The RESTful API to our applications is the platform from which nearly any dashboard or UI project can interface. We suggest checking out projects such as the exceptionally handsome Dashing or NASA’s OpenMCT. Amateur radio spectrum is a privilege and we should be learning to use it to accomplish our needs. Let’s do this!
FaradayRF is committed to bringing amateur radio the tools and platform necessary to enhance our ability to innovate.