NordicSemiconductor / IOS-nRF-Toolbox

The nRF Toolbox is a container app that stores your Nordic Semiconductor apps for Bluetooth Low Energy in one location.
https://www.nordicsemi.com/Software-and-tools/Development-Tools/nRF-Toolbox
BSD 3-Clause "New" or "Revised" License
590 stars 205 forks source link

Incorrect unit for blood pressure #114

Open Walter0697 opened 2 years ago

Walter0697 commented 2 years ago

It seems like for the official GATT specification, bit 0 will have a value of 0 if the unit is mmHg, and a value of 1 if the unit is kPa. However, the logic in the code seems to be reserved.

private extension Flag {
    static let unitFlag: Flag = 0x01
    static let timeStamp: Flag = 0x02
    static let pulseRate: Flag = 0x04
}

struct BloodPressureCharacteristic {

    let systolicPressure: Measurement<UnitPressure>
    let diastolicPressure: Measurement<UnitPressure>
    let meanArterialPressure: Measurement<UnitPressure>
    let date: Date?
    let pulseRate: Int?

    init(data: Data) throws {
        let flags: UInt8 = try data.read()
        let unit: UnitPressure = Flag.isAvailable(bits: flags, flag: .unitFlag) ? .millimetersOfMercury : .kilopascals

The incorrect logic cant be found in BloodPressureCharacteristic.swift and BloodPressureCharacteristic.swift

If I am correct, the correct code should be let unit: UnitPressure = Flag.isAvailable(bits: flags, flag: .unitFlag) ? .kilopascals : .millimetersOfMercury

philips77 commented 2 years ago

On the other hand, after testing the whole app, you have found only one bit wrong! Look how many bits we got right!

NickKibish commented 2 years ago

Ok, I'll check that