Merge remote-tracking branch 'origin/fit_speed_device' into dev_mobile_ble

# Conflicts:
#	Assets/Scripts/Devices/Ble/Devices/SpeedCadence.cs
This commit is contained in:
lishuo 2021-09-17 09:42:27 +08:00
commit a67602b00b
7 changed files with 82 additions and 10 deletions

View File

@ -4,6 +4,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using ANT_Managed_Library; using ANT_Managed_Library;
using UnityEngine;
namespace Assets.Scripts.Devices.Ant namespace Assets.Scripts.Devices.Ant
{ {
@ -86,6 +87,7 @@ namespace Assets.Scripts.Devices.Ant
deviceList.Add(new CadenceDevice("")); deviceList.Add(new CadenceDevice(""));
deviceList.Add(new HeartRateDevice("")); deviceList.Add(new HeartRateDevice(""));
deviceList.Add(new BikeSpdCadDevice("")); deviceList.Add(new BikeSpdCadDevice(""));
deviceList.Add(new SpeedDevice(""));
var timer = new System.Timers.Timer(1000); var timer = new System.Timers.Timer(1000);
timer.AutoReset = true; timer.AutoReset = true;
@ -343,6 +345,7 @@ namespace Assets.Scripts.Devices.Ant
case SensorType.None: case SensorType.None:
break; break;
case SensorType.Cadence: case SensorType.Cadence:
Debug.LogError("发现踏频设备"+id);
device = new CadenceDevice(id); device = new CadenceDevice(id);
break; break;
case SensorType.HeartRate: case SensorType.HeartRate:
@ -352,6 +355,7 @@ namespace Assets.Scripts.Devices.Ant
device = new PowerDevice(id); device = new PowerDevice(id);
break; break;
case SensorType.Speed: case SensorType.Speed:
device = new SpeedDevice(id);
break; break;
case SensorType.SpeedCadence: case SensorType.SpeedCadence:
device = new BikeSpdCadDevice(id); device = new BikeSpdCadDevice(id);

View File

@ -29,7 +29,7 @@ namespace Assets.Scripts.Devices.Ant
private RotationData _rotationData = new RotationData(); private RotationData _rotationData = new RotationData();
public CadenceDevice(string id) public CadenceDevice(string id)
: base(id, "Ant+ Cadence", racerSportType.Biking, SensorType.Cadence) : base(id, "Ant+ Cadence", racerSportType.Unknown, SensorType.Cadence)
{ {
Priority = 2; Priority = 2;
//if (speedSensor.isInUse) //if (speedSensor.isInUse)

View File

@ -0,0 +1,59 @@
using ANT_Managed_Library;
using Assets.Scripts.Devices.Ant.Interfaces;
using Assets.Scripts.Devices.Ant.LegacyPages;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Assets.Scripts.Devices.Ant
{
public class SpeedDevice : AbstractAntDevice, ISpeedDevice
{
public double Speed { get; set; }
private DateTime now = DateTime.Now;
public const double DEFAULT_WHEEL_CIRCUMFERENCE_m = 2096; //Average 700cx23mm road tire
public readonly double wheelCircumfrence_m;
private RotationData _rotationData = new RotationData();
public SpeedDevice(string id, double wheelCircumfrence_m = DEFAULT_WHEEL_CIRCUMFERENCE_m)
: base(id, "Ant+ Speed", racerSportType.Unknown, SensorType.Speed)
{
Priority = 2;
this.wheelCircumfrence_m = wheelCircumfrence_m;
}
public override void handleChannelResponse(ANT_Response response)
{
//throw new NotImplementedException();
var page = response.messageContents.Skip(1).ToArray();
int? value = _rotationData.CalculateRpm(now, page[4] | page[5] << 8, page[6] | page[7] << 8);
if (value.HasValue)
{
Speed = DoubleExtensions.CalculateSpeed(value.Value, wheelCircumfrence_m);
}
else
{
Speed = 0;
}
Console.WriteLine(Math.Round(Speed, 1));
}
protected override AntChannelProfile getDefaultSearchProfile()
{
//throw new NotImplementedException();
return new AntChannelProfile()
{
rfOffset = 57,
transType = 0,
deviceType = 123,
deviceNumber = 0,
messagePeriod = 8118,
pairingEnabled = false
};
}
}
}

View File

@ -128,7 +128,7 @@ namespace Assets.Scripts.Devices.Ble.Win
} }
} }
public override bool Stop() public void StopGattThreads()
{ {
Debug.Log("停止thread"); Debug.Log("停止thread");
foreach (var item in this.gattClients.Values) foreach (var item in this.gattClients.Values)
@ -136,9 +136,8 @@ namespace Assets.Scripts.Devices.Ble.Win
item.Stop(); item.Stop();
} }
wclBleManager.Dispose(); //wclBleManager.Dispose();
//return true;
return true;
} }
public string Test() public string Test()

View File

@ -157,7 +157,7 @@ namespace Assets.Scripts.Ble
// manager, // manager,
// status // status
//}, WclBleManager.log); //}, WclBleManager.log);
callback(manager, status); callback?.Invoke(manager, status);
} }
// Token: 0x04001390 RID: 5008 // Token: 0x04001390 RID: 5008

View File

@ -163,7 +163,7 @@ public class ConnectDeviceModal : PFUIPanel
{ {
case SensorType.SpeedCadence: case SensorType.SpeedCadence:
case SensorType.Cadence: case SensorType.Cadence:
devices = App.MainDeviceAdapter.GetDevices().Where(d => d.Sensor == SensorType || (d is ICadenceDevice && d.State == DeviceState.Connected)).OrderBy(d=>d.Priority).ToList(); devices = App.MainDeviceAdapter.GetDevices().Where(d => (d.Sensor == SensorType.Cadence || d.Sensor == SensorType.SpeedCadence) || (d is ICadenceDevice && d.State == DeviceState.Connected)).OrderBy(d=>d.Priority).ToList();
break; break;
case SensorType.HeartRate: case SensorType.HeartRate:
devices = App.MainDeviceAdapter.GetDevices().Where(d => d.Sensor == SensorType || (d is IHeartRateDevice && d.State == DeviceState.Connected)).OrderBy(d => d.Priority).ToList(); devices = App.MainDeviceAdapter.GetDevices().Where(d => d.Sensor == SensorType || (d is IHeartRateDevice && d.State == DeviceState.Connected)).OrderBy(d => d.Priority).ToList();

View File

@ -238,7 +238,13 @@ public class DeviceView : MonoBehaviour
noDevice.text = "NO DEVICE"; noDevice.text = "NO DEVICE";
searchState.text = "Searching..."; searchState.text = "Searching...";
var hasDevice = App.MainDeviceAdapter.GetDevices().Any(d => d.Sensor == SensorType); var hasDevice = false;
if (SensorType == SensorType.SpeedCadence) {
hasDevice = App.MainDeviceAdapter.GetDevices().Any(d => d.Sensor == SensorType.SpeedCadence || d.Sensor == SensorType.Cadence);
}
else {
hasDevice = App.MainDeviceAdapter.GetDevices().Any(d => d.Sensor == SensorType);
}
if (hasDevice) if (hasDevice)
{ {
mSearchButton.SetActive(false); mSearchButton.SetActive(false);
@ -385,6 +391,10 @@ public class DeviceView : MonoBehaviour
AbstractDevice GetCurrentDevice() AbstractDevice GetCurrentDevice()
{ {
//return AntConnector.Instance().discoveredDevices.FirstOrDefault(d => (d.State == DeviceState.Connected || d.State == DeviceState.Connecting) && d.Sensor == SensorType); //return AntConnector.Instance().discoveredDevices.FirstOrDefault(d => (d.State == DeviceState.Connected || d.State == DeviceState.Connecting) && d.Sensor == SensorType);
if(SensorType == SensorType.SpeedCadence || SensorType == SensorType.Cadence)
{
return App.MainDeviceAdapter.GetDevices().FirstOrDefault(d => (d.State == DeviceState.Connected || d.State == DeviceState.Connecting) && (d.Sensor == SensorType.SpeedCadence || d.Sensor == SensorType.Cadence));
}
return App.MainDeviceAdapter.GetDevices().FirstOrDefault(d => (d.State == DeviceState.Connected || d.State == DeviceState.Connecting) && d.Sensor == SensorType); return App.MainDeviceAdapter.GetDevices().FirstOrDefault(d => (d.State == DeviceState.Connected || d.State == DeviceState.Connecting) && d.Sensor == SensorType);
} }