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 C2RowerData : ICharacteristic, IRowerCommonData { public Guid Uuid => ServiceUuids.Characteristics.C2RowerData; public Guid ServiceUuid => ServiceUuids.Characteristics.C2Service; public bool IsOptional => false; public static event EventHandler EnableChanged; private static bool? _isEnabled; public static bool? IsEnabled { get => _isEnabled; set { _isEnabled = value; if (EnableChanged != null) { EnableChanged(_isEnabled, new EventArgs()); } } } //0.1 lbs of force, max=6553.5m 单位0.1磅 public double PeakDriveForce { get; set; } public double AverageDriveForce { get; set; } public event EventHandler PullChanged; private ushort _pullValue; public ushort PullValue { get { return _pullValue; } set { _pullValue = value; if (this.PullChanged != null) { this.PullChanged(this, new EventArgs()); } } } public void HandleAttributeReceived(byte[] data) { Debug.Log("数据" + string.Join(",", data)); if (data[0] == 53) { PeakDriveForce = LbsToNewton(Convert.ToDouble(BitConvertHelper.ToUInt16(data, 13)) / 10); AverageDriveForce = LbsToNewton(Convert.ToDouble(BitConvertHelper.ToUInt16(data, 15)) / 10); Debug.Log($"峰力值:{PeakDriveForce} 均力值{AverageDriveForce}"); } else if (data[0] == 61) { List r = new List(); for (int i = 3; i < data.Length; i += 2) { ushort pull = data[i] < 10 ? (ushort)0 : Convert.ToUInt16(Math.Round(LbsToNewton(data[i]))); r.Add(pull); PullValue = pull; } Debug.Log("拉力曲线:"+ string.Join(",",r)); } } private double LbsToNewton(double lbs) => 4.4482216 * lbs; public void SetUnavailable() { //throw new NotImplementedException(); } } }