From: liangzhenying <867174124@qq.com> Date: Fri, 8 Mar 2024 01:22:07 +0000 (+0800) Subject: 鉴权功能开发 X-Git-Tag: 阿里鉴权~28 X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=16908d301931a57da4c21158a12950898e7135a0;p=mirrors%2FMouseSdk-MacOS.git 鉴权功能开发 --- diff --git "a/Document/MouseSdk\346\216\245\345\217\243\346\226\207\346\241\243.md" "b/Document/MouseSdk\346\216\245\345\217\243\346\226\207\346\241\243.md" index 7e3b602..e674a06 100644 --- "a/Document/MouseSdk\346\216\245\345\217\243\346\226\207\346\241\243.md" +++ "b/Document/MouseSdk\346\216\245\345\217\243\346\226\207\346\241\243.md" @@ -14,14 +14,13 @@ ## 引入依赖库 -将 AliIotConnectKit.framework 添加进项目中。 +将 AliIotConnectKit.framework、AiSdk.framework 添加进项目中。 ## 相关权限配置 因为sdk用到蓝牙权限,所以需要在info.plist进行相关配置 ```xml - NSBluetoothAlwaysUsageDescription App需要您的同意,才能访问蓝牙 @@ -32,16 +31,19 @@ ## 蓝牙相关接口 ```objective-c -/// 配置SDK,每次连接上蓝牙设备后调用 -- (void)configSDK; +/// 单利 ++(AiIot *)shared; + +/// 开始鉴权 +- (void)startAuthentication; -/// 收到 蓝牙 数据 -/// - Parameter currData: 蓝牙数据 -- (void)handleReceivedData:(NSData *)data; +/// 传输鉴权数据给sdk +/// - Parameter data: 蓝牙设备传过来的数据 +- (void)sendAuthToSdk:(NSData *)data; -/// 断开设备调用结束工作 -/// - Parameter completed: 清理结束回调 -- (void)done:(void(^ _Nonnull )(id _Nullable param))completed; +/// 传输业务数据给sdk +/// - Parameter data:蓝牙设备传过来的数据 +- (void)sendBuinessToSdk:(NSData *)data; ``` ## 蓝牙相关代理 @@ -49,21 +51,21 @@ AliIotSDKCallbackProtocol ```objective-c -/// 响应数据,返回给上层调用 -/// - Parameters: -/// - currData: 当前发出去的数据 -/// - device: 蓝牙设备 MAC -/// - error: 先判断空,再发送出去 -- (void)handleSendData:(NSData *)currData toDevice:(NSData *)mac error:(NSError * _Nullable)error; - -@optional -/// 初始化结果 -/// - Parameter isFinish: 是否完成初始化 -- (void)sdkInitResult:(BOOL)isFinish; - -/// 输出日志 -/// - Parameter log: 日志信息 -- (void)handleLog:(NSString *)log; +/// 鉴权状态回调 +/// - 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; ``` ## 示例 @@ -71,48 +73,28 @@ AliIotSDKCallbackProtocol - 设置代理 ```objective-c - AliIot.shareInstance.delegate = self; - AliIot.shareInstance.mapDelegate = self; + [AiIot shared].delegate = self; ``` - +- 鉴权 -- 蓝牙连接成功后,需要与蓝牙设备协商MTU。所以必须注意是连接上蓝牙设备后再调用configSDK方法。 - - ```objective-c - //配置sdk - - (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error { - for (CBCharacteristic *characteristic in service.characteristics){ - if ([characteristic.UUID.UUIDString isEqualToString:@"FED7"]) { - self.writeCha = characteristic; - //找到写入的uuid后,调用sdk配置方法 - [AliIot.shareInstance configSDK]; - } - if ([characteristic.UUID.UUIDString isEqualToString:@"FED8"]) { - self.notifyCha = characteristic; - [peripheral setNotifyValue:YES forCharacteristic:characteristic]; - } - } - } ``` - -- 蓝牙连接断开后,必须调用done方法完成清理工作 - - ```objective-c - -(void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error{ - //蓝牙断开要调用该方法清理sdk数据 - [AliIot.shareInstance done:^(id _Nullable param) { - - }]; - } + [[AiIot shared] startAuthentication]; ``` - -- 收到蓝牙设备传过来的数据,传给sdk处理 + +- 收到设备传输过来的数据,传给sdk处理 ```objective-c - (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error { - //收到蓝牙设备发送过来的数据,转发给sdk处理 - [AliIot.shareInstance handleReceivedData:characteristic.value]; + NSData *data = characteristic.value; + if([characteristic.UUID.UUIDString isEqualToString:kAuthUUID]){ + //鉴权的数据 + [[AiIot shared] sendAuthToSdk:data]; + } + else if([characteristic.UUID.UUIDString isEqualToString:kVoiceUUID]){ + //语音数据 + [[AiIot shared] sendBuinessToSdk:data]; + } } ``` diff --git a/MouseSdk/AiMouseSdk/AiAudioConverter.h b/MouseSdk/AiMouseSdk/AiAudioConverter.h new file mode 100644 index 0000000..af3e058 --- /dev/null +++ b/MouseSdk/AiMouseSdk/AiAudioConverter.h @@ -0,0 +1,8 @@ + + +#import +@interface AiAudioConverter : NSObject + + + +@end diff --git a/MouseSdk/AiMouseSdk/AiAudioConverter.m b/MouseSdk/AiMouseSdk/AiAudioConverter.m new file mode 100644 index 0000000..880a072 --- /dev/null +++ b/MouseSdk/AiMouseSdk/AiAudioConverter.m @@ -0,0 +1,161 @@ + + +#import "AiAudioConverter.h" +#import +#import + +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 diff --git a/MouseSdk/AiSdk/AiIotAudioDecoder.h b/MouseSdk/AiMouseSdk/AiAudioDecoder.h similarity index 87% rename from MouseSdk/AiSdk/AiIotAudioDecoder.h rename to MouseSdk/AiMouseSdk/AiAudioDecoder.h index 88a7c8b..3e938ad 100644 --- a/MouseSdk/AiSdk/AiIotAudioDecoder.h +++ b/MouseSdk/AiMouseSdk/AiAudioDecoder.h @@ -2,7 +2,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface AiIotAudioDecoder : NSObject +@interface AiAudioDecoder : NSObject @property (nonatomic,copy) void(^onRecvPCMData)(NSData *pcmData); diff --git a/MouseSdk/AiSdk/AiIotAudioDecoder.m b/MouseSdk/AiMouseSdk/AiAudioDecoder.m similarity index 97% rename from MouseSdk/AiSdk/AiIotAudioDecoder.m rename to MouseSdk/AiMouseSdk/AiAudioDecoder.m index 76a837f..8f2b8b5 100644 --- a/MouseSdk/AiSdk/AiIotAudioDecoder.m +++ b/MouseSdk/AiMouseSdk/AiAudioDecoder.m @@ -1,4 +1,4 @@ -#import "AiIotAudioDecoder.h" +#import "AiAudioDecoder.h" #import @@ -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 { diff --git a/MouseSdk/AiSdk/AiIotAudioManager.h b/MouseSdk/AiMouseSdk/AiAudioManager.h similarity index 83% rename from MouseSdk/AiSdk/AiIotAudioManager.h rename to MouseSdk/AiMouseSdk/AiAudioManager.h index 819da07..fe67d0c 100644 --- a/MouseSdk/AiSdk/AiIotAudioManager.h +++ b/MouseSdk/AiMouseSdk/AiAudioManager.h @@ -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); diff --git a/MouseSdk/AiSdk/AiIotAudioManager.m b/MouseSdk/AiMouseSdk/AiAudioManager.m similarity index 76% rename from MouseSdk/AiSdk/AiIotAudioManager.m rename to MouseSdk/AiMouseSdk/AiAudioManager.m index 7274477..d0d96d1 100644 --- a/MouseSdk/AiSdk/AiIotAudioManager.m +++ b/MouseSdk/AiMouseSdk/AiAudioManager.m @@ -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 @@ -45,10 +45,10 @@ } - (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]; diff --git a/MouseSdk/AiSdk/AiIotAuthManager.h b/MouseSdk/AiMouseSdk/AiAuthManager.h similarity index 83% rename from MouseSdk/AiSdk/AiIotAuthManager.h rename to MouseSdk/AiMouseSdk/AiAuthManager.h index 9863e07..0404c98 100644 --- a/MouseSdk/AiSdk/AiIotAuthManager.h +++ b/MouseSdk/AiMouseSdk/AiAuthManager.h @@ -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); diff --git a/MouseSdk/AiSdk/AiIotAuthManager.m b/MouseSdk/AiMouseSdk/AiAuthManager.m similarity index 73% rename from MouseSdk/AiSdk/AiIotAuthManager.m rename to MouseSdk/AiMouseSdk/AiAuthManager.m index 820344d..a805fb1 100644 --- a/MouseSdk/AiSdk/AiIotAuthManager.m +++ b/MouseSdk/AiMouseSdk/AiAuthManager.m @@ -1,19 +1,19 @@ // -// AiIotAuthManager.m -// AiSdk +// AiAuthManager.m +// AiMouse // // Created by incar on 2024/2/28. // -#import "AiIotAuthManager.h" +#import "AiAuthManager.h" #import -#import "AiIotTools.h" -@interface AiIotAuthManager () +#import "AiTools.h" +@interface AiAuthManager () @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) { @@ -41,7 +41,10 @@ - (void)onIotConnected { [self showLog:@"LP连接成功。。。"]; - if(self.authCallBack)self.authCallBack(true); +// if(self.authCallBack)self.authCallBack(true); + [self.bizbusManager disConnectWithResult:^(BOOL isSuccess, NSDictionary * _Nonnull msg) { + if(self.authCallBack)self.authCallBack(true); + }]; } - (void)onIotDisconeted { @@ -49,27 +52,21 @@ } - (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]; @@ -81,24 +78,18 @@ dispatch_async(_bizbus_connect_queue, ^{ /// 请求飞鸽书 [ws.bizbusManager checkFgsStateWithResult:^(BOOL isSuccess, NSDictionary * _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 * _Nonnull msg) { if (isSuccess == NO) { -// if (ws.stateBlock) { -// ws.stateBlock(AliIotSDKBizbusState_FND_FAILED); -// [ws.bizbusManager disConnectWithResult:^(BOOL isSuccess, NSDictionary * _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 * _Nonnull msg) { +// if(ws.authCallBack)ws.authCallBack(true); +// }]; } }]; } @@ -108,7 +99,7 @@ #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 index 0000000..03109a3 --- /dev/null +++ b/MouseSdk/AiMouseSdk/AiFrameManager.h @@ -0,0 +1,19 @@ +// +// AiFrameManager.h +// AiMouse +// +// Created by incar on 2024/3/7. +// + +#import + +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 index 0000000..453a9cc --- /dev/null +++ b/MouseSdk/AiMouseSdk/AiFrameManager.m @@ -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/AiSdk/AiIotConnectManager.m b/MouseSdk/AiMouseSdk/AiIotConnectManager.m similarity index 100% rename from MouseSdk/AiSdk/AiIotConnectManager.m rename to MouseSdk/AiMouseSdk/AiIotConnectManager.m diff --git a/MouseSdk/AiMouseSdk/AiMouse.h b/MouseSdk/AiMouseSdk/AiMouse.h new file mode 100644 index 0000000..0ae61f6 --- /dev/null +++ b/MouseSdk/AiMouseSdk/AiMouse.h @@ -0,0 +1,50 @@ +// +// Ai.h +// AiMouse +// +// Created by incar on 2024/2/28. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@protocol AiMouseDelegate + +/// 鉴权状态回调 +/// - 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 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 diff --git a/MouseSdk/AiSdk/AiIot.m b/MouseSdk/AiMouseSdk/AiMouse.m similarity index 52% rename from MouseSdk/AiSdk/AiIot.m rename to MouseSdk/AiMouseSdk/AiMouse.m index 92ba3cf..7c8d2af 100644 --- a/MouseSdk/AiSdk/AiIot.m +++ b/MouseSdk/AiMouseSdk/AiMouse.m @@ -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]; @@ -38,15 +50,15 @@ }; _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]; @@ -64,56 +76,42 @@ } //接收到设备传过来的数据 -- (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{ @@ -122,7 +120,7 @@ - (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 index 0000000..9111053 --- /dev/null +++ b/MouseSdk/AiMouseSdk/AiMouseSdk.h @@ -0,0 +1,19 @@ +// +// AiMouse.h +// AiMouse +// +// Created by incar on 2024/2/19. +// + +#import + +//! 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 + +#import +#import diff --git a/MouseSdk/AiSdk/AiIotTools.h b/MouseSdk/AiMouseSdk/AiTools.h similarity index 91% rename from MouseSdk/AiSdk/AiIotTools.h rename to MouseSdk/AiMouseSdk/AiTools.h index 07b3aa6..6384357 100644 --- a/MouseSdk/AiSdk/AiIotTools.h +++ b/MouseSdk/AiMouseSdk/AiTools.h @@ -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; diff --git a/MouseSdk/AiSdk/AiIotTools.m b/MouseSdk/AiMouseSdk/AiTools.m similarity index 97% rename from MouseSdk/AiSdk/AiIotTools.m rename to MouseSdk/AiMouseSdk/AiTools.m index db1a669..9acafb4 100644 --- a/MouseSdk/AiSdk/AiIotTools.m +++ b/MouseSdk/AiMouseSdk/AiTools.m @@ -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 index 9665f0e..0000000 --- a/MouseSdk/AiSdk/AiIot.h +++ /dev/null @@ -1,50 +0,0 @@ -// -// AiIot.h -// AiSdk -// -// Created by incar on 2024/2/28. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@protocol AiIotDelegate - -/// 鉴权状态回调 -/// - 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 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 index 29e6437..0000000 --- a/MouseSdk/AiSdk/AiIotAudioConverter.h +++ /dev/null @@ -1,8 +0,0 @@ -// -// -//#import -//@interface AiIotAudioConverter : NSObject -// -// -// -//@end diff --git a/MouseSdk/AiSdk/AiIotAudioConverter.m b/MouseSdk/AiSdk/AiIotAudioConverter.m deleted file mode 100644 index 09f1948..0000000 --- a/MouseSdk/AiSdk/AiIotAudioConverter.m +++ /dev/null @@ -1,149 +0,0 @@ -// -// -//#import "AiIotAudioConverter.h" -//#import -//#import -// -//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 index 2ea1c55..0000000 --- a/MouseSdk/AiSdk/AiSdk.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// AiSdk.h -// AiSdk -// -// Created by incar on 2024/2/19. -// - -#import - -//! 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 - -#import -#import diff --git a/MouseSdk/AliIotConnectKitSDK/AliIotConnectKit/OC/MqttManager_C.m b/MouseSdk/AliIotConnectKitSDK/AliIotConnectKit/OC/MqttManager_C.m index 53e7f36..85454d0 100755 --- a/MouseSdk/AliIotConnectKitSDK/AliIotConnectKit/OC/MqttManager_C.m +++ b/MouseSdk/AliIotConnectKitSDK/AliIotConnectKit/OC/MqttManager_C.m @@ -34,7 +34,7 @@ void sdk_iot_mqtt_log_callback(const char * _Nonnull log) { // __weak typeof(self) weak_self = self; [[IotMQTT shareInstance] setConnectStatusCallback:^(MqttConnectStatus_C ConnectStatus) { - NSLog(@"---------------connect status :%lu", ConnectStatus); +// NSLog(@"---------------connect status :%lu", ConnectStatus); // if (weak_self.DebugAddrBlock) MqttManager_C.sharedInstance.DebugAddrBlock(@{@"mqtt addr": IotMQTT.shareInstance, @"mqtt mgr addr " : [NSString stringWithFormat:@"%@ - %@", MqttManager_C.sharedInstance, MqttManager_C.sharedInstance] @@ -44,8 +44,8 @@ void sdk_iot_mqtt_log_callback(const char * _Nonnull log) { }]; [[IotMQTT shareInstance] setMessageArrivalCallback:^(NSString * _Nonnull topic, NSString * _Nonnull payload) { - NSLog(@"---------topic :%@", topic); - NSLog(@"payload :%@", payload); +// NSLog(@"---------topic :%@", topic); +// NSLog(@"payload :%@", payload); MqttManager_C.sharedInstance.DebugAddrBlock(@{@"mqtt addr": IotMQTT.shareInstance, @"mqtt mgr addr " : [NSString stringWithFormat:@"%@ - %@", MqttManager_C.sharedInstance, MqttManager_C.sharedInstance] diff --git a/MouseSdk/MouseSdk.xcodeproj/project.pbxproj b/MouseSdk/MouseSdk.xcodeproj/project.pbxproj index f962f58..8015d55 100644 --- a/MouseSdk/MouseSdk.xcodeproj/project.pbxproj +++ b/MouseSdk/MouseSdk.xcodeproj/project.pbxproj @@ -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 */; }; @@ -18,27 +20,25 @@ 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 */; }; @@ -243,6 +243,8 @@ 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 */ @@ -285,7 +287,7 @@ 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; @@ -294,6 +296,8 @@ /* 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 = ""; }; + 18AE9CDF2B99C71F00743515 /* AiMouse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AiMouse.m; sourceTree = ""; }; 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 = ""; }; 18BF1DCE2B81AB7C00B8D90F /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; @@ -314,27 +318,25 @@ 18BF1E212B83066200B8D90F /* BleManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BleManager.m; sourceTree = ""; }; 18BF1E742B832D2E00B8D90F /* ScanVC.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ScanVC.h; sourceTree = ""; }; 18BF1E752B832D2E00B8D90F /* ScanVC.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ScanVC.m; sourceTree = ""; }; - 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 = ""; }; + 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 = ""; }; 18F3235B2B8ED78300CABA2E /* ScanCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ScanCell.h; sourceTree = ""; }; 18F3235C2B8ED78300CABA2E /* ScanCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ScanCell.m; sourceTree = ""; }; - 18F323652B8F1C1900CABA2E /* AiIot.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiIot.h; sourceTree = ""; }; - 18F323662B8F1C1900CABA2E /* AiIot.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiIot.m; sourceTree = ""; }; 18F323752B8F2DAC00CABA2E /* AliIotTools.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AliIotTools.m; sourceTree = ""; }; 18F323762B8F2DAD00CABA2E /* AliIotTools.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AliIotTools.h; sourceTree = ""; }; 18F323782B8F2EFB00CABA2E /* AliIotConnectKit.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = AliIotConnectKit.xcodeproj; path = AliIotConnectKitSDK/AliIotConnectKit.xcodeproj; sourceTree = ""; }; - 18F323822B8F330100CABA2E /* AiIotAuthManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiIotAuthManager.h; sourceTree = ""; }; - 18F323832B8F330100CABA2E /* AiIotAuthManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiIotAuthManager.m; sourceTree = ""; }; + 18F323822B8F330100CABA2E /* AiAuthManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiAuthManager.h; sourceTree = ""; }; + 18F323832B8F330100CABA2E /* AiAuthManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiAuthManager.m; sourceTree = ""; }; 18F323882B8F4DBE00CABA2E /* PCMPlayer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PCMPlayer.h; sourceTree = ""; }; 18F323892B8F4DBE00CABA2E /* PCMPlayer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PCMPlayer.m; sourceTree = ""; }; - 18F3238C2B8F4F7300CABA2E /* AiIotAudioManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiIotAudioManager.h; sourceTree = ""; }; - 18F3238D2B8F4F7300CABA2E /* AiIotAudioManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiIotAudioManager.m; sourceTree = ""; }; - 18F323932B8F525C00CABA2E /* AiIotTools.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiIotTools.h; sourceTree = ""; }; - 18F323942B8F525C00CABA2E /* AiIotTools.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiIotTools.m; sourceTree = ""; }; - 18F323A62B9095D300CABA2E /* AiIotAudioConverter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiIotAudioConverter.h; sourceTree = ""; }; - 18F323A72B9095D300CABA2E /* AiIotAudioConverter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiIotAudioConverter.m; sourceTree = ""; }; - 18F323C22B93352000CABA2E /* AiIotAudioDecoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiIotAudioDecoder.h; sourceTree = ""; }; - 18F323C32B93352000CABA2E /* AiIotAudioDecoder.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiIotAudioDecoder.m; sourceTree = ""; }; + 18F3238C2B8F4F7300CABA2E /* AiAudioManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiAudioManager.h; sourceTree = ""; }; + 18F3238D2B8F4F7300CABA2E /* AiAudioManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiAudioManager.m; sourceTree = ""; }; + 18F323932B8F525C00CABA2E /* AiTools.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiTools.h; sourceTree = ""; }; + 18F323942B8F525C00CABA2E /* AiTools.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiTools.m; sourceTree = ""; }; + 18F323A62B9095D300CABA2E /* AiAudioConverter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiAudioConverter.h; sourceTree = ""; }; + 18F323A72B9095D300CABA2E /* AiAudioConverter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiAudioConverter.m; sourceTree = ""; }; + 18F323C22B93352000CABA2E /* AiAudioDecoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiAudioDecoder.h; sourceTree = ""; }; + 18F323C32B93352000CABA2E /* AiAudioDecoder.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiAudioDecoder.m; sourceTree = ""; }; 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; }; @@ -542,6 +544,8 @@ 18F327F32B970B3F00CABA2E /* libswscale.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libswscale.a; sourceTree = ""; }; 18F328D32B98569D00CABA2E /* Config.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Config.h; sourceTree = ""; }; 18F328D42B98569D00CABA2E /* Config.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Config.m; sourceTree = ""; }; + 18F328DC2B9950E000CABA2E /* AiFrameManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AiFrameManager.h; sourceTree = ""; }; + 18F328DD2B9950E000CABA2E /* AiFrameManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AiFrameManager.m; sourceTree = ""; }; 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 = ""; }; 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 = ""; }; /* End PBXFileReference section */ @@ -553,7 +557,7 @@ files = ( 18F3237F2B8F30B200CABA2E /* AliIotConnectKit.framework in Frameworks */, 8A6657BD1406314D4CBB7CEF /* libPods-MouseSdk.a in Frameworks */, - 18BF1E8D2B8362D300B8D90F /* AiSdk.framework in Frameworks */, + 18BF1E8D2B8362D300B8D90F /* AiMouseSdk.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -602,7 +606,7 @@ 18BF1DCC2B81AB7C00B8D90F /* MouseSdk */, 18BF1DE22B81AB8000B8D90F /* MouseSdkTests */, 18BF1DEC2B81AB8000B8D90F /* MouseSdkUITests */, - 18BF1E882B8362D300B8D90F /* AiSdk */, + 18BF1E882B8362D300B8D90F /* AiMouseSdk */, 18BF1DCB2B81AB7C00B8D90F /* Products */, 723588BAA058E1012143D29F /* Pods */, 543EC4E5F9FC310D6B850947 /* Frameworks */, @@ -615,7 +619,7 @@ 18BF1DCA2B81AB7C00B8D90F /* MouseSdk.app */, 18BF1DDF2B81AB8000B8D90F /* MouseSdkTests.xctest */, 18BF1DE92B81AB8000B8D90F /* MouseSdkUITests.xctest */, - 18BF1E872B8362D300B8D90F /* AiSdk.framework */, + 18BF1E872B8362D300B8D90F /* AiMouseSdk.framework */, ); name = Products; sourceTree = ""; @@ -674,25 +678,27 @@ path = Ble; sourceTree = ""; }; - 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 = ""; }; 18F323792B8F2EFB00CABA2E /* Products */ = { @@ -1076,7 +1082,7 @@ 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 */, @@ -1086,7 +1092,7 @@ 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 */, @@ -1105,7 +1111,7 @@ 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 */, @@ -1125,6 +1131,7 @@ 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 */, @@ -1161,7 +1168,7 @@ 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 */, @@ -1176,6 +1183,7 @@ 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 */, @@ -1183,7 +1191,6 @@ 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 */, @@ -1205,9 +1212,9 @@ 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 */, @@ -1294,9 +1301,9 @@ 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 */, @@ -1307,9 +1314,9 @@ ); dependencies = ( ); - name = AiSdk; + name = AiMouseSdk; productName = AiSdk; - productReference = 18BF1E872B8362D300B8D90F /* AiSdk.framework */; + productReference = 18BF1E872B8362D300B8D90F /* AiMouseSdk.framework */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ @@ -1360,7 +1367,7 @@ 18BF1DC92B81AB7C00B8D90F /* MouseSdk */, 18BF1DDE2B81AB8000B8D90F /* MouseSdkTests */, 18BF1DE82B81AB8000B8D90F /* MouseSdkUITests */, - 18BF1E862B8362D300B8D90F /* AiSdk */, + 18BF1E862B8362D300B8D90F /* AiMouseSdk */, ); }; /* End PBXProject section */ @@ -1472,12 +1479,13 @@ 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; }; @@ -1496,7 +1504,7 @@ }; 18BF1E8C2B8362D300B8D90F /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = 18BF1E862B8362D300B8D90F /* AiSdk */; + target = 18BF1E862B8362D300B8D90F /* AiMouseSdk */; targetProxy = 18BF1E8B2B8362D300B8D90F /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ @@ -1773,7 +1781,7 @@ 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 = ( @@ -1783,12 +1791,12 @@ ); 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; @@ -1809,7 +1817,7 @@ 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 = ( @@ -1819,12 +1827,12 @@ ); 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; @@ -1872,7 +1880,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 18BF1E922B8362D300B8D90F /* Build configuration list for PBXNativeTarget "AiSdk" */ = { + 18BF1E922B8362D300B8D90F /* Build configuration list for PBXNativeTarget "AiMouseSdk" */ = { isa = XCConfigurationList; buildConfigurations = ( 18BF1E902B8362D300B8D90F /* Debug */, diff --git a/MouseSdk/MouseSdk.xcodeproj/xcshareddata/xcschemes/AiSdk.xcscheme b/MouseSdk/MouseSdk.xcodeproj/xcshareddata/xcschemes/AiSdk.xcscheme index 98e7213..c0861b2 100644 --- a/MouseSdk/MouseSdk.xcodeproj/xcshareddata/xcschemes/AiSdk.xcscheme +++ b/MouseSdk/MouseSdk.xcodeproj/xcshareddata/xcschemes/AiSdk.xcscheme @@ -15,8 +15,8 @@ @@ -50,8 +50,8 @@ diff --git a/MouseSdk/MouseSdk.xcodeproj/xcshareddata/xcschemes/MouseSdk.xcscheme b/MouseSdk/MouseSdk.xcodeproj/xcshareddata/xcschemes/MouseSdk.xcscheme new file mode 100644 index 0000000..109fc63 --- /dev/null +++ b/MouseSdk/MouseSdk.xcodeproj/xcshareddata/xcschemes/MouseSdk.xcscheme @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/MouseSdk/MouseSdk.xcodeproj/xcuserdata/apple.xcuserdatad/xcschemes/xcschememanagement.plist b/MouseSdk/MouseSdk.xcodeproj/xcuserdata/apple.xcuserdatad/xcschemes/xcschememanagement.plist index fe65781..3e1bcc9 100644 --- a/MouseSdk/MouseSdk.xcodeproj/xcuserdata/apple.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/MouseSdk/MouseSdk.xcodeproj/xcuserdata/apple.xcuserdatad/xcschemes/xcschememanagement.plist @@ -17,6 +17,21 @@ SuppressBuildableAutocreation + 18BF1DC92B81AB7C00B8D90F + + primary + + + 18BF1DDE2B81AB8000B8D90F + + primary + + + 18BF1DE82B81AB8000B8D90F + + primary + + 18BF1E862B8362D300B8D90F primary diff --git a/MouseSdk/MouseSdk.xcworkspace/xcuserdata/apple.xcuserdatad/UserInterfaceState.xcuserstate b/MouseSdk/MouseSdk.xcworkspace/xcuserdata/apple.xcuserdatad/UserInterfaceState.xcuserstate index 099e864..74e66f9 100644 Binary files a/MouseSdk/MouseSdk.xcworkspace/xcuserdata/apple.xcuserdatad/UserInterfaceState.xcuserstate and b/MouseSdk/MouseSdk.xcworkspace/xcuserdata/apple.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/MouseSdk/MouseSdk/Ble/BleManager.h b/MouseSdk/MouseSdk/Ble/BleManager.h index 6cf6e6a..f7b6b75 100644 --- a/MouseSdk/MouseSdk/Ble/BleManager.h +++ b/MouseSdk/MouseSdk/Ble/BleManager.h @@ -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; diff --git a/MouseSdk/MouseSdk/Ble/BleManager.m b/MouseSdk/MouseSdk/Ble/BleManager.m index 3097680..33ef9d7 100644 --- a/MouseSdk/MouseSdk/Ble/BleManager.m +++ b/MouseSdk/MouseSdk/Ble/BleManager.m @@ -8,15 +8,15 @@ #import "BleManager.h" -#import +#import #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 () +@interface BleManager () @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; } @@ -119,7 +119,7 @@ [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]; } @@ -128,47 +128,55 @@ - (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]; } @@ -187,7 +195,7 @@ } - (void)startAuth{ - [[AiIot shared] startAuthentication]; + [[AiMouse shared] startAuthentication]; } #pragma mark - other diff --git a/MouseSdk/MouseSdk/PCMPlayer.h b/MouseSdk/MouseSdk/PCMPlayer.h index e21d29e..611e2f2 100644 --- a/MouseSdk/MouseSdk/PCMPlayer.h +++ b/MouseSdk/MouseSdk/PCMPlayer.h @@ -1,5 +1,5 @@ //// -//// AiIotPlayer.h +//// AiPlayer.h //// MouseSdk //// //// Created by incar on 2024/2/28. diff --git a/MouseSdk/MouseSdk/PCMPlayer.m b/MouseSdk/MouseSdk/PCMPlayer.m index e923c1b..9efd750 100644 --- a/MouseSdk/MouseSdk/PCMPlayer.m +++ b/MouseSdk/MouseSdk/PCMPlayer.m @@ -1,5 +1,5 @@ //// -//// AiIotPlayer.m +//// AiPlayer.m //// MouseSdk //// //// Created by incar on 2024/2/28. diff --git a/MouseSdk/MouseSdk/ViewController.m b/MouseSdk/MouseSdk/ViewController.m index 3ff6c13..e953377 100644 --- a/MouseSdk/MouseSdk/ViewController.m +++ b/MouseSdk/MouseSdk/ViewController.m @@ -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]; @@ -33,30 +32,12 @@ 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; @@ -91,22 +73,24 @@ }; 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 * 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