Welcome to Rafiki’s documentation!

Rafiki is Rust on top of Simba.

Project homepage: https://github.com/eerimoq/rafiki

Getting Started

Note

Only the Arduino Due board is supported!

Installation

  1. Install Rust. Change the default toolchain to nightly. Copy default host triple and modify PATH variable from the printed Current installtion options.

    curl https://sh.rustup.rs -sSf | sh
    
  2. Source the environment setup file.

    source $HOME/.cargo/env
    
  3. Install bindgen and download the Rust sources.

    cargo install bindgen
    rustup component add rust-src
    
  4. Recursively clone the Rafiki repository.

    git clone --recursive https://github.com/eerimoq/rafiki
    
  5. Build and run the hello world example.

    cd rafiki
    source setup.sh
    cd examples/hello_world
    make -s -j4 BOARD=arduino_due run
    

User Guide

Contents:

Hello World application

Let’s start with the Rafiki “Hello World” application. It examplifies what an application is and how to build and run it.

It consists of two files; main.rs and Makefile.

main.rs

main.rs defines the application entry function main().

#[macro_use] extern crate rafiki;

use rafiki::kernel::sys;

#[no_mangle]
pub fn main(_: isize, _: *const *const u8) -> isize
{
    sys::start();

    println!("Hello World!");

    0
}

Makefile

Makefile contains build configuration of the application.

NAME = hello_world
BOARD ?= linux

RAFIKI_ROOT = ../..
include $(RAFIKI_ROOT)/make/app.mk

Build and run

Cross-compile, link and then run on an Arduino Due:

$ cd examples/hello_world
$ make -s BOARD=arduino_due run
<build system output>
Hello world!
$

Boards

The boards supported by Rafiki.

Arduino Due

Examples

Below is a list of simple examples that are useful to understand the basics of Rafiki.

There are a lot more examples and unit tests on Github that shows how to use most of the Rafiki modules.

Hello World

About

This application prints “Hello World!” to standard output.

Source code

#![no_std]

/**
 * @section License
 *
 * The MIT License (MIT)
 *
 * Copyright (c) 2014-2017, Erik Moqvist
 *
 * Permission is hereby granted, free of charge, to any person
 * obtaining a copy of this software and associated documentation
 * files (the "Software"), to deal in the Software without
 * restriction, including without limitation the rights to use, copy,
 * modify, merge, publish, distribute, sublicense, and/or sell copies
 * of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 *
 * This file is part of the Rafiki project.
 */

#[macro_use] extern crate rafiki;

use rafiki::kernel::sys;

#[no_mangle]
pub fn main(_: isize, _: *const *const u8) -> isize
{
    sys::start();

    println!("Hello World!");

    0
}

The source code can also be found on Github in the examples/hello_world folder.

Build and run

Build and run the application on an Arduino Due.

$ cd examples/hello_world
$ make -s BOARD=arduino_due run
...
Hello world!
$

License

The Rafiki project as a whole is licensed under the following MIT license:

The MIT License (MIT)

Copyright (c) 2017, Erik Moqvist

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Indices and tables