aaltosatellite / skylink

Skylink protocol implementation

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Skylink

Skylink protocol is a point-to-point communication protocol designed for small satellite applications operating over radio amateur band. The protocol has been designed to facilitate an efficient and reliable packet transmission between a satellite and ground station over a narrowband half-duplex channel and can be used for example operating a small satellite.

The protocol implements for example features such as:

  • Four logical virtual channels for mission specific purposes
  • Windowed Time Division Duplexing (TDD)
  • Reliable data transfer using automatic retransmission (ARQ)
  • Uplink and downlink data authentication

More detailed protocol specification can found /docs/Skylink_protocol_Specification_v1.pdf.

This repository contains the protocol implementation, PC host application and various test scripts. The implementation (found from /src) is written in pure C and has been designed to run on memory limited microcontrollers in space.

The source code is available under LGPL license, see LICENSE for the license text.

Main authors: Petri Niemelä, Markus Hiltunen

Special thanks: Tatu Peltola, Baris Dinc

Building for PC

Skylink implementation itself doesn't depend on any external libraries. However, to run the implementation on a PC a hosting application is required to handle the communication between protocol and modem/radio and between protocol and user application. For this purpose, the PC build includes gs (ground station) application which interfaces with Suo Modem library and other user applications via ZMQ sockets.

Before starting the compiling process, the ZeroMQ library shall be installed on the system. For example from apt on Debian based distros.

$ sudo apt install libzmq3-dev

Also, download and install Suo Modem library according to its instructions. If the So library is installed to the system directories, the build system should be capable of locating it automatically. Otherwise, the location of the Suo git repository needs to be hinted to the Cmake by giving SUO_GIT define as shown in following instructions.

$ git clone https://github.com/aaltosatellite/skylink
$ mkdir build
$ cd build
$ cmake .. -DSUO_GIT='~/[yoursuopath]/suo'
$ make

This compiles the libskylink.so, gs application and various unit tests.

In the PC configuration, the software stack including Skylink can look for example like this: Skylink implemented in PC application

After this the compiled gs host application located in build/gs/gs and the suo modem application can be launched. The interfacing with Skylink's virtual channels over ZMQ sockets can be done for example using interface library scripts/vc_connector.py.

Including Skylink into an embedded application

Because no well standardized method for cross compiling libraries for embedded applications doesn't exist, the easiest method to include the Skylink implementation into a project is by symbolically linking the src folder under your project or by copying the whole src folder under the project. The Skylink project expects to find its includes located inside the src, so you need to add the Skylink implementation directory to the compiler's include directory listing.

In an embedded applications, the software architecture could look for example like this:

Skylink implemented in an embedded application

TODO: Example implementation.

Python parser

The python folder includes an (almost) independent parser for handling Skylink frames. The implementation can be used to parse and construct individual Skylink radio frames but it doesn't include the required logic to drive the protocol implementation in real-time for two-way communication.

About

Skylink protocol implementation

License:GNU Lesser General Public License v3.0


Languages

Language:C 86.7%Language:Python 9.1%Language:C++ 3.5%Language:CMake 0.7%