Bluetooth low energy, how to parse R-R Interval value?

前端 未结 5 675
醉梦人生
醉梦人生 2021-01-07 02:18

My application is receiving information from smart heart device. Now i can see pulse value. Could you please help me to parse R-R Interval value? How can i check device supp

5条回答
  •  耶瑟儿~
    2021-01-07 02:34

    Parse heart rate parameters in "C"

    I uploaded the sample application to GitHub Heart-Rate-Bluegiga

    void ble_evt_attclient_attribute_value(const struct ble_msg_attclient_attribute_value_evt_t *msg)
    {
        if (msg->value.len < 2) {
            printf("Not enough fields in Heart Rate Measurement value");
            change_state(state_finish);
        }
    
    
        // Heart Rate Profile defined flags 
        const unsigned char HEART_RATE_VALUE_FORMAT = 0x01;
        const unsigned char ENERGY_EXPENDED_STATUS = 0x08;
        const unsigned char RR_INTERVAL = 0x10;
    
    
        unsigned char current_offset = 0;
        unsigned char flags = msg->value.data[current_offset];
        int is_heart_rate_value_size_long = ((flags & HEART_RATE_VALUE_FORMAT) != 0);
        int has_expended_energy = ((flags & ENERGY_EXPENDED_STATUS) != 0);
        int has_rr_intervals = ((flags & RR_INTERVAL) != 0);
    
    
        current_offset++;
    
    
        uint16 heart_rate_measurement_value = 0;
    
    
        if (is_heart_rate_value_size_long)
        {
            heart_rate_measurement_value = (uint16)((msg->value.data[current_offset + 1] << 8) +
                msg->value.data[current_offset]);
            current_offset += 2;
        }
        else
        {
            heart_rate_measurement_value = msg->value.data[current_offset];
            current_offset++;
        }
    
    
        printf("Heart rate measurment value: %d ", heart_rate_measurement_value);
    
    
        uint16 expended_energy_value = 0;
    
    
        if (has_expended_energy)
        {
            expended_energy_value = (uint16)((msg->value.data[current_offset + 1] << 8) +
                msg->value.data[current_offset]);
            current_offset += 2;
    
    
            printf(" Expended energy value: %d ", expended_energy_value);
        }
    
    
        uint16 rr_intervals[10] = {0};
    
    
        if (has_rr_intervals)
        {
            printf(" Rr intervals: ");
    
    
            int rr_intervals_count = (msg->value.len - current_offset) / 2;
    
    
            for (int i = 0; i < rr_intervals_count; i++)
            {
                int raw_rr_interval = (uint16)((msg->value.data[current_offset + 1] << 8) +
                    msg->value.data[current_offset]);
                rr_intervals[i] = ((double)raw_rr_interval / 1024) * 1000;
                current_offset += 2;
    
    
                printf("%d ", rr_intervals[i]);
            }
            printf("\n");
        }
    }
    

提交回复
热议问题