rust: Add README Provides an overview of the types of crates and which ones are currently available, as well as some general notes about user data. Test: documentation only Change-Id: Id329e77ec7fae05de8a5679057b9c197b6d26a3e Reviewed-on: https://bluetooth-review.git.corp.google.com/c/bluetooth/+/2040 Reviewed-by: Ani Ramakrishnan <aniramakri@google.com>
diff --git a/rust/README.md b/rust/README.md new file mode 100644 index 0000000..dcd3d7e --- /dev/null +++ b/rust/README.md
@@ -0,0 +1,96 @@ +# 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/