How daltoncox/supertooth works
Supertooth captures HackRF IQ and turns it into BLE advertising or BR/EDR frames, decoded packets, and tracked device/piconet views. The shared session coordinates tuning, channel workers, protocol-specific collectors, and callbacks; CLI binaries provide summary/full/device output, while the Qt GUI bridges session events into its presentation models. The README documents live spectrum and packet-log capabilities, but the supplied tree has no QML paths, so those UI details are represented only at the GUI level. Some internal wiring is based on the documented architecture because source excerpts are partial.
Main entry points: session.c Session coordinator · backend_api.c GUI backend · service Channel processors · receiver_controller.cpp Receiver controller
Components 26
Runtime apps
- BLE CLI
src/apps/cli/supertooth-ble.c - BR/EDR CLI
src/apps/cli/supertooth-bredr.c - Hybrid CLI
src/apps/cli/supertooth-hybrid.c - Qt GUI
src/apps/gui/main.cpp - Receiver controller
src/apps/gui/controllers/receiver_controller.cpp - GUI backend
src/apps/gui/backend/backend_api.c - GUI models
src/apps/gui/models - CLI views
src/apps/cli/app_summary_view.c
Capture service
- Session coordinator
src/core/service/session.c - Event collectors
src/core/service/collector.c - Channel processors
src/core/service
Radio and DSP
- HackRF driver
src/core/radio/hackrf.c - Sample dispatcher
src/core/radio/sample_dispatcher.c - Channelizer
src/core/service/channelizer_thread.c - DSP utilities
src/core/dsp
BLE protocol
- BLE framing
src/core/protocol/ble/ble_bitstream_decoder.c - BLE codec
src/core/protocol/ble/ble_codec.c - BLE tracker
src/core/protocol/ble/ble_tracker.c - BLE display
src/core/protocol/ble/ble_display.c
BR/EDR protocol
- BR/EDR framing
src/core/protocol/bredr/bredr_bitstream_decoder.c - BR/EDR codec
src/core/protocol/bredr/bredr_codec.c - BR/EDR tracker
src/core/protocol/bredr/bredr_tracker.c - Piconet store
src/core/protocol/bredr/bredr_piconet_store.c - BR/EDR display
src/core/protocol/bredr/bredr_display.c
Other components
- Operator
- HackRF
Connections 35
- Operator → BLE CLI: selects capture
- Operator → BR/EDR CLI: selects capture
- Operator → Hybrid CLI: selects capture
- Operator → Qt GUI: starts capture
- BLE CLI → Session coordinator: runs BLE session
- BR/EDR CLI → Session coordinator: runs BR/EDR session
- Hybrid CLI → Session coordinator: runs hybrid session
- Qt GUI → Receiver controller: loads interface
- Receiver controller → GUI backend: starts and stops
- GUI backend → Session coordinator: creates session
- Session coordinator → HackRF driver: starts receiver
- HackRF → HackRF driver: provides IQ
- HackRF driver → Sample dispatcher: pushes samples
- Session coordinator → Channelizer: configures channels
- Sample dispatcher → Channelizer: delivers samples
- Channelizer → DSP utilities: uses DSP
- Session coordinator → Channel processors: starts workers
- Channel processors → BLE framing: frames BLE bits
- Channel processors → BR/EDR framing: frames BR/EDR bits
- Channel processors → Event collectors: submits events
- Event collectors → Session coordinator: dispatches events
- Session coordinator → BLE tracker: processes BLE events
- Session coordinator → BR/EDR tracker: processes BR/EDR events
- BLE framing → BLE codec: decodes frames
- BR/EDR framing → BR/EDR codec: decodes frames
- BR/EDR tracker → Piconet store: updates piconets
- Session coordinator → GUI backend: delivers callbacks
- GUI backend → BLE codec: decodes BLE frames
- Receiver controller → GUI models: updates views
- GUI backend → Receiver controller: emits frame rows
- Session coordinator → CLI views: delivers events
- CLI views → BLE display: formats BLE output
- CLI views → BR/EDR display: formats BR/EDR output
- Session coordinator → BLE display: provides BLE events
- Session coordinator → BR/EDR display: provides BR/EDR events