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);
}