using Assets.Scripts.Ble; using Assets.Scripts.Devices.Ble.Interfaces; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using UnityEngine; namespace Assets.Scripts.Devices.Ble.Characteristic { public class HeartRateMeasurement : ICharacteristic { public Guid Uuid { get { return ServiceUuids.Characteristics.HrMeasurement; } } public Guid ServiceUuid { get { return ServiceUuids.Get(ServiceUuids.HeartRate).IdGuid; } } public bool IsOptional { get { return false; } } private HrmFormat Format { get; set; } // Token: 0x170005EB RID: 1515 // (get) Token: 0x0600214D RID: 8525 RVA: 0x0008999B File Offset: 0x00087B9B public int BeatsPerMinute { get; private set; } public void HandleAttributeReceived(byte[] data) { HrmFlags hrmFlags = (HrmFlags)BitConvertHelper.ToUInt8(data, 0); this.Format = (HrmFormat)(hrmFlags.HasFlag(HrmFlags.Format) ? 1 : 0); if (this.Format == HrmFormat.Short) { this.BeatsPerMinute = BitConvertHelper.ToUInt8(data, 1); //Debug.Log("心率:" + this.BeatsPerMinute); return; } if (data.Length < 3) { throw new ArgumentException("数据出错"); } this.BeatsPerMinute = BitConvertHelper.ToUInt16(data, 1); } public void SetUnavailable() { } [Flags] private enum HrmFlags { // Token: 0x040029D0 RID: 10704 Format = 1, // Token: 0x040029D1 RID: 10705 SensorContactStatus1 = 2, // Token: 0x040029D2 RID: 10706 SensorContactStatus2 = 4, // Token: 0x040029D3 RID: 10707 Energy = 8, // Token: 0x040029D4 RID: 10708 RR = 16 } // Token: 0x02000921 RID: 2337 private enum HrmFormat { // Token: 0x040029D6 RID: 10710 Short, // Token: 0x040029D7 RID: 10711 Long } } }