| # Bluetooth Profile Implementations |
| |
| This workspace provides implementations of profiles and services defined in |
| [published specifications][1] by the Bluetooth SIG. |
| |
| There are four types of crates: Services, Profiles, Utility and Interface |
| |
| Each crate is expected to include it's own unit tests that are runnable |
| with `cargo test` and should be passing on every commit. Crates that use |
| async features of rust are executor-agnostic - using any async executor |
| should be possible. |
| |
| ## Services |
| |
| Crates that implement services as defined by the published specifications. |
| They should provide parsed representations of any of the specified formats of |
| characteristics or descriptors, as well as control operations and their |
| arguments. |
| |
| Some services crates may be usable on their own, especially if they are not |
| usually associated directly with a profile. |
| |
| List of currently implemented or in-development services crates: |
| * bt-ascs - Audio Stream Control Service |
| * bt-pacs - Published Audio Capabilities Service |
| * bt-bass - Broadcast Audio Scan Service |
| * bt-vcs - Volume Control Service |
| * bt-battery - Battery Service |
| |
| ## Profiles |
| |
| Crates that implement all or some of a profile specification and provide an API |
| for use of their included services. BAP Broadcast Assistant is one example of a |
| role that could be a single crate. |
| |
| List of currently implemented or in-development profiles crates: |
| * bt-broadcast-assistant - Basic Audio Profile Broadcast Assistant Role |
| |
| ## Utility |
| |
| Crates that implement some common set of shared code or types expected to be |
| shared between multiple other crates in the workspace. |
| |
| List of current utility crates: |
| * bt-common - Defines types and formats from the [Core Specification][core] |
| or [Assigned Numbers][assigned] |
| * bt-bap - Common types shared across Basic Audio Profile roles |
| |
| ## Interface |
| |
| Crates that provide an interface to system capabilities that are required for |
| the other crates to work. Each interface crate represents a requirement for |
| the system to provide for some of the implementations in Profiles or Services |
| crates. |
| |
| ### bt-gatt |
| |
| Host stack GATT interface. |
| |
| Bluetooth Host implementations using the profile and services crates above |
| usually require reference to `GattTypes`, and sometimes `ServerTypes`, to |
| allow the services and profiles crates to find, connect to, and read/write from |
| piconet peers. |
| |
| Generally profile or service crates will be grounded in one of these two |
| Dependency Traits to use types provided by the platform stack for searching, |
| publishing services, advertising, connecting, and communicating via GATT. |
| |
| `GattTypes` provides common types expected to be needed for any GATT operation, |
| and these types should be provided by any implementation crate. |
| |
| `ServerTypes` are specific to publising a GATT service. |
| |
| Implementers are encouraged to read the README in the `bt-gatt` crate to follow |
| best practices. |
| |
| # Important Note about User Data and Privacy |
| |
| As Bluetooth is often used for data sharing and can send sensitive information, |
| care should be taken by integrators of this library to ensure that user data and |
| privacy is maintained. |
| |
| The crates here do not store any data persistently, and identifiers are stable |
| only as long as the connection is maintained. |
| |
| Interface implementations should take special care to randomize peer IDs |
| as well as any other identifiers when possible to prevent leakage of |
| location and/or other information through metadata. |
| |
| Indications of Bluetooth usage should be present on interfaces when possible to |
| make it clear to users that the technology is in use and data is being |
| transmitted wirelessly. |
| |
| [1]: https://www.bluetooth.com/specifications/specs/ |
| [core]: https://www.bluetooth.com/specifications/specs/core-specification-5-4/ |
| [assigned]: https://bitbucket.org/bluetooth-SIG/public/src/main/assigned_numbers/ |