Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

spidersmsg - C++ Implementation

A C++ port of the Julia-based SPIDERS message sender tool, using SBE code generation for wire-format compatibility.

Benefits

  • Fast startup: C++ binary starts instantly vs ~2-5 second Julia JIT overhead
  • Lower memory: No Julia runtime required
  • Easy integration: Links with other C/C++ systems
  • Generated SBE codecs: Message encoding is generated from the same XML schemas used by Julia, ensuring compatibility

Prerequisites

Required: Install CFITSIO

sudo dnf install cfitsio cfitsio-devel

Required: Install SBE Tool (for code generation)

SBE_VERSION=1.33.1
sudo mkdir -p /opt/sbe
sudo curl -L -o /opt/sbe/sbe-all-${SBE_VERSION}.jar \
    https://github.com/aeron-io/simple-binary-encoding/releases/download/${SBE_VERSION}/sbe-all-${SBE_VERSION}.jar

# Requires Java 11+ runtime
sudo dnf install java-11-openjdk-headless

Aeron Media Driver

The Aeron media driver must be running. On this system it uses:

  • Directory: /dev/shm/aeron-rtc/

Building

cd /opt/spiders/spidersmsg2

# Generate SBE codecs and build
make

# Or just regenerate SBE code
make generate-sbe

The binary will be created at bin/spidersmsg.

Usage

# Simple event
./bin/spidersmsg --stream 301 --event Stop

# Event with numeric value
./bin/spidersmsg --stream 901 --event serialno=27261006

# Event with string value
./bin/spidersmsg --stream 1831 --event Ch6Mode=NORMAL

# Event with FITS file
./bin/spidersmsg --stream 701 --event dark=/path/to/dark.fits

# Multiple events
./bin/spidersmsg --stream 701 --event dark=/path/dark.fits --event Play

# Specify Aeron directory
./bin/spidersmsg --dir /dev/shm/aeron-rtc/ --stream 301 --event Stop

Testing

Create test FITS files

cd test
julia create_test_fits.jl

Run test receiver (in separate terminal)

julia test/test_receiver.jl 9999

Run comparison tests

./test/compare_implementations.sh

Project Structure

spidersmsg2/
├── README.md               # This file
├── IMPLEMENTATION.md       # Detailed implementation documentation
├── Makefile
├── src/
│   ├── main.cpp            # Entry point
│   ├── spidersmsg.hpp      # Main header
│   ├── message_sender.cpp  # Message encoding using generated SBE codecs
│   ├── message_sender.hpp
│   ├── aeron_client.cpp    # Aeron communication
│   ├── aeron_client.hpp
│   ├── fits_reader.cpp     # FITS file reading
│   ├── fits_reader.hpp
│   └── generated/          # SBE-generated code (do not edit)
│       └── spiders/sbe/    # Generated message codecs
├── test/
│   ├── test_receiver.jl    # Julia receiver for testing
│   ├── create_test_fits.jl
│   └── compare_implementations.sh
└── bin/
    └── spidersmsg          # Compiled binary

See Also

  • IMPLEMENTATION.md - Detailed technical documentation
  • Original Julia implementation: /home/spiders/.julia/dev/SpidersMessageEncoding/
  • SBE Schemas: /home/spiders/.julia/dev/SpidersMessageEncoding/sbe-schemas/

About

SPIDERS spidersmsg2 — on-instrument state 2026-06-09

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages