androidbikekit
元資料

元資料

結構

// 元資料。
data class AppleMetaParameter(
    var hmiMeta: AppleHMIMeta = AppleHMIMeta(),
    var controllerMeta: AppleControllerMeta = AppleControllerMeta(),
    var batteryMeta: AppleBatteryMeta = AppleBatteryMeta(),
    var subBattery1Meta: AppleSubBattery1Meta = AppleSubBattery1Meta(),
    var enabledPart: EDeviceEnabledPart = EDeviceEnabledPart()
): MetaParameter
 
data class AppleHMIMeta(
    var smid: String? = null,
    var dmid: String? = null,
    var ssn: String? = null,
    var dsn: String? = null,
    var frameNumber: String? = null,
    var saleDate: String? = null,
    var fwAppVersion: String? = null,
    var fwBootloaderVersion: String? = null,
    var fwSdkVersion: String? = null,
    var hwVersion: String? = null,
    var parameterVersion: String? = null,
    var protocolVersion: String? = null,
    var bluetoothDeviceName: String? = null,
    var manufactureDate: String? = null,
    var productCoreSDKVersion: String? = null,
    var dfu: Boolean? = null,
    var dispUnitSw: DeviceDispUnitType? = null,
)
 
data class AppleControllerMeta(
    var smid: String? = null,
    var dmid: String? = null,
    var ssn: String? = null,
    var dsn: String? = null,
    var frameNumber: String? = null,
    var saleDate: String? = null,
    var fwAppVersion: String? = null,
    var fwBootloaderVersion: String? = null,
    var fwSdkVersion: String? = null,
    var hwVersion: String? = null,
    var parameterVersion: String? = null,
    var protocolVersion: String? = null,
    var bluetoothDeviceName: String? = null,
    var manufactureDate: String? = null,
    var productCoreSDKVersion: String? = null,
    var dfu: Boolean? = null,
)
 
data class AppleBatteryMeta(
    var smid: String? = null,
    var dmid: String? = null,
    var ssn: String? = null,
    var dsn: String? = null,
    var frameNumber: String? = null,
    var saleDate: String? = null,
    var fwAppVersion: String? = null,
    var fwBootloaderVersion: String? = null,
    var fwSdkVersion: String? = null,
    var hwVersion: String? = null,
    var parameterVersion: String? = null,
    var protocolVersion: String? = null,
    var bluetoothDeviceName: String? = null,
    var manufactureDate: String? = null,
    var productCoreSDKVersion: String? = null,
    var dfu: Boolean? = null,
)
 
data class AppleSubBattery1Meta(
    var smid: String? = null,
    var dmid: String? = null,
    var ssn: String? = null,
    var dsn: String? = null,
    var frameNumber: String? = null,
    var saleDate: String? = null,
    var fwAppVersion: String? = null,
    var fwBootloaderVersion: String? = null,
    var fwSdkVersion: String? = null,
    var hwVersion: String? = null,
    var parameterVersion: String? = null,
    var protocolVersion: String? = null,
    var bluetoothDeviceName: String? = null,
    var manufactureDate: String? = null,
    var productCoreSDKVersion: String? = null,
    var dfu: Boolean? = null,
)
 
// 支援的部件。
data class EDeviceEnabledPart(
    var hmi: Boolean = false,
    var controller: Boolean = false,
    var bms: Boolean = false,
    var display: Boolean = false,
    var motor: Boolean = false,
    var cadenceSensor: Boolean = false,
    var torqueSensor: Boolean = false,
    var charger: Boolean = false,
    var frontLight: Boolean = false,
    var rearLight: Boolean = false,
    var throttle: Boolean = false,
    var eBrake: Boolean = false,
    var eLock: Boolean = false,
    var frontDerailleur: Boolean = false,
    var rearDerailleur: Boolean = false,
    var iot: Boolean = false,
    var undefined: Boolean = false
)
 
/**
 * 里程單位種類
 * @property Kilometer 公制
 * @property Mile 英制
 */
enum class DeviceDispUnitType(val type: Int) {
    Kilometer(0),
    Mile(1)
}

取值

FarmlandBikeKit.sleipnir().deviceMetaBehavior.value as AppleMetaParameter

監聽

FarmlandBikeKit
    .sleipnir()
    .deviceMetaBehavior
    .map { it as AppleMetaParameter }
    .subscribe(
        {
            println("${it.hmiMeta.dmid}")
        },
        {
            println("獲取 Meta 資料失敗")
        }
    )

讀取系統最新 Meta

val command = AppleFetchBikeMetaCommand()
 
val dispose = command
    .currentStepSubject
    .subscribe(
        { state ->
            when (state) {
                is AppleFetchBikeMetaCommand.Step.Done -> {
                    // 讀取成功
                }
 
                is AppleFetchBikeMetaCommand.Step.DoneWithException -> {
                    // 讀取 Meta 時斷線
                }
            }
        },
        {
            println("讀取 Meta 失敗")
        }
    )
 
val invoker = Invoker()
invoker.setCommand(command)
invoker.action()