# 0.11.7 (2024-12-21)

## Features

- Deserialize BDAddr from non-borrowed strings
  - Thanks icewind1991, ekuinox!
- Add support for Extended Advertising on Android
  - Thanks Jakouf!

## Bugfixes

- Call GetDefaultAdapter() instead of GetAdapter() on Android
- Use BluetoothCacheMode::Uncached for services fetching on windows
  - This *may* cause issues with connection times, we'll see how it works out
- Characteristics with duplicate UUIDs (but differing handles) no longer overwrite each other
  - Thanks blackspherefollower!
- CoreBluetooth now fulfills all open characteristic futures on disconnect
  - Thanks szymonlesisz!

# 0.11.6 (2024-10-06)

## Features

- Move from objc to objc2
  - Now using an actually updated/maintained coreAPI library! Thanks madsmtm!
- Implement CentralState for mac/linux/windows to tell when bluetooth is on/off
  - Thanks szymonlesisz!
  - Still needs Android impl.

## Bugfixes

- Make local_name on CoreBluetooth match that of Windows/Linux returns when possible.
  - Thanks yuyoyuppe!
- Fix descriptor reading on CoreBluetooth
  - Thanks kovapatrik!
- Fix one of the many, many NullPointerException issues in droidplug
  - Thanks blackspherefollower!
  - There are so many more though, esp when we don't have correct permissions on Android.

# 0.11.5 (2024-01-10)

## Bugfixes

- Fix issue with Windows failing to read characteristic descriptors

# 0.11.4 (2024-01-01)

## Bugfixes

- Fix issue with manufacturer data not being consistently found on windows
- Fix UUID used for finding characteristics on windows
- Peripheral connection failure now returns an error
- Peripheral service discovery failure now returns an error

# 0.11.3 (2023-11-18)

## Bugfixes

- CoreBluetooth: Fix missing include

# 0.11.2 (2023-11-18)

## Bugfixes

- Android: Fix advertisements with invalid UTF-8 strings not appearing
- All Platforms: Fix clippy warnings

# 0.11.1 (2023-09-08)

## Bugfixes

- Windows/UWP: Internally held BTLE services now automatically disconnect when device disconnect is
  called.

# 0.11.0 (2023-07-04)

## Features

- Add scan filtering for android and windows
- Implement serde Serialize/Deserliaze for PeripheralProperties, ScannFilter (#310, #314)
- Add device class to properties (#319)
- Add descriptor discovery and read/write across all platforms (#316)

## Bugfixes

- Update RSSI w/ advertisements on CoreBluetooth (#306)
- Fix issues with various unhandled exceptions on Android (#311)

# 0.10.5 (2023-04-13)

## Features

- Add RSSI readings for Android

## Bugfixes

- Link conditionally against macOS AppKit based on platform
- Improve error propagation on Windows
- Reset connected state to false on disconnect on windows
- Set DuplicateData = true for bluez

# 0.10.4 (2022-11-27)

## Bugfixes

- Change common CoreBluetooth log message from error to info level

# 0.10.3 (2022-11-05)

## Bugfixes

- Add PeripheralId Display implementation for Android PeripheralId

# 0.10.2 (2022-10-30)

## Features

- Implement Display on PeripheralId

## Bugfixes

- Fix issues with panics on device disconnect on macOS

# 0.10.1 (2022-09-23)

## Features

- Add ability to disconnect devices on macOS/iOS

# 0.10.0 (2022-07-30)

## Features

- Add Android Support

## Breaking Changes

- Update to Uuid v1, which is incompatible with Uuid v0.x. This may cause issues in upgrades.

# 0.9.2 (2022-03-05)

## Features

- UWP (Windows) devices now disconnect on drop or calls to disconnect
- Improve characteristic finding resilience on UWP (Windows)

## Bugfixes

- Update to windows-rs 0.33
  - Should fix issues with COM casting panics in older versions of windows
- Fix panic when multiple discovery calls are made on corebluetooth (macOS)
- Update Dashmap version to resolve RUSTSEC-2022-0002

# 0.9.1 (2022-01-12)

## Features

- `BDAddr` and `PeripheralId` are now guaranteed to implement `Hash`, `Ord` and `PartialOrd` on all
  platforms.

## Bugfixes

- Linux implementation will now synthesise `DeviceConnected` events at the start of the event stream
  for all peripherals which were already connected at the point that the event stream was requested.
- `Central` methods on Linux will now correctly only affect the correct Bluetooth adapter, rather
  than all adapters on the system.
- Filters are now supported for macOS, allowing the library to work on macOS >= 12.

# 0.9.0 (2021-10-20)

## Features

- Added Received Signal Strength Indicator (RSSI) peripheral property.
- Peripheral `notifications()` streams can now be queried before any
  connection and remain valid independent of any re-connections.
- Characteristics are now grouped by service, and infomation about services is available. The old
  API to access characteristics without specifying a service UUIDs is retained for backwards
  compatibility.
- Better logging and other minor improvements in examples.
- Added method to get adapter information. For now it only works on Linux.

## Breaking changes

- Removed `CentralEvent::DeviceLost`. It wasn't emitted anywhere.
- Changed tx_power_level type from i8 to i16.
- Removed `PeripheralProperties::discovery_count`.
- New `PeripheralId` type is used as an opaque ID for peripherals, as the MAC address is not
  available on all platforms.
- Added optional `ScanFilter` parameter to `Central::start_scan` to filter by service UUIDs.

## Bugfixes

- `Peripheral::is_connected` now works on Mac OS, and works better on Windows.
- Fixed bug on Windows where RSSI was reported as TX power.
- Report address type on Windows.
- Report all advertised service UUIDs on Windows, rather than only those in the most recent
  advertisement.
- Fixed bug with service caching on Windows.
- Fixed bug with concurrent streams not working on Linux.

# 0.8.1 (2021-08-14)

## Bugfixes

- Errors now Sync/Send (usable with Anyhow)
- Characteristic properties now properly reported on windows

# 0.8.0 (2021-07-27)

## Features

- Overhaul API, moving to async based system

## Breaking Changes

- Pretty much everything? The whole API got rewritten. All hail the new flesh.

# 0.7.3 (2021-07-25)

## Bugfixes

- Fix issue with characteristic array not updating on Win10
- #172: Fix setting local_name in macOS

# 0.7.2 (2021-04-04)

## Bugfixes

- Windows UWP characteristic methods now return errors instead of unwrapping everything.

# 0.7.1 (2021-03-01)

## Bugfixes

- Fixed commit/merge issues with 0.7.0 that ended up with incorrect dependencies being brought in.

# 0.7.0 (2021-02-28) (Yanked)

## Breaking API Changes

- Move to using Uuid crate instead of having an internal type.
- Remove discover_characteristics_in_range (unused or duplicated elsewhere)
- write() commands are now passed a WriteType for specifying WriteWith/WithoutResponse
- Variants added to CentralEvent enum, may break exhaustive checks

## Features

- Add capabilities for service and manufacturer advertisements
- Lots of CoreBluetooth cleanup
- Update to using windows library (instead of winrt)
- Replace usage of async_std for channels in macOS with futures crate

## Bugfixes

- De-escalate log message levels, so there are less message spams at the info level.

# 0.6.0 (2021-02-04)

## Breaking API Changes

- Removed many _async methods that were unimplemented
- Stopped returning write values when not needed.

## Features

- Complete rewrite of Bluez core
  - Now uses DBus API instead of raw socket access
- Windows support moved to WinRT library
- Move from failure to thiserror for error handling
  - failure was deprecated a while ago

## Bugfixes

- Windows UWP no longer panics on scan when radio not connected.

# 0.5.5 (2021-01-18)

## Bugfixes

- Fix dependency issue with async-std channels

# 0.5.4 (2020-10-06)

## Bugfixes

- Fix issue where library panics whenever a characteristic is read instead of
  notified on macOS.

# 0.5.3 (2020-10-05)

## Bugfixes

- Fix issue where library panics whenever a characteristic is written without
  response on macOS.

# 0.5.2 (2020-10-04)

## Features

- UUID now takes simplified inputs for from_str()
- Read/Write added for CoreBluetooth
- Example improvements

## Bugfixes

- Windows UWP characteristics now actually reads on read(), instead of just
  returning []

## Bugfixes

# 0.5.1 (2020-08-03)

## Bugfixes

* Fixed issue with peripheral updates in adapter manager wiping out peripherals
  completely (#64)
* Ran rustfmt (misformatted code is a bug ok?)

# 0.5.0 (2020-07-26)

## Features

* Moved events from callbacks to channels (currently using std::channel, will
  change to future::Stream once we go async).
* Moved from using Arc<Mutex<HashMap<K,V>>> to Arc<DashMap<K,V>>. Slightly
  cleaner, less locking boilerplate.

## Bugfixes

* Centralized peripheral management into the AdapterManager class, which should
  clean up a bunch of bugs both filed and not.

# 0.4.4 (2020-07-22)

## Bugfixes

* Fix peripheral connect panic caused by uuid length on macOS (#43)
* Windows/macOS devices now emit events on device disconnect (#54)

# 0.4.3 (2020-06-05)

## Features

* Allow notification handlers to be FnMut
* Added new examples
* Update dependencies

## Bugfixes

* Fix local_name on macOS 10.15

# 0.4.2 (2020-04-18)

## Features

* Some types now capable of serde de/serialization, using "serde" feature
* Added new examples

## Bugfixes

* Adapters functions now return vectors of some kind of adapter on all
  platforms.
* Bluez notification handlers now live with the peripheral.
* Bluez defaults to active scan.
* Remove all println statements in library (mostly in the windows library),
  replace with log macros.

# 0.4.1 (2020-03-16)

## Features

* Get BDAddr and UUID from String
* More examples
* Update dependencies

# 0.4.0 (2020-01-20)

## Features

* Added CoreBluetooth Support, using async-std with most of the async
  parts wrapped in block_on calls for now. Library now supports
  Win10/MacOS/Linux/Maybe iOS.
* Brought code up to Rust 2018 standard
* Added Characteristic UUID to ValueNotification struct, since
  only linux deals with Start/End/Value handles

# 0.3.1 (2020-01-11)

## Features

* Initial fork from rumble
* Brought in winrt patch, as well as other PRs on that project.