In this example, Argon (or any Gen3 device for that matter) is connected to a 3rd party Heart Rate monitor. Following the same steps, I am trying to connect to 3rd party blood pressure device to read the blood pressure data. Unlike the example, Boron (in my case) does not connect to the blood pressure device.
I am using a TI BLE sniffer tool and I can see that the packets being broadcasted from the blood pressure device but the connection does not happen. The same sniffer tool showed that the packets were broadcasted from the Heart Rate Monitor as well and Boron was able to connect and read the data. Anybody here has any experience in the area?
I commented out the Company ID check and Boron was able to detect the BLE packet from the Blood Pressure device.
I added the code to initiate a connection (copied from “Heart Rate Central” example) and I was able to make Boron connect with the Blood Pressure device via BLE. So, that part is good!
So, basically the scan API from the “Device Nearby” example works as it returns the correct length which is 7 (as described in the example).
len = scanResults[ii].advertisingData.get(BleAdvertisingDataType:: MANUFACTURER_SPECIFIC_DATA , buf, BLE_MAX_ADV_DATA_LEN);
But it does NOT work from the “Heart Rate Central” example as the len is always zero. Code is expecting a value > 0.
len = scanResults[ii].advertisingData.get(BleAdvertisingDataType:: SERVICE_UUID_16BIT_COMPLETE , buf, BLE_MAX_ADV_DATA_LEN);
I believe the issue is with the BleAdvertisingDataType. The reference has a long list of datatypes but I am not sure which one to try?
Looks like I am able to make the connection from Boron to Omron via BLE. Successful network connection is captured below:
So, basically, this scan command works:
len = scanResults[ii].advertisingData.get(BleAdvertisingDataType:: MANUFACTURER_SPECIFIC_DATA , buf, BLE_MAX_ADV_DATA_LEN)
It returns 7 or 25 data lengths.
I used each of these lengths to make the connection. But, characteristic 0x2A35 is not firing the event to the call back API onDataReceived() as shown in the example “Heart Rate Central”.
Probably, I have to do a manual read of the data rather than relying on the event. Not sure how to do that though?
The HeartRate Monitor device sends out beacons using BleCharacteristicProperty::NOTIFY (0x10)
The BloodPressure Monitor sends out beacons using BleCharacteristicProperty::INDICATE (0x20)
I think HeartRate Monitor example is configured to get “Notify” events not “Indicate” events. So, I need to know how to configure BLE stack to get “Indicate” events?
I tried using the getValue() API but since the characteristic does not have "read " property, it resulted in an error.
After trying various vendors for the blood pressure monitor support, I was finally able to get Beurer Blood Pressure Monitor working. So, I think the issue was with the Omron Blood Pressure device where even after the successful BLE connection, it was not able to fire the blood pressure characteristic event (0x2A35) but with the same FW on the Boron side, Beurer Blood Pressure device did.
This should help others who are struggling in this area.