Document DB v12 - Improved Interceptors with Soft Delete Integration, AI protections, & Admin UI with Aspire Integration!How!?
OBD Releases
v1.0.0 - TBD
Section titled “v1.0.0 - TBD”Feature
Command-object pattern with generic return types (
IObdCommand<T>, ObdCommand<T>) for compile-time safe OBD communicationFeature
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 ObdLinkAdapterProfileFeature
Device discovery via
IObdDeviceScanner and ObdDiscoveredDevice for scanning available adapters before connectingFeature
Pluggable transport abstraction (
IObdTransport) for BLE, WiFi, USB, or any communication channelFeature
BLE transport (
BleObdTransport) using Shiny.BluetoothLE v4 with auto-scan, pre-discovered peripheral, or discovered device constructorsFeature
BLE device scanner (
BleObdDeviceScanner) with optional name filtering and UUID-based deduplicationFeature
Configurable BLE defaults (
BleObdConfiguration) for GATT UUIDs, device name filter, and command timeoutFeature
DI extension method
AddShinyObdBluetoothLE() for one-call BLE OBD service registrationFeature
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 shutdownFix
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 platformFeature
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 offFix
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 oneFix
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

