OTA升级管理器
class OTAUpgradeManger
描述: 升级管理类
    class OTAUpgradeManger private constructor() : IOTAUpgradeManager {
        /**
        *使用键和值检查响应 bean hashmap
        */
        val mutableMap = ObservableMap<String, CheckResponseBean.Data>()
        /**
         * OTA应用地图
         */
        val mutableAppMap = ObservableMap<String, CheckResponseBean.Data>()
        /**
         * TFC 卡片响应bean 存储
         */
        var mTFCardMutableMap = ObservableMap<String, CheckResponseBean.Data>()
        /**
         * OTA版本状态
         */
        val mutableNewOTAVersion = MutableLiveData<Boolean>()
        /**
         * 新应用版本状态
         */
        val mutableNewAppVersion = MutableLiveData<Boolean>()
        /**
         * 产品信息哈希图
         */
        var productInfoMap: MutableMap<String, RegisterProductBean> = mutableMapOf()
        /**
         * 固件对话框显示状态
         */
        var isFirmwareDialogShowing = MutableLiveData<Boolean>()
        /**
         * 应用程序对话框显示状态
         */
        var isAppDialogShowing = MutableLiveData<Boolean>()
        /**
         * 传入升级标志
         */
        var isInUpgrade: Boolean = false
    
        /**
         * gnd升级管理器
         */
        var mGndUpgradeManger: UpgradeManger = UpgradeManger().init(UpgradeClientTypeEnum.CLIENT_TYPE_GND)
        /**
         * 无人机版本持有人实时数据
         */
        private val mDroneVersionLiveData = MutableLiveData<String>()
        /**
         * 应用类型
         */
        var mAppType : String  = "Enterprise"
        /**
         * 无人机类型
         */
        var mDroneType : String  = "ModelX"
        /**
         * 遥控型
         */
        var mRemoteType : String  = "RC79"
    }
method initProductType
    fun initProductType(appType : String, droneType : String, remoteType : String) 
描述: 使用所有默认值初始化产品类型
输入参数: appType:应用程序类型 droneType:无人机类型 remoteType:远程类型
输出参数: 无。
相关参数: 无。
method getUpgradeManger
    fun getUpgradeManger(clientType: UpgradeClientTypeEnum): UpgradeManger 
描述: 获取升级 OTA 的客户端类型
输入参数: clientType:传递客户端时间升级类型
输出参数: 使用客户端匹配升级管理器对象
相关参数: 无。
method detectRemoteVersionInfo
    fun detectRemoteVersionInfo() 
描述: 使用第一个远程设备状态设置检测远程信息
输入参数: 无。
输出参数: 无。
相关参数: 无。
method updateDroneVersion
    fun updateDroneVersion(version: String) 
描述: 更新无人机版本
输入参数: version:无人机版
输出参数: 无。
相关参数: 无。
method detectRemoteUpdateInfo
    fun detectRemoteUpdateInfo() 
描述: 检测应用程序更新信息状态设置
输入参数: 无。
输出参数: 无。
相关参数: 无。
method waitDroneVersion
    suspend fun waitDroneVersion(): String? 
描述: 无人机版本返回暂停功能
输入参数: 无。
输出参数: 无人机版本回归
相关参数: 无。
method observeDroneVersion
    private fun observeDroneVersion(observer: Observer<String>) 
描述: 添加观察者
输入参数: observer:无人机版观察
输出参数: 无。
相关参数: 无。
method removeObserver
    private fun removeObserver(observer: Observer<String>) 
描述: 移除观察者
输入参数: observer:无人机版观察
输出参数: 无。
相关参数: 没有任何。
method detectAppUpdateInfo
    fun detectAppUpdateInfo() 
描述: 删除应用更新信息
输入参数: 无。
输出参数: 无。
相关参数: 没有任何。
method checkProducts
    private fun checkProducts(pkg_ver: String, product_model: String, product_sn: String) 
描述: 用一些数据检查产品
输入参数: pkg_ver: 包版本 product_model:产品型号数据 product_sn:产品序列号
输出参数: 无。
相关参数: 没有任何。
method checkProducts
    fun checkProducts(checkProsRequestBean: CheckProsRequestBean) 
描述: 使用请求模型检查产品
输入参数: checkProsRequestBean:产品请求模型
输出参数: 无。
相关参数: 没有任何。
method notifyUpdateNotAvailable
    fun notifyUpdateNotAvailable() 
描述:通知更新不可用
输入参数: 无。
输出参数: 无。
相关参数: 没有任何。
method notifyUpdateAvailable
    fun notifyUpdateAvailable() 
描述: 通知更新可用
输入参数: 无。
输出参数: 无。
相关参数: 没有任何。
method downloadFile
    fun downloadFile(url: String, fileName: String, downloadCallback: FileTransmitListener<File>): S3DownloadInterceptor 
描述: 从 url 下载文件
输入参数: url:该特定文件的 url fileName:要下载的文件名 downloadCallback:通过对象下载回调
输出参数: 下载异常返回
相关参数: 没有任何。
method downloadAppFile
    fun downloadAppFile(url: String, fileName: String, downloadCallback: FileTransmitListener<File>): S3DownloadInterceptor 
描述: 从 url 下载应用程序文件
输入参数: url:该特定文件的 url fileName:要下载的文件名 downloadCallback:通过对象下载回调
输出参数: 无。
相关参数: 没有任何。
    /**
     * OTA软件检测监听器
     */
    interface OTASoftwareDetect {
        /**
         * 新的软件检测方法
          * @param displayNewSoftware 布尔数据传递 true/false
         */
        fun onNewSoftwareDetected(displayNewSoftware: Boolean)
    }