新增设备管理类
authorliangzhenying <867174124@qq.com>
Mon, 1 Apr 2024 02:33:10 +0000 (10:33 +0800)
committerliangzhenying <867174124@qq.com>
Mon, 1 Apr 2024 02:33:10 +0000 (10:33 +0800)
MouseSdk/AiMouseSdk/AiFrameManager.h
MouseSdk/AiMouseSdk/AiFrameManager.m
MouseSdk/AiMouseSdk/AiMouse.m
MouseSdk/MouseSdk.xcworkspace/xcuserdata/apple.xcuserdatad/UserInterfaceState.xcuserstate
MouseSdk/MouseSdk.xcworkspace/xcuserdata/apple.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
MouseSdk/MouseSdk/BleManager.m
MouseSdk/MouseSdk/DeviceManger.h
MouseSdk/MouseSdk/DeviceManger.m
MouseSdk/MouseSdk/HidManager.h
MouseSdk/MouseSdk/HidManager.m
MouseSdk/MouseSdk/ViewController.m

index 03109a3..71a82db 100644 (file)
@@ -14,6 +14,9 @@ NS_ASSUME_NONNULL_BEGIN
 
 /// 接收到数据帧
 - (void)didReceiveFrameData:(NSData *)data;
+
+/// 收到hid鉴权收据
+- (void)didReceiveHidAuthData:(NSData *)data;
 @end
 
 NS_ASSUME_NONNULL_END
index e02fdad..056c7f8 100644 (file)
@@ -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);
         [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
index 25892f5..9a3f06b 100644 (file)
     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"]){
 }
 #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{
index fc4e3f5..1b585d5 100644 (file)
Binary files a/MouseSdk/MouseSdk.xcworkspace/xcuserdata/apple.xcuserdatad/UserInterfaceState.xcuserstate and b/MouseSdk/MouseSdk.xcworkspace/xcuserdata/apple.xcuserdatad/UserInterfaceState.xcuserstate differ
index 2d6da70..8cf9284 100644 (file)
             stopOnStyle = "0">
          </BreakpointContent>
       </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "0A2B3EE7-9C25-44AC-9ADD-244F3EE1D1DB"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "MouseSdk/DeviceManger.m"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "99"
-            endingLineNumber = "99"
-            landmarkName = "-bleDidDisconnect:"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
-      <BreakpointProxy
-         BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
-         <BreakpointContent
-            uuid = "1C8B736A-006B-4670-9A67-8F24675DD8EB"
-            shouldBeEnabled = "Yes"
-            ignoreCount = "0"
-            continueAfterRunningActions = "No"
-            filePath = "MouseSdk/DeviceManger.m"
-            startingColumnNumber = "9223372036854775807"
-            endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "95"
-            endingLineNumber = "95"
-            landmarkName = "-bleDidConnect:"
-            landmarkType = "7">
-         </BreakpointContent>
-      </BreakpointProxy>
    </Breakpoints>
 </Bucket>
index fbc625f..b0c5082 100644 (file)
@@ -47,7 +47,7 @@
 
 #pragma mark - CBCentralManagerDelegate
 - (void)centralManagerDidUpdateState:(nonnull CBCentralManager *)central {
-    [self showLog:[NSString stringWithFormat:@"设å¤\87状态 = %@",@(central.state)]];
+    [self showLog:[NSString stringWithFormat:@"è\93\9dç\89\99状态 = %@",@(central.state)]];
     switch (central.state) {
         case CBManagerStateUnknown:
             
index 234f4ab..91f9a0f 100644 (file)
@@ -24,6 +24,8 @@ NS_ASSUME_NONNULL_BEGIN
 /// 获取设备信息
 - (void)getDeviceInfo:(void (^)(AiMouseDeviceInfo *deviceInfo,NSError *error))completation;
 
+-(void)startAuthentication;
+
 @end
 
 NS_ASSUME_NONNULL_END
index 4a2a3af..fbeb4b0 100644 (file)
@@ -99,4 +99,8 @@
     if(self.connectStateCallBack)self.connectStateCallBack(AiMouseConnectType_bluetooth,false);
     [[AiMouse shared] switchConnect:AiMouseConnectType_hid];
 }
+
+-(void)startAuthentication{
+    [self.hid startAuthentication];
+}
 @end
index 8c32827..c1e4e62 100644 (file)
@@ -18,6 +18,9 @@ NS_ASSUME_NONNULL_BEGIN
 
 /// 获取设备信息
 - (void)getDeviceInfo:(void (^)(AiMouseDeviceInfo *deviceInfo,NSError *error))completation;
+
+
+-(void)startAuthentication;
 @end
 
 NS_ASSUME_NONNULL_END
index 60ea2c1..838d5d1 100644 (file)
@@ -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
index 60a34cb..afa7c09 100644 (file)
         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;
         [ws connectStateDidChange:type connectState:isConnected];
     };
 }
+
+- (void)authAction{
+    [[DeviceManger shared] startAuthentication];
+}
 @end