Coder Social home page Coder Social logo

Reading/Polling Buffer about blewinrtdll HOT 5 CLOSED

adabru avatar adabru commented on July 22, 2024
Reading/Polling Buffer

from blewinrtdll.

Comments (5)

adabru avatar adabru commented on July 22, 2024 1

Using the BLE characteristic "Notify" seems right to me.

I'm not sure what may be the cause in your description. One thing you could try out is changing your bluetooth dongle. For my project I tried 3 different ones until the last one had the performance I'd expect from BLE. But I doubt that is the reason here.

The timespan of half a minute reminds me of another thing. I am also using an ESP32. The BLE-connection (scan + Connect()) normally takes less than a second. Also the subscription to the characteristic notify event is normally very fast. The data is sent with latencies around <10-50ms, I didn't measure more exactly yet. After subscription the ESP32 starts sending its packages. Now, if I restart the program and it tries to reconnect, I have to wait somewhere between 30-60s before it connects again. I found out that the ESP is sending out packages around 60s after subscrption. Then it will stop sending them if it didn't receive any response from Windows. I guess it will think the connection was lost. If I send any BLE package from Windows to the ESP the 60s-timer is reset. I am not sure why Windows can't connect to the ESP while it is sending its package-stream. My guess was data-congestion on ESP-side. In my case I added code to the ESP that reduces the timer to 1s, so that reconnection is faster.

Another problem I had was when I sent data from the ESP too fast. I guess that was also due to data congestion, probably on ESP side but could also be on dongle or Windows side. Enforcing a maximum packages per second rate should avoid that. That could explain why it starts working when your ESP waits 512 sensor readings before it sends a package.

from blewinrtdll.

adabru avatar adabru commented on July 22, 2024 1

Or you can try out writing packages to your ESP in a regular interval (<30s, e.g. 2s).

from blewinrtdll.

Joelx avatar Joelx commented on July 22, 2024 1

Thanks again for the help. You definitely brought be on the right track here again :)
I looked a bit closer inside your BleWinrtDll.cpp and it seems that you are actually using the Notification for characteristics subscription:

fire_and_forget SubscribeCharacteristicAsync(wchar_t* deviceId, wchar_t* serviceId, wchar_t* characteristicId, bool* result) {
....
....
auto status = co_await characteristic.WriteClientCharacteristicConfigurationDescriptorAsync(GattClientCharacteristicConfigurationDescriptorValue::Notify);

So accessing
Impl.PollData(out packageReceived, true);
packageReceived.buf[0]
should be sufficient for reading a byte from the characteristic. I was a bit on the wrong track in thinking that the problem was on my processing on the Unity side.

Turns out, the keyword for my problem is, like you mentioned, "data congestion". After reading your reply I tried one simple thing.
On my ESP32 program, after sending my packet, I added a simple delay(50):
pCharacteristicCommand->setValue(package, 1);
pCharacteristicCommand->notify();
delay(50);

.. and this ACTUALLY seems to have done the trick. It's not that I hadn't thought about it, but idk like I said - I was a bit on the wrong track :)
I will have to fiddle around with and tweak it a bit, but overall I think that may have solved my problem!

from blewinrtdll.

sbExperiential avatar sbExperiential commented on July 22, 2024

@adabru Do you remember the dongle that you used?

from blewinrtdll.

adabru avatar adabru commented on July 22, 2024

@adabru Do you remember the dongle that you used?

Sorry, I don't . It was provided in the office.

from blewinrtdll.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.