Browse Source

重新添加 device_jieli 独家 vendor 的 framework

之前 commit d4eaa42ac 为避免与 ota plugin 冲突删了这 4 个 xcframework,
现在 ota plugin 已废弃 → 由 device_jieli 独家提供:
  - JL_OTALib.xcframework (v2.4.1)
  - JL_AdvParse.xcframework
  - JL_HashPair.xcframework
  - JLLogHelper.xcframework

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
weicu
liwei1dao 5 months ago
parent
commit
9483dd412b
  1. 44
      local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/Info.plist
  2. 19
      local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64/JLLogHelper.framework/Headers/JLLogHelper.h
  3. 88
      local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64/JLLogHelper.framework/Headers/JLLogManager.h
  4. BIN
      local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64/JLLogHelper.framework/Info.plist
  5. BIN
      local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64/JLLogHelper.framework/JLLogHelper
  6. 6
      local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64/JLLogHelper.framework/Modules/module.modulemap
  7. 19
      local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64_x86_64-simulator/JLLogHelper.framework/Headers/JLLogHelper.h
  8. 88
      local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64_x86_64-simulator/JLLogHelper.framework/Headers/JLLogManager.h
  9. BIN
      local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64_x86_64-simulator/JLLogHelper.framework/Info.plist
  10. BIN
      local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64_x86_64-simulator/JLLogHelper.framework/JLLogHelper
  11. 6
      local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64_x86_64-simulator/JLLogHelper.framework/Modules/module.modulemap
  12. 147
      local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64_x86_64-simulator/JLLogHelper.framework/_CodeSignature/CodeResources
  13. 44
      local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/Info.plist
  14. 72
      local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JLAdvParse.h
  15. 64
      local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JLChargingBoxAdv.h
  16. 54
      local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JLDevicesAdv.h
  17. 47
      local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JLEarphoneAdv.h
  18. 25
      local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JLOtaAdv.h
  19. 19
      local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JLSoundBoxAdv.h
  20. 19
      local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JLSoundCardAdv.h
  21. 89
      local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JLTwsAdv.h
  22. 35
      local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JLWatchAdv.h
  23. 27
      local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JL_AdvParse.h
  24. BIN
      local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Info.plist
  25. BIN
      local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/JL_AdvParse
  26. 6
      local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Modules/module.modulemap
  27. 72
      local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JLAdvParse.h
  28. 64
      local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JLChargingBoxAdv.h
  29. 54
      local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JLDevicesAdv.h
  30. 47
      local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JLEarphoneAdv.h
  31. 25
      local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JLOtaAdv.h
  32. 19
      local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JLSoundBoxAdv.h
  33. 19
      local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JLSoundCardAdv.h
  34. 89
      local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JLTwsAdv.h
  35. 35
      local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JLWatchAdv.h
  36. 27
      local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JL_AdvParse.h
  37. BIN
      local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Info.plist
  38. BIN
      local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/JL_AdvParse
  39. 6
      local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Modules/module.modulemap
  40. 267
      local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/_CodeSignature/CodeResources
  41. 44
      local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/Info.plist
  42. 25
      local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64/JL_HashPair.framework/Headers/BtHash.h
  43. 59
      local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64/JL_HashPair.framework/Headers/JLHashHandler.h
  44. 21
      local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64/JL_HashPair.framework/Headers/JL_HashPair.h
  45. 20
      local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64/JL_HashPair.framework/Headers/JL_ble_pair.h
  46. BIN
      local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64/JL_HashPair.framework/Info.plist
  47. BIN
      local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64/JL_HashPair.framework/JL_HashPair
  48. 6
      local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64/JL_HashPair.framework/Modules/module.modulemap
  49. 25
      local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64_x86_64-simulator/JL_HashPair.framework/Headers/BtHash.h
  50. 59
      local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64_x86_64-simulator/JL_HashPair.framework/Headers/JLHashHandler.h
  51. 21
      local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64_x86_64-simulator/JL_HashPair.framework/Headers/JL_HashPair.h
  52. 20
      local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64_x86_64-simulator/JL_HashPair.framework/Headers/JL_ble_pair.h
  53. BIN
      local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64_x86_64-simulator/JL_HashPair.framework/Info.plist
  54. BIN
      local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64_x86_64-simulator/JL_HashPair.framework/JL_HashPair
  55. 6
      local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64_x86_64-simulator/JL_HashPair.framework/Modules/module.modulemap
  56. 177
      local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64_x86_64-simulator/JL_HashPair.framework/_CodeSignature/CodeResources
  57. 44
      local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/Info.plist
  58. 52
      local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64/JL_OTALib.framework/Headers/JLOTAFile.h
  59. 62
      local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64/JL_OTALib.framework/Headers/JLOtaCustom.h
  60. 43
      local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64/JL_OTALib.framework/Headers/JLOtaReConnectOption.h
  61. 22
      local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64/JL_OTALib.framework/Headers/JL_OTALib.h
  62. 302
      local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64/JL_OTALib.framework/Headers/JL_OTAManager.h
  63. 207
      local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64/JL_OTALib.framework/Headers/jl_ufw.h
  64. BIN
      local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64/JL_OTALib.framework/Info.plist
  65. BIN
      local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64/JL_OTALib.framework/JL_OTALib
  66. 6
      local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64/JL_OTALib.framework/Modules/module.modulemap
  67. 52
      local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/Headers/JLOTAFile.h
  68. 62
      local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/Headers/JLOtaCustom.h
  69. 43
      local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/Headers/JLOtaReConnectOption.h
  70. 22
      local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/Headers/JL_OTALib.h
  71. 302
      local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/Headers/JL_OTAManager.h
  72. 207
      local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/Headers/jl_ufw.h
  73. BIN
      local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/Info.plist
  74. BIN
      local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/JL_OTALib
  75. 6
      local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/Modules/module.modulemap
  76. 207
      local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/_CodeSignature/CodeResources

44
local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/Info.plist

@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>AvailableLibraries</key>
<array>
<dict>
<key>BinaryPath</key>
<string>JLLogHelper.framework/JLLogHelper</string>
<key>LibraryIdentifier</key>
<string>ios-arm64_x86_64-simulator</string>
<key>LibraryPath</key>
<string>JLLogHelper.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
<string>x86_64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
<key>SupportedPlatformVariant</key>
<string>simulator</string>
</dict>
<dict>
<key>BinaryPath</key>
<string>JLLogHelper.framework/JLLogHelper</string>
<key>LibraryIdentifier</key>
<string>ios-arm64</string>
<key>LibraryPath</key>
<string>JLLogHelper.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
</dict>
</array>
<key>CFBundlePackageType</key>
<string>XFWK</string>
<key>XCFrameworkFormatVersion</key>
<string>1.0</string>
</dict>
</plist>

19
local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64/JLLogHelper.framework/Headers/JLLogHelper.h

@ -0,0 +1,19 @@
//
// JLLogHelper.h
// JLLogHelper
//
// Created by EzioChan on 2024/5/8.
// Copyright © 2024 www.zh-jieli.com. All rights reserved.
//
#import <Foundation/Foundation.h>
//! Project version number for JLLogHelper.
FOUNDATION_EXPORT double JLLogHelperVersionNumber;
//! Project version string for JLLogHelper.
FOUNDATION_EXPORT const unsigned char JLLogHelperVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <JLLogHelper/PublicHeader.h>
#import <JLLogHelper/JLLogManager.h>

88
local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64/JLLogHelper.framework/Headers/JLLogManager.h

@ -0,0 +1,88 @@
//
// JLLogManager.h
// JLLogHelper
//
// Created by EzioChan on 2024/5/8.
// Copyright © 2024 www.zh-jieli.com. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
/// 打印宏
#define kJLLog(level,fmt...) [JLLogManager logLevel:level funcName:__FUNCTION__ line:__LINE__ format:fmt]
typedef NS_ENUM(NSInteger, JLLOG_LEVEL) {
JLLOG_COMPLETE = 0,
JLLOG_DEBUG = 1,
JLLOG_INFO = 2,
JLLOG_WARN = 3,
JLLOG_ERROR = 4,
};
/// 日志打印
@interface JLLogManager : NSObject
/// 打印SDK版本
+(void)sdkVersion;
///清理已存储的打印
+(void)clearLog;
/**
* 打印文本
*/
+(void)openLogTextFile;
///重定向保存日志文件路径设置
/// @param path 路径
+(void)redirectLogPath:(NSString *)path;
/// 收集日志回调接口
/// @param block 回调
+(void)collectLog:(void(^)(NSString *log))block;
/// 打印时间
/// @param isTimeStamp 是否打印 default is false
+(void)logWithTimestamp:(BOOL)isTimeStamp;
/// 把日志保存存储起来
/// @param isSave 是否保存 default is yes
+(void)saveLogAsFile:(BOOL)isSave;
///LOG使能与等级,默认开启且debug等级。
/// @param enable LOG使能
/// @param isMore 是否打印【函数名&行号】
/// @param level LOG等级
+(void)setLog:(BOOL)enable IsMore:(BOOL)isMore Level:(JLLOG_LEVEL)level;
/// 打印函数
/// @param level LOG等级
/// @param func 函数名
/// @param line 行号
/// @param format 内容
+(void)logLevel:(JLLOG_LEVEL)level funcName:(const char* _Nullable)func line:(const int)line format:(NSString * _Nonnull)format,...;
/// 打印
/// @param something 任意字符串内容
+(void)logSomething:(NSString *)something;
/// 打印对象
/// @param object 任意对象
+(void)logObject:(id)object;
/// 打印
/// @param level LOG等级
/// @param content 内容
+(void)logLevel:(JLLOG_LEVEL)level content:(NSString *)content;
/// 保存日志信息到文件中
/// @param logContent 日志内容
+(void)saveLog:(NSString *)logContent;
@end
NS_ASSUME_NONNULL_END

BIN
local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64/JLLogHelper.framework/Info.plist

Binary file not shown.

BIN
local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64/JLLogHelper.framework/JLLogHelper

Binary file not shown.

6
local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64/JLLogHelper.framework/Modules/module.modulemap

@ -0,0 +1,6 @@
framework module JLLogHelper {
umbrella header "JLLogHelper.h"
export *
module * { export * }
}

19
local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64_x86_64-simulator/JLLogHelper.framework/Headers/JLLogHelper.h

@ -0,0 +1,19 @@
//
// JLLogHelper.h
// JLLogHelper
//
// Created by EzioChan on 2024/5/8.
// Copyright © 2024 www.zh-jieli.com. All rights reserved.
//
#import <Foundation/Foundation.h>
//! Project version number for JLLogHelper.
FOUNDATION_EXPORT double JLLogHelperVersionNumber;
//! Project version string for JLLogHelper.
FOUNDATION_EXPORT const unsigned char JLLogHelperVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <JLLogHelper/PublicHeader.h>
#import <JLLogHelper/JLLogManager.h>

88
local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64_x86_64-simulator/JLLogHelper.framework/Headers/JLLogManager.h

@ -0,0 +1,88 @@
//
// JLLogManager.h
// JLLogHelper
//
// Created by EzioChan on 2024/5/8.
// Copyright © 2024 www.zh-jieli.com. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
/// 打印宏
#define kJLLog(level,fmt...) [JLLogManager logLevel:level funcName:__FUNCTION__ line:__LINE__ format:fmt]
typedef NS_ENUM(NSInteger, JLLOG_LEVEL) {
JLLOG_COMPLETE = 0,
JLLOG_DEBUG = 1,
JLLOG_INFO = 2,
JLLOG_WARN = 3,
JLLOG_ERROR = 4,
};
/// 日志打印
@interface JLLogManager : NSObject
/// 打印SDK版本
+(void)sdkVersion;
///清理已存储的打印
+(void)clearLog;
/**
* 打印文本
*/
+(void)openLogTextFile;
///重定向保存日志文件路径设置
/// @param path 路径
+(void)redirectLogPath:(NSString *)path;
/// 收集日志回调接口
/// @param block 回调
+(void)collectLog:(void(^)(NSString *log))block;
/// 打印时间
/// @param isTimeStamp 是否打印 default is false
+(void)logWithTimestamp:(BOOL)isTimeStamp;
/// 把日志保存存储起来
/// @param isSave 是否保存 default is yes
+(void)saveLogAsFile:(BOOL)isSave;
///LOG使能与等级,默认开启且debug等级。
/// @param enable LOG使能
/// @param isMore 是否打印【函数名&行号】
/// @param level LOG等级
+(void)setLog:(BOOL)enable IsMore:(BOOL)isMore Level:(JLLOG_LEVEL)level;
/// 打印函数
/// @param level LOG等级
/// @param func 函数名
/// @param line 行号
/// @param format 内容
+(void)logLevel:(JLLOG_LEVEL)level funcName:(const char* _Nullable)func line:(const int)line format:(NSString * _Nonnull)format,...;
/// 打印
/// @param something 任意字符串内容
+(void)logSomething:(NSString *)something;
/// 打印对象
/// @param object 任意对象
+(void)logObject:(id)object;
/// 打印
/// @param level LOG等级
/// @param content 内容
+(void)logLevel:(JLLOG_LEVEL)level content:(NSString *)content;
/// 保存日志信息到文件中
/// @param logContent 日志内容
+(void)saveLog:(NSString *)logContent;
@end
NS_ASSUME_NONNULL_END

BIN
local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64_x86_64-simulator/JLLogHelper.framework/Info.plist

Binary file not shown.

BIN
local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64_x86_64-simulator/JLLogHelper.framework/JLLogHelper

Binary file not shown.

6
local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64_x86_64-simulator/JLLogHelper.framework/Modules/module.modulemap

@ -0,0 +1,6 @@
framework module JLLogHelper {
umbrella header "JLLogHelper.h"
export *
module * { export * }
}

147
local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64_x86_64-simulator/JLLogHelper.framework/_CodeSignature/CodeResources

@ -0,0 +1,147 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>files</key>
<dict>
<key>Headers/JLLogHelper.h</key>
<data>
TahP/o16a5TgPGLNFs/QhND95FU=
</data>
<key>Headers/JLLogManager.h</key>
<data>
Be4QtnAF0IDSmlMZquwyK7LLd8w=
</data>
<key>Info.plist</key>
<data>
PJl+BYy7qbdneBUnydYicJKb/SM=
</data>
<key>Modules/module.modulemap</key>
<data>
YwPsApnJXdp+uskVahraY2UK/Jk=
</data>
</dict>
<key>files2</key>
<dict>
<key>Headers/JLLogHelper.h</key>
<dict>
<key>hash</key>
<data>
TahP/o16a5TgPGLNFs/QhND95FU=
</data>
<key>hash2</key>
<data>
nD5WuwBhpaoCwOGeWB5OusXVP21nYy+/Hcn6nPideIk=
</data>
</dict>
<key>Headers/JLLogManager.h</key>
<dict>
<key>hash</key>
<data>
Be4QtnAF0IDSmlMZquwyK7LLd8w=
</data>
<key>hash2</key>
<data>
vOgQgQVptNwQdUKpCW2EBNruc0PL6BnkSjxVpptJsf0=
</data>
</dict>
<key>Modules/module.modulemap</key>
<dict>
<key>hash</key>
<data>
YwPsApnJXdp+uskVahraY2UK/Jk=
</data>
<key>hash2</key>
<data>
ViwpXSuoKoiEUwMpetyre+mlEz0+JE8UURyNSgBuylM=
</data>
</dict>
</dict>
<key>rules</key>
<dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^version.plist$</key>
<true/>
</dict>
<key>rules2</key>
<dict>
<key>.*\.dSYM($|/)</key>
<dict>
<key>weight</key>
<real>11</real>
</dict>
<key>^(.*/)?\.DS_Store$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>2000</real>
</dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^Info\.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^PkgInfo$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^embedded\.provisionprofile$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
<key>^version\.plist$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
</dict>
</dict>
</plist>

44
local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/Info.plist

@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>AvailableLibraries</key>
<array>
<dict>
<key>BinaryPath</key>
<string>JL_AdvParse.framework/JL_AdvParse</string>
<key>LibraryIdentifier</key>
<string>ios-arm64</string>
<key>LibraryPath</key>
<string>JL_AdvParse.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
</dict>
<dict>
<key>BinaryPath</key>
<string>JL_AdvParse.framework/JL_AdvParse</string>
<key>LibraryIdentifier</key>
<string>ios-arm64_x86_64-simulator</string>
<key>LibraryPath</key>
<string>JL_AdvParse.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
<string>x86_64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
<key>SupportedPlatformVariant</key>
<string>simulator</string>
</dict>
</array>
<key>CFBundlePackageType</key>
<string>XFWK</string>
<key>XCFrameworkFormatVersion</key>
<string>1.0</string>
</dict>
</plist>

72
local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JLAdvParse.h

@ -0,0 +1,72 @@
//
// JLAdvParse.h
// JL_AdvParse
//
// Created by EzioChan on 2023/1/31.
// Copyright © 2023 www.zh-jieli.com. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <JLLogHelper/JLLogHelper.h>
NS_ASSUME_NONNULL_BEGIN
typedef NS_ENUM(UInt8,JL_AdvType) {
JL_AdvTypeSoundBox = 0, //音箱类型
JL_AdvTypeChargingBin = 1, //充电仓类型
JL_AdvTypeTWS = 2, //TWS耳机类型
JL_AdvTypeHeadset = 3, //普通耳机类型
JL_AdvTypeSoundCard = 4, //声卡类型
JL_AdvTypeWatch = 5, //手表类型
JL_AdvTypeTradition = 6, //传统设备类型
};
typedef NS_ENUM(NSInteger,JL_DeviceType) {
JL_DeviceTypeSoundBox = 0, //AI音箱类型
JL_DeviceTypeChargingBin = 1, //充电仓类型
JL_DeviceTypeTWS = 2, //TWS耳机类型
JL_DeviceTypeHeadset = 3, //普通耳机类型
JL_DeviceTypeSoundCard = 4, //声卡类型
JL_DeviceTypeWatch = 5, //手表类型
JL_DeviceTypeDongle = 6, //Dongle
JL_DeviceTypeTradition = -1, //传统设备类型
};
/// 广播包解析器
@interface JLAdvParse : NSObject
/// 打印当前SDK的版本
+(void)sdkVersion;
/// 解析设备广播包内容
/// @param key 过滤码(只针对传统设备生效,默认填空即可)
/// @param advertData 蓝牙广播字典
+(NSDictionary*)bluetoothAdvParse:(NSData *_Nullable)key AdvData:(NSDictionary*_Nonnull)advertData;
/// 解析蓝牙广播包
/// @param advertData 蓝牙广播报字典
/// @param rssi 蓝牙信号强度
+(NSDictionary *)bluetoothAdvData:(NSDictionary *)advertData RSSI:(NSNumber *)rssi;
#pragma mark - 回连广播包信息
/**
* 获取广播包kCBAdvDataManufacturerData里面 'JLOTA' 标识的蓝牙地址
* @param kCBAdvDataManufacturerData 广播包
*/
+ (NSString * _Nullable)otaBleMacAddressFromCBAdvDataManufacturerData:(NSData *)kCBAdvDataManufacturerData;
/**
* 判断当前蓝牙地址是否等于广播包kCBAdvDataManufacturerData里面的蓝牙地址
* @param otaBleMacAddress ota升级中设备的蓝牙地址
* @param kCBAdvDataManufacturerData 广播包
*/
+ (Boolean)otaBleMacAddress:(NSString *)otaBleMacAddress isEqualToCBAdvDataManufacturerData:(NSData *)kCBAdvDataManufacturerData;
@end
NS_ASSUME_NONNULL_END

64
local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JLChargingBoxAdv.h

@ -0,0 +1,64 @@
//
// JLChargingBoxAdv.h
// JL_AdvParse
//
// Created by EzioChan on 2023/12/12.
// Copyright © 2023 www.zh-jieli.com. All rights reserved.
//
#import "JLDevicesAdv.h"
NS_ASSUME_NONNULL_BEGIN
@interface JLChargingBoxAdv : JLDevicesAdv
/// 经典蓝牙地址
@property(nonatomic, strong) NSString *edrAddr;
/// 是否已配对
@property(nonatomic, assign) BOOL isParied;
/// 是否已开盖
@property(nonatomic, assign) BOOL isOpen;
/// 耳机状态
///0x00:不显示弹窗
///0x01:经典蓝牙未连接
///0x02:经典蓝牙已连接
///0x03:设备正在回连
///0x04:设备不可连接 (需要手动进入配对模式)
@property(nonatomic, assign) uint8_t status;
/// 左耳电量
@property(nonatomic, assign) uint8_t batteryLeft;
/// 右耳电量
@property(nonatomic, assign) uint8_t batteryRight;
/// 充电仓电量
@property(nonatomic, assign) uint8_t batteryBox;
///左耳是否在充电中
@property(nonatomic, assign) BOOL isChargingLeft;
///右耳是否在充电中
@property(nonatomic, assign) BOOL isChargingRight;
///充电仓是否在充电中
@property(nonatomic, assign) BOOL isChargingBox;
/// seq
/// 用于区分是否同一次开机。每次开机或者断开连接后 增加1
@property(nonatomic, assign) uint8_t seq;
///模式
/// 0x00:充电模式
/// 0x01:发射模式
@property(nonatomic, assign) uint8_t mode;
/// 加密 Hash 校验值
@property(nonatomic, copy) NSData *hashData;
@end
NS_ASSUME_NONNULL_END

54
local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JLDevicesAdv.h

@ -0,0 +1,54 @@
//
// JLDevicesAdv.h
// JL_AdvParse
//
// Created by EzioChan on 2023/12/12.
// Copyright © 2023 www.zh-jieli.com. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "JLAdvParse.h"
NS_ASSUME_NONNULL_BEGIN
@interface JLDevicesAdv : NSObject
/// 客户唯一标识
@property(nonatomic,assign)uint16_t uid;
/// 产品唯一标识
@property(nonatomic,assign)uint16_t pid;
/// 设备类型
///JL_DeviceTypeSoundBox = 0, //AI音箱类型
///JL_DeviceTypeChargingBin = 1, //充电仓类型
///JL_DeviceTypeTWS = 2, //TWS耳机类型
///JL_DeviceTypeHeadset = 3, //普通耳机类型
///JL_DeviceTypeSoundCard = 4, //声卡类型
///JL_DeviceTypeWatch = 5, //手表类型
///JL_DeviceTypeTradition = -1, //传统设备类型
@property(nonatomic,assign)JL_DeviceType type;
/// 协议版本
@property(nonatomic,assign)uint8_t version;
/// 可变数据段
@property(nonatomic,copy)NSData *variableData;
- (instancetype)initWithData:(NSData *)data;
/// 转成model类型
/// @param basicData 蓝牙广播数据
+(JLDevicesAdv *__nullable)advertDataToModel:(NSData *)basicData;
/// 转成model类型
/// @param basicHexStr 蓝牙广播数据
+(JLDevicesAdv *__nullable)advertDataHexStrToModel:(NSString *)basicHexStr;
@end
NS_ASSUME_NONNULL_END

47
local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JLEarphoneAdv.h

@ -0,0 +1,47 @@
//
// JLEarphoneAdv.h
// JL_AdvParse
//
// Created by EzioChan on 2023/12/12.
// Copyright © 2023 www.zh-jieli.com. All rights reserved.
//
#import "JLDevicesAdv.h"
NS_ASSUME_NONNULL_BEGIN
@interface JLEarphoneAdv : JLDevicesAdv
/// 左耳电量
@property(nonatomic, assign) uint8_t batteryLeft;
/// 右耳电量
@property(nonatomic, assign) uint8_t batteryRight;
///左耳是否在充电中
@property(nonatomic, assign) BOOL isChargingLeft;
///右耳是否在充电中
@property(nonatomic, assign) BOOL isChargingRight;
/// 是否已配对
@property(nonatomic, assign) BOOL isParied;
/// 是否主机
@property(nonatomic, assign) BOOL isMaster;
/// 是否允许连接
@property(nonatomic, assign) BOOL enableConnect;
/// 耳机状态
///0x00:不显示弹窗
///0x01:经典蓝牙未连接
///0x02:经典蓝牙已连接
///0x03:设备正在回连
///0x04:设备不可连接 (需要手动进入配对模式)
@property(nonatomic, assign) uint8_t status;
@end
NS_ASSUME_NONNULL_END

25
local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JLOtaAdv.h

@ -0,0 +1,25 @@
//
// JLOtaAdv.h
// JL_AdvParse
//
// Created by EzioChan on 2023/12/12.
// Copyright © 2023 www.zh-jieli.com. All rights reserved.
//
#import <JL_AdvParse/JL_AdvParse.h>
NS_ASSUME_NONNULL_BEGIN
@interface JLOtaAdv : JLDevicesAdv
/// ble address before
@property(nonatomic,strong)NSString *BleAddrBefore;
//MARK: - Version 1
/// battery
@property(nonatomic,assign)uint8_t battery;
@end
NS_ASSUME_NONNULL_END

19
local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JLSoundBoxAdv.h

@ -0,0 +1,19 @@
//
// JLSoundBoxAdv.h
// JL_AdvParse
//
// Created by EzioChan on 2023/12/12.
// Copyright © 2023 www.zh-jieli.com. All rights reserved.
//
#import "JLTwsAdv.h"
NS_ASSUME_NONNULL_BEGIN
@interface JLSoundBoxAdv : JLTwsAdv
@property(nonatomic,assign)uint8_t battery;
@end
NS_ASSUME_NONNULL_END

19
local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JLSoundCardAdv.h

@ -0,0 +1,19 @@
//
// JLSoundCardAdv.h
// JL_AdvParse
//
// Created by EzioChan on 2023/12/12.
// Copyright © 2023 www.zh-jieli.com. All rights reserved.
//
#import "JLTwsAdv.h"
NS_ASSUME_NONNULL_BEGIN
@interface JLSoundCardAdv : JLTwsAdv
@property(nonatomic,assign)uint8_t battery;
@end
NS_ASSUME_NONNULL_END

89
local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JLTwsAdv.h

@ -0,0 +1,89 @@
//
// JLTwsAdv.h
// JL_AdvParse
//
// Created by EzioChan on 2023/12/12.
// Copyright © 2023 www.zh-jieli.com. All rights reserved.
//
#import "JLDevicesAdv.h"
NS_ASSUME_NONNULL_BEGIN
@interface JLTwsAdv : JLDevicesAdv
//MARK: - Version 0
/// 经典蓝牙地址
@property(nonatomic, strong) NSString *edrAddr;
/// 耳机状态
///0x00:不显示弹窗
///0x01:经典蓝牙未连接
///0x02:经典蓝牙已连接
///0x03:设备正在回连
///0x04:设备不可连接 (需要手动进入配对模式)
@property(nonatomic, assign) uint8_t status;
/// 左耳电量
@property(nonatomic, assign) uint8_t batteryLeft;
/// 右耳电量
@property(nonatomic, assign) uint8_t batteryRight;
/// 充电仓电量
@property(nonatomic, assign) uint8_t batteryBox;
///左耳是否在充电中
@property(nonatomic, assign) BOOL isChargingLeft;
///右耳是否在充电中
@property(nonatomic, assign) BOOL isChargingRight;
///充电仓是否在充电中
@property(nonatomic, assign) BOOL isChargingBox;
/// seq
/// 用于区分是否同一次开机。每次开机或者断开连接后 增加1
@property(nonatomic, assign) uint8_t seq;
/// 加密 Hash 校验值
@property(nonatomic, copy) NSData *hashData;
//MARK: - Version 1
/// BLE连接属性(enableConnect)
@property(nonatomic, assign) BOOL bleEnable;
//MARK: - Version 2
/// 连接方式
/// 0x00 BLE 通迅
/// 0x01 SPP 通迅
/// 0x02 GATT Over BR/EDR (V5/V6)
@property(nonatomic, assign) uint8_t connectWay;
/// 是否支持智能充电仓
@property(nonatomic, assign) BOOL isSupportChargBox;
//MARK: - Version 3
/// 左耳电量为挂脖耳机电量!!!,其他耳机电量使用
//MARK: - Version 4/5/6 扩展
/// LeAudio连接状态值
@property(nonatomic, assign) uint8_t leAudioStatus;
/// 是否支持LeAudio
@property(nonatomic, assign) BOOL supportLeAudio;
/// LeAudio是否已连接
@property(nonatomic, assign) BOOL leAudioConnectedStatus;
/// RCSP是否使用LeAudio地址
@property(nonatomic, assign) BOOL rcspUseLeAudioAddress;
/// 是否需要认证
@property(nonatomic, assign) BOOL needAuth;
/// 协议版本号
@property(nonatomic, assign) uint8_t protocolVersion;
/// 设备数量 (V6)
@property(nonatomic, assign) uint8_t deviceQuantity;
@end
NS_ASSUME_NONNULL_END

35
local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JLWatchAdv.h

@ -0,0 +1,35 @@
//
// JLWatchAdv.h
// JL_AdvParse
//
// Created by EzioChan on 2023/12/12.
// Copyright © 2023 www.zh-jieli.com. All rights reserved.
//
#import <JL_AdvParse/JLDevicesAdv.h>
NS_ASSUME_NONNULL_BEGIN
@interface JLWatchAdv : JLDevicesAdv
/// 经典蓝牙地址
@property(nonatomic, strong) NSString *edrAddr;
/// 连接方式
/// 0x00 ble
/// 0x01 spp
@property(nonatomic, assign) int8_t connectWay;
/// 手表状态
/// 0x00:经典蓝牙未连接
/// 0x01:经典蓝牙已连接 0x02:设备正在回连
/// 0x03:设备不可连接 (需要手动进入配对模式)
@property(nonatomic, assign) int8_t connectState;
/// 是否需要先连上 ble
@property(nonatomic, assign) BOOL priorityConnection;
@end
NS_ASSUME_NONNULL_END

27
local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JL_AdvParse.h

@ -0,0 +1,27 @@
//
// JL_AdvParse.h
// JL_AdvParse
//
// Created by EzioChan on 2023/1/31.
// Copyright © 2023 www.zh-jieli.com. All rights reserved.
//
#import <Foundation/Foundation.h>
//! Project version number for JL_AdvParse.
FOUNDATION_EXPORT double JL_AdvParseVersionNumber;
//! Project version string for JL_AdvParse.
FOUNDATION_EXPORT const unsigned char JL_AdvParseVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <JL_AdvParse/PublicHeader.h>
#import <JL_AdvParse/JLAdvParse.h>
#import <JL_AdvParse/JLDevicesAdv.h>
#import <JL_AdvParse/JLTwsAdv.h>
#import <JL_AdvParse/JLSoundBoxAdv.h>
#import <JL_AdvParse/JLSoundCardAdv.h>
#import <JL_AdvParse/JLChargingBoxAdv.h>
#import <JL_AdvParse/JLEarphoneAdv.h>
#import <JL_AdvParse/JLWatchAdv.h>
#import <JL_AdvParse/JLOtaAdv.h>

BIN
local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Info.plist

Binary file not shown.

BIN
local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/JL_AdvParse

Binary file not shown.

6
local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Modules/module.modulemap

@ -0,0 +1,6 @@
framework module JL_AdvParse {
umbrella header "JL_AdvParse.h"
export *
module * { export * }
}

72
local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JLAdvParse.h

@ -0,0 +1,72 @@
//
// JLAdvParse.h
// JL_AdvParse
//
// Created by EzioChan on 2023/1/31.
// Copyright © 2023 www.zh-jieli.com. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <JLLogHelper/JLLogHelper.h>
NS_ASSUME_NONNULL_BEGIN
typedef NS_ENUM(UInt8,JL_AdvType) {
JL_AdvTypeSoundBox = 0, //音箱类型
JL_AdvTypeChargingBin = 1, //充电仓类型
JL_AdvTypeTWS = 2, //TWS耳机类型
JL_AdvTypeHeadset = 3, //普通耳机类型
JL_AdvTypeSoundCard = 4, //声卡类型
JL_AdvTypeWatch = 5, //手表类型
JL_AdvTypeTradition = 6, //传统设备类型
};
typedef NS_ENUM(NSInteger,JL_DeviceType) {
JL_DeviceTypeSoundBox = 0, //AI音箱类型
JL_DeviceTypeChargingBin = 1, //充电仓类型
JL_DeviceTypeTWS = 2, //TWS耳机类型
JL_DeviceTypeHeadset = 3, //普通耳机类型
JL_DeviceTypeSoundCard = 4, //声卡类型
JL_DeviceTypeWatch = 5, //手表类型
JL_DeviceTypeDongle = 6, //Dongle
JL_DeviceTypeTradition = -1, //传统设备类型
};
/// 广播包解析器
@interface JLAdvParse : NSObject
/// 打印当前SDK的版本
+(void)sdkVersion;
/// 解析设备广播包内容
/// @param key 过滤码(只针对传统设备生效,默认填空即可)
/// @param advertData 蓝牙广播字典
+(NSDictionary*)bluetoothAdvParse:(NSData *_Nullable)key AdvData:(NSDictionary*_Nonnull)advertData;
/// 解析蓝牙广播包
/// @param advertData 蓝牙广播报字典
/// @param rssi 蓝牙信号强度
+(NSDictionary *)bluetoothAdvData:(NSDictionary *)advertData RSSI:(NSNumber *)rssi;
#pragma mark - 回连广播包信息
/**
* 获取广播包kCBAdvDataManufacturerData里面 'JLOTA' 标识的蓝牙地址
* @param kCBAdvDataManufacturerData 广播包
*/
+ (NSString * _Nullable)otaBleMacAddressFromCBAdvDataManufacturerData:(NSData *)kCBAdvDataManufacturerData;
/**
* 判断当前蓝牙地址是否等于广播包kCBAdvDataManufacturerData里面的蓝牙地址
* @param otaBleMacAddress ota升级中设备的蓝牙地址
* @param kCBAdvDataManufacturerData 广播包
*/
+ (Boolean)otaBleMacAddress:(NSString *)otaBleMacAddress isEqualToCBAdvDataManufacturerData:(NSData *)kCBAdvDataManufacturerData;
@end
NS_ASSUME_NONNULL_END

64
local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JLChargingBoxAdv.h

@ -0,0 +1,64 @@
//
// JLChargingBoxAdv.h
// JL_AdvParse
//
// Created by EzioChan on 2023/12/12.
// Copyright © 2023 www.zh-jieli.com. All rights reserved.
//
#import "JLDevicesAdv.h"
NS_ASSUME_NONNULL_BEGIN
@interface JLChargingBoxAdv : JLDevicesAdv
/// 经典蓝牙地址
@property(nonatomic, strong) NSString *edrAddr;
/// 是否已配对
@property(nonatomic, assign) BOOL isParied;
/// 是否已开盖
@property(nonatomic, assign) BOOL isOpen;
/// 耳机状态
///0x00:不显示弹窗
///0x01:经典蓝牙未连接
///0x02:经典蓝牙已连接
///0x03:设备正在回连
///0x04:设备不可连接 (需要手动进入配对模式)
@property(nonatomic, assign) uint8_t status;
/// 左耳电量
@property(nonatomic, assign) uint8_t batteryLeft;
/// 右耳电量
@property(nonatomic, assign) uint8_t batteryRight;
/// 充电仓电量
@property(nonatomic, assign) uint8_t batteryBox;
///左耳是否在充电中
@property(nonatomic, assign) BOOL isChargingLeft;
///右耳是否在充电中
@property(nonatomic, assign) BOOL isChargingRight;
///充电仓是否在充电中
@property(nonatomic, assign) BOOL isChargingBox;
/// seq
/// 用于区分是否同一次开机。每次开机或者断开连接后 增加1
@property(nonatomic, assign) uint8_t seq;
///模式
/// 0x00:充电模式
/// 0x01:发射模式
@property(nonatomic, assign) uint8_t mode;
/// 加密 Hash 校验值
@property(nonatomic, copy) NSData *hashData;
@end
NS_ASSUME_NONNULL_END

54
local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JLDevicesAdv.h

@ -0,0 +1,54 @@
//
// JLDevicesAdv.h
// JL_AdvParse
//
// Created by EzioChan on 2023/12/12.
// Copyright © 2023 www.zh-jieli.com. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "JLAdvParse.h"
NS_ASSUME_NONNULL_BEGIN
@interface JLDevicesAdv : NSObject
/// 客户唯一标识
@property(nonatomic,assign)uint16_t uid;
/// 产品唯一标识
@property(nonatomic,assign)uint16_t pid;
/// 设备类型
///JL_DeviceTypeSoundBox = 0, //AI音箱类型
///JL_DeviceTypeChargingBin = 1, //充电仓类型
///JL_DeviceTypeTWS = 2, //TWS耳机类型
///JL_DeviceTypeHeadset = 3, //普通耳机类型
///JL_DeviceTypeSoundCard = 4, //声卡类型
///JL_DeviceTypeWatch = 5, //手表类型
///JL_DeviceTypeTradition = -1, //传统设备类型
@property(nonatomic,assign)JL_DeviceType type;
/// 协议版本
@property(nonatomic,assign)uint8_t version;
/// 可变数据段
@property(nonatomic,copy)NSData *variableData;
- (instancetype)initWithData:(NSData *)data;
/// 转成model类型
/// @param basicData 蓝牙广播数据
+(JLDevicesAdv *__nullable)advertDataToModel:(NSData *)basicData;
/// 转成model类型
/// @param basicHexStr 蓝牙广播数据
+(JLDevicesAdv *__nullable)advertDataHexStrToModel:(NSString *)basicHexStr;
@end
NS_ASSUME_NONNULL_END

47
local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JLEarphoneAdv.h

@ -0,0 +1,47 @@
//
// JLEarphoneAdv.h
// JL_AdvParse
//
// Created by EzioChan on 2023/12/12.
// Copyright © 2023 www.zh-jieli.com. All rights reserved.
//
#import "JLDevicesAdv.h"
NS_ASSUME_NONNULL_BEGIN
@interface JLEarphoneAdv : JLDevicesAdv
/// 左耳电量
@property(nonatomic, assign) uint8_t batteryLeft;
/// 右耳电量
@property(nonatomic, assign) uint8_t batteryRight;
///左耳是否在充电中
@property(nonatomic, assign) BOOL isChargingLeft;
///右耳是否在充电中
@property(nonatomic, assign) BOOL isChargingRight;
/// 是否已配对
@property(nonatomic, assign) BOOL isParied;
/// 是否主机
@property(nonatomic, assign) BOOL isMaster;
/// 是否允许连接
@property(nonatomic, assign) BOOL enableConnect;
/// 耳机状态
///0x00:不显示弹窗
///0x01:经典蓝牙未连接
///0x02:经典蓝牙已连接
///0x03:设备正在回连
///0x04:设备不可连接 (需要手动进入配对模式)
@property(nonatomic, assign) uint8_t status;
@end
NS_ASSUME_NONNULL_END

25
local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JLOtaAdv.h

@ -0,0 +1,25 @@
//
// JLOtaAdv.h
// JL_AdvParse
//
// Created by EzioChan on 2023/12/12.
// Copyright © 2023 www.zh-jieli.com. All rights reserved.
//
#import <JL_AdvParse/JL_AdvParse.h>
NS_ASSUME_NONNULL_BEGIN
@interface JLOtaAdv : JLDevicesAdv
/// ble address before
@property(nonatomic,strong)NSString *BleAddrBefore;
//MARK: - Version 1
/// battery
@property(nonatomic,assign)uint8_t battery;
@end
NS_ASSUME_NONNULL_END

19
local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JLSoundBoxAdv.h

@ -0,0 +1,19 @@
//
// JLSoundBoxAdv.h
// JL_AdvParse
//
// Created by EzioChan on 2023/12/12.
// Copyright © 2023 www.zh-jieli.com. All rights reserved.
//
#import "JLTwsAdv.h"
NS_ASSUME_NONNULL_BEGIN
@interface JLSoundBoxAdv : JLTwsAdv
@property(nonatomic,assign)uint8_t battery;
@end
NS_ASSUME_NONNULL_END

19
local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JLSoundCardAdv.h

@ -0,0 +1,19 @@
//
// JLSoundCardAdv.h
// JL_AdvParse
//
// Created by EzioChan on 2023/12/12.
// Copyright © 2023 www.zh-jieli.com. All rights reserved.
//
#import "JLTwsAdv.h"
NS_ASSUME_NONNULL_BEGIN
@interface JLSoundCardAdv : JLTwsAdv
@property(nonatomic,assign)uint8_t battery;
@end
NS_ASSUME_NONNULL_END

89
local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JLTwsAdv.h

@ -0,0 +1,89 @@
//
// JLTwsAdv.h
// JL_AdvParse
//
// Created by EzioChan on 2023/12/12.
// Copyright © 2023 www.zh-jieli.com. All rights reserved.
//
#import "JLDevicesAdv.h"
NS_ASSUME_NONNULL_BEGIN
@interface JLTwsAdv : JLDevicesAdv
//MARK: - Version 0
/// 经典蓝牙地址
@property(nonatomic, strong) NSString *edrAddr;
/// 耳机状态
///0x00:不显示弹窗
///0x01:经典蓝牙未连接
///0x02:经典蓝牙已连接
///0x03:设备正在回连
///0x04:设备不可连接 (需要手动进入配对模式)
@property(nonatomic, assign) uint8_t status;
/// 左耳电量
@property(nonatomic, assign) uint8_t batteryLeft;
/// 右耳电量
@property(nonatomic, assign) uint8_t batteryRight;
/// 充电仓电量
@property(nonatomic, assign) uint8_t batteryBox;
///左耳是否在充电中
@property(nonatomic, assign) BOOL isChargingLeft;
///右耳是否在充电中
@property(nonatomic, assign) BOOL isChargingRight;
///充电仓是否在充电中
@property(nonatomic, assign) BOOL isChargingBox;
/// seq
/// 用于区分是否同一次开机。每次开机或者断开连接后 增加1
@property(nonatomic, assign) uint8_t seq;
/// 加密 Hash 校验值
@property(nonatomic, copy) NSData *hashData;
//MARK: - Version 1
/// BLE连接属性(enableConnect)
@property(nonatomic, assign) BOOL bleEnable;
//MARK: - Version 2
/// 连接方式
/// 0x00 BLE 通迅
/// 0x01 SPP 通迅
/// 0x02 GATT Over BR/EDR (V5/V6)
@property(nonatomic, assign) uint8_t connectWay;
/// 是否支持智能充电仓
@property(nonatomic, assign) BOOL isSupportChargBox;
//MARK: - Version 3
/// 左耳电量为挂脖耳机电量!!!,其他耳机电量使用
//MARK: - Version 4/5/6 扩展
/// LeAudio连接状态值
@property(nonatomic, assign) uint8_t leAudioStatus;
/// 是否支持LeAudio
@property(nonatomic, assign) BOOL supportLeAudio;
/// LeAudio是否已连接
@property(nonatomic, assign) BOOL leAudioConnectedStatus;
/// RCSP是否使用LeAudio地址
@property(nonatomic, assign) BOOL rcspUseLeAudioAddress;
/// 是否需要认证
@property(nonatomic, assign) BOOL needAuth;
/// 协议版本号
@property(nonatomic, assign) uint8_t protocolVersion;
/// 设备数量 (V6)
@property(nonatomic, assign) uint8_t deviceQuantity;
@end
NS_ASSUME_NONNULL_END

35
local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JLWatchAdv.h

@ -0,0 +1,35 @@
//
// JLWatchAdv.h
// JL_AdvParse
//
// Created by EzioChan on 2023/12/12.
// Copyright © 2023 www.zh-jieli.com. All rights reserved.
//
#import <JL_AdvParse/JLDevicesAdv.h>
NS_ASSUME_NONNULL_BEGIN
@interface JLWatchAdv : JLDevicesAdv
/// 经典蓝牙地址
@property(nonatomic, strong) NSString *edrAddr;
/// 连接方式
/// 0x00 ble
/// 0x01 spp
@property(nonatomic, assign) int8_t connectWay;
/// 手表状态
/// 0x00:经典蓝牙未连接
/// 0x01:经典蓝牙已连接 0x02:设备正在回连
/// 0x03:设备不可连接 (需要手动进入配对模式)
@property(nonatomic, assign) int8_t connectState;
/// 是否需要先连上 ble
@property(nonatomic, assign) BOOL priorityConnection;
@end
NS_ASSUME_NONNULL_END

27
local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JL_AdvParse.h

@ -0,0 +1,27 @@
//
// JL_AdvParse.h
// JL_AdvParse
//
// Created by EzioChan on 2023/1/31.
// Copyright © 2023 www.zh-jieli.com. All rights reserved.
//
#import <Foundation/Foundation.h>
//! Project version number for JL_AdvParse.
FOUNDATION_EXPORT double JL_AdvParseVersionNumber;
//! Project version string for JL_AdvParse.
FOUNDATION_EXPORT const unsigned char JL_AdvParseVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <JL_AdvParse/PublicHeader.h>
#import <JL_AdvParse/JLAdvParse.h>
#import <JL_AdvParse/JLDevicesAdv.h>
#import <JL_AdvParse/JLTwsAdv.h>
#import <JL_AdvParse/JLSoundBoxAdv.h>
#import <JL_AdvParse/JLSoundCardAdv.h>
#import <JL_AdvParse/JLChargingBoxAdv.h>
#import <JL_AdvParse/JLEarphoneAdv.h>
#import <JL_AdvParse/JLWatchAdv.h>
#import <JL_AdvParse/JLOtaAdv.h>

BIN
local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Info.plist

Binary file not shown.

BIN
local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/JL_AdvParse

Binary file not shown.

6
local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Modules/module.modulemap

@ -0,0 +1,6 @@
framework module JL_AdvParse {
umbrella header "JL_AdvParse.h"
export *
module * { export * }
}

267
local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/_CodeSignature/CodeResources

@ -0,0 +1,267 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>files</key>
<dict>
<key>Headers/JLAdvParse.h</key>
<data>
64SI1XBWnV1VmXIYu8XpmwMpE04=
</data>
<key>Headers/JLChargingBoxAdv.h</key>
<data>
dxEumtBFtKzehtXyVAacIJk/UU4=
</data>
<key>Headers/JLDevicesAdv.h</key>
<data>
WG6Ivw9lqj20J5OXda4lXMvAsig=
</data>
<key>Headers/JLEarphoneAdv.h</key>
<data>
fJODfMyuNuG59rHtw1StpNjde1A=
</data>
<key>Headers/JLOtaAdv.h</key>
<data>
4Mj6y77mEbeHdo+4OgFL9yf+E0c=
</data>
<key>Headers/JLSoundBoxAdv.h</key>
<data>
9psoYa5IuZ6p/X9FRRnLe5THJMQ=
</data>
<key>Headers/JLSoundCardAdv.h</key>
<data>
Q5T5xqjNDkTS+Niqp/KpoD9vipY=
</data>
<key>Headers/JLTwsAdv.h</key>
<data>
whLObetTxteRXS580FiZ1/A3Yzo=
</data>
<key>Headers/JLWatchAdv.h</key>
<data>
gK+FyDcSe6OVJK11wqqm1ppRE9k=
</data>
<key>Headers/JL_AdvParse.h</key>
<data>
gtcFkie1/FuAHO4WI/GUyN9chKY=
</data>
<key>Info.plist</key>
<data>
y32GLYYZ4FDhJGOjUkYUZfxaRn8=
</data>
<key>Modules/module.modulemap</key>
<data>
hBvb1e7FRkpwYoECUsVQBBscN38=
</data>
</dict>
<key>files2</key>
<dict>
<key>Headers/JLAdvParse.h</key>
<dict>
<key>hash</key>
<data>
64SI1XBWnV1VmXIYu8XpmwMpE04=
</data>
<key>hash2</key>
<data>
ZG6RQ7l2Ko9IXNo517Aimfq7d03KANKIIPV09hZSFrg=
</data>
</dict>
<key>Headers/JLChargingBoxAdv.h</key>
<dict>
<key>hash</key>
<data>
dxEumtBFtKzehtXyVAacIJk/UU4=
</data>
<key>hash2</key>
<data>
Bci4NCRbpGrT/YgMlRkA2DjX/lY/o8VmxkWPNtV+DjA=
</data>
</dict>
<key>Headers/JLDevicesAdv.h</key>
<dict>
<key>hash</key>
<data>
WG6Ivw9lqj20J5OXda4lXMvAsig=
</data>
<key>hash2</key>
<data>
Mxf6qWhX6ctmSC0RVl7gdK4koCGeaUr8omEI9+9PMvc=
</data>
</dict>
<key>Headers/JLEarphoneAdv.h</key>
<dict>
<key>hash</key>
<data>
fJODfMyuNuG59rHtw1StpNjde1A=
</data>
<key>hash2</key>
<data>
WThhDcnj1tcLW3Lrp2VUET7rXC/8iv9Y1dtAdPg0yWs=
</data>
</dict>
<key>Headers/JLOtaAdv.h</key>
<dict>
<key>hash</key>
<data>
4Mj6y77mEbeHdo+4OgFL9yf+E0c=
</data>
<key>hash2</key>
<data>
HuR8+O4ONYywZcporXuxlzO1xXOtZZqm/P9+s8yj+OI=
</data>
</dict>
<key>Headers/JLSoundBoxAdv.h</key>
<dict>
<key>hash</key>
<data>
9psoYa5IuZ6p/X9FRRnLe5THJMQ=
</data>
<key>hash2</key>
<data>
Iqjsp9NyRvmdlXu0gN7zltuwg75M+Kc9qFaTSHStolA=
</data>
</dict>
<key>Headers/JLSoundCardAdv.h</key>
<dict>
<key>hash</key>
<data>
Q5T5xqjNDkTS+Niqp/KpoD9vipY=
</data>
<key>hash2</key>
<data>
WTBLq2+eyH5+TrY08Gh3/yReEWRnKg9UOCJmz56bnkE=
</data>
</dict>
<key>Headers/JLTwsAdv.h</key>
<dict>
<key>hash</key>
<data>
whLObetTxteRXS580FiZ1/A3Yzo=
</data>
<key>hash2</key>
<data>
w6Ia/stHXZvCfmmPgTEpBj7A6haG6O+E0MeXH/fNKmA=
</data>
</dict>
<key>Headers/JLWatchAdv.h</key>
<dict>
<key>hash</key>
<data>
gK+FyDcSe6OVJK11wqqm1ppRE9k=
</data>
<key>hash2</key>
<data>
7iXBmticKJ52uKE+6RrHJt5ES0gq2Xan5WIG/w0sCyk=
</data>
</dict>
<key>Headers/JL_AdvParse.h</key>
<dict>
<key>hash</key>
<data>
gtcFkie1/FuAHO4WI/GUyN9chKY=
</data>
<key>hash2</key>
<data>
t61emyM8slC+fTJM6XnBxjTDrpY7xvhUK5gCXfQf/3E=
</data>
</dict>
<key>Modules/module.modulemap</key>
<dict>
<key>hash</key>
<data>
hBvb1e7FRkpwYoECUsVQBBscN38=
</data>
<key>hash2</key>
<data>
F65y3OGliGsHZpxzdTdQxUwgmJdHiihk1gvX6sJzhxA=
</data>
</dict>
</dict>
<key>rules</key>
<dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^version.plist$</key>
<true/>
</dict>
<key>rules2</key>
<dict>
<key>.*\.dSYM($|/)</key>
<dict>
<key>weight</key>
<real>11</real>
</dict>
<key>^(.*/)?\.DS_Store$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>2000</real>
</dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^Info\.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^PkgInfo$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^embedded\.provisionprofile$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
<key>^version\.plist$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
</dict>
</dict>
</plist>

44
local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/Info.plist

@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>AvailableLibraries</key>
<array>
<dict>
<key>BinaryPath</key>
<string>JL_HashPair.framework/JL_HashPair</string>
<key>LibraryIdentifier</key>
<string>ios-arm64</string>
<key>LibraryPath</key>
<string>JL_HashPair.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
</dict>
<dict>
<key>BinaryPath</key>
<string>JL_HashPair.framework/JL_HashPair</string>
<key>LibraryIdentifier</key>
<string>ios-arm64_x86_64-simulator</string>
<key>LibraryPath</key>
<string>JL_HashPair.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
<string>x86_64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
<key>SupportedPlatformVariant</key>
<string>simulator</string>
</dict>
</array>
<key>CFBundlePackageType</key>
<string>XFWK</string>
<key>XCFrameworkFormatVersion</key>
<string>1.0</string>
</dict>
</plist>

25
local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64/JL_HashPair.framework/Headers/BtHash.h

@ -0,0 +1,25 @@
//
// BtHash.h
// BtHash
//
// Created by EzioChan on 2022/6/29.
//
#import <Foundation/Foundation.h>
@interface BtHash : NSObject
/*
@param [in] pt[*1] The plaintext
@param ptlen The length of the plaintext(octets) range: 1~32
@param [in] key[*1] The key for encrypt
@param keylen[*1] The length of the key(octets) range: 1~32
@param [out] mac[*1] output : The Message Authentication Code 16 bytes.
@return error if < 0, 0 is normal.
*/
+(int)decryptWithPlaintext:(unsigned char *)pt
andPlaintextLen:(int)ptlen
andKey: (unsigned char *)key
andKeyLen: (int)keylen
andMac:(unsigned char *)mac;
@end

59
local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64/JL_HashPair.framework/Headers/JLHashHandler.h

@ -0,0 +1,59 @@
//
// JLHashHandler.h
// JL_BLEKit
//
// Created by EzioChan on 2023/1/30.
// Copyright © 2023 www.zh-jieli.com. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <JLLogHelper/JLLogHelper.h>
NS_ASSUME_NONNULL_BEGIN
typedef void(^JLHashBlock)(BOOL ret);
@protocol JLHashHandlerDelegate <NSObject>
/// 需要发送到设备校验认证的数据
/// - Parameter data: 数据
-(void)hashOnPairOutputData:(NSData*)data;
@end
/// 设备认证
@interface JLHashHandler : NSObject
@property(nonatomic,weak)id<JLHashHandlerDelegate> delegate;
/// APP端发起设备认证
/// - Parameters:
/// - pKey: 加密Key(默认为空)
/// - bk: 配对认证回调结果
-(void)bluetoothPairingKey:(NSData *__nullable)pKey Result:(JLHashBlock)bk;
/// 重置设备认证过程
-(void)hashResetPair;
/// 填入设备回复数据
/// - Parameter rData: 数据
-(void)inputPairData:(NSData*)rData;
/// 停止设备认证过程
/// stop device pairing
-(void)stopAuthPair;
/// 打印当前SDK的版本
+(void)sdkVersion;
@end
NS_ASSUME_NONNULL_END

21
local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64/JL_HashPair.framework/Headers/JL_HashPair.h

@ -0,0 +1,21 @@
//
// JL_HashPair.h
// JL_HashPair
//
// Created by EzioChan on 2023/1/30.
// Copyright © 2023 www.zh-jieli.com. All rights reserved.
//
#import <Foundation/Foundation.h>
//! Project version number for JL_HashPair.
FOUNDATION_EXPORT double JL_HashPairVersionNumber;
//! Project version string for JL_HashPair.
FOUNDATION_EXPORT const unsigned char JL_HashPairVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <JL_HashPair/PublicHeader.h>
#import <JL_HashPair/BtHash.h>
#import <JL_HashPair/JLHashHandler.h>
#import <JL_HashPair/JL_ble_pair.h>

20
local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64/JL_HashPair.framework/Headers/JL_ble_pair.h

@ -0,0 +1,20 @@
//
// JL_ble_pair.h
// JL_BLEKit
//
// Created by zhihui liang on 2018/11/10.
// Copyright © 2018 www.zh-jieli.com. All rights reserved.
//
#ifndef JL_ble_pair_h
#define JL_ble_pair_h
#include <stdio.h>
#include <stdint.h>
void function_jieli(uint8_t *address,uint8_t *RAND,uint8_t *K,uint8_t *result);
#pragma mark CRC校验
unsigned short JL_CRC16(unsigned char *ptr, int len, uint16_t lastCrc);
#endif /* JL_ble_pair_h */

BIN
local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64/JL_HashPair.framework/Info.plist

Binary file not shown.

BIN
local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64/JL_HashPair.framework/JL_HashPair

Binary file not shown.

6
local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64/JL_HashPair.framework/Modules/module.modulemap

@ -0,0 +1,6 @@
framework module JL_HashPair {
umbrella header "JL_HashPair.h"
export *
module * { export * }
}

25
local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64_x86_64-simulator/JL_HashPair.framework/Headers/BtHash.h

@ -0,0 +1,25 @@
//
// BtHash.h
// BtHash
//
// Created by EzioChan on 2022/6/29.
//
#import <Foundation/Foundation.h>
@interface BtHash : NSObject
/*
@param [in] pt[*1] The plaintext
@param ptlen The length of the plaintext(octets) range: 1~32
@param [in] key[*1] The key for encrypt
@param keylen[*1] The length of the key(octets) range: 1~32
@param [out] mac[*1] output : The Message Authentication Code 16 bytes.
@return error if < 0, 0 is normal.
*/
+(int)decryptWithPlaintext:(unsigned char *)pt
andPlaintextLen:(int)ptlen
andKey: (unsigned char *)key
andKeyLen: (int)keylen
andMac:(unsigned char *)mac;
@end

59
local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64_x86_64-simulator/JL_HashPair.framework/Headers/JLHashHandler.h

@ -0,0 +1,59 @@
//
// JLHashHandler.h
// JL_BLEKit
//
// Created by EzioChan on 2023/1/30.
// Copyright © 2023 www.zh-jieli.com. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <JLLogHelper/JLLogHelper.h>
NS_ASSUME_NONNULL_BEGIN
typedef void(^JLHashBlock)(BOOL ret);
@protocol JLHashHandlerDelegate <NSObject>
/// 需要发送到设备校验认证的数据
/// - Parameter data: 数据
-(void)hashOnPairOutputData:(NSData*)data;
@end
/// 设备认证
@interface JLHashHandler : NSObject
@property(nonatomic,weak)id<JLHashHandlerDelegate> delegate;
/// APP端发起设备认证
/// - Parameters:
/// - pKey: 加密Key(默认为空)
/// - bk: 配对认证回调结果
-(void)bluetoothPairingKey:(NSData *__nullable)pKey Result:(JLHashBlock)bk;
/// 重置设备认证过程
-(void)hashResetPair;
/// 填入设备回复数据
/// - Parameter rData: 数据
-(void)inputPairData:(NSData*)rData;
/// 停止设备认证过程
/// stop device pairing
-(void)stopAuthPair;
/// 打印当前SDK的版本
+(void)sdkVersion;
@end
NS_ASSUME_NONNULL_END

21
local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64_x86_64-simulator/JL_HashPair.framework/Headers/JL_HashPair.h

@ -0,0 +1,21 @@
//
// JL_HashPair.h
// JL_HashPair
//
// Created by EzioChan on 2023/1/30.
// Copyright © 2023 www.zh-jieli.com. All rights reserved.
//
#import <Foundation/Foundation.h>
//! Project version number for JL_HashPair.
FOUNDATION_EXPORT double JL_HashPairVersionNumber;
//! Project version string for JL_HashPair.
FOUNDATION_EXPORT const unsigned char JL_HashPairVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <JL_HashPair/PublicHeader.h>
#import <JL_HashPair/BtHash.h>
#import <JL_HashPair/JLHashHandler.h>
#import <JL_HashPair/JL_ble_pair.h>

20
local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64_x86_64-simulator/JL_HashPair.framework/Headers/JL_ble_pair.h

@ -0,0 +1,20 @@
//
// JL_ble_pair.h
// JL_BLEKit
//
// Created by zhihui liang on 2018/11/10.
// Copyright © 2018 www.zh-jieli.com. All rights reserved.
//
#ifndef JL_ble_pair_h
#define JL_ble_pair_h
#include <stdio.h>
#include <stdint.h>
void function_jieli(uint8_t *address,uint8_t *RAND,uint8_t *K,uint8_t *result);
#pragma mark CRC校验
unsigned short JL_CRC16(unsigned char *ptr, int len, uint16_t lastCrc);
#endif /* JL_ble_pair_h */

BIN
local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64_x86_64-simulator/JL_HashPair.framework/Info.plist

Binary file not shown.

BIN
local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64_x86_64-simulator/JL_HashPair.framework/JL_HashPair

Binary file not shown.

6
local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64_x86_64-simulator/JL_HashPair.framework/Modules/module.modulemap

@ -0,0 +1,6 @@
framework module JL_HashPair {
umbrella header "JL_HashPair.h"
export *
module * { export * }
}

177
local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64_x86_64-simulator/JL_HashPair.framework/_CodeSignature/CodeResources

@ -0,0 +1,177 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>files</key>
<dict>
<key>Headers/BtHash.h</key>
<data>
EdZDmmVVm0KY3D72UHE3hQF42e4=
</data>
<key>Headers/JLHashHandler.h</key>
<data>
ArAEdyp9k5H5o4gFjW9zdx+0ISY=
</data>
<key>Headers/JL_HashPair.h</key>
<data>
Y9dInJ7eyVXJ8WOASyZGNDDIj9s=
</data>
<key>Headers/JL_ble_pair.h</key>
<data>
YP6GQrFs1nWR8BkMoj1fQdKHKKM=
</data>
<key>Info.plist</key>
<data>
pLA2PfPyxsguwM09KFXPq/Cy2ko=
</data>
<key>Modules/module.modulemap</key>
<data>
6wQFoRjNQqLop5Z3m/K5slHiG2k=
</data>
</dict>
<key>files2</key>
<dict>
<key>Headers/BtHash.h</key>
<dict>
<key>hash</key>
<data>
EdZDmmVVm0KY3D72UHE3hQF42e4=
</data>
<key>hash2</key>
<data>
EfOAmi/ycUONPu8OgPUuPkc9caXqUhvVXE27JNmmnPk=
</data>
</dict>
<key>Headers/JLHashHandler.h</key>
<dict>
<key>hash</key>
<data>
ArAEdyp9k5H5o4gFjW9zdx+0ISY=
</data>
<key>hash2</key>
<data>
7iuW7k7IBL4tf/bE1O3SudVyeFxG8YHoo7DqZGFdSBI=
</data>
</dict>
<key>Headers/JL_HashPair.h</key>
<dict>
<key>hash</key>
<data>
Y9dInJ7eyVXJ8WOASyZGNDDIj9s=
</data>
<key>hash2</key>
<data>
5Ow8T39Md9cD7Jb7iMaoihnIJhv8GHHIjGAsgZG//Og=
</data>
</dict>
<key>Headers/JL_ble_pair.h</key>
<dict>
<key>hash</key>
<data>
YP6GQrFs1nWR8BkMoj1fQdKHKKM=
</data>
<key>hash2</key>
<data>
ggTJvYOE/W4Tmghs665eiywakMiTsvgl7PeEayUkKqQ=
</data>
</dict>
<key>Modules/module.modulemap</key>
<dict>
<key>hash</key>
<data>
6wQFoRjNQqLop5Z3m/K5slHiG2k=
</data>
<key>hash2</key>
<data>
N+WiNcfG40LwaFvJZeLG5iNA48ZbrW0Oph/B9U+7i9U=
</data>
</dict>
</dict>
<key>rules</key>
<dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^version.plist$</key>
<true/>
</dict>
<key>rules2</key>
<dict>
<key>.*\.dSYM($|/)</key>
<dict>
<key>weight</key>
<real>11</real>
</dict>
<key>^(.*/)?\.DS_Store$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>2000</real>
</dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^Info\.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^PkgInfo$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^embedded\.provisionprofile$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
<key>^version\.plist$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
</dict>
</dict>
</plist>

44
local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/Info.plist

@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>AvailableLibraries</key>
<array>
<dict>
<key>BinaryPath</key>
<string>JL_OTALib.framework/JL_OTALib</string>
<key>LibraryIdentifier</key>
<string>ios-arm64</string>
<key>LibraryPath</key>
<string>JL_OTALib.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
</dict>
<dict>
<key>BinaryPath</key>
<string>JL_OTALib.framework/JL_OTALib</string>
<key>LibraryIdentifier</key>
<string>ios-arm64_x86_64-simulator</string>
<key>LibraryPath</key>
<string>JL_OTALib.framework</string>
<key>SupportedArchitectures</key>
<array>
<string>arm64</string>
<string>x86_64</string>
</array>
<key>SupportedPlatform</key>
<string>ios</string>
<key>SupportedPlatformVariant</key>
<string>simulator</string>
</dict>
</array>
<key>CFBundlePackageType</key>
<string>XFWK</string>
<key>XCFrameworkFormatVersion</key>
<string>1.0</string>
</dict>
</plist>

52
local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64/JL_OTALib.framework/Headers/JLOTAFile.h

@ -0,0 +1,52 @@
//
// JLOTAFile.h
// JL_OTALib
//
// Created by EzioChan on 2024/7/26.
// Copyright © 2024 www.zh-jieli.com. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
typedef NS_ENUM(UInt8, JL_OTAUrlResult) {
JL_OTAUrlResultSuccess = 0x00, //OTA文件获取成功
JL_OTAUrlResultFail = 0x01, //OTA文件获取失败
JL_OTAUrlResultDownloadFail = 0x02, //OTA文件下载失败
};
typedef void(^JL_OTA_URL)(JL_OTAUrlResult result,
NSString* __nullable version,
NSString* __nullable url,
NSString* __nullable explain);
@interface JLOTAFile : NSObject
#pragma mark -文件下载
/**
文件下载
@param key 授权key
@param code 授权code
@param result 回复
*/
-(void)cmdGetOtaFileKey:(NSString*)key
Code:(NSString*)code
Result:(JL_OTA_URL __nullable)result;
/**
OTA升级文件下载【MD5】
@param key 授权key
@param code 授权code
@param hash MD5值
@param result 回复
*/
-(void)cmdGetOtaFileKey:(NSString*)key
Code:(NSString*)code
hash:(NSString*)hash
Result:(JL_OTA_URL __nullable)result;
@end
NS_ASSUME_NONNULL_END

62
local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64/JL_OTALib.framework/Headers/JLOtaCustom.h

@ -0,0 +1,62 @@
//
// JLOtaCustom.h
// JL_OTALib
//
// Created by EzioChan on 2025/4/17.
// Copyright © 2025 www.zh-jieli.com. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@class JL_OTAManager;
/// 自定义命令对象
@interface JLOtaCustomData : NSObject
/// 是否需要回复
@property (nonatomic, assign) BOOL needResponse;
/// 数据
@property (nonatomic, strong) NSData *data;
/// 回复数据 SN
@property (nonatomic, assign) uint8_t sn;
@end
/// 自定义命令回调
@protocol JLOtaCustomDelegate <NSObject>
/// 自定义命令回调
/// - Parameter data: 自定义命令对象
-(void)otaCustomReceiveData:(JLOtaCustomData *)data;
@end
/// 自定义命令
@interface JLOtaCustom : NSObject
/// 自定义命令
/// - Parameters:
/// - delegate: 代理回调
/// - manager: 升级对象
-(instancetype)initWithDelegate:(id<JLOtaCustomDelegate>)delegate OtaManager:(JL_OTAManager *)manager;
/// 发送自定义命令
/// - Parameters:
/// - data: 下发的数据
/// - need: 是否需要回复内容
/// - result: 命令回复结果
- (void)cmdSendCommandData:(NSData *)data needResponse:(BOOL)need Result:(void(^)(NSData * __nullable response, NSError * __nullable error)) result;
/// 回复自定义命令
/// - Parameters:
/// - data: 回复的数据
/// - sn: 回复的SN
- (void)cmdResponseData:(NSData *)data sn:(uint8_t)sn;
@end
NS_ASSUME_NONNULL_END

43
local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64/JL_OTALib.framework/Headers/JLOtaReConnectOption.h

@ -0,0 +1,43 @@
//
// JLOtaReConnectOption.h
// JL_OTALib
//
// Created by EzioChan on 2025/3/27.
// Copyright © 2025 www.zh-jieli.com. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface JLOtaReConnectOption : NSObject
/// 是否需要使用设备认证
@property (assign, nonatomic) BOOL deviceAuthorize;
/// 握手(配对)秘钥
@property(strong,nonatomic)NSData *__nullable authKey;
/// 设备服务UUID
/// 默认是 AE00
@property (strong, nonatomic) NSString *serviceUUID;
///写特征 UUID
/// 默认是 AE01
@property (strong, nonatomic) NSString *writeUUID;
/// 读特征 UUID
/// 默认是 AE02
@property (strong, nonatomic) NSString *readUUID;
/// 是否需要响应的回应方式
/// 默认是NO
@property (assign, nonatomic) BOOL isWriteWithResponse;
+ (JLOtaReConnectOption *)defaultOption;
@end
NS_ASSUME_NONNULL_END

22
local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64/JL_OTALib.framework/Headers/JL_OTALib.h

@ -0,0 +1,22 @@
//
// JL_OTALib.h
// JL_OTALib
//
// Created by EzioChan on 2023/1/29.
// Copyright © 2023 www.zh-jieli.com. All rights reserved.
//
#import <Foundation/Foundation.h>
//! Project version number for JL_OTALib.
FOUNDATION_EXPORT double JL_OTALibVersionNumber;
//! Project version string for JL_OTALib.
FOUNDATION_EXPORT const unsigned char JL_OTALibVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <JL_OTALib/PublicHeader.h>
#import <JL_OTALib/JL_OTAManager.h>
#import <JL_OTALib/jl_ufw.h>
#import <JL_OTALib/JLOTAFile.h>
#import <JL_OTALib/JLOtaReConnectOption.h>
#import <JL_OTALib/JLOtaCustom.h>

302
local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64/JL_OTALib.framework/Headers/JL_OTAManager.h

@ -0,0 +1,302 @@
//
// JL_OTAManager.h
// JL_BLEKit
//
// Created by 杰理科技 on 2021/11/16.
// Copyright © 2021 www.zh-jieli.com. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <JLLogHelper/JLLogHelper.h>
NS_ASSUME_NONNULL_BEGIN
@class JLOtaReConnectOption;
typedef NS_ENUM(UInt16, JL_OTAResult) {
/// OTA升级成功
JL_OTAResultSuccess = 0x00,
/// OTA升级失败
JL_OTAResultFail = 0x01,
/// OTA升级数据为空
JL_OTAResultDataIsNull = 0x02,
/// OTA指令失败
JL_OTAResultCommandFail = 0x03,
/// OTA标示偏移查找失败
JL_OTAResultSeekFail = 0x04,
/// OTA升级固件信息错误
JL_OTAResultInfoFail = 0x05,
/// OTA升级设备电压低
JL_OTAResultLowPower = 0x06,
/// 未能进入OTA升级模式
JL_OTAResultEnterFail = 0x07,
/// OTA升级中
JL_OTAResultUpgrading = 0x08,
/// OTA需重连设备(uuid方式)
JL_OTAResultReconnect = 0x09,
/// OTA需设备重启
JL_OTAResultReboot = 0x0a,
/// OTA准备中
JL_OTAResultPreparing = 0x0b,
/// OTA准备完成
JL_OTAResultPrepared = 0x0f,
/// 设备已在升级中
JL_OTAResultStatusIsUpdating = 0x10,
/// 当前固件多台设备连接,请手动断开另一个设备连接
JL_OTAResultFailedConnectMore = 0x11,
/// 升级数据校验失败,SN 多次重复
JL_OTAResultFailSameSN = 0xe0,
/// 升级取消
JL_OTAResultCancel = 0xe1,
/// 升级数据校验失败
JL_OTAResultFailVerification = 0xf1,
/// 升级失败
JL_OTAResultFailCompletely = 0xf2,
/// 升级数据校验失败,加密Key不对
JL_OTAResultFailKey = 0xf3,
/// 升级文件出错
JL_OTAResultFailErrorFile = 0xf4,
/// uboot不匹配
JL_OTAResultFailUboot = 0xf5,
/// 升级过程长度出错
JL_OTAResultFailLenght = 0xf6,
/// 升级过程flash读写失败
JL_OTAResultFailFlash = 0xf7,
/// 升级过程指令超时
JL_OTAResultFailCmdTimeout = 0xf8,
/// 相同版本
JL_OTAResultFailSameVersion = 0xf9,
/// TWS耳机未连接
JL_OTAResultFailTWSDisconnect = 0xfa,
/// 耳机未在充电仓
JL_OTAResultFailNotInBin = 0xfb,
/// OTA需重连设备(mac方式)
JL_OTAResultReconnectWithMacAddr = 0xfc,
/// OTA设备断开
JL_OTAResultDisconnect = 0xfd,
/// OTA需重连设备(更新资源)
JL_OTAResultReconnectUpdateSource = 0xfe,
/// OTA未知错误
JL_OTAResultUnknown
};
typedef NS_ENUM(UInt8, JL_OTAReconnectType) {
JL_OTAReconnectTypeUUID = 0x00, // OTA升级回连使用uuid
JL_OTAReconnectTypeMACAddr = 0x01, // OTA升级回连使用mac地址
};
typedef NS_ENUM(UInt8, JL_OtaStatus) {
JL_OtaStatusNormal = 0, // 正常升级
JL_OtaStatusForce = 1, // 强制升级
};
typedef NS_ENUM(UInt8, JL_OtaHeadset) {
JL_OtaHeadsetNO = 0, // 耳机单备份 正常升级
JL_OtaHeadsetYES = 1, // 耳机单备份 强制升级
};
typedef NS_ENUM(UInt8, JL_OtaWatch) {
JL_OtaWatchNO = 0, // 手表资源 正常升级
JL_OtaWatchYES = 1, // 手表资源 强制升级
}__attribute__((deprecated("This enum is deprecated. Use JLOtaSourcesExtendMode instead.")));
/// OTA资源升级模式
typedef NS_ENUM(UInt8, JLOtaSourcesExtendMode) {
/// 不启用
JLSourcesExtendModeDisable = 0,
/// 启用普通资源升级模式
JLSourcesExtendModeNormal = 1,
/// 启用只升级资源的模式
JLSourcesExtendModeSourceOnly = 2,
/// 启用只升级固件程序的模式
JLSourcesExtendModeFirmwareOnly = 3,
};
typedef NS_ENUM(UInt8, JL_BootLoader) {
JL_BootLoaderNO = 0, // 不需要下载Bootloader
JL_BootLoaderYES = 1, // 需要下载BootLoader
};
typedef NS_ENUM(UInt8, JL_Partition) {
JL_PartitionSingle = 0, // 固件单备份
JL_PartitionDouble = 1, // 固件双备份
};
typedef void (^JL_OTA_RT)(JL_OTAResult result, float progress);
typedef void (^JL_OTA_RESULT)(uint8_t status, uint8_t sn, NSData *__nullable data);
@class JL_OTAManager;
/// OTA 升级管理对象回调
@protocol JL_OTAManagerDelegate <NSObject>
/// 即将被发送的数据
/// @param data 数据内容
- (void)otaDataSend:(NSData *_Nonnull)data;
@optional
/// 回调设备状态信息
/// @param manager 对象状态
- (void)otaFeatureResult:(JL_OTAManager *_Nonnull)manager;
/// 回调升级状态以及进度等
/// @param result 状态以及进度信息
/// @param progress 进度信息
- (void)otaUpgradeResult:(JL_OTAResult)result Progress:(float)progress;
/// 取消OTA升级
- (void)otaCancel;
@end
/// OTA升级管理对象
@interface JL_OTAManager : NSObject
/// 设备UUID(需要开发者填入)
@property(strong, nonatomic) NSString *mBLE_UUID;
/// 设备名称(需要开发者填入)
@property(strong, nonatomic) NSString *mBLE_NAME;
/// 是否仅仅支持BLE
@property(assign, nonatomic) BOOL bleOnly;
/// ble蓝牙地址
@property(strong, nonatomic) NSString *bleAddr;
/// SN值
@property(assign, nonatomic) uint8_t mCmdSN;
/// 设备版本号
@property(assign, nonatomic) uint16_t version;
/// 设备版本信息
@property(strong, nonatomic) NSString *versionFirmware;
/// 设备OTA状态
@property(assign, nonatomic) JL_OtaStatus otaStatus;
/// 耳机单备份 是否需要强制升级
@property(assign, nonatomic) JL_OtaHeadset otaHeadset;
/// 手表资源 是否需要强制升级
@property(assign, nonatomic) JL_OtaWatch otaWatch __attribute__((deprecated("This property is deprecated. Use otaSourceMode instead.")));
/// 是否支持复用空间进行 OTA
@property(assign, nonatomic) BOOL isSupportReuseSpaceOTA;
/// 是否支持 OTA 拓展功能
@property (assign, nonatomic) BOOL isSupportExpand;
/// 资源升级模式类型
@property(assign, nonatomic) JLOtaSourcesExtendMode otaSourceMode;
/// 设备OTA时支持单/双备份
@property(assign, nonatomic) JL_Partition otaPartition;
/// 设备是否需要下载Loader
@property(assign, nonatomic) JL_BootLoader bootloaderType;
/// OTA升级回连方式
@property(assign, nonatomic) JL_OTAReconnectType otaReconnectType;
/// OTA升级内容大小(设备通知的)
@property(assign, nonatomic, readonly) int64_t otaLength;
/// 已传输的数据大小
@property(assign, nonatomic, readonly) uint32_t otaSent;
/// 设备交互回调代理
@property(weak, nonatomic) id<JL_OTAManagerDelegate> delegate;
/// 获取 OTA 升级对象
+ (JL_OTAManager *)getOTAManager;
/// 不建议使用自行初始化
/// 推荐获取 getOTAManager
- (instancetype)init __attribute__((deprecated("Please use getOTAManager instead.")));
/// 打印OTA发送的数据内容
/// - Parameter status: 开关
- (void)logSendData:(BOOL)status;
/// 当BLE连接上时告知SDK
- (void)noteEntityConnected;
/// 当BLE断开时告知SDK
- (void)noteEntityDisconnected;
/// 设置最大丢包次数
/// - Parameter count: 次数
/// default: 10
- (void)maxLostCount:(int)count;
/// 设置超时时间
/// - Parameter timeOut: 时间
/// default: 5
- (void)cmdTimeOut:(int)timeOut;
/// 设置是否需要回连
/// 一般不允许外部干扰状态机,外部不适用此方法
/// - Parameter isReLink: 回连
- (void)setOTARelink:(BOOL)isReLink __attribute__((deprecated("Can't be used externally.")));
/// Receive data from rcsp
/// 设备端过来的数据
/// - Parameter data: data
- (void)cmdOtaDataReceive:(NSData *)data;
/// 查询设备OTA信息
/// 所有情况下都需要执行,而且是在连上后(认证完成)第一步执行
- (void)cmdTargetFeature;
/// 查询设备系统状态
/// 当设备需要挂载外置flash才能正常升级时需要执行,其他情况则无需执行
- (void)cmdSystemFunction;
/// OTA单备份,是否正在回连
- (BOOL)cmdOtaIsRelinking;
#pragma mark---> OTA升级
/**
开始OTA升级
@param data 升级数据
@param result 升级结果
*/
- (void)cmdOTAData:(NSData *)data
Result:(JL_OTA_RT __nullable)result;
/// OTA升级II
/// 单备份升级特有!!!!
/// 此接口可用于 OTA 回连成功后,再次发起升级使用
/// @param result 升级结果回调
- (void)cmdOtaDataIIResult:(JL_OTA_RT __nullable)result;
/// OTA升级III
/// 单备份升级特有!!!
/// 此接口免去了公版 OTA 的外边回连策略,内部实现回连
/// ⚠️使用此方法时不可使用 delegate 的回调信息,要使用 Result 的回调信息
/// @param data OTA数据
/// @param option 回连选项
/// @param result 回复
-(void)cmdUpgrade:(NSData *)data Option:(JLOtaReConnectOption *_Nullable)option Result:(JL_OTA_RT _Nonnull)result;
/**
OTA升级取消
@param result 回复
*/
- (void)cmdOTACancelResult:(JL_OTA_RESULT __nullable)result;
/// 重启设备
- (void)cmdRebootDevice;
/// 强制重启设备
- (void)cmdRebootForceDevice;
/// 重置OTA manager
- (void)resetOTAManager;
/// 打印OTA SDK版本
+ (NSString *)logSDKVersion;
@end
NS_ASSUME_NONNULL_END

207
local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64/JL_OTALib.framework/Headers/jl_ufw.h

@ -0,0 +1,207 @@
/**
* Des:
* author: Bob
* date: 2022/11/29
* Copyright: Jieli Technology
*/
#ifndef NATIVEAPPLICATION_JL_UFW_H
#define NATIVEAPPLICATION_JL_UFW_H
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//#include <android/log.h>
//#include <jni.h>
//
//#define tag "myJNI"
//#define logi(TAG, ...) ((void)__android_log_print(ANDROID_LOG_INFO, TAG, __VA_ARGS__))
//#define logw(TAG, ...) ((void)__android_log_print(ANDROID_LOG_WARN, TAG, __VA_ARGS__))
//#define loge(TAG, ...) ((void)__android_log_print(ANDROID_LOG_ERROR, TAG, __VA_ARGS__))
int parse_fw_info(const char *data, int size, uint8_t *resultBuff, uint32_t buffSize);
#define BIT(n) (1 << n)
// for FW file
enum eFW_FILE_TYPE {
FILE_TYPE_FW_FLASH_BIN = 0, // FLASH文件,第一块FLASH数据
FILE_TYPE_FW_OTP_BIN = 1, // OTP文件
FILE_TYPE_FW_INFO_LOG = 2, // FW文件中保存的描述信息
FILE_TYPE_FW_BURN_CFG = 3, // 烧写器配置文件
FILE_TYPE_FW_SCRIPT_DATA = 4, // 烧写器打包烧写器下载文件时,需要执行的脚本数据
FILE_TYPE_FW_SRC = 5, // 需要保存在FW文件中的代码文件, FW文件查看/编辑器都不能显示这些数据
FILE_TYPE_FW_NAME_BIN = 6, // 升级名字用的FW文件,已经废除
FILE_TYPE_FW_OTP_VER_BIN = 7, // OTP maskrom版本
FILE_TYPE_FW_OTPCFG_BIN = 8, // OTP配置信息
FILE_TYPE_FW_OTP_CHIP_CONTROL_BIN = 9, // OTP芯片控制信息
FILE_TYPE_FW_OTP_MINI_UBOOT = 0xA, // 烧写到OTP的MINI UBOOT文件
FILE_TYPE_FW_OTP_FIX_UBOOT = 0xB, // 烧写到OTP的FIX UBOOT文件
FILE_TYPE_FW_FLASH_2_BIN = 0xC, // 第二块FLASH数据
FILE_TYPE_FW_BR18_EFUSE_CONFIG_BIN = 0xD, // BR18 24BIT EFUSE配置数据
FILE_TYPE_FW_RESOURCE_FILE = 0xE, // 资源文件
FILE_TYPE_FW_2018KEY_INFO = 0xF, // 2018年的新KEY信息
FILE_TYPE_FW_BURNER_CUSTOMER_DATA = 0x10, // 一拖八烧写器用户信息
FILE_TYPE_FW_BURNER_DV15_FLASH_BIN = 0x11, // 一拖八烧写器第一块FLASH数据
FILE_TYPE_FW_BURNER_APP_FLASH_BIN = 0x12, // 一拖八烧写器第二块FLASH数据
FILE_TYPE_FW_BURNER_DATA_FLASH_BIN = 0x13, // 一拖八烧写器第三块FLASH数据
FILE_TYPE_FW_BURNER_BR21_FLASH_BIN = 0x14, // 一拖八烧写器第四块FLASH数据
FILE_TYPE_FW_FLASH_BIN_2 = 0x20, // 下载到第一块FLASH的文件,下载工具根据条件要么下载FILE_TYPE_FW_FLASH_BIN,要么下载FILE_TYPE_FW_FLASH_BIN_2
FILE_TYPE_FW_FLASH_BIN_3,
FILE_TYPE_FW_FLASH_BIN_4,
FILE_TYPE_FW_LOADER_BIN = 0x31, // 打包的LOADER程序代码
FILE_TYPE_FW_TEST_BOX_OTA_BIN = 0x64, // 测试盒使用的ota.bin
FILE_TYPE_FW_3RD_DATA_FILE = 0x71, // 第三方烧写数据
FILE_TYPE_FW_OTA_TARGET_DEVICE_INFO = 0xA0,
FILE_TYPE_FW_BURN_COUNT_LIMIT = 0xA1, // 烧写授权信息
FILE_TYPE_FW_ADDITIONAL_FILE = 0xEE, // 附加文件,由烧写器根据名字决定用途
FILE_TYPE_FW_PASSTHROUGH_DATA = 0xEF, // AC691X BTIF数据
// 仅存在于FW文件中的数据
FILE_TYPE_FW_HIDDEN_CFG_BIN = 0xFA,
FILE_TYPE_FW_INVISIBLE_DATA = 0xFB, // 保存在FW文件中的隐藏数据,FW文件查看/编辑器都不能显示这些数据
FILE_TYPE_FW_VISIBLE_DATA = 0xFE, // 仅保存在FW文件中的HEX数据
FILE_TYPE_FW_TAIL = 0xFF, // FW文件尾部标识
};
typedef struct U16BIT
{
unsigned char b0 : 1;
unsigned char b1 : 1;
unsigned char b2 : 1;
unsigned char b3 : 1;
unsigned char b4 : 1;
unsigned char b5 : 1;
unsigned char b6 : 1;
unsigned char b7 : 1;
unsigned char b8 : 1;
unsigned char b9 : 1;
unsigned char b10 : 1;
unsigned char b11 : 1;
unsigned char b12 : 1;
unsigned char b13 : 1;
unsigned char b14 : 1;
unsigned char b15 : 1;
} U16BIT;
typedef union UBIT16
{
U16BIT bits;
uint16_t val;
} UBIT16;
typedef struct stRES_FILE_HEAD {
uint32_t u32Tag;
uint16_t u16Crc;
uint16_t u16CrcOfItems;
uint32_t u32Len;
uint16_t u16Count;
uint16_t u16Res;
uint8_t u8Res16[16];
}RES_FILE_HEAD;
typedef struct stRES_CONFIG_ITEM {
uint16_t u16Index;
uint16_t u16Type;
uint32_t u32Addr;
uint32_t u32Len;
uint16_t u16CrcOfData;
uint16_t u16Res;
char szName[16];
}RES_CONFIG_ITEM;
static uint16_t m_u16ChipKey = 0xFFFF;
static uint16_t m_u16DefaultKey = 0xFFFF;
#pragma pack(1)
#define JL_FILE_ITEM_NAME_MAX_LEN 16
#define JL_CHIP_KEY_ENC_LENGTH 32
typedef struct stUFW_SYD_HEAD_V1 {
uint16_t u16Crc; // crc16 for this struct
uint16_t u16CrcOfSydFileHead;
uint32_t u32FileLength; // file length
uint16_t u16FileCount; // 此FW文件中包含的子文件个数
uint16_t u16Version;
uint32_t u32Res;
char szChipName[16]; // 此FW文件对应的芯片类型,如AC690X,AC691X
uint32_t u32Res2[4];
uint32_t u32Res3[4];
}UFW_SYD_HEAD_V1;
typedef struct stUFW_FILE_HEAD_V1 {
uint8_t u8FileType; // 文件类型
uint8_t u8Res; // 保留
uint16_t u16Index; // 文件索引号
uint16_t u16Crc; // 明文数据的校验码
uint16_t u16Version; // 本结构体版本
uint32_t u32Addr; // 地址
uint32_t u32Length; // 数据长度
uint32_t u32AllLength; // 数据长度+尾部对齐的数据长度
uint32_t u32EncryptedAddr; // 加密数据的地址偏移(相对u32Addr的地址)
uint32_t u32EncryptedLength; // 加密的数据长度
uint32_t u32Res; // 保留
uint32_t u64Res1[4]; // 保留
uint32_t u64Res2[4]; // 保留
char name[JL_FILE_ITEM_NAME_MAX_LEN];
}UFW_FILE_HEAD_V1;
typedef struct stJL_FILE_TAIL {
char szChipKey[JL_CHIP_KEY_ENC_LENGTH]; // 32 // 固定位置
uint16_t u16ChipKeyCRC16; // 34 // 固定位置
uint8_t u8Magic[6]; // 40 // 固定位置
uint8_t u8Res8[8]; // 48
char szTailChipName[6]; // 54 // 固定位置
uint8_t u8Reserv10[10]; // 64
}JL_FILE_TAIL;
typedef struct {
char szName[3];
char szVersion[3];
uint8_t u8Flag;
uint8_t u8Res;
uint32_t u32Crc;
uint16_t u16Crc;
uint16_t u16Res;
}JL_FLASH_BIN_TAIL;
typedef UFW_SYD_HEAD_V1 jl_ufw_syd_head;
typedef UFW_FILE_HEAD_V1 jl_ufw_file_head;
typedef JL_FILE_TAIL jl_ufw_tail;
typedef struct stJL_BR22_FLASH_HEAD {
uint16_t u16Crc; // 结构体自身校验码
uint8_t u8SizeForBurner; // 为烧写器保留的空间大小
uint8_t u8Version; // FLASH FS版本号
char vid[4]; // 4byte的vid
uint32_t u32FlashSize; // FLASH大小,由isd_download计算得出
uint8_t u8FsVersion; // 类型:br18/br22
uint8_t u8BlockAlingnModulus; // 对齐系数
uint8_t u8Res; // 保留,以后有可能会用于存放顶层目录的偏移和文件目录内偏移信息
uint8_t u8SpecialOptFlag; // 用于标记是否需要生成2种flash格式的标记位,目前只用1位,以后如果需要特殊操作需要标记,再用其他位
char pid[16]; // 16byte的pid
}JL_BR22_FLASH_HEAD;
#pragma pack()
#endif //NATIVEAPPLICATION_JL_UFW_H

BIN
local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64/JL_OTALib.framework/Info.plist

Binary file not shown.

BIN
local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64/JL_OTALib.framework/JL_OTALib

Binary file not shown.

6
local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64/JL_OTALib.framework/Modules/module.modulemap

@ -0,0 +1,6 @@
framework module JL_OTALib {
umbrella header "JL_OTALib.h"
export *
module * { export * }
}

52
local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/Headers/JLOTAFile.h

@ -0,0 +1,52 @@
//
// JLOTAFile.h
// JL_OTALib
//
// Created by EzioChan on 2024/7/26.
// Copyright © 2024 www.zh-jieli.com. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
typedef NS_ENUM(UInt8, JL_OTAUrlResult) {
JL_OTAUrlResultSuccess = 0x00, //OTA文件获取成功
JL_OTAUrlResultFail = 0x01, //OTA文件获取失败
JL_OTAUrlResultDownloadFail = 0x02, //OTA文件下载失败
};
typedef void(^JL_OTA_URL)(JL_OTAUrlResult result,
NSString* __nullable version,
NSString* __nullable url,
NSString* __nullable explain);
@interface JLOTAFile : NSObject
#pragma mark -文件下载
/**
文件下载
@param key 授权key
@param code 授权code
@param result 回复
*/
-(void)cmdGetOtaFileKey:(NSString*)key
Code:(NSString*)code
Result:(JL_OTA_URL __nullable)result;
/**
OTA升级文件下载【MD5】
@param key 授权key
@param code 授权code
@param hash MD5值
@param result 回复
*/
-(void)cmdGetOtaFileKey:(NSString*)key
Code:(NSString*)code
hash:(NSString*)hash
Result:(JL_OTA_URL __nullable)result;
@end
NS_ASSUME_NONNULL_END

62
local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/Headers/JLOtaCustom.h

@ -0,0 +1,62 @@
//
// JLOtaCustom.h
// JL_OTALib
//
// Created by EzioChan on 2025/4/17.
// Copyright © 2025 www.zh-jieli.com. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@class JL_OTAManager;
/// 自定义命令对象
@interface JLOtaCustomData : NSObject
/// 是否需要回复
@property (nonatomic, assign) BOOL needResponse;
/// 数据
@property (nonatomic, strong) NSData *data;
/// 回复数据 SN
@property (nonatomic, assign) uint8_t sn;
@end
/// 自定义命令回调
@protocol JLOtaCustomDelegate <NSObject>
/// 自定义命令回调
/// - Parameter data: 自定义命令对象
-(void)otaCustomReceiveData:(JLOtaCustomData *)data;
@end
/// 自定义命令
@interface JLOtaCustom : NSObject
/// 自定义命令
/// - Parameters:
/// - delegate: 代理回调
/// - manager: 升级对象
-(instancetype)initWithDelegate:(id<JLOtaCustomDelegate>)delegate OtaManager:(JL_OTAManager *)manager;
/// 发送自定义命令
/// - Parameters:
/// - data: 下发的数据
/// - need: 是否需要回复内容
/// - result: 命令回复结果
- (void)cmdSendCommandData:(NSData *)data needResponse:(BOOL)need Result:(void(^)(NSData * __nullable response, NSError * __nullable error)) result;
/// 回复自定义命令
/// - Parameters:
/// - data: 回复的数据
/// - sn: 回复的SN
- (void)cmdResponseData:(NSData *)data sn:(uint8_t)sn;
@end
NS_ASSUME_NONNULL_END

43
local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/Headers/JLOtaReConnectOption.h

@ -0,0 +1,43 @@
//
// JLOtaReConnectOption.h
// JL_OTALib
//
// Created by EzioChan on 2025/3/27.
// Copyright © 2025 www.zh-jieli.com. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface JLOtaReConnectOption : NSObject
/// 是否需要使用设备认证
@property (assign, nonatomic) BOOL deviceAuthorize;
/// 握手(配对)秘钥
@property(strong,nonatomic)NSData *__nullable authKey;
/// 设备服务UUID
/// 默认是 AE00
@property (strong, nonatomic) NSString *serviceUUID;
///写特征 UUID
/// 默认是 AE01
@property (strong, nonatomic) NSString *writeUUID;
/// 读特征 UUID
/// 默认是 AE02
@property (strong, nonatomic) NSString *readUUID;
/// 是否需要响应的回应方式
/// 默认是NO
@property (assign, nonatomic) BOOL isWriteWithResponse;
+ (JLOtaReConnectOption *)defaultOption;
@end
NS_ASSUME_NONNULL_END

22
local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/Headers/JL_OTALib.h

@ -0,0 +1,22 @@
//
// JL_OTALib.h
// JL_OTALib
//
// Created by EzioChan on 2023/1/29.
// Copyright © 2023 www.zh-jieli.com. All rights reserved.
//
#import <Foundation/Foundation.h>
//! Project version number for JL_OTALib.
FOUNDATION_EXPORT double JL_OTALibVersionNumber;
//! Project version string for JL_OTALib.
FOUNDATION_EXPORT const unsigned char JL_OTALibVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <JL_OTALib/PublicHeader.h>
#import <JL_OTALib/JL_OTAManager.h>
#import <JL_OTALib/jl_ufw.h>
#import <JL_OTALib/JLOTAFile.h>
#import <JL_OTALib/JLOtaReConnectOption.h>
#import <JL_OTALib/JLOtaCustom.h>

302
local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/Headers/JL_OTAManager.h

@ -0,0 +1,302 @@
//
// JL_OTAManager.h
// JL_BLEKit
//
// Created by 杰理科技 on 2021/11/16.
// Copyright © 2021 www.zh-jieli.com. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <JLLogHelper/JLLogHelper.h>
NS_ASSUME_NONNULL_BEGIN
@class JLOtaReConnectOption;
typedef NS_ENUM(UInt16, JL_OTAResult) {
/// OTA升级成功
JL_OTAResultSuccess = 0x00,
/// OTA升级失败
JL_OTAResultFail = 0x01,
/// OTA升级数据为空
JL_OTAResultDataIsNull = 0x02,
/// OTA指令失败
JL_OTAResultCommandFail = 0x03,
/// OTA标示偏移查找失败
JL_OTAResultSeekFail = 0x04,
/// OTA升级固件信息错误
JL_OTAResultInfoFail = 0x05,
/// OTA升级设备电压低
JL_OTAResultLowPower = 0x06,
/// 未能进入OTA升级模式
JL_OTAResultEnterFail = 0x07,
/// OTA升级中
JL_OTAResultUpgrading = 0x08,
/// OTA需重连设备(uuid方式)
JL_OTAResultReconnect = 0x09,
/// OTA需设备重启
JL_OTAResultReboot = 0x0a,
/// OTA准备中
JL_OTAResultPreparing = 0x0b,
/// OTA准备完成
JL_OTAResultPrepared = 0x0f,
/// 设备已在升级中
JL_OTAResultStatusIsUpdating = 0x10,
/// 当前固件多台设备连接,请手动断开另一个设备连接
JL_OTAResultFailedConnectMore = 0x11,
/// 升级数据校验失败,SN 多次重复
JL_OTAResultFailSameSN = 0xe0,
/// 升级取消
JL_OTAResultCancel = 0xe1,
/// 升级数据校验失败
JL_OTAResultFailVerification = 0xf1,
/// 升级失败
JL_OTAResultFailCompletely = 0xf2,
/// 升级数据校验失败,加密Key不对
JL_OTAResultFailKey = 0xf3,
/// 升级文件出错
JL_OTAResultFailErrorFile = 0xf4,
/// uboot不匹配
JL_OTAResultFailUboot = 0xf5,
/// 升级过程长度出错
JL_OTAResultFailLenght = 0xf6,
/// 升级过程flash读写失败
JL_OTAResultFailFlash = 0xf7,
/// 升级过程指令超时
JL_OTAResultFailCmdTimeout = 0xf8,
/// 相同版本
JL_OTAResultFailSameVersion = 0xf9,
/// TWS耳机未连接
JL_OTAResultFailTWSDisconnect = 0xfa,
/// 耳机未在充电仓
JL_OTAResultFailNotInBin = 0xfb,
/// OTA需重连设备(mac方式)
JL_OTAResultReconnectWithMacAddr = 0xfc,
/// OTA设备断开
JL_OTAResultDisconnect = 0xfd,
/// OTA需重连设备(更新资源)
JL_OTAResultReconnectUpdateSource = 0xfe,
/// OTA未知错误
JL_OTAResultUnknown
};
typedef NS_ENUM(UInt8, JL_OTAReconnectType) {
JL_OTAReconnectTypeUUID = 0x00, // OTA升级回连使用uuid
JL_OTAReconnectTypeMACAddr = 0x01, // OTA升级回连使用mac地址
};
typedef NS_ENUM(UInt8, JL_OtaStatus) {
JL_OtaStatusNormal = 0, // 正常升级
JL_OtaStatusForce = 1, // 强制升级
};
typedef NS_ENUM(UInt8, JL_OtaHeadset) {
JL_OtaHeadsetNO = 0, // 耳机单备份 正常升级
JL_OtaHeadsetYES = 1, // 耳机单备份 强制升级
};
typedef NS_ENUM(UInt8, JL_OtaWatch) {
JL_OtaWatchNO = 0, // 手表资源 正常升级
JL_OtaWatchYES = 1, // 手表资源 强制升级
}__attribute__((deprecated("This enum is deprecated. Use JLOtaSourcesExtendMode instead.")));
/// OTA资源升级模式
typedef NS_ENUM(UInt8, JLOtaSourcesExtendMode) {
/// 不启用
JLSourcesExtendModeDisable = 0,
/// 启用普通资源升级模式
JLSourcesExtendModeNormal = 1,
/// 启用只升级资源的模式
JLSourcesExtendModeSourceOnly = 2,
/// 启用只升级固件程序的模式
JLSourcesExtendModeFirmwareOnly = 3,
};
typedef NS_ENUM(UInt8, JL_BootLoader) {
JL_BootLoaderNO = 0, // 不需要下载Bootloader
JL_BootLoaderYES = 1, // 需要下载BootLoader
};
typedef NS_ENUM(UInt8, JL_Partition) {
JL_PartitionSingle = 0, // 固件单备份
JL_PartitionDouble = 1, // 固件双备份
};
typedef void (^JL_OTA_RT)(JL_OTAResult result, float progress);
typedef void (^JL_OTA_RESULT)(uint8_t status, uint8_t sn, NSData *__nullable data);
@class JL_OTAManager;
/// OTA 升级管理对象回调
@protocol JL_OTAManagerDelegate <NSObject>
/// 即将被发送的数据
/// @param data 数据内容
- (void)otaDataSend:(NSData *_Nonnull)data;
@optional
/// 回调设备状态信息
/// @param manager 对象状态
- (void)otaFeatureResult:(JL_OTAManager *_Nonnull)manager;
/// 回调升级状态以及进度等
/// @param result 状态以及进度信息
/// @param progress 进度信息
- (void)otaUpgradeResult:(JL_OTAResult)result Progress:(float)progress;
/// 取消OTA升级
- (void)otaCancel;
@end
/// OTA升级管理对象
@interface JL_OTAManager : NSObject
/// 设备UUID(需要开发者填入)
@property(strong, nonatomic) NSString *mBLE_UUID;
/// 设备名称(需要开发者填入)
@property(strong, nonatomic) NSString *mBLE_NAME;
/// 是否仅仅支持BLE
@property(assign, nonatomic) BOOL bleOnly;
/// ble蓝牙地址
@property(strong, nonatomic) NSString *bleAddr;
/// SN值
@property(assign, nonatomic) uint8_t mCmdSN;
/// 设备版本号
@property(assign, nonatomic) uint16_t version;
/// 设备版本信息
@property(strong, nonatomic) NSString *versionFirmware;
/// 设备OTA状态
@property(assign, nonatomic) JL_OtaStatus otaStatus;
/// 耳机单备份 是否需要强制升级
@property(assign, nonatomic) JL_OtaHeadset otaHeadset;
/// 手表资源 是否需要强制升级
@property(assign, nonatomic) JL_OtaWatch otaWatch __attribute__((deprecated("This property is deprecated. Use otaSourceMode instead.")));
/// 是否支持复用空间进行 OTA
@property(assign, nonatomic) BOOL isSupportReuseSpaceOTA;
/// 是否支持 OTA 拓展功能
@property (assign, nonatomic) BOOL isSupportExpand;
/// 资源升级模式类型
@property(assign, nonatomic) JLOtaSourcesExtendMode otaSourceMode;
/// 设备OTA时支持单/双备份
@property(assign, nonatomic) JL_Partition otaPartition;
/// 设备是否需要下载Loader
@property(assign, nonatomic) JL_BootLoader bootloaderType;
/// OTA升级回连方式
@property(assign, nonatomic) JL_OTAReconnectType otaReconnectType;
/// OTA升级内容大小(设备通知的)
@property(assign, nonatomic, readonly) int64_t otaLength;
/// 已传输的数据大小
@property(assign, nonatomic, readonly) uint32_t otaSent;
/// 设备交互回调代理
@property(weak, nonatomic) id<JL_OTAManagerDelegate> delegate;
/// 获取 OTA 升级对象
+ (JL_OTAManager *)getOTAManager;
/// 不建议使用自行初始化
/// 推荐获取 getOTAManager
- (instancetype)init __attribute__((deprecated("Please use getOTAManager instead.")));
/// 打印OTA发送的数据内容
/// - Parameter status: 开关
- (void)logSendData:(BOOL)status;
/// 当BLE连接上时告知SDK
- (void)noteEntityConnected;
/// 当BLE断开时告知SDK
- (void)noteEntityDisconnected;
/// 设置最大丢包次数
/// - Parameter count: 次数
/// default: 10
- (void)maxLostCount:(int)count;
/// 设置超时时间
/// - Parameter timeOut: 时间
/// default: 5
- (void)cmdTimeOut:(int)timeOut;
/// 设置是否需要回连
/// 一般不允许外部干扰状态机,外部不适用此方法
/// - Parameter isReLink: 回连
- (void)setOTARelink:(BOOL)isReLink __attribute__((deprecated("Can't be used externally.")));
/// Receive data from rcsp
/// 设备端过来的数据
/// - Parameter data: data
- (void)cmdOtaDataReceive:(NSData *)data;
/// 查询设备OTA信息
/// 所有情况下都需要执行,而且是在连上后(认证完成)第一步执行
- (void)cmdTargetFeature;
/// 查询设备系统状态
/// 当设备需要挂载外置flash才能正常升级时需要执行,其他情况则无需执行
- (void)cmdSystemFunction;
/// OTA单备份,是否正在回连
- (BOOL)cmdOtaIsRelinking;
#pragma mark---> OTA升级
/**
开始OTA升级
@param data 升级数据
@param result 升级结果
*/
- (void)cmdOTAData:(NSData *)data
Result:(JL_OTA_RT __nullable)result;
/// OTA升级II
/// 单备份升级特有!!!!
/// 此接口可用于 OTA 回连成功后,再次发起升级使用
/// @param result 升级结果回调
- (void)cmdOtaDataIIResult:(JL_OTA_RT __nullable)result;
/// OTA升级III
/// 单备份升级特有!!!
/// 此接口免去了公版 OTA 的外边回连策略,内部实现回连
/// ⚠️使用此方法时不可使用 delegate 的回调信息,要使用 Result 的回调信息
/// @param data OTA数据
/// @param option 回连选项
/// @param result 回复
-(void)cmdUpgrade:(NSData *)data Option:(JLOtaReConnectOption *_Nullable)option Result:(JL_OTA_RT _Nonnull)result;
/**
OTA升级取消
@param result 回复
*/
- (void)cmdOTACancelResult:(JL_OTA_RESULT __nullable)result;
/// 重启设备
- (void)cmdRebootDevice;
/// 强制重启设备
- (void)cmdRebootForceDevice;
/// 重置OTA manager
- (void)resetOTAManager;
/// 打印OTA SDK版本
+ (NSString *)logSDKVersion;
@end
NS_ASSUME_NONNULL_END

207
local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/Headers/jl_ufw.h

@ -0,0 +1,207 @@
/**
* Des:
* author: Bob
* date: 2022/11/29
* Copyright: Jieli Technology
*/
#ifndef NATIVEAPPLICATION_JL_UFW_H
#define NATIVEAPPLICATION_JL_UFW_H
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//#include <android/log.h>
//#include <jni.h>
//
//#define tag "myJNI"
//#define logi(TAG, ...) ((void)__android_log_print(ANDROID_LOG_INFO, TAG, __VA_ARGS__))
//#define logw(TAG, ...) ((void)__android_log_print(ANDROID_LOG_WARN, TAG, __VA_ARGS__))
//#define loge(TAG, ...) ((void)__android_log_print(ANDROID_LOG_ERROR, TAG, __VA_ARGS__))
int parse_fw_info(const char *data, int size, uint8_t *resultBuff, uint32_t buffSize);
#define BIT(n) (1 << n)
// for FW file
enum eFW_FILE_TYPE {
FILE_TYPE_FW_FLASH_BIN = 0, // FLASH文件,第一块FLASH数据
FILE_TYPE_FW_OTP_BIN = 1, // OTP文件
FILE_TYPE_FW_INFO_LOG = 2, // FW文件中保存的描述信息
FILE_TYPE_FW_BURN_CFG = 3, // 烧写器配置文件
FILE_TYPE_FW_SCRIPT_DATA = 4, // 烧写器打包烧写器下载文件时,需要执行的脚本数据
FILE_TYPE_FW_SRC = 5, // 需要保存在FW文件中的代码文件, FW文件查看/编辑器都不能显示这些数据
FILE_TYPE_FW_NAME_BIN = 6, // 升级名字用的FW文件,已经废除
FILE_TYPE_FW_OTP_VER_BIN = 7, // OTP maskrom版本
FILE_TYPE_FW_OTPCFG_BIN = 8, // OTP配置信息
FILE_TYPE_FW_OTP_CHIP_CONTROL_BIN = 9, // OTP芯片控制信息
FILE_TYPE_FW_OTP_MINI_UBOOT = 0xA, // 烧写到OTP的MINI UBOOT文件
FILE_TYPE_FW_OTP_FIX_UBOOT = 0xB, // 烧写到OTP的FIX UBOOT文件
FILE_TYPE_FW_FLASH_2_BIN = 0xC, // 第二块FLASH数据
FILE_TYPE_FW_BR18_EFUSE_CONFIG_BIN = 0xD, // BR18 24BIT EFUSE配置数据
FILE_TYPE_FW_RESOURCE_FILE = 0xE, // 资源文件
FILE_TYPE_FW_2018KEY_INFO = 0xF, // 2018年的新KEY信息
FILE_TYPE_FW_BURNER_CUSTOMER_DATA = 0x10, // 一拖八烧写器用户信息
FILE_TYPE_FW_BURNER_DV15_FLASH_BIN = 0x11, // 一拖八烧写器第一块FLASH数据
FILE_TYPE_FW_BURNER_APP_FLASH_BIN = 0x12, // 一拖八烧写器第二块FLASH数据
FILE_TYPE_FW_BURNER_DATA_FLASH_BIN = 0x13, // 一拖八烧写器第三块FLASH数据
FILE_TYPE_FW_BURNER_BR21_FLASH_BIN = 0x14, // 一拖八烧写器第四块FLASH数据
FILE_TYPE_FW_FLASH_BIN_2 = 0x20, // 下载到第一块FLASH的文件,下载工具根据条件要么下载FILE_TYPE_FW_FLASH_BIN,要么下载FILE_TYPE_FW_FLASH_BIN_2
FILE_TYPE_FW_FLASH_BIN_3,
FILE_TYPE_FW_FLASH_BIN_4,
FILE_TYPE_FW_LOADER_BIN = 0x31, // 打包的LOADER程序代码
FILE_TYPE_FW_TEST_BOX_OTA_BIN = 0x64, // 测试盒使用的ota.bin
FILE_TYPE_FW_3RD_DATA_FILE = 0x71, // 第三方烧写数据
FILE_TYPE_FW_OTA_TARGET_DEVICE_INFO = 0xA0,
FILE_TYPE_FW_BURN_COUNT_LIMIT = 0xA1, // 烧写授权信息
FILE_TYPE_FW_ADDITIONAL_FILE = 0xEE, // 附加文件,由烧写器根据名字决定用途
FILE_TYPE_FW_PASSTHROUGH_DATA = 0xEF, // AC691X BTIF数据
// 仅存在于FW文件中的数据
FILE_TYPE_FW_HIDDEN_CFG_BIN = 0xFA,
FILE_TYPE_FW_INVISIBLE_DATA = 0xFB, // 保存在FW文件中的隐藏数据,FW文件查看/编辑器都不能显示这些数据
FILE_TYPE_FW_VISIBLE_DATA = 0xFE, // 仅保存在FW文件中的HEX数据
FILE_TYPE_FW_TAIL = 0xFF, // FW文件尾部标识
};
typedef struct U16BIT
{
unsigned char b0 : 1;
unsigned char b1 : 1;
unsigned char b2 : 1;
unsigned char b3 : 1;
unsigned char b4 : 1;
unsigned char b5 : 1;
unsigned char b6 : 1;
unsigned char b7 : 1;
unsigned char b8 : 1;
unsigned char b9 : 1;
unsigned char b10 : 1;
unsigned char b11 : 1;
unsigned char b12 : 1;
unsigned char b13 : 1;
unsigned char b14 : 1;
unsigned char b15 : 1;
} U16BIT;
typedef union UBIT16
{
U16BIT bits;
uint16_t val;
} UBIT16;
typedef struct stRES_FILE_HEAD {
uint32_t u32Tag;
uint16_t u16Crc;
uint16_t u16CrcOfItems;
uint32_t u32Len;
uint16_t u16Count;
uint16_t u16Res;
uint8_t u8Res16[16];
}RES_FILE_HEAD;
typedef struct stRES_CONFIG_ITEM {
uint16_t u16Index;
uint16_t u16Type;
uint32_t u32Addr;
uint32_t u32Len;
uint16_t u16CrcOfData;
uint16_t u16Res;
char szName[16];
}RES_CONFIG_ITEM;
static uint16_t m_u16ChipKey = 0xFFFF;
static uint16_t m_u16DefaultKey = 0xFFFF;
#pragma pack(1)
#define JL_FILE_ITEM_NAME_MAX_LEN 16
#define JL_CHIP_KEY_ENC_LENGTH 32
typedef struct stUFW_SYD_HEAD_V1 {
uint16_t u16Crc; // crc16 for this struct
uint16_t u16CrcOfSydFileHead;
uint32_t u32FileLength; // file length
uint16_t u16FileCount; // 此FW文件中包含的子文件个数
uint16_t u16Version;
uint32_t u32Res;
char szChipName[16]; // 此FW文件对应的芯片类型,如AC690X,AC691X
uint32_t u32Res2[4];
uint32_t u32Res3[4];
}UFW_SYD_HEAD_V1;
typedef struct stUFW_FILE_HEAD_V1 {
uint8_t u8FileType; // 文件类型
uint8_t u8Res; // 保留
uint16_t u16Index; // 文件索引号
uint16_t u16Crc; // 明文数据的校验码
uint16_t u16Version; // 本结构体版本
uint32_t u32Addr; // 地址
uint32_t u32Length; // 数据长度
uint32_t u32AllLength; // 数据长度+尾部对齐的数据长度
uint32_t u32EncryptedAddr; // 加密数据的地址偏移(相对u32Addr的地址)
uint32_t u32EncryptedLength; // 加密的数据长度
uint32_t u32Res; // 保留
uint32_t u64Res1[4]; // 保留
uint32_t u64Res2[4]; // 保留
char name[JL_FILE_ITEM_NAME_MAX_LEN];
}UFW_FILE_HEAD_V1;
typedef struct stJL_FILE_TAIL {
char szChipKey[JL_CHIP_KEY_ENC_LENGTH]; // 32 // 固定位置
uint16_t u16ChipKeyCRC16; // 34 // 固定位置
uint8_t u8Magic[6]; // 40 // 固定位置
uint8_t u8Res8[8]; // 48
char szTailChipName[6]; // 54 // 固定位置
uint8_t u8Reserv10[10]; // 64
}JL_FILE_TAIL;
typedef struct {
char szName[3];
char szVersion[3];
uint8_t u8Flag;
uint8_t u8Res;
uint32_t u32Crc;
uint16_t u16Crc;
uint16_t u16Res;
}JL_FLASH_BIN_TAIL;
typedef UFW_SYD_HEAD_V1 jl_ufw_syd_head;
typedef UFW_FILE_HEAD_V1 jl_ufw_file_head;
typedef JL_FILE_TAIL jl_ufw_tail;
typedef struct stJL_BR22_FLASH_HEAD {
uint16_t u16Crc; // 结构体自身校验码
uint8_t u8SizeForBurner; // 为烧写器保留的空间大小
uint8_t u8Version; // FLASH FS版本号
char vid[4]; // 4byte的vid
uint32_t u32FlashSize; // FLASH大小,由isd_download计算得出
uint8_t u8FsVersion; // 类型:br18/br22
uint8_t u8BlockAlingnModulus; // 对齐系数
uint8_t u8Res; // 保留,以后有可能会用于存放顶层目录的偏移和文件目录内偏移信息
uint8_t u8SpecialOptFlag; // 用于标记是否需要生成2种flash格式的标记位,目前只用1位,以后如果需要特殊操作需要标记,再用其他位
char pid[16]; // 16byte的pid
}JL_BR22_FLASH_HEAD;
#pragma pack()
#endif //NATIVEAPPLICATION_JL_UFW_H

BIN
local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/Info.plist

Binary file not shown.

BIN
local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/JL_OTALib

Binary file not shown.

6
local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/Modules/module.modulemap

@ -0,0 +1,6 @@
framework module JL_OTALib {
umbrella header "JL_OTALib.h"
export *
module * { export * }
}

207
local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/_CodeSignature/CodeResources

@ -0,0 +1,207 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>files</key>
<dict>
<key>Headers/JLOTAFile.h</key>
<data>
OCi8PoI3GQr4HUxHQQytlXYCxe8=
</data>
<key>Headers/JLOtaCustom.h</key>
<data>
ohGYE+IOCliAaeZaO5VdRBwHvWo=
</data>
<key>Headers/JLOtaReConnectOption.h</key>
<data>
xqKc873u51zqagJXS172BK6h9Tg=
</data>
<key>Headers/JL_OTALib.h</key>
<data>
tH9kHWi/DKzq8j2NoSg0wXoBAro=
</data>
<key>Headers/JL_OTAManager.h</key>
<data>
PMESdvB6Bcu7gn1YJqH1tOi0eEw=
</data>
<key>Headers/jl_ufw.h</key>
<data>
KBTDPNzyz3mtGLkvJLZ7GIRKNeM=
</data>
<key>Info.plist</key>
<data>
WfMSuIuMgNEEbLR1JZENJAqvP5Y=
</data>
<key>Modules/module.modulemap</key>
<data>
Djaqrf2BV/5uLRNN6e4M1DPfyG4=
</data>
</dict>
<key>files2</key>
<dict>
<key>Headers/JLOTAFile.h</key>
<dict>
<key>hash</key>
<data>
OCi8PoI3GQr4HUxHQQytlXYCxe8=
</data>
<key>hash2</key>
<data>
lz4Ha2Z62XzIHqsHW1574zMjx1W+IhrqaCJK8HGIs/o=
</data>
</dict>
<key>Headers/JLOtaCustom.h</key>
<dict>
<key>hash</key>
<data>
ohGYE+IOCliAaeZaO5VdRBwHvWo=
</data>
<key>hash2</key>
<data>
KntKbJMahP2WujBsJDiGFbjDQvJdw3yo3CqTohYnPcE=
</data>
</dict>
<key>Headers/JLOtaReConnectOption.h</key>
<dict>
<key>hash</key>
<data>
xqKc873u51zqagJXS172BK6h9Tg=
</data>
<key>hash2</key>
<data>
obE+hckXBKKcYUtitl4rad/7W1Bi5ciNOH3ZPml7hY4=
</data>
</dict>
<key>Headers/JL_OTALib.h</key>
<dict>
<key>hash</key>
<data>
tH9kHWi/DKzq8j2NoSg0wXoBAro=
</data>
<key>hash2</key>
<data>
/E9fkD4b67lRdPY5BqxqffRv3H48y1qpNWHYw+a65Cg=
</data>
</dict>
<key>Headers/JL_OTAManager.h</key>
<dict>
<key>hash</key>
<data>
PMESdvB6Bcu7gn1YJqH1tOi0eEw=
</data>
<key>hash2</key>
<data>
uHRHY8s9UMaaynCPFZOCTid9vmTW5l5PVNI5pAyQK/I=
</data>
</dict>
<key>Headers/jl_ufw.h</key>
<dict>
<key>hash</key>
<data>
KBTDPNzyz3mtGLkvJLZ7GIRKNeM=
</data>
<key>hash2</key>
<data>
l3c9CmVcHyBHIxKSG6GlCBpaZjnp6+fd4iKu2jGMyuE=
</data>
</dict>
<key>Modules/module.modulemap</key>
<dict>
<key>hash</key>
<data>
Djaqrf2BV/5uLRNN6e4M1DPfyG4=
</data>
<key>hash2</key>
<data>
CQv4Q+xyzKhKSJpAY8gU98Qv9Wv1W16ILQ5MGAKukrA=
</data>
</dict>
</dict>
<key>rules</key>
<dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^version.plist$</key>
<true/>
</dict>
<key>rules2</key>
<dict>
<key>.*\.dSYM($|/)</key>
<dict>
<key>weight</key>
<real>11</real>
</dict>
<key>^(.*/)?\.DS_Store$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>2000</real>
</dict>
<key>^.*</key>
<true/>
<key>^.*\.lproj/</key>
<dict>
<key>optional</key>
<true/>
<key>weight</key>
<real>1000</real>
</dict>
<key>^.*\.lproj/locversion.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>1100</real>
</dict>
<key>^Base\.lproj/</key>
<dict>
<key>weight</key>
<real>1010</real>
</dict>
<key>^Info\.plist$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^PkgInfo$</key>
<dict>
<key>omit</key>
<true/>
<key>weight</key>
<real>20</real>
</dict>
<key>^embedded\.provisionprofile$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
<key>^version\.plist$</key>
<dict>
<key>weight</key>
<real>20</real>
</dict>
</dict>
</dict>
</plist>
Loading…
Cancel
Save