powerfun-unity/Assets/Scripts/Devices/Ant/Pages/PowerOnlyPageHandler.cs
2021-04-01 11:09:53 +08:00

51 lines
1.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Assets.Scripts.Devices.Ant.Pages
{
public class PowerOnlyPageHandler : IPageHandler
{
private DateTime _lastEventChange = DateTime.UtcNow;
private byte _previousEventCount;
public bool CanHandle(byte pageNumber)
{
return (int)pageNumber == 16;
}
public void Handle(byte[] dataPayload, AbstractAntDevice device)
{
var powerDevice = device as PowerDevice;
if (powerDevice == null)
{
return;
}
//var dataPayload = response.messageContents.Skip(1).ToArray();
byte currentVal = dataPayload[1];
if ((int)ByteExtensions.GetDifference(currentVal, this._previousEventCount) > 0) //ByteExtensions
this._lastEventChange = DateTime.UtcNow;
this._previousEventCount = currentVal;
powerDevice.Power = this.IsNotMovingDueToNoEventChanges() ? 0 : (ushort)((uint)dataPayload[6] | (uint)dataPayload[7] << 8);
if ((int)dataPayload[3] != (int)byte.MaxValue)
powerDevice.Cadence = (this.IsNotMovingDueToNoEventChanges() ? 0 : (int)dataPayload[3]);
else
powerDevice.Cadence = 0;
//int num1 = (int)dataPayload[2];
//int num2 = 128;
//bool flag = (uint)(num1 & num2) > 0U;
//int num3 = (int)sbyte.MaxValue;
//int num4 = num1 & num3;
//int num5 = (int)byte.MaxValue;
}
private bool IsNotMovingDueToNoEventChanges()
{
return this._lastEventChange.AddSeconds(3.0) <= DateTime.UtcNow;
}
}
}