鉴权功能开发
authorliangzhenying <867174124@qq.com>
Fri, 8 Mar 2024 01:22:07 +0000 (09:22 +0800)
committerliangzhenying <867174124@qq.com>
Fri, 8 Mar 2024 01:22:07 +0000 (09:22 +0800)
32 files changed:
Document/MouseSdk接口文档.md
MouseSdk/AiMouseSdk/AiAudioConverter.h [new file with mode: 0644]
MouseSdk/AiMouseSdk/AiAudioConverter.m [new file with mode: 0644]
MouseSdk/AiMouseSdk/AiAudioDecoder.h [moved from MouseSdk/AiSdk/AiIotAudioDecoder.h with 87% similarity]
MouseSdk/AiMouseSdk/AiAudioDecoder.m [moved from MouseSdk/AiSdk/AiIotAudioDecoder.m with 97% similarity]
MouseSdk/AiMouseSdk/AiAudioManager.h [moved from MouseSdk/AiSdk/AiIotAudioManager.h with 83% similarity]
MouseSdk/AiMouseSdk/AiAudioManager.m [moved from MouseSdk/AiSdk/AiIotAudioManager.m with 76% similarity]
MouseSdk/AiMouseSdk/AiAuthManager.h [moved from MouseSdk/AiSdk/AiIotAuthManager.h with 83% similarity]
MouseSdk/AiMouseSdk/AiAuthManager.m [moved from MouseSdk/AiSdk/AiIotAuthManager.m with 73% similarity]
MouseSdk/AiMouseSdk/AiFrameManager.h [new file with mode: 0644]
MouseSdk/AiMouseSdk/AiFrameManager.m [new file with mode: 0644]
MouseSdk/AiMouseSdk/AiIotConnectManager.m [moved from MouseSdk/AiSdk/AiIotConnectManager.m with 100% similarity]
MouseSdk/AiMouseSdk/AiMouse.h [new file with mode: 0644]
MouseSdk/AiMouseSdk/AiMouse.m [moved from MouseSdk/AiSdk/AiIot.m with 52% similarity]
MouseSdk/AiMouseSdk/AiMouseSdk.h [new file with mode: 0644]
MouseSdk/AiMouseSdk/AiTools.h [moved from MouseSdk/AiSdk/AiIotTools.h with 91% similarity]
MouseSdk/AiMouseSdk/AiTools.m [moved from MouseSdk/AiSdk/AiIotTools.m with 97% similarity]
MouseSdk/AiSdk/AiIot.h [deleted file]
MouseSdk/AiSdk/AiIotAudioConverter.h [deleted file]
MouseSdk/AiSdk/AiIotAudioConverter.m [deleted file]
MouseSdk/AiSdk/AiSdk.h [deleted file]
MouseSdk/AliIotConnectKitSDK/AliIotConnectKit/OC/MqttManager_C.m
MouseSdk/MouseSdk.xcodeproj/project.pbxproj
MouseSdk/MouseSdk.xcodeproj/xcshareddata/xcschemes/AiSdk.xcscheme
MouseSdk/MouseSdk.xcodeproj/xcshareddata/xcschemes/MouseSdk.xcscheme [new file with mode: 0644]
MouseSdk/MouseSdk.xcodeproj/xcuserdata/apple.xcuserdatad/xcschemes/xcschememanagement.plist
MouseSdk/MouseSdk.xcworkspace/xcuserdata/apple.xcuserdatad/UserInterfaceState.xcuserstate
MouseSdk/MouseSdk/Ble/BleManager.h
MouseSdk/MouseSdk/Ble/BleManager.m
MouseSdk/MouseSdk/PCMPlayer.h
MouseSdk/MouseSdk/PCMPlayer.m
MouseSdk/MouseSdk/ViewController.m

index 7e3b602..e674a06 100644 (file)
 \r
 ## 引入依赖库\r
 \r
-将 AliIotConnectKit.framework 添加进项目中。\r
+将 AliIotConnectKit.framework、AiSdk.framework 添加进项目中。\r
 \r
 ## 相关权限配置\r
 \r
 因为sdk用到蓝牙权限,所以需要在info.plist进行相关配置\r
 \r
 ```xml\r
-\r
   <!-- 蓝牙 -->   \r
 <key>NSBluetoothAlwaysUsageDescription</key>   \r
 <string>App需要您的同意,才能访问蓝牙</string> \r
 ## 蓝牙相关接口\r
 \r
 ```objective-c\r
-/// 配置SDK,每次连接上蓝牙设备后调用\r
-- (void)configSDK;\r
+/// 单利\r
++(AiIot *)shared;\r
+\r
+/// 开始鉴权\r
+- (void)startAuthentication;\r
 \r
-/// 收到 蓝牙 数据\r
-/// - Parameter currData: 蓝牙数据\r
-- (void)handleReceivedData:(NSData *)data;\r
+///  传输鉴权数据给sdk\r
+/// - Parameter data: 蓝牙设备传过来的数据\r
+- (void)sendAuthToSdk:(NSData *)data;\r
 \r
-/// 断开设备调用结束工作\r
-/// - Parameter completed: 清理结束回调\r
-- (void)done:(void(^ _Nonnull )(id _Nullable param))completed;\r
+/// 传输业务数据给sdk\r
+/// - Parameter data:蓝牙设备传过来的数据\r
+- (void)sendBuinessToSdk:(NSData *)data;\r
 ```\r
 \r
 ## 蓝牙相关代理\r
 AliIotSDKCallbackProtocol\r
 \r
 ```objective-c\r
-/// 响应数据,返回给上层调用\r
-/// - Parameters:\r
-///   - currData: 当前发出去的数据\r
-///   - device: 蓝牙设备 MAC\r
-///   - error: 先判断空,再发送出去\r
-- (void)handleSendData:(NSData *)currData toDevice:(NSData *)mac error:(NSError * _Nullable)error;\r
-\r
-@optional\r
-/// 初始化结果\r
-/// - Parameter isFinish: 是否完成初始化\r
-- (void)sdkInitResult:(BOOL)isFinish;\r
-\r
-/// 输出日志\r
-/// - Parameter log: 日志信息\r
-- (void)handleLog:(NSString *)log;\r
+/// 鉴权状态回调\r
+/// - Parameter isSuccess:是否鉴权成功\r
+- (void)aiIotSendAuthStatus:(BOOL)isSuccess;\r
+\r
+/// 鉴权数据回调,需要将此数据转发给蓝牙设备\r
+/// - Parameter data: 数据\r
+- (void)aiIotSendAuthData:(NSData *)data;\r
+\r
+/// 指令回调\r
+/// - Parameter data: 数据\r
+- (void)aiIotSendCmd:(NSData *)data;\r
+\r
+/// 录音回调\r
+/// - Parameter data: pcm格式语音数据\r
+- (void)aiIotSendRecordData:(NSData *)data;\r
 ```\r
 \r
 ## 示例\r
@@ -71,48 +73,28 @@ AliIotSDKCallbackProtocol
 - 设置代理\r
 \r
   ```objective-c\r
-  AliIot.shareInstance.delegate = self;\r
-  AliIot.shareInstance.mapDelegate = self;\r
+  [AiIot shared].delegate = self;\r
   ```\r
-\r
   \r
+- 鉴权\r
 \r
-- 蓝牙连接成功后,需要与蓝牙设备协商MTU。所以必须注意是连接上蓝牙设备后再调用configSDK方法。\r
-\r
-  ```objective-c\r
-  //配置sdk\r
-  - (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error {\r
-      for (CBCharacteristic *characteristic in service.characteristics){\r
-          if ([characteristic.UUID.UUIDString isEqualToString:@"FED7"]) {\r
-              self.writeCha = characteristic;\r
-              //找到写入的uuid后,调用sdk配置方法\r
-              [AliIot.shareInstance configSDK];\r
-          }\r
-          if ([characteristic.UUID.UUIDString isEqualToString:@"FED8"]) {\r
-              self.notifyCha = characteristic;\r
-              [peripheral setNotifyValue:YES forCharacteristic:characteristic];\r
-          }\r
-      }\r
-  }\r
   ```\r
-\r
-- 蓝牙连接断开后,必须调用done方法完成清理工作\r
-\r
-  ```objective-c\r
-  -(void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error{\r
-      //蓝牙断开要调用该方法清理sdk数据\r
-      [AliIot.shareInstance done:^(id  _Nullable param) {\r
-  \r
-       }];\r
-  }\r
+  [[AiIot shared] startAuthentication];\r
   ```\r
-\r
-- æ\94¶å\88°è\93\9dç\89\99设å¤\87ä¼ 过来的数据,传给sdk处理\r
+  \r
+- æ\94¶å\88°è®¾å¤\87ä¼ è¾\93过来的数据,传给sdk处理\r
 \r
   ```objective-c\r
   - (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error {\r
-      //收到蓝牙设备发送过来的数据,转发给sdk处理\r
-      [AliIot.shareInstance handleReceivedData:characteristic.value];\r
+    NSData *data = characteristic.value;\r
+    if([characteristic.UUID.UUIDString isEqualToString:kAuthUUID]){\r
+      //鉴权的数据\r
+      [[AiIot shared] sendAuthToSdk:data];\r
+    }\r
+    else if([characteristic.UUID.UUIDString isEqualToString:kVoiceUUID]){\r
+      //语音数据\r
+               [[AiIot shared] sendBuinessToSdk:data];\r
+    }\r
   }\r
   ```\r
 \r
diff --git a/MouseSdk/AiMouseSdk/AiAudioConverter.h b/MouseSdk/AiMouseSdk/AiAudioConverter.h
new file mode 100644 (file)
index 0000000..af3e058
--- /dev/null
@@ -0,0 +1,8 @@
+
+
+#import <Foundation/Foundation.h>
+@interface AiAudioConverter : NSObject
+
+
+
+@end
diff --git a/MouseSdk/AiMouseSdk/AiAudioConverter.m b/MouseSdk/AiMouseSdk/AiAudioConverter.m
new file mode 100644 (file)
index 0000000..880a072
--- /dev/null
@@ -0,0 +1,161 @@
+
+
+#import "AiAudioConverter.h"
+#import <Foundation/Foundation.h>
+#import <AudioToolbox/AudioToolbox.h>
+
+static void CheckError(OSStatus error, const char *operation)
+{
+    if (error == noErr) return;
+    char errorString[20];
+    // See if it appears to be a 4-char-code
+    *(UInt32 *)(errorString + 1) = CFSwapInt32HostToBig(error);
+    if (isprint(errorString[1]) && isprint(errorString[2]) && isprint(errorString[3]) && isprint(errorString[4])) {
+        errorString[0] = errorString[5] = '\'';
+        errorString[6] = '\0';
+    } else {
+        // No, format it as an integer
+        sprintf(errorString, "%d", (int)error);
+        fprintf(stderr, "Error: %s (%s)\n", operation, errorString);
+    }
+}
+
+
+//AudioConverterConvertBuffer
+@interface AiAudioConverter()
+
+//@property (nonatomic) AudioStreamBasicDescription inputFormat;
+//@property (nonatomic) AudioStreamBasicDescription *outputFormat;
+@end
+
+@implementation AiAudioConverter
+
+
+- (void)convert{
+    
+    AudioStreamBasicDescription inFmt;
+    {
+        AudioStreamBasicDescription fmt = {};
+        fmt.mFormatID = kAudioFormatLinearPCM;
+        fmt.mSampleRate = 16000;
+        fmt.mChannelsPerFrame = 1;
+        fmt.mBitsPerChannel = 16;
+        fmt.mBytesPerPacket = 1 * sizeof(SInt16);
+        fmt.mBytesPerFrame = 1 * sizeof(SInt16);
+        fmt.mFramesPerPacket = 1;
+        fmt.mFormatFlags = kLinearPCMFormatFlagIsBigEndian | kLinearPCMFormatFlagIsSignedInteger;
+        inFmt = fmt;
+    }
+    AudioStreamBasicDescription *outFmt;
+//    {
+//        AudioStreamBasicDescription fmt = {};
+//        fmt.mFormatID = kAudioFormatLinearPCM;
+//        fmt.mSampleRate = 16000;
+//        fmt.mChannelsPerFrame = 1;
+//        fmt.mBitsPerChannel = 16;
+//        fmt.mBytesPerPacket = 1 * sizeof(SInt16);
+//        fmt.mBytesPerFrame = 1 * sizeof(SInt16);
+//        fmt.mFramesPerPacket = 1;
+//        fmt.mFormatFlags = kLinearPCMFormatFlagIsBigEndian | kLinearPCMFormatFlagIsSignedInteger;
+//        outFmt = fmt;
+//    }
+
+    
+    AudioConverterRef audioConverter;
+    OSStatus status = AudioConverterNew(&inFmt,
+                                        outFmt,
+                                        &audioConverter);
+    CheckError(status, "AudioConveterNew failed");
+    
+    
+//    AudioStreamPacketDescription outputPacketDesc;
+//    status = AudioConverterFillComplexBuffer(audioConverter,
+//                                                      DecodeConverterComplexInputDataProc,
+//                                                      &userInfo,
+//                                                      &ioOutputDataPackets,
+//                                                      &fillBufferList,
+//                                                      &outputPacketDesc);
+//    
+//    // if interrupted in the process of the conversion call, we must handle the error appropriately
+//    if (status != noErr) {
+//        if (status == kAudioConverterErr_HardwareInUse) {
+//            printf("Audio Converter returned kAudioConverterErr_HardwareInUse!\n");
+//        } else {
+//            if (![self checkError:status withErrorString:@"AudioConverterFillComplexBuffer error!"]) {
+//                return;
+//            }
+//        }
+//    } else {
+//        if (ioOutputDataPackets == 0) {
+//            // This is the EOF condition.
+//            status = noErr;
+//        }
+//        
+//        if (completeHandler) {
+//            completeHandler(&fillBufferList, ioOutputDataPackets, &outputPacketDesc);
+//        }
+//    }
+}
+
+#pragma mark - Decode Callback
+//OSStatus DecodeConverterComplexInputDataProc(AudioConverterRef              inAudioConverter,
+//                                             UInt32                         *ioNumberDataPackets,
+//                                             AudioBufferList                *ioData,
+//                                             AudioStreamPacketDescription   **outDataPacketDescription,
+//                                             void                           *inUserData) {
+//    XDXConverterInfoType *info = (XDXConverterInfoType *)inUserData;
+//    
+//    if (info->sourceDataSize <= 0) {
+//        ioNumberDataPackets = 0;
+//        return -1;
+//    }
+//    
+//    *outDataPacketDescription = &info->packetDesc;
+//    (*outDataPacketDescription)[0].mStartOffset             = 0;
+//    (*outDataPacketDescription)[0].mDataByteSize            = info->sourceDataSize;
+//    (*outDataPacketDescription)[0].mVariableFramesInPacket  = 0;
+//    
+//    ioData->mNumberBuffers              = 1;
+//    ioData->mBuffers[0].mData           = info->sourceBuffer;
+//    ioData->mBuffers[0].mNumberChannels = info->sourceChannelsPerFrame;
+//    ioData->mBuffers[0].mDataByteSize   = info->sourceDataSize;
+//    
+//    return noErr;
+//}
+//-(AudioStreamBasicDescription)getAudioFormatWithFormatID:(UInt32)formatID sampleRate:(Float64)sampleRate channelCount:(UInt32)channelCount {
+//    AudioStreamBasicDescription dataFormat = {0};
+//    
+//    UInt32 size = sizeof(dataFormat.mSampleRate);
+//    // Get hardware origin sample rate. (Recommended it)
+//    Float64 hardwareSampleRate = 0;
+//    AudioSessionGetProperty(kAudioSessionProperty_CurrentHardwareSampleRate,
+//                            &size,
+//                            &hardwareSampleRate);
+//    // Manual set sample rate
+//    dataFormat.mSampleRate = sampleRate;
+//    
+//    size = sizeof(dataFormat.mChannelsPerFrame);
+//    // Get hardware origin channels number. (Must refer to it)
+//    UInt32 hardwareNumberChannels = 0;
+//    AudioSessionGetProperty(kAudioSessionProperty_CurrentHardwareInputNumberChannels,
+//                            &size,
+//                            &hardwareNumberChannels);
+//    dataFormat.mChannelsPerFrame = channelCount;
+//    
+//    // Set audio format
+//    dataFormat.mFormatID = formatID;
+//    
+//    // Set detail audio format params
+//    if (formatID == kAudioFormatLinearPCM) {
+//        dataFormat.mFormatFlags     = kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked;
+//        dataFormat.mBitsPerChannel  = kXDXAudioPCMBitsPerChannel;
+//        dataFormat.mBytesPerPacket  = dataFormat.mBytesPerFrame = (dataFormat.mBitsPerChannel / 8) * dataFormat.mChannelsPerFrame;
+//        dataFormat.mFramesPerPacket = kXDXAudioPCMFramesPerPacket;
+//    }else if (formatID == kAudioFormatMPEG4AAC) {
+//        dataFormat.mFormatFlags = kMPEG4Object_AAC_Main;
+//    }
+//
+//    NSLog(@"Audio Recorder: starup PCM audio encoder:%f,%d",sampleRate,channelCount);
+//    return dataFormat;
+//}
+@end
similarity index 87%
rename from MouseSdk/AiSdk/AiIotAudioDecoder.h
rename to MouseSdk/AiMouseSdk/AiAudioDecoder.h
index 88a7c8b..3e938ad 100644 (file)
@@ -2,7 +2,7 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@interface AiIotAudioDecoder : NSObject
+@interface AiAudioDecoder : NSObject
 
 @property (nonatomic,copy) void(^onRecvPCMData)(NSData *pcmData);
 
similarity index 97%
rename from MouseSdk/AiSdk/AiIotAudioDecoder.m
rename to MouseSdk/AiMouseSdk/AiAudioDecoder.m
index 76a837f..8f2b8b5 100644 (file)
@@ -1,4 +1,4 @@
-#import "AiIotAudioDecoder.h"
+#import "AiAudioDecoder.h"
 
 
 #import <VideoToolbox/VideoToolbox.h>
@@ -13,7 +13,7 @@
 
 #include "libavcodec/avcodec.h"
 
-@interface AiIotAudioDecoder (){
+@interface AiAudioDecoder (){
     AVCodecContext *codecContext;
     AVCodecParserContext *parserContext;
     AVFrame *decodecAVFrame;
@@ -25,9 +25,9 @@
 @property (assign, nonatomic) AVPacket  *sbcPacket;
 @property (assign, nonatomic)AVCodecParserContext *sbcParser;
 @end
-@implementation AiIotAudioDecoder
+@implementation AiAudioDecoder
 
-static AiIotAudioDecoder *instance = nil;
+static AiAudioDecoder *instance = nil;
 static dispatch_once_t onceToken;
 +(id)sharedInstance
 {
similarity index 83%
rename from MouseSdk/AiSdk/AiIotAudioManager.h
rename to MouseSdk/AiMouseSdk/AiAudioManager.h
index 819da07..fe67d0c 100644 (file)
@@ -1,6 +1,6 @@
 //
-//  AiIotAudioManager.h
-//  AiSdk
+//  AiAudioManager.h
+//  AiMouse
 //
 //  Created by incar on 2024/2/28.
 //
@@ -9,7 +9,7 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@interface AiIotAudioManager : NSObject
+@interface AiAudioManager : NSObject
 @property (nonatomic,strong)void (^outputData)(NSData *data);
 @property (nonatomic,strong)void (^audioRecordCallBack)(NSData *data);
 @property (nonatomic,strong)void (^outputLog)(NSString *log);
similarity index 76%
rename from MouseSdk/AiSdk/AiIotAudioManager.m
rename to MouseSdk/AiMouseSdk/AiAudioManager.m
index 7274477..d0d96d1 100644 (file)
@@ -1,19 +1,19 @@
 //
-//  AiIotAudioManager.m
-//  AiSdk
+//  AiAudioManager.m
+//  AiMouse
 //
 //  Created by incar on 2024/2/28.
 //
 
-#import "AiIotAudioManager.h"
-#import "AiIotTools.h"
-#import "AiIotAudioDecoder.h"
+#import "AiAudioManager.h"
+#import "AiTools.h"
+#import "AiAudioDecoder.h"
 
-@interface AiIotAudioManager ()
-@property (nonatomic,strong)AiIotAudioDecoder *audioDecoder;
+@interface AiAudioManager ()
+@property (nonatomic,strong)AiAudioDecoder *audioDecoder;
 @end
 
-@implementation AiIotAudioManager
+@implementation AiAudioManager
 
 -(instancetype)init{
     if (self = [super init]) {
@@ -24,7 +24,7 @@
 
 - (void)receiveData:(NSData *)data{
     [self.audioDecoder decodeSBCData:data];
-//    NSString *str = [[AiIotTools dataToHexString:data] lowercaseString];
+//    NSString *str = [[AiTools dataToHexString:data] lowercaseString];
 //    NSString *cmd = [str substringWithRange:NSMakeRange(0, 12)];
 //    if([cmd hasPrefix:@"0a"] && [cmd hasSuffix:@"31"]){
 ////        0x0a6500002a3100020101c0c1a5a5a5a5
 }
 
 - (void)setupAudioDecoder{
-    self.audioDecoder = [AiIotAudioDecoder sharedInstance];
+    self.audioDecoder = [AiAudioDecoder sharedInstance];
     __weak typeof(self) ws = self;
     self.audioDecoder.onRecvPCMData = ^(NSData * _Nonnull pcmData) {
-//        [ws showLog:[NSString stringWithFormat:@"转换后数据%@",[AiIotTools dataToHexString:pcmData]]];
+//        [ws showLog:[NSString stringWithFormat:@"转换后数据%@",[AiTools dataToHexString:pcmData]]];
         if(ws.audioRecordCallBack)ws.audioRecordCallBack(pcmData);
     };
     [self.audioDecoder initSBCDecodec];
similarity index 83%
rename from MouseSdk/AiSdk/AiIotAuthManager.h
rename to MouseSdk/AiMouseSdk/AiAuthManager.h
index 9863e07..0404c98 100644 (file)
@@ -1,6 +1,6 @@
 //
-//  AiIotAuthManager.h
-//  AiSdk
+//  AiAuthManager.h
+//  AiMouse
 //
 //  Created by incar on 2024/2/28.
 //
@@ -9,7 +9,7 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@interface AiIotAuthManager : NSObject
+@interface AiAuthManager : NSObject
 @property (nonatomic,strong)void (^outputLog)(NSString *log);
 @property (nonatomic,strong)void (^outputData)(NSData *data);
 @property (nonatomic,strong)void (^authCallBack)(BOOL isSuccess);
similarity index 73%
rename from MouseSdk/AiSdk/AiIotAuthManager.m
rename to MouseSdk/AiMouseSdk/AiAuthManager.m
index 820344d..a805fb1 100644 (file)
@@ -1,19 +1,19 @@
 //
-//  AiIotAuthManager.m
-//  AiSdk
+//  AiAuthManager.m
+//  AiMouse
 //
 //  Created by incar on 2024/2/28.
 //
 
-#import "AiIotAuthManager.h"
+#import "AiAuthManager.h"
 #import <AliIotConnectKit/AliIotConnectKit.h>
-#import "AiIotTools.h"
-@interface AiIotAuthManager () <IotStateDelatege_C,BleNeedSendDataDelegate_C>
+#import "AiTools.h"
+@interface AiAuthManager () <IotStateDelatege_C,BleNeedSendDataDelegate_C>
 @property (nonatomic, strong) dispatch_queue_t bizbus_connect_queue;
 @property (nonatomic, strong) AliConnectMananger_C * bizbusManager;
 @property (nonatomic, strong) AliCloudIotLogManager_C *bizbusLogManager;
 @end
-@implementation AiIotAuthManager
+@implementation AiAuthManager
 - (instancetype)init{
     self = [super init];
     if (self) {
 
 - (void)onIotConnected {
     [self showLog:@"LP连接成功。。。"];
-    if(self.authCallBack)self.authCallBack(true);
+//    if(self.authCallBack)self.authCallBack(true);
+    [self.bizbusManager disConnectWithResult:^(BOOL isSuccess, NSDictionary<NSString *,id> * _Nonnull msg) {
+        if(self.authCallBack)self.authCallBack(true);
+    }];
 }
 
 - (void)onIotDisconeted {
 }
 
 - (void)onLogWithLog:(NSString *)log {
-    [self showLog:log];
+//    [self showLog:[NSString stringWithFormat:@"[auth]%@",log]];
 }
 
 #pragma mark - BleNeedSendDataDelegate_C
 - (void)sendBleDataWithData:(NSData * _Nonnull)data {
-    [self showLog:[NSString stringWithFormat:@"[bizbus send json] %@",[AiIotTools dataToUtf8String:data]]];
+    [self showLog:[NSString stringWithFormat:@"[bizbus send json] %@",[AiTools dataToUtf8String:data]]];
     __weak typeof(self) ws = self;
     dispatch_async(_bizbus_connect_queue, ^{
-//        NSMutableData *mData = NSMutableData.data;
-//        uint8_t cmd = 0x41;
-//        [mData appendBytes:&cmd length:1];
-//        [mData appendData:data];
         if (ws.outputData) ws.outputData(data);
     });
 }
 
 #pragma mark - pub api
 - (void)receiveData:(NSData *)data {
-//    data = [data subdataWithRange:NSMakeRange(1, data.length -1)];
-    [self showLog:[NSString stringWithFormat:@"[bizbus receive json] %@",[AiIotTools dataToUtf8String:data]]];
-//    [self showLog:[NSString stringWithFormat:@"[bizbus receive bytes] %@",[AiIotTools dataToHexString:data]]];
+    [self showLog:[NSString stringWithFormat:@"[bizbus receive json] %@",[AiTools dataToUtf8String:data]]];
     __weak typeof(self) ws = self;
     dispatch_async(_bizbus_connect_queue, ^{
         [ws.bizbusManager bleDataReceivedWithData:data];
     dispatch_async(_bizbus_connect_queue, ^{
         /// 请求飞鸽书
         [ws.bizbusManager checkFgsStateWithResult:^(BOOL isSuccess, NSDictionary<NSString *,id> * _Nonnull msg) {
-//            [ws showLog:[NSString stringWithFormat:@"checkFgsState %@",[msg tysm_jsonStringEncoded]]];
-            // 飞鸽书请求失败不再执行后续连接
             if (isSuccess == NO) {
-//                if (ws.stateBlock) weak_self.stateBlock(AliIotSDKBizbusState_FGS_FAILED);
+                if(ws.authCallBack)ws.authCallBack(false);
             }
             else {
-//                if (ws.stateBlock) ws.stateBlock(AliIotSDKBizbusState_FGS_SUCCESS);
                 /// 连接 LP
                 [ws.bizbusManager startConnectLpStateWithResult:^(BOOL isSuccess, NSDictionary<NSString *,id> * _Nonnull msg) {
                     if (isSuccess == NO) {
-//                        if (ws.stateBlock) {
-//                            ws.stateBlock(AliIotSDKBizbusState_FND_FAILED);
-//                            [ws.bizbusManager disConnectWithResult:^(BOOL isSuccess, NSDictionary<NSString *,id> * _Nonnull msg) {
-//                                if (isSuccess == YES) [ws connect];
-//                            }];
-//                        };
+                        if(ws.authCallBack)ws.authCallBack(false);
                     } else {
-//                        if (ws.stateBlock) weak_self.stateBlock(AliIotSDKBizbusState_FND_SUCCESS);
+//                        [ws.bizbusManager disConnectWithResult:^(BOOL isSuccess, NSDictionary<NSString *,id> * _Nonnull msg) {
+//                            if(ws.authCallBack)ws.authCallBack(true);
+//                        }];
                     }
                 }];
             }
 
 #pragma mark -others
 - (void)showLog:(NSString *)log {
-    if (self.outputLog) self.outputLog(log);
+    if (self.outputLog) self.outputLog([NSString stringWithFormat:@"[auth]%@",log]);
 }
 - (void)disconnect {
     __weak typeof(self) ws = self;
diff --git a/MouseSdk/AiMouseSdk/AiFrameManager.h b/MouseSdk/AiMouseSdk/AiFrameManager.h
new file mode 100644 (file)
index 0000000..03109a3
--- /dev/null
@@ -0,0 +1,19 @@
+//
+//  AiFrameManager.h
+//  AiMouse
+//
+//  Created by incar on 2024/3/7.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface AiFrameManager : NSObject
+@property (nonatomic,strong)void (^didReceiveFullData)(NSData *data);/// 输出接收完整的一个数据包
+
+/// 接收到数据帧
+- (void)didReceiveFrameData:(NSData *)data;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/MouseSdk/AiMouseSdk/AiFrameManager.m b/MouseSdk/AiMouseSdk/AiFrameManager.m
new file mode 100644 (file)
index 0000000..453a9cc
--- /dev/null
@@ -0,0 +1,33 @@
+//
+//  AiFrameManager.m
+//  AiMouse
+//
+//  Created by incar on 2024/3/7.
+//
+
+#import "AiFrameManager.h"
+#import "AiTools.h"
+@interface AiFrameManager()
+
+@property (nonatomic,strong)NSMutableData *recvData;
+@end
+
+@implementation AiFrameManager
+- (void)didReceiveFrameData:(NSData *)data{
+    NSString *str = [AiTools dataToUtf8String:data];
+    if ([str isEqualTo:@"-$$"]) {
+        //开始
+        self.recvData = [[NSMutableData alloc] init];
+    }
+    else if([str isEqualTo:@"$$-\n"]){
+        //结束
+        if(self.didReceiveFullData){
+            self.didReceiveFullData(self.recvData);
+        }
+    }
+    else{
+        //数据
+        [self.recvData appendData:data];
+    }
+}
+@end
diff --git a/MouseSdk/AiMouseSdk/AiMouse.h b/MouseSdk/AiMouseSdk/AiMouse.h
new file mode 100644 (file)
index 0000000..0ae61f6
--- /dev/null
@@ -0,0 +1,50 @@
+//
+//  Ai.h
+//  AiMouse
+//
+//  Created by incar on 2024/2/28.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@protocol AiMouseDelegate <NSObject>
+
+/// 鉴权状态回调
+/// - Parameter isSuccess:是否鉴权成功
+- (void)aiMouseAuthCallBack:(BOOL)isSuccess;
+
+/// 鉴权数据回调,需要将此数据转发给蓝牙设备
+/// - Parameter data: 数据
+- (void)aiMouseSendAuthData:(NSData *)data;
+
+/// 鼠标按键指令回调
+/// - Parameter data: 数据。AI键0x42单击,0x25按下,0x26抬起 ; 录音键0x51单击,0x32按下。0x31(未知),其他未知
+- (void)aiMouseSendCmdData:(NSData *)data;
+
+/// 录音回调
+/// - Parameter data: pcm格式语音数据
+- (void)aiMouseSendRecordData:(NSData *)data;
+
+@end
+
+@interface AiMouse : NSObject
+@property (nonatomic, weak) id<AiMouseDelegate> delegate;/// 代理
+
+/// 单利
++(AiMouse *)shared;
+
+/// 开始鉴权
+- (void)startAuthentication;
+
+///  传输鉴权数据给sdk
+/// - Parameter data: 鉴权特征传过来的数据
+- (void)sendAuthDataToSdk:(NSData *)data;
+
+/// 传输业务数据给sdk
+/// - Parameter data:ai特征传过来的数据
+- (void)sendAiDataToSdk:(NSData *)data;
+@end
+
+NS_ASSUME_NONNULL_END
similarity index 52%
rename from MouseSdk/AiSdk/AiIot.m
rename to MouseSdk/AiMouseSdk/AiMouse.m
index 92ba3cf..7c8d2af 100644 (file)
@@ -1,34 +1,46 @@
 //
-//  AiIot.m
-//  AiSdk
+//  Ai.m
+//  AiMouse
 //
 //  Created by incar on 2024/2/28.
 //
 
-#import "AiIot.h"
-#import "AiIotAuthManager.h"
-#import "AiIotAudioManager.h"
-#import "AiIotTools.h"
-@interface AiIot()
+#import "AiMouse.h"
+#import "AiFrameManager.h"
+#import "AiAuthManager.h"
+#import "AiAudioManager.h"
+#import "AiTools.h"
+@interface AiMouse()
 
-@property (nonatomic, strong) AiIotAuthManager *authManager;
-@property (nonatomic, strong) AiIotAudioManager *audioManager;
+@property (nonatomic, strong) AiFrameManager *frameManager;
+@property (nonatomic, strong) AiAuthManager *authManager;
+@property (nonatomic, strong) AiAudioManager *audioManager;
 @end
 
-@implementation AiIot
-+(AiIot *)shared{
-    static AiIot *manager = nil;
+@implementation AiMouse
++(AiMouse *)shared{
+    static AiMouse *manager = nil;
     static dispatch_once_t oncePredicate;
     dispatch_once(&oncePredicate, ^{
-        manager = [[AiIot alloc]init];
+        manager = [[AiMouse alloc]init];
     });
     return manager;
 }
 
+-(AiFrameManager *)frameManager{
+    if (!_frameManager) {
+        _frameManager = [[AiFrameManager alloc] init];
+        __weak typeof(self) ws = self;
+        _frameManager.didReceiveFullData = ^(NSData * _Nonnull data) {
+            [ws.authManager receiveData:data];
+        };
+    }
+    return _frameManager;
+}
 
--(AiIotAuthManager *)authManager{
+-(AiAuthManager *)authManager{
     if (!_authManager) {
-        _authManager = [[AiIotAuthManager alloc] init];
+        _authManager = [[AiAuthManager alloc] init];
         __weak typeof(self) ws = self;
         _authManager.outputLog = ^(NSString * _Nonnull log) {
             [ws showLog:log];
         };
         _authManager.authCallBack = ^(BOOL isSuccess) {
             if (ws.delegate) {
-                [ws.delegate aiIotSendAuthStatus:isSuccess];
+                [ws.delegate aiMouseAuthCallBack:isSuccess];
             }
         };
     }
     return _authManager;
 }
--(AiIotAudioManager *)audioManager{
+-(AiAudioManager *)audioManager{
     if (!_audioManager) {
-        _audioManager = [[AiIotAudioManager alloc] init];
+        _audioManager = [[AiAudioManager alloc] init];
         __weak typeof(self) ws = self;
         _audioManager.audioRecordCallBack = ^(NSData * _Nonnull data) {
             [ws sendRecordData:data];
 }
 
 //接收到设备传过来的数据
-- (void)sendAuthToSdk:(NSData *)data{
-    [self.authManager receiveData:data];
+- (void)sendAuthDataToSdk:(NSData *)data{
+    [self.frameManager didReceiveFrameData:data];
 }
 
-- (void)sendBuinessToSdk:(NSData *)data{
-    NSString *str = [[AiIotTools dataToHexString:data] lowercaseString];
+- (void)sendAiDataToSdk:(NSData *)data{
+    NSString *str = [[AiTools dataToHexString:data] lowercaseString];
     NSString *cmd = [str substringWithRange:NSMakeRange(0, 12)];
-    
-    if(([cmd hasPrefix:@"0a"] && ([cmd hasSuffix:@"31"] || [cmd hasSuffix:@"32"]))){
-        //开始录音,结束录音
-        [self sendCmdData:data];
+//    0A65004E003200010101C0C10000A5A5
+    if(data.length == 16){
+        NSData *cmd = [data subdataWithRange:NSMakeRange(5, 1)];
+        [self sendCmdData:cmd];
     }
-    if([cmd hasPrefix:@"9c31"]){
+    else if([cmd hasPrefix:@"9c31"]){
         //声音
         [self.audioManager receiveData:data];
-    }
-    else if([str isEqual:@"000401"]){
-       
     }
     else{
         [self showLog:@"未实现指令"];
     }
-//    uint8_t cmdType = 0x00;
-//    switch (cmdType) {
-//        case 0x00:
-//            [self.authManager receiveData:data];
-//            break;
-//        case 0x01:
-//            [self.audioManager receiveData:data];
-//            break;
-//        default:
-//            break;
-//    }
 }
 
 #pragma mark - other
 - (void)sendAuthData:(NSData *)data{
     if (self.delegate) {
-        [self.delegate aiIotSendAuthData:data];
+        [self.delegate aiMouseSendAuthData:data];
     }
 }
 
 - (void)sendRecordData:(NSData *)data{
     if (self.delegate) {
-        [self.delegate aiIotSendRecordData:data];
+        [self.delegate aiMouseSendRecordData:data];
     }
 }
 - (void)sendCmdData:(NSData *)data{
     if (self.delegate) {
-        [self.delegate aiIotSendCmd:data];
+        [self.delegate aiMouseSendCmdData:data];
     }
 }
 - (void)showLog:(NSString *)log{
 
 - (void)sendTestLP{
     NSString *cmd = @"7B22736964223A22464753222C22766572223A312C2264617461223A227B5C227369647665725C223A312C5C226D73675F747970655C223A5C224647535F4D53475F545950455F53544152545F4647535F5245515C227D227D";
-    NSData *data = [AiIotTools hexStringToData:cmd];
+    NSData *data = [AiTools hexStringToData:cmd];
     [self sendAuthData:data];
 }
 @end
diff --git a/MouseSdk/AiMouseSdk/AiMouseSdk.h b/MouseSdk/AiMouseSdk/AiMouseSdk.h
new file mode 100644 (file)
index 0000000..9111053
--- /dev/null
@@ -0,0 +1,19 @@
+//
+//  AiMouse.h
+//  AiMouse
+//
+//  Created by incar on 2024/2/19.
+//
+
+#import <Foundation/Foundation.h>
+
+//! Project version number for AiMouse.
+FOUNDATION_EXPORT double AiMouseVersionNumber;
+
+//! Project version string for AiMouse.
+FOUNDATION_EXPORT const unsigned char AiMouseVersionString[];
+
+// 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>
similarity index 91%
rename from MouseSdk/AiSdk/AiIotTools.h
rename to MouseSdk/AiMouseSdk/AiTools.h
index 07b3aa6..6384357 100644 (file)
@@ -1,6 +1,6 @@
 //
-//  AiIotTools.h
-//  AiSdk
+//  AiTools.h
+//  AiMouse
 //
 //  Created by incar on 2024/2/28.
 //
@@ -9,7 +9,7 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@interface AiIotTools : NSObject
+@interface AiTools : NSObject
 + (NSArray *)stringToArray:(NSString *)jsonString;
 + (NSString *)arrayToString:(NSArray *)arr;
 
similarity index 97%
rename from MouseSdk/AiSdk/AiIotTools.m
rename to MouseSdk/AiMouseSdk/AiTools.m
index db1a669..9acafb4 100644 (file)
@@ -1,13 +1,13 @@
 //
-//  AiIotTools.m
-//  AiSdk
+//  AiTools.m
+//  AiMouse
 //
 //  Created by incar on 2024/2/28.
 //
 
-#import "AiIotTools.h"
+#import "AiTools.h"
 
-@implementation AiIotTools
+@implementation AiTools
 + (NSArray *)stringToArray:(NSString *)jsonString{
     NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
     NSError *error;
diff --git a/MouseSdk/AiSdk/AiIot.h b/MouseSdk/AiSdk/AiIot.h
deleted file mode 100644 (file)
index 9665f0e..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-//
-//  AiIot.h
-//  AiSdk
-//
-//  Created by incar on 2024/2/28.
-//
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@protocol AiIotDelegate <NSObject>
-
-/// 鉴权状态回调
-/// - Parameter isSuccess:是否鉴权成功
-- (void)aiIotSendAuthStatus:(BOOL)isSuccess;
-
-/// 鉴权数据回调,需要将此数据转发给蓝牙设备
-/// - Parameter data: 数据
-- (void)aiIotSendAuthData:(NSData *)data;
-
-/// 指令回调
-/// - Parameter data: 数据
-- (void)aiIotSendCmd:(NSData *)data;
-
-/// 录音回调
-/// - Parameter data: pcm格式语音数据
-- (void)aiIotSendRecordData:(NSData *)data;
-
-@end
-
-@interface AiIot : NSObject
-@property (nonatomic, weak) id<AiIotDelegate> delegate;/// 代理
-
-/// 单利
-+(AiIot *)shared;
-
-/// 开始鉴权
-- (void)startAuthentication;
-
-///  传输鉴权数据给sdk
-/// - Parameter data: 蓝牙设备传过来的数据
-- (void)sendAuthToSdk:(NSData *)data;
-
-/// 传输业务数据给sdk
-/// - Parameter data:蓝牙设备传过来的数据
-- (void)sendBuinessToSdk:(NSData *)data;
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/MouseSdk/AiSdk/AiIotAudioConverter.h b/MouseSdk/AiSdk/AiIotAudioConverter.h
deleted file mode 100644 (file)
index 29e6437..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-//
-//
-//#import <Foundation/Foundation.h>
-//@interface AiIotAudioConverter : NSObject
-//
-//
-//
-//@end
diff --git a/MouseSdk/AiSdk/AiIotAudioConverter.m b/MouseSdk/AiSdk/AiIotAudioConverter.m
deleted file mode 100644 (file)
index 09f1948..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-//
-//
-//#import "AiIotAudioConverter.h"
-//#import <Foundation/Foundation.h>
-//#import <AudioToolbox/AudioToolbox.h>
-//
-//static void CheckError(OSStatus error, const char *operation)
-//{
-//    if (error == noErr) return;
-//    char errorString[20];
-//    // See if it appears to be a 4-char-code
-//    *(UInt32 *)(errorString + 1) = CFSwapInt32HostToBig(error);
-//    if (isprint(errorString[1]) && isprint(errorString[2]) && isprint(errorString[3]) && isprint(errorString[4])) {
-//        errorString[0] = errorString[5] = '\'';
-//        errorString[6] = '\0';
-//    } else {
-//        // No, format it as an integer
-//        sprintf(errorString, "%d", (int)error);
-//        fprintf(stderr, "Error: %s (%s)\n", operation, errorString);
-//    }
-//}
-//
-//
-////AudioConverterConvertBuffer
-//@interface AiIotAudioConverter()
-//
-//@property (nonatomic) AudioStreamBasicDescription inputFormat;
-//@property (nonatomic) AudioStreamBasicDescription *outputFormat;
-//@end
-//
-//@implementation AiIotAudioConverter
-//
-//
-//- (void)convert{
-//    
-//    AudioStreamBasicDescription mSourceFormat;
-//    
-//    {
-//        AudioStreamBasicDescription dataFormat = {};
-//        dataFormat.mFormatID = kAudioFormatLinearPCM;
-//        dataFormat.mSampleRate = 16000;
-//        dataFormat.mChannelsPerFrame = 1;
-//        dataFormat.mBitsPerChannel = 16;
-//        dataFormat.mBytesPerPacket = 1 * sizeof(SInt16);
-//        dataFormat.mBytesPerFrame = 1 * sizeof(SInt16);
-//        dataFormat.mFramesPerPacket = 1;
-//        dataFormat.mFormatFlags = kLinearPCMFormatFlagIsBigEndian | kLinearPCMFormatFlagIsSignedInteger;
-//        self.outputFormat = &(dataFormat);
-//    }
-//
-//    
-//    AudioConverterRef audioConverter;
-//    OSStatus status = AudioConverterNew(&_inputFormat,
-//                                        _outputFormat,
-//                                        &audioConverter);
-//    CheckError(status, "AudioConveterNew failed");
-//    
-//    
-//    AudioStreamPacketDescription outputPacketDesc;
-//    status = AudioConverterFillComplexBuffer(audioConverter,
-//                                                      DecodeConverterComplexInputDataProc,
-//                                                      &userInfo,
-//                                                      &ioOutputDataPackets,
-//                                                      &fillBufferList,
-//                                                      &outputPacketDesc);
-//    
-//    // if interrupted in the process of the conversion call, we must handle the error appropriately
-//    if (status != noErr) {
-//        if (status == kAudioConverterErr_HardwareInUse) {
-//            printf("Audio Converter returned kAudioConverterErr_HardwareInUse!\n");
-//        } else {
-//            if (![self checkError:status withErrorString:@"AudioConverterFillComplexBuffer error!"]) {
-//                return;
-//            }
-//        }
-//    } else {
-//        if (ioOutputDataPackets == 0) {
-//            // This is the EOF condition.
-//            status = noErr;
-//        }
-//        
-//        if (completeHandler) {
-//            completeHandler(&fillBufferList, ioOutputDataPackets, &outputPacketDesc);
-//        }
-//    }
-//}
-//
-//#pragma mark - Decode Callback
-//OSStatus DecodeConverterComplexInputDataProc(AudioConverterRef              inAudioConverter,
-//                                             UInt32                         *ioNumberDataPackets,
-//                                             AudioBufferList                *ioData,
-//                                             AudioStreamPacketDescription   **outDataPacketDescription,
-//                                             void                           *inUserData) {
-//    XDXConverterInfoType *info = (XDXConverterInfoType *)inUserData;
-//    
-//    if (info->sourceDataSize <= 0) {
-//        ioNumberDataPackets = 0;
-//        return -1;
-//    }
-//    
-//    *outDataPacketDescription = &info->packetDesc;
-//    (*outDataPacketDescription)[0].mStartOffset             = 0;
-//    (*outDataPacketDescription)[0].mDataByteSize            = info->sourceDataSize;
-//    (*outDataPacketDescription)[0].mVariableFramesInPacket  = 0;
-//    
-//    ioData->mNumberBuffers              = 1;
-//    ioData->mBuffers[0].mData           = info->sourceBuffer;
-//    ioData->mBuffers[0].mNumberChannels = info->sourceChannelsPerFrame;
-//    ioData->mBuffers[0].mDataByteSize   = info->sourceDataSize;
-//    
-//    return noErr;
-//}
-////-(AudioStreamBasicDescription)getAudioFormatWithFormatID:(UInt32)formatID sampleRate:(Float64)sampleRate channelCount:(UInt32)channelCount {
-////    AudioStreamBasicDescription dataFormat = {0};
-////    
-////    UInt32 size = sizeof(dataFormat.mSampleRate);
-////    // Get hardware origin sample rate. (Recommended it)
-////    Float64 hardwareSampleRate = 0;
-////    AudioSessionGetProperty(kAudioSessionProperty_CurrentHardwareSampleRate,
-////                            &size,
-////                            &hardwareSampleRate);
-////    // Manual set sample rate
-////    dataFormat.mSampleRate = sampleRate;
-////    
-////    size = sizeof(dataFormat.mChannelsPerFrame);
-////    // Get hardware origin channels number. (Must refer to it)
-////    UInt32 hardwareNumberChannels = 0;
-////    AudioSessionGetProperty(kAudioSessionProperty_CurrentHardwareInputNumberChannels,
-////                            &size,
-////                            &hardwareNumberChannels);
-////    dataFormat.mChannelsPerFrame = channelCount;
-////    
-////    // Set audio format
-////    dataFormat.mFormatID = formatID;
-////    
-////    // Set detail audio format params
-////    if (formatID == kAudioFormatLinearPCM) {
-////        dataFormat.mFormatFlags     = kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked;
-////        dataFormat.mBitsPerChannel  = kXDXAudioPCMBitsPerChannel;
-////        dataFormat.mBytesPerPacket  = dataFormat.mBytesPerFrame = (dataFormat.mBitsPerChannel / 8) * dataFormat.mChannelsPerFrame;
-////        dataFormat.mFramesPerPacket = kXDXAudioPCMFramesPerPacket;
-////    }else if (formatID == kAudioFormatMPEG4AAC) {
-////        dataFormat.mFormatFlags = kMPEG4Object_AAC_Main;
-////    }
-////
-////    NSLog(@"Audio Recorder: starup PCM audio encoder:%f,%d",sampleRate,channelCount);
-////    return dataFormat;
-////}
-//@end
diff --git a/MouseSdk/AiSdk/AiSdk.h b/MouseSdk/AiSdk/AiSdk.h
deleted file mode 100644 (file)
index 2ea1c55..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-//
-//  AiSdk.h
-//  AiSdk
-//
-//  Created by incar on 2024/2/19.
-//
-
-#import <Foundation/Foundation.h>
-
-//! Project version number for AiSdk.
-FOUNDATION_EXPORT double AiSdkVersionNumber;
-
-//! Project version string for AiSdk.
-FOUNDATION_EXPORT const unsigned char AiSdkVersionString[];
-
-// In this header, you should import all the public headers of your framework using statements like #import <AiSdk/PublicHeader.h>
-
-#import <AiSdk/AiIot.h>
-#import <AiSdk/AiIotTools.h>
index 53e7f36..85454d0 100755 (executable)
@@ -34,7 +34,7 @@ void sdk_iot_mqtt_log_callback(const char * _Nonnull log) {
 //    __weak typeof(self) weak_self = self;\r
     \r
     [[IotMQTT shareInstance] setConnectStatusCallback:^(MqttConnectStatus_C ConnectStatus) {\r
-        NSLog(@"---------------connect status :%lu", ConnectStatus);\r
+//        NSLog(@"---------------connect status :%lu", ConnectStatus);\r
 //        if (weak_self.DebugAddrBlock)\r
         MqttManager_C.sharedInstance.DebugAddrBlock(@{@"mqtt addr": IotMQTT.shareInstance,\r
                               @"mqtt mgr addr " : [NSString stringWithFormat:@"%@ - %@", MqttManager_C.sharedInstance, MqttManager_C.sharedInstance]\r
@@ -44,8 +44,8 @@ void sdk_iot_mqtt_log_callback(const char * _Nonnull log) {
     }];\r
     \r
     [[IotMQTT shareInstance] setMessageArrivalCallback:^(NSString * _Nonnull topic, NSString * _Nonnull payload) {\r
-        NSLog(@"---------topic :%@", topic);\r
-        NSLog(@"payload :%@", payload);\r
+//        NSLog(@"---------topic :%@", topic);\r
+//        NSLog(@"payload :%@", payload);\r
         \r
         MqttManager_C.sharedInstance.DebugAddrBlock(@{@"mqtt addr": IotMQTT.shareInstance,\r
                               @"mqtt mgr addr " : [NSString stringWithFormat:@"%@ - %@", MqttManager_C.sharedInstance, MqttManager_C.sharedInstance]\r
index f962f58..8015d55 100644 (file)
@@ -7,6 +7,8 @@
        objects = {
 
 /* Begin PBXBuildFile section */
+               18AE9CE02B99C72000743515 /* AiMouse.h in Headers */ = {isa = PBXBuildFile; fileRef = 18AE9CDE2B99C71F00743515 /* AiMouse.h */; settings = {ATTRIBUTES = (Public, ); }; };
+               18AE9CE12B99C72000743515 /* AiMouse.m in Sources */ = {isa = PBXBuildFile; fileRef = 18AE9CDF2B99C71F00743515 /* AiMouse.m */; };
                18BF1DCF2B81AB7C00B8D90F /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 18BF1DCE2B81AB7C00B8D90F /* AppDelegate.m */; };
                18BF1DD22B81AB7C00B8D90F /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 18BF1DD12B81AB7C00B8D90F /* ViewController.m */; };
                18BF1DD42B81AB7F00B8D90F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 18BF1DD32B81AB7F00B8D90F /* Assets.xcassets */; };
                18BF1E052B81E18800B8D90F /* ConnectKitVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18BF1E042B81E18800B8D90F /* ConnectKitVC.swift */; };
                18BF1E222B83066200B8D90F /* BleManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 18BF1E212B83066200B8D90F /* BleManager.m */; };
                18BF1E762B832D2E00B8D90F /* ScanVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 18BF1E752B832D2E00B8D90F /* ScanVC.m */; };
-               18BF1E8A2B8362D300B8D90F /* AiSdk.h in Headers */ = {isa = PBXBuildFile; fileRef = 18BF1E892B8362D300B8D90F /* AiSdk.h */; settings = {ATTRIBUTES = (Public, ); }; };
-               18BF1E8D2B8362D300B8D90F /* AiSdk.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 18BF1E872B8362D300B8D90F /* AiSdk.framework */; };
-               18BF1E8E2B8362D300B8D90F /* AiSdk.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 18BF1E872B8362D300B8D90F /* AiSdk.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+               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, ); }; };
                18F3235D2B8ED78300CABA2E /* ScanCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 18F3235C2B8ED78300CABA2E /* ScanCell.m */; };
-               18F323672B8F1C1900CABA2E /* AiIot.h in Headers */ = {isa = PBXBuildFile; fileRef = 18F323652B8F1C1900CABA2E /* AiIot.h */; settings = {ATTRIBUTES = (Public, ); }; };
-               18F323682B8F1C1900CABA2E /* AiIot.m in Sources */ = {isa = PBXBuildFile; fileRef = 18F323662B8F1C1900CABA2E /* AiIot.m */; };
                18F323772B8F2DAD00CABA2E /* AliIotTools.m in Sources */ = {isa = PBXBuildFile; fileRef = 18F323752B8F2DAC00CABA2E /* AliIotTools.m */; };
                18F3237F2B8F30B200CABA2E /* AliIotConnectKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 18F3237D2B8F2EFC00CABA2E /* AliIotConnectKit.framework */; };
                18F323802B8F30B200CABA2E /* AliIotConnectKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 18F3237D2B8F2EFC00CABA2E /* AliIotConnectKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
-               18F323842B8F330100CABA2E /* AiIotAuthManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 18F323822B8F330100CABA2E /* AiIotAuthManager.h */; };
-               18F323852B8F330100CABA2E /* AiIotAuthManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 18F323832B8F330100CABA2E /* AiIotAuthManager.m */; };
+               18F323842B8F330100CABA2E /* AiAuthManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 18F323822B8F330100CABA2E /* AiAuthManager.h */; };
+               18F323852B8F330100CABA2E /* AiAuthManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 18F323832B8F330100CABA2E /* AiAuthManager.m */; };
                18F323872B8F338300CABA2E /* AliIotConnectKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 18F3237D2B8F2EFC00CABA2E /* AliIotConnectKit.framework */; };
                18F3238A2B8F4DBE00CABA2E /* PCMPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 18F323892B8F4DBE00CABA2E /* PCMPlayer.m */; };
-               18F3238E2B8F4F7300CABA2E /* AiIotAudioManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 18F3238C2B8F4F7300CABA2E /* AiIotAudioManager.h */; };
-               18F3238F2B8F4F7300CABA2E /* AiIotAudioManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 18F3238D2B8F4F7300CABA2E /* AiIotAudioManager.m */; };
-               18F323952B8F525C00CABA2E /* AiIotTools.h in Headers */ = {isa = PBXBuildFile; fileRef = 18F323932B8F525C00CABA2E /* AiIotTools.h */; settings = {ATTRIBUTES = (Public, ); }; };
-               18F323962B8F525C00CABA2E /* AiIotTools.m in Sources */ = {isa = PBXBuildFile; fileRef = 18F323942B8F525C00CABA2E /* AiIotTools.m */; };
-               18F323A82B9095D300CABA2E /* AiIotAudioConverter.h in Headers */ = {isa = PBXBuildFile; fileRef = 18F323A62B9095D300CABA2E /* AiIotAudioConverter.h */; };
-               18F323A92B9095D300CABA2E /* AiIotAudioConverter.m in Sources */ = {isa = PBXBuildFile; fileRef = 18F323A72B9095D300CABA2E /* AiIotAudioConverter.m */; };
-               18F323C42B93352000CABA2E /* AiIotAudioDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 18F323C22B93352000CABA2E /* AiIotAudioDecoder.h */; };
-               18F323C52B93352000CABA2E /* AiIotAudioDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 18F323C32B93352000CABA2E /* AiIotAudioDecoder.m */; };
+               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 */; };
+               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 */; };
+               18F323C52B93352000CABA2E /* AiAudioDecoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 18F323C32B93352000CABA2E /* AiAudioDecoder.m */; };
                18F3249E2B9337D500CABA2E /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 18F3249D2B9337D500CABA2E /* libz.tbd */; };
                18F324A22B93381C00CABA2E /* libbz2.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 18F324A12B93381C00CABA2E /* libbz2.tbd */; };
                18F324A42B93382900CABA2E /* libiconv.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 18F324A32B93382900CABA2E /* libiconv.tbd */; };
                18F328B82B970B4000CABA2E /* libssl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 18F327F22B970B3F00CABA2E /* libssl.a */; };
                18F328B92B970B4000CABA2E /* libswscale.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 18F327F32B970B3F00CABA2E /* libswscale.a */; };
                18F328D52B98569D00CABA2E /* Config.m in Sources */ = {isa = PBXBuildFile; fileRef = 18F328D42B98569D00CABA2E /* Config.m */; };
+               18F328DE2B9950E000CABA2E /* AiFrameManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 18F328DC2B9950E000CABA2E /* AiFrameManager.h */; };
+               18F328DF2B9950E000CABA2E /* AiFrameManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 18F328DD2B9950E000CABA2E /* AiFrameManager.m */; };
                8A6657BD1406314D4CBB7CEF /* libPods-MouseSdk.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0311DF3AD67ED792549B96BD /* libPods-MouseSdk.a */; };
 /* End PBXBuildFile section */
 
                        dstSubfolderSpec = 10;
                        files = (
                                18F323802B8F30B200CABA2E /* AliIotConnectKit.framework in Embed Frameworks */,
-                               18BF1E8E2B8362D300B8D90F /* AiSdk.framework in Embed Frameworks */,
+                               18BF1E8E2B8362D300B8D90F /* AiMouseSdk.framework in Embed Frameworks */,
                        );
                        name = "Embed Frameworks";
                        runOnlyForDeploymentPostprocessing = 0;
 
 /* Begin PBXFileReference section */
                0311DF3AD67ED792549B96BD /* libPods-MouseSdk.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-MouseSdk.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+               18AE9CDE2B99C71F00743515 /* AiMouse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AiMouse.h; sourceTree = "<group>"; };
+               18AE9CDF2B99C71F00743515 /* AiMouse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AiMouse.m; sourceTree = "<group>"; };
                18BF1DCA2B81AB7C00B8D90F /* MouseSdk.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MouseSdk.app; sourceTree = BUILT_PRODUCTS_DIR; };
                18BF1DCD2B81AB7C00B8D90F /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
                18BF1DCE2B81AB7C00B8D90F /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
                18BF1E212B83066200B8D90F /* BleManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BleManager.m; sourceTree = "<group>"; };
                18BF1E742B832D2E00B8D90F /* ScanVC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ScanVC.h; sourceTree = "<group>"; };
                18BF1E752B832D2E00B8D90F /* ScanVC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ScanVC.m; sourceTree = "<group>"; };
-               18BF1E872B8362D300B8D90F /* AiSdk.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AiSdk.framework; sourceTree = BUILT_PRODUCTS_DIR; };
-               18BF1E892B8362D300B8D90F /* AiSdk.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiSdk.h; 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>"; };
                18F3235B2B8ED78300CABA2E /* ScanCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ScanCell.h; sourceTree = "<group>"; };
                18F3235C2B8ED78300CABA2E /* ScanCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ScanCell.m; sourceTree = "<group>"; };
-               18F323652B8F1C1900CABA2E /* AiIot.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiIot.h; sourceTree = "<group>"; };
-               18F323662B8F1C1900CABA2E /* AiIot.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiIot.m; sourceTree = "<group>"; };
                18F323752B8F2DAC00CABA2E /* AliIotTools.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AliIotTools.m; sourceTree = "<group>"; };
                18F323762B8F2DAD00CABA2E /* AliIotTools.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AliIotTools.h; sourceTree = "<group>"; };
                18F323782B8F2EFB00CABA2E /* AliIotConnectKit.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = AliIotConnectKit.xcodeproj; path = AliIotConnectKitSDK/AliIotConnectKit.xcodeproj; sourceTree = "<group>"; };
-               18F323822B8F330100CABA2E /* AiIotAuthManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiIotAuthManager.h; sourceTree = "<group>"; };
-               18F323832B8F330100CABA2E /* AiIotAuthManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiIotAuthManager.m; sourceTree = "<group>"; };
+               18F323822B8F330100CABA2E /* AiAuthManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiAuthManager.h; sourceTree = "<group>"; };
+               18F323832B8F330100CABA2E /* AiAuthManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiAuthManager.m; sourceTree = "<group>"; };
                18F323882B8F4DBE00CABA2E /* PCMPlayer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PCMPlayer.h; sourceTree = "<group>"; };
                18F323892B8F4DBE00CABA2E /* PCMPlayer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PCMPlayer.m; sourceTree = "<group>"; };
-               18F3238C2B8F4F7300CABA2E /* AiIotAudioManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiIotAudioManager.h; sourceTree = "<group>"; };
-               18F3238D2B8F4F7300CABA2E /* AiIotAudioManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiIotAudioManager.m; sourceTree = "<group>"; };
-               18F323932B8F525C00CABA2E /* AiIotTools.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiIotTools.h; sourceTree = "<group>"; };
-               18F323942B8F525C00CABA2E /* AiIotTools.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiIotTools.m; sourceTree = "<group>"; };
-               18F323A62B9095D300CABA2E /* AiIotAudioConverter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiIotAudioConverter.h; sourceTree = "<group>"; };
-               18F323A72B9095D300CABA2E /* AiIotAudioConverter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiIotAudioConverter.m; sourceTree = "<group>"; };
-               18F323C22B93352000CABA2E /* AiIotAudioDecoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiIotAudioDecoder.h; sourceTree = "<group>"; };
-               18F323C32B93352000CABA2E /* AiIotAudioDecoder.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiIotAudioDecoder.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>"; };
+               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>"; };
+               18F323C32B93352000CABA2E /* AiAudioDecoder.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiAudioDecoder.m; sourceTree = "<group>"; };
                18F3249D2B9337D500CABA2E /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
                18F3249F2B9337E400CABA2E /* CoreMedia.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMedia.framework; path = System/Library/Frameworks/CoreMedia.framework; sourceTree = SDKROOT; };
                18F324A12B93381C00CABA2E /* libbz2.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libbz2.tbd; path = usr/lib/libbz2.tbd; sourceTree = SDKROOT; };
                18F327F32B970B3F00CABA2E /* libswscale.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libswscale.a; sourceTree = "<group>"; };
                18F328D32B98569D00CABA2E /* Config.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Config.h; sourceTree = "<group>"; };
                18F328D42B98569D00CABA2E /* Config.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Config.m; sourceTree = "<group>"; };
+               18F328DC2B9950E000CABA2E /* AiFrameManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiFrameManager.h; sourceTree = "<group>"; };
+               18F328DD2B9950E000CABA2E /* AiFrameManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiFrameManager.m; sourceTree = "<group>"; };
                51DE1118FCBA78EBEE6FE2CD /* Pods-MouseSdk.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MouseSdk.release.xcconfig"; path = "Target Support Files/Pods-MouseSdk/Pods-MouseSdk.release.xcconfig"; sourceTree = "<group>"; };
                811936622867478806C1A8BB /* Pods-MouseSdk.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MouseSdk.debug.xcconfig"; path = "Target Support Files/Pods-MouseSdk/Pods-MouseSdk.debug.xcconfig"; sourceTree = "<group>"; };
 /* End PBXFileReference section */
                        files = (
                                18F3237F2B8F30B200CABA2E /* AliIotConnectKit.framework in Frameworks */,
                                8A6657BD1406314D4CBB7CEF /* libPods-MouseSdk.a in Frameworks */,
-                               18BF1E8D2B8362D300B8D90F /* AiSdk.framework in Frameworks */,
+                               18BF1E8D2B8362D300B8D90F /* AiMouseSdk.framework in Frameworks */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                                18BF1DCC2B81AB7C00B8D90F /* MouseSdk */,
                                18BF1DE22B81AB8000B8D90F /* MouseSdkTests */,
                                18BF1DEC2B81AB8000B8D90F /* MouseSdkUITests */,
-                               18BF1E882B8362D300B8D90F /* AiSdk */,
+                               18BF1E882B8362D300B8D90F /* AiMouseSdk */,
                                18BF1DCB2B81AB7C00B8D90F /* Products */,
                                723588BAA058E1012143D29F /* Pods */,
                                543EC4E5F9FC310D6B850947 /* Frameworks */,
                                18BF1DCA2B81AB7C00B8D90F /* MouseSdk.app */,
                                18BF1DDF2B81AB8000B8D90F /* MouseSdkTests.xctest */,
                                18BF1DE92B81AB8000B8D90F /* MouseSdkUITests.xctest */,
-                               18BF1E872B8362D300B8D90F /* AiSdk.framework */,
+                               18BF1E872B8362D300B8D90F /* AiMouseSdk.framework */,
                        );
                        name = Products;
                        sourceTree = "<group>";
                        path = Ble;
                        sourceTree = "<group>";
                };
-               18BF1E882B8362D300B8D90F /* AiSdk */ = {
+               18BF1E882B8362D300B8D90F /* AiMouseSdk */ = {
                        isa = PBXGroup;
                        children = (
                                18F327212B970B3E00CABA2E /* ffmpeg */,
-                               18BF1E892B8362D300B8D90F /* AiSdk.h */,
-                               18F323652B8F1C1900CABA2E /* AiIot.h */,
-                               18F323662B8F1C1900CABA2E /* AiIot.m */,
-                               18F323932B8F525C00CABA2E /* AiIotTools.h */,
-                               18F323942B8F525C00CABA2E /* AiIotTools.m */,
-                               18F3238C2B8F4F7300CABA2E /* AiIotAudioManager.h */,
-                               18F3238D2B8F4F7300CABA2E /* AiIotAudioManager.m */,
-                               18F323822B8F330100CABA2E /* AiIotAuthManager.h */,
-                               18F323832B8F330100CABA2E /* AiIotAuthManager.m */,
-                               18F323A62B9095D300CABA2E /* AiIotAudioConverter.h */,
-                               18F323A72B9095D300CABA2E /* AiIotAudioConverter.m */,
-                               18F323C22B93352000CABA2E /* AiIotAudioDecoder.h */,
-                               18F323C32B93352000CABA2E /* AiIotAudioDecoder.m */,
+                               18BF1E892B8362D300B8D90F /* AiMouseSdk.h */,
+                               18AE9CDE2B99C71F00743515 /* AiMouse.h */,
+                               18AE9CDF2B99C71F00743515 /* AiMouse.m */,
+                               18F328DC2B9950E000CABA2E /* AiFrameManager.h */,
+                               18F328DD2B9950E000CABA2E /* AiFrameManager.m */,
+                               18F323932B8F525C00CABA2E /* AiTools.h */,
+                               18F323942B8F525C00CABA2E /* AiTools.m */,
+                               18F3238C2B8F4F7300CABA2E /* AiAudioManager.h */,
+                               18F3238D2B8F4F7300CABA2E /* AiAudioManager.m */,
+                               18F323822B8F330100CABA2E /* AiAuthManager.h */,
+                               18F323832B8F330100CABA2E /* AiAuthManager.m */,
+                               18F323A62B9095D300CABA2E /* AiAudioConverter.h */,
+                               18F323A72B9095D300CABA2E /* AiAudioConverter.m */,
+                               18F323C22B93352000CABA2E /* AiAudioDecoder.h */,
+                               18F323C32B93352000CABA2E /* AiAudioDecoder.m */,
                        );
-                       path = AiSdk;
+                       path = AiMouseSdk;
                        sourceTree = "<group>";
                };
                18F323792B8F2EFB00CABA2E /* Products */ = {
                                18F3289C2B970B4000CABA2E /* ts.h in Headers */,
                                18F3281D2B970B3F00CABA2E /* timecode.h in Headers */,
                                18F328162B970B3F00CABA2E /* ffversion.h in Headers */,
-                               18F323A82B9095D300CABA2E /* AiIotAudioConverter.h in Headers */,
+                               18F323A82B9095D300CABA2E /* AiAudioConverter.h in Headers */,
                                18F328272B970B3F00CABA2E /* hmac.h in Headers */,
                                18F328502B970B4000CABA2E /* swscale.h in Headers */,
                                18F328AE2B970B4000CABA2E /* idea.h in Headers */,
                                18F327FE2B970B3F00CABA2E /* blowfish.h in Headers */,
                                18F328032B970B3F00CABA2E /* stereo3d.h in Headers */,
                                18F328982B970B4000CABA2E /* ocsp.h in Headers */,
-                               18F323C42B93352000CABA2E /* AiIotAudioDecoder.h in Headers */,
+                               18F323C42B93352000CABA2E /* AiAudioDecoder.h in Headers */,
                                18F3283F2B970B3F00CABA2E /* hdr_dynamic_metadata.h in Headers */,
                                18F328692B970B4000CABA2E /* dtls1.h in Headers */,
                                18F328012B970B3F00CABA2E /* version.h in Headers */,
                                18F3287A2B970B4000CABA2E /* dh.h in Headers */,
                                18F3284E2B970B3F00CABA2E /* avformat.h in Headers */,
                                18F328782B970B4000CABA2E /* bio.h in Headers */,
-                               18F3238E2B8F4F7300CABA2E /* AiIotAudioManager.h in Headers */,
+                               18F3238E2B8F4F7300CABA2E /* AiAudioManager.h in Headers */,
                                18F3285F2B970B4000CABA2E /* dirac.h in Headers */,
                                18F328202B970B3F00CABA2E /* hwcontext_dxva2.h in Headers */,
                                18F328022B970B3F00CABA2E /* murmur3.h in Headers */,
                                18F327F62B970B3F00CABA2E /* buffersink.h in Headers */,
                                18F3280C2B970B3F00CABA2E /* avutil.h in Headers */,
                                18F328952B970B4000CABA2E /* rc4.h in Headers */,
+                               18AE9CE02B99C72000743515 /* AiMouse.h in Headers */,
                                18F328A32B970B4000CABA2E /* krb5_asn.h in Headers */,
                                18F328822B970B4000CABA2E /* safestack.h in Headers */,
                                18F328322B970B3F00CABA2E /* tea.h in Headers */,
                                18F328262B970B3F00CABA2E /* common.h in Headers */,
                                18F328552B970B4000CABA2E /* version.h in Headers */,
                                18F3288D2B970B4000CABA2E /* camellia.h in Headers */,
-                               18BF1E8A2B8362D300B8D90F /* AiSdk.h in Headers */,
+                               18BF1E8A2B8362D300B8D90F /* AiMouseSdk.h in Headers */,
                                18F328372B970B3F00CABA2E /* encryption_info.h in Headers */,
                                18F328662B970B4000CABA2E /* pem.h in Headers */,
                                18F328482B970B3F00CABA2E /* intreadwrite.h in Headers */,
                                18F3285A2B970B4000CABA2E /* xvmc.h in Headers */,
                                18F3282B2B970B3F00CABA2E /* opt.h in Headers */,
                                18F3282C2B970B3F00CABA2E /* mastering_display_metadata.h in Headers */,
+                               18F328DE2B9950E000CABA2E /* AiFrameManager.h in Headers */,
                                18F3282F2B970B3F00CABA2E /* macros.h in Headers */,
                                18F328A82B970B4000CABA2E /* mdc2.h in Headers */,
                                18F328AB2B970B4000CABA2E /* asn1t.h in Headers */,
                                18F3280D2B970B3F00CABA2E /* xtea.h in Headers */,
                                18F3282D2B970B3F00CABA2E /* log.h in Headers */,
                                18F3280B2B970B3F00CABA2E /* lfg.h in Headers */,
-                               18F323672B8F1C1900CABA2E /* AiIot.h in Headers */,
                                18F328AA2B970B4000CABA2E /* srtp.h in Headers */,
                                18F328AD2B970B4000CABA2E /* ebcdic.h in Headers */,
                                18F3282A2B970B3F00CABA2E /* random_seed.h in Headers */,
                                18F328532B970B4000CABA2E /* adts_parser.h in Headers */,
                                18F328522B970B4000CABA2E /* config.h in Headers */,
                                18F328172B970B3F00CABA2E /* audio_fifo.h in Headers */,
-                               18F323842B8F330100CABA2E /* AiIotAuthManager.h in Headers */,
+                               18F323842B8F330100CABA2E /* AiAuthManager.h in Headers */,
                                18F3286D2B970B4000CABA2E /* cms.h in Headers */,
-                               18F323952B8F525C00CABA2E /* AiIotTools.h in Headers */,
+                               18F323952B8F525C00CABA2E /* AiTools.h in Headers */,
                                18F3286B2B970B4000CABA2E /* bn.h in Headers */,
                                18F328992B970B4000CABA2E /* ec.h in Headers */,
                                18F328422B970B3F00CABA2E /* aes_ctr.h in Headers */,
                        productReference = 18BF1DE92B81AB8000B8D90F /* MouseSdkUITests.xctest */;
                        productType = "com.apple.product-type.bundle.ui-testing";
                };
-               18BF1E862B8362D300B8D90F /* AiSdk */ = {
+               18BF1E862B8362D300B8D90F /* AiMouseSdk */ = {
                        isa = PBXNativeTarget;
-                       buildConfigurationList = 18BF1E922B8362D300B8D90F /* Build configuration list for PBXNativeTarget "AiSdk" */;
+                       buildConfigurationList = 18BF1E922B8362D300B8D90F /* Build configuration list for PBXNativeTarget "AiMouseSdk" */;
                        buildPhases = (
                                18BF1E822B8362D300B8D90F /* Headers */,
                                18BF1E832B8362D300B8D90F /* Sources */,
                        );
                        dependencies = (
                        );
-                       name = AiSdk;
+                       name = AiMouseSdk;
                        productName = AiSdk;
-                       productReference = 18BF1E872B8362D300B8D90F /* AiSdk.framework */;
+                       productReference = 18BF1E872B8362D300B8D90F /* AiMouseSdk.framework */;
                        productType = "com.apple.product-type.framework";
                };
 /* End PBXNativeTarget section */
                                18BF1DC92B81AB7C00B8D90F /* MouseSdk */,
                                18BF1DDE2B81AB8000B8D90F /* MouseSdkTests */,
                                18BF1DE82B81AB8000B8D90F /* MouseSdkUITests */,
-                               18BF1E862B8362D300B8D90F /* AiSdk */,
+                               18BF1E862B8362D300B8D90F /* AiMouseSdk */,
                        );
                };
 /* End PBXProject section */
                        isa = PBXSourcesBuildPhase;
                        buildActionMask = 2147483647;
                        files = (
-                               18F3238F2B8F4F7300CABA2E /* AiIotAudioManager.m in Sources */,
-                               18F323C52B93352000CABA2E /* AiIotAudioDecoder.m in Sources */,
-                               18F323A92B9095D300CABA2E /* AiIotAudioConverter.m in Sources */,
-                               18F323682B8F1C1900CABA2E /* AiIot.m in Sources */,
-                               18F323962B8F525C00CABA2E /* AiIotTools.m in Sources */,
-                               18F323852B8F330100CABA2E /* AiIotAuthManager.m in Sources */,
+                               18F3238F2B8F4F7300CABA2E /* AiAudioManager.m in Sources */,
+                               18F323C52B93352000CABA2E /* AiAudioDecoder.m in Sources */,
+                               18F323A92B9095D300CABA2E /* AiAudioConverter.m in Sources */,
+                               18F328DF2B9950E000CABA2E /* AiFrameManager.m in Sources */,
+                               18F323962B8F525C00CABA2E /* AiTools.m in Sources */,
+                               18AE9CE12B99C72000743515 /* AiMouse.m in Sources */,
+                               18F323852B8F330100CABA2E /* AiAuthManager.m in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                };
                18BF1E8C2B8362D300B8D90F /* PBXTargetDependency */ = {
                        isa = PBXTargetDependency;
-                       target = 18BF1E862B8362D300B8D90F /* AiSdk */;
+                       target = 18BF1E862B8362D300B8D90F /* AiMouseSdk */;
                        targetProxy = 18BF1E8B2B8362D300B8D90F /* PBXContainerItemProxy */;
                };
 /* End PBXTargetDependency section */
                                DYLIB_INSTALL_NAME_BASE = "@rpath";
                                ENABLE_MODULE_VERIFIER = YES;
                                GENERATE_INFOPLIST_FILE = YES;
-                               HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/AiSdk/ffmpeg/include";
+                               HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/AiMouseSdk/ffmpeg/include";
                                INFOPLIST_KEY_NSHumanReadableCopyright = "";
                                INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
                                LD_RUNPATH_SEARCH_PATHS = (
                                );
                                LIBRARY_SEARCH_PATHS = (
                                        "$(inherited)",
-                                       "$(PROJECT_DIR)/AiSdk/ffmpeg/lib",
+                                       "$(PROJECT_DIR)/AiMouseSdk/ffmpeg/lib",
                                );
                                MARKETING_VERSION = 1.0;
                                MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++";
                                MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20";
-                               PRODUCT_BUNDLE_IDENTIFIER = zhihuishixun.AiSdk;
+                               PRODUCT_BUNDLE_IDENTIFIER = zhihuishixun.AiMouse;
                                PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
                                SKIP_INSTALL = YES;
                                SWIFT_EMIT_LOC_STRINGS = YES;
                                DYLIB_INSTALL_NAME_BASE = "@rpath";
                                ENABLE_MODULE_VERIFIER = YES;
                                GENERATE_INFOPLIST_FILE = YES;
-                               HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/AiSdk/ffmpeg/include";
+                               HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/AiMouseSdk/ffmpeg/include";
                                INFOPLIST_KEY_NSHumanReadableCopyright = "";
                                INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
                                LD_RUNPATH_SEARCH_PATHS = (
                                );
                                LIBRARY_SEARCH_PATHS = (
                                        "$(inherited)",
-                                       "$(PROJECT_DIR)/AiSdk/ffmpeg/lib",
+                                       "$(PROJECT_DIR)/AiMouseSdk/ffmpeg/lib",
                                );
                                MARKETING_VERSION = 1.0;
                                MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++";
                                MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20";
-                               PRODUCT_BUNDLE_IDENTIFIER = zhihuishixun.AiSdk;
+                               PRODUCT_BUNDLE_IDENTIFIER = zhihuishixun.AiMouse;
                                PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
                                SKIP_INSTALL = YES;
                                SWIFT_EMIT_LOC_STRINGS = YES;
                        defaultConfigurationIsVisible = 0;
                        defaultConfigurationName = Release;
                };
-               18BF1E922B8362D300B8D90F /* Build configuration list for PBXNativeTarget "AiSdk" */ = {
+               18BF1E922B8362D300B8D90F /* Build configuration list for PBXNativeTarget "AiMouseSdk" */ = {
                        isa = XCConfigurationList;
                        buildConfigurations = (
                                18BF1E902B8362D300B8D90F /* Debug */,
index 98e7213..c0861b2 100644 (file)
@@ -15,8 +15,8 @@
             <BuildableReference
                BuildableIdentifier = "primary"
                BlueprintIdentifier = "18BF1E862B8362D300B8D90F"
-               BuildableName = "AiSdk.framework"
-               BlueprintName = "AiSdk"
+               BuildableName = "AiMouseSdk.framework"
+               BlueprintName = "AiMouseSdk"
                ReferencedContainer = "container:MouseSdk.xcodeproj">
             </BuildableReference>
          </BuildActionEntry>
@@ -50,8 +50,8 @@
          <BuildableReference
             BuildableIdentifier = "primary"
             BlueprintIdentifier = "18BF1E862B8362D300B8D90F"
-            BuildableName = "AiSdk.framework"
-            BlueprintName = "AiSdk"
+            BuildableName = "AiMouseSdk.framework"
+            BlueprintName = "AiMouseSdk"
             ReferencedContainer = "container:MouseSdk.xcodeproj">
          </BuildableReference>
       </MacroExpansion>
diff --git a/MouseSdk/MouseSdk.xcodeproj/xcshareddata/xcschemes/MouseSdk.xcscheme b/MouseSdk/MouseSdk.xcodeproj/xcshareddata/xcschemes/MouseSdk.xcscheme
new file mode 100644 (file)
index 0000000..109fc63
--- /dev/null
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1500"
+   version = "1.7">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "18BF1DC92B81AB7C00B8D90F"
+               BuildableName = "MouseSdk.app"
+               BlueprintName = "MouseSdk"
+               ReferencedContainer = "container:MouseSdk.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      shouldAutocreateTestPlan = "YES">
+      <Testables>
+         <TestableReference
+            skipped = "NO"
+            parallelizable = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "18BF1DDE2B81AB8000B8D90F"
+               BuildableName = "MouseSdkTests.xctest"
+               BlueprintName = "MouseSdkTests"
+               ReferencedContainer = "container:MouseSdk.xcodeproj">
+            </BuildableReference>
+         </TestableReference>
+         <TestableReference
+            skipped = "NO"
+            parallelizable = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "18BF1DE82B81AB8000B8D90F"
+               BuildableName = "MouseSdkUITests.xctest"
+               BlueprintName = "MouseSdkUITests"
+               ReferencedContainer = "container:MouseSdk.xcodeproj">
+            </BuildableReference>
+         </TestableReference>
+      </Testables>
+   </TestAction>
+   <LaunchAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      launchStyle = "0"
+      useCustomWorkingDirectory = "NO"
+      ignoresPersistentStateOnLaunch = "NO"
+      debugDocumentVersioning = "YES"
+      debugServiceExtension = "internal"
+      allowLocationSimulation = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "18BF1DC92B81AB7C00B8D90F"
+            BuildableName = "MouseSdk.app"
+            BlueprintName = "MouseSdk"
+            ReferencedContainer = "container:MouseSdk.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "18BF1DC92B81AB7C00B8D90F"
+            BuildableName = "MouseSdk.app"
+            BlueprintName = "MouseSdk"
+            ReferencedContainer = "container:MouseSdk.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>
index fe65781..3e1bcc9 100644 (file)
        </dict>
        <key>SuppressBuildableAutocreation</key>
        <dict>
+               <key>18BF1DC92B81AB7C00B8D90F</key>
+               <dict>
+                       <key>primary</key>
+                       <true/>
+               </dict>
+               <key>18BF1DDE2B81AB8000B8D90F</key>
+               <dict>
+                       <key>primary</key>
+                       <true/>
+               </dict>
+               <key>18BF1DE82B81AB8000B8D90F</key>
+               <dict>
+                       <key>primary</key>
+                       <true/>
+               </dict>
                <key>18BF1E862B8362D300B8D90F</key>
                <dict>
                        <key>primary</key>
index 099e864..74e66f9 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 6cf6e6a..f7b6b75 100644 (file)
@@ -11,7 +11,8 @@ NS_ASSUME_NONNULL_BEGIN
 
 @interface BleManager : NSObject
 @property (nonatomic,strong)void (^discoverDevice)(CBPeripheral *peripheral,NSDictionary *advertisementData) ;
-@property (nonatomic,strong)void (^didConnectDevice)(CBPeripheral *peripheral) ;
+@property (nonatomic,strong)void (^didConnectDevice)(CBPeripheral *peripheral);
+@property (nonatomic,strong)void (^authCallBack)(BOOL isSuccess);
 
 +(id)shared;
 
index 3097680..33ef9d7 100644 (file)
@@ -8,15 +8,15 @@
 
 
 #import "BleManager.h"
-#import <AiSdk/AiSdk.h>
+#import <AiMouseSdk/AiMouseSdk.h>
 #import "Config.h"
-//#import "AliIotTools.h"
 
-#define kVoiceUUID @"0783B03E-8535-B5A0-7140-A304D2194CB8"
-//#define kUnUUID @"0783B03E-8535-B5A0-7140-A304D2495CB9"
+//鉴权特征
+#define kAiUUID @"0783B03E-8535-B5A0-7140-A304D2194CB8"
+//Ai特征
 #define kAuthUUID @"0783B03E-8535-B5A0-7140-A304D2194CB7"
 
-@interface BleManager ()<CBCentralManagerDelegate,CBPeripheralDelegate,AiIotDelegate>
+@interface BleManager ()<CBCentralManagerDelegate,CBPeripheralDelegate,AiMouseDelegate>
 @property (nonatomic,strong) NSMutableArray *scanArray;
 @property(nonatomic, strong) CBCentralManager *centralManager;
 @property(nonatomic, strong) CBPeripheral *connectPeripheral;
@@ -46,7 +46,7 @@
     self = [super init];
     if (self) {
         self.centralManager = [[CBCentralManager alloc]initWithDelegate:self queue:nil];
-        [AiIot shared].delegate = self;
+        [AiMouse shared].delegate = self;
     }
     return self;
 }
             [peripheral setNotifyValue:YES forCharacteristic:characteristic];
         }
         if ([characteristic.UUID.UUIDString isEqualToString:kAuthUUID] ||
-            [characteristic.UUID.UUIDString isEqualToString:kVoiceUUID]
+            [characteristic.UUID.UUIDString isEqualToString:kAiUUID]
             ) {
             [peripheral setNotifyValue:YES forCharacteristic:characteristic];
         }
 
 - (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error {
     NSData *data = characteristic.value;
-    [self showLog:[NSString stringWithFormat:@"[receive] %@",[AiIotTools dataToHexString:data]]];
+//    [self showLog:[NSString stringWithFormat:@"[receive] %@",data]];
+    [self showLog:[NSString stringWithFormat:@"[receive] %@",[AiTools dataToHexString:data]]];
     if([characteristic.UUID.UUIDString isEqualToString:kAuthUUID]){
-        [[AiIot shared] sendAuthToSdk:data];
+        [[AiMouse shared] sendAuthDataToSdk:data];
     }
-    else{
-        [[AiIot shared] sendBuinessToSdk:data];
+    else if([characteristic.UUID.UUIDString isEqualToString:kAiUUID]){
+        [[AiMouse shared] sendAiDataToSdk:data];
     }
 }
 
-#pragma mark - AiIotDelegate
+#pragma mark - AiDelegate
 /// 鉴权状态回调
 /// - Parameter isSuccess:是否鉴权成功
--(void)aiIotSendAuthStatus:(BOOL)isSuccess{
+-(void)aiMouseAuthCallBack:(BOOL)isSuccess{
     [self showLog:[NSString stringWithFormat:@"鉴权结果 = %@",@(isSuccess)]];
+    if(self.authCallBack){
+        self.authCallBack(isSuccess);
+    }
 }
 /// 鉴权数据回调,需要将此数据转发给蓝牙设备
 /// - Parameter data: 数据
-- (void)aiIotSendAuthData:(NSData *)data{
-    [self showLog:[NSString stringWithFormat:@"[send] %@",[AiIotTools dataToHexString:data]]];
+- (void)aiMouseSendAuthData:(NSData *)data{
+    [self showLog:[NSString stringWithFormat:@"[send] %@",[AiTools dataToHexString:data]]];
     [self.connectPeripheral writeValue:data forCharacteristic:self.authCha type:CBCharacteristicWriteWithoutResponse];
 }
 /// 指令回调
 /// - Parameter data: 数据
-- (void)aiIotSendCmd:(NSData *)data{
-    NSString *str = [[AiIotTools dataToHexString:data] lowercaseString];
-    NSString *cmd = [str substringWithRange:NSMakeRange(0, 12)];
-    if([cmd hasPrefix:@"0a"] && [cmd hasSuffix:@"31"]){
-        [self showLog:@"开始录音"];
+- (void)aiMouseSendCmdData:(NSData *)data{
+    NSString *cmd = [[AiTools dataToHexString:data] lowercaseString];
+    if([cmd hasSuffix:@"31"]){
+        [self showLog:@"录音键开始录音"];
+        self.recordData = [[NSMutableData alloc] init];
+    }
+    else if([cmd hasSuffix:@"32"]){
+        [self showLog:@"录音键结束录音"];
+        [self finishRecored:self.recordData];
+    }
+    if([cmd hasSuffix:@"25"]){
+        [self showLog:@"AI键开始录音"];
         self.recordData = [[NSMutableData alloc] init];
     }
-    if( [cmd hasPrefix:@"0a"] && [cmd hasSuffix:@"32"]){
-        [self showLog:@"结束录音"];
+    else if([cmd hasSuffix:@"26"]){
+        [self showLog:@"AI键结束录音"];
         [self finishRecored:self.recordData];
     }
-//    else{
-//        [self showLog:@"未实现指令"];
-//    }
 }
 /// 录音回调
 /// - Parameter data: pcm格式语音数据
-- (void)aiIotSendRecordData:(NSData *)data{
+- (void)aiMouseSendRecordData:(NSData *)data{
     [self.recordData appendData:data];
 }
 
 }
 
 - (void)startAuth{
-    [[AiIot shared] startAuthentication];
+    [[AiMouse shared] startAuthentication];
 }
 
 #pragma mark - other
index e21d29e..611e2f2 100644 (file)
@@ -1,5 +1,5 @@
 ////
-////  AiIotPlayer.h
+////  AiPlayer.h
 ////  MouseSdk
 ////
 ////  Created by incar on 2024/2/28.
index e923c1b..9efd750 100644 (file)
@@ -1,5 +1,5 @@
 ////
-////  AiIotPlayer.m
+////  AiPlayer.m
 ////  MouseSdk
 ////
 ////  Created by incar on 2024/2/28.
index 3ff6c13..e953377 100644 (file)
@@ -7,10 +7,9 @@
 
 #import "ViewController.h"
 #import "ScanVC.h"
-#import "AiIotTools.h"
+#import "AiTools.h"
 #import "Ble/BleManager.h"
 
-
 @interface ViewController ()
 
 @end
@@ -25,7 +24,7 @@
     // Do any additional setup after loading the view.
     self.title = @"AI SDK";
     {
-        NSButton *btn = [[NSButton alloc]initWithFrame:NSMakeRect(100, self.view.bounds.size.height - 50, 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];
         btn.state = 1;
         [self.view addSubview:btn];
     }
-    {
-        NSButton *btn = [[NSButton alloc]initWithFrame:NSMakeRect(100, self.view.bounds.size.height - 100, 100, 45)];
-        btn.bordered = true;
-        btn.title = @"initSDK";
-        [btn setTarget:self];
-        [btn setAction:@selector(initSDK)];
-        btn.state = 1;
-        [self.view addSubview:btn];
-    }
     {
         NSButton *btn = [[NSButton alloc]initWithFrame:NSMakeRect(100, self.view.bounds.size.height - 150, 100, 45)];
         btn.bordered = true;
-        btn.title = @"fgs";
+        btn.title = @"鉴权";
         [btn setTarget:self];
-        [btn setAction:@selector(checkFGSStatus)];
-        btn.state = 1;
-        [self.view addSubview:btn];
-    }
-    {
-        NSButton *btn = [[NSButton alloc]initWithFrame:NSMakeRect(100, self.view.bounds.size.height - 200, 100, 45)];
-        btn.bordered = true;
-        btn.title = @"lp";
-        [btn setTarget:self];
-        [btn setAction:@selector(connectLp)];
+        [btn setAction:@selector(checkAuth)];
         btn.state = 1;
         [self.view addSubview:btn];
     }
@@ -78,6 +59,7 @@
 - (void)setupBleManger{
     BleManager *manager = [BleManager shared];
     __weak typeof(BleManager) *weakManager = manager;
+    __weak typeof(self) ws = self;
     manager.discoverDevice = ^(CBPeripheral *peripheral,NSDictionary *advertisementData){
         if(peripheral.name.length == 0){
             return;
     };
     manager.didConnectDevice = ^(CBPeripheral * _Nonnull peripheral) {
         NSLog(@"连接成功");
-        
     };
-}
-- (void)initSDK{
-//    NSData *data = [BleTools dataWithHexString:@"0000004f0000"];
-//    [[BleManager shared] sendToBle:data];
-    
+    manager.authCallBack = ^(BOOL isSuccess) {
+        [ws showAuthResult:isSuccess];
+    };
 }
 
-- (void)checkFGSStatus{
+- (void)checkAuth{
     [[BleManager shared] startAuth];
 }
 
-- (void)connectLp{
-//    [AliConnectMananger_C.shared startConnectLpStateWithResult:^(BOOL isSuccess, NSDictionary<NSString *,id> * dict) {
-//        NSLog(@"lp成功 = %@,dict = %@",[NSNumber numberWithBool:isSuccess],[AliIotTools dictionaryToString:dict]);
-//    }];
+- (void)showAuthResult:(BOOL)isSuccess{
+    dispatch_async(dispatch_get_main_queue(), ^{
+        NSAlert *alert = [NSAlert new];
+         [alert addButtonWithTitle:@"确定"];
+         [alert setMessageText:isSuccess?@"鉴权成功":@"鉴权失败"];
+         [alert setAlertStyle:NSAlertStyleInformational];
+         [alert beginSheetModalForWindow:[self.view window] completionHandler:^(NSModalResponse returnCode) {
+         }];
+    });
 }
 @end