Your first app
Every app and example is a self-contained folder: its own src/main.cpp and a small
Makefile that sets two variables and includes the shared rules.
Copy the template
cp -r rodeo-sdk/template rodeo-sdk/examples/10_my_appDelete the template’s RODEO_ROOT line
rodeo.mk defaults to RODEO_ROOT = ../.., which resolves correctly two levels
below rodeo-sdk/. The template carries an explicit RODEO_ROOT for its own
shallower location — delete that line once the copy is in examples/, or the build
looks for the SDK in the wrong place.
The Makefile
TARGET = my_appCPP_SOURCES = src/main.cpp
include ../../common/rodeo.mkThe pin map
board.h is the single source of truth for the Rodeo pin and channel map, and it is
host-safe — it has no libDaisy in it, so host tests can include it too.
It names every pin by what it is wired to — board::pin::kSatTx, not
seed::D2 — and lists the ten I/O connectors by their silkscreen. Target code
turns a pin into libDaisy’s with board_daisy.h:
#include "board_daisy.h"
GPIO gate;gate.Init(board::ToDaisy(board::kIo[board::kIoD1].pin), GPIO::Mode::INPUT);The whole map is on The board and its pin map. The blink below needs none of it: it only uses the Seed’s own LED.
#include "daisy_seed.h"#include "board.h"
using namespace daisy;
DaisySeed hw;
int main(void) { hw.Init(); while (1) { hw.SetLed(true); System::Delay(250); hw.SetLed(false); System::Delay(250); }}make && make program-dfuIf the onboard LED blinks, the toolchain, the board and the flash path all work.
Where instrument code goes
An instrument lives outside the SDK, in its own component directory, and consumes
the SDK rather than forking it. instruments/rodeo-002/firmware/ is the worked example: it links
the vendored libDaisy and DaisySP and the shared drivers, and keeps only its own voice
and panel code. It builds against the frozen v0.2.0 SDK for now, and is the first
instrument to move onto this one once the boards are brought up.