From: liangzhenying <867174124@qq.com> Date: Tue, 19 Mar 2024 12:24:53 +0000 (+0800) Subject: 增加获取设备信息指令 X-Git-Tag: 阿里鉴权~12 X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=1e0e294d049f8aae12c096b27f217985537f32dd;p=mirrors%2FMouseSdk-MacOS.git 增加获取设备信息指令 --- diff --git a/MouseSdk/AiMouseSdk/AiAudioManager.m b/MouseSdk/AiMouseSdk/AiAudioManager.m index d0d96d1..1b6d808 100644 --- a/MouseSdk/AiMouseSdk/AiAudioManager.m +++ b/MouseSdk/AiMouseSdk/AiAudioManager.m @@ -6,7 +6,7 @@ // #import "AiAudioManager.h" -#import "AiTools.h" +#import "AiMouseTools.h" #import "AiAudioDecoder.h" @interface AiAudioManager () @@ -24,7 +24,7 @@ - (void)receiveData:(NSData *)data{ [self.audioDecoder decodeSBCData:data]; -// NSString *str = [[AiTools dataToHexString:data] lowercaseString]; +// NSString *str = [[AiMouseTools dataToHexString:data] lowercaseString]; // NSString *cmd = [str substringWithRange:NSMakeRange(0, 12)]; // if([cmd hasPrefix:@"0a"] && [cmd hasSuffix:@"31"]){ //// 0x0a6500002a3100020101c0c1a5a5a5a5 @@ -48,7 +48,7 @@ self.audioDecoder = [AiAudioDecoder sharedInstance]; __weak typeof(self) ws = self; self.audioDecoder.onRecvPCMData = ^(NSData * _Nonnull pcmData) { -// [ws showLog:[NSString stringWithFormat:@"转换后数据%@",[AiTools dataToHexString:pcmData]]]; +// [ws showLog:[NSString stringWithFormat:@"转换后数据%@",[AiMouseTools dataToHexString:pcmData]]]; if(ws.audioRecordCallBack)ws.audioRecordCallBack(pcmData); }; [self.audioDecoder initSBCDecodec]; diff --git a/MouseSdk/AiMouseSdk/AiAuthManager.m b/MouseSdk/AiMouseSdk/AiAuthManager.m index a805fb1..0a9b99a 100644 --- a/MouseSdk/AiMouseSdk/AiAuthManager.m +++ b/MouseSdk/AiMouseSdk/AiAuthManager.m @@ -7,7 +7,7 @@ #import "AiAuthManager.h" #import -#import "AiTools.h" +#import "AiMouseTools.h" @interface AiAuthManager () @property (nonatomic, strong) dispatch_queue_t bizbus_connect_queue; @property (nonatomic, strong) AliConnectMananger_C * bizbusManager; @@ -57,7 +57,7 @@ #pragma mark - BleNeedSendDataDelegate_C - (void)sendBleDataWithData:(NSData * _Nonnull)data { - [self showLog:[NSString stringWithFormat:@"[bizbus send json] %@",[AiTools dataToUtf8String:data]]]; + [self showLog:[NSString stringWithFormat:@"[bizbus send json] %@",[AiMouseTools dataToUtf8String:data]]]; __weak typeof(self) ws = self; dispatch_async(_bizbus_connect_queue, ^{ if (ws.outputData) ws.outputData(data); @@ -66,7 +66,7 @@ #pragma mark - pub api - (void)receiveData:(NSData *)data { - [self showLog:[NSString stringWithFormat:@"[bizbus receive json] %@",[AiTools dataToUtf8String:data]]]; + [self showLog:[NSString stringWithFormat:@"[bizbus receive json] %@",[AiMouseTools dataToUtf8String:data]]]; __weak typeof(self) ws = self; dispatch_async(_bizbus_connect_queue, ^{ [ws.bizbusManager bleDataReceivedWithData:data]; diff --git a/MouseSdk/AiMouseSdk/AiFrameManager.m b/MouseSdk/AiMouseSdk/AiFrameManager.m index 453a9cc..e02fdad 100644 --- a/MouseSdk/AiMouseSdk/AiFrameManager.m +++ b/MouseSdk/AiMouseSdk/AiFrameManager.m @@ -6,7 +6,7 @@ // #import "AiFrameManager.h" -#import "AiTools.h" +#import "AiMouseTools.h" @interface AiFrameManager() @property (nonatomic,strong)NSMutableData *recvData; @@ -14,7 +14,7 @@ @implementation AiFrameManager - (void)didReceiveFrameData:(NSData *)data{ - NSString *str = [AiTools dataToUtf8String:data]; + NSString *str = [AiMouseTools dataToUtf8String:data]; if ([str isEqualTo:@"-$$"]) { //开始 self.recvData = [[NSMutableData alloc] init]; diff --git a/MouseSdk/AiMouseSdk/AiMouse.h b/MouseSdk/AiMouseSdk/AiMouse.h index 49d6cdf..49a6812 100644 --- a/MouseSdk/AiMouseSdk/AiMouse.h +++ b/MouseSdk/AiMouseSdk/AiMouse.h @@ -6,8 +6,7 @@ // #import - -NS_ASSUME_NONNULL_BEGIN +#import typedef NS_ENUM(NSInteger,AiMouseAuthState) { AiMouseAuthState_Unknow = 0,///未知 @@ -25,6 +24,10 @@ typedef NS_ENUM(NSInteger,AiMouseAuthState) { /// - Parameter data: 数据 - (void)aiMouseSendAuthData:(NSData *)data; +/// 设备信息数据回调,需要将此数据通过设备信息特征转发给蓝牙设备 +/// - Parameter data: 数据 +- (void)aiMouseSendDeviceInfoData:(NSData *)data; + /// 鼠标按键指令回调 /// - Parameter data: 数据。AI键0x42 单击 0x25 按下(开始录音) 0x26抬起(结束录音); 语音键0x31开始录音,0x32结束录音;OCR 按键 单击 0x41;其他未定义 - (void)aiMouseSendCmdData:(NSData *)data; @@ -53,6 +56,19 @@ typedef NS_ENUM(NSInteger,AiMouseAuthState) { /// 传输业务数据给sdk /// - Parameter data:ai特征传过来的数据 - (void)sendAiDataToSdk:(NSData *)data; + +/// 传输设备信息数据给sdk +/// - Parameter data:设备信息特征传过来的数据 +- (void)sendDeviceDataToSdk:(NSData *)data; + +/// 获取设备信息 +/// - Parameter completation: 如果获取成功,则deviceInfo有值,否则为空 +- (void)getDeviceInfo:(void (^)(AiMouseDeviceInfo *deviceInfo,NSError *error))completation; + +/// 设置CPI +/// - Parameters: +/// - value: AiMouseDeviceInfo 中可以设置的值CPI_list +/// - finished: 设置结果回调 +- (void)setCPI:(NSInteger)value completation:(void (^)(BOOL isSuccess,NSError *error))finished; @end -NS_ASSUME_NONNULL_END diff --git a/MouseSdk/AiMouseSdk/AiMouse.m b/MouseSdk/AiMouseSdk/AiMouse.m index 0c08a72..f0c35e1 100644 --- a/MouseSdk/AiMouseSdk/AiMouse.m +++ b/MouseSdk/AiMouseSdk/AiMouse.m @@ -9,12 +9,16 @@ #import "AiFrameManager.h" #import "AiAuthManager.h" #import "AiAudioManager.h" -#import "AiTools.h" +#import "AiMouseTools.h" +#import "AiMouseDeviceInfo.h" @interface AiMouse() @property (nonatomic, strong) AiFrameManager *frameManager; @property (nonatomic, strong) AiAuthManager *authManager; @property (nonatomic, strong) AiAudioManager *audioManager; +@property (nonatomic, strong) AiMouseDeviceInfo *deviceInfo; +@property (nonatomic, strong) void (^deviceInfoBlock)(AiMouseDeviceInfo *deviceInfo,NSError *error); +@property (nonatomic, strong) void (^setCPIBlock)(BOOL isSuccess,NSError *error); @end @implementation AiMouse @@ -93,9 +97,9 @@ } - (void)sendAiDataToSdk:(NSData *)data{ - NSString *str = [[AiTools dataToHexString:data] lowercaseString]; + NSString *str = [[AiMouseTools dataToHexString:data] lowercaseString]; NSString *cmd = [str substringWithRange:NSMakeRange(0, 12)]; -// 0A65004E003200010101C0C10000A5A5 + // 0A65004E003200010101C0C10000A5A5 if(data.length == 16){ NSData *cmd = [data subdataWithRange:NSMakeRange(5, 1)]; [self sendCmdData:cmd]; @@ -109,12 +113,79 @@ } } +-(void)sendDeviceDataToSdk:(NSData *)data{ + NSLog(@"======%@",[AiMouseTools dataToUtf8String:data]); + NSDictionary *dict = [AiMouseTools dataToDictionary:data]; + if(dict[@"set_config"]){ + if([dict[@"set_config"] intValue] == 1){ + if(self.setCPIBlock)self.setCPIBlock(true, nil); + } + else{ + if(self.setCPIBlock)self.setCPIBlock(false, [NSError errorWithDomain:@"AiMouse SDK Error" code:-1 userInfo:@{@"NSLocalizedDescriptionKey":@"设置cpi失败"}]); + } + } + else{ + if (dict[@"battery_power"]) { + self.deviceInfo.battery_power = dict[@"battery_power"]; + [self sendDeviceInfoData:[AiMouseTools dictionaryToData:@{@"cmd":@"get_CPI"}]]; + } + else if(dict[@"CPI"]) { + self.deviceInfo.CPI = dict[@"CPI"]; + [self sendDeviceInfoData:[AiMouseTools dictionaryToData:@{@"cmd":@"get_CPI_list"}]]; + } + else if(dict[@"CPI_list"]) { + self.deviceInfo.CPI_list = dict[@"CPI_list"]; + [self sendDeviceInfoData:[AiMouseTools dictionaryToData:@{@"cmd":@"get_version"}]]; + } + else if(dict[@"version"]) { + self.deviceInfo.version = dict[@"version"]; + [self sendDeviceInfoData:[AiMouseTools dictionaryToData:@{@"cmd":@"get_brand"}]]; + } + else if(dict[@"brand"]) { + self.deviceInfo.brand = dict[@"brand"]; + [self sendDeviceInfoData:[AiMouseTools dictionaryToData:@{@"cmd":@"get_SN"}]]; + } + else if(dict[@"SN"]) { + self.deviceInfo.sn = dict[@"SN"]; + [self sendDeviceInfoData:[AiMouseTools dictionaryToData:@{@"cmd":@"get_MAC"}]]; + } + else if(dict[@"MAC"]) { + self.deviceInfo.mac = dict[@"MAC"]; + if(self.deviceInfoBlock){ + self.deviceInfoBlock(self.deviceInfo, nil); + } + } + else{ + if(self.deviceInfoBlock){ + self.deviceInfoBlock(nil, [NSError errorWithDomain:@"AiMouse SDK Error" code:-1 userInfo:@{@"NSLocalizedDescriptionKey":@"获取设备信息失败"}]); + } + } + } + +} +- (void)getDeviceInfo:(void (^)(AiMouseDeviceInfo *deviceInfo,NSError *error))completation{ + self.deviceInfo = [[AiMouseDeviceInfo alloc] init]; + self.deviceInfoBlock = completation; + NSData *data = [AiMouseTools dictionaryToData:@{@"cmd":@"get_battery_power"}]; + [self sendDeviceInfoData:data]; +} + +- (void)setCPI:(NSInteger)value completation:(void (^)(BOOL isSuccess,NSError *error))finished{ + self.setCPIBlock = finished; + NSData *data = [AiMouseTools dictionaryToData:@{@"cmd":@"set_config",@"set_CPI":[NSString stringWithFormat:@"%ld",value]}]; + [self sendDeviceInfoData:data]; +} #pragma mark - other - (void)sendAuthData:(NSData *)data{ if (self.delegate) { [self.delegate aiMouseSendAuthData:data]; } } +- (void)sendDeviceInfoData:(NSData *)data{ + if (self.delegate) { + [self.delegate aiMouseSendDeviceInfoData:data]; + } +} - (void)sendRecordData:(NSData *)data{ if (self.authState != AiMouseAuthState_Success) return; @@ -134,14 +205,21 @@ if (self.delegate) { [self.delegate aiMouseAuthStateDidChange:self.authState]; } + [self setAuthStateToDevice:isSuccess]; } - (void)showLog:(NSString *)log{ -// NSLog(@"[sdk]%@",log); + // NSLog(@"[sdk]%@",log); } - (void)sendTestLP{ NSString *cmd = @"7B22736964223A22464753222C22766572223A312C2264617461223A227B5C227369647665725C223A312C5C226D73675F747970655C223A5C224647535F4D53475F545950455F53544152545F4647535F5245515C227D227D"; - NSData *data = [AiTools hexStringToData:cmd]; + NSData *data = [AiMouseTools hexStringToData:cmd]; [self sendAuthData:data]; } + +#pragma mark - deviceInfo +- (void)setAuthStateToDevice:(BOOL)isSuccess{ + NSData *data = [AiMouseTools dictionaryToData:@{@"cmd":@"set_config",@"set_activated_dtate":isSuccess?@"1":@"0"}]; + [self sendDeviceInfoData:data]; +} @end diff --git a/MouseSdk/AiMouseSdk/AiMouseDeviceInfo.h b/MouseSdk/AiMouseSdk/AiMouseDeviceInfo.h new file mode 100644 index 0000000..55e48da --- /dev/null +++ b/MouseSdk/AiMouseSdk/AiMouseDeviceInfo.h @@ -0,0 +1,22 @@ +// +// AiMouseDeviceInfo.h +// AiMouseSdk +// +// Created by incar on 2024/3/19. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface AiMouseDeviceInfo : NSObject +@property (nonatomic, strong) NSString *battery_power;/// 电池百分百电量,0-100 +@property (nonatomic, strong) NSString *CPI;/// CPI值 +@property (nonatomic, strong) NSString *CPI_list;/// 可设置的CPI参数列表 +@property (nonatomic, strong) NSString *version;///软件版本 +@property (nonatomic, strong) NSString *brand;/// 品牌名称 +@property (nonatomic, strong) NSString *sn;/// 设备序列号 +@property (nonatomic, strong) NSString *mac;///设备MAC地址 +@end + +NS_ASSUME_NONNULL_END diff --git a/MouseSdk/AiMouseSdk/AiMouseDeviceInfo.m b/MouseSdk/AiMouseSdk/AiMouseDeviceInfo.m new file mode 100644 index 0000000..00da69d --- /dev/null +++ b/MouseSdk/AiMouseSdk/AiMouseDeviceInfo.m @@ -0,0 +1,13 @@ +// +// AiMouseDeviceInfo.m +// AiMouseSdk +// +// Created by incar on 2024/3/19. +// + +#import "AiMouseDeviceInfo.h" + +@implementation AiMouseDeviceInfo + + +@end diff --git a/MouseSdk/AiMouseSdk/AiMouseSdk.h b/MouseSdk/AiMouseSdk/AiMouseSdk.h index 68bada9..cf5694d 100644 --- a/MouseSdk/AiMouseSdk/AiMouseSdk.h +++ b/MouseSdk/AiMouseSdk/AiMouseSdk.h @@ -16,4 +16,4 @@ // In this header, you should import all the public headers of your framework using statements like #import #import -#import +#import diff --git a/MouseSdk/AiMouseSdk/AiTools.h b/MouseSdk/AiMouseSdk/AiMouseTools.h similarity index 92% rename from MouseSdk/AiMouseSdk/AiTools.h rename to MouseSdk/AiMouseSdk/AiMouseTools.h index 6384357..ac571ef 100644 --- a/MouseSdk/AiMouseSdk/AiTools.h +++ b/MouseSdk/AiMouseSdk/AiMouseTools.h @@ -1,5 +1,5 @@ // -// AiTools.h +// AiMouseTools.h // AiMouse // // Created by incar on 2024/2/28. @@ -9,7 +9,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface AiTools : NSObject +@interface AiMouseTools : NSObject + (NSArray *)stringToArray:(NSString *)jsonString; + (NSString *)arrayToString:(NSArray *)arr; diff --git a/MouseSdk/AiMouseSdk/AiTools.m b/MouseSdk/AiMouseSdk/AiMouseTools.m similarity index 98% rename from MouseSdk/AiMouseSdk/AiTools.m rename to MouseSdk/AiMouseSdk/AiMouseTools.m index 9acafb4..32618f4 100644 --- a/MouseSdk/AiMouseSdk/AiTools.m +++ b/MouseSdk/AiMouseSdk/AiMouseTools.m @@ -1,13 +1,13 @@ // -// AiTools.m +// AiMouseTools.m // AiMouse // // Created by incar on 2024/2/28. // -#import "AiTools.h" +#import "AiMouseTools.h" -@implementation AiTools +@implementation AiMouseTools + (NSArray *)stringToArray:(NSString *)jsonString{ NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; NSError *error; diff --git a/MouseSdk/MouseSdk.xcodeproj/project.pbxproj b/MouseSdk/MouseSdk.xcodeproj/project.pbxproj index e1c27a6..1bbbde2 100644 --- a/MouseSdk/MouseSdk.xcodeproj/project.pbxproj +++ b/MouseSdk/MouseSdk.xcodeproj/project.pbxproj @@ -22,6 +22,8 @@ 18BF1E8A2B8362D300B8D90F /* AiMouseSdk.h in Headers */ = {isa = PBXBuildFile; fileRef = 18BF1E892B8362D300B8D90F /* AiMouseSdk.h */; settings = {ATTRIBUTES = (Public, ); }; }; 18BF1E8D2B8362D300B8D90F /* AiMouseSdk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 18BF1E872B8362D300B8D90F /* AiMouseSdk.framework */; }; 18BF1E8E2B8362D300B8D90F /* AiMouseSdk.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 18BF1E872B8362D300B8D90F /* AiMouseSdk.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 18BF8F4E2BA9A7A4008F6933 /* AiMouseDeviceInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 18BF8F4C2BA9A7A4008F6933 /* AiMouseDeviceInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 18BF8F4F2BA9A7A4008F6933 /* AiMouseDeviceInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 18BF8F4D2BA9A7A4008F6933 /* AiMouseDeviceInfo.m */; }; 18CB080C2BA401D0005F5854 /* liblzma.5.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 18CB080B2BA401D0005F5854 /* liblzma.5.tbd */; }; 18CB089B2BA40282005F5854 /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = 18CB08102BA40282005F5854 /* version.h */; }; 18CB089C2BA40282005F5854 /* buffersrc.h in Headers */ = {isa = PBXBuildFile; fileRef = 18CB08112BA40282005F5854 /* buffersrc.h */; }; @@ -163,8 +165,8 @@ 18F323872B8F338300CABA2E /* AliIotConnectKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 18F3237D2B8F2EFC00CABA2E /* AliIotConnectKit.framework */; }; 18F3238E2B8F4F7300CABA2E /* AiAudioManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 18F3238C2B8F4F7300CABA2E /* AiAudioManager.h */; }; 18F3238F2B8F4F7300CABA2E /* AiAudioManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 18F3238D2B8F4F7300CABA2E /* AiAudioManager.m */; }; - 18F323952B8F525C00CABA2E /* AiTools.h in Headers */ = {isa = PBXBuildFile; fileRef = 18F323932B8F525C00CABA2E /* AiTools.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 18F323962B8F525C00CABA2E /* AiTools.m in Sources */ = {isa = PBXBuildFile; fileRef = 18F323942B8F525C00CABA2E /* AiTools.m */; }; + 18F323952B8F525C00CABA2E /* AiMouseTools.h in Headers */ = {isa = PBXBuildFile; fileRef = 18F323932B8F525C00CABA2E /* AiMouseTools.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 18F323962B8F525C00CABA2E /* AiMouseTools.m in Sources */ = {isa = PBXBuildFile; fileRef = 18F323942B8F525C00CABA2E /* AiMouseTools.m */; }; 18F323A82B9095D300CABA2E /* AiAudioConverter.h in Headers */ = {isa = PBXBuildFile; fileRef = 18F323A62B9095D300CABA2E /* AiAudioConverter.h */; }; 18F323A92B9095D300CABA2E /* AiAudioConverter.m in Sources */ = {isa = PBXBuildFile; fileRef = 18F323A72B9095D300CABA2E /* AiAudioConverter.m */; }; 18F323C42B93352000CABA2E /* AiAudioDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 18F323C22B93352000CABA2E /* AiAudioDecoder.h */; }; @@ -251,6 +253,8 @@ 18BF1E752B832D2E00B8D90F /* ScanVC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ScanVC.m; sourceTree = ""; }; 18BF1E872B8362D300B8D90F /* AiMouseSdk.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AiMouseSdk.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 18BF1E892B8362D300B8D90F /* AiMouseSdk.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiMouseSdk.h; sourceTree = ""; }; + 18BF8F4C2BA9A7A4008F6933 /* AiMouseDeviceInfo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiMouseDeviceInfo.h; sourceTree = ""; }; + 18BF8F4D2BA9A7A4008F6933 /* AiMouseDeviceInfo.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiMouseDeviceInfo.m; sourceTree = ""; }; 18CB080B2BA401D0005F5854 /* liblzma.5.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = liblzma.5.tbd; path = usr/lib/liblzma.5.tbd; sourceTree = SDKROOT; }; 18CB08102BA40282005F5854 /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = ""; }; 18CB08112BA40282005F5854 /* buffersrc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = buffersrc.h; sourceTree = ""; }; @@ -391,8 +395,8 @@ 18F323832B8F330100CABA2E /* AiAuthManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiAuthManager.m; sourceTree = ""; }; 18F3238C2B8F4F7300CABA2E /* AiAudioManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiAudioManager.h; sourceTree = ""; }; 18F3238D2B8F4F7300CABA2E /* AiAudioManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiAudioManager.m; sourceTree = ""; }; - 18F323932B8F525C00CABA2E /* AiTools.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiTools.h; sourceTree = ""; }; - 18F323942B8F525C00CABA2E /* AiTools.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiTools.m; sourceTree = ""; }; + 18F323932B8F525C00CABA2E /* AiMouseTools.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiMouseTools.h; sourceTree = ""; }; + 18F323942B8F525C00CABA2E /* AiMouseTools.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiMouseTools.m; sourceTree = ""; }; 18F323A62B9095D300CABA2E /* AiAudioConverter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiAudioConverter.h; sourceTree = ""; }; 18F323A72B9095D300CABA2E /* AiAudioConverter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiAudioConverter.m; sourceTree = ""; }; 18F323C22B93352000CABA2E /* AiAudioDecoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiAudioDecoder.h; sourceTree = ""; }; @@ -534,10 +538,12 @@ 18BF1E892B8362D300B8D90F /* AiMouseSdk.h */, 18AE9CDE2B99C71F00743515 /* AiMouse.h */, 18AE9CDF2B99C71F00743515 /* AiMouse.m */, + 18BF8F4C2BA9A7A4008F6933 /* AiMouseDeviceInfo.h */, + 18BF8F4D2BA9A7A4008F6933 /* AiMouseDeviceInfo.m */, 18F328DC2B9950E000CABA2E /* AiFrameManager.h */, 18F328DD2B9950E000CABA2E /* AiFrameManager.m */, - 18F323932B8F525C00CABA2E /* AiTools.h */, - 18F323942B8F525C00CABA2E /* AiTools.m */, + 18F323932B8F525C00CABA2E /* AiMouseTools.h */, + 18F323942B8F525C00CABA2E /* AiMouseTools.m */, 18F3238C2B8F4F7300CABA2E /* AiAudioManager.h */, 18F3238D2B8F4F7300CABA2E /* AiAudioManager.m */, 18F323822B8F330100CABA2E /* AiAuthManager.h */, @@ -881,6 +887,7 @@ 18CB09072BA40283005F5854 /* xvmc.h in Headers */, 18F328DE2B9950E000CABA2E /* AiFrameManager.h in Headers */, 18CB08C22BA40283005F5854 /* tree.h in Headers */, + 18BF8F4E2BA9A7A4008F6933 /* AiMouseDeviceInfo.h in Headers */, 18CB08A62BA40282005F5854 /* blowfish.h in Headers */, 18F323842B8F330100CABA2E /* AiAuthManager.h in Headers */, 18CB08B42BA40282005F5854 /* avutil.h in Headers */, @@ -889,7 +896,7 @@ 18CB08BD2BA40283005F5854 /* hwcontext_vaapi.h in Headers */, 18CB090D2BA40283005F5854 /* packet.h in Headers */, 18CB089E2BA40282005F5854 /* avfilter.h in Headers */, - 18F323952B8F525C00CABA2E /* AiTools.h in Headers */, + 18F323952B8F525C00CABA2E /* AiMouseTools.h in Headers */, 18CB08FF2BA40283005F5854 /* avcodec.h in Headers */, 18CB08B82BA40282005F5854 /* hwcontext_vdpau.h in Headers */, 18CB08D52BA40283005F5854 /* random_seed.h in Headers */, @@ -1175,7 +1182,8 @@ 18F323C52B93352000CABA2E /* AiAudioDecoder.m in Sources */, 18F323A92B9095D300CABA2E /* AiAudioConverter.m in Sources */, 18F328DF2B9950E000CABA2E /* AiFrameManager.m in Sources */, - 18F323962B8F525C00CABA2E /* AiTools.m in Sources */, + 18F323962B8F525C00CABA2E /* AiMouseTools.m in Sources */, + 18BF8F4F2BA9A7A4008F6933 /* AiMouseDeviceInfo.m in Sources */, 18AE9CE12B99C72000743515 /* AiMouse.m in Sources */, 18F323852B8F330100CABA2E /* AiAuthManager.m in Sources */, ); diff --git a/MouseSdk/MouseSdk.xcworkspace/xcuserdata/apple.xcuserdatad/UserInterfaceState.xcuserstate b/MouseSdk/MouseSdk.xcworkspace/xcuserdata/apple.xcuserdatad/UserInterfaceState.xcuserstate index 8c43101..68aa75f 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/BleManager.h b/MouseSdk/MouseSdk/BleManager.h index 3967af4..d98b352 100644 --- a/MouseSdk/MouseSdk/BleManager.h +++ b/MouseSdk/MouseSdk/BleManager.h @@ -7,11 +7,12 @@ #import #import +#import #define kDidConnectBleNotification @"kDidConnectBleNotification" #define kDidDisconnectBleNotification @"kDidDisconnectBleNotification" -NS_ASSUME_NONNULL_BEGIN + @interface BleManager : NSObject @property (nonatomic,strong)void (^discoverDevice)(CBPeripheral *peripheral) ;/// 扫描到设备 @@ -30,6 +31,8 @@ NS_ASSUME_NONNULL_BEGIN /// - Parameter peripheral: 蓝牙设备 - (void)connectPeripheral:(CBPeripheral *)peripheral; +/// 获取设备信息 +- (void)getDeviceInfo:(void (^)(AiMouseDeviceInfo *deviceInfo,NSError *error))completation; + @end -NS_ASSUME_NONNULL_END diff --git a/MouseSdk/MouseSdk/BleManager.m b/MouseSdk/MouseSdk/BleManager.m index 7238ff9..4e8679f 100644 --- a/MouseSdk/MouseSdk/BleManager.m +++ b/MouseSdk/MouseSdk/BleManager.m @@ -14,14 +14,17 @@ //ai特征 #define kAiUUID @"0783B03E-8535-B5A0-7140-A304D2194CB8" //鉴权特征 -//#define kAuthUUID @"0783B73E-8535-B5A0-7140-A304D2194CB7" -#define kAuthUUID @"0783B03E-8535-B5A0-7140-A304D2194CB7" +#define kAuthUUID @"0783B73E-8535-B5A0-7140-A304D2194CB7" +//#define kAuthUUID @"0783B03E-8535-B5A0-7140-A304D2194CB7" +//获取设备信息特征 +#define kDeviceInfoUUID @"0783B63E-8535-B5A0-7140-A304D2495CB6" @interface BleManager () @property(nonatomic, strong) CBCentralManager *centralManager;///蓝牙管理 @property(nonatomic, strong) CBPeripheral *connectPeripheral;//连接的设备 @property(nonatomic, strong) CBCharacteristic *authCha;//鉴权特征 @property(nonatomic, strong) CBCharacteristic *aiCha;//ai特征 +@property(nonatomic, strong) CBCharacteristic *deviceInfoCha;//设备信息特征 @property (nonatomic,strong) NSMutableData *recordData;//录音的数据 @end @@ -116,12 +119,16 @@ self.aiCha = characteristic; [peripheral setNotifyValue:YES forCharacteristic:characteristic]; } + else if ([characteristic.UUID.UUIDString isEqualToString:kDeviceInfoUUID]) { + self.deviceInfoCha = characteristic; + [peripheral setNotifyValue:YES forCharacteristic:characteristic]; + } } } //收到蓝牙数据 - (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error { NSData *data = characteristic.value; - [self showLog:[NSString stringWithFormat:@"[receive] %@",[AiTools dataToHexString:data]]]; + [self showLog:[NSString stringWithFormat:@"[receive] %@",[AiMouseTools dataToHexString:data]]]; if([characteristic.UUID.UUIDString isEqualToString:kAuthUUID]){ //鉴权数据 [[AiMouse shared] sendAuthDataToSdk:data]; @@ -130,6 +137,10 @@ //AI数据 [[AiMouse shared] sendAiDataToSdk:data]; } + else if([characteristic.UUID.UUIDString isEqualToString:kDeviceInfoUUID]){ + //设备信息数据 + [[AiMouse shared] sendDeviceDataToSdk:data]; + } } #pragma mark - AiDelegate @@ -144,13 +155,22 @@ /// 鉴权数据回调,需要将此数据转发给蓝牙设备 /// - Parameter data: 数据 - (void)aiMouseSendAuthData:(NSData *)data{ - [self showLog:[NSString stringWithFormat:@"[send] %@",[AiTools dataToHexString:data]]]; + [self showLog:[NSString stringWithFormat:@"[send] %@",[AiMouseTools dataToHexString:data]]]; [self.connectPeripheral writeValue:data forCharacteristic:self.authCha type:CBCharacteristicWriteWithoutResponse]; } + + +/// 设备信息数据回调,需要将此数据通过设备信息特征转发给蓝牙设备 +/// - Parameter data: 数据 +-(void)aiMouseSendDeviceInfoData:(NSData *)data{ + [self showLog:[NSString stringWithFormat:@"[send] %@",[AiMouseTools dataToHexString:data]]]; + [self.connectPeripheral writeValue:data forCharacteristic:self.deviceInfoCha type:CBCharacteristicWriteWithoutResponse]; +} + /// 鼠标按键指令回调 /// - Parameter data: 数据。AI键0x42 单击 0x25 按下(开始录音) 0x26抬起(结束录音); 语音键0x31开始录音,0x32结束录音;OCR 按键 单击 0x41;其他未定义 - (void)aiMouseSendCmdData:(NSData *)data{ - NSString *cmd = [[AiTools dataToHexString:data] lowercaseString]; + NSString *cmd = [[AiMouseTools dataToHexString:data] lowercaseString]; if([cmd hasSuffix:@"31"]){ [self showLog:@"录音键开始录音"]; self.recordData = [[NSMutableData alloc] init]; @@ -194,6 +214,10 @@ [self.centralManager connectPeripheral:peripheral options:@{CBConnectPeripheralOptionNotifyOnConnectionKey : [NSNumber numberWithBool:YES]}]; } +/// 获取设备信息 +- (void)getDeviceInfo:(void (^)(AiMouseDeviceInfo * _Nonnull, NSError * _Nonnull))completation{ + [[AiMouse shared] getDeviceInfo:completation]; +} #pragma mark - other //自动连接,获取已配对的蓝牙,取第一个连接 - (void)autoConnectDevice{ diff --git a/MouseSdk/MouseSdk/ViewController.m b/MouseSdk/MouseSdk/ViewController.m index 58c0008..a821b72 100644 --- a/MouseSdk/MouseSdk/ViewController.m +++ b/MouseSdk/MouseSdk/ViewController.m @@ -7,9 +7,10 @@ #import "ViewController.h" #import "ScanVC.h" -#import "AiTools.h" +#import "AiMouseTools.h" #import "BleManager.h" + @interface ViewController () @property(nonatomic,strong)NSTextField *connectLabel; @@ -37,7 +38,7 @@ self.title = @"AI SDK"; { - NSButton *btn = [[NSButton alloc]initWithFrame:NSMakeRect(100, self.view.bounds.size.height - 160, 100, 45)]; + NSButton *btn = [[NSButton alloc]initWithFrame:NSMakeRect(100, self.view.bounds.size.height - 100, 100, 45)]; btn.bordered = true; btn.title = @"扫描"; [btn setTarget:self]; @@ -63,6 +64,15 @@ self.autoLabel = label; [self.view addSubview:label]; } + { + NSButton *btn = [[NSButton alloc]initWithFrame:NSMakeRect(100, self.view.bounds.size.height - 200, 100, 45)]; + btn.bordered = true; + btn.title = @"获取设备信息"; + [btn setTarget:self]; + [btn setAction:@selector(getDeviceInfoAction)]; + btn.state = 1; + [self.view addSubview:btn]; + } } - (void)setupBleManger{ BleManager *manager = [BleManager shared]; @@ -77,8 +87,15 @@ [self presentViewControllerAsModalWindow:vc]; } -- (void)checkAuth{ -// [[BleManager shared] startAuthentication]; +- (void)getDeviceInfoAction{ + [[BleManager shared] getDeviceInfo:^(AiMouseDeviceInfo *deviceInfo, NSError *error) { + if (deviceInfo) { + NSLog(@"battery_power = %@,CPI = %@,CPI_list = %@,version = %@,brand = %@,sn = %@,mac = %@,",deviceInfo.battery_power,deviceInfo.CPI,deviceInfo.CPI_list,deviceInfo.version,deviceInfo.brand,deviceInfo.sn,deviceInfo.mac); + } + else{ + NSLog(@"get deivce info error == %@",error.description); + } + }]; } - (void)showAuthResult:(BOOL)isSuccess{