蓝牙调用调整

This commit is contained in:
lishuo 2021-06-04 19:23:32 +08:00
parent 5671b35dce
commit 17eaccb72e
7 changed files with 111 additions and 43 deletions

View File

@ -600,7 +600,9 @@ public class CyclingController : DeviceServiceMonoBase
var list = mapData.List.Select(c => (float)c.Elevation).ToArray(); var list = mapData.List.Select(c => (float)c.Elevation).ToArray();
return list; return list;
} }
#endregion #endregion
private void OnApplicationQuit()
{
App.MainDeviceAdapter.Dispose();
}
} }

View File

@ -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.Ant.Interfaces;
using Assets.Scripts.Devices.Ble;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@ -11,7 +14,7 @@ namespace Assets.Scenes.Ride.Scripts
{ {
public void TrackResistance(double grade) public void TrackResistance(double grade)
{ {
var device = (CurrentTrainer as FitDevice); var device = (CurrentTrainer as ITrainerDevice);
if (device != null) if (device != null)
{ {
device.SetTrackResistance(grade); device.SetTrackResistance(grade);
@ -19,10 +22,10 @@ namespace Assets.Scenes.Ride.Scripts
} }
#region #region
public AbstractAntDevice CurrentTrainer public AbstractDevice CurrentTrainer
{ {
get { 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;//重置设备状态 _device = null;//重置设备状态
if (devices.Count() > 0) if (devices.Count() > 0)
{ {
@ -32,9 +35,18 @@ namespace Assets.Scenes.Ride.Scripts
{ {
(_device as IRequiresRiderWeight).RiderWeight = App.CurrentUser.Weight; (_device as IRequiresRiderWeight).RiderWeight = App.CurrentUser.Weight;
} }
ManufacturerId = _device.ManufacturerId; if (_device.Network == NetworkType.ANT)
DeviceNumber = $"{ _device.DeviceNumber },{ _device.DeviceType }"; {
AntModelId = _device.AntModelId; 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; return _device;
@ -69,7 +81,8 @@ namespace Assets.Scenes.Ride.Scripts
/// </summary> /// </summary>
public double UpdatePower() public double UpdatePower()
{ {
return PowerDevice == null ? 0 : PowerDevice.Power; var t = PowerDevice == null ? 0 : PowerDevice.Power;
return t;
} }
/// <summary> /// <summary>
/// 更新踏频 /// 更新踏频
@ -94,10 +107,10 @@ namespace Assets.Scenes.Ride.Scripts
#region field #region field
protected AbstractAntDevice _device; protected AbstractDevice _device;
protected AntConnector _antConnector; protected AntConnector _antConnector;
public int ManufacturerId { get; private set; } public int? ManufacturerId { get; private set; }
public string DeviceNumber { get; private set; } public string DeviceNumber { get; private set; }
public int? AntModelId { get; private set; } public int? AntModelId { get; private set; }
@ -111,8 +124,8 @@ namespace Assets.Scenes.Ride.Scripts
#endregion #endregion
public bool CheckAnt() public bool CheckAnt()
{ {
_antConnector = AntConnector.Instance(); //_antConnector = AntConnector.Instance();
var devices = _antConnector.discoveredDevices.Where(d => d.State == DeviceState.Connected && (d.Sensor == SensorType.Trainer || d.Sensor == SensorType.Power)); var devices = App.MainDeviceAdapter.GetDevices().Where(d => d.State == DeviceState.Connected && (d.Sensor == SensorType.Trainer || d.Sensor == SensorType.Power));
if (devices.Count() > 0) if (devices.Count() > 0)
{ {
_device = devices.OrderByDescending(d => d.Sensor == SensorType.Trainer).First(); _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; (_device as IRequiresRiderWeight).RiderWeight = App.CurrentUser.Weight;
} }
ManufacturerId = _device.ManufacturerId; if (_device.Network == NetworkType.ANT)
DeviceNumber = $"{ _device.DeviceNumber },{ _device.DeviceType }"; {
AntModelId = _device.AntModelId; 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 else
{ {
@ -146,11 +169,11 @@ namespace Assets.Scenes.Ride.Scripts
get get
{ {
//速度和踏频一体的传感器,里面的速度是不可以读的,只允许读 踏频,切记 //速度和踏频一体的传感器,里面的速度是不可以读的,只允许读 踏频,切记
if (_antConnector == null) //if (_antConnector == null)
{ //{
return null; // return null;
} //}
var device = _antConnector.discoveredDevices.Where(d => d.State == DeviceState.Connected && d is ISpeedDevice).FirstOrDefault(); var device = App.MainDeviceAdapter.GetDevices().Where(d => d.State == DeviceState.Connected && d is ISpeedDevice).FirstOrDefault();
if (device != null) if (device != null)
{ {
return (ISpeedDevice)device; return (ISpeedDevice)device;
@ -165,11 +188,11 @@ namespace Assets.Scenes.Ride.Scripts
{ {
get get
{ {
if (_antConnector == null) //if (_antConnector == null)
{ //{
return null; // return null;
} //}
var device = _antConnector.discoveredDevices.Where(d => d.State == DeviceState.Connected && d is IHeartRateDevice).FirstOrDefault(); var device = App.MainDeviceAdapter.GetDevices().Where(d => d.State == DeviceState.Connected && d is IHeartRateDevice).FirstOrDefault();
if (device != null) if (device != null)
{ {
return (IHeartRateDevice)device; return (IHeartRateDevice)device;
@ -184,11 +207,11 @@ namespace Assets.Scenes.Ride.Scripts
{ {
get get
{ {
if (_antConnector == null) //if (_antConnector == null)
{ //{
return null; // return null;
} //}
var powerDevices = _antConnector.discoveredDevices.Where(d => d.State == DeviceState.Connected && d is IPowerDevice).ToList(); var powerDevices = App.MainDeviceAdapter.GetDevices().Where(d => d.State == DeviceState.Connected && d is IPowerDevice).ToList();
var power = powerDevices.FirstOrDefault(d => d.Sensor == SensorType.Power); var power = powerDevices.FirstOrDefault(d => d.Sensor == SensorType.Power);
if (power != null) if (power != null)
{ {
@ -210,11 +233,11 @@ namespace Assets.Scenes.Ride.Scripts
{ {
get get
{ {
if (_antConnector == null) //if (_antConnector == null)
{ //{
return null; // return null;
} //}
var cadences = _antConnector.discoveredDevices.Where(d => d.State == DeviceState.Connected && d is ICadenceDevice).ToList(); var cadences = App.MainDeviceAdapter.GetDevices().Where(d => d.State == DeviceState.Connected && d is ICadenceDevice).ToList();
var cadence = cadences.FirstOrDefault(d => d.Sensor == SensorType.Cadence); var cadence = cadences.FirstOrDefault(d => d.Sensor == SensorType.Cadence);
if (cadence != null) if (cadence != null)
{ {

View File

@ -108,6 +108,28 @@ namespace Assets.Scenes.Ride.Scripts
S = s.ToString(); S = s.ToString();
return $"{H}:{M}:{S}"; 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;
}
}
/// <summary> /// <summary>
/// 计算速度 /// 计算速度
/// 参考 http://bikecalculator.com/index.html /// 参考 http://bikecalculator.com/index.html

View File

@ -62,7 +62,7 @@ namespace Assets.Scenes.Ride.Scripts.Model
/// <summary> /// <summary>
/// 厂商Id /// 厂商Id
/// </summary> /// </summary>
public int ManufacturerId { get; set; } public int? ManufacturerId { get; set; }
public int? AntModelId { get; set; } public int? AntModelId { get; set; }
/// <summary> /// <summary>

View File

@ -56,12 +56,13 @@ namespace Assets.Scenes.Ride.Scripts
bicycleWeight = App.CurrentUser.BicycleWeight; bicycleWeight = App.CurrentUser.BicycleWeight;
//#if UNITY_EDITOR //#if UNITY_EDITOR
System.Random rd = new System.Random(); System.Random rd = new System.Random();
power = 1000; //rd.Next(150, 300);//测试功率 //power = 1000; //rd.Next(150, 300);//测试功率
//#endif //#endif
mainController.TrackResistance(currentSlope * App.rideSetting.sensitivity / 100); mainController.TrackResistance(currentSlope * App.rideSetting.sensitivity / 100);
} }
catch (Exception) catch (Exception ex)
{ {
Debug.Log(ex.Message);
heartRate = 0; heartRate = 0;
power = 0; power = 0;
cadance = 0; cadance = 0;

View File

@ -11,11 +11,12 @@ using UnityEngine;
namespace Assets.Scripts.Devices.Ble.Devices 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 Power { get => tacxFecNotify.Power; set => throw new NotImplementedException(); }
public int Cadence { get => tacxFecNotify.Cadence; 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 Speed { get => tacxFecNotify.Speed; set => throw new NotImplementedException(); }
public double RiderWeight { get; set; }
private List<BleServiceInfo> Services; private List<BleServiceInfo> Services;

View File

@ -1,4 +1,5 @@
using System; using Assets.Scripts.Devices.Ant;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
@ -171,6 +172,24 @@ namespace Assets.Scripts.Ble
return ServiceUuids.Services.Single(s => s.IdByteArray == type); 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 public static class Characteristics
{ {