106 lines
4.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Assets.Scripts.Ble;
using Assets.Scripts.Devices.Ant.Interfaces;
using Assets.Scripts.Devices.Ble.Characteristic;
using Assets.Scripts.Devices.Ble.Interfaces;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
namespace Assets.Scripts.Devices.Ble.Devices
{
public class SpeedCadence : BleDevice, ISpeedDevice, ICadenceDevice
{
private CyclingSpeedCadenceMeasurement _cyclingSpeedCadenceMeasurement;
public int Cadence { get => _cyclingSpeedCadenceMeasurement.Cadence; set => throw new NotImplementedException(); }
public double Speed { get => _cyclingSpeedCadenceMeasurement.Speed; set => throw new NotImplementedException(); }
private double _wheelCircumference => 2096;
private List<BleServiceInfo> Services;
public SpeedCadence(BlePeripheralInfo peripheralInfo, IBleWinHwInterface bleWinHwInterface) : base(peripheralInfo, bleWinHwInterface, Ant.SensorType.SpeedCadence)
{
Debug.Log("创建速度踏频设备");
Priority = 1;
_cyclingSpeedCadenceMeasurement = new CyclingSpeedCadenceMeasurement(this._wheelCircumference);
base.Characteristics.Add(_cyclingSpeedCadenceMeasurement);
bleWinHwInterface.CharacteristicReadEvent += CharacteristicReadMainCallback;
}
public void SetWheelCircumference(double value)
{
}
protected override void CreateServices(List<BleServiceInfo> discoveredServices)
{
this.Services = discoveredServices;
foreach (var service in this.Services)
{
//Debug.Log($"11111 "+ service.Id.ToString());
hwInterface.DiscoverCharacteristic(service, (hwInterface, service1, response) =>
{
Debug.Log($"设备{ this.Name }的char: { string.Join("\r\n", response.Data.Select(d=>d.Id)) }");
foreach (var character in response.Data)
{
if (character.MatchGuid(_cyclingSpeedCadenceMeasurement.Uuid))
{
this.hwInterface.SubscribeCharacteristic(character, (hw, cha, res) =>
{
//Debug.Log("1111111111111111111111");
});
continue;
}
}
foreach (var item in Characteristics.Where(c => c.IsOptional))
{
//Debug.Log(item.GetType() + "服务可用"+ item.Uuid.ToString() +", service:" + item.ServiceUuid);
var ccc = response.Data.FirstOrDefault(r => r.MatchGuid(item.Uuid));
if (ccc == null)
{
item.SetUnavailable();
}
else
{
Debug.Log(item.GetType() + "服务可用");
GetBatteryLevel(ccc);
}
}
});
}
}
public void GetBatteryLevel(BleCharacteristicInfo bbbb)
{
this.hwInterface.ReadCharacteristic(bbbb, (hwInterface1, characteristic1, response1) => {
Debug.Log("read收到消息" + string.Join(",", response1));
});
}
private void CharacteristicReadMainCallback(IBleWinHwInterface hwInterface, BleCharacteristicInfo characteristic, BleResponse<byte[]> response)
{
//Debug.Log("power main call" + string.Join(",", response.Data));
//Debug.Log(characteristic.MatchGuid(cyclingPowerMeasurement.Uuid));
//Debug.Log(characteristic.Service.MatchGuid(cyclingPowerMeasurement.ServiceUuid));
//if (characteristic.MatchGuid(cyclingPowerMeasurement.Uuid))
//{
// cyclingPowerMeasurement.HandleAttributeReceived(response.Data);
//}
foreach (var item in base.Characteristics)
{
if (characteristic.MatchGuid(item.Uuid))
{
item.HandleAttributeReceived(response.Data);
}
}
}
}
}