From: liangzhenying <867174124@qq.com> Date: Mon, 1 Apr 2024 02:33:10 +0000 (+0800) Subject: 新增设备管理类 X-Git-Tag: 阿里鉴权~5 X-Git-Url: http://git.snicker.com.cn/Users/apple/Desktop/static/gitweb.css?a=commitdiff_plain;h=e4ef871c803e2a62b26e2293bb4995cc065b1734;p=mirrors%2FMouseSdk-MacOS.git 新增设备管理类 --- diff --git a/MouseSdk/AiMouseSdk/AiFrameManager.h b/MouseSdk/AiMouseSdk/AiFrameManager.h index 03109a3..71a82db 100644 --- a/MouseSdk/AiMouseSdk/AiFrameManager.h +++ b/MouseSdk/AiMouseSdk/AiFrameManager.h @@ -14,6 +14,9 @@ NS_ASSUME_NONNULL_BEGIN /// 接收到数据帧 - (void)didReceiveFrameData:(NSData *)data; + +/// 收到hid鉴权收据 +- (void)didReceiveHidAuthData:(NSData *)data; @end NS_ASSUME_NONNULL_END diff --git a/MouseSdk/AiMouseSdk/AiFrameManager.m b/MouseSdk/AiMouseSdk/AiFrameManager.m index e02fdad..056c7f8 100644 --- a/MouseSdk/AiMouseSdk/AiFrameManager.m +++ b/MouseSdk/AiMouseSdk/AiFrameManager.m @@ -20,6 +20,8 @@ self.recvData = [[NSMutableData alloc] init]; } else if([str isEqualTo:@"$$-\n"]){ + NSString *str1 = [AiMouseTools dataToHexString:self.recvData]; + NSLog(@"收到完整数据 = %@",str1); //结束 if(self.didReceiveFullData){ self.didReceiveFullData(self.recvData); @@ -30,4 +32,35 @@ [self.recvData appendData:data]; } } + +- (void)didReceiveHidAuthData:(NSData *)data{ + NSString *str = [AiMouseTools dataToHexString:data]; + NSLog(@"收到数据 = %@",str); + if ([str hasPrefix:@"2D2424"]) { + //开始 + NSData *subData = [data subdataWithRange:NSMakeRange(3, data.length - 4)]; + NSString *str1 = [AiMouseTools dataToHexString:subData]; + NSLog(@"实收数据 = %@",str1); + self.recvData = [[NSMutableData alloc] initWithData:subData]; + } + else if([str hasSuffix:@"24242D0A"]){ + NSData *subData = [data subdataWithRange:NSMakeRange(0, data.length - 5)]; + NSString *str1 = [AiMouseTools dataToHexString:subData]; + NSLog(@"实收数据 = %@",str1); + [self.recvData appendData:subData]; + NSString *all = [AiMouseTools dataToUtf8String:self.recvData]; + NSLog(@"完整数据 %@\n %@",[AiMouseTools dataToHexString:self.recvData],all); + //结束 + if(self.didReceiveFullData){ + self.didReceiveFullData(self.recvData); + } + } + else{ + //数据 + NSData *subData = [data subdataWithRange:NSMakeRange(0, data.length - 1)]; + NSString *str1 = [AiMouseTools dataToHexString:subData]; + NSLog(@"实收数据 = %@",str1); + [self.recvData appendData:data]; + } +} @end diff --git a/MouseSdk/AiMouseSdk/AiMouse.m b/MouseSdk/AiMouseSdk/AiMouse.m index 25892f5..9a3f06b 100644 --- a/MouseSdk/AiMouseSdk/AiMouse.m +++ b/MouseSdk/AiMouseSdk/AiMouse.m @@ -164,10 +164,17 @@ NSString *str = [AiMouseTools dataToUtf8String:data]; NSString *str2 = [AiMouseTools2 fixDeviceData:str]; NSDictionary *dict = [AiMouseTools stringToDictionary:str2]; + + if(self.connectType == AiMouseConnectType_hid && dict == nil){ + [self.frameManager didReceiveHidAuthData:data]; + return; + } + if (dict == nil) { //鼠标移动数据,不处理 return; } + [self showLog:[NSString stringWithFormat:@"fix前 = %@",str]]; [self showLog:[NSString stringWithFormat:@"fix后 = %@",str2]]; if(dict[@"set_config"]){ @@ -236,8 +243,39 @@ } #pragma mark - other - (void)sendAuthData:(NSData *)data{ - if (self.delegate) { - [self.delegate aiMouseSendAuthData:data]; + if(self.connectType == AiMouseConnectType_bluetooth){ + NSString *str = [AiMouseTools dataToUtf8String:data]; + NSMutableString *str1 = [NSMutableString stringWithString:str]; + NSString *sendStr = [NSString stringWithFormat:@"-$$%@$$-\n",str1]; + NSData *sendData = [sendStr dataUsingEncoding:NSUTF8StringEncoding]; + [self showLog:[NSString stringWithFormat:@"发送的鉴权数据 = %@",sendStr]]; + + if (self.delegate) { + [self.delegate aiMouseSendAuthData:sendData]; + } + } + else{ + NSString *str = [AiMouseTools dataToUtf8String:data]; +// NSString *str = @"0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz"; + + NSString *sendStr = [NSString stringWithFormat:@"-$$%@$$-",str]; + NSData *sendData = [sendStr dataUsingEncoding:NSUTF8StringEncoding]; + [self showLog:[NSString stringWithFormat:@"发送的鉴权数据 = %@",sendStr]]; + + NSInteger len = 39; + for (NSInteger i = 0; i < sendData.length;i = i+len) { + NSData *subData; + if (i + len > data.length) { + subData = [sendData subdataWithRange:NSMakeRange(i, sendData.length - i)]; + } + else{ + subData = [sendData subdataWithRange:NSMakeRange(i, len)]; + } + if (self.delegate) { + sleep(1); + [self.delegate aiMouseSendAuthData:subData]; + } + } } } - (void)sendDeviceInfoData:(NSData *)data{ diff --git a/MouseSdk/MouseSdk.xcworkspace/xcuserdata/apple.xcuserdatad/UserInterfaceState.xcuserstate b/MouseSdk/MouseSdk.xcworkspace/xcuserdata/apple.xcuserdatad/UserInterfaceState.xcuserstate index fc4e3f5..1b585d5 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 2d6da70..8cf9284 100644 --- a/MouseSdk/MouseSdk.xcworkspace/xcuserdata/apple.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/MouseSdk/MouseSdk.xcworkspace/xcuserdata/apple.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -32,37 +32,5 @@ stopOnStyle = "0"> - - - - - - - - diff --git a/MouseSdk/MouseSdk/BleManager.m b/MouseSdk/MouseSdk/BleManager.m index fbc625f..b0c5082 100644 --- a/MouseSdk/MouseSdk/BleManager.m +++ b/MouseSdk/MouseSdk/BleManager.m @@ -47,7 +47,7 @@ #pragma mark - CBCentralManagerDelegate - (void)centralManagerDidUpdateState:(nonnull CBCentralManager *)central { - [self showLog:[NSString stringWithFormat:@"设备状态 = %@",@(central.state)]]; + [self showLog:[NSString stringWithFormat:@"蓝牙状态 = %@",@(central.state)]]; switch (central.state) { case CBManagerStateUnknown: diff --git a/MouseSdk/MouseSdk/DeviceManger.h b/MouseSdk/MouseSdk/DeviceManger.h index 234f4ab..91f9a0f 100644 --- a/MouseSdk/MouseSdk/DeviceManger.h +++ b/MouseSdk/MouseSdk/DeviceManger.h @@ -24,6 +24,8 @@ NS_ASSUME_NONNULL_BEGIN /// 获取设备信息 - (void)getDeviceInfo:(void (^)(AiMouseDeviceInfo *deviceInfo,NSError *error))completation; +-(void)startAuthentication; + @end NS_ASSUME_NONNULL_END diff --git a/MouseSdk/MouseSdk/DeviceManger.m b/MouseSdk/MouseSdk/DeviceManger.m index 4a2a3af..fbeb4b0 100644 --- a/MouseSdk/MouseSdk/DeviceManger.m +++ b/MouseSdk/MouseSdk/DeviceManger.m @@ -99,4 +99,8 @@ if(self.connectStateCallBack)self.connectStateCallBack(AiMouseConnectType_bluetooth,false); [[AiMouse shared] switchConnect:AiMouseConnectType_hid]; } + +-(void)startAuthentication{ + [self.hid startAuthentication]; +} @end diff --git a/MouseSdk/MouseSdk/HidManager.h b/MouseSdk/MouseSdk/HidManager.h index 8c32827..c1e4e62 100644 --- a/MouseSdk/MouseSdk/HidManager.h +++ b/MouseSdk/MouseSdk/HidManager.h @@ -18,6 +18,9 @@ NS_ASSUME_NONNULL_BEGIN /// 获取设备信息 - (void)getDeviceInfo:(void (^)(AiMouseDeviceInfo *deviceInfo,NSError *error))completation; + + +-(void)startAuthentication; @end NS_ASSUME_NONNULL_END diff --git a/MouseSdk/MouseSdk/HidManager.m b/MouseSdk/MouseSdk/HidManager.m index 60ea2c1..838d5d1 100644 --- a/MouseSdk/MouseSdk/HidManager.m +++ b/MouseSdk/MouseSdk/HidManager.m @@ -87,13 +87,19 @@ static void hidAppearDevice(void *inContext,IOReturn inResult,void *inSender,IOH // PrimaryUsagePage=1 PrimaryUsage=6,鉴权 // PrimaryUsagePage=65283 PrimaryUsage=0,ai if(PrimaryUsagePage == 1 && PrimaryUsage == 0){ + //设备信息 [HidManager shared].deviceInfoCha = inIOHIDDeviceRef; - } - else if(PrimaryUsagePage == 1 && PrimaryUsage == 6){ + //鉴权 [HidManager shared].authCha = inIOHIDDeviceRef; [[HidManager shared] startAuthentication]; } + else if(PrimaryUsagePage == 1 && PrimaryUsage == 6){ +// //鉴权 +// [HidManager shared].authCha = inIOHIDDeviceRef; +// [[HidManager shared] startAuthentication]; + } else if(PrimaryUsagePage == 65283 && PrimaryUsage == 0){ + //ai [HidManager shared].aiCha = inIOHIDDeviceRef; } @@ -114,7 +120,7 @@ static void hidDisAppearDevice(void *inContext,IOReturn inResult,void *inSender, static void hidReceiveData(void* context, IOReturn result, void* sender, IOHIDReportType type, uint32_t reportID, uint8_t *report,CFIndex reportLength){ NSInteger len = get_data_len(report, reportLength); NSData *data = [[NSData alloc] initWithBytes:report length:len]; - [[HidManager shared] showLog:[NSString stringWithFormat:@"device = %@ \n [receive] = %@",sender,[AiMouseTools dataToHexString:data]]]; + [[HidManager shared] showLog:[NSString stringWithFormat:@"[receive] = %@",[AiMouseTools dataToHexString:data]]]; uint32_t PrimaryUsagePage = IOHIDDevGetUInt32Property(sender, CFSTR(kIOHIDPrimaryUsagePageKey)); uint32_t PrimaryUsage = IOHIDDevGetUInt32Property(sender, CFSTR(kIOHIDPrimaryUsageKey)); @@ -123,10 +129,6 @@ static void hidReceiveData(void* context, IOReturn result, void* sender, IOHIDRe [[HidManager shared] showLog:@"device数据"]; [[AiMouse shared] sendDeviceDataToSdk:data]; } - else if(PrimaryUsagePage == 1 && PrimaryUsage == 6){ - [[HidManager shared] showLog:@"鉴权数据"]; - [[AiMouse shared] sendAuthDataToSdk:data]; - } else if(PrimaryUsagePage == 65283 && PrimaryUsage == 0){ [[HidManager shared] showLog:@"AI数据"]; [[AiMouse shared] sendAiDataToSdk:data]; @@ -208,10 +210,15 @@ static uint32_t IOHIDDevGetUInt32Property(IOHIDDeviceRef inIOHIDDeviceRef, CFStr } -(void)sendData:(NSData *)data toDevice:(IOHIDDeviceRef)device{ - [self showLog:[NSString stringWithFormat:@"开始发送 %@\n [send] %@",device,[AiMouseTools dataToHexString:data]]]; + if(device == nil){ + [self showLog:@"请先连上设备"]; + return; + } + [self showLog:[NSString stringWithFormat:@"开始发送[send] %@\n%@",[AiMouseTools dataToHexString:data],[AiMouseTools dataToUtf8String:data]]]; + IOReturn ret = IOHIDDeviceSetReport(device, kIOHIDReportTypeOutput, 0, data.bytes, data.length); if (ret != kIOReturnSuccess) { - [self showLog:@"发送失败!"]; + [self showLog:[NSString stringWithFormat:@"发送失败! code = %d",ret]]; }else{ [self showLog:@"发送成功!"]; } @@ -239,4 +246,5 @@ static inline int get_data_len(uint8_t *buf, u_long len) { while (buf[url_len] != 0x00) url_len++; return url_len; } + @end diff --git a/MouseSdk/MouseSdk/ViewController.m b/MouseSdk/MouseSdk/ViewController.m index 60a34cb..afa7c09 100644 --- a/MouseSdk/MouseSdk/ViewController.m +++ b/MouseSdk/MouseSdk/ViewController.m @@ -52,6 +52,15 @@ btn.state = 1; [self.view addSubview:btn]; } + { + NSButton *btn = [[NSButton alloc]initWithFrame:NSMakeRect(50, self.view.bounds.size.height - 0, 100, 45)]; + btn.bordered = true; + btn.title = @"鉴权"; + [btn setTarget:self]; + [btn setAction:@selector(authAction)]; + btn.state = 1; + [self.view addSubview:btn]; + } { NSTextField *label = [[NSTextField alloc] initWithFrame:CGRectMake(180, self.view.bounds.size.height - 80, 300, 35)]; label.editable = NO; @@ -144,4 +153,8 @@ [ws connectStateDidChange:type connectState:isConnected]; }; } + +- (void)authAction{ + [[DeviceManger shared] startAuthentication]; +} @end