using Assets.Scripts.Ble.Win.CPPBridge; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; using UnityEngine; namespace Assets.Scripts.Ble.Win { internal class WclBleGattClient { public WclBleGattClient(long address, IntPtr radio) { this.gattAddress = address; this.rPtr = radio; this.CConnectEvent = new WclBleGattClient.GATTCLIENT_CONNECT(this.OnConnected); this.CDisconnectEvent = new WclBleGattClient.GATTCLIENT_DISCONNECT(this.OnDisconnected); this.FCharacteristicChangedEvent = new WclBleGattClient.GATTCLIENT_ONCHANGED(this.OnCharacteristicChanged); this.mPtr = WclBleGattClient.WCLGattClientCreate(this.CConnectEvent, this.CDisconnectEvent, this.FCharacteristicChangedEvent); } // Token: 0x06002086 RID: 8326 [DllImport("WclBlePluginCPP.dll", CallingConvention = CallingConvention.StdCall)] [return: MarshalAs(UnmanagedType.I4)] private static extern int WCLGattClientConnect([MarshalAs(UnmanagedType.SysInt)][In] IntPtr Client, [MarshalAs(UnmanagedType.SysInt)][In] IntPtr Radio, [MarshalAs(UnmanagedType.I8)][In] long Address); // Token: 0x06002087 RID: 8327 [DllImport("WclBlePluginCPP.dll", CallingConvention = CallingConvention.StdCall)] [return: MarshalAs(UnmanagedType.SysInt)] private static extern IntPtr WCLGattClientCreate([MarshalAs(UnmanagedType.FunctionPtr)][In] WclBleGattClient.GATTCLIENT_CONNECT OnConnect, [MarshalAs(UnmanagedType.FunctionPtr)][In] WclBleGattClient.GATTCLIENT_DISCONNECT OnDisconnect, [MarshalAs(UnmanagedType.FunctionPtr)][In] WclBleGattClient.GATTCLIENT_ONCHANGED OnChanged); // Token: 0x06002088 RID: 8328 [DllImport("WclBlePluginCPP.dll", CallingConvention = CallingConvention.StdCall)] private static extern void WCLGattClientDestroy([MarshalAs(UnmanagedType.SysInt)][In] IntPtr Client); // Token: 0x06002089 RID: 8329 [DllImport("WclBlePluginCPP.dll", CallingConvention = CallingConvention.StdCall)] [return: MarshalAs(UnmanagedType.I4)] private static extern int WCLGattClientDisconnect([MarshalAs(UnmanagedType.SysInt)][In] IntPtr Client); // Token: 0x0600208A RID: 8330 [DllImport("WclBlePluginCPP.dll", CallingConvention = CallingConvention.StdCall)] private static extern void WCLGattClientFreeMem([MarshalAs(UnmanagedType.SysInt)][In] IntPtr pMem); // Token: 0x0600208B RID: 8331 [DllImport("WclBlePluginCPP.dll", CallingConvention = CallingConvention.StdCall)] [return: MarshalAs(UnmanagedType.I4)] private static extern int WCLGattClientGetCharacteristics([MarshalAs(UnmanagedType.SysInt)][In] IntPtr Client, [In] ref GattService Service, [In][Out] ref GattCharacteristics Chars); // Token: 0x0600208C RID: 8332 [DllImport("WclBlePluginCPP.dll", CallingConvention = CallingConvention.StdCall)] [return: MarshalAs(UnmanagedType.I4)] private static extern int WCLGattClientGetServices([MarshalAs(UnmanagedType.SysInt)][In] IntPtr Client, [In][Out] ref GattServices Services); // Token: 0x0600208D RID: 8333 [DllImport("WclBlePluginCPP.dll", CallingConvention = CallingConvention.StdCall)] [return: MarshalAs(UnmanagedType.U4)] private static extern WclBleGattClientState WCLGattClientGetState([MarshalAs(UnmanagedType.SysInt)][In] IntPtr Client); // Token: 0x0600208E RID: 8334 [DllImport("WclBlePluginCPP.dll", CallingConvention = CallingConvention.StdCall)] [return: MarshalAs(UnmanagedType.I4)] private static extern int WCLGattClientReadCharacteristicValue([MarshalAs(UnmanagedType.SysInt)][In] IntPtr Client, [In] ref GattCharacteristic Char, [MarshalAs(UnmanagedType.SysInt)][In][Out] ref IntPtr ppValue, [MarshalAs(UnmanagedType.U4)][In][Out] ref uint pSize); // Token: 0x0600208F RID: 8335 [DllImport("WclBlePluginCPP.dll", CallingConvention = CallingConvention.StdCall)] [return: MarshalAs(UnmanagedType.I4)] private static extern int WCLGattClientSubscribeCharacteristic([MarshalAs(UnmanagedType.SysInt)][In] IntPtr Client, [In] ref GattCharacteristic Char); // Token: 0x06002090 RID: 8336 [DllImport("WclBlePluginCPP.dll", CallingConvention = CallingConvention.StdCall)] [return: MarshalAs(UnmanagedType.I4)] private static extern int WCLGattClientUnsubscribeCharacteristic([MarshalAs(UnmanagedType.SysInt)][In] IntPtr Client, [In] ref GattCharacteristic Char); // Token: 0x06002091 RID: 8337 [DllImport("WclBlePluginCPP.dll", CallingConvention = CallingConvention.StdCall)] [return: MarshalAs(UnmanagedType.I4)] private static extern int WCLGattClientWriteCharacteristicValue([MarshalAs(UnmanagedType.SysInt)][In] IntPtr Client, [In] ref GattCharacteristic Char, [MarshalAs(UnmanagedType.SysInt)][In] IntPtr pValue, [MarshalAs(UnmanagedType.U4)][In] uint Size); // Token: 0x170005D4 RID: 1492 // (get) Token: 0x06002092 RID: 8338 RVA: 0x00087790 File Offset: 0x00085990 public WclBleGattClientState State { get { return WclBleGattClient.WCLGattClientGetState(this.mPtr); } } // Token: 0x06002093 RID: 8339 RVA: 0x000877A4 File Offset: 0x000859A4 public void Connect() { if (this.mPtr != IntPtr.Zero) { int num = WclBleGattClient.WCLGattClientConnect(this.mPtr, this.rPtr, this.gattAddress); if (num != 0) { this.OnConnected(this.mPtr, num); } } } // Token: 0x06002094 RID: 8340 RVA: 0x000877F4 File Offset: 0x000859F4 public void Disconnect() { if (this.mPtr != IntPtr.Zero) { //WclBleGattClient.log.Info("Disconnect called", Array.Empty()); int num = WclBleGattClient.WCLGattClientDisconnect(this.mPtr); //WclBleGattClient.log.Info(string.Format("Disconnect {0:X} response {1}", this.gattAddress, num), Array.Empty()); } } // Token: 0x06002095 RID: 8341 RVA: 0x00087864 File Offset: 0x00085A64 public int DiscoverCharacteristics(GattService service, out GattCharacteristics characteristics) { characteristics = new GattCharacteristics { Count = 0, Chars = new GattCharacteristic[255] }; return WclBleGattClient.WCLGattClientGetCharacteristics(this.mPtr, ref service, ref characteristics); } // Token: 0x06002096 RID: 8342 RVA: 0x000878B0 File Offset: 0x00085AB0 public int DiscoverServices(out GattServices services) { services = new GattServices { Count = 0, Services = new GattService[255] }; return WclBleGattClient.WCLGattClientGetServices(this.mPtr, ref services); } // Token: 0x06002097 RID: 8343 RVA: 0x000878F8 File Offset: 0x00085AF8 public int ReadCharacteristicValue(GattCharacteristic characteristic, out byte[] value) { value = null; IntPtr zero = IntPtr.Zero; uint num = 0U; int num2 = WclBleGattClient.WCLGattClientReadCharacteristicValue(this.mPtr, ref characteristic, ref zero, ref num); if (num2 == 0 && zero != IntPtr.Zero && num > 0U) { value = new byte[num]; Marshal.Copy(zero, value, 0, (int)num); WclBleGattClient.WCLGattClientFreeMem(zero); } return num2; } // Token: 0x06002098 RID: 8344 RVA: 0x00087953 File Offset: 0x00085B53 public int SubscribeCharacteristic(GattCharacteristic characteristic) { return WclBleGattClient.WCLGattClientSubscribeCharacteristic(this.mPtr, ref characteristic); } // Token: 0x06002099 RID: 8345 RVA: 0x00087968 File Offset: 0x00085B68 public int WriteCharacteristic(GattCharacteristic characteristic, byte[] value) { IntPtr intPtr; try { intPtr = Marshal.AllocHGlobal(value.Length); } catch { intPtr = IntPtr.Zero; } if (intPtr == IntPtr.Zero) { return 65537; } Marshal.Copy(value, 0, intPtr, value.Length); int result = WclBleGattClient.WCLGattClientWriteCharacteristicValue(this.mPtr, ref characteristic, intPtr, (uint)value.Length); Marshal.FreeHGlobal(intPtr); return result; } // Token: 0x0600209A RID: 8346 RVA: 0x000879D4 File Offset: 0x00085BD4 public void Dispose() { WclBleGattClient.WCLGattClientDestroy(this.mPtr); this.mPtr = IntPtr.Zero; this.rPtr = IntPtr.Zero; this.CConnectEvent = null; this.CDisconnectEvent = null; this.FCharacteristicChangedEvent = null; } // Token: 0x0600209B RID: 8347 RVA: 0x00087A0C File Offset: 0x00085C0C private void OnCharacteristicChanged(IntPtr sender, ushort handle, IntPtr pValue, uint valueLen) { //Debug.Log("char changed"); if (pValue != IntPtr.Zero && valueLen > 0U) { byte[] array = new byte[valueLen]; Marshal.Copy(pValue, array, 0, (int)valueLen); try { WclBleGattClient.GattCharacteristicChanged characteristicChanged = this.CharacteristicChanged; if (characteristicChanged != null) { characteristicChanged(this, handle, array); } } catch (Exception arg) { //WclBleGattClient.log.Error(string.Format("GattConnection characteristic changed callback processing error - {0}", arg), Array.Empty()); } } } // Token: 0x0600209C RID: 8348 RVA: 0x00087A80 File Offset: 0x00085C80 private void OnConnected(IntPtr client, int error) { try { WclBleGattClient.GattConnectionChanged connected = this.Connected; if (connected != null) { connected(this, error); } } catch (Exception arg) { //WclBleGattClient.log.Error(string.Format("GattConnection connect callback processing error - {0}", arg), Array.Empty()); Debug.LogError(arg); } } // Token: 0x0600209D RID: 8349 RVA: 0x00087AD0 File Offset: 0x00085CD0 private void OnDisconnected(IntPtr client, int reason) { try { WclBleGattClient.GattConnectionChanged disconnected = this.Disconnected; if (disconnected != null) { disconnected(this, reason); } } catch (Exception arg) { //WclBleGattClient.log.Error(string.Format("GattConnection disconnect callback processing error - {0}", arg), Array.Empty()); } } // Token: 0x0400130B RID: 4875 public WclBleGattClient.GattCharacteristicChanged CharacteristicChanged; // Token: 0x0400130C RID: 4876 public WclBleGattClient.GattConnectionChanged Connected; // Token: 0x0400130D RID: 4877 public WclBleGattClient.GattConnectionChanged Disconnected; // Token: 0x0400130F RID: 4879 private WclBleGattClient.GATTCLIENT_CONNECT CConnectEvent; // Token: 0x04001310 RID: 4880 private WclBleGattClient.GATTCLIENT_DISCONNECT CDisconnectEvent; // Token: 0x04001311 RID: 4881 private WclBleGattClient.GATTCLIENT_ONCHANGED FCharacteristicChangedEvent; // Token: 0x04001312 RID: 4882 private readonly long gattAddress; // Token: 0x04001313 RID: 4883 private IntPtr mPtr; // Token: 0x04001314 RID: 4884 private IntPtr rPtr; // Token: 0x020008FB RID: 2299 // (Invoke) Token: 0x06003F5A RID: 16218 public delegate void GattCharacteristicChanged(WclBleGattClient connection, ushort handle, byte[] value); // Token: 0x020008FC RID: 2300 // (Invoke) Token: 0x06003F5E RID: 16222 public delegate void GattConnectionChanged(WclBleGattClient connection, int error); // Token: 0x020008FD RID: 2301 // (Invoke) Token: 0x06003F62 RID: 16226 [UnmanagedFunctionPointer(CallingConvention.StdCall, SetLastError = false)] private delegate void GATTCLIENT_CONNECT([MarshalAs(UnmanagedType.SysInt)][In] IntPtr Sender, [MarshalAs(UnmanagedType.I4)][In] int Error); // Token: 0x020008FE RID: 2302 // (Invoke) Token: 0x06003F66 RID: 16230 [UnmanagedFunctionPointer(CallingConvention.StdCall, SetLastError = false)] private delegate void GATTCLIENT_DISCONNECT([MarshalAs(UnmanagedType.SysInt)][In] IntPtr Sender, [MarshalAs(UnmanagedType.I4)][In] int Reason); // Token: 0x020008FF RID: 2303 // (Invoke) Token: 0x06003F6A RID: 16234 [UnmanagedFunctionPointer(CallingConvention.StdCall, SetLastError = false)] private delegate void GATTCLIENT_ONCHANGED([MarshalAs(UnmanagedType.SysInt)][In] IntPtr Sender, [MarshalAs(UnmanagedType.U2)][In] ushort Handle, [MarshalAs(UnmanagedType.SysInt)][In] IntPtr Value, [MarshalAs(UnmanagedType.U4)][In] uint ValueLen); } }