180E7BDE2BD7BD84008558E8 /* AiMouseTools.h in Headers */ = {isa = PBXBuildFile; fileRef = 180E7B482BD7BD7F008558E8 /* AiMouseTools.h */; };
180E7BDF2BD7BD84008558E8 /* AiMouseConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 180E7B492BD7BD80008558E8 /* AiMouseConfig.m */; };
180E7BE02BD7BD84008558E8 /* AiMouseTools.m in Sources */ = {isa = PBXBuildFile; fileRef = 180E7B4A2BD7BD80008558E8 /* AiMouseTools.m */; };
- 180E7BE22BD7BD84008558E8 /* AiAudioManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 180E7B4C2BD7BD81008558E8 /* AiAudioManager.h */; };
+ 180E7BE22BD7BD84008558E8 /* SbcConverter.h in Headers */ = {isa = PBXBuildFile; fileRef = 180E7B4C2BD7BD81008558E8 /* SbcConverter.h */; };
180E7BE42BD7BD84008558E8 /* AiRecordManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 180E7B4E2BD7BD81008558E8 /* AiRecordManager.m */; };
180E7BE52BD7BD84008558E8 /* AiMouseTools2.m in Sources */ = {isa = PBXBuildFile; fileRef = 180E7B4F2BD7BD81008558E8 /* AiMouseTools2.m */; };
180E7BE62BD7BD84008558E8 /* AiAudioDecoder.h in Headers */ = {isa = PBXBuildFile; fileRef = 180E7B502BD7BD82008558E8 /* AiAudioDecoder.h */; };
- 180E7BE72BD7BD84008558E8 /* AiAudioManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 180E7B512BD7BD82008558E8 /* AiAudioManager.m */; };
+ 180E7BE72BD7BD84008558E8 /* SbcConverter.m in Sources */ = {isa = PBXBuildFile; fileRef = 180E7B512BD7BD82008558E8 /* SbcConverter.m */; };
180E7BE82BD7BD84008558E8 /* AiAuthManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 180E7B522BD7BD82008558E8 /* AiAuthManager.m */; };
180E7BE92BD7BD84008558E8 /* AiMouseTools2.h in Headers */ = {isa = PBXBuildFile; fileRef = 180E7B532BD7BD82008558E8 /* AiMouseTools2.h */; };
180E7C842BD8FC4E008558E8 /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = 180E7BF92BD8FC4E008558E8 /* version.h */; };
18862B652C806BD900D3564D /* TlwMouseSdk.h in Headers */ = {isa = PBXBuildFile; fileRef = 18EF7AF42C7603E800AC5223 /* TlwMouseSdk.h */; settings = {ATTRIBUTES = (Public, ); }; };
18862B672C806BD900D3564D /* parseutils.h in Headers */ = {isa = PBXBuildFile; fileRef = 180E7C472BD8FC4E008558E8 /* parseutils.h */; };
18862B682C806BD900D3564D /* codec_par.h in Headers */ = {isa = PBXBuildFile; fileRef = 180E7C662BD8FC4E008558E8 /* codec_par.h */; };
- 18862B692C806BD900D3564D /* AiAudioManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 180E7B4C2BD7BD81008558E8 /* AiAudioManager.h */; };
+ 18862B692C806BD900D3564D /* SbcConverter.h in Headers */ = {isa = PBXBuildFile; fileRef = 180E7B4C2BD7BD81008558E8 /* SbcConverter.h */; };
18862B6A2C806BD900D3564D /* rc4.h in Headers */ = {isa = PBXBuildFile; fileRef = 180E7C3B2BD8FC4E008558E8 /* rc4.h */; };
18862B6B2C806BD900D3564D /* display.h in Headers */ = {isa = PBXBuildFile; fileRef = 180E7C2B2BD8FC4E008558E8 /* display.h */; };
18862B6C2C806BD900D3564D /* tx.h in Headers */ = {isa = PBXBuildFile; fileRef = 180E7C282BD8FC4E008558E8 /* tx.h */; };
18862B752C806BD900D3564D /* hdr_dynamic_metadata.h in Headers */ = {isa = PBXBuildFile; fileRef = 180E7C4A2BD8FC4E008558E8 /* hdr_dynamic_metadata.h */; };
18862B762C806BD900D3564D /* hwcontext_drm.h in Headers */ = {isa = PBXBuildFile; fileRef = 180E7C2F2BD8FC4E008558E8 /* hwcontext_drm.h */; };
18862B772C806BD900D3564D /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = 180E7C5A2BD8FC4E008558E8 /* version.h */; };
- 18862B792C806BD900D3564D /* TlwAudioManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 18EF7AEE2C7603E800AC5223 /* TlwAudioManager.h */; };
+ 18862B792C806BD900D3564D /* AdpcmConverter.h in Headers */ = {isa = PBXBuildFile; fileRef = 18EF7AEE2C7603E800AC5223 /* AdpcmConverter.h */; };
18862B7A2C806BD900D3564D /* time.h in Headers */ = {isa = PBXBuildFile; fileRef = 180E7BFF2BD8FC4E008558E8 /* time.h */; };
18862B7B2C806BD900D3564D /* bprint.h in Headers */ = {isa = PBXBuildFile; fileRef = 180E7C492BD8FC4E008558E8 /* bprint.h */; };
18862B7D2C806BD900D3564D /* timecode.h in Headers */ = {isa = PBXBuildFile; fileRef = 180E7C262BD8FC4E008558E8 /* timecode.h */; };
18862BBB2C806BD900D3564D /* AFURLResponseSerialization.m in Sources */ = {isa = PBXBuildFile; fileRef = 184A70F82BDA4C040025A332 /* AFURLResponseSerialization.m */; };
18862BBC2C806BD900D3564D /* AFNetworkReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 184A70FE2BDA4C040025A332 /* AFNetworkReachabilityManager.m */; };
18862BBD2C806BD900D3564D /* AiRecordManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 180E7B4E2BD7BD81008558E8 /* AiRecordManager.m */; };
- 18862BBE2C806BD900D3564D /* TlwAudioManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EF7AF52C7603E800AC5223 /* TlwAudioManager.m */; };
- 18862BC12C806BD900D3564D /* AiAudioManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 180E7B512BD7BD82008558E8 /* AiAudioManager.m */; };
+ 18862BBE2C806BD900D3564D /* AdpcmConverter.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EF7AF52C7603E800AC5223 /* AdpcmConverter.m */; };
+ 18862BC12C806BD900D3564D /* SbcConverter.m in Sources */ = {isa = PBXBuildFile; fileRef = 180E7B512BD7BD82008558E8 /* SbcConverter.m */; };
18862BC32C806BD900D3564D /* TlwTools.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EF7AEC2C7603E800AC5223 /* TlwTools.m */; };
18862BC42C806BD900D3564D /* TlwMouseSdk.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EF7AEB2C7603E800AC5223 /* TlwMouseSdk.m */; };
18862BC52C806BD900D3564D /* BleManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 18862A1E2C8064E300D3564D /* BleManager.m */; };
18EF7AFA2C7603E800AC5223 /* TlwMouseSdk.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EF7AEB2C7603E800AC5223 /* TlwMouseSdk.m */; };
18EF7AFB2C7603E800AC5223 /* TlwTools.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EF7AEC2C7603E800AC5223 /* TlwTools.m */; };
18EF7AFC2C7603E800AC5223 /* AiConnectManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EF7AED2C7603E800AC5223 /* AiConnectManager.m */; };
- 18EF7AFD2C7603E800AC5223 /* TlwAudioManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 18EF7AEE2C7603E800AC5223 /* TlwAudioManager.h */; };
+ 18EF7AFD2C7603E800AC5223 /* AdpcmConverter.h in Headers */ = {isa = PBXBuildFile; fileRef = 18EF7AEE2C7603E800AC5223 /* AdpcmConverter.h */; };
18EF7B012C7603E800AC5223 /* adpcm.c in Sources */ = {isa = PBXBuildFile; fileRef = 18EF7AF22C7603E800AC5223 /* adpcm.c */; };
18EF7B022C7603E800AC5223 /* TlwTools.h in Headers */ = {isa = PBXBuildFile; fileRef = 18EF7AF32C7603E800AC5223 /* TlwTools.h */; };
18EF7B032C7603E800AC5223 /* TlwMouseSdk.h in Headers */ = {isa = PBXBuildFile; fileRef = 18EF7AF42C7603E800AC5223 /* TlwMouseSdk.h */; settings = {ATTRIBUTES = (Public, ); }; };
- 18EF7B042C7603E800AC5223 /* TlwAudioManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EF7AF52C7603E800AC5223 /* TlwAudioManager.m */; };
+ 18EF7B042C7603E800AC5223 /* AdpcmConverter.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EF7AF52C7603E800AC5223 /* AdpcmConverter.m */; };
18EF7B052C7603E800AC5223 /* AiConnectManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 18EF7AF62C7603E800AC5223 /* AiConnectManager.h */; };
+ 3F985CFA2DB34D0F008D6D73 /* DeviceTool.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F985CF82DB34D0F008D6D73 /* DeviceTool.h */; };
+ 3F985CFB2DB34D0F008D6D73 /* DeviceTool.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F985CF92DB34D0F008D6D73 /* DeviceTool.m */; };
+ 3F985CFC2DB34D0F008D6D73 /* DeviceTool.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F985CF82DB34D0F008D6D73 /* DeviceTool.h */; };
+ 3F985CFD2DB34D0F008D6D73 /* DeviceTool.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F985CF92DB34D0F008D6D73 /* DeviceTool.m */; };
3FCF534F2D1A5C97007EC52F /* LogManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 3FCF534E2D1A5C97007EC52F /* LogManager.m */; };
3FCF53502D1A5C97007EC52F /* LogManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FCF534D2D1A5C97007EC52F /* LogManager.h */; };
3FCF53512D1A5C97007EC52F /* LogManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FCF534D2D1A5C97007EC52F /* LogManager.h */; };
180E7B482BD7BD7F008558E8 /* AiMouseTools.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AiMouseTools.h; sourceTree = "<group>"; };
180E7B492BD7BD80008558E8 /* AiMouseConfig.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AiMouseConfig.m; sourceTree = "<group>"; };
180E7B4A2BD7BD80008558E8 /* AiMouseTools.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AiMouseTools.m; sourceTree = "<group>"; };
- 180E7B4C2BD7BD81008558E8 /* AiAudioManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AiAudioManager.h; sourceTree = "<group>"; };
+ 180E7B4C2BD7BD81008558E8 /* SbcConverter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SbcConverter.h; sourceTree = "<group>"; };
180E7B4E2BD7BD81008558E8 /* AiRecordManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AiRecordManager.m; sourceTree = "<group>"; };
180E7B4F2BD7BD81008558E8 /* AiMouseTools2.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AiMouseTools2.m; sourceTree = "<group>"; };
180E7B502BD7BD82008558E8 /* AiAudioDecoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AiAudioDecoder.h; sourceTree = "<group>"; };
- 180E7B512BD7BD82008558E8 /* AiAudioManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AiAudioManager.m; sourceTree = "<group>"; };
+ 180E7B512BD7BD82008558E8 /* SbcConverter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SbcConverter.m; sourceTree = "<group>"; };
180E7B522BD7BD82008558E8 /* AiAuthManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AiAuthManager.m; sourceTree = "<group>"; };
180E7B532BD7BD82008558E8 /* AiMouseTools2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AiMouseTools2.h; sourceTree = "<group>"; };
180E7BF92BD8FC4E008558E8 /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = "<group>"; };
18EF7AEB2C7603E800AC5223 /* TlwMouseSdk.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TlwMouseSdk.m; sourceTree = "<group>"; };
18EF7AEC2C7603E800AC5223 /* TlwTools.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TlwTools.m; sourceTree = "<group>"; };
18EF7AED2C7603E800AC5223 /* AiConnectManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AiConnectManager.m; sourceTree = "<group>"; };
- 18EF7AEE2C7603E800AC5223 /* TlwAudioManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TlwAudioManager.h; sourceTree = "<group>"; };
+ 18EF7AEE2C7603E800AC5223 /* AdpcmConverter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AdpcmConverter.h; sourceTree = "<group>"; };
18EF7AF22C7603E800AC5223 /* adpcm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = adpcm.c; sourceTree = "<group>"; };
18EF7AF32C7603E800AC5223 /* TlwTools.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TlwTools.h; sourceTree = "<group>"; };
18EF7AF42C7603E800AC5223 /* TlwMouseSdk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TlwMouseSdk.h; sourceTree = "<group>"; };
- 18EF7AF52C7603E800AC5223 /* TlwAudioManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TlwAudioManager.m; sourceTree = "<group>"; };
+ 18EF7AF52C7603E800AC5223 /* AdpcmConverter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AdpcmConverter.m; sourceTree = "<group>"; };
18EF7AF62C7603E800AC5223 /* AiConnectManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AiConnectManager.h; sourceTree = "<group>"; };
3F5CE3E62D1E7BCA00A5628A /* libAiMouseSdk copy.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libAiMouseSdk copy.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 3F985CF82DB34D0F008D6D73 /* DeviceTool.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DeviceTool.h; sourceTree = "<group>"; };
+ 3F985CF92DB34D0F008D6D73 /* DeviceTool.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DeviceTool.m; sourceTree = "<group>"; };
3FCF534D2D1A5C97007EC52F /* LogManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LogManager.h; sourceTree = "<group>"; };
3FCF534E2D1A5C97007EC52F /* LogManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LogManager.m; sourceTree = "<group>"; };
3FF3D7352DAE442C008EBA5D /* M8MouseSdk.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = M8MouseSdk.h; sourceTree = "<group>"; };
184A71232BDE2DA60025A332 /* AiSecretModel.m */,
180E7B502BD7BD82008558E8 /* AiAudioDecoder.h */,
180E7AB52BD7BD7D008558E8 /* AiAudioDecoder.m */,
- 180E7B4C2BD7BD81008558E8 /* AiAudioManager.h */,
- 180E7B512BD7BD82008558E8 /* AiAudioManager.m */,
+ 180E7B4C2BD7BD81008558E8 /* SbcConverter.h */,
+ 180E7B512BD7BD82008558E8 /* SbcConverter.m */,
180E7AB62BD7BD7D008558E8 /* AiMouseConfig.h */,
180E7B492BD7BD80008558E8 /* AiMouseConfig.m */,
180E7B482BD7BD7F008558E8 /* AiMouseTools.h */,
18862A192C8064E300D3564D /* HidManager.m */,
18862A1C2C8064E300D3564D /* BleManager.h */,
18862A1E2C8064E300D3564D /* BleManager.m */,
+ 3F985CF82DB34D0F008D6D73 /* DeviceTool.h */,
+ 3F985CF92DB34D0F008D6D73 /* DeviceTool.m */,
18862A1A2C8064E300D3564D /* TimerManager.h */,
18862A202C8064E300D3564D /* TimerManager.m */,
1888148C2C85766B009299A9 /* AiDeviceAuthManager.h */,
18EF7AEC2C7603E800AC5223 /* TlwTools.m */,
18EF7AF62C7603E800AC5223 /* AiConnectManager.h */,
18EF7AED2C7603E800AC5223 /* AiConnectManager.m */,
- 18EF7AEE2C7603E800AC5223 /* TlwAudioManager.h */,
- 18EF7AF52C7603E800AC5223 /* TlwAudioManager.m */,
+ 18EF7AEE2C7603E800AC5223 /* AdpcmConverter.h */,
+ 18EF7AF52C7603E800AC5223 /* AdpcmConverter.m */,
18EF7AEA2C7603E800AC5223 /* adpcm.h */,
18EF7AF22C7603E800AC5223 /* adpcm.c */,
);
18EF7B032C7603E800AC5223 /* TlwMouseSdk.h in Headers */,
180E7CD12BD8FC4E008558E8 /* parseutils.h in Headers */,
180E7CEC2BD8FC4E008558E8 /* codec_par.h in Headers */,
- 180E7BE22BD7BD84008558E8 /* AiAudioManager.h in Headers */,
+ 180E7BE22BD7BD84008558E8 /* SbcConverter.h in Headers */,
18E0C5972D1000DF0093BA8F /* ByteDanceSdk.h in Headers */,
180E7CC52BD8FC4E008558E8 /* rc4.h in Headers */,
180E7CB52BD8FC4E008558E8 /* display.h in Headers */,
180E7CD42BD8FC4E008558E8 /* hdr_dynamic_metadata.h in Headers */,
180E7CB92BD8FC4E008558E8 /* hwcontext_drm.h in Headers */,
180E7CE22BD8FC4E008558E8 /* version.h in Headers */,
- 18EF7AFD2C7603E800AC5223 /* TlwAudioManager.h in Headers */,
+ 18EF7AFD2C7603E800AC5223 /* AdpcmConverter.h in Headers */,
180E7C892BD8FC4E008558E8 /* time.h in Headers */,
180E7CD32BD8FC4E008558E8 /* bprint.h in Headers */,
180E7CB02BD8FC4E008558E8 /* timecode.h in Headers */,
180E7CA42BD8FC4E008558E8 /* md5.h in Headers */,
180E7CE32BD8FC4E008558E8 /* avio.h in Headers */,
+ 3F985CFC2DB34D0F008D6D73 /* DeviceTool.h in Headers */,
180E7CB42BD8FC4E008558E8 /* hwcontext_dxva2.h in Headers */,
180E7CDB2BD8FC4E008558E8 /* hash.h in Headers */,
180E7B562BD7BD83008558E8 /* AiMouseConfig.h in Headers */,
18862B602C806BD900D3564D /* dv_profile.h in Headers */,
18862B612C806BD900D3564D /* AFURLSessionManager.h in Headers */,
18862B622C806BD900D3564D /* downmix_info.h in Headers */,
+ 3F985CFA2DB34D0F008D6D73 /* DeviceTool.h in Headers */,
18862B632C806BD900D3564D /* spherical.h in Headers */,
18862B642C806BD900D3564D /* hwcontext_opencl.h in Headers */,
18862B652C806BD900D3564D /* TlwMouseSdk.h in Headers */,
18862B672C806BD900D3564D /* parseutils.h in Headers */,
18862B682C806BD900D3564D /* codec_par.h in Headers */,
- 18862B692C806BD900D3564D /* AiAudioManager.h in Headers */,
+ 18862B692C806BD900D3564D /* SbcConverter.h in Headers */,
18862B6A2C806BD900D3564D /* rc4.h in Headers */,
18862B6B2C806BD900D3564D /* display.h in Headers */,
18862B6C2C806BD900D3564D /* tx.h in Headers */,
18862B752C806BD900D3564D /* hdr_dynamic_metadata.h in Headers */,
18862B762C806BD900D3564D /* hwcontext_drm.h in Headers */,
18862B772C806BD900D3564D /* version.h in Headers */,
- 18862B792C806BD900D3564D /* TlwAudioManager.h in Headers */,
+ 18862B792C806BD900D3564D /* AdpcmConverter.h in Headers */,
18862B7A2C806BD900D3564D /* time.h in Headers */,
18862B7B2C806BD900D3564D /* bprint.h in Headers */,
18862B7D2C806BD900D3564D /* timecode.h in Headers */,
184A71062BDA4C050025A332 /* AFURLResponseSerialization.m in Sources */,
184A710C2BDA4C050025A332 /* AFNetworkReachabilityManager.m in Sources */,
180E7BE42BD7BD84008558E8 /* AiRecordManager.m in Sources */,
- 18EF7B042C7603E800AC5223 /* TlwAudioManager.m in Sources */,
+ 18EF7B042C7603E800AC5223 /* AdpcmConverter.m in Sources */,
18E0C5982D1000DF0093BA8F /* ByteDanceSdk.m in Sources */,
189960112CEAD7B50042505F /* KeyboardSdk.m in Sources */,
3FCF534F2D1A5C97007EC52F /* LogManager.m in Sources */,
- 180E7BE72BD7BD84008558E8 /* AiAudioManager.m in Sources */,
+ 180E7BE72BD7BD84008558E8 /* SbcConverter.m in Sources */,
18EF7AFB2C7603E800AC5223 /* TlwTools.m in Sources */,
18EF7AFA2C7603E800AC5223 /* TlwMouseSdk.m in Sources */,
3FF3D73A2DAE442C008EBA5D /* M8MouseSdk.m in Sources */,
189365592CEB153000023B62 /* MSUtilis.m in Sources */,
18AD83262BFAE8B9009BDE3B /* AiDeviceInfoManager.m in Sources */,
18EF7B012C7603E800AC5223 /* adpcm.c in Sources */,
+ 3F985CFD2DB34D0F008D6D73 /* DeviceTool.m in Sources */,
184A71092BDA4C050025A332 /* AFURLSessionManager.m in Sources */,
180E7BE82BD7BD84008558E8 /* AiAuthManager.m in Sources */,
);
18862BAF2C806BD900D3564D /* TimerManager.m in Sources */,
18862BB02C806BD900D3564D /* HidManager.m in Sources */,
18862BB22C806BD900D3564D /* AiMouseTools2.m in Sources */,
+ 3F985CFB2DB34D0F008D6D73 /* DeviceTool.m in Sources */,
3FCF53522D1A5C97007EC52F /* LogManager.m in Sources */,
18862BB32C806BD900D3564D /* AiSecretModel.m in Sources */,
18862BB42C806BD900D3564D /* AiSender.m in Sources */,
18862BBB2C806BD900D3564D /* AFURLResponseSerialization.m in Sources */,
18862BBC2C806BD900D3564D /* AFNetworkReachabilityManager.m in Sources */,
18862BBD2C806BD900D3564D /* AiRecordManager.m in Sources */,
- 18862BBE2C806BD900D3564D /* TlwAudioManager.m in Sources */,
- 18862BC12C806BD900D3564D /* AiAudioManager.m in Sources */,
+ 18862BBE2C806BD900D3564D /* AdpcmConverter.m in Sources */,
+ 18862BC12C806BD900D3564D /* SbcConverter.m in Sources */,
18862BC32C806BD900D3564D /* TlwTools.m in Sources */,
18862BC42C806BD900D3564D /* TlwMouseSdk.m in Sources */,
18862BC52C806BD900D3564D /* BleManager.m in Sources */,
#import "AiBkzhAuthManager.h"
#import "AiDeviceInfoManager.h"
-#import "AiAudioManager.h"
+#import "SbcConverter.h"
+#import "AdpcmConverter.h"
#import "AiMouseTools.h"
#import "AiMouseTools2.h"
#import "AiMouseConfig.h"
@interface AiMouse()
@property (nonatomic, strong) NSMutableData *voiceData;
-@property (nonatomic, strong) ByteDanceSdk *byteSdk;
-@property (nonatomic, strong) AiAudioManager *audioManager;
+@property (nonatomic, strong) SbcConverter *sbcTool;
@property (nonatomic, strong) AiRecordManager *recordManager;
@property (nonatomic, strong) AiDeviceInfoManager *deviceInfoManager;
@property (nonatomic, strong) AiConnectManager *connectdManager;
_connectType = AiMouseConnectType_bluetooth;
self.voiceData = [[NSMutableData alloc] init];
[self.recordManager checkPermissions];
-
- if ([DeviceManger shared].appType == 2 || [DeviceManger shared].appType == 4) {
- self.byteSdk = [ByteDanceSdk shared];
- [self.byteSdk initSdk];
- }
}
return self;
}
return _deviceInfoManager;;
}
--(AiAudioManager *)audioManager{
- if (!_audioManager) {
- _audioManager = [[AiAudioManager alloc] init];
+-(SbcConverter *)sbcTool{
+ if (!_sbcTool) {
+ _sbcTool = [[SbcConverter alloc] init];
__weak typeof(self) ws = self;
- _audioManager.decodeCallBack = ^(NSData * _Nonnull data) {
+ _sbcTool.decodeCallBack = ^(NSData * _Nonnull data) {
[ws sendRecordData:data];
};
- _audioManager.outputLog = ^(NSString * _Nonnull log) {
+ _sbcTool.outputLog = ^(NSString * _Nonnull log) {
[ws showLog:log];
};
}
- return _audioManager;
+ return _sbcTool;
}
- (AiRecordManager *)recordManager{
[ws switchConnect:ws.connectType isConnected:false];
return;
}
-// if (([DeviceManger shared].appType == 2 || [DeviceManger shared].appType == 4) && ws.byteSdk.info.token == nil) {
-// [ws.byteSdk startAuth:^(ByteDanceInfo *info) {
+// if (([DeviceManger shared].appType == 2 || [DeviceManger shared].appType == 4) ) {
+// [[ByteDanceSdk shared] startAuth:^(ByteDanceInfo *info) {
// deviceInfo.byteAuthInfo = info;
// [ws showLog:deviceInfo.description];
-// if([ws.delegate respondsToSelector:@selector(aiMouseConnectStateDidChange:)]) [ws.delegate aiMouseConnectStateDidChange:ws.connected];
-// if(ws.delegate) [ws.delegate aiMouseAuthenticationResult:true];
// }];
// }
-// else{
-// if([ws.delegate respondsToSelector:@selector(aiMouseConnectStateDidChange:)]) [ws.delegate aiMouseConnectStateDidChange:ws.connected];
-// if(ws.delegate) [ws.delegate aiMouseAuthenticationResult:true];
-// }
-
- if (([DeviceManger shared].appType == 2 || [DeviceManger shared].appType == 4) && ws.byteSdk.info.token == nil) {
- [ws.byteSdk startAuth:^(ByteDanceInfo *info) {
- deviceInfo.byteAuthInfo = info;
- [ws showLog:deviceInfo.description];
- }];
-
- }
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
if([ws.delegate respondsToSelector:@selector(aiMouseConnectStateDidChange:)]) [ws.delegate aiMouseConnectStateDidChange:ws.connected];
if(ws.delegate) [ws.delegate aiMouseAuthenticationResult:true];
}
NSString *cmd = [[AiMouseTools dataToHexString:data] lowercaseString];
if([cmd hasPrefix:@"9c31"]){
- //声音
- [self.audioManager receiveData:data];
+ //声音转换
+ [self.sbcTool receiveData:data];
}
else{
- [self showLog:@"未实现指令"];
+ NSData *pcm = [AdpcmConverter toPcm:data];
+ [self sendRecordData:pcm];
+// [self showLog:@"未实现指令"];
}
}
}
}
else{
- [self.byteSdk sendToSdk:data];
+ [[ByteDanceSdk shared] sendToSdk:data];
}
}
else{
__weak typeof(self) ws = self;
[self.deviceInfoManager getDeviceInfo:^(AiMouseDeviceInfo * _Nonnull deviceInfo, NSError * _Nonnull error) {
if (deviceInfo && ([DeviceManger shared].appType == 2 || [DeviceManger shared].appType == 4)) {
- deviceInfo.byteAuthInfo = ws.byteSdk.info;
- [ws showLog:deviceInfo.description];
+ [[ByteDanceSdk shared] startAuth:^(ByteDanceInfo *info,NSError *err) {
+ deviceInfo.byteAuthInfo = info;
+ [ws showLog:deviceInfo.description];
+ complete(deviceInfo,error);
+ }];
+ }
+ else{
+ complete(deviceInfo,error);
}
- complete(deviceInfo,error);
if (error != nil) {
[ws switchConnect:ws.connectType isConnected:false];
}
//
-// AiAudioManager.h
+// SbcConverter.h
// AiMouse
//
// Created by incar on 2024/2/28.
NS_ASSUME_NONNULL_BEGIN
-@interface AiAudioManager : NSObject
+@interface SbcConverter : NSObject
@property (nonatomic,strong)void (^outputData)(NSData *data);
@property (nonatomic,strong)void (^decodeCallBack)(NSData *data);
@property (nonatomic,strong)void (^outputLog)(NSString *log);
//
-// AiAudioManager.m
+// SbcConverter.m
// AiMouse
//
// Created by incar on 2024/2/28.
//
-#import "AiAudioManager.h"
+#import "SbcConverter.h"
#import "AiMouseTools.h"
#import "AiAudioDecoder.h"
-@interface AiAudioManager ()
+@interface SbcConverter ()
@property (nonatomic,strong)AiAudioDecoder *audioDecoder;
@end
-@implementation AiAudioManager
+@implementation SbcConverter
-(instancetype)init{
if (self = [super init]) {
- (void)receiveData:(NSData *)data{
[self.audioDecoder decodeSBCData:data];
-// NSString *str = [[AiMouseTools dataToHexString:data] lowercaseString];
-// NSString *cmd = [str substringWithRange:NSMakeRange(0, 12)];
-// if([cmd hasPrefix:@"0a"] && [cmd hasSuffix:@"31"]){
-//// 0x0a6500002a3100020101c0c1a5a5a5a5
-// [self showLog:@"开始录音"];
-// }
-// if( [cmd hasPrefix:@"0a"] && [cmd hasSuffix:@"32"]){
-// [self showLog:@"结束录音"];
-//// [self showLog:[NSString stringWithFormat:@"完整声音数据 %@",self.recvData]];
-//// [self finishRecevice:self.recvData];
-//// self.recvData = nil;
-// }
-// else if([str hasPrefix:@"9c31"] && data.length >= 32){
-// [self.audioDecoder decodeSBCData:data];
-// }
-// else{
-// [self showLog:@"未实现指令"];
-// }
}
- (void)setupAudioDecoder{
@interface ByteDanceSdk : NSObject
@property (nonatomic, strong) void (^sendToBleCallback)(NSData *data);/// 发送给蓝牙设备
-@property (nonatomic, strong) void (^byteDanceAuthInfoCallback)(ByteDanceInfo *data);
+@property (nonatomic, strong) void (^byteDanceAuthInfoCallback)(ByteDanceInfo *data,NSError *error);
@property (nonatomic,strong) ByteDanceInfo *info;
+(ByteDanceSdk *)shared;
- (void)initSdk;
-- (void)startAuth:(void (^)(ByteDanceInfo *info))complete;
+- (void)startAuth:(void (^)(ByteDanceInfo *info,NSError *error))complete;
- (void)sendToSdk:(NSData *)data;
}
-- (void)startAuth:(void (^)(ByteDanceInfo *info))complete{
+- (void)startAuth:(void (^)(ByteDanceInfo *info,NSError *error))complete{
self.byteDanceAuthInfoCallback = complete;
self.info = [[ByteDanceInfo alloc] init];
stb_app_start_identify();
+ [self performSelector:@selector(timeOutAction) withObject:nil afterDelay:5];
+}
+
+- (void)timeOutAction{
+ if(self.byteDanceAuthInfoCallback){
+ self.byteDanceAuthInfoCallback(nil,[NSError errorWithDomain:@"" code:-1 userInfo:@{}]);
+ }
}
- (void)sendToSdk:(NSData *)data{
- (void)checkAuthSuccess{
if (self.info.urlParams && self.info.expireTime && self.info.token && self.info.host) {
if(self.byteDanceAuthInfoCallback){
- self.byteDanceAuthInfoCallback(self.info);
+ self.byteDanceAuthInfoCallback(self.info,nil);
}
-// [self performSelector:@selector(stopAuth) withObject:nil afterDelay:5];
+ [NSObject cancelPreviousPerformRequestsWithTarget:self];
}
}
- (void)stopAuth{
//如需使用产线激活,使用该接口
DLL_EXPORTS char* STB_STDCALL device_register(char* product_key, char* device_name, char* product_secret);
//如需使用产线激活,使用该接口
-DLL_EXPORTS int STB_STDCALL device_active(char*product_key, char* device_name, char*device_secret);
+DLL_EXPORTS int STB_STDCALL device_active(char*product_key, char* device_name, char*device_secret,char*app_id);
#if defined(__cplusplus)
}
//如需使用产线激活,使用该接口
DLL_EXPORTS char* STB_STDCALL device_register(char* product_key, char* device_name, char* product_secret);
//如需使用产线激活,使用该接口
-DLL_EXPORTS int STB_STDCALL device_active(char*product_key, char* device_name, char*device_secret);
+DLL_EXPORTS int STB_STDCALL device_active(char*product_key, char* device_name, char*device_secret,char*app_id);
#if defined(__cplusplus)
}
//
#import "M8MouseSdk.h"
-#import "TlwAudioManager.h"
+#import "AdpcmConverter.h"
#import "TlwTools.h"
#import "AiRecordManager.h"
#import "M8MouseInfo.h"
@interface M8MouseSdk()
-@property (nonatomic, strong) TlwAudioManager *audioManager;
@property (nonatomic, strong) AiRecordManager *recordManager;
@property (nonatomic,strong)void (^dongleStateCallBack)(BOOL success);
return @"1.0.2";
}
--(TlwAudioManager *)audioManager{
- if (!_audioManager) {
- _audioManager = [[TlwAudioManager alloc] init];
- __weak typeof(self) ws = self;
- _audioManager.decodeCallBack = ^(NSData * _Nonnull data) {
- [ws sendRecordData:data];
- };
- _audioManager.outputLog = ^(NSString * _Nonnull log) {
- [ws showLog:log];
- };
- }
- return _audioManager;
-}
-
- (AiRecordManager *)recordManager{
if (!_recordManager) {
_recordManager = [[AiRecordManager alloc] init];
}
- (void)sendAiDataToSdk:(NSData *)data{
- [self showLog:[NSString stringWithFormat:@"[receive][Voice] %@",data]];
+ [self showLog:[NSString stringWithFormat:@"[receive][Voice] %@",data]];
if(self.connectType == AiMouseConnectType_hid){
}
else if (self.connectType == AiMouseConnectType_bluetooth){
}
#pragma mark - ble
- (void)bleReceiveAiData:(NSData *)data{
- [self.audioManager receiveData:data];
+ NSData *pcm = [AdpcmConverter toPcm:data];
+ [self sendRecordData:pcm];
}
-(void)bleReceiveDeviceData:(NSData *)data{
#import "BleManager.h"
#import "TlwTools.h"
#import "M8MouseInfo.h"
+#import "DeviceTool.h"
+
// 服务id
#define kFrkServiceUUID @"FFF1"
//ai特征
#pragma mark - CBPeripheralDelegate
//发现服务
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error {
- [self showLog:[NSString stringWithFormat:@"发现服务"]];
+ [self showLog:[NSString stringWithFormat:@"发现服务\n %@",peripheral.services]];
for (CBService *service in peripheral.services){
[peripheral discoverCharacteristics:nil forService:service];
}
// 发现特征
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error {
- for (CBCharacteristic *characteristic in service.characteristics){
- [self showLog:characteristic.UUID.UUIDString];
- if ([characteristic.UUID.UUIDString isEqualToString:@"2A25"]) {
- M8MouseInfo.shared.sn = [TlwTools dataToUtf8String:characteristic.value];
- }
- else if ([characteristic.UUID.UUIDString isEqualToString:@"2A19"]) {
- NSData *data = characteristic.value;
- int result;
- [data getBytes:&result length:1];
- M8MouseInfo.shared.battery_power = [NSString stringWithFormat:@"%d",result];
- }
- else if ([characteristic.UUID.UUIDString isEqualToString:@"2A24"]) {
- M8MouseInfo.shared.brand = [TlwTools dataToUtf8String:characteristic.value];
- }
- else if ([characteristic.UUID.UUIDString isEqualToString:@"2A26"]) {
- M8MouseInfo.shared.version = [TlwTools dataToUtf8String:characteristic.value];
- [self showLog:[NSString stringWithFormat:@"Firmware Revision = %@",[TlwTools dataToUtf8String:characteristic.value]]];
- }
- else if ([characteristic.UUID.UUIDString isEqualToString:@"2A28"]) {
- [self showLog:[NSString stringWithFormat:@"Software Revision = %@",[TlwTools dataToUtf8String:characteristic.value]]];
- }
-// else if ([characteristic.UUID.UUIDString isEqualToString:@"2A27"]) {
-// [self showLog:[NSString stringWithFormat:@"Hardware Revision = %@",[TlwTools dataToUtf8String:characteristic.value]]];
-// }
-//
+ [self showLog:[NSString stringWithFormat:@"发现特征\n%@\n%@",service,service.characteristics]];
-// else if ([characteristic.UUID.UUIDString isEqualToString:@"2A23"]) {
-// [self showLog:[NSString stringWithFormat:@"System ID = %@",[TlwTools dataToUtf8String:characteristic.value]]];
-// }
-// else if ([characteristic.UUID.UUIDString isEqualToString:@"2A2A"]) {
-// [self showLog:[NSString stringWithFormat:@"PnP ID = %@",[TlwTools dataToUtf8String:characteristic.value]]];
-// }
-// else if ([characteristic.UUID.UUIDString isEqualToString:@"2A29"]) {
-// [self showLog:[NSString stringWithFormat:@"Manufacturer Name = %@",[TlwTools dataToUtf8String:characteristic.value]]];
-// }
- else if ([characteristic.UUID.UUIDString isEqualToString:kM8ClickUUID]) {
- [peripheral setNotifyValue:YES forCharacteristic:characteristic];
- }
- else if ([characteristic.UUID.UUIDString isEqualToString:kM8VoiceUUID]) {
- //语音特征
- [peripheral setNotifyValue:YES forCharacteristic:characteristic];
- self.productType = AiMouseProductType_m8;
-// dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC);
-// dispatch_after(delayTime, dispatch_get_main_queue(), ^{
- [self showLog:[NSString stringWithFormat:@"连接成功 = %@",peripheral.name]];
- self.connectStateCallBack(self.curentPeripheral.name,true);
-// });
- }
- [self showLog:[NSString stringWithFormat:@"%@",characteristic]];
- }
-// return;
- for (CBCharacteristic *characteristic in service.characteristics){
- if ([characteristic.UUID.UUIDString isEqualToString:kFrkVoiceUUID]) {
- //语音特征
- [peripheral setNotifyValue:YES forCharacteristic:characteristic];
- }
- else if ([characteristic.UUID.UUIDString isEqualToString:kFrkDeviceInfoUUID]) {
- //通知设备信息特征
- [peripheral setNotifyValue:YES forCharacteristic:characteristic];
- self.deviceInfoCha = characteristic;
- self.productType = AiMouseProductType_frk;
- dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC);
- dispatch_after(delayTime, dispatch_get_main_queue(), ^{
- [self showLog:[NSString stringWithFormat:@"连接成功 = %@",peripheral.name]];
- self.connectStateCallBack(self.curentPeripheral.name,true);
- });
+ if ([DeviceTool isFrk:peripheral]) {
+ //泰凌微二代也走的是富瑞坤方案
+ for (CBCharacteristic *characteristic in service.characteristics){
+ if ([characteristic.UUID.UUIDString isEqualToString:kFrkVoiceUUID]) {
+ [peripheral setNotifyValue:YES forCharacteristic:characteristic];
+ }
+ else if ([characteristic.UUID.UUIDString isEqualToString:kFrkDeviceInfoUUID]) {
+ [peripheral setNotifyValue:YES forCharacteristic:characteristic];
+ self.deviceInfoCha = characteristic;
+ self.productType = AiMouseProductType_frk;
+ dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC);
+ dispatch_after(delayTime, dispatch_get_main_queue(), ^{
+ [self showLog:[NSString stringWithFormat:@"连接成功 = %@",peripheral.name]];
+ self.connectStateCallBack(self.curentPeripheral.name,true);
+ });
+ }
}
+ return;
}
-
- for (CBCharacteristic *characteristic in service.characteristics){
- if ([characteristic.UUID.UUIDString isEqualToString:kTlwVoiceUUID]) {
- //语音特征
- [peripheral setNotifyValue:YES forCharacteristic:characteristic];
- }
- else if ([characteristic.UUID.UUIDString isEqualToString:kTlwNotifyDeviceInfoUUID]) {
- //通知设备信息特征
- [peripheral setNotifyValue:YES forCharacteristic:characteristic];
- self.productType = AiMouseProductType_tlw;
- // 使用dispatch_after来延迟执行任务
- dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC);
- dispatch_after(delayTime, dispatch_get_main_queue(), ^{
- [self showLog:[NSString stringWithFormat:@"连接成功 = %@",peripheral.name]];
- self.connectStateCallBack(self.curentPeripheral.name,true);
- });
- }
- else if ([characteristic.UUID.UUIDString isEqualToString:kTlwSetDeviceInfoUUID]) {
- //设备信息特征
- self.deviceInfoCha = characteristic;
+ if ([DeviceTool isTlw:peripheral]) {
+ for (CBCharacteristic *characteristic in service.characteristics){
+ if ([characteristic.UUID.UUIDString isEqualToString:kTlwVoiceUUID]) {
+ [peripheral setNotifyValue:YES forCharacteristic:characteristic];
+ }
+ else if ([characteristic.UUID.UUIDString isEqualToString:kTlwNotifyDeviceInfoUUID]) {
+ [peripheral setNotifyValue:YES forCharacteristic:characteristic];
+ self.productType = AiMouseProductType_tlw;
+ // 使用dispatch_after来延迟执行任务
+ dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC);
+ dispatch_after(delayTime, dispatch_get_main_queue(), ^{
+ [self showLog:[NSString stringWithFormat:@"连接成功 = %@",peripheral.name]];
+ self.connectStateCallBack(self.curentPeripheral.name,true);
+ });
+ }
+ else if ([characteristic.UUID.UUIDString isEqualToString:kTlwSetDeviceInfoUUID]) {
+ self.deviceInfoCha = characteristic;
+ }
}
+ return;
}
-
- for (CBCharacteristic *characteristic in service.characteristics){
- if ([characteristic.UUID.UUIDString isEqualToString:kM8VoiceUUID]) {
- //语音特征
- [peripheral setNotifyValue:YES forCharacteristic:characteristic];
- }
- else if ([characteristic.UUID.UUIDString isEqualToString:kTlwNotifyDeviceInfoUUID]) {
- //通知设备信息特征
- [peripheral setNotifyValue:YES forCharacteristic:characteristic];
- self.productType = AiMouseProductType_tlw;
- // 使用dispatch_after来延迟执行任务
- dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC);
- dispatch_after(delayTime, dispatch_get_main_queue(), ^{
+ if ([DeviceTool isM8:peripheral]) {
+ for (CBCharacteristic *characteristic in service.characteristics){
+ [self showLog:characteristic.UUID.UUIDString];
+ if ([characteristic.UUID.UUIDString isEqualToString:@"2A25"]) {
+ M8MouseInfo.shared.sn = [TlwTools dataToUtf8String:characteristic.value];
+ }
+ else if ([characteristic.UUID.UUIDString isEqualToString:@"2A19"]) {
+ NSData *data = characteristic.value;
+ int result;
+ [data getBytes:&result length:1];
+ M8MouseInfo.shared.battery_power = [NSString stringWithFormat:@"%d",result];
+ }
+ else if ([characteristic.UUID.UUIDString isEqualToString:@"2A24"]) {
+ M8MouseInfo.shared.brand = [TlwTools dataToUtf8String:characteristic.value];
+ }
+ else if ([characteristic.UUID.UUIDString isEqualToString:@"2A26"]) {
+ M8MouseInfo.shared.version = [TlwTools dataToUtf8String:characteristic.value];
+ [self showLog:[NSString stringWithFormat:@"Firmware Revision = %@",[TlwTools dataToUtf8String:characteristic.value]]];
+ }
+ else if ([characteristic.UUID.UUIDString isEqualToString:@"2A28"]) {
+ [self showLog:[NSString stringWithFormat:@"Software Revision = %@",[TlwTools dataToUtf8String:characteristic.value]]];
+ }
+ // else if ([characteristic.UUID.UUIDString isEqualToString:@"2A27"]) {
+ // [self showLog:[NSString stringWithFormat:@"Hardware Revision = %@",[TlwTools dataToUtf8String:characteristic.value]]];
+ // }
+ //
+
+ // else if ([characteristic.UUID.UUIDString isEqualToString:@"2A23"]) {
+ // [self showLog:[NSString stringWithFormat:@"System ID = %@",[TlwTools dataToUtf8String:characteristic.value]]];
+ // }
+ // else if ([characteristic.UUID.UUIDString isEqualToString:@"2A2A"]) {
+ // [self showLog:[NSString stringWithFormat:@"PnP ID = %@",[TlwTools dataToUtf8String:characteristic.value]]];
+ // }
+ // else if ([characteristic.UUID.UUIDString isEqualToString:@"2A29"]) {
+ // [self showLog:[NSString stringWithFormat:@"Manufacturer Name = %@",[TlwTools dataToUtf8String:characteristic.value]]];
+ // }
+ else if ([characteristic.UUID.UUIDString isEqualToString:kM8ClickUUID]) {
+ [peripheral setNotifyValue:YES forCharacteristic:characteristic];
+ }
+ else if ([characteristic.UUID.UUIDString isEqualToString:kM8VoiceUUID]) {
+ //语音特征
+ [peripheral setNotifyValue:YES forCharacteristic:characteristic];
+ self.productType = AiMouseProductType_m8;
+ // dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC);
+ // dispatch_after(delayTime, dispatch_get_main_queue(), ^{
[self showLog:[NSString stringWithFormat:@"连接成功 = %@",peripheral.name]];
self.connectStateCallBack(self.curentPeripheral.name,true);
- });
- }
- else if ([characteristic.UUID.UUIDString isEqualToString:kTlwSetDeviceInfoUUID]) {
- //设备信息特征
- self.deviceInfoCha = characteristic;
+ // });
+ }
+ [self showLog:[NSString stringWithFormat:@"%@",characteristic]];
}
}
}
[CBUUID UUIDWithString:kTlwServiceUUID],
[CBUUID UUIDWithString:kM8ServiceUUID],
]];
-// [self showLog:[NSString stringWithFormat:@"查询配对过的设备%@",devices]];
+ [self showLog:[NSString stringWithFormat:@"查询配对过的设备%@",devices]];
if (devices.count > 0) {
[self showLog:[NSString stringWithFormat:@"配对匹配过的设备%@",devices[0].name]];
[self.curentPeripheral writeValue:data forCharacteristic:self.deviceInfoCha type:CBCharacteristicWriteWithResponse];
}
else{
- [self.curentPeripheral writeValue:data forCharacteristic:self.deviceInfoCha type:CBCharacteristicWriteWithoutResponse];
+ if ([DeviceManger shared].appType == 2 || [DeviceManger shared].appType == 4) {
+ [self.curentPeripheral writeValue:data forCharacteristic:self.deviceInfoCha type:CBCharacteristicWriteWithResponse];
+ }
+ else{
+ [self.curentPeripheral writeValue:data forCharacteristic:self.deviceInfoCha type:CBCharacteristicWriteWithoutResponse];
+ }
}
}
/// 产品类型
typedef NS_ENUM(NSInteger,AiMouseProductType) {
- AiMouseProductType_frk = 1,///富瑞坤
- AiMouseProductType_tlw = 2,///泰凌微
- AiMouseProductType_n = 3,///一键上网
- AiMouseProductType_keyboard = 4,///键盘
- AiMouseProductType_m8 = 5,///泰凌微m8
+ AiMouseProductType_frk = 1,///富瑞坤,(usb/ble)
+ AiMouseProductType_tlw = 2,///泰凌微(usb/ble)
+ AiMouseProductType_n = 3,///一键上网(usb)
+ AiMouseProductType_keyboard = 4,///键盘(usb)
+ AiMouseProductType_m8 = 5,///泰凌微m8(usb/ble)
};
NS_ASSUME_NONNULL_BEGIN
[self setupBle];
[self setupHid];
[self setupTimer];
+
+ if ([DeviceManger shared].appType == 2 || [DeviceManger shared].appType == 4) {
+ [[ByteDanceSdk shared] initSdk];
+ }
}
-(void)setDebugLevel:(int)debugLevel{
[LogManager shared].debugLevel = debugLevel;
--- /dev/null
+//
+// DeviceTool.h
+// AiMouseSdk
+//
+// Created by liangshi on 2025/4/19.
+//
+
+#import <Foundation/Foundation.h>
+#import "DeviceManger.h"
+#import <CoreBluetooth/CoreBluetooth.h>
+
+
+@interface DeviceTool : NSObject
+
+
++ (AiMouseProductType)getTypeFromBle:(CBPeripheral *)peripheral;
+
++ (BOOL)isFrk:(CBPeripheral *)peripheral;
+
++ (BOOL)isTlw:(CBPeripheral *)peripheral;
+
++ (BOOL)isM8:(CBPeripheral *)peripheral;
+@end
--- /dev/null
+//
+// DeviceTool.m
+// AiMouseSdk
+//
+// Created by liangshi on 2025/4/19.
+//
+
+#import "DeviceTool.h"
+
+@implementation DeviceTool
+
++ (AiMouseProductType)getTypeFromBle:(CBPeripheral *)peripheral{
+ if ([self isFrk:peripheral]) {
+ return AiMouseProductType_frk;
+ }
+ if ([self isTlw:peripheral]) {
+ return AiMouseProductType_tlw;
+ }
+ return AiMouseProductType_m8;
+}
+
++ (BOOL)isFrk:(CBPeripheral *)peripheral{
+ NSArray *list = peripheral.services;
+ BOOL FFF1 = false;
+ for (CBService *s in list) {
+ if ([s.UUID.UUIDString isEqualToString:@"FFF1"]) {
+ FFF1 = true;
+ }
+ }
+ if (FFF1) {
+ return true;
+ }
+ return false;
+}
+
++ (BOOL)isTlw:(CBPeripheral *)peripheral{
+ NSArray *list = peripheral.services;
+ BOOL FFF0 = false;
+ BOOL FFF1 = false;
+ for (CBService *s in list) {
+ if ([s.UUID.UUIDString isEqualToString:@"FFF0"]) {
+ FFF0 = true;
+ }
+ if ([s.UUID.UUIDString isEqualToString:@"FFF1"]) {
+ FFF1 = true;
+ }
+ }
+ if (FFF0 && !FFF1) {
+ return true;
+ }
+ return false;
+}
+
++ (BOOL)isM8:(CBPeripheral *)peripheral{
+ if (![self isFrk:peripheral] && ![self isTlw:peripheral]) {
+ return true;
+ }
+ else{
+ return false;
+ }
+}
+@end
static void hidReceiveData(void* context, IOReturn result, void* sender, IOHIDReportType type, uint32_t reportID, uint8_t *report,CFIndex reportLength){
NSData *data = [[NSData alloc] initWithBytes:report length:reportLength];
-// [[HidManager shared] showLog:[NSString stringWithFormat:@"receive = %@",data]];
+ [[HidManager shared] showLog:[NSString stringWithFormat:@"receive = %@",data]];
// return;
if([HidManager shared].productType == AiMouseProductType_keyboard){
uint32_t primaryUsagePage = IOHIDDevGetUInt32Property(sender, CFSTR(kIOHIDPrimaryUsagePageKey));
// [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
// [[NSRunLoop currentRunLoop] run];
// });
- self.timer = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(timerAction) userInfo:nil repeats:true];
+ self.timer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(timerAction) userInfo:nil repeats:true];
}
- (void)timerAction{
--- /dev/null
+//
+// AdpcmConverter.h
+// AiMouse
+//
+// Created by incar on 2024/2/28.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface AdpcmConverter : NSObject
+
+
++ (NSData *)toPcm:(NSData *)data;
+@end
+
+NS_ASSUME_NONNULL_END
//
-// TlwAudioManager.m
+// AdpcmConverter.m
// AiMouse
//
// Created by incar on 2024/2/28.
//
-#import "TlwAudioManager.h"
+#import "AdpcmConverter.h"
#import <AVFoundation/AVFoundation.h>
#import "adpcm.h"
-@interface TlwAudioManager ()
+@interface AdpcmConverter ()
@end
-@implementation TlwAudioManager
+@implementation AdpcmConverter
--(instancetype)init{
- if (self = [super init]) {
-
- }
- return self;
-}
-
-- (void)receiveData:(NSData *)data{
++ (NSData *)toPcm:(NSData *)data;{
NSData *pcmData = [self convertADPCMDataToPCMData:data];
- if(self.decodeCallBack)self.decodeCallBack(pcmData);
+ return pcmData;
}
-- (NSData *)convertADPCMDataToPCMData:(NSData *)adpcmData {
++ (NSData *)convertADPCMDataToPCMData:(NSData *)adpcmData {
const unsigned char *adpcmBytes = (const unsigned char *)[adpcmData bytes];
NSUInteger adpcmLength = [adpcmData length];
+++ /dev/null
-//
-// TlwAudioManager.h
-// AiMouse
-//
-// Created by incar on 2024/2/28.
-//
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface TlwAudioManager : NSObject
-@property (nonatomic,strong)void (^outputData)(NSData *data);
-@property (nonatomic,strong)void (^decodeCallBack)(NSData *data);
-@property (nonatomic,strong)void (^outputLog)(NSString *log);
-
-- (void)receiveData:(NSData *)data;
-@end
-
-NS_ASSUME_NONNULL_END
//
#import "TlwMouseSdk.h"
-#import "TlwAudioManager.h"
+#import "AdpcmConverter.h"
#import "TlwTools.h"
#import "AiRecordManager.h"
@interface TlwMouse()
-@property (nonatomic, strong) TlwAudioManager *audioManager;
@property (nonatomic, strong) AiRecordManager *recordManager;
@property (nonatomic,strong)void (^dongleStateCallBack)(BOOL success);
return @"1.0.2";
}
--(TlwAudioManager *)audioManager{
- if (!_audioManager) {
- _audioManager = [[TlwAudioManager alloc] init];
- __weak typeof(self) ws = self;
- _audioManager.decodeCallBack = ^(NSData * _Nonnull data) {
- [ws sendRecordData:data];
- };
- _audioManager.outputLog = ^(NSString * _Nonnull log) {
- [ws showLog:log];
- };
- }
- return _audioManager;
-}
-
- (AiRecordManager *)recordManager{
if (!_recordManager) {
_recordManager = [[AiRecordManager alloc] init];
}
#pragma mark - ble
- (void)bleReceiveAiData:(NSData *)data{
- [self.audioManager receiveData:data];
+ NSData *pcm = [AdpcmConverter toPcm:data];
+ [self sendRecordData:pcm];
}
-(void)bleReceiveDeviceData:(NSData *)data{
uuid = "D56CBD13-B1CD-4964-946C-9C0A140796C8"
type = "0"
version = "2.0">
- <Breakpoints>
- <BreakpointProxy
- BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
- <BreakpointContent
- uuid = "7811129E-8425-43E8-9FDC-75B40C321EE5"
- shouldBeEnabled = "Yes"
- ignoreCount = "0"
- continueAfterRunningActions = "No"
- filePath = "AiMouseSdk/AiMouseSdk/AiAudioManager.m"
- startingColumnNumber = "9223372036854775807"
- endingColumnNumber = "9223372036854775807"
- startingLineNumber = "52"
- endingLineNumber = "52"
- landmarkName = "-setupAudioDecoder"
- landmarkType = "7">
- </BreakpointContent>
- </BreakpointProxy>
- <BreakpointProxy
- BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
- <BreakpointContent
- uuid = "4CD2AA7E-80CE-4CAA-A0AC-008B3CD5E559"
- shouldBeEnabled = "Yes"
- ignoreCount = "0"
- continueAfterRunningActions = "No"
- filePath = "AiMouseSdk/Manager/HidManager.m"
- startingColumnNumber = "9223372036854775807"
- endingColumnNumber = "9223372036854775807"
- startingLineNumber = "57"
- endingLineNumber = "57"
- landmarkName = "hidAppearDevice(inContext, inResult, inSender, inIOHIDDeviceRef)"
- landmarkType = "9">
- </BreakpointContent>
- </BreakpointProxy>
- </Breakpoints>
</Bucket>
else{
ws.typeLabel.stringValue = @"连接模式:--";
ws.connectLabel.stringValue = @"连接状态:未连接";
+ ws.deviceInfoLabel.stringValue = @"";
+ ws.authLabel.stringValue = @"鉴权状态:--";
}
});
}];
NSLog(@"%@",[NSString stringWithFormat:@"按键指令 = %@",data]);
};
manager.recordingCallBack = ^(NSString * _Nonnull data) {
- NSLog(@"%@",[NSString stringWithFormat:@"语音数据 = %@",data]);
+// NSLog(@"%@",[NSString stringWithFormat:@"语音数据 = %@",data]);
};
}
<key>Masonry.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
- <integer>3</integer>
+ <integer>2</integer>
</dict>
<key>Pods-MouseSdk.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
- <integer>2</integer>
+ <integer>3</integer>
</dict>
</dict>
</dict>