146 lines
4.6 KiB
C#
Raw Normal View History

2021-03-30 14:23:41 +08:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Assets.Scripts.Devices.Ant
{
2021-05-19 14:38:48 +08:00
public abstract class DataSourceBase : AbstractDevice
2021-03-30 14:23:41 +08:00
{
//double distanceTravelled = 0;
//DataSourcePacket lastPacketRcvd = null;
protected racerSportType sportType;
//const double defaultRunStrideLength = 2.5;
//const double defaultRowStrideLength = 5;
//const double defaultBikeStrideLength = 8;
//const double defaultSkiStrideLength = 4.5;
public string customSourceName;
public bool isInUse = false;
public bool isHuman;
static byte uidCount = 0;
public readonly byte uid;
public DataSourceBase(string id, racerSportType sportType, bool isHuman):base(id, NetworkType.ANT)
2021-03-30 14:23:41 +08:00
{
this.sportType = sportType;
this.isHuman = isHuman;
uid = ++uidCount;
if (uidCount == byte.MaxValue)
uidCount = byte.MaxValue - 1; //If we overflow just stay at max instead of colliding with earlier values
}
Action<DataSourcePacket> distanceUpdate;
//bool running = false;
public racerSportType getSportType()
{
return sportType;
}
//public double getCurrentDistance()
//{
// return distanceTravelled;
//}
//public void incrementDistanceAndUpdate(double distToAdd, double speedMs = 0xFFFF, double cadence = -1, byte heartRate = 0xFF, ushort powerW = 0xFFFF)
//{
// if (running)
// {
// if (cadence == -1)
// cadence = calculateCadence(speedMs);
// distanceTravelled += distToAdd;
// lastPacketRcvd = new DataSourcePacket(distanceTravelled, speedMs, cadence, heartRate, powerW);
// distanceUpdate(lastPacketRcvd);
// }
// else //Just save the last packet for monitoring purposes
// {
// if(lastPacketRcvd == null)
// lastPacketRcvd = new DataSourcePacket(distToAdd, speedMs, cadence, heartRate, powerW);
// else
// lastPacketRcvd = new DataSourcePacket(lastPacketRcvd.distance + distToAdd, speedMs, cadence, heartRate, powerW);
// }
//}
//public virtual void reset()
//{
// stop();
// distanceTravelled = 0;
// lastPacketRcvd = null;
//}
//public virtual void start(Action<DataSourcePacket> distanceUpdateHandler)
//{
// distanceUpdate = distanceUpdateHandler;
// running = true;
//}
//public virtual void stop()
//{
// running = false;
// distanceUpdate = null;
//}
//public bool isRunning()
//{
// return running;
//}
public abstract string getDefaultSourceName();
public string getSourceName()
{
if (String.IsNullOrWhiteSpace(customSourceName))
return getDefaultSourceName();
else
return customSourceName;
}
//public DataSourcePacket getLastDataRcvd()
//{
// return lastPacketRcvd;
//}
//protected double calculateCadence(double speed_Ms)
//{
// switch (sportType)
// {
// case racerSportType.Running:
// return (speed_Ms * 60) / DataSourceBase.defaultRunStrideLength; //[m/min] / [m/str] = str/min
// case racerSportType.Rowing:
// return (speed_Ms * 60) / DataSourceBase.defaultRowStrideLength;
// case racerSportType.Biking:
// return (speed_Ms * 60) / DataSourceBase.defaultBikeStrideLength;
// case racerSportType.Skiing:
// return (speed_Ms * 60) / DataSourceBase.defaultSkiStrideLength;
// default:
// return 0;
// }
//}
}
public class DataSourcePacket
{
public readonly double distance; //m
public readonly double cadence; //rpm
public readonly double speed_ms; //m/s
public readonly byte heartRate; //bpm
public readonly ushort power; //W
public DataSourcePacket(double dist, double spdMs, double cad, byte hr, ushort pwr)
{
distance = dist;
cadence = cad;
speed_ms = spdMs;
heartRate = hr;
power = pwr;
}
}
}