using System;
using Wit.SDK.Modular.Sensor.Modular.Connector.Entity;
using Wit.SDK.Modular.Sensor.Modular.Connector.Interface;
using Wit.SDK.Sensor.Connector.Entity;
namespace Wit.SDK.Sensor.Connector.Role
{
///
/// unity蓝牙连接器
///
public class UnityBleConnect : IConnector
{
///
/// 连接器配置
///
public UnityBleConfig config = new UnityBleConfig();
///
/// 构造
///
///
public UnityBleConnect(UnityBleConfig config) {
this.config = config;
}
///
/// 检查配置
///
public override void CheckConfig()
{
if (config.Mac == null)
{
throw new Exception("未设置 Mac 地址");
}
if (config.ServiceGuid == null)
{
throw new Exception("未设置 ServiceGuid");
}
if (config.WriteGuid == null)
{
throw new Exception("未设置 WriteGuid");
}
if (config.NotifyGuid == null)
{
throw new Exception("未设置 NotifyGuid");
}
}
public override void Close()
{
if (ConnectStatus == ConnectStatus.Closed) {
return;
}
// disconnect
BluetoothLEHardwareInterface.UnSubscribeCharacteristic(config.Mac, config.ServiceGuid, config.NotifyGuid, (characteristic) => {
BluetoothLEHardwareInterface.DisconnectPeripheral(config.Mac, (disconnectAddress) => {
// 标志为关闭状态
ConnectStatus = ConnectStatus.Closed;
});
});
}
///
/// 获得配置
///
///
public override IConnectConfig GetConfig()
{
return config;
}
public override void Open()
{
if (ConnectStatus == ConnectStatus.Opened)
{
return;
}
CheckConfig();
BluetoothLEHardwareInterface.ConnectToPeripheral(config.Mac, (address) => {}, null, (address, service, characteristic) => {
ConnectStatus = ConnectStatus.Opened;
// 找服务
subscribe();
}, null);
}
///
/// 找服务
///
private void subscribe()
{
BluetoothLEHardwareInterface.SubscribeCharacteristic(config.Mac, config.ServiceGuid, config.NotifyGuid, null, (characteristic, bytes) => {
onReceive(bytes);
});
}
public override void SendData(byte[] data)
{
BluetoothLEHardwareInterface.WriteCharacteristic(config.Mac, config.ServiceGuid, config.WriteGuid, data, data.Length, false, (characteristic) =>{ });
}
}
}