// // RTKOTAPeripheral.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 "RTKOTAInstalledBin.h" #else #import #import #endif NS_ASSUME_NONNULL_BEGIN typedef enum : NSUInteger { RTKOTAProtocolTypeGATTSPP = 0x0000, RTKOTAProtocolTypeGATT = 0x0010, RTKOTAProtocolTypeSPP = 0x0011, } RTKOTAProtocolType; /** * Represents the ear bud information about the remote device. */ typedef enum : NSUInteger { RTKOTAEarbudUnkown, ///< The earbud info is not known. RTKOTAEarbudPrimary, ///< The earbud is primary bud. RTKOTAEarbudSecondary, ///< The earbud is secondary bud. RTKOTAEarbudSingle, ///< The earbud is a single bud. } RTKOTAEarbud; /** * Represents the bank info about the remote device. */ typedef enum : NSInteger { RTKOTABankTypeInvalid = -1, ///< The bank info is not valid. RTKOTABankTypeSingle = 0x00, ///< A single bank. RTKOTABankTypeBank0, ///< The primary Bank in a dual bank case. RTKOTABankTypeBank1, ///< The secondary Bank in a dual bank case. } RTKOTABankType; @class RTKOTAPeripheral; /** * @protocol RTKOTAPeripheralDelegate * * RTKOTAPeripheralDelegate define methods to notify information determination event. */ @protocol RTKOTAPeripheralDelegate /** * Invoked when RTKOTAClient has determined information about OTA. */ - (void)OTAPeripheral:(RTKOTAPeripheral *)peripheral didDetermineInfoWithError:(nullable NSError*)error; @end /** * @class RTKOTAPeripheral * * Represents a remote LE device, exposing OTA upgrade related information. * * @discussion An RTKOTAPeripheral object gives your app information about a LE device which is able for DFU upgrade. You can use the information in this class to determine whether your app can start a normal DFU upgrade or a silent DFU upgrade, and have a knowlege of which feature the device support. * * The class does not provide any methods to start upgrade, it's a responsibility of a DFUPeripehral object. You call -[RTKOTAProfile translatePeripheral:toDFUPeripheralWithCompletion:] to get a DFUPeripheral for normal upgrade, and call -[RTKOTAProfile DFUPeripheralOfOTAPeripheral:] to get a DFUPeripheral for silent upgrade. */ @interface RTKOTAPeripheral : RTKLEPeripheral /** * Indicates if the remote device information has determined. * * @discussion Other APIs should not be called if the value is NO. A success connection by call -[RTKOTAProfile connectTo:] will set this value to YES. */ @property (readonly) BOOL infoSettled; /// Not available @property (readonly) BOOL isBBpro; /** * The delegate object specified to receive peripheral events. */ @property (nonatomic, weak) id delegate; /// The version number which the remote device implemented. @property (readonly) NSUInteger OTAVersion; /// @warning Not available @property (readonly) NSUInteger securityVersion; /** * The @b BDAddress of this device. */ @property (readonly) BDAddressType bdAddress; /** * The @b BDAddress of the companion device. * * @discussion If the remote device have a companion device, this value return the companion device @b BDAddress. If does not, return a zero value. */ @property (readonly) BDAddressType pairedBDAddress; /// The version of Application image type in remote device. /// @warning Not available in newer implementation. @property (readonly) uint16_t appVersion; /// The version of Patch image type in remote device. /// @warning Not available in newer implementation. @property (readonly) uint16_t patchVersion; /// The Link Key of the LE Connection with remote device. /// @warning Not available in newer implementation. @property (readonly, nullable) NSString *linkKey; /// The memory size used for temp buffer. @property (readonly) NSUInteger tempBufferSize; /// The bank used currently. /// @discussion Return @b RTKOTABankTypeBank0 or @b RTKOTABankTypeBank1 when dual-bank feature is supported, otherwise @b RTKOTABankTypeSingle is returned. @property (readonly) RTKOTABankType activeBank; /// The used bank of Application image type in remote device. /// @warning Not available in newer implementation. @property (readonly) NSUInteger appFreeBank; /// The used bank of Application image type in remote device. /// @warning Not available in newer implementation. @property (readonly) NSUInteger patchFreeBank; /// Indicates whether buffer check is supported on the remote device . @property (readonly) BOOL bufferCheckEnable; /// Indicates whether AES encryption is supported on the remote device . @property (readonly) BOOL AESEnable; /// The encryption mode used in the remoter device.. @property (readonly) NSUInteger encryptionMode; /// Indicate whether Copy image is supported. @property (readonly) BOOL copyImage; /// Indicate whether Upgrade multiple images is supported. @property (readonly) BOOL updateMultiImages; /// Indicates whether this peripheral is a one bud of RWS bud @property (readonly) BOOL isRWS; /// Indicates which bud type the remote device is. @property (readonly) RTKOTAEarbud budType; /// Indicates whether the device is in engaged with companion device. @property (readonly) BOOL notEngaged; /// Indicate whether this peripheral have received images right now, but not active. @property (readonly) BOOL upgradedCurrently; /// For SDK internal use. @property (readonly) uint32_t imageIndicator; /// For SDK internal use. @property (readonly) RTKOTAProtocolType protocolType; /** * A list of image binarys resides in remote device. * * @discussion Use this property to get a knowledge of binarys installed in the device, such as image type and version. */ @property (readonly) NSArray *bins; /** * Indicates whether the device can upgrade using normal upgrade procedure. * * @discussion If this value is YES, call @b -enterOTAMode to make the device transition to a running mode dedicated to Upgrade. */ @property (readonly) BOOL canEnterOTAMode; /** * Indicates whether the device can upgrade using silent upgrade procedure. * * @discussion If this value is YES, DFU upgrade can be start in current runing mode. Call @b -[RTKOTAProfile @b DFUPeripheralOfOTAPeripheral] to obtain a DFUPeripheral instance for Upgrade. */ @property (readonly) BOOL canUpgradeSliently; /** * Request peripheral to make a transition to OTA runing mode. * * @discussion Typically, you should not call this method to start a transition. Instead, call @b -[RTKOTAProfile @b translatePeripheral:toDFUPeripheralWithCompletion:] to start the transition. */ - (void)enterOTAMode; @end @interface RTKOTAPeripheral (DualBank) /** * A list of inactive image binarys resides in remote device. * * @discussion inactiveBins containing a list of images which is not in use currently. */ @property (readonly, nullable) NSArray *inactiveBins; @end NS_ASSUME_NONNULL_END