Code for the ISEE-3 Reboot Mission
Switch branches/tags
Nothing to show
Clone or download
balint256 Merge pull request #3 from rillian/error
Fix returning errors to the json client.
Latest commit 325fb6c Aug 13, 2014
Failed to load latest commit information.
LICENSE Prep for public release Jul 25, 2014


Code for the ISEE-3 Reboot Mission

Balint Seeber (Twitter)


Telemetry parser, decoder, server & grapher.


  • python, and bindings for:
  • curses
  • json-pickle
  • matplotlib (for grapher)


  • Multiple raw stream inputs:
  • Listen on UDP socket for hard-decision symbols
  • Connect to TCP server supplying decoded full frames
  • Input from file
  • Elements are declared in elems_*.py (the engine does the rest in terms of collecting the data)
  • Elements built using extensible primitives:
  • CustomOffset: collection of raw bytes/bits
  • Parser: assemble raw bytes/bits into element data
  • Validator: check if data is valid
  • Formatter: convert data into human-readable form
  • Element and curve files are automatically loaded
  • Automatically creates UI layouts, or customise them yourself
  • Headless operation
  • In-built JSON server


The UI is displayed using curses. It will only work if your terminal is large enough!

Keyboard shortcuts (shown in top-right corner underneath current layout name):

`		Raw frames
~		Subcom frames
1 to 0	Automatically mapped to layouts
h		History layout
<other>	First letter of layout name (see below)
<ESC>	Quit

Custom layouts can be created in If no custom layout is specified, layouts will be automatically generated (one for each elems_*.py). An automatically-generated layout will assume the name of the element definition file (i.e. elems_<name>.py).


In-built JSON server ( allows client applications (e.g. to register for updates to elements. The server will push updates whenever a registered element's value is updated (the value may or may not have changed). See the client code in for an example of the protocol.


Usage: [options] [TCP server[:port]]

  -h, --help            show this help message and exit
  -L LOAD_PATH, --load-path=LOAD_PATH
						path to load elements from [default=.]
  -s SLEEP, --sleep=SLEEP
						loop sleep time (s) [default=0.01]
  -p PORT, --port=PORT  port (UDP server or TCP client) [default=22222]
  -P SERVER_PORT, --server-port=SERVER_PORT
						server port [default=21012]
  -S, --always-sleep    always sleep in inner loop [default=False]
  -v, --verbose         verbose logging outside of UI [default=False]
  -m MODE, --mode=MODE  select telemetry mode (science,engineering)
  -H, --headless        do not run the UI [default=False]
  -i INPUT, --input=INPUT
						input file (instead of network) [default=none]

Usage: [options] <destination>[:port] <element>[,<key=value>]... ...

  -h, --help            show this help message and exit
  -p PORT, --port=PORT  TCP port [default=21012]
  -s SLEEP, --sleep=SLEEP
						reconnect sleep time (s) [default=1.0]
  -T TIMEOUT, --timeout=TIMEOUT
						GUI event handler timeout (s) [default=0.01]
  -d DURATION, --duration=DURATION
						default duration (s) [default=60.0]
  -t TYPE, --type=TYPE  default value type (raw, out) [default=out]
  -x X_TYPE, --x-type=X_TYPE
						default X-axis type (blank: consecutive samples, time)
  -n, --no-reconnect    do not automatically reconnect [default=False]


./ -m s server:12321

Connects to port 12321 on server and starts up in science mode.

./ localhost accelerometer,duration=1000 28v_bus shunt_dump_current fss_angle_a

Connects to the local running instance of and graphs accelerometer values over a longer duration, as well as the other three elements over the default duration.