接入蓝牙基本结构

This commit is contained in:
suntao committed 2021-06-04 13:22:59 +08:00
1 parent 84e8b50bbf
commit 2f84f70a5f
152 files changed
+6426 -56

No files matched your search

@@ -0,0 +1,29 @@
using Assets.Scripts.Ble.Commands;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Assets.Scripts.Ble.Characteristic
{
public abstract class BaseCharacteristicValue
{
protected BaseCharacteristicValue(Guid id, byte[] data)
{
this.RawData = data;
this.Id = id;
}
// Token: 0x17000665 RID: 1637
// (get) Token: 0x060022A2 RID: 8866 RVA: 0x0008F366 File Offset: 0x0008D566
public Guid Id { get; }
// Token: 0x17000666 RID: 1638
// (get) Token: 0x060022A3 RID: 8867 RVA: 0x0008F36E File Offset: 0x0008D56E
public byte[] RawData { get; }
// Token: 0x060022A4 RID: 8868
public abstract CommandResponseCode ToDeviceCommandResponseCode();
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: b2b671ee375ec854c8074b434d7ef555
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Assets.Scripts.Ble.Characteristic
{
public static class BleMathHelper
{
// Token: 0x06000028 RID: 40 RVA: 0x00002740 File Offset: 0x00000940
public static double WheelFrequency(WheelRevolution? lastWheelRevolution, WheelRevolution? newWheelRevolution, uint timeResolution)
{
return WheelRevolution.ComputeValue(lastWheelRevolution, newWheelRevolution, delegate (WheelRevolution lastValue, WheelRevolution newValue)
{
WheelRevolution wheelRevolution = newValue - lastValue;
return wheelRevolution.Count / ((double)wheelRevolution.Time / timeResolution);
});
}
// Token: 0x06000029 RID: 41 RVA: 0x0000276D File Offset: 0x0000096D
public static double CrankFrequency(CrankRevolution? lastCrankRevolutions, CrankRevolution? newCrankRevolutions)
{
return CrankRevolution.ComputeValue(lastCrankRevolutions, newCrankRevolutions, delegate (CrankRevolution lastValue, CrankRevolution newValue)
{
CrankRevolution crankRevolution = newValue - lastValue;
return (double)crankRevolution.Count / ((double)crankRevolution.Time / 1024.0);
});
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 94d000bcb9e71fe4cbc87260ce666252
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,57 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Assets.Scripts.Ble.Characteristic
{
public struct CrankRevolution
{
// Token: 0x060022A5 RID: 8869 RVA: 0x0008F378 File Offset: 0x0008D578
public static CrankRevolution operator -(CrankRevolution obj1, CrankRevolution obj2)
{
return new CrankRevolution
{
Count = (ushort)(obj1.Count - obj2.Count),
Time = (ushort)(obj1.Time - obj2.Time)
};
}
// Token: 0x060022A6 RID: 8870 RVA: 0x0008F3B8 File Offset: 0x0008D5B8
public static double ComputeValue(CrankRevolution? lastValue, CrankRevolution? newValue, Func<CrankRevolution, CrankRevolution, double> validValueComputation)
{
if (newValue == null || lastValue == null || validValueComputation == null)
{
return double.NaN;
}
if (newValue.Value.Time != lastValue.Value.Time)
{
return validValueComputation(lastValue.Value, newValue.Value);
}
if (newValue.Value.Count == lastValue.Value.Count)
{
return double.NaN;
}
throw new ArgumentException("CrankRevolution Count changed but Time remain same -> strange behaviour");
}
// Token: 0x060022A7 RID: 8871 RVA: 0x0008F441 File Offset: 0x0008D641
public override string ToString()
{
return string.Format("Time: {0}, Count: {1}", this.Time, this.Count);
}
// Token: 0x04001543 RID: 5443
public const ushort MaxCount = 65535;
// Token: 0x04001544 RID: 5444
public const ushort MaxTime = 65535;
// Token: 0x04001545 RID: 5445
public ushort Count;
// Token: 0x04001546 RID: 5446
public ushort Time;
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 1dea0a9f55f16ac45bfd5aa6a6eda4f4
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,76 @@
using Assets.Scripts.Ble;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
namespace Assets.Scripts.Devices.Ble.Characteristic
{
public class HeartRateMeasurement
{
public Guid Uuid
{
get
{
return ServiceUuids.Characteristics.HrMeasurement;
}
}
public Guid ServiceUuid
{
get
{
return ServiceUuids.Get(ServiceUuids.HeartRate).IdGuid;
}
}
private HrmFormat Format { get; set; }
// Token: 0x170005EB RID: 1515
// (get) Token: 0x0600214D RID: 8525 RVA: 0x0008999B File Offset: 0x00087B9B
public int BeatsPerMinute { get; private set; }
public void HandleAttributeReceived(byte[] data)
{
HrmFlags hrmFlags = (HrmFlags)BitConvertHelper.ToUInt8(data, 0);
this.Format = (HrmFormat)(hrmFlags.HasFlag(HrmFlags.Format) ? 1 : 0);
if (this.Format == HrmFormat.Short)
{
this.BeatsPerMinute = BitConvertHelper.ToUInt8(data, 1);
Debug.Log("心率:" + this.BeatsPerMinute);
return;
}
if (data.Length < 3)
{
throw new ArgumentException("数据出错");
}
this.BeatsPerMinute = BitConvertHelper.ToUInt16(data, 1);
}
[Flags]
private enum HrmFlags
{
// Token: 0x040029D0 RID: 10704
Format = 1,
// Token: 0x040029D1 RID: 10705
SensorContactStatus1 = 2,
// Token: 0x040029D2 RID: 10706
SensorContactStatus2 = 4,
// Token: 0x040029D3 RID: 10707
Energy = 8,
// Token: 0x040029D4 RID: 10708
RR = 16
}
// Token: 0x02000921 RID: 2337
private enum HrmFormat
{
// Token: 0x040029D6 RID: 10710
Short,
// Token: 0x040029D7 RID: 10711
Long
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: c3d7a13de9df31a478b0a0c9dbcb1ac4
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,22 @@
using Assets.Scripts.Ble.Commands;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Assets.Scripts.Ble.Characteristic
{
public abstract class SuccessOnlyCharacteristicValue : BaseCharacteristicValue
{
protected SuccessOnlyCharacteristicValue(Guid id, byte[] data) : base(id, data)
{
}
// Token: 0x060022AB RID: 8875 RVA: 0x0008F4F0 File Offset: 0x0008D6F0
public override CommandResponseCode ToDeviceCommandResponseCode()
{
return CommandResponseCode.Success;
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: afeabe604a3dc29409ecbf61f6939275
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,57 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Assets.Scripts.Ble.Characteristic
{
public struct WheelRevolution
{
// Token: 0x060022AE RID: 8878 RVA: 0x0008F510 File Offset: 0x0008D710
public static WheelRevolution operator -(WheelRevolution obj1, WheelRevolution obj2)
{
return new WheelRevolution
{
Count = obj1.Count - obj2.Count,
Time = (ushort)(obj1.Time - obj2.Time)
};
}
// Token: 0x060022AF RID: 8879 RVA: 0x0008F550 File Offset: 0x0008D750
public static double ComputeValue(WheelRevolution? lastValue, WheelRevolution? newValue, Func<WheelRevolution, WheelRevolution, double> validValueComputation)
{
if (newValue == null || lastValue == null)
{
return double.NaN;
}
if (newValue.Value.Time != lastValue.Value.Time)
{
return validValueComputation(lastValue.Value, newValue.Value);
}
if (newValue.Value.Count == lastValue.Value.Count)
{
return double.NaN;
}
throw new ArgumentException("WheelRevolution Count changed but Time remain same -> strange behaviour");
}
// Token: 0x060022B0 RID: 8880 RVA: 0x0008F5D6 File Offset: 0x0008D7D6
public override string ToString()
{
return string.Format("Time: {0}, Count: {1}", this.Time, this.Count);
}
// Token: 0x04001548 RID: 5448
public const uint MaxCount = 4294967295U;
// Token: 0x04001549 RID: 5449
public const ushort MaxTime = 65535;
// Token: 0x0400154A RID: 5450
public uint Count;
// Token: 0x0400154B RID: 5451
public ushort Time;
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: ee3e38fcbff71ea4f90a92eb251bcad4
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: