Blue Robotics has chosen to retire this project, it is no longer maintained or supported. Bug reports and feature requests are no longer accepted. The repository has been archived and made read-only. The source is still available and can be forked, but this project may be permanently removed from GitHub in the future. For questions and further information, check out the Blue Robotics discussion forums and Gitter channel
Message definition and supporting libraries for the SolarSurfer project.
The project defines the command and telemetry definitions for the SolarSurfer project. JavaScript and C libraries are included to ease encoding and decoding messages.
Get the code:
git clone https://github.com/bluerobotics/SolarSurferMessage.git
cd SolarSurferMessage
npm install
Run the tests:
npm test
Message formats are stored in the src/formats.json file. Formats are defined by an unsigned integer and contain name
, payload
fields, and multipacket
fields. The payload field contains the definition for an array of variables that makes up the comm format. Each variable definition is an object and must have a name
and type
defined. Variables of type enum
and bitmap
also must have a map
defined. Maps for enums
can have up to 256 values and maps for bitmaps
can have up to 8 values.
To reduce duplicate variable definitions across formats, variable definitions can be defined in the upper level shared
object. These definitions can be reference by defining subsequent variable definitions to the shared object key (a string) instead of an object.
Once message formats are defined, preview the results the info script. This will parse the formats file and verify that all message formats are valid.
npm run-script info
The following data types are supported:
Data Type | Number of Bits | Range |
---|---|---|
uint8_t | 8 | 0 .. 255 |
int8_t | 8 | -128 .. 127 |
uint16_t | 16 | 0 .. 65,535 |
int16_t | 16 | -32,768 .. 32,767 |
uint32_t | 32 | 0 .. 4,294,967,295 |
int32_t | 32 | -2,147,483,648 .. 2,147,483,647 |
float | 32 | -3.4E38 .. 3.4E38 |
double | 64 | -1.7E308 .. 1.7E308 |
enum | 8 | the entire value is used in a lookup map |
bitmap | 8 | each bit is an isolated value |
char | 8 | 7 bit ascii value |
hex | 8 | 00 .. ff |
To be compatible with the ARM architecture, all data types are represented in little endian format.
The JavaScript and C libraries have identical APIs.
Message.encode(msg_object)
- returns a hex string of the supplied messageMessage.decode(hex_string)
- returns the message represented by the supplied hex_string
A typical application looks like this:
var msg = {
format: 1,
version: 1
}
var hex = SolarSurferComm.encode(msg);
This package can cross-compile the formats.json
file into an AVR-compatible message library. This makes it easy to publish a message to the RockBlock modem on an Arduino-like platform.
npm run-script makeclib
The C files are now available in output/
.
var m = require(‘SolarSurferMessage’); // OR var m = require(‘src/Message.js’)
m.loadConfigFile();
m.decode(‘hex string here’)
This project uses semantic versioning.
- Message format v2
- Refactored telem message into a long and short telem message
- Added bower config for limited client-side use
- The only function currently supported in a browser is config parsing
- Used for Monterey Bay mission
- Initial release
- Message format v1
- Used for Santa Monica Canyon mission
- TODO: encode images
- TODO: decode images
- convert to an Angular module that can be used client-side and server-side
- use https://github.com/chrisdickinson/bops for client/sever buffer operations