diff --git a/local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/Info.plist b/local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/Info.plist
new file mode 100644
index 000000000..6ce64f21d
--- /dev/null
+++ b/local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/Info.plist
@@ -0,0 +1,44 @@
+
+
+
+
+ AvailableLibraries
+
+
+ BinaryPath
+ JLLogHelper.framework/JLLogHelper
+ LibraryIdentifier
+ ios-arm64_x86_64-simulator
+ LibraryPath
+ JLLogHelper.framework
+ SupportedArchitectures
+
+ arm64
+ x86_64
+
+ SupportedPlatform
+ ios
+ SupportedPlatformVariant
+ simulator
+
+
+ BinaryPath
+ JLLogHelper.framework/JLLogHelper
+ LibraryIdentifier
+ ios-arm64
+ LibraryPath
+ JLLogHelper.framework
+ SupportedArchitectures
+
+ arm64
+
+ SupportedPlatform
+ ios
+
+
+ CFBundlePackageType
+ XFWK
+ XCFrameworkFormatVersion
+ 1.0
+
+
diff --git a/local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64/JLLogHelper.framework/Headers/JLLogHelper.h b/local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64/JLLogHelper.framework/Headers/JLLogHelper.h
new file mode 100644
index 000000000..a681462cc
--- /dev/null
+++ b/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
+
+//! 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
+
+#import
diff --git a/local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64/JLLogHelper.framework/Headers/JLLogManager.h b/local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64/JLLogHelper.framework/Headers/JLLogManager.h
new file mode 100644
index 000000000..8f16c2a12
--- /dev/null
+++ b/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
+
+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
diff --git a/local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64/JLLogHelper.framework/Info.plist b/local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64/JLLogHelper.framework/Info.plist
new file mode 100644
index 000000000..3c961562c
Binary files /dev/null and b/local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64/JLLogHelper.framework/Info.plist differ
diff --git a/local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64/JLLogHelper.framework/JLLogHelper b/local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64/JLLogHelper.framework/JLLogHelper
new file mode 100755
index 000000000..7d4cce100
Binary files /dev/null and b/local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64/JLLogHelper.framework/JLLogHelper differ
diff --git a/local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64/JLLogHelper.framework/Modules/module.modulemap b/local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64/JLLogHelper.framework/Modules/module.modulemap
new file mode 100644
index 000000000..21384c4ed
--- /dev/null
+++ b/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 * }
+}
diff --git a/local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64_x86_64-simulator/JLLogHelper.framework/Headers/JLLogHelper.h b/local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64_x86_64-simulator/JLLogHelper.framework/Headers/JLLogHelper.h
new file mode 100644
index 000000000..a681462cc
--- /dev/null
+++ b/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
+
+//! 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
+
+#import
diff --git a/local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64_x86_64-simulator/JLLogHelper.framework/Headers/JLLogManager.h b/local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64_x86_64-simulator/JLLogHelper.framework/Headers/JLLogManager.h
new file mode 100644
index 000000000..8f16c2a12
--- /dev/null
+++ b/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
+
+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
diff --git a/local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64_x86_64-simulator/JLLogHelper.framework/Info.plist b/local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64_x86_64-simulator/JLLogHelper.framework/Info.plist
new file mode 100644
index 000000000..b8d6b7f94
Binary files /dev/null and b/local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64_x86_64-simulator/JLLogHelper.framework/Info.plist differ
diff --git a/local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64_x86_64-simulator/JLLogHelper.framework/JLLogHelper b/local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64_x86_64-simulator/JLLogHelper.framework/JLLogHelper
new file mode 100755
index 000000000..df8c2858b
Binary files /dev/null and b/local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64_x86_64-simulator/JLLogHelper.framework/JLLogHelper differ
diff --git a/local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64_x86_64-simulator/JLLogHelper.framework/Modules/module.modulemap b/local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64_x86_64-simulator/JLLogHelper.framework/Modules/module.modulemap
new file mode 100644
index 000000000..21384c4ed
--- /dev/null
+++ b/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 * }
+}
diff --git a/local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64_x86_64-simulator/JLLogHelper.framework/_CodeSignature/CodeResources b/local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64_x86_64-simulator/JLLogHelper.framework/_CodeSignature/CodeResources
new file mode 100644
index 000000000..1ae81019b
--- /dev/null
+++ b/local_plugins/device_jieli/ios/Frameworks/JLLogHelper.xcframework/ios-arm64_x86_64-simulator/JLLogHelper.framework/_CodeSignature/CodeResources
@@ -0,0 +1,147 @@
+
+
+
+
+ files
+
+ Headers/JLLogHelper.h
+
+ TahP/o16a5TgPGLNFs/QhND95FU=
+
+ Headers/JLLogManager.h
+
+ Be4QtnAF0IDSmlMZquwyK7LLd8w=
+
+ Info.plist
+
+ PJl+BYy7qbdneBUnydYicJKb/SM=
+
+ Modules/module.modulemap
+
+ YwPsApnJXdp+uskVahraY2UK/Jk=
+
+
+ files2
+
+ Headers/JLLogHelper.h
+
+ hash
+
+ TahP/o16a5TgPGLNFs/QhND95FU=
+
+ hash2
+
+ nD5WuwBhpaoCwOGeWB5OusXVP21nYy+/Hcn6nPideIk=
+
+
+ Headers/JLLogManager.h
+
+ hash
+
+ Be4QtnAF0IDSmlMZquwyK7LLd8w=
+
+ hash2
+
+ vOgQgQVptNwQdUKpCW2EBNruc0PL6BnkSjxVpptJsf0=
+
+
+ Modules/module.modulemap
+
+ hash
+
+ YwPsApnJXdp+uskVahraY2UK/Jk=
+
+ hash2
+
+ ViwpXSuoKoiEUwMpetyre+mlEz0+JE8UURyNSgBuylM=
+
+
+
+ rules
+
+ ^.*
+
+ ^.*\.lproj/
+
+ optional
+
+ weight
+ 1000
+
+ ^.*\.lproj/locversion.plist$
+
+ omit
+
+ weight
+ 1100
+
+ ^Base\.lproj/
+
+ weight
+ 1010
+
+ ^version.plist$
+
+
+ rules2
+
+ .*\.dSYM($|/)
+
+ weight
+ 11
+
+ ^(.*/)?\.DS_Store$
+
+ omit
+
+ weight
+ 2000
+
+ ^.*
+
+ ^.*\.lproj/
+
+ optional
+
+ weight
+ 1000
+
+ ^.*\.lproj/locversion.plist$
+
+ omit
+
+ weight
+ 1100
+
+ ^Base\.lproj/
+
+ weight
+ 1010
+
+ ^Info\.plist$
+
+ omit
+
+ weight
+ 20
+
+ ^PkgInfo$
+
+ omit
+
+ weight
+ 20
+
+ ^embedded\.provisionprofile$
+
+ weight
+ 20
+
+ ^version\.plist$
+
+ weight
+ 20
+
+
+
+
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/Info.plist b/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/Info.plist
new file mode 100644
index 000000000..ac38ab92b
--- /dev/null
+++ b/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/Info.plist
@@ -0,0 +1,44 @@
+
+
+
+
+ AvailableLibraries
+
+
+ BinaryPath
+ JL_AdvParse.framework/JL_AdvParse
+ LibraryIdentifier
+ ios-arm64
+ LibraryPath
+ JL_AdvParse.framework
+ SupportedArchitectures
+
+ arm64
+
+ SupportedPlatform
+ ios
+
+
+ BinaryPath
+ JL_AdvParse.framework/JL_AdvParse
+ LibraryIdentifier
+ ios-arm64_x86_64-simulator
+ LibraryPath
+ JL_AdvParse.framework
+ SupportedArchitectures
+
+ arm64
+ x86_64
+
+ SupportedPlatform
+ ios
+ SupportedPlatformVariant
+ simulator
+
+
+ CFBundlePackageType
+ XFWK
+ XCFrameworkFormatVersion
+ 1.0
+
+
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JLAdvParse.h b/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JLAdvParse.h
new file mode 100644
index 000000000..844238943
--- /dev/null
+++ b/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
+#import
+
+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
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JLChargingBoxAdv.h b/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JLChargingBoxAdv.h
new file mode 100644
index 000000000..27e16d177
--- /dev/null
+++ b/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
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JLDevicesAdv.h b/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JLDevicesAdv.h
new file mode 100644
index 000000000..432142d06
--- /dev/null
+++ b/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
+#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
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JLEarphoneAdv.h b/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JLEarphoneAdv.h
new file mode 100644
index 000000000..ab6475eb5
--- /dev/null
+++ b/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
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JLOtaAdv.h b/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JLOtaAdv.h
new file mode 100644
index 000000000..da40339a7
--- /dev/null
+++ b/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
+
+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
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JLSoundBoxAdv.h b/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JLSoundBoxAdv.h
new file mode 100644
index 000000000..9ac104121
--- /dev/null
+++ b/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
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JLSoundCardAdv.h b/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JLSoundCardAdv.h
new file mode 100644
index 000000000..792c3b378
--- /dev/null
+++ b/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
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JLTwsAdv.h b/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JLTwsAdv.h
new file mode 100644
index 000000000..7137abdc1
--- /dev/null
+++ b/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
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JLWatchAdv.h b/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JLWatchAdv.h
new file mode 100644
index 000000000..696ad9284
--- /dev/null
+++ b/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
+
+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
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JL_AdvParse.h b/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Headers/JL_AdvParse.h
new file mode 100644
index 000000000..b599b7e9b
--- /dev/null
+++ b/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
+
+//! 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
+#import
+#import
+#import
+#import
+#import
+#import
+#import
+#import
+#import
+
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Info.plist b/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Info.plist
new file mode 100644
index 000000000..7f060a4a3
Binary files /dev/null and b/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Info.plist differ
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/JL_AdvParse b/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/JL_AdvParse
new file mode 100755
index 000000000..9c04419b0
Binary files /dev/null and b/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/JL_AdvParse differ
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Modules/module.modulemap b/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64/JL_AdvParse.framework/Modules/module.modulemap
new file mode 100644
index 000000000..c072084c5
--- /dev/null
+++ b/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 * }
+}
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JLAdvParse.h b/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JLAdvParse.h
new file mode 100644
index 000000000..844238943
--- /dev/null
+++ b/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
+#import
+
+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
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JLChargingBoxAdv.h b/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JLChargingBoxAdv.h
new file mode 100644
index 000000000..27e16d177
--- /dev/null
+++ b/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
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JLDevicesAdv.h b/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JLDevicesAdv.h
new file mode 100644
index 000000000..432142d06
--- /dev/null
+++ b/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
+#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
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JLEarphoneAdv.h b/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JLEarphoneAdv.h
new file mode 100644
index 000000000..ab6475eb5
--- /dev/null
+++ b/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
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JLOtaAdv.h b/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JLOtaAdv.h
new file mode 100644
index 000000000..da40339a7
--- /dev/null
+++ b/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
+
+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
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JLSoundBoxAdv.h b/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JLSoundBoxAdv.h
new file mode 100644
index 000000000..9ac104121
--- /dev/null
+++ b/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
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JLSoundCardAdv.h b/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JLSoundCardAdv.h
new file mode 100644
index 000000000..792c3b378
--- /dev/null
+++ b/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
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JLTwsAdv.h b/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JLTwsAdv.h
new file mode 100644
index 000000000..7137abdc1
--- /dev/null
+++ b/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
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JLWatchAdv.h b/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JLWatchAdv.h
new file mode 100644
index 000000000..696ad9284
--- /dev/null
+++ b/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
+
+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
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JL_AdvParse.h b/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Headers/JL_AdvParse.h
new file mode 100644
index 000000000..b599b7e9b
--- /dev/null
+++ b/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
+
+//! 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
+#import
+#import
+#import
+#import
+#import
+#import
+#import
+#import
+#import
+
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Info.plist b/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Info.plist
new file mode 100644
index 000000000..284ba59ec
Binary files /dev/null and b/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Info.plist differ
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/JL_AdvParse b/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/JL_AdvParse
new file mode 100755
index 000000000..27d3e726d
Binary files /dev/null and b/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/JL_AdvParse differ
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Modules/module.modulemap b/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/Modules/module.modulemap
new file mode 100644
index 000000000..c072084c5
--- /dev/null
+++ b/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 * }
+}
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/_CodeSignature/CodeResources b/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/_CodeSignature/CodeResources
new file mode 100644
index 000000000..e2beeb0cb
--- /dev/null
+++ b/local_plugins/device_jieli/ios/Frameworks/JL_AdvParse.xcframework/ios-arm64_x86_64-simulator/JL_AdvParse.framework/_CodeSignature/CodeResources
@@ -0,0 +1,267 @@
+
+
+
+
+ files
+
+ Headers/JLAdvParse.h
+
+ 64SI1XBWnV1VmXIYu8XpmwMpE04=
+
+ Headers/JLChargingBoxAdv.h
+
+ dxEumtBFtKzehtXyVAacIJk/UU4=
+
+ Headers/JLDevicesAdv.h
+
+ WG6Ivw9lqj20J5OXda4lXMvAsig=
+
+ Headers/JLEarphoneAdv.h
+
+ fJODfMyuNuG59rHtw1StpNjde1A=
+
+ Headers/JLOtaAdv.h
+
+ 4Mj6y77mEbeHdo+4OgFL9yf+E0c=
+
+ Headers/JLSoundBoxAdv.h
+
+ 9psoYa5IuZ6p/X9FRRnLe5THJMQ=
+
+ Headers/JLSoundCardAdv.h
+
+ Q5T5xqjNDkTS+Niqp/KpoD9vipY=
+
+ Headers/JLTwsAdv.h
+
+ whLObetTxteRXS580FiZ1/A3Yzo=
+
+ Headers/JLWatchAdv.h
+
+ gK+FyDcSe6OVJK11wqqm1ppRE9k=
+
+ Headers/JL_AdvParse.h
+
+ gtcFkie1/FuAHO4WI/GUyN9chKY=
+
+ Info.plist
+
+ y32GLYYZ4FDhJGOjUkYUZfxaRn8=
+
+ Modules/module.modulemap
+
+ hBvb1e7FRkpwYoECUsVQBBscN38=
+
+
+ files2
+
+ Headers/JLAdvParse.h
+
+ hash
+
+ 64SI1XBWnV1VmXIYu8XpmwMpE04=
+
+ hash2
+
+ ZG6RQ7l2Ko9IXNo517Aimfq7d03KANKIIPV09hZSFrg=
+
+
+ Headers/JLChargingBoxAdv.h
+
+ hash
+
+ dxEumtBFtKzehtXyVAacIJk/UU4=
+
+ hash2
+
+ Bci4NCRbpGrT/YgMlRkA2DjX/lY/o8VmxkWPNtV+DjA=
+
+
+ Headers/JLDevicesAdv.h
+
+ hash
+
+ WG6Ivw9lqj20J5OXda4lXMvAsig=
+
+ hash2
+
+ Mxf6qWhX6ctmSC0RVl7gdK4koCGeaUr8omEI9+9PMvc=
+
+
+ Headers/JLEarphoneAdv.h
+
+ hash
+
+ fJODfMyuNuG59rHtw1StpNjde1A=
+
+ hash2
+
+ WThhDcnj1tcLW3Lrp2VUET7rXC/8iv9Y1dtAdPg0yWs=
+
+
+ Headers/JLOtaAdv.h
+
+ hash
+
+ 4Mj6y77mEbeHdo+4OgFL9yf+E0c=
+
+ hash2
+
+ HuR8+O4ONYywZcporXuxlzO1xXOtZZqm/P9+s8yj+OI=
+
+
+ Headers/JLSoundBoxAdv.h
+
+ hash
+
+ 9psoYa5IuZ6p/X9FRRnLe5THJMQ=
+
+ hash2
+
+ Iqjsp9NyRvmdlXu0gN7zltuwg75M+Kc9qFaTSHStolA=
+
+
+ Headers/JLSoundCardAdv.h
+
+ hash
+
+ Q5T5xqjNDkTS+Niqp/KpoD9vipY=
+
+ hash2
+
+ WTBLq2+eyH5+TrY08Gh3/yReEWRnKg9UOCJmz56bnkE=
+
+
+ Headers/JLTwsAdv.h
+
+ hash
+
+ whLObetTxteRXS580FiZ1/A3Yzo=
+
+ hash2
+
+ w6Ia/stHXZvCfmmPgTEpBj7A6haG6O+E0MeXH/fNKmA=
+
+
+ Headers/JLWatchAdv.h
+
+ hash
+
+ gK+FyDcSe6OVJK11wqqm1ppRE9k=
+
+ hash2
+
+ 7iXBmticKJ52uKE+6RrHJt5ES0gq2Xan5WIG/w0sCyk=
+
+
+ Headers/JL_AdvParse.h
+
+ hash
+
+ gtcFkie1/FuAHO4WI/GUyN9chKY=
+
+ hash2
+
+ t61emyM8slC+fTJM6XnBxjTDrpY7xvhUK5gCXfQf/3E=
+
+
+ Modules/module.modulemap
+
+ hash
+
+ hBvb1e7FRkpwYoECUsVQBBscN38=
+
+ hash2
+
+ F65y3OGliGsHZpxzdTdQxUwgmJdHiihk1gvX6sJzhxA=
+
+
+
+ rules
+
+ ^.*
+
+ ^.*\.lproj/
+
+ optional
+
+ weight
+ 1000
+
+ ^.*\.lproj/locversion.plist$
+
+ omit
+
+ weight
+ 1100
+
+ ^Base\.lproj/
+
+ weight
+ 1010
+
+ ^version.plist$
+
+
+ rules2
+
+ .*\.dSYM($|/)
+
+ weight
+ 11
+
+ ^(.*/)?\.DS_Store$
+
+ omit
+
+ weight
+ 2000
+
+ ^.*
+
+ ^.*\.lproj/
+
+ optional
+
+ weight
+ 1000
+
+ ^.*\.lproj/locversion.plist$
+
+ omit
+
+ weight
+ 1100
+
+ ^Base\.lproj/
+
+ weight
+ 1010
+
+ ^Info\.plist$
+
+ omit
+
+ weight
+ 20
+
+ ^PkgInfo$
+
+ omit
+
+ weight
+ 20
+
+ ^embedded\.provisionprofile$
+
+ weight
+ 20
+
+ ^version\.plist$
+
+ weight
+ 20
+
+
+
+
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/Info.plist b/local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/Info.plist
new file mode 100644
index 000000000..dd9c214de
--- /dev/null
+++ b/local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/Info.plist
@@ -0,0 +1,44 @@
+
+
+
+
+ AvailableLibraries
+
+
+ BinaryPath
+ JL_HashPair.framework/JL_HashPair
+ LibraryIdentifier
+ ios-arm64
+ LibraryPath
+ JL_HashPair.framework
+ SupportedArchitectures
+
+ arm64
+
+ SupportedPlatform
+ ios
+
+
+ BinaryPath
+ JL_HashPair.framework/JL_HashPair
+ LibraryIdentifier
+ ios-arm64_x86_64-simulator
+ LibraryPath
+ JL_HashPair.framework
+ SupportedArchitectures
+
+ arm64
+ x86_64
+
+ SupportedPlatform
+ ios
+ SupportedPlatformVariant
+ simulator
+
+
+ CFBundlePackageType
+ XFWK
+ XCFrameworkFormatVersion
+ 1.0
+
+
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64/JL_HashPair.framework/Headers/BtHash.h b/local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64/JL_HashPair.framework/Headers/BtHash.h
new file mode 100644
index 000000000..af9b09ea9
--- /dev/null
+++ b/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
+
+@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
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64/JL_HashPair.framework/Headers/JLHashHandler.h b/local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64/JL_HashPair.framework/Headers/JLHashHandler.h
new file mode 100644
index 000000000..c42b34a55
--- /dev/null
+++ b/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
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef void(^JLHashBlock)(BOOL ret);
+
+@protocol JLHashHandlerDelegate
+
+/// 需要发送到设备校验认证的数据
+/// - Parameter data: 数据
+-(void)hashOnPairOutputData:(NSData*)data;
+
+@end
+
+
+/// 设备认证
+@interface JLHashHandler : NSObject
+
+@property(nonatomic,weak)id 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
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64/JL_HashPair.framework/Headers/JL_HashPair.h b/local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64/JL_HashPair.framework/Headers/JL_HashPair.h
new file mode 100644
index 000000000..95d62c48d
--- /dev/null
+++ b/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
+
+//! 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
+
+#import
+#import
+#import
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64/JL_HashPair.framework/Headers/JL_ble_pair.h b/local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64/JL_HashPair.framework/Headers/JL_ble_pair.h
new file mode 100644
index 000000000..bce37ee6c
--- /dev/null
+++ b/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
+#include
+
+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 */
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64/JL_HashPair.framework/Info.plist b/local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64/JL_HashPair.framework/Info.plist
new file mode 100644
index 000000000..fdbde3775
Binary files /dev/null and b/local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64/JL_HashPair.framework/Info.plist differ
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64/JL_HashPair.framework/JL_HashPair b/local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64/JL_HashPair.framework/JL_HashPair
new file mode 100755
index 000000000..fe3eb3303
Binary files /dev/null and b/local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64/JL_HashPair.framework/JL_HashPair differ
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64/JL_HashPair.framework/Modules/module.modulemap b/local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64/JL_HashPair.framework/Modules/module.modulemap
new file mode 100644
index 000000000..4e820d974
--- /dev/null
+++ b/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 * }
+}
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64_x86_64-simulator/JL_HashPair.framework/Headers/BtHash.h b/local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64_x86_64-simulator/JL_HashPair.framework/Headers/BtHash.h
new file mode 100644
index 000000000..af9b09ea9
--- /dev/null
+++ b/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
+
+@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
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64_x86_64-simulator/JL_HashPair.framework/Headers/JLHashHandler.h b/local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64_x86_64-simulator/JL_HashPair.framework/Headers/JLHashHandler.h
new file mode 100644
index 000000000..c42b34a55
--- /dev/null
+++ b/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
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef void(^JLHashBlock)(BOOL ret);
+
+@protocol JLHashHandlerDelegate
+
+/// 需要发送到设备校验认证的数据
+/// - Parameter data: 数据
+-(void)hashOnPairOutputData:(NSData*)data;
+
+@end
+
+
+/// 设备认证
+@interface JLHashHandler : NSObject
+
+@property(nonatomic,weak)id 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
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64_x86_64-simulator/JL_HashPair.framework/Headers/JL_HashPair.h b/local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64_x86_64-simulator/JL_HashPair.framework/Headers/JL_HashPair.h
new file mode 100644
index 000000000..95d62c48d
--- /dev/null
+++ b/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
+
+//! 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
+
+#import
+#import
+#import
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64_x86_64-simulator/JL_HashPair.framework/Headers/JL_ble_pair.h b/local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64_x86_64-simulator/JL_HashPair.framework/Headers/JL_ble_pair.h
new file mode 100644
index 000000000..bce37ee6c
--- /dev/null
+++ b/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
+#include
+
+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 */
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64_x86_64-simulator/JL_HashPair.framework/Info.plist b/local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64_x86_64-simulator/JL_HashPair.framework/Info.plist
new file mode 100644
index 000000000..4d99eceaf
Binary files /dev/null and b/local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64_x86_64-simulator/JL_HashPair.framework/Info.plist differ
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64_x86_64-simulator/JL_HashPair.framework/JL_HashPair b/local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64_x86_64-simulator/JL_HashPair.framework/JL_HashPair
new file mode 100755
index 000000000..be2445248
Binary files /dev/null and b/local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64_x86_64-simulator/JL_HashPair.framework/JL_HashPair differ
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64_x86_64-simulator/JL_HashPair.framework/Modules/module.modulemap b/local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64_x86_64-simulator/JL_HashPair.framework/Modules/module.modulemap
new file mode 100644
index 000000000..4e820d974
--- /dev/null
+++ b/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 * }
+}
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64_x86_64-simulator/JL_HashPair.framework/_CodeSignature/CodeResources b/local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64_x86_64-simulator/JL_HashPair.framework/_CodeSignature/CodeResources
new file mode 100644
index 000000000..9022691a5
--- /dev/null
+++ b/local_plugins/device_jieli/ios/Frameworks/JL_HashPair.xcframework/ios-arm64_x86_64-simulator/JL_HashPair.framework/_CodeSignature/CodeResources
@@ -0,0 +1,177 @@
+
+
+
+
+ files
+
+ Headers/BtHash.h
+
+ EdZDmmVVm0KY3D72UHE3hQF42e4=
+
+ Headers/JLHashHandler.h
+
+ ArAEdyp9k5H5o4gFjW9zdx+0ISY=
+
+ Headers/JL_HashPair.h
+
+ Y9dInJ7eyVXJ8WOASyZGNDDIj9s=
+
+ Headers/JL_ble_pair.h
+
+ YP6GQrFs1nWR8BkMoj1fQdKHKKM=
+
+ Info.plist
+
+ pLA2PfPyxsguwM09KFXPq/Cy2ko=
+
+ Modules/module.modulemap
+
+ 6wQFoRjNQqLop5Z3m/K5slHiG2k=
+
+
+ files2
+
+ Headers/BtHash.h
+
+ hash
+
+ EdZDmmVVm0KY3D72UHE3hQF42e4=
+
+ hash2
+
+ EfOAmi/ycUONPu8OgPUuPkc9caXqUhvVXE27JNmmnPk=
+
+
+ Headers/JLHashHandler.h
+
+ hash
+
+ ArAEdyp9k5H5o4gFjW9zdx+0ISY=
+
+ hash2
+
+ 7iuW7k7IBL4tf/bE1O3SudVyeFxG8YHoo7DqZGFdSBI=
+
+
+ Headers/JL_HashPair.h
+
+ hash
+
+ Y9dInJ7eyVXJ8WOASyZGNDDIj9s=
+
+ hash2
+
+ 5Ow8T39Md9cD7Jb7iMaoihnIJhv8GHHIjGAsgZG//Og=
+
+
+ Headers/JL_ble_pair.h
+
+ hash
+
+ YP6GQrFs1nWR8BkMoj1fQdKHKKM=
+
+ hash2
+
+ ggTJvYOE/W4Tmghs665eiywakMiTsvgl7PeEayUkKqQ=
+
+
+ Modules/module.modulemap
+
+ hash
+
+ 6wQFoRjNQqLop5Z3m/K5slHiG2k=
+
+ hash2
+
+ N+WiNcfG40LwaFvJZeLG5iNA48ZbrW0Oph/B9U+7i9U=
+
+
+
+ rules
+
+ ^.*
+
+ ^.*\.lproj/
+
+ optional
+
+ weight
+ 1000
+
+ ^.*\.lproj/locversion.plist$
+
+ omit
+
+ weight
+ 1100
+
+ ^Base\.lproj/
+
+ weight
+ 1010
+
+ ^version.plist$
+
+
+ rules2
+
+ .*\.dSYM($|/)
+
+ weight
+ 11
+
+ ^(.*/)?\.DS_Store$
+
+ omit
+
+ weight
+ 2000
+
+ ^.*
+
+ ^.*\.lproj/
+
+ optional
+
+ weight
+ 1000
+
+ ^.*\.lproj/locversion.plist$
+
+ omit
+
+ weight
+ 1100
+
+ ^Base\.lproj/
+
+ weight
+ 1010
+
+ ^Info\.plist$
+
+ omit
+
+ weight
+ 20
+
+ ^PkgInfo$
+
+ omit
+
+ weight
+ 20
+
+ ^embedded\.provisionprofile$
+
+ weight
+ 20
+
+ ^version\.plist$
+
+ weight
+ 20
+
+
+
+
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/Info.plist b/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/Info.plist
new file mode 100644
index 000000000..567764096
--- /dev/null
+++ b/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/Info.plist
@@ -0,0 +1,44 @@
+
+
+
+
+ AvailableLibraries
+
+
+ BinaryPath
+ JL_OTALib.framework/JL_OTALib
+ LibraryIdentifier
+ ios-arm64
+ LibraryPath
+ JL_OTALib.framework
+ SupportedArchitectures
+
+ arm64
+
+ SupportedPlatform
+ ios
+
+
+ BinaryPath
+ JL_OTALib.framework/JL_OTALib
+ LibraryIdentifier
+ ios-arm64_x86_64-simulator
+ LibraryPath
+ JL_OTALib.framework
+ SupportedArchitectures
+
+ arm64
+ x86_64
+
+ SupportedPlatform
+ ios
+ SupportedPlatformVariant
+ simulator
+
+
+ CFBundlePackageType
+ XFWK
+ XCFrameworkFormatVersion
+ 1.0
+
+
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64/JL_OTALib.framework/Headers/JLOTAFile.h b/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64/JL_OTALib.framework/Headers/JLOTAFile.h
new file mode 100644
index 000000000..2ab4541b0
--- /dev/null
+++ b/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
+
+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
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64/JL_OTALib.framework/Headers/JLOtaCustom.h b/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64/JL_OTALib.framework/Headers/JLOtaCustom.h
new file mode 100644
index 000000000..4740d6872
--- /dev/null
+++ b/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
+
+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
+
+/// 自定义命令回调
+/// - Parameter data: 自定义命令对象
+-(void)otaCustomReceiveData:(JLOtaCustomData *)data;
+
+@end
+
+/// 自定义命令
+@interface JLOtaCustom : NSObject
+
+/// 自定义命令
+/// - Parameters:
+/// - delegate: 代理回调
+/// - manager: 升级对象
+-(instancetype)initWithDelegate:(id)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
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64/JL_OTALib.framework/Headers/JLOtaReConnectOption.h b/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64/JL_OTALib.framework/Headers/JLOtaReConnectOption.h
new file mode 100644
index 000000000..9b0ecc2c6
--- /dev/null
+++ b/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
+
+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
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64/JL_OTALib.framework/Headers/JL_OTALib.h b/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64/JL_OTALib.framework/Headers/JL_OTALib.h
new file mode 100644
index 000000000..83d1764c2
--- /dev/null
+++ b/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
+
+//! 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
+#import
+#import
+#import
+#import
+#import
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64/JL_OTALib.framework/Headers/JL_OTAManager.h b/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64/JL_OTALib.framework/Headers/JL_OTAManager.h
new file mode 100644
index 000000000..02d53c94f
--- /dev/null
+++ b/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
+#import
+
+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
+
+/// 即将被发送的数据
+/// @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 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
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64/JL_OTALib.framework/Headers/jl_ufw.h b/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64/JL_OTALib.framework/Headers/jl_ufw.h
new file mode 100644
index 000000000..313c99ff0
--- /dev/null
+++ b/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
+#include
+#include
+//#include
+//#include
+//
+//#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
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64/JL_OTALib.framework/Info.plist b/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64/JL_OTALib.framework/Info.plist
new file mode 100644
index 000000000..6ca8a27f2
Binary files /dev/null and b/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64/JL_OTALib.framework/Info.plist differ
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64/JL_OTALib.framework/JL_OTALib b/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64/JL_OTALib.framework/JL_OTALib
new file mode 100755
index 000000000..45b500d0f
Binary files /dev/null and b/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64/JL_OTALib.framework/JL_OTALib differ
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64/JL_OTALib.framework/Modules/module.modulemap b/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64/JL_OTALib.framework/Modules/module.modulemap
new file mode 100644
index 000000000..fbeacb707
--- /dev/null
+++ b/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 * }
+}
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/Headers/JLOTAFile.h b/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/Headers/JLOTAFile.h
new file mode 100644
index 000000000..2ab4541b0
--- /dev/null
+++ b/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
+
+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
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/Headers/JLOtaCustom.h b/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/Headers/JLOtaCustom.h
new file mode 100644
index 000000000..4740d6872
--- /dev/null
+++ b/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
+
+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
+
+/// 自定义命令回调
+/// - Parameter data: 自定义命令对象
+-(void)otaCustomReceiveData:(JLOtaCustomData *)data;
+
+@end
+
+/// 自定义命令
+@interface JLOtaCustom : NSObject
+
+/// 自定义命令
+/// - Parameters:
+/// - delegate: 代理回调
+/// - manager: 升级对象
+-(instancetype)initWithDelegate:(id)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
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/Headers/JLOtaReConnectOption.h b/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/Headers/JLOtaReConnectOption.h
new file mode 100644
index 000000000..9b0ecc2c6
--- /dev/null
+++ b/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
+
+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
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/Headers/JL_OTALib.h b/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/Headers/JL_OTALib.h
new file mode 100644
index 000000000..83d1764c2
--- /dev/null
+++ b/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
+
+//! 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
+#import
+#import
+#import
+#import
+#import
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/Headers/JL_OTAManager.h b/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/Headers/JL_OTAManager.h
new file mode 100644
index 000000000..02d53c94f
--- /dev/null
+++ b/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
+#import
+
+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
+
+/// 即将被发送的数据
+/// @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 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
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/Headers/jl_ufw.h b/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/Headers/jl_ufw.h
new file mode 100644
index 000000000..313c99ff0
--- /dev/null
+++ b/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
+#include
+#include
+//#include
+//#include
+//
+//#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
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/Info.plist b/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/Info.plist
new file mode 100644
index 000000000..e118ebce9
Binary files /dev/null and b/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/Info.plist differ
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/JL_OTALib b/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/JL_OTALib
new file mode 100755
index 000000000..23599f86d
Binary files /dev/null and b/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/JL_OTALib differ
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/Modules/module.modulemap b/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/Modules/module.modulemap
new file mode 100644
index 000000000..fbeacb707
--- /dev/null
+++ b/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 * }
+}
diff --git a/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/_CodeSignature/CodeResources b/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/_CodeSignature/CodeResources
new file mode 100644
index 000000000..233cf6377
--- /dev/null
+++ b/local_plugins/device_jieli/ios/Frameworks/JL_OTALib.xcframework/ios-arm64_x86_64-simulator/JL_OTALib.framework/_CodeSignature/CodeResources
@@ -0,0 +1,207 @@
+
+
+
+
+ files
+
+ Headers/JLOTAFile.h
+
+ OCi8PoI3GQr4HUxHQQytlXYCxe8=
+
+ Headers/JLOtaCustom.h
+
+ ohGYE+IOCliAaeZaO5VdRBwHvWo=
+
+ Headers/JLOtaReConnectOption.h
+
+ xqKc873u51zqagJXS172BK6h9Tg=
+
+ Headers/JL_OTALib.h
+
+ tH9kHWi/DKzq8j2NoSg0wXoBAro=
+
+ Headers/JL_OTAManager.h
+
+ PMESdvB6Bcu7gn1YJqH1tOi0eEw=
+
+ Headers/jl_ufw.h
+
+ KBTDPNzyz3mtGLkvJLZ7GIRKNeM=
+
+ Info.plist
+
+ WfMSuIuMgNEEbLR1JZENJAqvP5Y=
+
+ Modules/module.modulemap
+
+ Djaqrf2BV/5uLRNN6e4M1DPfyG4=
+
+
+ files2
+
+ Headers/JLOTAFile.h
+
+ hash
+
+ OCi8PoI3GQr4HUxHQQytlXYCxe8=
+
+ hash2
+
+ lz4Ha2Z62XzIHqsHW1574zMjx1W+IhrqaCJK8HGIs/o=
+
+
+ Headers/JLOtaCustom.h
+
+ hash
+
+ ohGYE+IOCliAaeZaO5VdRBwHvWo=
+
+ hash2
+
+ KntKbJMahP2WujBsJDiGFbjDQvJdw3yo3CqTohYnPcE=
+
+
+ Headers/JLOtaReConnectOption.h
+
+ hash
+
+ xqKc873u51zqagJXS172BK6h9Tg=
+
+ hash2
+
+ obE+hckXBKKcYUtitl4rad/7W1Bi5ciNOH3ZPml7hY4=
+
+
+ Headers/JL_OTALib.h
+
+ hash
+
+ tH9kHWi/DKzq8j2NoSg0wXoBAro=
+
+ hash2
+
+ /E9fkD4b67lRdPY5BqxqffRv3H48y1qpNWHYw+a65Cg=
+
+
+ Headers/JL_OTAManager.h
+
+ hash
+
+ PMESdvB6Bcu7gn1YJqH1tOi0eEw=
+
+ hash2
+
+ uHRHY8s9UMaaynCPFZOCTid9vmTW5l5PVNI5pAyQK/I=
+
+
+ Headers/jl_ufw.h
+
+ hash
+
+ KBTDPNzyz3mtGLkvJLZ7GIRKNeM=
+
+ hash2
+
+ l3c9CmVcHyBHIxKSG6GlCBpaZjnp6+fd4iKu2jGMyuE=
+
+
+ Modules/module.modulemap
+
+ hash
+
+ Djaqrf2BV/5uLRNN6e4M1DPfyG4=
+
+ hash2
+
+ CQv4Q+xyzKhKSJpAY8gU98Qv9Wv1W16ILQ5MGAKukrA=
+
+
+
+ rules
+
+ ^.*
+
+ ^.*\.lproj/
+
+ optional
+
+ weight
+ 1000
+
+ ^.*\.lproj/locversion.plist$
+
+ omit
+
+ weight
+ 1100
+
+ ^Base\.lproj/
+
+ weight
+ 1010
+
+ ^version.plist$
+
+
+ rules2
+
+ .*\.dSYM($|/)
+
+ weight
+ 11
+
+ ^(.*/)?\.DS_Store$
+
+ omit
+
+ weight
+ 2000
+
+ ^.*
+
+ ^.*\.lproj/
+
+ optional
+
+ weight
+ 1000
+
+ ^.*\.lproj/locversion.plist$
+
+ omit
+
+ weight
+ 1100
+
+ ^Base\.lproj/
+
+ weight
+ 1010
+
+ ^Info\.plist$
+
+ omit
+
+ weight
+ 20
+
+ ^PkgInfo$
+
+ omit
+
+ weight
+ 20
+
+ ^embedded\.provisionprofile$
+
+ weight
+ 20
+
+ ^version\.plist$
+
+ weight
+ 20
+
+
+
+