From 17eaccb72e93a5bce10bd7824ab15b5715e3785e Mon Sep 17 00:00:00 2001 From: lishuo Date: Fri, 4 Jun 2021 19:23:32 +0800 Subject: [PATCH] =?UTF-8?q?=E8=93=9D=E7=89=99=E8=B0=83=E7=94=A8=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Scenes/Ride/Scripts/CyclingController.cs | 8 +- .../Ride/Scripts/DeviceServiceMonoBase.cs | 93 ++++++++++++------- Assets/Scenes/Ride/Scripts/Helper.cs | 22 +++++ .../Ride/Scripts/Model/RecorderDataModel.cs | 2 +- .../Scenes/Ride/Scripts/PlayerController.cs | 5 +- Assets/Scripts/Devices/Ble/Devices/Tacx.cs | 3 +- .../Scripts/Devices/Ble/Win/ServiceUuids.cs | 21 ++++- 7 files changed, 111 insertions(+), 43 deletions(-) diff --git a/Assets/Scenes/Ride/Scripts/CyclingController.cs b/Assets/Scenes/Ride/Scripts/CyclingController.cs index 236d9d46..0e3b6d64 100644 --- a/Assets/Scenes/Ride/Scripts/CyclingController.cs +++ b/Assets/Scenes/Ride/Scripts/CyclingController.cs @@ -600,7 +600,9 @@ public class CyclingController : DeviceServiceMonoBase var list = mapData.List.Select(c => (float)c.Elevation).ToArray(); return list; } -#endregion - - + #endregion + private void OnApplicationQuit() + { + App.MainDeviceAdapter.Dispose(); + } } diff --git a/Assets/Scenes/Ride/Scripts/DeviceServiceMonoBase.cs b/Assets/Scenes/Ride/Scripts/DeviceServiceMonoBase.cs index 55352561..47d205b8 100644 --- a/Assets/Scenes/Ride/Scripts/DeviceServiceMonoBase.cs +++ b/Assets/Scenes/Ride/Scripts/DeviceServiceMonoBase.cs @@ -1,5 +1,8 @@ -using Assets.Scripts.Devices.Ant; +using Assets.Scripts.Ble; +using Assets.Scripts.Devices; +using Assets.Scripts.Devices.Ant; using Assets.Scripts.Devices.Ant.Interfaces; +using Assets.Scripts.Devices.Ble; using System; using System.Collections.Generic; using System.Linq; @@ -11,7 +14,7 @@ namespace Assets.Scenes.Ride.Scripts { public void TrackResistance(double grade) { - var device = (CurrentTrainer as FitDevice); + var device = (CurrentTrainer as ITrainerDevice); if (device != null) { device.SetTrackResistance(grade); @@ -19,10 +22,10 @@ namespace Assets.Scenes.Ride.Scripts } #region 获取设备数据 - public AbstractAntDevice CurrentTrainer + public AbstractDevice CurrentTrainer { get { - var devices = AntConnector.Instance().discoveredDevices.Where(d => d.State == DeviceState.Connected && (d.Sensor == SensorType.Trainer)); + var devices = App.MainDeviceAdapter.GetDevices().Where(d => d.State == DeviceState.Connected && (d.Sensor == SensorType.Trainer)); _device = null;//重置设备状态 if (devices.Count() > 0) { @@ -32,9 +35,18 @@ namespace Assets.Scenes.Ride.Scripts { (_device as IRequiresRiderWeight).RiderWeight = App.CurrentUser.Weight; } - ManufacturerId = _device.ManufacturerId; - DeviceNumber = $"{ _device.DeviceNumber },{ _device.DeviceType }"; - AntModelId = _device.AntModelId; + if (_device.Network == NetworkType.ANT) + { + var antDevice = _device as AbstractAntDevice; + ManufacturerId = antDevice.ManufacturerId; + AntModelId = antDevice.AntModelId; + DeviceNumber = $"{ antDevice.DeviceNumber },{ antDevice.DeviceType}"; + } + else + { + var bleDevice = _device as BleDevice; + DeviceNumber = $"{ Helper.FormateMacAddress(bleDevice.Address) },{ ServiceUuids.GetBySensor(bleDevice.Sensor) }"; + } } return _device; @@ -69,7 +81,8 @@ namespace Assets.Scenes.Ride.Scripts /// public double UpdatePower() { - return PowerDevice == null ? 0 : PowerDevice.Power; + var t = PowerDevice == null ? 0 : PowerDevice.Power; + return t; } /// /// 更新踏频 @@ -94,10 +107,10 @@ namespace Assets.Scenes.Ride.Scripts #region field - protected AbstractAntDevice _device; + protected AbstractDevice _device; protected AntConnector _antConnector; - public int ManufacturerId { get; private set; } + public int? ManufacturerId { get; private set; } public string DeviceNumber { get; private set; } public int? AntModelId { get; private set; } @@ -111,8 +124,8 @@ namespace Assets.Scenes.Ride.Scripts #endregion public bool CheckAnt() { - _antConnector = AntConnector.Instance(); - var devices = _antConnector.discoveredDevices.Where(d => d.State == DeviceState.Connected && (d.Sensor == SensorType.Trainer || d.Sensor == SensorType.Power)); + //_antConnector = AntConnector.Instance(); + var devices = App.MainDeviceAdapter.GetDevices().Where(d => d.State == DeviceState.Connected && (d.Sensor == SensorType.Trainer || d.Sensor == SensorType.Power)); if (devices.Count() > 0) { _device = devices.OrderByDescending(d => d.Sensor == SensorType.Trainer).First(); @@ -120,9 +133,19 @@ namespace Assets.Scenes.Ride.Scripts { (_device as IRequiresRiderWeight).RiderWeight = App.CurrentUser.Weight; } - ManufacturerId = _device.ManufacturerId; - DeviceNumber = $"{ _device.DeviceNumber },{ _device.DeviceType }"; - AntModelId = _device.AntModelId; + if (_device.Network == NetworkType.ANT) + { + var antDevice = _device as AbstractAntDevice; + ManufacturerId = antDevice.ManufacturerId; + AntModelId = antDevice.AntModelId; + DeviceNumber = $"{ antDevice.DeviceNumber },{ antDevice.DeviceType}"; + } + else + { + var bleDevice =_device as BleDevice; + DeviceNumber = $"{ bleDevice.Address },{ bleDevice.Sensor }"; + } + } else { @@ -146,11 +169,11 @@ namespace Assets.Scenes.Ride.Scripts get { //速度和踏频一体的传感器,里面的速度是不可以读的,只允许读 踏频,切记 - if (_antConnector == null) - { - return null; - } - var device = _antConnector.discoveredDevices.Where(d => d.State == DeviceState.Connected && d is ISpeedDevice).FirstOrDefault(); + //if (_antConnector == null) + //{ + // return null; + //} + var device = App.MainDeviceAdapter.GetDevices().Where(d => d.State == DeviceState.Connected && d is ISpeedDevice).FirstOrDefault(); if (device != null) { return (ISpeedDevice)device; @@ -165,11 +188,11 @@ namespace Assets.Scenes.Ride.Scripts { get { - if (_antConnector == null) - { - return null; - } - var device = _antConnector.discoveredDevices.Where(d => d.State == DeviceState.Connected && d is IHeartRateDevice).FirstOrDefault(); + //if (_antConnector == null) + //{ + // return null; + //} + var device = App.MainDeviceAdapter.GetDevices().Where(d => d.State == DeviceState.Connected && d is IHeartRateDevice).FirstOrDefault(); if (device != null) { return (IHeartRateDevice)device; @@ -184,11 +207,11 @@ namespace Assets.Scenes.Ride.Scripts { get { - if (_antConnector == null) - { - return null; - } - var powerDevices = _antConnector.discoveredDevices.Where(d => d.State == DeviceState.Connected && d is IPowerDevice).ToList(); + //if (_antConnector == null) + //{ + // return null; + //} + var powerDevices = App.MainDeviceAdapter.GetDevices().Where(d => d.State == DeviceState.Connected && d is IPowerDevice).ToList(); var power = powerDevices.FirstOrDefault(d => d.Sensor == SensorType.Power); if (power != null) { @@ -210,11 +233,11 @@ namespace Assets.Scenes.Ride.Scripts { get { - if (_antConnector == null) - { - return null; - } - var cadences = _antConnector.discoveredDevices.Where(d => d.State == DeviceState.Connected && d is ICadenceDevice).ToList(); + //if (_antConnector == null) + //{ + // return null; + //} + var cadences = App.MainDeviceAdapter.GetDevices().Where(d => d.State == DeviceState.Connected && d is ICadenceDevice).ToList(); var cadence = cadences.FirstOrDefault(d => d.Sensor == SensorType.Cadence); if (cadence != null) { diff --git a/Assets/Scenes/Ride/Scripts/Helper.cs b/Assets/Scenes/Ride/Scripts/Helper.cs index d0ab3a84..5fa57849 100644 --- a/Assets/Scenes/Ride/Scripts/Helper.cs +++ b/Assets/Scenes/Ride/Scripts/Helper.cs @@ -108,6 +108,28 @@ namespace Assets.Scenes.Ride.Scripts S = s.ToString(); return $"{H}:{M}:{S}"; } + public static string FormateMacAddress(string v) + { + try + { + var s = Convert.ToInt64(v).ToString("x8").ToUpperInvariant(); + var array = s.ToCharArray(); + StringBuilder newLsit = new StringBuilder(); + for (int i = array.Length - 1; i >= 0; i--) + { + newLsit.Append(array[i]); + if (i % 2 == 0 && i > 0) + { + newLsit.Append(":"); + } + } + return newLsit.ToString(); + } + catch (Exception) + { + return v; + } + } /// /// 计算速度 /// 参考 http://bikecalculator.com/index.html diff --git a/Assets/Scenes/Ride/Scripts/Model/RecorderDataModel.cs b/Assets/Scenes/Ride/Scripts/Model/RecorderDataModel.cs index ca6e4125..1731e506 100644 --- a/Assets/Scenes/Ride/Scripts/Model/RecorderDataModel.cs +++ b/Assets/Scenes/Ride/Scripts/Model/RecorderDataModel.cs @@ -62,7 +62,7 @@ namespace Assets.Scenes.Ride.Scripts.Model /// /// 厂商Id /// - public int ManufacturerId { get; set; } + public int? ManufacturerId { get; set; } public int? AntModelId { get; set; } /// diff --git a/Assets/Scenes/Ride/Scripts/PlayerController.cs b/Assets/Scenes/Ride/Scripts/PlayerController.cs index 6c773ca0..08f0424f 100644 --- a/Assets/Scenes/Ride/Scripts/PlayerController.cs +++ b/Assets/Scenes/Ride/Scripts/PlayerController.cs @@ -56,12 +56,13 @@ namespace Assets.Scenes.Ride.Scripts bicycleWeight = App.CurrentUser.BicycleWeight; //#if UNITY_EDITOR System.Random rd = new System.Random(); - power = 1000; //rd.Next(150, 300);//测试功率 + //power = 1000; //rd.Next(150, 300);//测试功率 //#endif mainController.TrackResistance(currentSlope * App.rideSetting.sensitivity / 100); } - catch (Exception) + catch (Exception ex) { + Debug.Log(ex.Message); heartRate = 0; power = 0; cadance = 0; diff --git a/Assets/Scripts/Devices/Ble/Devices/Tacx.cs b/Assets/Scripts/Devices/Ble/Devices/Tacx.cs index e995f866..ebb156a6 100644 --- a/Assets/Scripts/Devices/Ble/Devices/Tacx.cs +++ b/Assets/Scripts/Devices/Ble/Devices/Tacx.cs @@ -11,11 +11,12 @@ using UnityEngine; namespace Assets.Scripts.Devices.Ble.Devices { - public class Tacx : BleDevice, IPowerDevice, ICadenceDevice, ISpeedDevice, ITrainerDevice + public class Tacx : BleDevice, IPowerDevice, ICadenceDevice, ISpeedDevice, ITrainerDevice, IRequiresRiderWeight { public int Power { get => tacxFecNotify.Power; set => throw new NotImplementedException(); } public int Cadence { get => tacxFecNotify.Cadence; set => throw new NotImplementedException(); } public double Speed { get => tacxFecNotify.Speed; set => throw new NotImplementedException(); } + public double RiderWeight { get; set; } private List Services; diff --git a/Assets/Scripts/Devices/Ble/Win/ServiceUuids.cs b/Assets/Scripts/Devices/Ble/Win/ServiceUuids.cs index ac77290a..03942c89 100644 --- a/Assets/Scripts/Devices/Ble/Win/ServiceUuids.cs +++ b/Assets/Scripts/Devices/Ble/Win/ServiceUuids.cs @@ -1,4 +1,5 @@ -using System; +using Assets.Scripts.Devices.Ant; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -171,6 +172,24 @@ namespace Assets.Scripts.Ble return ServiceUuids.Services.Single(s => s.IdByteArray == type); } + public static Guid GetBySensor(SensorType sensor) + { + switch (sensor) + { + case SensorType.Cadence: + case SensorType.SpeedCadence: + return Get(ServiceUuids.CyclingSpeedCadence).IdGuid; + case SensorType.HeartRate: + return Get(ServiceUuids.HeartRate).IdGuid; + case SensorType.Power: + return Get(ServiceUuids.PowerBeam).IdGuid; + case SensorType.Trainer: + return Get(ServiceUuids.TacxBle).IdGuid; + default: + return Guid.Empty; + } + } + public static class Characteristics {