All docsStellar LinkRF bench · by Stellar Systems v0.1.0

Tools & Utilities

CLI Reference

Every satlinkctl command and option, plus the other command-line tools of the repository.

satlinkctl is the operator CLI. It talks to satlinkd's REST API, except compare, which runs entirely on the host.

Shell
cd ps && cargo build --release -p satlinkctl
./target/release/satlinkctl --help

Global options#

OptionEnvironmentDefaultMeaning
--api <URL>SATLINK_APIhttp://localhost:8080Daemon base URL, without a trailing slash
--token <TOKEN>SATLINK_TOKEN—Bearer token when the daemon requires authentication
--json—offMachine-readable JSON instead of a human summary
-V, --version——Print the CLI version

Pass negative numbers in the attached form (--rx-hz=-2500), or they are read as flags.

Board and daemon#

CommandPurpose
satlinkctl statusDaemon version, uptime and service health
satlinkctl doctor [--repeat N]Bring-up health check, every verdict by register name. Re-reads the same address N times (default 20), because some AXI faults only show on repetition. Exit code 0 only when nothing failed
satlinkctl plSnapshot of the shell, IRQ and sequencer registers
satlinkctl events [--n N]The last N runtime events (default 20)
satlinkctl runs [--limit N]The last N scenario runs (default 20)

profile#

CommandPurpose
profile listAvailable profiles
profile get <NAME>A profile, as JSON
profile apply <NAME>Apply it (validate, stage, commit, tune)
profile activeThe active profile

scenario#

CommandPurpose
scenario listLoaded scenarios
scenario get <NAME>One scenario
scenario run <NAME>Start a run; prints the run id

Condition the chain first (chain up) so the run starts without waiting for an AD9361 tuning.

campaign#

CommandPurpose
campaign listLoaded campaigns
campaign get <NAME>One campaign
campaign run <NAME> [--follow]Start one; --follow polls the saved state until it stops, surviving a reboot
campaign activeWhat is running, and which board provider would take a board action
campaign runsEvery execution, newest first
campaign status <ID>Cursor, attempts and verdict
campaign pause <ID>Stop at the next step boundary
campaign resume <ID> [--follow]Continue from the cursor
campaign rerun <ID> <STEP>Run one step again, appending an attempt

chain#

CommandPurpose
chain status [--target T]Every prerequisite, read back from the board, and the first missing one. T is air, device-loopback or pl-loopback; default: what the board is wired for
chain up [--target T] [--profile P] [--rate R]Run the missing conditioning steps in order. Target default air; profile default: the applied one; rate (default 8 000 000) is only used when no profile dictates it
chain recoverPulse the receiver's clear bits (AGC, timing, carrier)

See Chain Conditioning.

rf#

The AD9361 front end: rate, digital interface tuning, and the path switch.

CommandPurpose
rf statusRate, device loopback, DAC source, tuning readiness
rf calibrateRe-run the part's initialisation and calibrations. Resets the part: run it first
rf tune [--rate R]Set the rate (default 8 000 000) and tune the LVDS interface at that rate. Run on an idle chain
rf rf [--force]Route through the AD9361's internal digital loopback. Emits nothing
rf air [--force]On air: the internal loopback stays open, the signal reaches the TX connector
rf plBack to the PL loopback

rf rf and rf air refuse when the interface was never tuned or when the profile was applied before the last tuning; --force overrides.

radio#

CommandPurpose
radio statusFrequencies, gains, lock flags, NCO offsets, bandwidths, sample rate
radio freq <HZ> [--channel CH]Set the LO(s); CH is rx, tx or both (default). The RX and TX LOs are independent
radio nco [--rx-hz HZ] [--tx-hz HZ]Digital NCO offsets from the LO, within ±fs/2
radio gain [--rx-db DB] [--tx-db DB] [--domain D]AD9361 gains with D = rf (default; TX is an attenuation, ≤ 0), or the PL's Q8.8/Q15 scalars with D = digital
radio loopback [--on]Toggle the PL loopback mux (--on to set, absent to clear)
radio arm-rx, radio disarm-rx [--chan N]Arm or disarm RX
radio start-tx, radio stop-tx [--chan N]Start or stop TX (opens or closes the egress)
radio reset <SCOPE>Reset rx, tx or all

reg#

CommandPurpose
reg list [FILTER]Catalogued registers, filtered by substring
reg get <NAME>Read one
reg set <NAME> <VALUE>Write one (decimal or 0x hex), then read it back

See PL Register Map.

datapath and tx#

CommandPurpose
datapath statusWho holds the modem, and whether the TX egress is open
datapath enableClaim the modem, then read back whether the claim took
datapath disableRelease it
tx send [options]Send one frame, then flush
tx flush [--blocks N]Flush what is buffered (default 2 blocks)

tx send options:

OptionDefaultMeaning
--hex <HEX> / --file <FILE>—The payload (mutually exclusive)
--protocol <P>rawraw, csp or ccsds (built by the CLI)
--src <N>10CSP source address (ignored for raw)
--dst <N>1CSP destination, or CCSDS APID
--framing <F>streamstream (no boundary survives) or slot (one packet per FRAME_LEN slot)
--slot-len <N>256Slot pitch; must divide 4096
--flush-blocks <N>2Blocks the flush emits. Two, so the receive side returns a full block

Measurements#

CommandPurpose
capture -o <FILE> [options]Capture raw RX DMA blocks to a file
loopback -p <PAYLOAD> [options]Feed a payload while capturing, then compare
compare <CAPTURE> <REFERENCE> [options]Compare a capture with the payload that was sent, on the host

capture and loopback options:

OptionDefaultMeaning
--blocks <N>4Blocks to collect in a row; a short capture fails instead of being truncated
--warmup <N>0Blocks to obtain and discard first (acquisition transient). Explicit on purpose
--timeout-ms <MS>30000Give up after this long
--keepoffKeep the IIO devices claimed afterwards
--reference <FILE>—capture only: compare straight away
-o, --out <FILE>—loopback only: also write the capture

compare options: --block-bytes (raw DMA block size, default 16 384) and --dense (treat every byte as payload instead of the le:u8/32 contract).

The payload and the capture are in the raw le:u8/32 encoding: one useful byte in the low lane of each 32-bit word. See Measurement Tools.

Other command-line tools#

ToolWherePurpose
satlinkdps/satlinkdThe daemon: satlinkd [-c CONFIG] [-l LOG_LEVEL] [--dry-run]. See Daemon Configuration
satlink-checkps/satlink-checkCold-deploy self-test from the host: daemon reachable, services, PL registers, profiles and scenarios load. --json for a report
satlink-benchps/satlink-benchSustained PS↔PL throughput, on the board: one descriptor, one timestamp per write, PL counters read in the same process; --duplex arms a reader first
tools/make-release.sh, tools/deploy-release.shrepo rootBuild, deploy and verify a release (see Releases and Deployment)
pl/top/bringup/resolve-board.shrepo rootPrint the board's IP, resolved by IIO context name and serial
pl/top/bringup/rf_path_gain.pyrepo rootCharacterise the RF path with a spectrum analyser
dsl/tools/leo_pass_profile.pyrepo rootDerive LEO pass curves for scenarios (see Channel Models)

Stellar Link · v0.1.0

↑↓ to moveEnter to open