Acknowledged
over 1 year ago

BLE Stack issue Venu, Venu3, Fenix 6 pro/sapphire (and probably other models). Bug when using HY-BC204 module

I understand that this is a specialized use case, but I am experiencing difficulties with Bluetooth Low Energy (BLE) communication with a particular electric unicycle (Kingsong S22) that employs a HY-BC204 Bluetooth module.

The issue I am encountering is that the onCharacteristicsChanged method is being invoked excessively frequently (approximately every 10 milliseconds) when using this particular module. This does not align with the hardware capabilities of the EUC UART, and it is causing delayed value display on my application (WheelDash) as the watches are incapable of handling data from the EUC at such a rapid pace. I attempted to eliminate identical BLE frames, as I believe they may be duplicates, but this did not resolve the problem.

This bug affects a number of models, including Venu, Venu3, and Fenix 6 pro/sapphire. However, it functions flawlessly on Epix Gen2 (51mm).

  • I'm unfamiliar with the typical BLE data transmission behavior for devices other than EUCs (Electric Unicycles), but in this specific case with the Kingsong S22, the process involves subscribing to notifications and performing a write operation on a characteristic to prompt the device to begin sending data.

    The device then transmits various data frames (usually one every 100-150ms), including one that I'm particularly interested in. This particular frame is theoretically sent every 500 milliseconds and is identifiable by a specific byte within the transmitted byte array. However, when I attempt to count the frequency of these specific frames, I'm consistently receiving values between 20 and 100 frames per second, which seems unrealistic. What is really surprising is it does work really well on Epix, but not on the watches I listed (displayed data seems to be delayed by 20-30 sec).

  • With time driven notifies, do you have any way to specify how often they occur?  for example, with the Thingy52 you can.  Seems 10ms is excessive, but may be the default.

    As an option, maybe don't turn on notify, but just read the characteristic as often as you want. 

    What you may be seeing is based on the load and speed of the specific Garmin, things are getting muddled.