Попытка получить вариабельность сердечного ритма от Polar H10 [Пример низкого энергопотребления Bluetooth UWP] - PullRequest
0 голосов
/ 24 октября 2018

Я работаю с Polar H10, чтобы определить вариабельность сердечного ритма.

Я использую Пример низкого энергопотребления Bluetooth от Microsoft.

Я использовал этот образец для определения частоты сердечных сокращений от другого полярного устройства (Polar OH1), и он работал нормально.

Но теперь я хочу получить ВСР от Polar H10.Но пример кода BLE на самом деле не показывает мне характеристику ВСР, которая должна точно соответствовать частоте сердечных сокращений.

Это единственные характеристики, которые я вижу:

 // first layer keys are serviceUuid's
// second layer keys are characteristicUuid's
// with their respective name/description as values
{
    "1800"    /* Generic Access */                      : {
    "2a00": "Device Name",
    "2a01": "Appearance",
    "2a02": "Peripheral Privacy Flag",
    "2a03": "Reconnection Address",
    "2a04": "Peripheral Preferred Connection Parameters"
},
"1801"    /* Generic Attribute */                   : {
    "2a05": "Service Changed"
},
"180d"    /* Heart Rate */                          : {
    "2a37": "Heart Rate Measurement",
    "2a38": "Body Sensor Location"
   // This is where it should show Heart Rate Variability //
},
"180a"    /* Device Information */                  : {
    "2a23": "System ID",
    "2a24": "Model Number String",
    "2a25": "Serial Number String",
    "2a26": "Firmware Revision String",
    "2a27": "Hardware Revision String",
    "2a28": "Software Revision String",
    "2a29": "Manufacturer Name String"
},
"180f"    /* Battery Service */                     : {
    "2a19": "Battery Level"
},
"6217ff4b-fb31-1140-ad5a-a45545d7ecf3" /* unknown */: {
    "6217ff4c-c8ec-b1fb-1380-3ad986708e2d": "unknown", /* read:true */ // value = 
     uInt16Array [3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    "6217ff4d-91bb-91d0-7e2a-7cd3bda8a1f3": "unknown" /* write:true, 
     indicate:true, descriptors:{ descriptorUuid: "2902" }*/
 {
     /* 6172 */
     this service has all the numbers which I have no idea about. 
     Example: 10905, 10906, and etc.  
  }
}

Кто-нибудь знает, какие корректировки я должен внести в код, чтобы получить ВСР?

                 **EDIT::** 


           private static ushort ParseHeartRateValue(byte[] data)
    {

        // Heart Rate profile defined flag values
        const byte heartRateValueFormat = 0x01;

        byte flags = data[0];
        bool isHeartRateValueSizeLong = ((flags & heartRateValueFormat) != 0);

        if (isHeartRateValueSizeLong)
        {
            return BitConverter.ToUInt16(data, 1);
        }
        else
        {
            return data[1];
        }
    }

//// ПОСЛЕ ОБНОВЛЕНИЯ ВЫШЕ МЕТОДА //////

          private static ushort ParseHeartRateValue(byte[] data)
    {
        ushort offset = 1;
        // Heart Rate profile defined flag values
        const byte heartRateValueFormat = 0x01;

        byte flags = data[0];
        bool rr = (flags & (1 << 4)) != 0;
        if (rr)
        {
            int count = (data.Length - offset) / 2;
            for (int i = 0; i < count; i++)
            {

                ushort value = BitConverter.ToUInt16(data, offset);

                double intervalLengthInSeconds = value / 1024.0;
                offset += 2;
            }
        }
        bool isHeartRateValueSizeLong = ((flags & heartRateValueFormat) != 0);

        if (isHeartRateValueSizeLong)
        {
            return BitConverter.ToUInt16(data, 1);
        }
        else 
        {
            return data[1];
        }

    }

1 Ответ

0 голосов
/ 24 октября 2018

Используемое устройство соответствует спецификации Bluetooth сердечного ритма.Поэтому данные, которые он отправляет, должны соответствовать этому стандарту.если вы обратитесь к этой документации , вы прочтете характеристику 0x2A37, которую вы указали в своем вопросе, но вы не должны получать ее как целое число.

Различные значения, заданные характеристикойперечислены в документации, которую я связал.Я думаю, что вас заинтересует «Интервал RR», который задается с разрешением 1/1024 секунды.

Вам нужно будет извлечь требуемые байты из вашего значения.Будьте осторожны с порядком байтов.Как указано в документации:

Поля в приведенной выше таблице расположены в порядке от LSO до MSO.Где LSO = наименее значимый октет и MSO = наиболее значимый октет.

Итак, вы ищете последние 2 байта значения, так как интервал RR является uint16.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...