iOS AILinkBleSDK - 蓝牙SDK
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

ELAILinkBleManager.h 9.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339
  1. //
  2. // ELAILinkBleManager.h
  3. //
  4. // Created by LarryZhang on 2022/8/13.
  5. // Copyright © 2022 iot_iMac. All rights reserved.
  6. //
  7. #import <Foundation/Foundation.h>
  8. #import <CoreBluetooth/CoreBluetooth.h>
  9. #import "NELBleManagerHeader.h"
  10. #import "ELSDKHeader.h"
  11. #import "AILinkBleSDK_Version.h"
  12. NS_ASSUME_NONNULL_BEGIN
  13. @class ELAILinkPeripheral;
  14. @class ELBleWifiDetailModel;
  15. @protocol ELAILinkBleWifiDelegate;
  16. @protocol ELAILinkBleManagerDelegate;
  17. @interface ELAILinkBleManager : NSObject
  18. //不是必须使用单例
  19. + (instancetype)sharedManager;
  20. - (NSString *)sdkVersion;
  21. + (NSString *)sdkVersion;
  22. @property(nonatomic, assign, readonly, getter=isScanning) BOOL scanning;
  23. @property(nonatomic, assign, readonly) CBCentralManager *central;
  24. @property (nonatomic, weak) id<ELAILinkBleManagerDelegate> delegate DEPRECATED_MSG_ATTRIBUTE("use 'ailinkDelegate' only");
  25. @property (nonatomic, strong) CBPeripheral *peripheral;
  26. @property (nonatomic, weak) id<ELAILinkBleManagerDelegate> ailinkDelegate;
  27. //Bluetooth wifi proxy(蓝牙wifi代理)
  28. @property (nonatomic, weak) id<ELAILinkBleWifiDelegate> bleWifiDelegate;
  29. //模块版本号
  30. @property (nonatomic, copy) NSString *bmVersion;
  31. @property (nonatomic, copy) NSString *bmVersionPro;
  32. //电池状态
  33. @property (nonatomic, assign) struct ELBatteryStruct battery;
  34. //单位列表
  35. @property (nonatomic, strong) NSArray<NSNumber *> *weightArray;
  36. @property (nonatomic, strong) NSArray<NSNumber *> *heightArray;
  37. @property (nonatomic, strong) NSArray<NSNumber *> *temperatureArray;
  38. @property (nonatomic, strong) NSArray<NSNumber *> *bloodPressureArray;
  39. @property (nonatomic, strong) NSArray<NSNumber *> *pressureArray;
  40. @property (nonatomic, strong) NSArray<NSNumber *> *bloodSugarUnitArray;
  41. @property (nonatomic, strong) NSArray<NSNumber *> *volumeUnitArray;
  42. @end
  43. #pragma mark - scan
  44. @interface ELAILinkBleManager (scan)
  45. - (void)scanAll;
  46. - (void)scanFilterWithCidArray:(NSArray<NSNumber *> *_Nonnull)cidArray;
  47. - (void)scanFilterWithMacArray:(NSArray<NSString *> *_Nonnull)macArray;
  48. - (void)scanFilterWithCidArray:(NSArray<NSNumber *> *_Nonnull)cidArray macArray:(NSArray<NSString *> *_Nonnull)macArray;
  49. // 获取当前连接到系统的 peripheral 设备的列表(如被其它程序连接着)
  50. - (NSArray<CBPeripheral *> *)retrieveConnectedPeripherals;
  51. //NELBleManager
  52. - (void)stopScan;
  53. @end
  54. #pragma mark - connect
  55. @interface ELAILinkBleManager (connect)
  56. //- (void)connectPeripheral:(CBPeripheral *)peripheral;
  57. - (void)disconnectPeripheral;
  58. - (void)connectAILinkPeripheral:(ELAILinkPeripheral * _Nonnull)ailinkPeripheral;
  59. - (ELAILinkPeripheral * _Nullable)currentAILinkPeripheral;
  60. @end
  61. #pragma mark - send
  62. @interface ELAILinkBleManager (send)
  63. - (void)sendA7Payload:(NSData *)payload;
  64. - (void)sendA6Payload:(NSData *)payload;
  65. /// base method of 'sendA7Payload' & 'sendA6Payload'
  66. - (void)sendCmd:(NSData *)cmdData;
  67. //最大发送payload长度
  68. //- (NSUInteger)maximumWritePayloadLength;
  69. //OTA最大发送payload长度
  70. //- (NSUInteger)maximumWriteOTAPayloadLength;
  71. //发送队列发送周期
  72. - (void)configWriteDataQueueInterval:(CGFloat)interval;
  73. @end
  74. #pragma mark - Special
  75. @interface ELAILinkBleManager (Special)
  76. - (void)processA7Data:(NSMutableData *)rawData withMac:(NSData *)mac withCid:(UInt16)cid;
  77. - (void)processA6Data:(NSMutableData *)rawData;
  78. - (NSData * _Nullable)makePacketA7Payload:(NSData *)payload withMac:(NSData *)mac withCid:(UInt16)cid;
  79. - (NSData * _Nullable)makePacketA6Payload:(NSData *)payload;
  80. @end
  81. #pragma mark - A6Method
  82. @interface ELAILinkBleManager (A6Method)
  83. /**
  84. Get Bluetooth information(获取蓝牙信息)
  85. @param type ELInetGetCmdType (ELInetGetCmdTypeGetHandshake除外)
  86. */
  87. - (void)getBluetoothInfoWithELInetGetCmdType:(ELInetGetCmdType)type;
  88. /**
  89. Sync the current time of phone to BLE(设置手机本地时间给蓝牙模块,只在蓝牙体脂秤等需要蓝牙模块保存历史记录时才调用)
  90. @param enable
  91. NO: In addition to the ability to turn off the time function, you can save part of the current (default)(除能,关闭时间功能,可省部分电流(默认))
  92. YES:Enable, turn on the timer function timer(使能,开启计时功能定时器)
  93. */
  94. - (void)syncBleNowDate:(BOOL)enable;
  95. ///仅WIFI秤调用,同步世界时间(0时区)到wifi-ble模块
  96. - (void)syncBleGMTNowDate:(BOOL)enable;
  97. ///同步手机本地时间给mcu,每次连接成功后会自动调用
  98. - (void)syncMCUNowDate;
  99. ///查询mqtt链接状态 CMD=0xC5
  100. - (void)checkMqttState;
  101. @end
  102. #pragma mark - specialMethod
  103. @interface ELAILinkBleManager (specialMethod)
  104. - (BOOL)specialMethodWithCid:(UInt16)cid vid:(UInt16)vid pid:(UInt16)pid secret:(NSString *)secret;
  105. @end
  106. #pragma mark - BleWifi
  107. @interface ELAILinkBleManager (BleWifi)
  108. //============ Bluetooth WIFI calling method(蓝牙WIFI 设置命令) ==============
  109. /**
  110. WIFI initiate connection and disconnect(WIFI 发起连接、断开连接)
  111. @param connect YES: initiate connection NO: disconnect(YES:发起连接 NO:断开连接)
  112. */
  113. - (void)bleWifiSetupWifiConnect:(BOOL)connect;
  114. /**
  115. Set WIFI access URL(设置WIFI访问URL)
  116. @param url url(Not more than 56chars(不超过56chars))
  117. */
  118. - (void)bleWifiSetWifiURL:(NSString *)url;
  119. /**
  120. Set Wifi access port number(设置Wifi访问端口号)
  121. @param port 端口号
  122. */
  123. - (void)bleWifiSetPort:(int)port;
  124. /**
  125. Set DTIM interval(设置DTIM间隔)
  126. @param interval 间隔
  127. */
  128. - (void)bleWifiSetDTIMInterval:(int)interval;
  129. /**
  130. Set WIFI password(设置WIFI密码)
  131. @param pwd WIFI password (8 ~ 56 chars)(WIFI密码(8~56 个chars))
  132. */
  133. - (void)bleWifiSetWifiPwd:(NSString *)pwd;
  134. /**
  135. Set up connected WIFI(设置连接的WIFI)
  136. @param macData wifi MAC (little endian)(wifi的MAC(小端序))
  137. */
  138. - (void)bleWifiSetConnectWifiMac:(NSData *)macData;
  139. @end
  140. #pragma mark - ELAILinkBleManagerDelegate
  141. @protocol ELAILinkBleManagerDelegate <NSObject>
  142. @optional
  143. //扫描
  144. - (void)managerDidUpdateState:(CBCentralManager *)central;
  145. - (void)managerScanState:(BOOL)scanning;
  146. - (void)managerDidDiscoverPeripheral:(ELAILinkPeripheral *)peripheral;
  147. - (void)managerDidDiscoverMorePeripheral:(NSDictionary<NSUUID *, ELAILinkPeripheral *> *)peripherals;
  148. //连接
  149. - (void)managerDidConnectPeripheral:(CBPeripheral *)peripheral;
  150. - (void)managerDidFailToConnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error;
  151. - (void)managerDidDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error;
  152. - (void)managerDidUpdateConnect:(NELBleManagerConnectState)state;
  153. //服务 & 特征
  154. - (void)peripheralDidDiscoverServices:(NSArray<CBService *> *)services;
  155. - (void)peripheralDidDiscoverCharacteristicsForService:(NSArray<CBCharacteristic *> *)characteristics;
  156. - (void)peripheralDidUpdateNotificationStateForCharacteristic:(CBCharacteristic *)characteristic;
  157. - (void)peripheralDidUpdateValueForCharacteristic:(CBCharacteristic *)characteristic;
  158. - (void)didWriteValueForCharacteristic:(CBCharacteristic *)characteristic;
  159. - (void)peripheralDidReadRSSI:(nonnull NSNumber *)RSSI;
  160. @optional
  161. //A7数据 payload
  162. - (void)aiLinkBleReceiveA7Data:(NSData *)payload;
  163. - (void)aiLinkBleReceiveA7Data:(NSData *)payload withMac:(NSData *)mac DEPRECATED_MSG_ATTRIBUTE("use 'aiLinkBleReceiveA7Data:aILinkPeripheral' instead");
  164. - (void)aiLinkBleReceiveA7Data:(NSData *)packet aILinkPeripheral:(ELAILinkPeripheral *)aILinkPeripheral;
  165. //A6数据 packet
  166. - (void)aiLinkBleReceiveA6Data:(NSData *)packet;
  167. - (void)aiLinkBleReceiveA6Data:(NSData *)packet withMac:(NSData *)mac DEPRECATED_MSG_ATTRIBUTE("use 'aiLinkBleReceiveA6Data:aILinkPeripheral' instead");
  168. - (void)aiLinkBleReceiveA6Data:(NSData *)packet aILinkPeripheral:(ELAILinkPeripheral *)aILinkPeripheral;
  169. - (void)aiLinkBleReceiveRawData:(NSData *)rawData aILinkPeripheral:(ELAILinkPeripheral *)aILinkPeripheral;
  170. @end
  171. #pragma mark - Bluetooth Wifi protocol(蓝牙Wifi协议)
  172. @protocol ELAILinkBleWifiDelegate <NSObject>
  173. @optional
  174. /**
  175. Callback Wifi details(回调Wifi详情)
  176. @param model 模型
  177. */
  178. - (void)bleWifiReceiveWifiDetailModel:(ELBleWifiDetailModel *_Nonnull)model;
  179. /**
  180. Scan nearby wifi results(扫描附近wifi结果)
  181. @param count Number of nearby wifi(附近wifi数量)
  182. */
  183. - (void)bleWifiReceiveScanedWifiCount:(int)count;
  184. /**
  185. Callback Wifi MAC address(回调Wifi MAC地址)
  186. @param macData mac
  187. */
  188. - (void)bleWifiReceiveWifiMacData:(NSData *_Nullable)macData;
  189. /**
  190. Callback WIFI password(回调WIFI密码)
  191. @param pwd password(密码)
  192. */
  193. - (void)bleWifiReceiveWifiPwd:(NSString *_Nonnull)pwd;
  194. /**
  195. Get DTIM interval (unit: ms)(获取DTIM间隔(单位:ms))
  196. @param interval Interval (unit: ms)(间隔(单位:ms))
  197. */
  198. - (void)bleWifiReceiveWifiDTIMInterval:(NSInteger)interval;
  199. /**
  200. Returns the visited URL(返回访问的url)
  201. @param url url
  202. */
  203. - (void)bleWifiReceiveWifiAccessURL:(NSString *_Nonnull)url;
  204. /**
  205. Call back wifi port number(回调wifi的端口号)
  206. @param port 端口号
  207. */
  208. - (void)bleWifiReceiveWifiPort:(int)port;
  209. /**
  210. Set or query the callback of the instruction execution result(设置指令蓝牙WIFI响应回调方法)
  211. 只支持蓝牙Wifi部分枚举
  212. @param type Type of setting (设置的类型)
  213. @param result Set result(设置的结果)
  214. */
  215. - (void)bleWifiReceiceResponseType:(ELInetSetCmdType)type result:(ELSetBluetoothResponseType)result;
  216. /**
  217. 获取会话码(deviceId)
  218. @param code (deviceId) deviceId(0 means no:为0时表示不存在)
  219. */
  220. - (void)bleWifiReceiveWifiSNCode:(int)code;
  221. /** 返回wifi名称 */
  222. - (void)bleWifiName:(NSString *)wifiName;
  223. @end
  224. #pragma mark - ELAILinkPeripheral
  225. @interface ELAILinkPeripheral : NSObject
  226. @property (nonatomic, strong) CBPeripheral *peripheral;
  227. @property (nonatomic, strong) NSDictionary *advertisementData;
  228. @property (nonatomic, strong) NSNumber *RSSI;
  229. @property (nonatomic, assign) NSTimeInterval timestamp;
  230. @property (nonatomic, copy) NSString *macAddressString;
  231. @property (nonatomic, strong) NSData *macData;
  232. @property (nonatomic, assign) UInt16 cid;
  233. @property (nonatomic, assign) UInt16 vid;
  234. @property (nonatomic, assign) UInt16 pid;
  235. @property (nonatomic, strong) NSUUID *identifier;
  236. @end
  237. NS_ASSUME_NONNULL_END