You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
164 lines
5.0 KiB
164 lines
5.0 KiB
// |
|
// RTKDFUPeripheral.h |
|
// RTKOTASDK |
|
// |
|
// Created by jerome_gu on 2019/4/16. |
|
// Copyright © 2019 Realtek. All rights reserved. |
|
// |
|
|
|
#ifdef RTK_SDK_IS_STATIC_LIBRARY |
|
#import "libRTKLEFoundation.h" |
|
#import "RTKOTAPeripheral.h" |
|
#import "RTKOTAUpgradeBin.h" |
|
#else |
|
#import <RTKLEFoundation/RTKLEFoundation.h> |
|
#import <RTKOTASDK/RTKOTAPeripheral.h> |
|
#import <RTKOTASDK/RTKOTAUpgradeBin.h> |
|
#endif |
|
|
|
|
|
/*! |
|
* Values represents the phase during upgrade. |
|
*/ |
|
typedef enum : NSUInteger { |
|
RTKDFUPhaseNone, ///< The peripheral is not upgrading currently. |
|
RTKDFUPhaseSending, ///< The peripheral is receiving image bytes. |
|
RTKDFUPhaseActivating, ///< The peripheral activating images received. |
|
RTKDFUPhaseResetting, ///< The peripehral is resetting. Usual happened after encounter an upgrade error. |
|
RTKDFUPhaseCanceling, ///< The peripheral is canceling upgrade. |
|
RTKDFUPhaseReconnecting, ///< App is reconnecting to peripheral in order to send more images. |
|
RTKDFUPhaseEncounterError, ///< Upgrade is broken down for error encountered. |
|
} RTKDFUPhase; |
|
|
|
|
|
NS_ASSUME_NONNULL_BEGIN |
|
|
|
|
|
@class RTKDFUPeripheral; |
|
|
|
/** |
|
* @protocol RTKDFUPeripheralDelegate |
|
* |
|
* RTKDFUPeripheralDelegate define several addition methods for repoert upgrade update event. |
|
*/ |
|
@protocol RTKDFUPeripheralDelegate <RTKLEPeripheralDelegate> |
|
@required |
|
|
|
/** |
|
* Tell the delegate that OTA upgrade did complete. |
|
* |
|
* @param err The reason the call failed, or nil if no error occurred. |
|
*/ |
|
- (void)DFUPeripheral:(RTKDFUPeripheral *)peripheral didFinishWithError:(nullable NSError *)err; |
|
|
|
@optional |
|
|
|
/** |
|
* Tell the delegate that the sending progress did changed. |
|
*/ |
|
- (void)DFUPeripheral:(RTKDFUPeripheral *)peripheral didSend:(NSUInteger)length totalToSend:(NSUInteger)totalLength; |
|
|
|
/** |
|
* Ask the delegate for if to active image when finish send image bytes. |
|
* |
|
*@discussion When return NO, you should call -sendActiveResetToNormalMessage manually to complete upgrade procedure, otherwise the behaviour is not defined. |
|
*/ |
|
- (BOOL)DFUPeripheralShouldActiveImageWhenCompleteSend:(RTKDFUPeripheral *)peripheral; |
|
|
|
- (BOOL)DFUPeripheral:(RTKDFUPeripheral *)peripheral shouldWaitForDisconnectionOnCompleteSend:(RTKOTAUpgradeBin *)image DEPRECATED_MSG_ATTRIBUTE("use -DFUPeripheralShouldWaitForDisconnectionAfterActiveImage: instead"); |
|
|
|
/** |
|
* Ask the delegate if to wait for LE disconnection with the device before call -DFUPeripheral:didFinishWithError: method. |
|
* |
|
* @discussion Delegate should return NO if want -DFUPeripheral:didFinishWithError: method get called immediately after active image. default is YES |
|
*/ |
|
- (BOOL)DFUPeripheralShouldWaitForDisconnectionAfterActiveImage:(RTKDFUPeripheral *)peripheral; |
|
|
|
@end |
|
|
|
|
|
|
|
@class RTKOTAProfile; |
|
|
|
/*! |
|
* @class RTKDFUPeirpheral |
|
* A remote device with interfaces for firmware upgrade. |
|
* |
|
* @discussion |
|
* The RTKDFUPeirpheral class defines some programatic intefaces for app to control firmware upgrade. Instead of create a RTKDFUPeripheral object manually, it's better to retrieve a instance by call RTKOTAProfile methods. Before you can call any upgrade control methods (e.g. -upgradeImage:), the RTKDFUPeripheral @b should be connected by RTKOTAProfile. When upgrade get started, it will call RTKDFUPeripheralDelegate protocol methods on delegate to report progress and completion event. |
|
* |
|
* @see RTKOTAPeripheral |
|
*/ |
|
@interface RTKDFUPeripheral : RTKLEPeripheral { |
|
@protected |
|
RTKDFUPhase _phase; |
|
RTKOTAUpgradeBin *_upgradingImage; |
|
} |
|
|
|
/** |
|
* The delegate object specified to receive upgrade events. |
|
*/ |
|
@property (nonatomic, weak) id <RTKDFUPeripheralDelegate> delegate; |
|
|
|
/** |
|
* Return a RTKOTAPeripheral object which has APIs exposes OTA related information of the remote device. |
|
*/ |
|
@property (nonatomic, readonly) RTKOTAPeripheral *OTAPeripheral; |
|
|
|
/** |
|
* The current phase of upgrade task. |
|
*/ |
|
@property (nonatomic, readonly) RTKDFUPhase phase; |
|
|
|
/** |
|
* The image which peripheral is upgrading currently. |
|
* |
|
* @discussion Return nil if upgrade is not in progress. |
|
*/ |
|
@property (readonly, nullable) RTKOTAUpgradeBin *upgradingImage; |
|
|
|
/** |
|
* Set key for encryption when upgrade. |
|
* |
|
* @discussion If not set, a default key is used. |
|
*/ |
|
- (void)setEncryptKey:(NSData * _Nonnull)encryptKey; |
|
|
|
|
|
- (instancetype)initWithCBPeripheral:(CBPeripheral *)peripheral OTAPeripheral:(nullable RTKOTAPeripheral *)OTAPeri profile:(RTKOTAProfile *)profile; |
|
|
|
/** |
|
* Start firmware upgrade with a image object. |
|
*/ |
|
- (void)upgradeImage:(RTKOTAUpgradeBin *)image; |
|
|
|
/** |
|
* Cancel ongoing upgrade. |
|
* |
|
* @warning Not support currently. |
|
*/ |
|
- (void)cancelUpgrade; |
|
|
|
/** |
|
* Set to change the retry number on buffer check fail. |
|
* |
|
* @discussion Default value is 2. |
|
*/ |
|
@property (nonatomic) NSUInteger retryCountWhenBufferCheckFail; |
|
|
|
/** |
|
* Set Channel Connection Parameters. |
|
* |
|
* @discussion Unit: ms |
|
*/ |
|
-(void)setConnectionParametersWithMinInterval:(uint16_t)intervalMin maxInterval:(uint16_t)intervalMax latency:(uint16_t)latency supervisionTimeout:(uint16_t)timeout; |
|
|
|
|
|
/** |
|
* Used in a particular case. |
|
*/ |
|
- (void)sendActiveResetToNormalMessage; |
|
|
|
@end |
|
|
|
NS_ASSUME_NONNULL_END
|
|
|