From: liangzhenying <867174124@qq.com> Date: Wed, 28 Aug 2024 08:36:44 +0000 (+0800) Subject: bleManger支持多名称搜索 X-Git-Tag: 千寻适配d9~35 X-Git-Url: http://git.snicker.com.cn/sitemap.xml?a=commitdiff_plain;h=0cd28a359d45bb790e146d48edb7fe1bc324c20f;p=mirrors%2FMouseSdk-MacOS.git bleManger支持多名称搜索 --- diff --git a/MouseSdk/AiMouseSdk/TlwMouseSdk/TlwMouseSdk.h b/MouseSdk/AiMouseSdk/TlwMouseSdk/TlwMouseSdk.h index 6800dc3..3f513e6 100644 --- a/MouseSdk/AiMouseSdk/TlwMouseSdk/TlwMouseSdk.h +++ b/MouseSdk/AiMouseSdk/TlwMouseSdk/TlwMouseSdk.h @@ -49,7 +49,7 @@ typedef NS_ENUM(NSInteger,TlwMouseLogLevel) { @optional /// 输出sdk日志 /// - Parameter log: 日志 -- (void)aiMouseAddLog:(NSString *)log; +- (void)tlwMouseAddLog:(NSString *)log; @end @@ -57,9 +57,9 @@ typedef NS_ENUM(NSInteger,TlwMouseLogLevel) { @property (nonatomic, weak) id delegate;/// 代理 @property (nonatomic, readonly) AiMouseConnectType connectType;//连接类型 @property (nonatomic, readonly) BOOL connected;//是否已连接 - -/// 单利 -+(TlwMouse *)shared; +// +///// 单利 +//+(TlwMouse *)shared; /// 设置日志等级 /// - Parameter level: 等级 diff --git a/MouseSdk/AiMouseSdk/TlwMouseSdk/TlwMouseSdk.m b/MouseSdk/AiMouseSdk/TlwMouseSdk/TlwMouseSdk.m index 04716c4..c8dd4b1 100644 --- a/MouseSdk/AiMouseSdk/TlwMouseSdk/TlwMouseSdk.m +++ b/MouseSdk/AiMouseSdk/TlwMouseSdk/TlwMouseSdk.m @@ -34,14 +34,14 @@ @end @implementation TlwMouse -+(TlwMouse *)shared{ - static TlwMouse *manager = nil; - static dispatch_once_t oncePredicate; - dispatch_once(&oncePredicate, ^{ - manager = [[TlwMouse alloc]init]; - }); - return manager; -} +//+(TlwMouse *)shared{ +// static TlwMouse *manager = nil; +// static dispatch_once_t oncePredicate; +// dispatch_once(&oncePredicate, ^{ +// manager = [[TlwMouse alloc]init]; +// }); +// return manager; +//} -(instancetype)init{ if (self = [super init]) { @@ -438,8 +438,8 @@ } - (void)showLog:(NSString *)log{ - if (self.delegate && [self.delegate respondsToSelector:@selector(aiMouseAddLog:)]) { - [self.delegate aiMouseAddLog:[NSString stringWithFormat:@"[AiMouseSdk]%@",log]]; + if (self.delegate && [self.delegate respondsToSelector:@selector(tlwMouseAddLog:)]) { + [self.delegate tlwMouseAddLog:[NSString stringWithFormat:@"[AiMouseSdk]%@",log]]; } if(self.logLevel == TlwMouseLogLevel_info){ NSLog(@"[AiMouseSdk]%@",log); diff --git a/MouseSdk/MouseSdk.xcodeproj/project.pbxproj b/MouseSdk/MouseSdk.xcodeproj/project.pbxproj index 0eff9b0..e5230b5 100644 --- a/MouseSdk/MouseSdk.xcodeproj/project.pbxproj +++ b/MouseSdk/MouseSdk.xcodeproj/project.pbxproj @@ -31,9 +31,6 @@ 18CC59962C787AAB0009FCC8 /* DeviceManager2.m in Sources */ = {isa = PBXBuildFile; fileRef = 18CC59952C787AAB0009FCC8 /* DeviceManager2.m */; }; 18EF7B0D2C76079E00AC5223 /* TlwVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EF7B0C2C76079E00AC5223 /* TlwVC.m */; }; 18EF7B102C7607C100AC5223 /* FrkVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EF7B0F2C7607C100AC5223 /* FrkVC.m */; }; - 18EF7B172C760A5B00AC5223 /* TlwBleManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EF7B122C760A5A00AC5223 /* TlwBleManager.m */; }; - 18EF7B182C760A5B00AC5223 /* TlwHidManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EF7B132C760A5A00AC5223 /* TlwHidManager.m */; }; - 18EF7B192C760A5B00AC5223 /* TlwDeviceManger.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EF7B162C760A5A00AC5223 /* TlwDeviceManger.m */; }; 18EF7B1D2C760FF700AC5223 /* TlwScanVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EF7B1B2C760FF700AC5223 /* TlwScanVC.m */; }; 18EF7B1E2C760FF700AC5223 /* TlwScanVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 18EF7B1C2C760FF700AC5223 /* TlwScanVC.xib */; }; 18F3235D2B8ED78300CABA2E /* ScanCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 18F3235C2B8ED78300CABA2E /* ScanCell.m */; }; @@ -109,12 +106,6 @@ 18EF7B0C2C76079E00AC5223 /* TlwVC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TlwVC.m; sourceTree = ""; }; 18EF7B0E2C7607C100AC5223 /* FrkVC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FrkVC.h; sourceTree = ""; }; 18EF7B0F2C7607C100AC5223 /* FrkVC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FrkVC.m; sourceTree = ""; }; - 18EF7B112C760A5A00AC5223 /* TlwHidManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TlwHidManager.h; sourceTree = ""; }; - 18EF7B122C760A5A00AC5223 /* TlwBleManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TlwBleManager.m; sourceTree = ""; }; - 18EF7B132C760A5A00AC5223 /* TlwHidManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TlwHidManager.m; sourceTree = ""; }; - 18EF7B142C760A5A00AC5223 /* TlwDeviceManger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TlwDeviceManger.h; sourceTree = ""; }; - 18EF7B152C760A5A00AC5223 /* TlwBleManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TlwBleManager.h; sourceTree = ""; }; - 18EF7B162C760A5A00AC5223 /* TlwDeviceManger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TlwDeviceManger.m; sourceTree = ""; }; 18EF7B1A2C760FF700AC5223 /* TlwScanVC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TlwScanVC.h; sourceTree = ""; }; 18EF7B1B2C760FF700AC5223 /* TlwScanVC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TlwScanVC.m; sourceTree = ""; }; 18EF7B1C2C760FF700AC5223 /* TlwScanVC.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = TlwScanVC.xib; sourceTree = ""; }; @@ -192,7 +183,6 @@ isa = PBXGroup; children = ( 18EF7B072C7604BF00AC5223 /* Ble */, - 18EF7B062C7604AA00AC5223 /* Tlw */, 18C31D6F2BBAA6CC0089D656 /* Info.plist */, 181F976C2C7C6E10002FCF68 /* AiHidManager.h */, 181F976B2C7C6E10002FCF68 /* AiHidManager.m */, @@ -239,19 +229,6 @@ path = MouseSdkUITests; sourceTree = ""; }; - 18EF7B062C7604AA00AC5223 /* Tlw */ = { - isa = PBXGroup; - children = ( - 18EF7B142C760A5A00AC5223 /* TlwDeviceManger.h */, - 18EF7B162C760A5A00AC5223 /* TlwDeviceManger.m */, - 18EF7B152C760A5A00AC5223 /* TlwBleManager.h */, - 18EF7B122C760A5A00AC5223 /* TlwBleManager.m */, - 18EF7B112C760A5A00AC5223 /* TlwHidManager.h */, - 18EF7B132C760A5A00AC5223 /* TlwHidManager.m */, - ); - path = Tlw; - sourceTree = ""; - }; 18EF7B072C7604BF00AC5223 /* Ble */ = { isa = PBXGroup; children = ( @@ -453,15 +430,12 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 18EF7B192C760A5B00AC5223 /* TlwDeviceManger.m in Sources */, 18F3235D2B8ED78300CABA2E /* ScanCell.m in Sources */, 18BF1DD22B81AB7C00B8D90F /* ViewController.m in Sources */, 181F976D2C7C6E11002FCF68 /* AiHidManager.m in Sources */, 18BF1DD92B81AB7F00B8D90F /* main.m in Sources */, - 18EF7B172C760A5B00AC5223 /* TlwBleManager.m in Sources */, 185EBE042C79D16600B2503B /* TimerManager.m in Sources */, 18F328D52B98569D00CABA2E /* Config.m in Sources */, - 18EF7B182C760A5B00AC5223 /* TlwHidManager.m in Sources */, 18EF7B0D2C76079E00AC5223 /* TlwVC.m in Sources */, 18CC59962C787AAB0009FCC8 /* DeviceManager2.m in Sources */, 182B548D2BB7EC9B009F53B6 /* DeviceManger.m in Sources */, diff --git a/MouseSdk/MouseSdk.xcworkspace/xcuserdata/apple.xcuserdatad/UserInterfaceState.xcuserstate b/MouseSdk/MouseSdk.xcworkspace/xcuserdata/apple.xcuserdatad/UserInterfaceState.xcuserstate index f9860c2..2c419f2 100644 Binary files a/MouseSdk/MouseSdk.xcworkspace/xcuserdata/apple.xcuserdatad/UserInterfaceState.xcuserstate and b/MouseSdk/MouseSdk.xcworkspace/xcuserdata/apple.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/MouseSdk/MouseSdk.xcworkspace/xcuserdata/apple.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/MouseSdk/MouseSdk.xcworkspace/xcuserdata/apple.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index 05a7ad8..79285a3 100644 --- a/MouseSdk/MouseSdk.xcworkspace/xcuserdata/apple.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/MouseSdk/MouseSdk.xcworkspace/xcuserdata/apple.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -121,8 +121,8 @@ filePath = "MouseSdk/Ble/DeviceManger.m" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "251" - endingLineNumber = "251" + startingLineNumber = "266" + endingLineNumber = "266" landmarkName = "-tlwMouseSendDeviceInfoData:" landmarkType = "7"> diff --git a/MouseSdk/MouseSdk/Ble/BleManager.h b/MouseSdk/MouseSdk/Ble/BleManager.h index 171cae5..b233c5b 100644 --- a/MouseSdk/MouseSdk/Ble/BleManager.h +++ b/MouseSdk/MouseSdk/Ble/BleManager.h @@ -15,11 +15,13 @@ @property (nonatomic, copy)void (^receiveVoiceDataCallBack)(NSData *data);/// 语音数据回调 @property (nonatomic, copy)void (^receiveInfoDataCallBack)(NSData *data);/// 设备信息数据回调 @property (nonatomic, copy)void (^logCallBack)(NSString *log);//输出日志 -/// 单利 -+(BleManager *)shared; +@property (nonatomic, copy) NSArray *bleList; -// bleName:蓝牙设备名称 -- (void)startScanWithName:(NSString *)bleName; +///// 单利 +//+(BleManager *)shared; + +// bleList:蓝牙设备名称 +- (void)startScanWithName:(NSArray *)bleList; //停止扫描 - (void)stopScan; diff --git a/MouseSdk/MouseSdk/Ble/BleManager.m b/MouseSdk/MouseSdk/Ble/BleManager.m index be15414..7173e43 100644 --- a/MouseSdk/MouseSdk/Ble/BleManager.m +++ b/MouseSdk/MouseSdk/Ble/BleManager.m @@ -29,18 +29,18 @@ @property(nonatomic, strong) CBPeripheral *crrentPeripheral;//连接的设备 @property(nonatomic, strong) CBCharacteristic *deviceInfoCha;//设备信息特征 @property (nonatomic,strong) NSMutableData *recordData;//录音的数据 -@property (nonatomic, copy) NSString *targetBleName; + @end @implementation BleManager -+(BleManager *)shared{ - static BleManager *manager = nil; - static dispatch_once_t oncePredicate; - dispatch_once(&oncePredicate, ^{ - manager = [[BleManager alloc]init]; - }); - return manager; -} +//+(BleManager *)shared{ +// static BleManager *manager = nil; +// static dispatch_once_t oncePredicate; +// dispatch_once(&oncePredicate, ^{ +// manager = [[BleManager alloc]init]; +// }); +// return manager; +//} - (instancetype)init{ self = [super init]; @@ -78,32 +78,32 @@ } - (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI{ - if (self.targetBleName != nil && self.targetBleName.length > 0 && [self.targetBleName isEqualToString:peripheral.name]) { + if ([self isContainInSearchList:peripheral.name]) { [self connectPeripheral:peripheral]; } } - (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral{ - [self showLog:[NSString stringWithFormat:@"didConnectPeripheral:连接成功 name = %@",peripheral.name]]; + [self showLog:[NSString stringWithFormat:@"连接成功 name = %@",peripheral.name]]; peripheral.delegate = self; [peripheral discoverServices:nil]; self.crrentPeripheral = peripheral; } -(void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error{ - [self showLog:[NSString stringWithFormat:@"didDisconnectPeripheral:断开连接。。。%@",error.description]]; + [self showLog:[NSString stringWithFormat:@"断开连接。。。%@",error.description]]; self.crrentPeripheral = nil; self.connectStateCallBack(false); } - (void)centralManager:(CBCentralManager *)central didFailToConnectPeripheral:(CBPeripheral *)peripheral error:(nullable NSError *)error{ - [self showLog:[NSString stringWithFormat:@"didFailToConnectPeripheral:连接失败。。。%@",error.description]]; + [self showLog:[NSString stringWithFormat:@"连接失败。。。%@",error.description]]; self.crrentPeripheral = nil; self.connectStateCallBack(false); } #pragma mark - CBPeripheralDelegate //发现服务 - (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error { - [self showLog:[NSString stringWithFormat:@"didDiscoverServices:发现服务"]]; + [self showLog:[NSString stringWithFormat:@"发现服务"]]; for (CBService *service in peripheral.services){ [peripheral discoverCharacteristics:nil forService:service]; } @@ -123,7 +123,7 @@ else if ([characteristic.UUID.UUIDString isEqualToString:kSetDeviceInfoUUID]) { //设备信息特征 self.deviceInfoCha = characteristic; - [self showLog:(@"didDiscoverCharacteristicsForService:回调连接成功 ")]; + [self showLog:(@"回调连接成功 ")]; self.connectStateCallBack(true); } } @@ -142,43 +142,53 @@ } #pragma mark - public -- (void)startScanWithName:(NSString *)bleName { +- (void)startScanWithName:(NSArray *)bleList{ + self.bleList = bleList; //如果是已连接或者正在连接,不需要在链接了 - if (self.crrentPeripheral != nil ) { - if ([self.crrentPeripheral.name isEqualToString:bleName]) { - if (self.crrentPeripheral.state == CBPeripheralStateConnected || self.crrentPeripheral.state == CBPeripheralStateConnecting) { - return; - } - } - else { - [self.centralManager cancelPeripheralConnection:self.crrentPeripheral]; - } - } - - self.targetBleName = bleName; +// if (self.crrentPeripheral != nil ) { +// if ([self.crrentPeripheral.name isEqualToString:bleName]) { +// if (self.crrentPeripheral.state == CBPeripheralStateConnected || self.crrentPeripheral.state == CBPeripheralStateConnecting) { +// return; +// } +// } +// else { +// [self.centralManager cancelPeripheralConnection:self.crrentPeripheral]; +// } +// } +// +// self.bleName = bleName; NSArray *devices = [self.centralManager retrieveConnectedPeripheralsWithServices:@[[CBUUID UUIDWithString:kServiceUUID]]]; - if (devices.count > 0 && [devices[0].name isEqualToString:bleName]) { - [self showLog:[NSString stringWithFormat:@"autoConnectDevice:匹配过的设备%@",devices[0].name]]; + if (devices.count > 0 && [self isContainInSearchList: devices[0].name]) { + [self showLog:[NSString stringWithFormat:@"匹配过的设备%@",devices[0].name]]; [self connectPeripheral:devices[0]]; } else{ - [self showLog:[NSString stringWithFormat:@"开始扫描 设备名称 %@",bleName]]; + [self showLog:[NSString stringWithFormat:@"开始扫描 设备名称 %@",bleList]]; [self.centralManager scanForPeripheralsWithServices:nil options:@{CBCentralManagerScanOptionAllowDuplicatesKey : [NSNumber numberWithBool:NO]}]; } } +- (BOOL)isContainInSearchList:(NSString *)name{ + for (NSString *item in self.bleList) { + if ([item isEqualToString:name]) { + return true; + } + } + return false; +} + - (void)stopScan{ if (self.centralManager.isScanning) { - [self showLog:[NSString stringWithFormat:@"ble:停止扫描"]]; + [self showLog:[NSString stringWithFormat:@":停止扫描"]]; [self.centralManager stopScan]; } } /// 连接设备 - (void)connectPeripheral:(CBPeripheral *)peripheral{ - [self showLog:[NSString stringWithFormat:@"connectPeripheral:连接设备"]]; + [self showLog:[NSString stringWithFormat:@"连接设备 %@",peripheral.description]]; self.crrentPeripheral = peripheral; [self.centralManager connectPeripheral:peripheral options:@{CBConnectPeripheralOptionNotifyOnConnectionKey : [NSNumber numberWithBool:YES]}]; } @@ -194,38 +204,9 @@ [self.crrentPeripheral writeValue:data forCharacteristic:self.deviceInfoCha type:CBCharacteristicWriteWithResponse]; } -////自动连接,获取已配对的蓝牙,取第一个连接 -//- (void)autoConnectDevice{ -// //如果是已连接或者正在连接,则不再重连 -// if (self.crrentPeripheral && (self.crrentPeripheral.state == CBPeripheralStateConnected || self.crrentPeripheral.state == CBPeripheralStateConnecting)) { -// return; -// } -// NSArray *devices = [self.centralManager retrieveConnectedPeripheralsWithServices:@[[CBUUID UUIDWithString:kServiceUUID]]]; -// if (devices.count > 0) { -// CBPeripheral *peripheral = devices[0]; -// [self showLog:[NSString stringWithFormat:@"autoConnectDevice:匹配过的设备%@",peripheral.name]]; -// [self connectPeripheral:peripheral]; -// } -// -// // 10s自动重连 -// [self performSelector:@selector(autoConnectDevice) withObject:nil afterDelay:10]; -//} - (void)showLog:(NSString *)log{ NSString *text = [NSString stringWithFormat:@"[BleManager] %@",log]; - if(self.logCallBack) self.logCallBack(log); + if(self.logCallBack) self.logCallBack(text); } -//将录音数据保存 -- (void)finishRecored:(NSData *)data{ -// NSString *doc = NSTemporaryDirectory(); -// NSString *fullPath = [NSString stringWithFormat:@"%@1.pcm",doc]; -// NSError *err; -// [data writeToFile:fullPath options:NSDataWritingAtomic error:&err]; -// if (err) { -// [self showLog:[NSString stringWithFormat:@"finishRecored:录音保存失败 %@",err.description]]; -// } -// else{ -// [self showLog:[NSString stringWithFormat:@"finishRecored:录音保存成功 path = %@",fullPath]]; -// } -} @end diff --git a/MouseSdk/MouseSdk/Ble/DeviceManger.h b/MouseSdk/MouseSdk/Ble/DeviceManger.h index 562ba7b..2322f39 100644 --- a/MouseSdk/MouseSdk/Ble/DeviceManger.h +++ b/MouseSdk/MouseSdk/Ble/DeviceManger.h @@ -17,11 +17,11 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic,strong)void (^authCallBack)(BOOL isSuccess);/// 鉴权回调 @property (nonatomic, copy)void (^aiMouseSendDeviceInfoDataCallBack)(NSString *data);/// 设备信息数据回调 @property (nonatomic, copy)void (^aiMouseSendCmdDataCallBack)(NSString *data);/// 鼠标按键指令回调 -///录音相关 + @property (nonatomic, copy)void (^begainRecoredCallBack)(void);/// 录音开始回调 @property (nonatomic, copy)void (^recordingCallBack)(NSString *data);/// 录音进行中回调 @property (nonatomic, copy)void (^finishRecoredCallBack)(NSString *data);/// 录音结束回调 -///其他 + @property (nonatomic, copy)void (^aiMouseAddLogCallBack)(NSString *log);///输出日志 diff --git a/MouseSdk/MouseSdk/Ble/DeviceManger.m b/MouseSdk/MouseSdk/Ble/DeviceManger.m index b8e24af..c53275e 100644 --- a/MouseSdk/MouseSdk/Ble/DeviceManger.m +++ b/MouseSdk/MouseSdk/Ble/DeviceManger.m @@ -11,13 +11,17 @@ #import "TlwMouseSdk.h" #import "TimerManager.h" -@interface DeviceManger() +@interface DeviceManger() @property (nonatomic, strong) AiMouseDeviceInfo *deviceInfo; @property (nonatomic,strong) NSMutableData *recordData;//录音的数据 @property (nonatomic,strong) BleManager *ble; @property (nonatomic,strong) HidManager *hid; -@property (nonatomic,strong) NSString *mouseName; +@property (nonatomic,strong) NSArray *mouseNames; + +@property (nonatomic,strong) TlwMouse *tlwSdk; +@property (nonatomic,strong) AiMouse *frkSdk; + //connectType 返回为0代表蓝牙,为1代表usb @property (nonatomic, copy)void (^aiMouseConnectStateDidChangeCallBack)(int connectType, BOOL connected);/// 设备连接状态回调 @end @@ -27,8 +31,6 @@ static DeviceManger *manager = nil; static dispatch_once_t oncePredicate; dispatch_once(&oncePredicate, ^{ - - [[TlwMouse shared] setLogLevel:(TlwMouseLogLevel_info)]; manager = [[DeviceManger alloc]init]; }); @@ -38,29 +40,29 @@ - (instancetype)init{ self = [super init]; if (self) { - [[TlwMouse shared] setDelegate:self]; + self.tlwSdk = [[TlwMouse alloc] init]; + [self.tlwSdk setDelegate:self]; + [self.tlwSdk setLogLevel:(TlwMouseLogLevel_info)]; + + + [self setupBle]; [self setupHid]; [self setupTimer]; } return self; } - --(AiMouseConnectType)connectType{ - return [TlwMouse shared].connectType; -} - #pragma mark ------ 设备初始化 - (void)setupTimer{ [TimerManager shared].timerCallBack = ^{ [self showLog:@"timer action。。。"]; - if([TlwMouse shared].connected){ + if(self.tlwSdk.connected){ [self.ble stopScan]; // [self.hid close]; } else{ - if(self.mouseName.length > 0 ) { - [self.ble startScanWithName:self.mouseName]; + if(self.mouseNames.count > 0 ) { + [self.ble startScanWithName:self.mouseNames]; [self.hid open]; } } @@ -74,14 +76,14 @@ if (connected) { [ws.ble stopScan]; } - [[TlwMouse shared] switchConnect:AiMouseConnectType_hid isConnected:connected]; + [ws.tlwSdk switchConnect:AiMouseConnectType_hid isConnected:connected]; }; self.hid.receiveInfoDataCallBack = ^(NSData *data) { - [[TlwMouse shared] sendDeviceDataToSdk:data]; + [ws.tlwSdk sendDeviceDataToSdk:data]; }; self.hid.receiveVoiceDataCallBack = ^(NSData *data) { - [[TlwMouse shared] sendAiDataToSdk:data]; + [ws.tlwSdk sendAiDataToSdk:data]; }; self.hid.logCallBack = ^(NSString * _Nonnull log) { @@ -90,20 +92,20 @@ } - (void)setupBle{ - self.ble = [BleManager shared]; + self.ble = [[BleManager alloc] init]; __weak typeof(self) ws = self; self.ble.connectStateCallBack = ^(BOOL connected) { if (connected) { [ws.hid close]; } - [[TlwMouse shared] switchConnect:AiMouseConnectType_bluetooth isConnected:connected]; + [ws.tlwSdk switchConnect:AiMouseConnectType_bluetooth isConnected:connected]; }; self.ble.receiveInfoDataCallBack = ^(NSData *data) { - [[TlwMouse shared] sendDeviceDataToSdk:data]; + [ws.tlwSdk sendDeviceDataToSdk:data]; }; self.ble.receiveVoiceDataCallBack = ^(NSData *data) { - [[TlwMouse shared] sendAiDataToSdk:data]; + [ws.tlwSdk sendAiDataToSdk:data]; }; self.ble.logCallBack = ^(NSString * _Nonnull log) { @@ -114,22 +116,26 @@ #pragma mark ------ 设备相关接口 - (NSString *)getCurrentConnectType { - if ([TlwMouse shared].connectType == AiMouseConnectType_bluetooth) { + if (self.tlwSdk.connectType == AiMouseConnectType_bluetooth) { return @"0"; } else { return @"1"; } } +-(AiMouseConnectType)connectType{ + return self.tlwSdk.connectType; +} + - (void)begainMonitorAiMouseConnectStateDidChange:(NSString *)mouseName callBack:(void(^)(int connectType, BOOL connected))callBack{ self.aiMouseConnectStateDidChangeCallBack = callBack; - self.mouseName = mouseName; + self.mouseNames = @[mouseName]; } ///获取设备信息 - (void)getDeviceInfo:(void (^)(AiMouseDeviceInfo *deviceInfo,NSError *error))completation{ [self showLog:@"getDeviceInfo request"]; - [[TlwMouse shared] getDeviceInfo:^(TlwDeviceInfo *deviceInfo, NSError *error) { + [self.tlwSdk getDeviceInfo:^(TlwDeviceInfo *deviceInfo, NSError *error) { NSString *CPI_list = @"800,1200,1800,2400";// 1-4,800 1200 1800 2400 NSString *cpi = [[CPI_list componentsSeparatedByString:@","] objectAtIndex:deviceInfo.DPI - 1]; @@ -167,7 +173,7 @@ if (dict[[NSString stringWithFormat:@"%ld",value]]) { int num = [dict[[NSString stringWithFormat:@"%ld",value]] intValue]; - [[TlwMouse shared] setDPI:num completation:finished]; + [self.tlwSdk setDPI:num completation:finished]; } else{ [self showLog:[NSString stringWithFormat:@"CPI值设置错误 %ld",value]]; @@ -180,78 +186,87 @@ /// - value: 品牌名称 /// - finished: 设置结果回调 - (void)setBrand:(NSString *)brand completation:(void (^)(BOOL isSuccess,NSError *error))finished { -// [[TlwMouse shared] setBrand:brand completation:finished]; +// [self.tlwSdk setBrand:brand completation:finished]; finished(false,[NSError errorWithDomain:@"AiMouse SDK Error" code:AiMouseErrorCode_unknown userInfo:@{@"NSLocalizedDescriptionKey":@"请求失败"}]); } /// 设置录音模式 - (void)setRecordMode:(int)mode completation:(void (^)(BOOL isSuccess,NSError *error))finished{ -// [[TlwMouse shared] setRecordMode:mode completation:finished]; +// [self.tlwSdk setRecordMode:mode completation:finished]; finished(false,[NSError errorWithDomain:@"AiMouse SDK Error" code:AiMouseErrorCode_unknown userInfo:@{@"NSLocalizedDescriptionKey":@"请求失败"}]); } /// 设置长按滚轮弹出的网页地址 - (void)setUrl:(NSString *)url completation:(void (^)(BOOL isSuccess,NSError *error))finished{ -// [[TlwMouse shared] setUrl:url completation:finished]; +// [self.tlwSdk setUrl:url completation:finished]; finished(false,[NSError errorWithDomain:@"AiMouse SDK Error" code:AiMouseErrorCode_unknown userInfo:@{@"NSLocalizedDescriptionKey":@"请求失败"}]); } /// 设置长按滚轮弹出网页开关 - (void)setUrlState:(int)state completation:(void (^)(BOOL isSuccess,NSError *error))finished{ -// [[TlwMouse shared] setUrlState:state completation:finished]; +// [self.tlwSdk setUrlState:state completation:finished]; finished(false,[NSError errorWithDomain:@"AiMouse SDK Error" code:AiMouseErrorCode_unknown userInfo:@{@"NSLocalizedDescriptionKey":@"请求失败"}]); } /// 设置鼠标连接模式 - (void)setMouseMode:(int)mode completation:(void (^)(BOOL isSuccess,NSError *error))finished{ -// [[TlwMouse shared] setMouseMode:mode completation:finished]; +// [self.tlwSdk setMouseMode:mode completation:finished]; finished(false,[NSError errorWithDomain:@"AiMouse SDK Error" code:AiMouseErrorCode_unknown userInfo:@{@"NSLocalizedDescriptionKey":@"请求失败"}]); } /// 获取录音模式 - (void)getRecordMode:(void (^)(int mode,NSError *error))finished{ -// [[TlwMouse shared] getRecordMode:complete]; +// [self.tlwSdk getRecordMode:complete]; finished(false,[NSError errorWithDomain:@"AiMouse SDK Error" code:AiMouseErrorCode_unknown userInfo:@{@"NSLocalizedDescriptionKey":@"请求失败"}]); } /// 获取长按滚轮弹出的网页地址 - (void)getUrl:(void (^)(NSString *url,NSError *error))finished{ -// [[TlwMouse shared] getUrl:complete]; +// [self.tlwSdk getUrl:complete]; finished(false,[NSError errorWithDomain:@"AiMouse SDK Error" code:AiMouseErrorCode_unknown userInfo:@{@"NSLocalizedDescriptionKey":@"请求失败"}]); } /// 获取长按滚轮弹出的网页地址开关状态 - (void)getUrlState:(void (^)(int state,NSError *error))finished{ -// [[TlwMouse shared] getUrlState:complete]; +// [self.tlwSdk getUrlState:complete]; finished(false,[NSError errorWithDomain:@"AiMouse SDK Error" code:AiMouseErrorCode_unknown userInfo:@{@"NSLocalizedDescriptionKey":@"请求失败"}]); } /// 获取鼠标连接模式 - (void)getMouseModel:(void (^)(int mode,NSError *error))finished{ -// [[TlwMouse shared] getMouseModel:complete]; +// [self.tlwSdk getMouseModel:complete]; finished(0,[NSError errorWithDomain:@"AiMouse SDK Error" code:AiMouseErrorCode_unknown userInfo:@{@"NSLocalizedDescriptionKey":@"请求失败"}]); } /// 打开录音 - (void)openRecord:(void (^)(BOOL isSuccess,NSError *error))finished{ - [[TlwMouse shared] openRecord:finished]; + [self.tlwSdk openRecord:finished]; } /// 关闭录音 - (void)closeRecord:(void (^)(BOOL isSuccess,NSError *error))finished{ - [[TlwMouse shared] closeRecord:finished]; + [self.tlwSdk closeRecord:finished]; } #pragma mark - TlwMouseDelegate +// 连接状态改变 +- (void)tlwMouseConnectStateDidChange:(BOOL)connected{ + [self showLog:[NSString stringWithFormat:@"%@设备连接状态返回: %@",self.tlwSdk.connectType == AiMouseConnectType_bluetooth ? @"蓝牙 ":@"USB",connected ? @"true":@"false"]]; + + if (self.aiMouseConnectStateDidChangeCallBack) { + self.aiMouseConnectStateDidChangeCallBack(self.tlwSdk.connectType == AiMouseConnectType_bluetooth ? 0:1,connected); + } + if(self.authCallBack && connected)self.authCallBack(connected); +} /// 设备信息数据回调,需要将此数据通过设备信息特征转发给蓝牙设备 /// - Parameter data: 数据 -(void)tlwMouseSendDeviceInfoData:(NSData *)data{ - if ([TlwMouse shared].connectType == AiMouseConnectType_bluetooth) { + if (self.tlwSdk.connectType == AiMouseConnectType_bluetooth) { [self.ble writeToDevice:data]; } - else if ([TlwMouse shared].connectType == AiMouseConnectType_hid){ + else if (self.tlwSdk.connectType == AiMouseConnectType_hid){ [self.hid writeToDevice:data]; } @@ -324,7 +339,6 @@ [self showLog:@"结束录音"]; [self finishRecored:self.recordData]; if (self.finishRecoredCallBack) { - // 将NSData转换为Base64编码的字符串 NSString *base64String = [self.recordData base64EncodedStringWithOptions:0]; self.finishRecoredCallBack(base64String); } @@ -337,41 +351,102 @@ [self.recordData appendData:data]; if (self.recordingCallBack) { // 将NSData转换为Base64编码的字符串 - NSString *base64String = [data base64EncodedStringWithOptions:0]; - self.recordingCallBack(base64String); + self.recordingCallBack( [data base64EncodedStringWithOptions:0]); } } /// 输出日志 -- (void)aiMouseAddLog:(NSString *)log { +- (void)tlwMouseAddLog:(NSString *)log { if (self.aiMouseAddLogCallBack) { self.aiMouseAddLogCallBack(log); } } -// 连接状态改变 -- (void)tlwMouseConnectStateDidChange:(BOOL)connected{ - [self showLog:@"连接结果回调"]; - [self showLog:[NSString stringWithFormat:@"%@设备连接状态返回: %@",[TlwMouse shared].connectType == AiMouseConnectType_bluetooth ? @"蓝牙 ":@"USB",connected ? @"true":@"false"]]; +#pragma mark - AiMouseDelegate +/// 设备连接状态 +/// - Parameter connected: 是否连接 +- (void)aiMouseConnectStateDidChange:(BOOL)connected{ + [self showLog:[NSString stringWithFormat:@"%@设备连接状态返回: %@",self.frkSdk.connectType == AiMouseConnectType_bluetooth ? @"蓝牙 ":@"USB",connected ? @"true":@"false"]]; - [self showLog:@"准备连接回调"]; if (self.aiMouseConnectStateDidChangeCallBack) { - [self showLog:@"连接回调"]; - self.aiMouseConnectStateDidChangeCallBack([TlwMouse shared].connectType == AiMouseConnectType_bluetooth ? 0:1,connected); - [self showLog:@"连接回调结束"]; - } - [self showLog:@"准备鉴权回调"]; - if (connected == true) { - [self showLog:@"鉴权回调"]; + self.aiMouseConnectStateDidChangeCallBack(self.frkSdk.connectType == AiMouseConnectType_bluetooth ? 0:1,connected); } if(self.authCallBack && connected)self.authCallBack(connected); - [self showLog:@"鉴权回调结束"]; } +/// 鉴权结果返回 +/// - Parameter authState: 鉴权状态 +- (void)aiMouseAuthenticationResult:(AiMouseAuthState)authState{ + //千寻暂时去掉鉴权 +} + +/// 设备信息数据回调,需要将此数据通过设备信息特征转发给蓝牙设备 +/// - Parameter data: 数据 +- (void)aiMouseSendDeviceInfoData:(NSData *)data{ + if (self.frkSdk.connectType == AiMouseConnectType_bluetooth) { + [self.ble writeToDevice:data]; + } + else if (self.frkSdk.connectType == AiMouseConnectType_hid){ + [self.hid writeToDevice:data]; + } +} + +/// 鼠标按键指令回调 +/// - Parameter data: 数据。 +/// 前 第一次单击31(开始录音), 第二次单击32(结束录音) , 按下21(开始录音)抬起22(结束录音) +/// 中 单击42, 按下25(开始录音)抬起26(结束录音) +/// 后 单击43,按下27(开始录音)抬起28(结束录音) +/// 其他未定义 +- (void)aiMouseSendCmdData:(NSData *)data{ + uint8 cmd; + [data getBytes:&cmd length:1]; + + if (self.aiMouseSendCmdDataCallBack) { + self.aiMouseSendCmdDataCallBack([NSString stringWithFormat:@"%X",cmd]); + } + + if(cmd == 0x31 || cmd == 0x21 || cmd == 0x25 ||cmd == 0x27){ + [self showLog:@"开始录音"]; + self.recordData = [[NSMutableData alloc] init]; + if (self.begainRecoredCallBack) { + self.begainRecoredCallBack(); + } + } + else if(cmd == 0x32 || cmd == 0x22 || cmd == 0x26 ||cmd == 0x28){ + [self showLog:@"结束录音"]; + [self finishRecored:self.recordData]; + if (self.finishRecoredCallBack) { + NSString *base64String = [self.recordData base64EncodedStringWithOptions:0]; + self.finishRecoredCallBack(base64String); + } + } +} + +/// 录音回调 +/// - Parameter data: pcm格式语音数据 +- (void)aiMouseSendRecordData:(NSData *)data{ + [self.recordData appendData:data]; + if (self.recordingCallBack) { + self.recordingCallBack( [data base64EncodedStringWithOptions:0]); + } +} + +/// 输出sdk日志 +/// - Parameter log: 日志 +- (void)aiMouseAddLog:(NSString *)log{ + if (self.aiMouseAddLogCallBack) { + self.aiMouseAddLogCallBack(log); + } +} + +/// hid数据异常,需要重新开启监听usb设备 +- (void)hidDataError{ + [self.hid open]; +} +#pragma mark - other - (void)showLog:(NSString *)log{ NSLog(@"[AiMouseSdk] %@",log); } -//将录音数据保存 - (void)finishRecored:(NSData *)data{ NSString *doc = NSTemporaryDirectory(); NSString *fullPath = [NSString stringWithFormat:@"%@1.pcm",doc]; diff --git a/MouseSdk/MouseSdk/ScanVC.m b/MouseSdk/MouseSdk/ScanVC.m index f06526a..f48e05a 100644 --- a/MouseSdk/MouseSdk/ScanVC.m +++ b/MouseSdk/MouseSdk/ScanVC.m @@ -8,7 +8,6 @@ #import "ScanVC.h" #import "ScanCell.h" #import "DeviceManger.h" -#import "BleManager.h" @interface ScanVC () @property (nonatomic,strong) NSTableView *tableView; @property (nonatomic,strong) NSMutableArray *scanArray; @@ -68,9 +67,9 @@ } - (void)setupBleManger{ - BleManager *manager = [BleManager shared]; - __weak typeof(self) weakSelf= self; - __weak typeof(BleManager) *weakManager = manager; +// BleManager *manager = [BleManager shared]; +// __weak typeof(self) weakSelf= self; +// __weak typeof(BleManager) *weakManager = manager; // manager.discoverDevice = ^(CBPeripheral *peripheral){ // if ([weakSelf.scanArray containsObject:peripheral]){ // return; diff --git a/MouseSdk/MouseSdk/TlwScanVC.m b/MouseSdk/MouseSdk/TlwScanVC.m index 603c230..a5ccafc 100644 --- a/MouseSdk/MouseSdk/TlwScanVC.m +++ b/MouseSdk/MouseSdk/TlwScanVC.m @@ -8,7 +8,6 @@ #import "TlwScanVC.h" #import "ScanCell.h" -#import "TlwDeviceManger.h" @interface TlwScanVC () @property (nonatomic,strong) NSTableView *tableView; @property (nonatomic,strong) NSMutableArray *scanArray;