OpenStint is a software defined radio (SDR) based laptiming decoder, using either HackRF One or RTL-SDR v4. It works both with its own transponder protocol and with AMB/RC3-based transponders. It can run on a Raspberry Pi 3 Model B+. Only a minimal electronics knowledge is required; touching a soldering iron is optional.
- 🎉 Natively supports OpenStint transponder, as well as RC3/RC4Hybrid/MRT and other RC3-clones
- 🎓 3-wire RC4 support with learning feature
- 🔧 Off-the-shelf components, no electronic skills are required (HackRF One, RTL-SDR v3 & v4).
- 🏁 Tested with LapBeeps, RCGTiming and ZRound
- 📉 Low resource requirements: runs even on a Rapsberry Pi 3 Model B+
- ⏱️ Precise passing time detection (based on signal strength)
- 🚗 Passing speed detection (based on signal strength)
- 🧠 Adaptive filters enchance reception quality
Download: Windows users can download precompiled binaries; Raspberry Pi OS (64-bit) users can apt install openstint; on other platforms, compile from source.
Tutorials: cheapest setup with rtl-sdr | track setup tutorial | standalone decoder on a raspberry pi
Side-projects: openstint transponder | antenna preamplifier
To learn more how SDR works, watch Andreas Spiess explaining it.
./src/openstint_rtlsdr -g 20 # or ./src/openstint_hackrf -l 20 -v 20Vehicle passings are printed to stdout and published with ZeroMQ at :5556. The easiest method for testing with real transponders is with a near-field magnetic probe (sub-$10 stuff, search on ebay/aliexpress or see Dave Jones DIY one).
Full Raspberry/Ubuntu tutorial here.
This project use libhackrf, rtl-sdr v4 drivers, liquidsdr, ZeroMQ/cppzmq and libfec as dependencies, all of which you have to install.
To use goodies in the integrations/ directory, sudo apt-get install python3 python3-zmq as well.
Note on Mac: we can't brew install libfec, compile and install it from source.
HackRF One users: there is a build flag SAMPLES_PER_SYMBOL, default to 8, resulting in 10 MSPS sampling rate and slightly larger dynamic range than of RTL-SDR. Lower CPU consumption is achievable by setting it to 2 (2.5 MSPS). Setting to 4 is not recommended (bad performance). RTL-SDR maxes out at the required minimum of 2.5 MSPS (SAMPLES_PER_SYMBOL=2), there is no way to fine-tune that.
The primary method of 3rd-party integration with OpenStint is via ZeroMQ. The openstint process listens by default on port :5556, and acts as a ZeroMQ PUBLISHER for arbitrary number of clients.
The decoder protocol is documented under the docs/ directory.
Find some built-in integrations in the integrations/ directory.
openstint_hackrf -h
Usage: openstint_hackrf [-d ser_nr] [-l <0..40>] [-v <0..62>] [-a] [-b] [-p tcp_port] [-m] [-t]
-d ser_nr default:first serial number of the desired HackRF
-l <0..40> default:24 LNA gain (rf signal amplifier; valid values: 0/8/16/24/32/40)
-v <0..62> default:20 VGA gain (baseband signal amplifier, steps of 2)
-a default:off Enable preamp (+13 dB to input RF signal)
-b default:off Enable bias-tee (+3.3 V, 50 mA max)
-p port default:5556 ZeroMQ publisher port
-m default:off Enable monitor mode (print received frames to stdout)
-t default:off Use system clock as the timebase (beware of NTP jumps)
-s dir default:. RC4 registry storage directory
openstint_rtlsdr -h
Usage: openstint_rtlsdr [-d ser_nr] [-g <gain_dB>] [-D] [-b] [-p tcp_port] [-m] [-t]
-d ser_nr default:first serial number of the desired RTL-SDR
-g <dB> default:20 tuner gain in dB
-b default:off Enable bias-tee (+4.5 V)
-p port default:5556 ZeroMQ publisher port
-m default:off Enable monitor mode (print received frames to stdout)
-t default:off Use system clock as the timebase (beware of NTP jumps)
-s dir default:. RC4 registry storage directory
Submit PRs according to the project's core values:
- it should be and remain a solution for small-scale clubs and friendly gatherings
- it should run on constrained hardware (Raspberry Pi 3 Model B+)
- the interfaces should be simple and well documented (to promote 3rd-party integration)
- "does one thing and one thing well" phylosophy
Otherwise, I'll to adhere myself to the C4 community process.