[3.4.0] add func of door state invoke
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
package com.mogo.eagle.core.function.call.autopilot
|
||||
|
||||
import chassis.Chassis
|
||||
import chassis.VehicleStateOuterClass
|
||||
import com.mogo.eagle.core.function.api.autopilot.IMoGoChassisDoorStateListener
|
||||
import com.mogo.eagle.core.function.call.base.CallerBase
|
||||
import java.util.*
|
||||
import kotlin.properties.Delegates
|
||||
|
||||
/**
|
||||
* 车门数据 回调监听
|
||||
*/
|
||||
object CallerChassisDoorStateListenerManager : CallerBase<IMoGoChassisDoorStateListener>() {
|
||||
|
||||
private val listCache = Collections.emptyList<VehicleStateOuterClass.DoorStateV2>()
|
||||
|
||||
private var frontLeft by Delegates.observable(0) { _, oldV, newV ->
|
||||
if (oldV != newV) {
|
||||
invokeSingleDoorState(Chassis.DoorNumber.FRONT_LEFT, newV)
|
||||
}
|
||||
}
|
||||
|
||||
private var frontRight by Delegates.observable(0) { _, oldV, newV ->
|
||||
if (oldV != newV) {
|
||||
invokeSingleDoorState(Chassis.DoorNumber.FRONT_RIGHT, newV)
|
||||
}
|
||||
}
|
||||
|
||||
private var backLeft by Delegates.observable(0) { _, oldV, newV ->
|
||||
if (oldV != newV) {
|
||||
invokeSingleDoorState(Chassis.DoorNumber.REAR_LEFT, newV)
|
||||
}
|
||||
}
|
||||
|
||||
private var backRight by Delegates.observable(0) { _, oldV, newV ->
|
||||
if (oldV != newV) {
|
||||
invokeSingleDoorState(Chassis.DoorNumber.REAR_RIGHT, newV)
|
||||
}
|
||||
}
|
||||
|
||||
private var middle by Delegates.observable(0) { _, oldV, newV ->
|
||||
if (oldV != newV) {
|
||||
invokeSingleDoorState(Chassis.DoorNumber.MIDDLE, newV)
|
||||
}
|
||||
}
|
||||
|
||||
override fun doSomeAfterAddListener(tag: String, listener: IMoGoChassisDoorStateListener) {
|
||||
super.doSomeAfterAddListener(tag, listener)
|
||||
if (listCache.size > 0) {
|
||||
listener.onAutopilotDoorState(listCache)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 车门状态
|
||||
*/
|
||||
fun invokeAutopilotDoorState(doorList: MutableList<VehicleStateOuterClass.DoorStateV2>) {
|
||||
listCache.addAll(doorList)
|
||||
doorList.forEach {
|
||||
when (it.number) {
|
||||
Chassis.DoorNumber.FRONT_LEFT -> frontLeft = it.status
|
||||
Chassis.DoorNumber.FRONT_RIGHT -> frontRight = it.status
|
||||
Chassis.DoorNumber.REAR_LEFT -> backLeft = it.status
|
||||
Chassis.DoorNumber.REAR_RIGHT -> backRight = it.status
|
||||
Chassis.DoorNumber.MIDDLE -> middle = it.status
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
M_LISTENERS.forEach {
|
||||
val listener = it.value
|
||||
listener.onAutopilotDoorState(doorList)
|
||||
}
|
||||
}
|
||||
|
||||
@Synchronized
|
||||
private fun invokeSingleDoorState(num: Chassis.DoorNumber, value: Int) {
|
||||
M_LISTENERS.forEach {
|
||||
val listener = it.value
|
||||
listener.onAutopilotSingleDoorState(num, value == 1)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回所有门状态
|
||||
*/
|
||||
fun getDoorList(): List<VehicleStateOuterClass.DoorStateV2>? {
|
||||
return if (listCache.size > 0) listCache else null
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取某个门的状态
|
||||
* @param num
|
||||
* @return true:开门,false:关门
|
||||
*/
|
||||
fun getIndexDoorState(num: Chassis.DoorNumber): Boolean {
|
||||
return when (num) {
|
||||
Chassis.DoorNumber.FRONT_LEFT -> frontLeft == 1
|
||||
Chassis.DoorNumber.FRONT_RIGHT -> frontRight == 1
|
||||
Chassis.DoorNumber.REAR_LEFT -> backLeft == 1
|
||||
Chassis.DoorNumber.REAR_RIGHT -> backRight == 1
|
||||
Chassis.DoorNumber.MIDDLE -> middle == 1
|
||||
else -> {
|
||||
false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user