btleplug icon indicating copy to clipboard operation
btleplug copied to clipboard

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

Open lassehenriksen-stryde opened this issue 2 years ago • 3 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

lassehenriksen-stryde avatar Oct 05 '23 14:10 lassehenriksen-stryde

Is this happening on all platforms, or just one?

qwandor avatar Oct 05 '23 15:10 qwandor

@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.

lassehenriksen-stryde avatar Oct 05 '23 16:10 lassehenriksen-stryde

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

lassehenriksen-stryde avatar Jan 11 '24 14:01 lassehenriksen-stryde