I am not able to get the values(Systolic, Diastolic and Pulse from a Blood Pressure Measurement machine) after getting all the characteristics of Blood Pressure Service (uuid: 00002a35-0000-1000-8000-00805f9b34fb) and also I am not getting the point about all these characteristics and descriptors. So please, anyone, help me with this issue in BLE device.
2 Answers
1
votes
You have asked too generic question. May be you need to understand the Android BLE flow from this link.
A GATT
database implements one or more profiles(Heart Rate, Audio etc)
, and each profile is made up of one or more services
, and each service is made up of one or more characteristics
.
Just to give you glimpse, characteristics
are the properties, where you define which one you want to use for read or write.
descriptors
are the object on which you write the data to enable/send data.
UUID
what you use to send and receive data should be same across client and Server.
0
votes
Try to parse Scan Record, you may find some information there
Kotlin Code
enum class EBLE {
EBLE_ZERO, // Zero element
EBLE_FLAGS, //«Flags» Bluetooth Core Specification:
EBLE_16BitUUIDInc, //«Incomplete List of 16-bit Service Class UUIDs» Bluetooth Core Specification:
EBLE_16BitUUIDCom, //«Complete List of 16-bit Service Class UUIDs» Bluetooth Core Specification:
EBLE_32BitUUIDInc,//«Incomplete List of 32-bit Service Class UUIDs» Bluetooth Core Specification:
EBLE_32BitUUIDCom,//«Complete List of 32-bit Service Class UUIDs» Bluetooth Core Specification:
EBLE_128BitUUIDInc,//«Incomplete List of 128-bit Service Class UUIDs» Bluetooth Core Specification:
EBLE_128BitUUIDCom,//«Complete List of 128-bit Service Class UUIDs» Bluetooth Core Specification:
EBLE_SHORTNAME,//«Shortened Local Name» Bluetooth Core Specification:
EBLE_LOCALNAME,//«Complete Local Name» Bluetooth Core Specification:
EBLE_TXPOWERLEVEL,//«Tx Power Level» Bluetooth Core Specification:
EBLE_DEVICECLASS,//«Class of Device» Bluetooth Core Specification:
EBLE_SIMPLEPAIRHASH,//«Simple Pairing Hash C» Bluetooth Core Specification:«Simple Pairing Hash C-192» Core Specification Supplement, Part A, section 1.6
EBLE_SIMPLEPAIRRAND,//«Simple Pairing Randomizer R» Bluetooth Core Specification:«Simple Pairing Randomizer R-192» Core Specification Supplement, Part A, section 1.6
EBLE_DEVICEID,//«Device ID» Device ID Profile v1.3 or later,«Security Manager TK Value» Bluetooth Core Specification:
EBLE_SECURITYMANAGER,//«Security Manager Out of Band Flags» Bluetooth Core Specification:
EBLE_SLAVEINTERVALRA,//«Slave Connection Interval Range» Bluetooth Core Specification:
EBLE_16BitSSUUID,//«List of 16-bit Service Solicitation UUIDs» Bluetooth Core Specification:
EBLE_128BitSSUUID, //«List of 128-bit Service Solicitation UUIDs» Bluetooth Core Specification:
EBLE_SERVICEDATA,//«Service Data» Bluetooth Core Specification:«Service Data - 16-bit UUID» Core Specification Supplement, Part A, section 1.11
EBLE_PTADDRESS,//«Public Target Address» Bluetooth Core Specification:
EBLE_RTADDRESS,//«Random Target Address» Bluetooth Core Specification:
EBLE_APPEARANCE,//«Appearance» Bluetooth Core Specification:
EBLE_DEVADDRESS,//«LE Bluetooth Device Address» Core Specification Supplement, Part A, section 1.16
EBLE_LEROLE,//«LE Role» Core Specification Supplement, Part A, section 1.17
EBLE_PAIRINGHASH,//«Simple Pairing Hash C-256» Core Specification Supplement, Part A, section 1.6
EBLE_PAIRINGRAND,//«Simple Pairing Randomizer R-256» Core Specification Supplement, Part A, section 1.6
EBLE_32BitSSUUID,//«List of 32-bit Service Solicitation UUIDs» Core Specification Supplement, Part A, section 1.10
EBLE_32BitSERDATA,//«Service Data - 32-bit UUID» Core Specification Supplement, Part A, section 1.11
EBLE_128BitSERDATA,//«Service Data - 128-bit UUID» Core Specification Supplement, Part A, section 1.11
EBLE_SECCONCONF,//«LE Secure Connections Confirmation Value» Core Specification Supplement Part A, Section 1.6
EBLE_SECCONRAND,//«LE Secure Connections Random Value» Core Specification Supplement Part A, Section 1.6
EBLE_3DINFDATA, //«3D Information Data» 3D Synchronization Profile, v1.0 or later
EBLE_MANDATA; //«Manufacturer Specific Data» Bluetooth Core Specification:
companion object {
private val map = EBLE.values()
fun fromInt(type: Int) = if (type > 0) map[type] else EBLE_MANDATA
fun getDistance(rssi: Int, txPower: Int) = {
/*
* RSSI = TxPower - 10 * n * lg(d)
* n = 2 (in free space)
*
* d = 10 ^ ((TxPower - RSSI) / (10 * n))
*/
Math.pow(10.0, (txPower.toDouble() - rssi) / (10 * 2))
}
/*
BLE Scan record parsing
*/
fun ParseRecord(scanRecord: ByteArray): Map<EBLE, ByteArray> {
val ret = HashMap<EBLE, ByteArray>()
var index = 0
while (index < scanRecord.size) {
val length = scanRecord[index++].toInt()
//Zero value indicates that we are done with the record now
if (length == 0) break
val type = scanRecord[index].toInt()
//if the type is zero, then we are pass the significant section of the data,
// and we are thud done
if (type == 0) break
Arrays.copyOfRange(scanRecord, index + 1, index + length)?.let {
ret[EBLE.fromInt(type)] = it //HexUtil.formatHexString(it)
}
index += length
}
return ret
}
}
}