// // ELAILinkBleManager.h // // Created by LarryZhang on 2022/8/13. // Copyright © 2022 iot_iMac. All rights reserved. // #import #import #import "NELBleManagerHeader.h" #import "ELSDKHeader.h" #import "AILinkBleSDK_Version.h" NS_ASSUME_NONNULL_BEGIN @class ELAILinkPeripheral; @class ELBleWifiDetailModel; @protocol ELAILinkBleWifiDelegate; @protocol ELAILinkBleManagerDelegate; @interface ELAILinkBleManager : NSObject //不是必须使用单例 + (instancetype)sharedManager; - (NSString *)sdkVersion; + (NSString *)sdkVersion; @property(nonatomic, assign, readonly, getter=isScanning) BOOL scanning; @property(nonatomic, assign, readonly) CBCentralManager *central; @property (nonatomic, weak) id delegate DEPRECATED_MSG_ATTRIBUTE("use 'ailinkDelegate' only"); @property (nonatomic, strong) CBPeripheral *peripheral; @property (nonatomic, weak) id ailinkDelegate; //Bluetooth wifi proxy(蓝牙wifi代理) @property (nonatomic, weak) id bleWifiDelegate; //模块版本号 @property (nonatomic, copy) NSString *bmVersion; @property (nonatomic, copy) NSString *bmVersionPro; //电池状态 @property (nonatomic, assign) struct ELBatteryStruct battery; //单位列表 @property (nonatomic, strong) NSArray *weightArray; @property (nonatomic, strong) NSArray *heightArray; @property (nonatomic, strong) NSArray *temperatureArray; @property (nonatomic, strong) NSArray *bloodPressureArray; @property (nonatomic, strong) NSArray *pressureArray; @property (nonatomic, strong) NSArray *bloodSugarUnitArray; @property (nonatomic, strong) NSArray *volumeUnitArray; @end #pragma mark - scan @interface ELAILinkBleManager (scan) - (void)scanAll; - (void)scanFilterWithCidArray:(NSArray *_Nonnull)cidArray; - (void)scanFilterWithMacArray:(NSArray *_Nonnull)macArray; - (void)scanFilterWithCidArray:(NSArray *_Nonnull)cidArray macArray:(NSArray *_Nonnull)macArray; // 获取当前连接到系统的 peripheral 设备的列表(如被其它程序连接着) - (NSArray *)retrieveConnectedPeripherals; //NELBleManager - (void)stopScan; @end #pragma mark - connect @interface ELAILinkBleManager (connect) //- (void)connectPeripheral:(CBPeripheral *)peripheral; - (void)disconnectPeripheral; - (void)connectAILinkPeripheral:(ELAILinkPeripheral * _Nonnull)ailinkPeripheral; - (ELAILinkPeripheral * _Nullable)currentAILinkPeripheral; @end #pragma mark - send @interface ELAILinkBleManager (send) - (void)sendA7Payload:(NSData *)payload; - (void)sendA6Payload:(NSData *)payload; /// base method of 'sendA7Payload' & 'sendA6Payload' - (void)sendCmd:(NSData *)cmdData; //最大发送payload长度 //- (NSUInteger)maximumWritePayloadLength; //OTA最大发送payload长度 //- (NSUInteger)maximumWriteOTAPayloadLength; //发送队列发送周期 - (void)configWriteDataQueueInterval:(CGFloat)interval; @end #pragma mark - Special @interface ELAILinkBleManager (Special) - (void)processA7Data:(NSMutableData *)rawData withMac:(NSData *)mac withCid:(UInt16)cid; - (void)processA6Data:(NSMutableData *)rawData; - (NSData * _Nullable)makePacketA7Payload:(NSData *)payload withMac:(NSData *)mac withCid:(UInt16)cid; - (NSData * _Nullable)makePacketA6Payload:(NSData *)payload; @end #pragma mark - A6Method @interface ELAILinkBleManager (A6Method) /** Get Bluetooth information(获取蓝牙信息) @param type ELInetGetCmdType (ELInetGetCmdTypeGetHandshake除外) */ - (void)getBluetoothInfoWithELInetGetCmdType:(ELInetGetCmdType)type; /** Sync the current time of phone to BLE(设置手机本地时间给蓝牙模块,只在蓝牙体脂秤等需要蓝牙模块保存历史记录时才调用) @param enable NO: In addition to the ability to turn off the time function, you can save part of the current (default)(除能,关闭时间功能,可省部分电流(默认)) YES:Enable, turn on the timer function timer(使能,开启计时功能定时器) */ - (void)syncBleNowDate:(BOOL)enable; ///仅WIFI秤调用,同步世界时间(0时区)到wifi-ble模块 - (void)syncBleGMTNowDate:(BOOL)enable; ///同步手机本地时间给mcu,每次连接成功后会自动调用 - (void)syncMCUNowDate; ///查询mqtt链接状态 CMD=0xC5 - (void)checkMqttState; @end #pragma mark - specialMethod @interface ELAILinkBleManager (specialMethod) - (BOOL)specialMethodWithCid:(UInt16)cid vid:(UInt16)vid pid:(UInt16)pid secret:(NSString *)secret; @end #pragma mark - BleWifi @interface ELAILinkBleManager (BleWifi) //============ Bluetooth WIFI calling method(蓝牙WIFI 设置命令) ============== /** WIFI initiate connection and disconnect(WIFI 发起连接、断开连接) @param connect YES: initiate connection NO: disconnect(YES:发起连接 NO:断开连接) */ - (void)bleWifiSetupWifiConnect:(BOOL)connect; /** Set WIFI access URL(设置WIFI访问URL) @param url url(Not more than 56chars(不超过56chars)) */ - (void)bleWifiSetWifiURL:(NSString *)url; /** Set Wifi access port number(设置Wifi访问端口号) @param port 端口号 */ - (void)bleWifiSetPort:(int)port; /** Set DTIM interval(设置DTIM间隔) @param interval 间隔 */ - (void)bleWifiSetDTIMInterval:(int)interval; /** Set WIFI password(设置WIFI密码) @param pwd WIFI password (8 ~ 56 chars)(WIFI密码(8~56 个chars)) */ - (void)bleWifiSetWifiPwd:(NSString *)pwd; /** Set up connected WIFI(设置连接的WIFI) @param macData wifi MAC (little endian)(wifi的MAC(小端序)) */ - (void)bleWifiSetConnectWifiMac:(NSData *)macData; @end #pragma mark - ELAILinkBleManagerDelegate @protocol ELAILinkBleManagerDelegate @optional //扫描 - (void)managerDidUpdateState:(CBCentralManager *)central; - (void)managerScanState:(BOOL)scanning; - (void)managerDidDiscoverPeripheral:(ELAILinkPeripheral *)peripheral; - (void)managerDidDiscoverMorePeripheral:(NSDictionary *)peripherals; //连接 - (void)managerDidConnectPeripheral:(CBPeripheral *)peripheral; - (void)managerDidFailToConnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error; - (void)managerDidDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error; - (void)managerDidUpdateConnect:(NELBleManagerConnectState)state; //服务 & 特征 - (void)peripheralDidDiscoverServices:(NSArray *)services; - (void)peripheralDidDiscoverCharacteristicsForService:(NSArray *)characteristics; - (void)peripheralDidUpdateNotificationStateForCharacteristic:(CBCharacteristic *)characteristic; - (void)peripheralDidUpdateValueForCharacteristic:(CBCharacteristic *)characteristic; - (void)didWriteValueForCharacteristic:(CBCharacteristic *)characteristic; - (void)peripheralDidReadRSSI:(nonnull NSNumber *)RSSI; @optional //A7数据 payload - (void)aiLinkBleReceiveA7Data:(NSData *)payload; - (void)aiLinkBleReceiveA7Data:(NSData *)payload withMac:(NSData *)mac DEPRECATED_MSG_ATTRIBUTE("use 'aiLinkBleReceiveA7Data:aILinkPeripheral' instead"); - (void)aiLinkBleReceiveA7Data:(NSData *)packet aILinkPeripheral:(ELAILinkPeripheral *)aILinkPeripheral; //A6数据 packet - (void)aiLinkBleReceiveA6Data:(NSData *)packet; - (void)aiLinkBleReceiveA6Data:(NSData *)packet withMac:(NSData *)mac DEPRECATED_MSG_ATTRIBUTE("use 'aiLinkBleReceiveA6Data:aILinkPeripheral' instead"); - (void)aiLinkBleReceiveA6Data:(NSData *)packet aILinkPeripheral:(ELAILinkPeripheral *)aILinkPeripheral; - (void)aiLinkBleReceiveRawData:(NSData *)rawData aILinkPeripheral:(ELAILinkPeripheral *)aILinkPeripheral; @end #pragma mark - Bluetooth Wifi protocol(蓝牙Wifi协议) @protocol ELAILinkBleWifiDelegate @optional /** Callback Wifi details(回调Wifi详情) @param model 模型 */ - (void)bleWifiReceiveWifiDetailModel:(ELBleWifiDetailModel *_Nonnull)model; /** Scan nearby wifi results(扫描附近wifi结果) @param count Number of nearby wifi(附近wifi数量) */ - (void)bleWifiReceiveScanedWifiCount:(int)count; /** Callback Wifi MAC address(回调Wifi MAC地址) @param macData mac */ - (void)bleWifiReceiveWifiMacData:(NSData *_Nullable)macData; /** Callback WIFI password(回调WIFI密码) @param pwd password(密码) */ - (void)bleWifiReceiveWifiPwd:(NSString *_Nonnull)pwd; /** Get DTIM interval (unit: ms)(获取DTIM间隔(单位:ms)) @param interval Interval (unit: ms)(间隔(单位:ms)) */ - (void)bleWifiReceiveWifiDTIMInterval:(NSInteger)interval; /** Returns the visited URL(返回访问的url) @param url url */ - (void)bleWifiReceiveWifiAccessURL:(NSString *_Nonnull)url; /** Call back wifi port number(回调wifi的端口号) @param port 端口号 */ - (void)bleWifiReceiveWifiPort:(int)port; /** Set or query the callback of the instruction execution result(设置指令蓝牙WIFI响应回调方法) 只支持蓝牙Wifi部分枚举 @param type Type of setting (设置的类型) @param result Set result(设置的结果) */ - (void)bleWifiReceiceResponseType:(ELInetSetCmdType)type result:(ELSetBluetoothResponseType)result; /** 获取会话码(deviceId) @param code (deviceId) deviceId(0 means no:为0时表示不存在) */ - (void)bleWifiReceiveWifiSNCode:(int)code; /** 返回wifi名称 */ - (void)bleWifiName:(NSString *)wifiName; @end #pragma mark - ELAILinkPeripheral @interface ELAILinkPeripheral : NSObject @property (nonatomic, strong) CBPeripheral *peripheral; @property (nonatomic, strong) NSDictionary *advertisementData; @property (nonatomic, strong) NSNumber *RSSI; @property (nonatomic, assign) NSTimeInterval timestamp; @property (nonatomic, copy) NSString *macAddressString; @property (nonatomic, strong) NSData *macData; @property (nonatomic, assign) UInt16 cid; @property (nonatomic, assign) UInt16 vid; @property (nonatomic, assign) UInt16 pid; @property (nonatomic, strong) NSUUID *identifier; @end NS_ASSUME_NONNULL_END