C2课程同步问题
This commit is contained in:
1 parent
84b3e1e7a4
commit
701ec3069b
8 files changed
+202
-36
No files matched your search
@@ -1,4 +1,5 @@
|
||||
using Assets.Scripts.Ble;
|
||||
using Assets.Scripts.Ble.Commands;
|
||||
using Assets.Scripts.Devices.Ant.Interfaces;
|
||||
using Assets.Scripts.Devices.Ble.Characteristic;
|
||||
using Assets.Scripts.Devices.Ble.Interfaces;
|
||||
@@ -21,7 +22,7 @@ namespace Assets.Scripts.Devices.Ble.Devices
|
||||
public C2RowerData c2RowerData { get => _c2RowerData; }
|
||||
private List<BleServiceInfo> Services;
|
||||
private BleCharacteristicInfo controlPointCharacteristic;
|
||||
private BleCharacteristicInfo c2Control;
|
||||
private BleCharacteristicInfo c2Control { get; set; }
|
||||
|
||||
public FtmsRower(BlePeripheralInfo peripheralInfo, IBleWinHwInterface bleWinHwInterface) : base(peripheralInfo, bleWinHwInterface, Ant.SensorType.Rower)
|
||||
{
|
||||
@@ -103,7 +104,7 @@ namespace Assets.Scripts.Devices.Ble.Devices
|
||||
}
|
||||
else if (character.MatchGuid(ServiceUuids.Characteristics.C2RowerControl))
|
||||
{
|
||||
Debug.Log("c2划船机控制台");
|
||||
Debug.Log($"c2划船机控制台{character.Id}");
|
||||
this.c2Control = character;
|
||||
}
|
||||
}
|
||||
@@ -173,6 +174,26 @@ namespace Assets.Scripts.Devices.Ble.Devices
|
||||
}
|
||||
}
|
||||
|
||||
public void SendCommand(RowerCommand command,int data = 0)
|
||||
{
|
||||
if (!C2RowerData.IsEnabled)
|
||||
return;
|
||||
switch (command)
|
||||
{
|
||||
case RowerCommand.JustRow:
|
||||
SetJustRow();
|
||||
break;
|
||||
case RowerCommand.FixedDistance:
|
||||
SetFixedDistance(data);
|
||||
break;
|
||||
case RowerCommand.FixedTime:
|
||||
SetFixedTime(data);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public void Reset()
|
||||
{
|
||||
if (C2RowerData.IsEnabled == true)
|
||||
@@ -196,18 +217,97 @@ namespace Assets.Scripts.Devices.Ble.Devices
|
||||
}
|
||||
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="workoutType">训练类型:0,1,2(里程不分段),3(里程分段),4(时间不分段),5,6,7,8~13</param>
|
||||
public void SetWorkoutType(int workoutType)
|
||||
{
|
||||
var typeHex = workoutType.ToString("X2");
|
||||
var checkSum = "00";
|
||||
var data = BitConvertHelper.HexToByteArray($"F1 76 03 01 01 {typeHex} {checkSum} F2");//"F1 76 03 01 01 03 76 F2"//03?
|
||||
checkSum = GetChecksumHexString(data);
|
||||
data = BitConvertHelper.HexToByteArray($"F1 76 03 01 01 {typeHex} {checkSum} F2");
|
||||
hwInterface.WriteCharacteristic(this.c2Control, data);
|
||||
}
|
||||
public void SetConfigureWorkout()
|
||||
{
|
||||
var data = BitConvertHelper.HexToByteArray("F1 76 03 14 01 01 61 F2"); //03?
|
||||
hwInterface.WriteCharacteristic(this.c2Control, data);
|
||||
}
|
||||
public void SetScreenState()
|
||||
{
|
||||
var data = BitConvertHelper.HexToByteArray("F1 76 04 13 02 01 01 63 F2"); //04?
|
||||
hwInterface.WriteCharacteristic(this.c2Control, data);
|
||||
}
|
||||
public void SetPoll()
|
||||
{
|
||||
var data = BitConvertHelper.HexToByteArray($"F1 76 07 8D 93 A3 A0 A8 B3 B6 C1 F2");
|
||||
hwInterface.WriteCharacteristic(this.c2Control, data);
|
||||
}
|
||||
public void SetJustRow()
|
||||
{
|
||||
var data = BitConvertHelper.HexToByteArray("F1 76 07 01 01 01 13 02 01 01 61 F2");
|
||||
Debug.Log($"SetJustRow:{string.Join(",", data)}");
|
||||
hwInterface.WriteCharacteristic(this.c2Control, data);
|
||||
SetScreenState();
|
||||
}
|
||||
public void SetFixedDistance(int distance)
|
||||
{
|
||||
if (distance < 100)
|
||||
return;
|
||||
|
||||
SetWorkoutType(3);
|
||||
var hexditance = distance.ToString("X4");
|
||||
var checkSum = "00";
|
||||
var data = BitConvertHelper.HexToByteArray($"F1 76 07 03 05 80 00 00 {hexditance} {checkSum} F2");//F1 76 07 03 05 80 00 00 {hexditance} {checkSum} F2
|
||||
checkSum = GetChecksumHexString(data);
|
||||
data = BitConvertHelper.HexToByteArray($"F1 76 07 03 05 80 00 00 {hexditance} {checkSum} F2");//07?
|
||||
hwInterface.WriteCharacteristic(this.c2Control, data);
|
||||
|
||||
SetConfigureWorkout();
|
||||
SetScreenState();
|
||||
|
||||
}
|
||||
private string GetChecksumHexString(byte[] data)
|
||||
{
|
||||
var res = data[1];
|
||||
for (int i = 2; i < data.Length-2; i++)
|
||||
{
|
||||
res ^= data[i];
|
||||
}
|
||||
return res.ToString("X2");
|
||||
}
|
||||
public void SetFixedTime(int mins)
|
||||
{
|
||||
SetWorkoutType(5);
|
||||
|
||||
var timeHex = (mins * 100).ToString("X6");
|
||||
var checkNum = "00";
|
||||
var data = BitConvertHelper.HexToByteArray($"F1 76 07 03 05 00 00 {timeHex} {checkNum} F2");
|
||||
checkNum = GetChecksumHexString(data);
|
||||
data = BitConvertHelper.HexToByteArray($"F1 76 07 03 05 00 00 {timeHex} {checkNum} F2");
|
||||
hwInterface.WriteCharacteristic(this.c2Control, data);
|
||||
|
||||
SetConfigureWorkout();
|
||||
SetScreenState();
|
||||
}
|
||||
|
||||
public void SetResistanceLevel(ushort v)
|
||||
{
|
||||
if (C2RowerData.IsEnabled == true)
|
||||
{
|
||||
//等对csafe协议研究透彻后写
|
||||
////等对csafe协议研究透彻后写
|
||||
//if (this.c2Control != null)
|
||||
//{
|
||||
// var data = new byte[] { 0x29 }.Concat(BitConverter.GetBytes(v)).ToArray();
|
||||
// byte checksum = (byte)((byte)(data[0] ^ data[1]) ^ data[2]);
|
||||
// var r = new byte[] { 0xF1 }.Concat(data).Concat(new byte[] { checksum, 0xf2 }) .ToArray();
|
||||
// Debug.Log($"设置阻力{v}, {string.Join(",", r)}");
|
||||
// hwInterface.WriteCharacteristic(this.c2Control, r);
|
||||
//02312131 = > 03010103
|
||||
//var data = new byte[] { 0x76 }.Concat(BitConverter.GetBytes(v)).ToArray();
|
||||
//byte checksum = (byte)((byte)(data[0] ^ data[1]) ^ data[2]);
|
||||
//var r = new byte[] { 0xF1 }.Concat(data).Concat(new byte[] { checksum, 0xf2 }).ToArray();
|
||||
//Debug.Log($"设置阻力{v}, {string.Join(",", r)}");
|
||||
//
|
||||
// var data = BitConvertHelper.HexToByteArray("F1 76 07 01 01 01 13 02 01 01 61 F2");
|
||||
// hwInterface.WriteCharacteristic(this.c2Control, data);
|
||||
//}
|
||||
}
|
||||
else
|
||||
|
||||
Reference in new issue
Block a user