BleApi.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. using System.Runtime.InteropServices;
  2. public class BleApi
  3. {
  4. // dll calls
  5. public enum ScanStatus { PROCESSING, AVAILABLE, FINISHED };
  6. [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
  7. public struct DeviceUpdate
  8. {
  9. [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
  10. public string id;
  11. [MarshalAs(UnmanagedType.I1)]
  12. public bool isConnectable;
  13. [MarshalAs(UnmanagedType.I1)]
  14. public bool isConnectableUpdated;
  15. [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 50)]
  16. public string name;
  17. [MarshalAs(UnmanagedType.I1)]
  18. public bool nameUpdated;
  19. }
  20. [DllImport("BleWinrtDll.dll", EntryPoint = "StartDeviceScan")]
  21. public static extern void StartDeviceScan();
  22. [DllImport("BleWinrtDll.dll", EntryPoint = "PollDevice")]
  23. public static extern ScanStatus PollDevice(ref DeviceUpdate device, bool block);
  24. [DllImport("BleWinrtDll.dll", EntryPoint = "StopDeviceScan")]
  25. public static extern void StopDeviceScan();
  26. [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
  27. public struct Service
  28. {
  29. [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
  30. public string uuid;
  31. };
  32. [DllImport("BleWinrtDll.dll", EntryPoint = "ScanServices", CharSet = CharSet.Unicode)]
  33. public static extern void ScanServices(string deviceId);
  34. [DllImport("BleWinrtDll.dll", EntryPoint = "PollService")]
  35. public static extern ScanStatus PollService(out Service service, bool block);
  36. [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
  37. public struct Characteristic
  38. {
  39. [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
  40. public string uuid;
  41. [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
  42. public string userDescription;
  43. };
  44. [DllImport("BleWinrtDll.dll", EntryPoint = "ScanCharacteristics", CharSet = CharSet.Unicode)]
  45. public static extern void ScanCharacteristics(string deviceId, string serviceId);
  46. [DllImport("BleWinrtDll.dll", EntryPoint = "PollCharacteristic")]
  47. public static extern ScanStatus PollCharacteristic(out Characteristic characteristic, bool block);
  48. [DllImport("BleWinrtDll.dll", EntryPoint = "SubscribeCharacteristic", CharSet = CharSet.Unicode)]
  49. public static extern bool SubscribeCharacteristic(string deviceId, string serviceId, string characteristicId, bool block);
  50. [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
  51. public struct BLEData
  52. {
  53. [MarshalAs(UnmanagedType.ByValArray, SizeConst = 512)]
  54. public byte[] buf;
  55. [MarshalAs(UnmanagedType.I2)]
  56. public short size;
  57. [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
  58. public string deviceId;
  59. [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
  60. public string serviceUuid;
  61. [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
  62. public string characteristicUuid;
  63. };
  64. [DllImport("BleWinrtDll.dll", EntryPoint = "PollData")]
  65. public static extern bool PollData(out BLEData data, bool block);
  66. [DllImport("BleWinrtDll.dll", EntryPoint = "SendData")]
  67. public static extern bool SendData(in BLEData data, bool block);
  68. [DllImport("BleWinrtDll.dll", EntryPoint = "Quit")]
  69. public static extern void Quit();
  70. [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
  71. public struct ErrorMessage
  72. {
  73. [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 1024)]
  74. public string msg;
  75. };
  76. [DllImport("BleWinrtDll.dll", EntryPoint = "GetError")]
  77. public static extern void GetError(out ErrorMessage buf);
  78. [DllImport("BleWinrtDll.dll", EntryPoint = "Disconnect", CharSet = CharSet.Unicode)]
  79. public static extern void Disconnect(string deviceId);
  80. }