2021-06-08 10:30:26 +08:00

208 lines
7.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using Assets.Scripts.Ble.CPPBridge;
using UnityEngine;
namespace Assets.Scripts.Ble
{
internal class WclBleWatcher
{
internal WclBleWatcher()
{
this.CStarted = new WCL_NOTIFY_EVENT(this.OnStart);
this.CStopped = new WCL_NOTIFY_EVENT(this.OnStop);
this.CUuidPacketReceived = new WclBleWatcher.WCL_ADV_UUID_PKT_EVENT(this.OnUuidPacketReceived);
this.CInfoPackageReceived = new WclBleWatcher.WCL_ADV_INFO_PKT_EVENT(this.OnInfoPacketReceived);
this.mPtr = WclBleWatcher.WCLWatcherCreate(this.CInfoPackageReceived, this.CStarted, this.CStopped, this.CUuidPacketReceived);
}
// Token: 0x170005E5 RID: 1509
// (get) Token: 0x06002127 RID: 8487 RVA: 0x00089426 File Offset: 0x00087626
public bool Active
{
get
{
//base.CheckDisposed();
return WclBleWatcher.WCLWatcherGetActive(this.mPtr);
}
}
// Token: 0x0600212A RID: 8490
[DllImport("WclBlePluginCPP.dll", CallingConvention = CallingConvention.StdCall)]
[return: MarshalAs(UnmanagedType.SysInt)]
private static extern IntPtr WCLWatcherCreate([MarshalAs(UnmanagedType.FunctionPtr)][In] WclBleWatcher.WCL_ADV_INFO_PKT_EVENT InfoPacketReceived, [MarshalAs(UnmanagedType.FunctionPtr)][In] WCL_NOTIFY_EVENT Started, [MarshalAs(UnmanagedType.FunctionPtr)][In] WCL_NOTIFY_EVENT Stopped, [MarshalAs(UnmanagedType.FunctionPtr)][In] WclBleWatcher.WCL_ADV_UUID_PKT_EVENT UidPacketReceived);
// Token: 0x0600212B RID: 8491
[DllImport("WclBlePluginCPP.dll", CallingConvention = CallingConvention.StdCall)]
private static extern void WCLWatcherDestroy([MarshalAs(UnmanagedType.SysInt)][In] IntPtr Watcher);
// Token: 0x0600212C RID: 8492
[DllImport("WclBlePluginCPP.dll", CallingConvention = CallingConvention.StdCall)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool WCLWatcherGetActive([MarshalAs(UnmanagedType.SysInt)][In] IntPtr Watcher);
// Token: 0x0600212D RID: 8493
[DllImport("WclBlePluginCPP.dll", CallingConvention = CallingConvention.StdCall)]
[return: MarshalAs(UnmanagedType.I4)]
private static extern int WCLWatcherStart([MarshalAs(UnmanagedType.SysInt)][In] IntPtr Watcher, [MarshalAs(UnmanagedType.SysInt)][In] IntPtr Radio);
// Token: 0x0600212E RID: 8494
[DllImport("WclBlePluginCPP.dll", CallingConvention = CallingConvention.StdCall)]
[return: MarshalAs(UnmanagedType.I4)]
private static extern int WCLWatcherStop([MarshalAs(UnmanagedType.SysInt)][In] IntPtr Watcher);
// Token: 0x0600212F RID: 8495 RVA: 0x00089464 File Offset: 0x00087664
public void StartScan(IntPtr radio)
{
if (!this.Active)
{
int num = WclBleWatcher.WCLWatcherStart(this.mPtr, radio);
//if (WclBleWatcher.Info)
{
Debug.Log(string.Format("BLE watcher started with result {0}", num));
}
}
}
// Token: 0x06002130 RID: 8496 RVA: 0x000894B4 File Offset: 0x000876B4
public bool StopScan()
{
if (this.Active)
{
int num = WclBleWatcher.WCLWatcherStop(this.mPtr);
Debug.Log(string.Format("BLE watcher stopped with result {0}", num));
return num == 0;
}
return false;
}
// Token: 0x06002131 RID: 8497 RVA: 0x00089508 File Offset: 0x00087708
public void Dispose()
{
WclBleWatcher.WCLWatcherDestroy(this.mPtr);
this.mPtr = IntPtr.Zero;
this.CInfoPackageReceived = null;
this.CUuidPacketReceived = null;
this.CStarted = null;
this.CStopped = null;
Debug.Log("BLE watcher disposed");
}
// Token: 0x06002132 RID: 8498 RVA: 0x00089564 File Offset: 0x00087764
private void OnInfoPacketReceived(IntPtr sender, long address, long timestamp, sbyte rssi, string name, WclBleAdvertisementType packetType, byte flags)
{
//Debug.Log($"address:{ address }, name:{ name }, rssi:{ rssi }, type:{ packetType }");
//delegate
//{
// WclBleWatcher.SafeInvoke(this.InfoPacketReceived, this, address, timestamp, rssi, name, packetType, flags);
//}.OnUIThreadAsync();
Loom.QueueOnMainThread(() =>
{
this.InfoPacketReceived(this, address, timestamp, rssi, name, packetType, flags);
});
}
// Token: 0x06002133 RID: 8499 RVA: 0x000895BC File Offset: 0x000877BC
private void OnUuidPacketReceived(IntPtr sender, long address, long timestamp, sbyte rssi, Guid uuid)
{
//Debug.Log($"uuid:{ uuid.ToString() }, address:{ address }, rssi:{ rssi }");
//delegate
//{
// WclBleWatcher.SafeInvoke(this.UuidPacketReceived, this, address, timestamp, rssi, uuid);
//}.OnUIThreadAsync();
Loom.QueueOnMainThread(() =>
{
this.UuidPacketReceived(this, address, timestamp, rssi, uuid);
});
}
// Token: 0x06002134 RID: 8500 RVA: 0x000895F9 File Offset: 0x000877F9
private void OnStart(IntPtr Sender)
{
Debug.Log("watcher started");
}
// Token: 0x06002135 RID: 8501 RVA: 0x0008960F File Offset: 0x0008780F
private void OnStop(IntPtr Sender)
{
Debug.Log("Watcher closed");
}
// Token: 0x06002136 RID: 8502 RVA: 0x00089628 File Offset: 0x00087828
private static void SafeInvoke(WclBleWatcher.InfoPacketReceivedEvent callback, object sender, long address, long timestamp, sbyte rssi, string name, WclBleAdvertisementType packetType, byte flags)
{
//ExceptionUtils.SafeInvoke(callback, new object[]
//{
// sender,
// address,
// timestamp,
// rssi,
// name,
// packetType,
// flags
//}, WclBleWatcher.log);
}
// Token: 0x06002137 RID: 8503 RVA: 0x0008967F File Offset: 0x0008787F
private static void SafeInvoke(WclBleWatcher.UuidPacketReceivedEvent callback, object sender, long address, long timestamp, sbyte rssi, Guid uuid)
{
//ExceptionUtils.SafeInvoke(callback, new object[]
//{
// sender,
// address,
// timestamp,
// rssi,
// uuid
//}, WclBleWatcher.log);
}
// Token: 0x04001348 RID: 4936
public WclBleWatcher.InfoPacketReceivedEvent InfoPacketReceived;
// Token: 0x04001349 RID: 4937
public WclBleWatcher.UuidPacketReceivedEvent UuidPacketReceived;
// Token: 0x0400134B RID: 4939
private WclBleWatcher.WCL_ADV_INFO_PKT_EVENT CInfoPackageReceived;
// Token: 0x0400134C RID: 4940
private WCL_NOTIFY_EVENT CStarted;
// Token: 0x0400134D RID: 4941
private WCL_NOTIFY_EVENT CStopped;
// Token: 0x0400134E RID: 4942
private WclBleWatcher.WCL_ADV_UUID_PKT_EVENT CUuidPacketReceived;
// Token: 0x0400134F RID: 4943
private IntPtr mPtr;
// Token: 0x02000919 RID: 2329
// (Invoke) Token: 0x06003FB3 RID: 16307
public delegate void InfoPacketReceivedEvent(object Sender, long Address, long Timestamp, sbyte Rssi, string Name, WclBleAdvertisementType PacketType, byte Flags);
// Token: 0x0200091A RID: 2330
// (Invoke) Token: 0x06003FB7 RID: 16311
public delegate void UuidPacketReceivedEvent(object Sender, long Address, long Timestamp, sbyte Rssi, Guid Uuid);
// Token: 0x0200091B RID: 2331
// (Invoke) Token: 0x06003FBB RID: 16315
[UnmanagedFunctionPointer(CallingConvention.StdCall, SetLastError = false)]
private delegate void WCL_ADV_INFO_PKT_EVENT([MarshalAs(UnmanagedType.SysInt)][In] IntPtr Sender, [MarshalAs(UnmanagedType.I8)][In] long Address, [MarshalAs(UnmanagedType.I8)][In] long Timestamp, [MarshalAs(UnmanagedType.I1)][In] sbyte Rssi, [MarshalAs(UnmanagedType.LPWStr)][In] string Name, [MarshalAs(UnmanagedType.U4)][In] WclBleAdvertisementType PacketType, [MarshalAs(UnmanagedType.U1)][In] byte Flags);
// Token: 0x0200091C RID: 2332
// (Invoke) Token: 0x06003FBF RID: 16319
[UnmanagedFunctionPointer(CallingConvention.StdCall, SetLastError = false)]
private delegate void WCL_ADV_UUID_PKT_EVENT([MarshalAs(UnmanagedType.SysInt)][In] IntPtr Sender, [MarshalAs(UnmanagedType.I8)][In] long Address, [MarshalAs(UnmanagedType.I8)][In] long Timestamp, [MarshalAs(UnmanagedType.I1)][In] sbyte Rssi, [In] Guid Uuid);
}
}