Merge branch 'dev_robotaxi-d_240227_6.3.0' of gitlab.zhidaoauto.com:SCA/L4HA/AndroidApp/MoGoEagleEye into dev_robotaxi-d_240227_6.3.0
This commit is contained in:
@@ -367,12 +367,12 @@ class MoGoAutopilotControlProvider :
|
||||
if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) {
|
||||
val invokeResult = AdasManager.getInstance()
|
||||
.sendAutoPilotModeReq(1, source, null)
|
||||
invokeAutoPilotResult(if (invokeResult) "无参自动驾驶调用成功" else "自动驾驶调用失败, socket 或者 rawPack 可能为空")
|
||||
invokeAutoPilotResult(if (invokeResult > -1) "无参自动驾驶调用成功:${invokeResult}" else "自动驾驶调用失败, socket 或者 rawPack 可能为空")
|
||||
} else {
|
||||
if (AdasManager.getInstance().ipcConnectionStatus == AdasConstants.IpcConnectionStatus.CONNECTED) {
|
||||
val invokeResult = AdasManager.getInstance()
|
||||
.sendAutoPilotModeReq(1, source, null)
|
||||
invokeAutoPilotResult(if (invokeResult) "无参自动驾驶调用成功" else "自动驾驶调用失败, socket 或者 rawPack 可能为空")
|
||||
invokeAutoPilotResult(if (invokeResult > -1) "无参自动驾驶调用成功:${invokeResult}" else "自动驾驶调用失败, socket 或者 rawPack 可能为空")
|
||||
} else {
|
||||
invokeAutoPilotResult("车机与工控机链接失败,无法开启自动驾驶 无参")
|
||||
CallerLogger.e("$M_D_C$TAG", "车机与工控机链接失败,无法开启自动驾驶")
|
||||
@@ -383,12 +383,12 @@ class MoGoAutopilotControlProvider :
|
||||
if (AppIdentityModeUtils.isPassenger(FunctionBuildConfig.appIdentityMode)) {
|
||||
val invokeResult = AdasManager.getInstance()
|
||||
.sendAutoPilotModeReq(1, source, controlParameters.toRouteInfo())
|
||||
invokeAutoPilotResult(if (invokeResult) "自动驾驶调用成功" else "自动驾驶调用失败, socket 或者 rawPack 可能为空")
|
||||
invokeAutoPilotResult(if (invokeResult > -1) "自动驾驶调用成功:${invokeResult}" else "自动驾驶调用失败, socket 或者 rawPack 可能为空")
|
||||
} else {
|
||||
if (AdasManager.getInstance().ipcConnectionStatus == AdasConstants.IpcConnectionStatus.CONNECTED) {
|
||||
val invokeResult = AdasManager.getInstance()
|
||||
.sendAutoPilotModeReq(1, source, controlParameters.toRouteInfo())
|
||||
invokeAutoPilotResult(if (invokeResult) "自动驾驶调用成功" else "自动驾驶调用失败, socket 或者 rawPack 可能为空")
|
||||
invokeAutoPilotResult(if (invokeResult > -1) "自动驾驶调用成功:${invokeResult}" else "自动驾驶调用失败, socket 或者 rawPack 可能为空")
|
||||
} else {
|
||||
invokeAutoPilotResult("车机与工控机链接失败,无法开启自动驾驶")
|
||||
CallerLogger.e("$M_D_C$TAG", "车机与工控机链接失败,无法开启自动驾驶")
|
||||
@@ -441,19 +441,19 @@ class MoGoAutopilotControlProvider :
|
||||
|
||||
override fun recordPackage(): Boolean {
|
||||
return AdasManager.getInstance()
|
||||
.startRecordPackage((System.currentTimeMillis() / 1000).toInt(), 1)
|
||||
.startRecordPackage((System.currentTimeMillis() / 1000).toInt(), 1) > -1
|
||||
}
|
||||
|
||||
override fun recordPackage(type: Int, id: Int): Boolean {
|
||||
return AdasManager.getInstance().startRecordPackage(id, type)
|
||||
return AdasManager.getInstance().startRecordPackage(id, type) > -1
|
||||
}
|
||||
|
||||
override fun recordPackage(type: Int, id: Int, duration: Int): Boolean {
|
||||
return AdasManager.getInstance().startRecordPackage(id, duration, type)
|
||||
return AdasManager.getInstance().startRecordPackage(id, duration, type) > -1
|
||||
}
|
||||
|
||||
override fun recordPackage(type: Int, id: Int, duration: Int, bduration: Int): Boolean {
|
||||
return AdasManager.getInstance().startRecordPackage(id, duration, type, bduration)
|
||||
return AdasManager.getInstance().startRecordPackage(id, duration, type, bduration) > -1
|
||||
}
|
||||
|
||||
override fun recordPackage(
|
||||
@@ -463,11 +463,11 @@ class MoGoAutopilotControlProvider :
|
||||
bduration: Int,
|
||||
topics: List<String>
|
||||
): Boolean {
|
||||
return AdasManager.getInstance().startRecordPackage(id, duration, type, bduration, topics)
|
||||
return AdasManager.getInstance().startRecordPackage(id, duration, type, bduration, topics) > -1
|
||||
}
|
||||
|
||||
override fun stopRecord(type: Int, id: Int): Boolean {
|
||||
return AdasManager.getInstance().stopRecordPackage(id, type)
|
||||
return AdasManager.getInstance().stopRecordPackage(id, type) > -1
|
||||
}
|
||||
|
||||
override fun setEnableLog(isEnableLog: Boolean) {
|
||||
@@ -486,7 +486,7 @@ class MoGoAutopilotControlProvider :
|
||||
}
|
||||
|
||||
override fun setAutoPilotSpeed(speed: Int): Boolean {
|
||||
return AdasManager.getInstance().sendAutopilotSpeedReq(speed / 3.6)
|
||||
return AdasManager.getInstance().sendAutopilotSpeedReq(speed / 3.6) > -1
|
||||
}
|
||||
|
||||
override fun recordCause(key: String?, name: String?, id: String?, reason: String?) {
|
||||
@@ -596,9 +596,9 @@ class MoGoAutopilotControlProvider :
|
||||
)
|
||||
override fun sendDetouring(isEnable: Boolean): Boolean {
|
||||
return if (isEnable) {
|
||||
AdasManager.getInstance().sendDetouring(1)
|
||||
AdasManager.getInstance().sendDetouring(1) > -1
|
||||
} else {
|
||||
AdasManager.getInstance().sendDetouring(0)
|
||||
AdasManager.getInstance().sendDetouring(0) > -1
|
||||
}
|
||||
}
|
||||
|
||||
@@ -608,7 +608,7 @@ class MoGoAutopilotControlProvider :
|
||||
* @return boolean
|
||||
*/
|
||||
override fun sendDetouringSpeed(speed: Double): Boolean {
|
||||
return AdasManager.getInstance().sendDetouringSpeed(speed)
|
||||
return AdasManager.getInstance().sendDetouringSpeed(speed) > -1
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -619,9 +619,9 @@ class MoGoAutopilotControlProvider :
|
||||
*/
|
||||
override fun sendWeakNetSlowDown(isEnable: Boolean): Boolean {
|
||||
return if (isEnable) {
|
||||
AdasManager.getInstance().sendWeakNetSlowDown(1)
|
||||
AdasManager.getInstance().sendWeakNetSlowDown(1) > -1
|
||||
} else {
|
||||
AdasManager.getInstance().sendWeakNetSlowDown(0)
|
||||
AdasManager.getInstance().sendWeakNetSlowDown(0) > -1
|
||||
}
|
||||
}
|
||||
|
||||
@@ -633,9 +633,9 @@ class MoGoAutopilotControlProvider :
|
||||
*/
|
||||
override fun sendBreakdownSlowDown(isEnable: Boolean): Boolean {
|
||||
return if (isEnable) {
|
||||
AdasManager.getInstance().sendBreakdownSlowDown(1)
|
||||
AdasManager.getInstance().sendBreakdownSlowDown(1) > -1
|
||||
} else {
|
||||
AdasManager.getInstance().sendBreakdownSlowDown(0)
|
||||
AdasManager.getInstance().sendBreakdownSlowDown(0) > -1
|
||||
}
|
||||
}
|
||||
|
||||
@@ -646,7 +646,7 @@ class MoGoAutopilotControlProvider :
|
||||
* @return boolean
|
||||
*/
|
||||
override fun sendFusionMode(cmd: Int): Boolean {
|
||||
return AdasManager.getInstance().sendFusionMode(cmd)
|
||||
return AdasManager.getInstance().sendFusionMode(cmd) > -1
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -656,10 +656,10 @@ class MoGoAutopilotControlProvider :
|
||||
* @return boolean
|
||||
*/
|
||||
override fun sendOvertakeMaxSpeed(maxSpeed: Double): Boolean {
|
||||
return AdasManager.getInstance().sendOvertakeMaxSpeed(maxSpeed)
|
||||
return AdasManager.getInstance().sendOvertakeMaxSpeed(maxSpeed) > -1
|
||||
}
|
||||
|
||||
override fun sendSetParamReq(param: Map<AdasConstants.MapSystemParamType, Any>): Boolean {
|
||||
override fun sendSetParamReq(param: Map<AdasConstants.MapSystemParamType, Any>): Set<Long> {
|
||||
return AdasManager.getInstance().sendSetParamReq(param)
|
||||
}
|
||||
|
||||
@@ -670,7 +670,7 @@ class MoGoAutopilotControlProvider :
|
||||
* @return boolean
|
||||
*/
|
||||
override fun sendGetAllParamReq(): Boolean {
|
||||
return AdasManager.getInstance().sendGetAllParamReq()
|
||||
return AdasManager.getInstance().sendGetAllParamReq() > -1
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -681,7 +681,7 @@ class MoGoAutopilotControlProvider :
|
||||
* @return boolean
|
||||
*/
|
||||
override fun sendGetParamReq(vararg paramType: AdasConstants.MapSystemParamType): Boolean {
|
||||
return AdasManager.getInstance().sendGetParamReq(*paramType)
|
||||
return AdasManager.getInstance().sendGetParamReq(*paramType) > -1
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -692,7 +692,7 @@ class MoGoAutopilotControlProvider :
|
||||
* @return boolean
|
||||
*/
|
||||
override fun getBadCaseConfig(reqType: Int,recordType: Int,topicsNeedToCache: List<String>): Boolean{
|
||||
return AdasManager.getInstance().sendRecordDataConfigReq(reqType, recordType, topicsNeedToCache)
|
||||
return AdasManager.getInstance().sendRecordDataConfigReq(reqType, recordType, topicsNeedToCache) > -1
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -790,7 +790,7 @@ class MoGoAutopilotControlProvider :
|
||||
}
|
||||
|
||||
|
||||
return AdasManager.getInstance().sendBagManagerCmd(bagManager.build())
|
||||
return AdasManager.getInstance().sendBagManagerCmd(bagManager.build()) > -1
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -892,8 +892,8 @@ class MoGoAutopilotControlProvider :
|
||||
nodeAliasCode = CHAIN_CODE_ADAS_POWER_OFF,
|
||||
paramIndexes = [-1]
|
||||
)
|
||||
override fun sendIpcPowerOff() {
|
||||
AdasManager.getInstance().sendIpcPowerOff()
|
||||
override fun sendIpcPowerOff() : Long{
|
||||
return AdasManager.getInstance().sendIpcPowerOff()
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1044,7 +1044,7 @@ class MoGoAutopilotControlProvider :
|
||||
* @return boolean
|
||||
*/
|
||||
override fun sendSweeperStartTaskResp(reqNo: String, startTaskResp: SweeperTask.StartTaskResp): Boolean {
|
||||
return AdasManager.getInstance().sendSweeperStartTaskResp(reqNo, startTaskResp)
|
||||
return AdasManager.getInstance().sendSweeperStartTaskResp(reqNo, startTaskResp) > -1
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1056,7 +1056,7 @@ class MoGoAutopilotControlProvider :
|
||||
* @return boolean
|
||||
*/
|
||||
override fun sendSweeperTaskConfirmResp(reqNo: String, taskConfirmResp: SweeperTaskConfirm.TaskConfirmResp): Boolean {
|
||||
return AdasManager.getInstance().sendSweeperTaskConfirmResp(reqNo, taskConfirmResp)
|
||||
return AdasManager.getInstance().sendSweeperTaskConfirmResp(reqNo, taskConfirmResp) > -1
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1068,7 +1068,7 @@ class MoGoAutopilotControlProvider :
|
||||
* @return boolean
|
||||
*/
|
||||
override fun sendSweeperStopTaskResp(reqNo: String, stopTaskResp: SweeperTaskStop.StopTaskResp): Boolean {
|
||||
return AdasManager.getInstance().sendSweeperStopTaskResp(reqNo, stopTaskResp)
|
||||
return AdasManager.getInstance().sendSweeperStopTaskResp(reqNo, stopTaskResp) > -1
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1082,7 +1082,7 @@ class MoGoAutopilotControlProvider :
|
||||
* @return boolean
|
||||
*/
|
||||
override fun sendSweeperSuspendResumeTaskReq(isSuspend: Boolean, reqNo: String, suspendResumeTaskReq: SweeperTaskSuspendResume.SuspendResumeTaskReq): Boolean {
|
||||
return AdasManager.getInstance().sendSweeperSuspendResumeTaskReq(isSuspend,reqNo, suspendResumeTaskReq)
|
||||
return AdasManager.getInstance().sendSweeperSuspendResumeTaskReq(isSuspend,reqNo, suspendResumeTaskReq) > -1
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1094,7 +1094,7 @@ class MoGoAutopilotControlProvider :
|
||||
* @return boolean
|
||||
*/
|
||||
override fun sendSweeperGetTaskReq(reqNo: String, getTaskReq: SweeperTask.GetTaskReq): Boolean {
|
||||
return AdasManager.getInstance().sendSweeperGetTaskReq(reqNo, getTaskReq)
|
||||
return AdasManager.getInstance().sendSweeperGetTaskReq(reqNo, getTaskReq) > -1
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1106,7 +1106,7 @@ class MoGoAutopilotControlProvider :
|
||||
* @return boolean
|
||||
*/
|
||||
override fun sendSweeperAutopilotBootable(reqNo: String, isBootable: SweeperBootable.IsBootable): Boolean {
|
||||
return AdasManager.getInstance().sendSweeperAutopilotBootable(reqNo, isBootable)
|
||||
return AdasManager.getInstance().sendSweeperAutopilotBootable(reqNo, isBootable) > -1
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1118,14 +1118,14 @@ class MoGoAutopilotControlProvider :
|
||||
* @return boolean
|
||||
*/
|
||||
override fun sendSweeperCloudSuspendResumeTaskResp(reqNo: String, bigTaskActionResp: SweeperTaskCloudSuspendResume.BigTaskActionResp): Boolean {
|
||||
return AdasManager.getInstance().sendSweeperCloudSuspendResumeTaskResp(reqNo, bigTaskActionResp)
|
||||
return AdasManager.getInstance().sendSweeperCloudSuspendResumeTaskResp(reqNo, bigTaskActionResp) > -1
|
||||
}
|
||||
|
||||
override fun sendParallelDrivingReq(
|
||||
reqNo: String,
|
||||
parallelRequest: ParallelDrivingRequest.ParallelRequest
|
||||
): Boolean {
|
||||
return AdasManager.getInstance().sendParallelDrivingReq(reqNo, parallelRequest)
|
||||
return AdasManager.getInstance().sendParallelDrivingReq(reqNo, parallelRequest) > -1
|
||||
}
|
||||
|
||||
override fun setIsDrawPointCloud(isDrawPointCloud: Boolean) {
|
||||
@@ -1167,7 +1167,7 @@ class MoGoAutopilotControlProvider :
|
||||
}
|
||||
|
||||
override fun sendRoboBusJinlvM1FrontDoorCmd(switchCmd: Int): Boolean {
|
||||
return AdasManager.getInstance().sendRoboBusJinlvM1FrontDoorCmd(switchCmd)
|
||||
return AdasManager.getInstance().sendRoboBusJinlvM1FrontDoorCmd(switchCmd) > -1
|
||||
}
|
||||
|
||||
override fun sendRoboBusJinlvM1AirConditionerCmd(
|
||||
@@ -1176,30 +1176,30 @@ class MoGoAutopilotControlProvider :
|
||||
windSpeedCmd: Int,
|
||||
temperatureCmd: Int
|
||||
): Boolean {
|
||||
return AdasManager.getInstance().sendRoboBusJinlvM1AirConditionerCmd(switchCmd, modeCmd, windSpeedCmd, temperatureCmd)
|
||||
return AdasManager.getInstance().sendRoboBusJinlvM1AirConditionerCmd(switchCmd, modeCmd, windSpeedCmd, temperatureCmd) > -1
|
||||
}
|
||||
|
||||
override fun sendRoboBusJinlvM1HeaderCmd(switchCmd: Int, windSpeedCmd: Int): Boolean {
|
||||
return AdasManager.getInstance().sendRoboBusJinlvM1HeaderCmd(switchCmd, windSpeedCmd)
|
||||
return AdasManager.getInstance().sendRoboBusJinlvM1HeaderCmd(switchCmd, windSpeedCmd) > -1
|
||||
}
|
||||
|
||||
override fun sendRoboBusJinlvM1MainLamp1Cmd(switchCmd: Int): Boolean {
|
||||
return AdasManager.getInstance().sendRoboBusJinlvM1MainLamp1Cmd(switchCmd)
|
||||
return AdasManager.getInstance().sendRoboBusJinlvM1MainLamp1Cmd(switchCmd) > -1
|
||||
}
|
||||
|
||||
override fun sendRoboBusJinlvM1MainLamp2Cmd(switchCmd: Int): Boolean {
|
||||
return AdasManager.getInstance().sendRoboBusJinlvM1MainLamp2Cmd(switchCmd)
|
||||
return AdasManager.getInstance().sendRoboBusJinlvM1MainLamp2Cmd(switchCmd) > -1
|
||||
}
|
||||
|
||||
override fun sendRoboBusJinlvM1SmallLampCmd(switchCmd: Int): Boolean {
|
||||
return AdasManager.getInstance().sendRoboBusJinlvM1SmallLampCmd(switchCmd)
|
||||
return AdasManager.getInstance().sendRoboBusJinlvM1SmallLampCmd(switchCmd) > -1
|
||||
}
|
||||
|
||||
override fun sendRoboBusJinlvM1TaskCmd(roboBusJinlvM1Cmd: SpecialVehicleTaskCmdOuterClass.RoboBusJinlvM1Cmd): Boolean {
|
||||
return AdasManager.getInstance().sendRoboBusJinlvM1TaskCmd(roboBusJinlvM1Cmd)
|
||||
return AdasManager.getInstance().sendRoboBusJinlvM1TaskCmd(roboBusJinlvM1Cmd) > -1
|
||||
}
|
||||
|
||||
override fun sendPlanningCmd(cmd: Int): Boolean {
|
||||
return AdasManager.getInstance().sendPlanningCmd(cmd)
|
||||
return AdasManager.getInstance().sendPlanningCmd(cmd) > -1
|
||||
}
|
||||
}
|
||||
@@ -241,7 +241,7 @@ interface IMoGoAutopilotControlProvider : IMoGoFunctionServerProvider {
|
||||
* {@link AdasConstants.MapSystemParamType#OVERTAKE_MAX_SPEED Value类型:double或double类型String}
|
||||
* @return boolean
|
||||
*/
|
||||
fun sendSetParamReq(param: Map<AdasConstants.MapSystemParamType, Any>): Boolean
|
||||
fun sendSetParamReq(param: Map<AdasConstants.MapSystemParamType, Any>): Set<Long>
|
||||
/**
|
||||
* 获取全部参数
|
||||
* 结果回调{@link OnAdasListener#onGetParamResp(MessagePad.Header, MessagePad.SetParamReq)}
|
||||
@@ -308,7 +308,7 @@ interface IMoGoAutopilotControlProvider : IMoGoFunctionServerProvider {
|
||||
* 系统命令请求 关机
|
||||
* 命令下发存在回执
|
||||
*/
|
||||
fun sendIpcPowerOff()
|
||||
fun sendIpcPowerOff(): Long
|
||||
|
||||
/**
|
||||
* 办公室调试使用,强制开启自动驾驶,将 status,pilotmode,control_pilotmode,强追设置为 1
|
||||
|
||||
@@ -344,10 +344,16 @@ object CallerAutoPilotControlManager {
|
||||
* {@link AdasConstants.MapSystemParamType#V2N_TO_PNC Value类型:boolean或boolean类型String}
|
||||
* {@link AdasConstants.MapSystemParamType#V2I_TO_PNC Value类型:boolean或boolean类型String}
|
||||
* {@link AdasConstants.MapSystemParamType#FUSION_MODE Value类型:int或int类型String}
|
||||
* {@link AdasConstants.MapSystemParamType#SEAT_STATE Value类型:int或int类型String}
|
||||
* {@link AdasConstants.MapSystemParamType#OVERTAKE_MAX_SPEED Value类型:double或double类型String}
|
||||
* @return boolean
|
||||
* {@link AdasConstants.MapSystemParamType#FAULT_SIMULATION_CMD Value类型:int或int类型String}
|
||||
* @return 消息是否添加到WS消息发送队列。由于批量设置参数,调用的域控接口存在不同,实际调用域控最多2个接口,调用次数最多4次,所以最多返回4条ID数据
|
||||
* * 返回值为非0的正整数时表示下发消息的消息ID
|
||||
* * >=0:表示添加到WS发送消息队列
|
||||
* * =0:表示乘客屏模式添加到WS发送消息队列
|
||||
* * -1L:添加到WS发送消息队列失败
|
||||
*/
|
||||
fun sendSetParamReq(param: Map<AdasConstants.MapSystemParamType, Any>): Boolean? {
|
||||
fun sendSetParamReq(param: Map<AdasConstants.MapSystemParamType, Any>): Set<Long>? {
|
||||
return providerApi?.sendSetParamReq(param)
|
||||
}
|
||||
|
||||
@@ -494,10 +500,11 @@ object CallerAutoPilotControlManager {
|
||||
* 系统命令请求 关机
|
||||
* 命令下发存在回执
|
||||
*/
|
||||
fun sendIpcPowerOff(){
|
||||
if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {//TODO 是否需要判断是不是司机屏?
|
||||
providerApi?.sendIpcPowerOff()
|
||||
fun sendIpcPowerOff(): Long {
|
||||
if (AppIdentityModeUtils.isDriver(FunctionBuildConfig.appIdentityMode)) {
|
||||
return providerApi?.sendIpcPowerOff() ?: -1
|
||||
}
|
||||
return -1
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -102,7 +102,7 @@ public enum MessageType {
|
||||
public final long timeoutMillis;
|
||||
|
||||
MessageType(MessagePad.MessageType typeCode, String desc) {
|
||||
this(typeCode, desc, 0);
|
||||
this(typeCode, desc, 0L);
|
||||
}
|
||||
|
||||
MessageType(MessagePad.MessageType typeCode, String desc, long timeoutMillis) {
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
package com.zhjt.mogo.adas.data.bean;
|
||||
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.google.protobuf.TextFormat;
|
||||
import com.zhjt.mogo.adas.common.MessageType;
|
||||
import com.zhjt.mogo.adas.utils.ByteUtil;
|
||||
@@ -12,30 +15,61 @@ import mogo.telematics.pad.MessagePad;
|
||||
*/
|
||||
public class ReceivedAck {
|
||||
/**
|
||||
* 是否超时,如果超时 receiveTime和receivedAck不会被赋值
|
||||
* 超时时间定义在{@link MessageType}中,根据定义的超时时间实际返回的超时时间 ±1 秒内
|
||||
* 是否超时,如果超时
|
||||
*/
|
||||
private boolean isTimeout = false;
|
||||
@NonNull
|
||||
private Status status = Status.NORMAL;
|
||||
private final long sendTime;//数据发送时间
|
||||
private long receiveTime;//回执接收时间
|
||||
private final long msgId;//消息ID
|
||||
private final MessageType messageType;//具体消息
|
||||
private final byte[] sendData;//发送的数据
|
||||
private MessagePad.ReceivedAck receivedAck;//回执的数据
|
||||
private final long msgId;//PAD发送的消息ID
|
||||
@NonNull
|
||||
private final MessageType messageType;//PAD发送的具体消息类型
|
||||
@Nullable
|
||||
private final byte[] sendData;//PAD发送的数据
|
||||
@Nullable
|
||||
private MessagePad.ReceivedAck receivedAck;//PAD接收到回执的数据
|
||||
|
||||
public ReceivedAck(long sendTime, long msgId, MessageType messageType, byte[] sendData) {
|
||||
/**
|
||||
* 回执状态
|
||||
*/
|
||||
public enum Status {
|
||||
/**
|
||||
* 正常的
|
||||
* 所有字段均会被赋值
|
||||
*/
|
||||
NORMAL,
|
||||
/**
|
||||
* 接收域控回执数据超时
|
||||
* receiveTime和receivedAck不会被赋值
|
||||
* 超时时间定义在{@link MessageType}中,根据定义的超时时间实际返回的超时时间 ±1 秒内
|
||||
*/
|
||||
TIMEOUT,
|
||||
/**
|
||||
* 收到域控发送的回执消息,但是消息存在异常
|
||||
* sendTime和msgId和messageType和sendData不会被赋值
|
||||
*/
|
||||
RECEIVED_ACK_DATA_ERROR,
|
||||
/**
|
||||
* 收到域控发送的回执消息,但是本地发送命令的缓存列表中没有任何数据,无法确认收到的回执数据属于那条命令发出的
|
||||
* sendTime和msgId和messageType和sendData不会被赋值
|
||||
*/
|
||||
WAITING_RECEIVED_ACK_LIST_EMPTY;
|
||||
}
|
||||
|
||||
public ReceivedAck(long sendTime, long msgId, @NonNull MessageType messageType, @Nullable byte[] sendData) {
|
||||
this.sendTime = sendTime;
|
||||
this.msgId = msgId;
|
||||
this.messageType = messageType;
|
||||
this.sendData = sendData;
|
||||
}
|
||||
|
||||
public boolean isTimeout() {
|
||||
return isTimeout;
|
||||
@NonNull
|
||||
public Status getStatus() {
|
||||
return status;
|
||||
}
|
||||
|
||||
public void setTimeout(boolean timeout) {
|
||||
isTimeout = timeout;
|
||||
public void setStatus(@NonNull Status status) {
|
||||
this.status = status;
|
||||
}
|
||||
|
||||
public long getSendTime() {
|
||||
@@ -54,30 +88,33 @@ public class ReceivedAck {
|
||||
return msgId;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public MessageType getMessageType() {
|
||||
return messageType;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public byte[] getSendData() {
|
||||
return sendData;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public MessagePad.ReceivedAck getReceivedAck() {
|
||||
return receivedAck;
|
||||
}
|
||||
|
||||
public void setReceivedAck(MessagePad.ReceivedAck receivedAck) {
|
||||
public void setReceivedAck(@Nullable MessagePad.ReceivedAck receivedAck) {
|
||||
this.receivedAck = receivedAck;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "{" +
|
||||
"是否超时=" + isTimeout +
|
||||
"状态=" + status +
|
||||
", 发送时间=" + sendTime +
|
||||
", 接收时间=" + receiveTime +
|
||||
", 消息ID=" + msgId +
|
||||
", 消息类型=" + messageType +
|
||||
", 回执接收时间=" + receiveTime +
|
||||
", 发送消息ID=" + msgId +
|
||||
", 发送类型=" + messageType +
|
||||
", 发送数据=" + (sendData == null ? null : ByteUtil.byteArrToHex(sendData)) +
|
||||
", 回执数据=" + (receivedAck == null ? null : TextFormat.printer().escapingNonAscii(false).printToString(receivedAck)) +
|
||||
'}';
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -11,7 +11,8 @@ import mogo.telematics.pad.MessagePad;
|
||||
|
||||
/**
|
||||
* 发送数据时ID生成器
|
||||
* 每天生成的ID重1开始自增,也可以表示为发送的数量
|
||||
* 每天生成的ID从1开始自增,只保存最后一条消息的相关信息,故也可以表示为每天发送的数量
|
||||
* 默认保存30天的数据
|
||||
*/
|
||||
public class MessageIdGenerator {
|
||||
private static final String TAG = "MessageIdGenerator";
|
||||
|
||||
@@ -79,22 +79,29 @@ public class ReceivedAckManager {
|
||||
*/
|
||||
public void receiveReceivedAck(long time, MessagePad.ReceivedAck receivedAck) {
|
||||
int count = receivedAck.getMsgidsCount();
|
||||
if (!list.isEmpty() && count > 0) {
|
||||
Iterator<ReceivedAck> iterator = list.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
ReceivedAck ack = iterator.next();
|
||||
for (int i = 0; i < count; i++) {
|
||||
long msgId = receivedAck.getMsgids(i);
|
||||
if (msgId == ack.getMsgId()) {
|
||||
iterator.remove();
|
||||
ack.setTimeout(false);
|
||||
ack.setReceiveTime(time);
|
||||
ack.setReceivedAck(receivedAck);
|
||||
if (listener != null) {
|
||||
listener.onReceiveReceivedAck(ack);
|
||||
}
|
||||
break;
|
||||
if (count == 0 || list.isEmpty()) {
|
||||
if (listener != null) {
|
||||
ReceivedAck ack = new ReceivedAck(0, 0, MessageType.TYPE_DEFAULT, null);
|
||||
ack.setStatus(count == 0 ? ReceivedAck.Status.RECEIVED_ACK_DATA_ERROR : ReceivedAck.Status.WAITING_RECEIVED_ACK_LIST_EMPTY);
|
||||
ack.setReceiveTime(time);
|
||||
ack.setReceivedAck(receivedAck);
|
||||
listener.onReceiveReceivedAck(ack);
|
||||
}
|
||||
return;
|
||||
}
|
||||
Iterator<ReceivedAck> iterator = list.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
ReceivedAck ack = iterator.next();
|
||||
for (int i = 0; i < count; i++) {
|
||||
long msgId = receivedAck.getMsgids(i);
|
||||
if (msgId == ack.getMsgId()) {
|
||||
iterator.remove();
|
||||
ack.setReceiveTime(time);
|
||||
ack.setReceivedAck(receivedAck);
|
||||
if (listener != null) {
|
||||
listener.onReceiveReceivedAck(ack);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -112,10 +119,11 @@ public class ReceivedAckManager {
|
||||
Iterator<ReceivedAck> iterator = list.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
ReceivedAck ack = iterator.next();
|
||||
if (time - ack.getSendTime() > ack.getMessageType().timeoutMillis) {
|
||||
long t = ack.getMessageType().timeoutMillis;
|
||||
if (t != 0L && time - ack.getSendTime() > t) {
|
||||
//超时
|
||||
iterator.remove();
|
||||
ack.setTimeout(true);
|
||||
ack.setStatus(ReceivedAck.Status.TIMEOUT);
|
||||
if (listener != null) {
|
||||
listener.onReceiveReceivedAck(ack);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.zhidao.support.adas.high.protocol;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
public class PackData {
|
||||
|
||||
public final long msgId;//消息ID
|
||||
@NonNull
|
||||
public final byte[] bytes;
|
||||
|
||||
public PackData(long msgId, @NonNull byte[] bytes) {
|
||||
this.msgId = msgId;
|
||||
this.bytes = bytes;
|
||||
}
|
||||
}
|
||||
@@ -26,7 +26,7 @@ public class RawPack {
|
||||
}
|
||||
|
||||
|
||||
public synchronized byte[] pack(MessageType msgType, byte[] data) {
|
||||
public synchronized PackData pack(MessageType msgType, byte[] data) {
|
||||
if (msgType == null) {
|
||||
return null;
|
||||
}
|
||||
@@ -66,7 +66,7 @@ public class RawPack {
|
||||
if (isNeedAck) {
|
||||
receivedAckManager.addNeedAckData(timeMillis, msgId, msgType, msg);
|
||||
}
|
||||
return msg;
|
||||
return new PackData(msgId, msg);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -32,7 +32,7 @@ public class SubscribeInterface {
|
||||
private final OnSubscribeInterfaceListener listener;
|
||||
|
||||
public interface OnSubscribeInterfaceListener {
|
||||
boolean onSendSubscribe(byte[] bytes);
|
||||
long onSendSubscribe(byte[] bytes);
|
||||
}
|
||||
|
||||
public SubscribeInterface(@NonNull OnSubscribeInterfaceListener listener) {
|
||||
@@ -65,8 +65,8 @@ public class SubscribeInterface {
|
||||
* @param messageTypes 要操作的接口
|
||||
* @return
|
||||
*/
|
||||
public boolean subscribeInterface(@Define.TerminalRole int role, @Define.SubscribeType int type, @NonNull Set<MessageType> messageTypes) {
|
||||
if (messageTypes == null) return false;
|
||||
public long subscribeInterface(@Define.TerminalRole int role, @Define.SubscribeType int type, @NonNull Set<MessageType> messageTypes) {
|
||||
if (messageTypes == null) return -1L;
|
||||
MessagePad.SubscribeDataReq.Builder builder = MessagePad.SubscribeDataReq.newBuilder();
|
||||
builder.setRole(role).setReqType(type);
|
||||
Map<MessageType, Integer> temp = new HashMap<>();
|
||||
@@ -74,8 +74,8 @@ public class SubscribeInterface {
|
||||
temp.put(messageType, messageType.typeCode.getNumber());
|
||||
}
|
||||
builder.addAllDataTypes(temp.values());
|
||||
boolean isSendSucceed = listener.onSendSubscribe(builder.build().toByteArray());
|
||||
if (isSendSucceed) {
|
||||
long isSendSucceed = listener.onSendSubscribe(builder.build().toByteArray());
|
||||
if (isSendSucceed > -1L) {
|
||||
for (MessageType messageType : messageTypes) {
|
||||
if (type == Constants.SUBSCRIBE_TYPE.SUBSCRIBE) {
|
||||
if (!subscribedInterface.containsKey(messageType)) {
|
||||
@@ -103,12 +103,12 @@ public class SubscribeInterface {
|
||||
* @param messageType 要操作的接口
|
||||
* @return 是否加入ws发送队列
|
||||
*/
|
||||
public boolean subscribeInterface(@Define.TerminalRole int role, @Define.SubscribeType int type, @NonNull MessageType messageType) {
|
||||
if (messageType == null) return false;
|
||||
public long subscribeInterface(@Define.TerminalRole int role, @Define.SubscribeType int type, @NonNull MessageType messageType) {
|
||||
if (messageType == null) return -1L;
|
||||
MessagePad.SubscribeDataReq.Builder builder = MessagePad.SubscribeDataReq.newBuilder();
|
||||
builder.setRole(role).setReqType(type).addDataTypes(messageType.typeCode.getNumber());
|
||||
boolean isSendSucceed = listener.onSendSubscribe(builder.build().toByteArray());
|
||||
if (isSendSucceed) {
|
||||
long isSendSucceed = listener.onSendSubscribe(builder.build().toByteArray());
|
||||
if (isSendSucceed > -1L) {
|
||||
if (type == Constants.SUBSCRIBE_TYPE.SUBSCRIBE) {
|
||||
if (!subscribedInterface.containsKey(messageType)) {
|
||||
subscribedInterface.put(messageType, messageType.typeCode.getNumber());
|
||||
|
||||
Reference in New Issue
Block a user