208 lines
7.7 KiB
C#
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);
|
|
|
|
}
|
|
}
|