BleApi.cs 4.1 KB

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