# AiBrushBleSDk使用说明 [English](README.md) | 版本号 | 更新时间 | 作者 | 更新信息 | |--------- | --------: | -----: | --------: | |v1.0 | 2019/07/08 | JosonXiong | 初步版本| ## 一、使用条件 > * 最低版本iOS 8.0 > * 设备所使用的蓝牙版本需要4.0及以上 ## 二、开始使用 1.申请sdk的key 和secret,申请地址:http://sdk.aicare.net.cn; 2.在info.plist文件中设置Privacy - Bluetooth Always Usage Description; 3.将AiBrushBleSDK.framework导入Xcode工程; 4.在AppDelegate中加入如下代码: ``` #import - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {     // Override point for customization after application launch.     [AiBrushBleManager setAppKey:@"key" appSecret:@"secret"];     return YES; } ``` 5.在需要使用的控制器.m中导入#import ,并遵守< AiBrushBleManagerDelegate>协议, 6.设置代理 ``` [AiBrushBleManager shareManager].delegate = self; ``` 7.实现代理方法 ``` /**  回调蓝牙当前状态  @param state蓝牙状态  */ -(void)brushBleManagerUpdateBleState:(AiBrushBleState)state; /**  回调扫描到的所有外设  @param peripheralList 外设列表  */ -(void)brushBleManagerScanedPeripherals:(NSArray *)peripheralList; /**  上报设置模式结果  @param result 结果  */ -(void)brushBleManagerReceiveSetModeResult:(AiBrushSetModeResult)result; /**  上报工作状态  @param model 工作状态模型  */ -(void)brushBleManagerReceiveWorkState:(AiBrushWorkStateModel *)model; /**  上报电源状态  @param model 电源状态模型  */ -(void)brushBleManagerReceiveBatteryStateModel:(AiBrushBatteryStateModel *)model; /**  确认收到断开蓝牙连接请求  */ -(void)brushBleManagerReceiveDisconnectResult; /**  上报设备时间  @param time 时间  */ -(void)brushBleManagerReceiveSystemTime:(int)time; /**  返回设置设备时间结果  @param result 结果  1:设置设备时间成功  2:设置设备时间失败  */ -(void)brushBleManagerReceiveSetTimeResult:(int)result; /**  返回历史数据条数  @param count 历史数据总数  */ -(void)brushBleManagerReceiveHistoryDataCount:(int)count; /**  取消读取历史数据操作结果  @param result 结果  1:取消读取成功  2:取消读取失败  */ -(void)brushBleManagerReceiveCancelReadHistoryDataResult:(int)result; /**  删除历史数据  @param result 结果  1:删除成功  2:删除失败  */ -(void)brushBleManagerReceiveDeleteHistoryDataResult:(int)result; /**  回调历史数据  @param model 历史数据模型  */ -(void)brushBleManagerReceiveHistoryDataModel:(AiBrushWorkDataModel *)model; /**  回调工作数据  @param model 数据模型  */ -(void)brushBleManagerReceiveWorkDataModel:(AiBrushWorkDataModel *)model; /**  上报 Sensor 数据  @param model 数据模型  */ -(void)brushBleManagerReceiveGsensorDataModel:(AiBrushGsensorModel *)model; /**  上报力度相关数据  @param model 数据模型)  */ -(void)brushBleManagerReceiveStrengthDataModel:(AiBrushStrengthModel *)model; /**  上报按键确认 App 连接状态  1----按键动作确认 App 连接有效,2----App 需要按键确认,3----App 有效不需要按键确认  @param state 连接状态  */ -(void)brushBleManagerReceiveConnectState:(int)state; /**  回调刷牙模式档位    @param oneGear 一级档位  @param twoGear 二级档位  */ - (void)brushBleManagerReturnOneGearMode:(NSArray *)oneGear twoGearMode:(NSArray *)twoGear; /**  设置DID结果  @param result 结果  YES:成功  NO:失败  */ -(void)brushBleManagerReturnSetDIDResult:(BOOL)result; /**  设置Name结果  @param result 结果  YES:成功  NO:失败  */ -(void)brushBleManagerReturnSetNameResult:(BOOL)result; /**  返回OTA升级进度  @param progress 升级进度  */ -(void)brushBleManagerReturnOTAUpdateProgress:(double)progress; /**  返回OTA升级结果  @param result 结果  */ -(void)brushBleManagerOTAUpdateResult:(BOOL)result; ``` ## 三、连接设备 ### 1.判断手机蓝牙是否可用 可通过代理方法: ``` /**  回调蓝牙当前状态  @param state 蓝牙状态  */ -(void)brushBleManagerUpdateBleState:(AiBrushBleState)state; 以及[AiBrushBleManager shareManager].state; ``` 获取当前蓝牙的状态, 也可通过 ``` [AiBrushBleManager shareManager].isOn; ``` 获取当前蓝牙是否打开可用; ### 2.开始扫描 ``` [[AiBrushBleManager shareManager] startScan]; ``` ``` 回调方法: /**  回调扫描到的所有外设  @param peripheralList 外设列表  */ -(void)brushBleManagerScanedPeripherals:(NSArray *)peripheralList; ``` 通过这个代理回调方法可以获取扫描到的设备 ### 3.停止扫描 ``` [[AiBrushBleManager shareManager] stopScan]; ``` ### 4.连接设备 ``` [[AiBrushBleManager shareManager] connectPeripheral:peripheral]; ``` Peripheral为CBPeripheral对象,可通过扫描回调的设备获取到对应的模型的对应属性获得 ### 5.确认连接 当app第一次请求连接设备时,需要设备端确认,请在15秒内按键确认。 ### 6.连接成功 连接成功后设备的灯会保持常亮。 ### 7.断开连接 ``` [[AiBrushBleManager shareManager] disconnectPeripheral] ``` ## 四、与设备交互 ### 1.设置刷牙模式  关于模式设置的详细资料,请查看协议说明 ``` @param 必须传4个byte的数据 -(void)setBrushModeWithByte:(Byte[_Nonnull])byte; 对应的代理回调方法: -(void)brushBleManagerReceiveSetModeResult:(AiBrushSetModeResult)result; ``` > 注意: 1.设备设备模式前,需要通过[AiBrushBleManager shareManager].versionType判断是什么设备类型,同时还要获取设备支持的模式[AiBrushBleManager shareManager].oneGearArray和[AiBrushBleManager shareManager].twoGearArray再进行设置,如果mode = 0x07,0x08,0x09,0x0A,0x0B,则需要先判断牙刷的一档模式是否支持,如果支持,则设置{mode,0x00,0x00,时间},如果不支持,再判断[AiBrushBleManager shareManager].versionType为AiBrushVersionTypeBY01,AiBrushVersionTypeBY02,AiBrushVersionTypeBY03,AiBrushVersionTypeBY04,若是以上的类型,则设置{0x05, modeID,0x00,时间};否则[AiBrushBleManager shareManager].versionType为AiBrushVersionTypeBY05,AiBrushVersionTypeBY06,AiBrushVersionTypeBYOther,则设置{0x06,频率,占空比,时间} ### 具体如下 ``` if (mode == 0x06){         Byte b[4] = {0x06,0x02,0x03,0x16};                  [[AiBrushBleManager shareManager] setBrushModeWithByte:b];     }else{         if ([[AiBrushBleManager shareManager].oneGearArray containsObject:[NSNumber numberWithChar:mode]]) {             Byte dataByte[] = {mode,0x00,0x00,0x16};             [[AiBrushBleManager shareManager] setBrushModeWithByte:dataByte];         }else{             if (mode == 0x07 || mode == 0x08 || mode == 0x09 || mode == 0x0A || mode == 0x0B ) {                 if ([AiBrushBleManager shareManager].versionType == AiBrushVersionTypeBY01 || [AiBrushBleManager shareManager].versionType == AiBrushVersionTypeBY02 || [AiBrushBleManager shareManager].versionType == AiBrushVersionTypeBY03 || [AiBrushBleManager shareManager].versionType == AiBrushVersionTypeBY04) {                     Byte modeIDByte=0x00;                     if (mode == 0x07) {                         modeIDByte = 0x01;                     }else if (mode == 0x08){                         modeIDByte = 0x02;                     }else if (mode == 0x09){                         modeIDByte = 0x03;                     }else if (mode == 0x0A){                         modeIDByte = 0x04;                     }else if (mode == 0x0B){                         modeIDByte = 0x05;                     }                                          Byte dataByte[] = {0x05,modeIDByte,0x00,0x16};                     [[AiBrushBleManager shareManager] setBrushModeWithByte:dataByte];                 }else{                     Byte dataByte[] = {mode,0x00,0x00,0x16};                     [[AiBrushBleManager shareManager] setBrushModeWithByte:dataByte];                 }                              }else{                 Byte dataByte[] = {mode,0x00,0x00,0x16};                 [[AiBrushBleManager shareManager] setBrushModeWithByte:dataByte];             }         }     }     ``` ### 3.如果[AiBrushBleManager shareManager].isWorking == YES,说明设备正在工作,此时无法设置工作模式。 ### 4. 查询工作状态 ``` -(void)queryWorkState; 对应的代理回调方法: -(void)brushBleManagerReceiveWorkState:(AiBrushWorkStateModel *)model; ``` ### 5. 查询电源状态 ``` -(void)queryBatteryState; 对应的代理回调方法: -(void)brushBleManagerReceiveBatteryStateModel:(AiBrushBatteryStateModel *)model; ``` ### 6. 切换工作状态 ``` -(void)changeWorkState; 对应的代理回调方法: -(void)brushBleManagerReceiveWorkState:(AiBrushWorkStateModel *)model; ``` ### 7. 查询设备时间 ``` -(void)querySystemTime; 对应的代理回调方法: -(void)brushBleManagerReceiveSystemTime:(int)time; ``` ### 8.设置系统时间 ``` -(void)setSystemTime; 对应的代理回调方法: -(void)brushBleManagerReceiveSetTimeResult:(int)result; ``` ### 9. 读取历史数据 ``` -(void)queryHistoryData; 对应的代理回调方法: -(void)brushBleManagerReceiveHistoryDataCount:(int)count; -(void)brushBleManagerReceiveHistoryDataModel:(AiBrushWorkDataModel *)model; ``` ### 10. 取消读取历史数据 ``` -(void)cancelReadHistoryData; 对应的代理回调方法: -(void)brushBleManagerReceiveCancelReadHistoryDataResult:(int)result; ``` ### 11. 删除历史数据 ``` -(void)deleteHistoryData; 对应的代理回调方法: -(void)brushBleManagerReceiveDeleteHistoryDataResult:(int)result; ``` ### 12.请求档位信息 ``` -(void)queryGear; 对应的代理回调方法: - (void)brushBleManagerReturnOneGearMode:(NSArray *)oneGear twoGearMode:(NSArray *)twoGear; ``` ### 13.蓝牙电动牙刷厂商型号列表"(设置did:0~65535,请参考《蓝牙电动牙刷厂商型号列表》 ``` -(void)setDID:(int)did; 对应的代理回调方法: -(void)brushBleManagerReturnSetDIDResult:(BOOL)result; ``` ### 14.设置蓝牙名称 ``` -(void)setName:(NSString *)name; 对应的代理回调方法: -(void)brushBleManagerReturnSetNameResult:(BOOL)result; ``` > 注意: 名称长度不能超过16个byte ### 15. OTA upgrade(OTA升级) ``` /*  @param fileStr 文件路径  */ - (void)OTAUpdate:(NSURL *)fileStr; 对应的代理回调方法: -(void)brushBleManagerReturnOTAUpdateProgress:(double)progress; -(void)brushBleManagerOTAUpdateResult:(BOOL)result; ``` > 注意: 不是所有设备都支持OTA升级,而是有“FEF5”特征服务的设备才支持。 ### 16.升级成功后重启设备 ```  - (void)rebootDevice; 对应的代理回调方法: 无 ``` ## 五、其他回调 ### 1.设备按确认键与app建立连接时,会回调以下方法 ``` /**  上报按键确认 App 连接状态  1----按键动作确认 App 连接有效,2----App 需要按键确认,3----App 有效不需要按键确认  @param state 连接状态  */ -(void)brushBleManagerReceiveConnectState:(int)state; ``` ### 2.设备工作后会主动上传工作数据,回调以下方法 ``` /**  回调工作数据  @param model 数据模型  */ -(void)brushBleManagerReceiveWorkDataModel:(AiBrushWorkDataModel *)model; ``` ### 3.测试用的设备可能回调以下方法 ``` /**  上报 Sensor 数据  @param model 数据模型  */ -(void)brushBleManagerReceiveGsensorDataModel:(AiBrushGsensorModel *)model; /**  上报力度相关数据  @param model 数据模型  */ -(void)brushBleManagerReceiveStrengthDataModel:(AiBrushStrengthModel *)model; ``` ## 六、联系我们 感谢您使用品网SDK进行产品研发,如在使用过程中有任何疑问,欢迎随时与我们联系。帮助企业实现产品的快速智能化,是我们不断前行的动力。 Web: www.inet-tek.com Email : iot.support@inet-tek.com