Skip to main content

BluerConnection

Struct BluerConnection 

Source
pub struct BluerConnection { /* private fields */ }
Expand description

BlueZ connection wrapper

Wraps a bluer::Device with connection state tracking and write queue. BLE only allows one pending write per connection, so all writes are serialized through the write queue.

Implementations§

Source§

impl BluerConnection

Source

pub async fn discover_mtu( &self, service_uuid: Uuid, char_uuid: Uuid, ) -> Result<u16>

Discover the actual negotiated MTU via a characteristic

BlueZ negotiates MTU during the first GATT operation. Call this after connecting to get the actual negotiated value. Uses AcquireWrite which returns the negotiated MTU.

Source

pub fn device(&self) -> &Device

Get the underlying BlueZ device

Source

pub async fn update_rssi(&self)

Update RSSI from device

Source

pub async fn set_mtu(&self, mtu: u16)

Update MTU

Source

pub async fn set_phy(&self, phy: BlePhy)

Update PHY

Source

pub async fn mark_dead(&self)

Mark connection as dead

Source

pub async fn disconnect(&self) -> Result<()>

Disconnect from the device

Clears any pending writes and disconnects the BLE connection.

Source

pub async fn discover_services(&self) -> Result<()>

Discover GATT services

Source

pub async fn services(&self) -> Result<Vec<Service>>

Get GATT services

Source

pub async fn find_service(&self, uuid: Uuid) -> Result<Option<Service>>

Find a service by UUID

Source

pub async fn read_characteristic( &self, service_uuid: Uuid, char_uuid: Uuid, ) -> Result<Vec<u8>>

Read a characteristic value

Source

pub async fn write_characteristic( &self, service_uuid: Uuid, char_uuid: Uuid, value: &[u8], ) -> Result<()>

Write a characteristic value (direct, non-queued)

Warning: BLE only allows one pending write per connection. Calling this method concurrently may cause write failures. Use write_characteristic_queued for safe concurrent writes.

Source

pub async fn write_characteristic_queued( &self, service_uuid: Uuid, char_uuid: Uuid, value: &[u8], ) -> Result<()>

Write a characteristic value with queuing

BLE only allows one pending write per connection. This method queues writes and processes them serially, preventing write conflicts. Safe to call concurrently from multiple tasks.

Returns when the write completes (or fails).

Source

pub async fn write_queue_depth(&self) -> usize

Get the current write queue depth

Useful for monitoring backpressure. If the queue grows too large, consider slowing down write requests.

Source

pub async fn write_in_progress(&self) -> bool

Check if a write is currently in progress

Source

pub async fn clear_write_queue(&self)

Clear the write queue (e.g., on disconnect)

All pending writes will receive an error.

Source

pub async fn subscribe_characteristic( &self, service_uuid: Uuid, char_uuid: Uuid, ) -> Result<impl Stream<Item = Vec<u8>>>

Subscribe to characteristic notifications

Trait Implementations§

Source§

impl BleConnection for BluerConnection

Source§

fn peer_id(&self) -> &NodeId

Get the remote peer’s node ID
Source§

fn is_alive(&self) -> bool

Check if connection is still alive
Source§

fn mtu(&self) -> u16

Get the negotiated MTU
Source§

fn phy(&self) -> BlePhy

Get the current PHY
Source§

fn rssi(&self) -> Option<i8>

Get RSSI (signal strength) in dBm
Source§

fn connected_duration(&self) -> Duration

Get connection duration
Source§

impl Clone for BluerConnection

Source§

fn clone(&self) -> BluerConnection

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.