Platform Documentation

This section documents implementation-level platform behavior.

Included Files

Capability Matrix

Legend:

  • ✅ implemented
  • ⚠️ implemented with platform-managed behavior or constrained support
  • ❌ not implemented
Capability Android iOS/macOS Windows
Scanning ✅ ✅ ✅
Connection ✅ ✅ ✅
GATT read/write/notify ✅ ✅ ✅
Descriptor access ✅ ✅ ✅
MTU request ✅ API 21+ ❌ (platform-managed) ❌ (platform-managed)
Connection priority request ✅ ❌ (platform-managed) ❌
PHY read ✅ API 26+ ⚠️ (platform-managed) ❌
PHY set ✅ API 26+ ❌ (platform-managed) ❌
L2CAP channel ✅ API 29+ ✅ iOS 11+/macOS 10.13+ ❌
Connected RSSI read ✅ ✅ ❌
Broadcasting (GATT server/peripheral role) ✅ ✅ ✅
Force-disconnect a subscribed GATT client ✅ ✅ ❌ (platform-managed)

Exception Behavior For Unsupported Operations

  • Windows advanced operations throw NotSupportedException for:
    • L2CAP open
    • MTU request
    • Connection priority request
    • PHY preference request
    • Connected RSSI read
    • Force-disconnecting a subscribed GATT client from a broadcaster (Windows exposes no API to do this; the client must disconnect itself)
  • DotNetCore fallback implementations throw PlatformNotSupportedException for runtime BLE operations.

Cross-Platform Usage Pattern

try
{
    await device.OpenL2CapChannelAsync(psm);
}
catch (NotSupportedException)
{
    // Fallback path for platforms without L2CAP support.
}
if (DeviceInfo.Platform == DevicePlatform.Android)
{
    await device.RequestMtuAsync(512);
}