@@ -0,0 +1,38 @@ | |||
#ifdef __OBJC__ | |||
#import <UIKit/UIKit.h> | |||
#else | |||
#ifndef FOUNDATION_EXPORT | |||
#if defined(__cplusplus) | |||
#define FOUNDATION_EXPORT extern "C" | |||
#else | |||
#define FOUNDATION_EXPORT extern | |||
#endif | |||
#endif | |||
#endif | |||
#import "ELAILinkBleManager+WIFI.h" | |||
#import "ELAILinkBleManager.h" | |||
#import "ELAILinkBleManagerProtocol.h" | |||
#import "ELAILinkPeripheral.h" | |||
#import "ELTLVModel.h" | |||
#import "NELBleManagerHeader.h" | |||
#import "NELMacAddressModel.h" | |||
#import "NSData+AILinkBle.h" | |||
#import "AILinkBleSDK_Version.h" | |||
#import "ELAILinkEncryptTool.h" | |||
#import "ELAILinkLicenseTool.h" | |||
#import "ELBleDisposeDataTool.h" | |||
#import "ELBleWifiDetailModel.h" | |||
#import "ELExSupportDeviceType.h" | |||
#import "ELSDKHeader.h" | |||
#import "AICareComponentRingBleSDK_Version.h" | |||
#import "BM40BleProtocol.h" | |||
#import "DialogOTATool.h" | |||
#import "ELAILinkBleManager+SmartRing.h" | |||
#import "ELSmartRingBleHeader.h" | |||
#import "ELSmartRingBleParser.h" | |||
#import "ELSmartRingManager.h" | |||
FOUNDATION_EXPORT double AICareComponentRingBleSDKVersionNumber; | |||
FOUNDATION_EXPORT const unsigned char AICareComponentRingBleSDKVersionString[]; | |||
@@ -0,0 +1,28 @@ | |||
// | |||
// ELAILinkEncryptTool.h | |||
// AILinkBleSDK | |||
// | |||
// Created by LarryZhang on 2022/11/25. | |||
// | |||
#import <Foundation/Foundation.h> | |||
NS_ASSUME_NONNULL_BEGIN | |||
/// 普通加密握手数据 | |||
void AILinkEncrypt(uint8_t *p); | |||
/// License 加密握手数据 | |||
void AILinkEncryptWithCidVidPid(uint8_t *p, uint16_t cid, uint16_t vid, uint16_t pid); | |||
/// License Key | |||
void AILinkGenKeyWithCidVidPid(uint32_t *key, uint32_t cid, uint16_t vid, uint16_t pid); | |||
/// 自定义握手key功能方法 ***早期,即将废弃方法*** | |||
BOOL checkCidVidPid(uint16_t cid, uint16_t vid, uint16_t pid, NSString *secret) DEPRECATED_MSG_ATTRIBUTE("即将废弃方法"); | |||
@interface ELAILinkEncryptTool : NSObject | |||
@end | |||
NS_ASSUME_NONNULL_END |
@@ -0,0 +1,21 @@ | |||
// | |||
// ELAILinkLicenseTool.h | |||
// AILinkBleSDK | |||
// | |||
// Created by LarryZhang on 2023/6/6. | |||
// | |||
#import <Foundation/Foundation.h> | |||
NS_ASSUME_NONNULL_BEGIN | |||
/// license 授权方式,独立握手 key, A7 不加密 | |||
BOOL checkLicense(uint32_t cid, uint16_t vid, uint16_t pid); | |||
@interface ELAILinkLicenseTool : NSObject | |||
+ (void)setLicenseData:(NSArray <NSData *>*)licenseDataArray; | |||
@end | |||
NS_ASSUME_NONNULL_END |
@@ -0,0 +1,233 @@ | |||
// | |||
// ELBleDisposeDataTool.h | |||
// Elink | |||
// | |||
// Created by iot_user on 2019/4/23. | |||
// Copyright © 2019 iot_iMac. All rights reserved. | |||
// | |||
#import <Foundation/Foundation.h> | |||
#import "ELSDKHeader.h" | |||
NS_ASSUME_NONNULL_BEGIN | |||
@interface ELBleDisposeDataTool : NSObject | |||
#pragma mark 校验和 | |||
+(BOOL)checksum:(NSData *)data; | |||
#pragma mark 广播设备校验和 | |||
+(BOOL)broadcastChecksum:(NSData *)data; | |||
#pragma mark ============ 解析A6数据 ============== | |||
/** | |||
解析电池数据 | |||
@param data 原始数据 | |||
@return 电池充电状态和电量的结构体 | |||
*/ | |||
+(struct ELBatteryStruct)analysisBattery:(NSData *)data; | |||
/** | |||
解析CID、VID、PID | |||
@param data 原始数据 | |||
@return CID,VID,PID的结构体 | |||
*/ | |||
+(struct ELDIDStruct)analysisDid:(NSData *)data; | |||
/** | |||
解析模块时间 | |||
@param data 原始数据 | |||
@return yyyy-MM-dd HH:mm:ss | |||
*/ | |||
+(NSString *)analysisBluetoothDate:(NSData *)data; | |||
/** | |||
解析MCU软硬件版本号 | |||
@param data 原始数据 | |||
@return MCU软硬件版本号 | |||
*/ | |||
+(NSString *)analysisMCUVersion:(NSData *)data; | |||
/** | |||
解析BM模块软硬件版本号 | |||
@param data 原始数据 | |||
@return BM模块软硬件版本号 | |||
*/ | |||
+ (NSString *)analysisBMVersion:(NSData *)data; | |||
+ (NSString *)analysisBMVersionPro:(NSData *)data; | |||
/** | |||
解析MAC地址 | |||
@param data 原始数据 | |||
@return MAC地址 | |||
*/ | |||
+(NSString *)analysisBluetoothMACAddrress:(NSData *)data; | |||
/** | |||
解析模块状态 | |||
@param data 原始数据 | |||
@return 结构体 | |||
*/ | |||
+(struct ELMCUStateStruct)analysisBluetoothConnectState:(NSData *)data; | |||
//重构 | |||
+ (ELWMStateStruct)analysisWMState:(NSData *)data; | |||
/** | |||
解析模块通信模式 | |||
@param data 原始数据 | |||
@return 模式 | |||
*/ | |||
+(ELCommunicationModeType)analysisBluetoothCommunicationMode:(NSData *)data; | |||
/** | |||
解析自动睡眠时间 | |||
@param data 原始数据 | |||
@return 结构体 | |||
*/ | |||
+(struct ELAutoSleepTimeStruct)analysisBluetoothAutoSleepTime:(NSData *)data; | |||
/** | |||
解析主从模式数据 | |||
@param data 原始数据 | |||
@return 模式 | |||
0:从机模式 1:主机模式 | |||
*/ | |||
+(int)analysisBluetoothMCUMode:(NSData *)data; | |||
/** | |||
解析UUID | |||
@param data 原始数据 | |||
@return UUID 的结构体 | |||
*/ | |||
+(struct ELUUIDStruct)analysisBluetoothUUID:(NSData *)data; | |||
/** | |||
解析大小端序 | |||
@param data 原始数据 | |||
@return 大小端序 | |||
*/ | |||
+(int)analysisBluetoothMACAddressType:(NSData *)data; | |||
/** | |||
解析串口波特率 | |||
@param data 原始数据 | |||
@return 波特率 | |||
0:9600 | |||
1:19200 | |||
2:38400 | |||
3:57600 | |||
4:115200 | |||
5:921600 | |||
*/ | |||
+(int)analysisBluetoothSerialPostBaudRate:(NSData *)data; | |||
/** | |||
解析发射功率 | |||
@param data 原始数据 | |||
@return 发射功率:1~10 | |||
*/ | |||
+(int)analysisBluetoothTransmittingPower:(NSData *)data; | |||
/** | |||
解析蓝牙连接间隔 | |||
@param data 原始数据 | |||
@return 连接间隔时间的结构体 | |||
*/ | |||
+(struct ELConnectIntervalStruct)analysisBluetoothConnectInterval:(NSData *)data; | |||
/** | |||
解析蓝牙广播间隔时间 | |||
@param data 蓝牙发送的原始数据 | |||
@return 广播间隔 | |||
*/ | |||
+(int)analysisBluetoothBroadcastInterval:(NSData *)data; | |||
/** | |||
解析蓝牙名称 | |||
@param data 蓝牙发送的原始数据 | |||
@return 蓝牙名称 | |||
*/ | |||
+(NSString *)analysisBluetoothName:(NSData *)data; | |||
/** | |||
解析设备支持的体重数组 | |||
@param data 蓝牙发送的原始数据 | |||
@return 体重单位数组,内容为ELDeviceWeightUnit枚举 | |||
*/ | |||
+ (NSArray<NSNumber *> *)analysisBluetoothSupportWeightUnitArray:(NSData *)data; | |||
/** | |||
解析设备支持的身高数组 | |||
@param data 蓝牙发送的原始数据 | |||
@return 身高单位数组,内容为ELDeviceHeightUnit枚举 | |||
*/ | |||
+ (NSArray<NSNumber *> *)analysisBluetoothSupportHeightUnitArray:(NSData *)data; | |||
/** | |||
解析设备支持的温度数组 | |||
@param data 蓝牙发送的原始数据 | |||
@return 温度单位数组,内容为ELDeviceTemperatureUnit枚举 | |||
*/ | |||
+ (NSArray<NSNumber *> *)analysisBluetoothSupportTemperatureUnitArray:(NSData *)data; | |||
/** | |||
解析设备支持的血压数组 | |||
*/ | |||
+ (NSArray<NSNumber *> *)analysisBluetoothSupportBloodPressureUnitArray:(NSData *)data; | |||
/** | |||
解析设备支持的血压数组 | |||
@param data 蓝牙发送的原始数据 | |||
@return 血压单位数组,内容为ELDeviceTemperatureUnit枚举 | |||
*/ | |||
+ (NSArray<NSNumber *> *)analysisBluetoothSupportPressureUnitArray:(NSData *)data; | |||
/// 解析设备支持的血糖仪单位 | |||
/// @param data 蓝牙发送的原始数据 | |||
+ (NSArray<NSNumber *> *)analysisBluetoothSupportBloodSugarUnitArray:(NSData *)data; | |||
/// 解析设备支持的体积单位 | |||
/// @param data 蓝牙发送的原始数据 | |||
+ (NSArray<NSNumber *> *)analysisBluetoothSupportVolumUnitArray:(NSData *)data; | |||
/// 解析设备支持的营养秤单位 | |||
/// @param data 蓝牙发送的原始数据 | |||
+ (NSArray<NSNumber *> *)analysisBluetoothSupportNutritionUnitArray:(NSData *)data; | |||
/** | |||
解析蓝牙接收密钥的结果 | |||
@param data 原数据 | |||
@return YES:成功,NO失败 | |||
*/ | |||
+(BOOL)analysisBluetoothReceiveKeyState:(NSData *)data; | |||
/** | |||
解析设备基本信息 | |||
@param data 原数据 | |||
@return 设备基本信息 | |||
*/ | |||
+(NSData *)analysisBluetoothReceiveBasicInfoData:(NSData *)data; | |||
@end | |||
NS_ASSUME_NONNULL_END |
@@ -0,0 +1,44 @@ | |||
// | |||
// ELBleWifiDetailModel.h | |||
// Elink | |||
// | |||
// Created by iot_user on 2019/12/30. | |||
// Copyright © 2019 iot_iMac. All rights reserved. | |||
// | |||
#import <Foundation/Foundation.h> | |||
typedef NS_ENUM(NSUInteger, ELBleWifiSecureType) { | |||
ELBleWifiSecureTypeOpen = 0, | |||
ELBleWifiSecureTypeWEP = 1, | |||
ELBleWifiSecureTypeWPA_PSK = 2, | |||
ELBleWifiSecureTypeWPA2_PSK = 3, | |||
ELBleWifiSecureTypeWPA_WPA_2_PSK = 4, | |||
ELBleWifiSecureTypeWPA2_ENTERPRISE = 5, | |||
}; | |||
typedef NS_ENUM(NSUInteger, ELBleWifiUseState) { | |||
ELBleWifiUseStateUnknown = 0, //Strange wifi(陌生wifi) | |||
ELBleWifiUseStateSaved = 1, //Wifi with saved password(保存过的密码的wifi) | |||
ELBleWifiUseStateConnected = 2, //Currently connected wifi(目前连接着的wifi) | |||
}; | |||
NS_ASSUME_NONNULL_BEGIN | |||
@interface ELBleWifiDetailModel : NSObject<NSCopying> | |||
//wifi number(wifi编号) | |||
@property (nonatomic, assign) int wifiNumber; | |||
//wifi name(wifi 名字) | |||
@property (nonatomic, copy) NSString *wifiName; | |||
//wifi MAC address (little endian)(wifi MAC地址(小端序)) | |||
@property (nonatomic, copy) NSData *macData; | |||
//Signal strength(信号强度) | |||
@property (nonatomic, assign) int wifiRssi; | |||
//Security type(安全类型) | |||
@property (nonatomic, assign) ELBleWifiSecureType secureType; | |||
//wifi status(wifi状态) | |||
@property (nonatomic, assign) ELBleWifiUseState wifiState; | |||
@end | |||
NS_ASSUME_NONNULL_END |
@@ -0,0 +1,41 @@ | |||
// | |||
// ELTLVModel.h | |||
// AILinkBleSDK | |||
// | |||
// Created by LarryZhang on 2022/9/6. | |||
// Copyright © 2022 IOT. All rights reserved. | |||
// | |||
#import <Foundation/Foundation.h> | |||
NS_ASSUME_NONNULL_BEGIN | |||
//***** type 1 Byte lengh 1 Byte | |||
@interface ELTLVModel : NSObject | |||
@property(nonatomic, assign) UInt8 type; //T | |||
@property(nonatomic, assign, readonly) UInt8 length; //L | |||
@property(nonatomic, strong) NSData *value; //V | |||
//@property(nonatomic, strong) NSNumber *_Nullable cmd; //cmd属性 (独立属性,不包含在tlvData) | |||
@property(nonatomic, strong, readonly) NSData *data; | |||
@property(nonatomic, strong, readonly) NSData *tlvData; //same as data | |||
- (instancetype)initWithType:(UInt8)type; | |||
- (instancetype)initWithType:(UInt8)type value:(NSData *)value; | |||
@end | |||
@interface ELTLVModel (Tool) | |||
+ (NSArray<ELTLVModel *> *)objectArrayWithData:(NSData * _Nonnull)payloadData; | |||
@end | |||
NS_ASSUME_NONNULL_END |
@@ -0,0 +1,55 @@ | |||
// | |||
// NELMacAddressModel.h | |||
// Elink | |||
// | |||
// Created by LarryZhang on 2022/8/15. | |||
// Copyright © 2022 iot_iMac. All rights reserved. | |||
// | |||
#import <Foundation/Foundation.h> | |||
NS_ASSUME_NONNULL_BEGIN | |||
@interface NELMacAddressModel : NSObject | |||
@property (nonatomic, copy, readonly) NSString *macAddressString; | |||
// 例:{0xA1, 0xB2, 0xC3, 0xD4, 0xE5, 0xF6} ==> "A1:B2:C3:D4:E5:F6" | |||
+ (instancetype)macWithBigEndianBytes:(Byte *)bytes; | |||
// 例:{0xF6, 0xE5, 0xD4, 0xC3, 0xB2, 0xA1} ==> "A1:B2:C3:D4:E5:F6" | |||
+ (instancetype)macWithLittleEndianBytes:(Byte *)bytes; | |||
// 例:<A1B2C3D4 E5F6> ==> "A1:B2:C3:D4:E5:F6" | |||
+ (instancetype)macWithBigEndianData:(NSData *)data; | |||
// 例:<F6E5D4C3 B2A1> ==> "A1:B2:C3:D4:E5:F6" | |||
+ (instancetype)macWithLittleEndianData:(NSData *)data; | |||
// 只支持格式:"A1:B2:C3:D4:E5:F6" | |||
+ (instancetype)macWithMacString:(NSString *)macString; | |||
// 例:0xA1B2C3D4E5F6 ==> "A1:B2:C3:D4:E5:F6" | |||
+ (instancetype)macWithUIntValue:(UInt64)value; | |||
//// 例:0xF6E5D4C3B2A1 ==> "A1:B2:C3:D4:E5:F6" | |||
//+ (instancetype)macWithBigEndianUIntValue:(UInt64)value; | |||
// | |||
//// 例:0xA1B2C3D4E5F6 ==> "A1:B2:C3:D4:E5:F6" | |||
//+ (instancetype)macWithLittleEndianUIntValue:(UInt64)value; | |||
//+ (BOOL)isEqual:(ZZMacAddressModel *)mac with:(ZZMacAddressModel *)otherMac; | |||
- (BOOL)isEqualToMac:(NELMacAddressModel *)mac; | |||
#ifdef DEBUG | |||
+ (void)demo; | |||
#endif | |||
@end | |||
NS_ASSUME_NONNULL_END |
@@ -0,0 +1,35 @@ | |||
// | |||
// NSData+AILinkBle.h | |||
// AILinkBleSDK | |||
// | |||
// Created by LarryZhang on 2022/11/24. | |||
// | |||
#import <Foundation/Foundation.h> | |||
NS_ASSUME_NONNULL_BEGIN | |||
@interface NSData (AILinkBle) | |||
- (UInt32)valueU32AtLoc:(NSUInteger)loc; | |||
- (UInt32)u32:(NSUInteger)loc; //简化版 | |||
- (UInt16)valueU16AtLoc:(NSUInteger)loc; | |||
- (UInt16)u16:(NSUInteger)loc; //简化版 | |||
- (UInt8)valueU8AtLoc:(NSUInteger)loc; | |||
- (UInt8)u8:(NSUInteger)loc; //简化版 | |||
- (UInt32)valueU32LEAtLoc:(NSUInteger)loc; | |||
- (UInt32)u32LE:(NSUInteger)loc; //简化版 | |||
- (UInt16)valueU16LEAtLoc:(NSUInteger)loc; | |||
- (UInt16)u16LE:(NSUInteger)loc; //简化版 | |||
//转换 HexString | |||
- (NSString *)elHexString; | |||
+ (NSData *)elDataWithHexString:(NSString *)hexStr; | |||
@end | |||
NS_ASSUME_NONNULL_END |