deviceplug / btleplug

Rust Cross-Platform Host-Side Bluetooth LE Access Library

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Reading characteristic updates with Peripheral::notifications.next().await returns value with max len=20

lassehenriksen-stryde opened this issue · comments

Describe the bug
Reading characteristic updates with Peripheral::notifications.next().await returns value with max len=20.

Expected behavior
It should return the value as it is, not missing any data.

Actual behavior
It cuts off after 20.

Additional context

Is this happening on all platforms, or just one?

@qwandor I have only tested it on Windows 11. Here is a snippet of my code:

    peripheral.subscribe(&peripherals_char).await;
    let mut notification_stream = peripheral.notifications().await?;

    loop {
        while let Some(data) = notification_stream.next().await {
            if data.uuid == char_uuid{
                println!(
                    "{}", String::from_utf8_lossy(&data.value)
                );
            }
        }

'data.value' here is a vector that is never greater than 20 in size.

I have tried to just read the characteristic manually which works fine (the values are more than 20 bytes), like this:

match peripheral.read(&peripherals_char).await {
        Ok(value) => {
           let msg_str = String::from_utf8_lossy(&value);
           println!("{}", msg_str);
         }
        Err(error) => {
            println!("ERROR: {:?}", error);
        }
};

But that is too slow for my use case since the characteristic is updating very fast.

Seems to be happening on both Windows, Mac and Linux.