bt_gatt/
periodic_advertising.rs1use bt_common::core::Phy;
13use futures::{Future, Stream};
14use thiserror::Error;
15
16use bt_common::PeerId;
17
18#[derive(Error, Debug)]
19#[non_exhaustive]
20pub enum Error {
21 #[error("Periodic Advertising Sync failed to establish")]
22 SyncEstablishFailed,
23 #[error("Periodic Advertising Sync lost")]
24 SyncLost,
25 #[error("I/O error")]
26 Io,
27}
28
29pub trait PeriodicAdvertising {
31 type SyncFut: Future<Output = crate::Result<Self::SyncStream>>;
32 type SyncStream: Stream<Item = crate::Result<SyncReport>>;
33
34 fn sync_to_advertising_reports(
38 peer_id: PeerId,
39 advertising_sid: u8,
40 config: SyncConfiguration,
41 ) -> Self::SyncFut;
42
43 }
45
46#[derive(Debug, Clone)]
47pub struct SyncConfiguration {
48 pub filter_duplicates: bool,
52}
53
54#[derive(Debug, Clone)]
55pub struct PeriodicAdvertisingReport {
56 pub rssi: i8,
57 pub data: Vec<u8>,
58 pub event_counter: Option<u16>,
61 pub subevent: Option<u8>,
64 pub timestamp: i64,
65}
66
67#[derive(Debug, Clone)]
68pub struct BroadcastIsochronousGroupInfo {
69 pub streams_count: u8,
72 pub sdu_interval: i64,
74 pub max_sdu_size: u16,
76 pub phy: Phy,
78 pub encryption: bool,
80}
81
82#[derive(Debug, Clone)]
83pub struct BroadcastIsochronousGroupInfoReport {
84 pub info: BroadcastIsochronousGroupInfo,
85 pub timestamp: i64,
86}
87
88#[derive(Debug, Clone)]
89pub enum SyncReport {
90 PeriodicAdvertisingReport(PeriodicAdvertisingReport),
91 BroadcastIsochronousGroupInfoReport(BroadcastIsochronousGroupInfoReport),
92}