diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2682518..72809ed 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.8.2
+
+* Improve readme.
+
## 0.8.1
* Update supported platforms.
diff --git a/README.md b/README.md
index 8d99b7e..36b54ac 100644
--- a/README.md
+++ b/README.md
@@ -1,15 +1,17 @@
-# Universal Ble
+# Universal BLE
-A cross-platform (Android/iOS/MacOS/Windows/Linux/Web) BluetoothLE plugin for Flutter
+A cross-platform (Android/iOS/macOS/Windows/Linux/Web) Bluetooth Low Energy (BLE) plugin for Flutter
-# Usage
+## Features
-- [Receive BLE availability changes](#receive-ble-availability-changes)
-- [Scan BLE peripheral](#scan-ble-peripheral)
-- [Connect BLE peripheral](#connect-ble-peripheral)
-- [Discover services of BLE peripheral](#discover-services-of-ble-peripheral)
-- [Transfer data between BLE central & peripheral](#transfer-data-between-ble-central--peripheral)
-- [Pair BLE peripheral](#pair-ble-central--peripheral)
+- [Scanning for BLE Peripherals](#scanning-for-ble-peripherals)
+- [Connecting to BLE Peripheral](#connecting-to-ble-peripheral)
+- [Discovering Services of BLE Peripheral](#discovering-services-of-ble-peripheral)
+- [Transferring Data between BLE Central & Peripheral](#transferring-data-between-ble-central--peripheral)
+- [Pairing BLE Peripheral](#pairing-ble-central--peripheral)
+- [Receiving BLE Availability Changes](#receiving-ble-availability-changes)
+
+### API Support Matrix
| API | Android | iOS | macOS | Windows (beta) | Linux (beta) | Web |
| :------------------- | :-----: | :-: | :---: | :-----: | :---: | :-: |
@@ -24,13 +26,122 @@ A cross-platform (Android/iOS/MacOS/Windows/Linux/Web) BluetoothLE plugin for Fl
| onPairStateChange | ✔️ | ❌ | ❌ | ✔️ | ✔️ | ❌ |
| enableBluetooth | ✔️ | ❌ | ❌ | ✔️ | ✔️ | ❌ |
| onAvailabilityChange | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
-| requestMtu | ✔️ | ✔️ | ✔️ | ✔️ | ❌ | ❌ |
+| requestMtu | ✔️ | ✔️ | ✔️ | ✔️ | ❌ | 🚧 |
## Getting Started
+### Scanning for BLE Peripherals
+
+```dart
+// Set a scan result handler
+UniversalBle.onScanResult = (scanResult) {
+ // e.g. Use scan result to connect
+}
+
+// Perform a scan
+UniversalBle.startScan();
+
+// On web, you can add filters and specify optional services to discover after connection. The parameter is ignored on other platforms.
+UniversalBle.startScan(
+ webRequestOptions: WebRequestOptionsBuilder.acceptAllDevices(
+ optionalServices: ["SERVICE_UUID"],
+ ),
+);
+
+// Stop scanning
+UniversalBle.stopScan();
+```
+
+Already connected devices won't show up as scan results.
+You can list the already connected devices using `getConnectedDevices()`. You still need to explicitly connect before using them.
+
+```dart
+// You can set `withServices` to narrow down the results
+await UniversalBle.getConnectedDevices(withServices: []);
+```
+
+### Connecting to BLE Peripheral
+
+```dart
+// Connect to a peripheral using the `deviceId` of the scanResult received from `UniversalBle.onScanResult`
+String deviceId = scanResult.deviceId;
+UniversalBle.connect(deviceId);
+
+// Disconnect from a peripheral
+UniversalBle.disconnect(deviceId);
+
+// Get notified for connection state changes
+UniversalBle.onConnectionChanged = (String deviceId, BleConnectionState state) {
+ print('OnConnectionChanged $deviceId, $state');
+}
+```
+
+### Discovering Services of BLE Peripheral
+
+```dart
+// Discover services of a specific `deviceId`
+UniversalBle.discoverServices(deviceId);
+```
+
+### Transferring Data between BLE Central & Peripheral
+
+```dart
+// Read data from a characteristic
+UniversalBle.readValue(deviceId, serviceId, characteristicId);
+
+// Write data to a characteristic
+UniversalBle.writeValue(deviceId, serviceId, characteristicId, value);
+
+// Subscribe to a characteristic
+UniversalBle.setNotifiable(deviceId, serviceId, characteristicId, BleInputProperty.notification);
+
+// Get characteristic updates in `onValueChanged`
+UniversalBle.onValueChanged = (String deviceId, String characteristicId, Uint8List value) {
+ print('onValueChanged $deviceId, $characteristicId, ${hex.encode(value)}');
+}
+
+// Unsubscribe from a characteristic
+UniversalBle.setNotifiable(deviceId, serviceId, characteristicId, BleInputProperty.disabled);
+```
+
+### Pairing BLE Central & Peripheral
+
+```dart
+// Pair
+UniversalBle.pair(deviceId);
+
+// Get the pairing result
+UniversalBle.onPairStateChange = (String deviceId, bool isPaired, String? error) {
+ // Handle Pairing state change
+}
+
+// Unpair
+UniversalBle.unPair(deviceId);
+
+// Check current pairing status
+bool isPaired = UniversalBle.isPaired(deviceId);
+```
+
+### Enable Bluetooth Programmatically
+
+```dart
+UniversalBle.enableBluetooth();
+```
+
+### Receiving BLE Availability Changes
+
+```dart
+UniversalBle.onAvailabilityChange = (state) {
+ // Handle BLE availability states
+ // e.g. poweredOff or poweredOn,
+};
+```
+
+## Platform-Specific Setup
+
### Android
-You need to add the following permissions to your AndroidManifest.xml file:
+Add the following permissions to your AndroidManifest.xml file:
```xml
@@ -45,132 +156,18 @@ If you use `BLUETOOTH_SCAN` to determine location, modify your AndroidManifest.x
```
-If you use location services in your app, remove `android:maxSdkVersion="30"` from the location permission tags
+If your app uses location services, remove `android:maxSdkVersion="30"` from the location permission tags.
-### iOS / MacOS
+### iOS / macOS
-Add `NSBluetoothPeripheralUsageDescription` and `NSBluetoothAlwaysUsageDescription` in Info.plist of your iOS and MacOS app,
+Add `NSBluetoothPeripheralUsageDescription` and `NSBluetoothAlwaysUsageDescription` to Info.plist of your iOS and macOS app.
-Add `Bluetooth` capability to MacOS app from Xcode
+Add the `Bluetooth` capability to the macOS app from Xcode.
-## Scan BLE peripheral
-
-Android/iOS/macOS/Windows/Linux
+## Customizing Platform Implementation of UniversalBle
```dart
-UniversalBle.onScanResult = (scanResult) {
- // Handle scan result
-}
-
-UniversalBle.startScan();
-
-// To scan on web, you can optionally add filters, and `optionalServices` required to discover those services after connection, for more info check [this](https://developer.mozilla.org/en-US/docs/Web/API/Bluetooth/requestDevice)
-UniversalBle.startScan(
- webRequestOptions: WebRequestOptionsBuilder.acceptAllDevices(
- optionalServices: [
- "SERVICE_UUID",
- ],
- )
-);
-
-UniversalBle.stopScan();
-```
-
-## Connect to BLE peripheral
-
-Connect to `deviceId`, received from `UniversalBle.onScanResult`
-
-```dart
-UniversalBle.onConnectionChanged = (String deviceId, BleConnectionState state) {
- print('onConnectionChanged $deviceId, $state');
-}
-
-UniversalBle.connect(deviceId);
-
-UniversalBle.disconnect(deviceId);
-```
-
-Get connected devices ( These devices might be connected through another applications, connect using `connect` method to use in your application ), use `withServices` to filter devices
-
-```dart
-await UniversalBle.getConnectedDevices(withServices: []);
-```
-
-## Discover services of BLE peripheral
-
-Discover services of `deviceId`
-
-```dart
-UniversalBle.discoverServices(deviceId);
-```
-
-## Transfer data between BLE central & peripheral
-
-- Pull data from peripheral of `deviceId`
-
-```dart
-UniversalBle.readValue(deviceId, serviceId, characteristicId);
-```
-
-- Send data to peripheral of `deviceId`
-
-```dart
-UniversalBle.writeValue(deviceId, serviceId, characteristicId, value);
-```
-
-- Receive data from peripheral of `deviceId`
-
-```dart
-UniversalBle.onValueChanged = (String deviceId, String characteristicId, Uint8List value) {
- print('onValueChanged $deviceId, $characteristicId, ${hex.encode(value)}');
-}
-
-// To get characteristic updates in `onValueChanged`
-UniversalBle.setNotifiable(deviceId, serviceId, characteristicId, BleInputProperty.notification);
-
-// To stop updates
-UniversalBle.setNotifiable(deviceId, serviceId, characteristicId, BleInputProperty.disabled);
-```
-
-## Pair BLE central & peripheral
-
-- Pair apis
-
-```dart
-UniversalBle.onPairStateChange = (String deviceId, bool isPaired, String? error) {
- // Handle Pairing state change
-}
-
-// Get result in [onPairStateChange]
-UniversalBle.pair(deviceId);
-
-UniversalBle.unPair(deviceId);
-
-UniversalBle.isPaired(deviceId);
-```
-
-## Enable bluetooth programatically
-
-```dart
-UniversalBle.enableBluetooth();
-```
-
-## Receive BLE availability changes
-
-```dart
-UniversalBle.onAvailabilityChange = (state) {
- // Handle ble availability states
- // e.g. poweredOff or poweredOn,
-};
-```
-
-## To set your own implementation of UniversalBle for any specific platform
-
-```dart
-// Create a class which extends `UniversalBlePlatform`
+// Create a class that extends UniversalBlePlatform
class UniversalBleMock extends UniversalBlePlatform {
// Implement all methods
-}
-
-UniversalBle.setInstance(UniversalBleMock());
-```
+}
\ No newline at end of file
diff --git a/pubspec.yaml b/pubspec.yaml
index ad999b5..2d7a0c9 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,6 +1,6 @@
name: universal_ble
-description: A cross-platform (Android/iOS/MacOS/Windows/Linux/Web) Bluetooth Low Energy (BLE) plugin for Flutter
-version: 0.8.1
+description: A cross-platform (Android/iOS/macOS/Windows/Linux/Web) Bluetooth Low Energy (BLE) plugin for Flutter
+version: 0.8.2
homepage: https://navideck.com
repository: https://github.com/Navideck/universal_ble
issue_tracker: https://github.com/Navideck/universal_ble/issues