- [feature][breaking] GATT server & BLE advertising are now separate functions
- [feature] ScanConfig is now available on all Adapter extension methods
- [feature] WhenKnownCharacteristicsDiscovered is a handy way of always calling for known characteristics as device connects
- [feature] ConnectHook is a new extension that manages everything from the connection/reconnect/disconnect to the characteristic notification
- [feature] Device.WriteCharacteristic and Device.ReadCharacteristic are new extensions making it easy to read/write to characteristics without a reference to one
- [feature] StopScan for cancelling background scans where the observable may have been lost
- [feature] WriteWithoutResponse is now async (Android - so it can participate in queue & iOS since it provides a ready event)
- [breaking] GATT server now starts as soon as it is created (removal of start/stop functions)
- [breaking][feature] All read/write/notification actions now contain a result object (good or bad) instead of calling OnError - why? because no one knows how to use RX so I'll do the fun stuff for them!
- [breaking] Write no longer fallsback to "WriteWithoutResponse"
- [breaking] Connect is no longer observable - it is designed to be async for when device comes into range
- [breaking] Many methods (Device rssi, Adapter Scan events) have been removed to simplify API as well as remove potential issues due to their use
- [fix][android] fixes to locking mechanism as well as ability to disable it via CrossBleAdapter.AndroidDisableLockMechanism
- [fix][android] GetKnownCharacteristic now sync locks to prevent android race condition
- [feature][android] configurable parameter to allow "breather" time between operations to prevent GATT issues
- [feature][android] Advertisement service UUID filtering for Pre-Lollipop
- [fix][android] Fix issue with stopping scan when bluetooth adapter becomes disabled
- [fix][android] Fix NRE with reconnection WhenServiceDiscovered
- [fix][android] More improvements to race conditions
- [BREAKING] Adapter.ScanListen has been removed
- [feature] push .NET standard 2.0
- [feature] push to android 8 (forced nuget compile target - Android 4.3+ is still supported)
- [fix][android] fix race conditions around semaphore cleanup
- [fix][android] more connection fixes to alleviate GATT 133
- [fix][android] advertisement service UUIDs not parsing properly
- [fix][android] rewritten connect/disconnect logic
- [fix][android][ios] rewritten reconnection logic
- [fix][android] kill more gatt133 errors by forcing synchronized communication (hidden to consumer)
- [feature][android] Ability to use Android AutoConnect option on connect
- [feature] scan for multiple UUIDs
- [breaking][feature] SetNotificationValue has been replaced with EnableNotifications/DisableNotifications.
- [fix][ios] NRE when read/notification value is null
- [fix][android] service UUIDs in advertisement not being parsed correctly
- [fix][android] cleanup internal thread delegation
- [fix][uwp] don't marshall to main thread for most calls
- [fix][uwp] mac address length
- [fix][ios] NRE race condition in GetKnownCharacteristic
- [feature] .net standard support
- [feature][breaking] characteristics must now have their notifications enabled/disabled using characteristic.SetNotificationValue(..);
- [uwp] Connection status and general connection keep-alive improvements
- [feature] UWP client beta (server support has not been tested)
- [feature] Adapter scanner now has an empty implementation for platforms where it is not supported
- [feature] GATT Server is now built into this library
- [feature] Manufacturer data can be advertised on Windows and Android
- [feature] ability to scan for multiple bluetooth adapters
- [feature] expose service data as part of advertisement data
- [feature] expose native device from IDevice as object
- [feature] New methods - Device.GetKnownService, Service.GetKnownCharacteristics(uuids), and Device.GetKnownCharacteristics(serviceUuid, characteristicUuids)
- [fix][android] GetKnownDevice
- [fix][android] bad UUID parsing in ad data for service UUIDs
- [fix][android] multiple notification subscriptions
- [fix][ios] reconnection issues
- [fix][android][ios] improved equality checks to help with android events
- [fix][android] more gatt133 fixes
- [fix][android] additional fixes for cancel connection
- [fix][android] Connect completion wasn't being called properly
- [fix][android] finalization was causing NRE
- [feature] macOS support!
- [feature][all] Connection configuration allows you to set connection priority, notification states on iOS/tvOS/macOS, and whether or not to make the connection persistent
- [feature][macos/tvos/ios] Background mode via CBCentralInitOptions - On the platform project use BleAdapter.Init(BleAdapterConfiguration)
- [feature][ios] Background - Adapter.WhenDeviceStateRestored() will allow to hook for background state restoration (must be used in conjunction with BleAdapter.Init)
- [feature][uwp][droid] Reliable write transaction via Device.BeginReliableWriteTransaction() and GattReliableWriteTransaction
- [feature][uwp][droid] WriteBlob now uses reliable write transactions
- [feature] Device.GetService(Guid[]) and Service.GetCharacteristic(Guid[]) optimized calls
- [feature] Adapter.GetKnownDevice(Guid) - explanation in the signature :)
- [feature] Adapter.GetPairedDevices() - pretty self explanatory
- [breaking][feature] RequestMtu now returns as an observable with what the accepted MTU was
- [breaking] CreateConnection is gone - created more issues than it solved - Use Connect() as it creates persistent connections out of the gate
- [breaking] Disconnect has been renamed to CancelConnection as it cancels any pending connections now
- [breaking] BleAdapter has been renamed to CrossBleAdapter
- [breaking] Acr.Ble namespace has been renamed to Plugin.BluetoothLE
- [fix][droid] disconnect on existing connection tries
- [fix][droid] more gatt 133 issues
- [fix][all] Blob write observable subscriptions not firing properly
- [fix][all] NotifyEncryptionRequired, Indicate, and IndicateEncryptionRequired return true for CanNotify
- [fix][droid] descriptors and characteristic read/writes now adhere to AndroidConfig.WriteOnMainThread
- [fix][ios] WhenStatusChanged was causing OnError when a connection failure occurred
- [fix][core] BlobWrite will now use proper MTU
- [breaking][feature][core] Background scan has been replaced. The normal scan now takes a configuration.
- [feature][core] Get current MTU size
- [feature][droid] monitor MTU changes
- [feature] ability to open bluetooth settings configuration
- [feature] ability to request MTU is now part of device (still only available on droid - but allows for greater flexibility)
- [feature][droid] ability to pair with a device
- [feature][droid] ability to toggle bluetooth adapter status
- [BREAKING] Characteristic/Descriptor Read, Write, and Notification events now return CharacteristicResult that includes the sender characteristic as well as the data
- [fix][droid] Write was not broadcasting completion at the right time
[fix] proper completion of ReadUntil
- [feature] IGattCharacteristic.ReadUntil(endBytes) extension method will read in a loop until end bytes detected
- [feature][droid] AndroidConfig.MaxTransmissionUnitSize (MTU) can now be set to negotiate MTU upon connections
- [fix][droid] write on main thread (can use AndroidConfig.WriteOnMainThread = false, to disable)
- [feature] Blob write
- [feature] Logging now has deviceconnected/devicedisconnected if you wish to monitor just one of the status'
- [fix] ability to check for true WriteNoResponse flags
- [fix][droid] ship proper unsubscribe bytes
- [fix] logging cleanup
- [feature][core] add DiscoveredServices, DiscoveredCharacteristics, and DiscoveredDescriptors for easy access
- [feature][core] add logging abilities from device reference
- [feature][droid] add improved way to deal with Android connection issues (please read docs under Android Troubleshooting)
- [fix][core] logging would not hook properly to existing connected devices
- [fix][droid] deal with gatt error 133 by delaying service discovery post connection
- [workaround] tvOS was having issues. temporarily pulled from nuget
- [feature] write without response void method added
- [feature] proper equals check for all ble objects
- [fix][all] new adapter scans only clear disconnected devices from cache
- [feature] Adapter.GetConnectedDevices
- [fix][droid] WhenStatusChanged firing on subscription and replays properly
- [fix][droid] properly parsing 16 and 32bit UUIDs in advertisement packet
*[breaking] WhenActionOccurs renamed to CreateLogger *[fix] ensure WhenScanStatusChanged() broadcasts its current state on registration *Logging now returns actual packet received where applicable
- adding tvOS libraries to package (NOT TESTED)
- [fix] createconnection properly persists connection now
- [fix] more logging and discovery issues
- [fix][droid] device.readrssi was not working
- [droid] device.whenstatuschanged will now broadcast Connecting/Disconnecting
- [droid] advertisement packet now gets all service UUIDs parsed
- [fix] Error notifications on read/writes
- [fix] Make sure to replay last status for connectable observables
- [fix] Service discovery on iOS and Android was not registering subsequent subscriptions properly
- [fix][droid] Read/Write callbacks now passing values back properly
- [breaking] PersistentConnection is now CreateConnection with improvements to status reporting
- Vastly improved logging
- Improvements to observable allocations
- Improvements in service discovery
- [breaking] Change extension method names
- [breaking] Characteristic method WhenNotificationOccurs() is now called WhenNotificationReceived(). It also no longer subscribes to notifications. Use new method SubscribeToNotifications(). WhenNotificationReceived() is for logging purposes
- Add heartrate plugin (extension method)
- Add super logging plugin (extension method)
- Characteristics and Descriptors now have WhenRead/WhenWritten events to monitor calls externally
- ScanListen for working with scan results from a background or decoupled component
- BackgroundScan added and ScanFilter removed
- Multiple entry points can now hook up to scan, but only one will run (connectable refcount observable)
- Initial Public Release