增加获取设备信息指令
authorliangzhenying <867174124@qq.com>
Tue, 19 Mar 2024 12:24:53 +0000 (20:24 +0800)
committerliangzhenying <867174124@qq.com>
Tue, 19 Mar 2024 12:24:53 +0000 (20:24 +0800)
15 files changed:
MouseSdk/AiMouseSdk/AiAudioManager.m
MouseSdk/AiMouseSdk/AiAuthManager.m
MouseSdk/AiMouseSdk/AiFrameManager.m
MouseSdk/AiMouseSdk/AiMouse.h
MouseSdk/AiMouseSdk/AiMouse.m
MouseSdk/AiMouseSdk/AiMouseDeviceInfo.h [new file with mode: 0644]
MouseSdk/AiMouseSdk/AiMouseDeviceInfo.m [new file with mode: 0644]
MouseSdk/AiMouseSdk/AiMouseSdk.h
MouseSdk/AiMouseSdk/AiMouseTools.h [moved from MouseSdk/AiMouseSdk/AiTools.h with 92% similarity]
MouseSdk/AiMouseSdk/AiMouseTools.m [moved from MouseSdk/AiMouseSdk/AiTools.m with 98% similarity]
MouseSdk/MouseSdk.xcodeproj/project.pbxproj
MouseSdk/MouseSdk.xcworkspace/xcuserdata/apple.xcuserdatad/UserInterfaceState.xcuserstate
MouseSdk/MouseSdk/BleManager.h
MouseSdk/MouseSdk/BleManager.m
MouseSdk/MouseSdk/ViewController.m

index d0d96d1..1b6d808 100644 (file)
@@ -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];
index a805fb1..0a9b99a 100644 (file)
@@ -7,7 +7,7 @@
 
 #import "AiAuthManager.h"
 #import <AliIotConnectKit/AliIotConnectKit.h>
-#import "AiTools.h"
+#import "AiMouseTools.h"
 @interface AiAuthManager () <IotStateDelatege_C,BleNeedSendDataDelegate_C>
 @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];
index 453a9cc..e02fdad 100644 (file)
@@ -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];
index 49d6cdf..49a6812 100644 (file)
@@ -6,8 +6,7 @@
 //
 
 #import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
+#import <AiMouseSdk/AiMouseDeviceInfo.h>
 
 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
index 0c08a72..f0c35e1 100644 (file)
@@ -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];
     }
 }
 
+-(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;
     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 (file)
index 0000000..55e48da
--- /dev/null
@@ -0,0 +1,22 @@
+//
+//  AiMouseDeviceInfo.h
+//  AiMouseSdk
+//
+//  Created by incar on 2024/3/19.
+//
+
+#import <Foundation/Foundation.h>
+
+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 (file)
index 0000000..00da69d
--- /dev/null
@@ -0,0 +1,13 @@
+//
+//  AiMouseDeviceInfo.m
+//  AiMouseSdk
+//
+//  Created by incar on 2024/3/19.
+//
+
+#import "AiMouseDeviceInfo.h"
+
+@implementation AiMouseDeviceInfo
+
+
+@end
index 68bada9..cf5694d 100644 (file)
@@ -16,4 +16,4 @@
 // In this header, you should import all the public headers of your framework using statements like #import <AiMouse/PublicHeader.h>
 
 #import <AiMouseSdk/AiMouse.h>
-#import <AiMouseSdk/AiTools.h>
+#import <AiMouseSdk/AiMouseTools.h>
similarity index 92%
rename from MouseSdk/AiMouseSdk/AiTools.h
rename to MouseSdk/AiMouseSdk/AiMouseTools.h
index 6384357..ac571ef 100644 (file)
@@ -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;
 
similarity index 98%
rename from MouseSdk/AiMouseSdk/AiTools.m
rename to MouseSdk/AiMouseSdk/AiMouseTools.m
index 9acafb4..32618f4 100644 (file)
@@ -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;
index e1c27a6..1bbbde2 100644 (file)
@@ -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 */; };
                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 */; };
                18BF1E752B832D2E00B8D90F /* ScanVC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ScanVC.m; sourceTree = "<group>"; };
                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 = "<group>"; };
+               18BF8F4C2BA9A7A4008F6933 /* AiMouseDeviceInfo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiMouseDeviceInfo.h; sourceTree = "<group>"; };
+               18BF8F4D2BA9A7A4008F6933 /* AiMouseDeviceInfo.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiMouseDeviceInfo.m; sourceTree = "<group>"; };
                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 = "<group>"; };
                18CB08112BA40282005F5854 /* buffersrc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = buffersrc.h; sourceTree = "<group>"; };
                18F323832B8F330100CABA2E /* AiAuthManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiAuthManager.m; sourceTree = "<group>"; };
                18F3238C2B8F4F7300CABA2E /* AiAudioManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiAudioManager.h; sourceTree = "<group>"; };
                18F3238D2B8F4F7300CABA2E /* AiAudioManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiAudioManager.m; sourceTree = "<group>"; };
-               18F323932B8F525C00CABA2E /* AiTools.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiTools.h; sourceTree = "<group>"; };
-               18F323942B8F525C00CABA2E /* AiTools.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiTools.m; sourceTree = "<group>"; };
+               18F323932B8F525C00CABA2E /* AiMouseTools.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiMouseTools.h; sourceTree = "<group>"; };
+               18F323942B8F525C00CABA2E /* AiMouseTools.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiMouseTools.m; sourceTree = "<group>"; };
                18F323A62B9095D300CABA2E /* AiAudioConverter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiAudioConverter.h; sourceTree = "<group>"; };
                18F323A72B9095D300CABA2E /* AiAudioConverter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiAudioConverter.m; sourceTree = "<group>"; };
                18F323C22B93352000CABA2E /* AiAudioDecoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiAudioDecoder.h; sourceTree = "<group>"; };
                                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 */,
                                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 */,
                                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 */,
                                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 */,
                        );
index 8c43101..68aa75f 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 3967af4..d98b352 100644 (file)
@@ -7,11 +7,12 @@
 
 #import <Foundation/Foundation.h>
 #import <CoreBluetooth/CoreBluetooth.h>
+#import <AiMouseSdk/AiMouseDeviceInfo.h>
 
 #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
index 7238ff9..4e8679f 100644 (file)
 //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 ()<CBCentralManagerDelegate,CBPeripheralDelegate,AiMouseDelegate>
 @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
 
             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];
         //AI数据
         [[AiMouse shared] sendAiDataToSdk:data];
     }
+    else if([characteristic.UUID.UUIDString isEqualToString:kDeviceInfoUUID]){
+        //设备信息数据
+        [[AiMouse shared] sendDeviceDataToSdk:data];
+    }
 }
 
 #pragma mark - AiDelegate
 /// 鉴权数据回调,需要将此数据转发给蓝牙设备
 /// - 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];
     [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{
index 58c0008..a821b72 100644 (file)
@@ -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];
         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];
     [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{