Skip to content
Document DB v12 - Improved Interceptors with Soft Delete Integration, AI protections, & Admin UI with Aspire Integration!How!?

OBD Releases

Feature
Command-object pattern with generic return types (IObdCommand<T>, ObdCommand<T>) for compile-time safe OBD communication
Feature
9 standard OBD-II commands: Vehicle Speed, Engine RPM, Coolant Temperature, Throttle Position, Fuel Level, Calculated Engine Load, Intake Air Temperature, Runtime Since Start, VIN
Feature
ELM327 protocol handling with hex response parsing, multi-frame CAN support, and automatic error detection
Feature
Adapter auto-detection — probes via ATI to identify ELM327 vs OBDLink (STN) adapters and selects the appropriate initialization sequence
Feature
Adapter profile system (IObdAdapterProfile) with built-in Elm327AdapterProfile and ObdLinkAdapterProfile
Feature
Device discovery via IObdDeviceScanner and ObdDiscoveredDevice for scanning available adapters before connecting
Feature
Pluggable transport abstraction (IObdTransport) for BLE, WiFi, USB, or any communication channel
Feature
BLE transport (BleObdTransport) using Shiny.BluetoothLE v4 with auto-scan, pre-discovered peripheral, or discovered device constructors
Feature
BLE device scanner (BleObdDeviceScanner) with optional name filtering and UUID-based deduplication
Feature
Configurable BLE defaults (BleObdConfiguration) for GATT UUIDs, device name filter, and command timeout
Feature
DI extension method AddShinyObdBluetoothLE() for one-call BLE OBD service registration
Feature
Fully task-based async throughout — no Reactive Extensions required in consuming code
Feature
ObdTimeoutException (an ObdException) reports an adapter that went quiet, carrying the Command and the Timeout that elapsed — a polling caller can tell it apart from its own cancellation instead of mistaking one slow reply for a shutdown
Fix
BLE scanning falls back to the advertised local name when the peripheral reports none, so adapters now turn up on iOS — CBPeripheral.Name is null while scanning a peripheral that has never been connected to, which meant BleObdDeviceScanner and BleObdTransport’s auto-scan silently discarded nearly every adapter on that platform
Feature
BleObdDeviceScanner logs every advertisement it sees at Debug level — resolved name, Peripheral.Name, id, RSSI and advertised service UUIDs — before any filtering, so an adapter that never reaches the callback can still be identified and its real UUIDs read off
Fix
BleObdTransport drops a late reply to a command that already timed out rather than letting it complete the next command’s wait, which used to leave every response after a single timeout off by one
Fix
BleObdTransport.Disconnect() fails an in-flight command immediately instead of leaving the caller to wait out the full command timeout, and DisposeAsync() no longer disposes the send lock out from under a pending send