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:
aibingbing
2024-03-04 11:56:56 +08:00
13 changed files with 1753 additions and 832 deletions

View File

@@ -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
}
}

View File

@@ -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
/**
* 办公室调试使用,强制开启自动驾驶,将 statuspilotmodecontrol_pilotmode强追设置为 1

View File

@@ -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
}
/**

View File

@@ -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) {

View File

@@ -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)) +
'}';

View File

@@ -11,7 +11,8 @@ import mogo.telematics.pad.MessagePad;
/**
* 发送数据时ID生成器
* 每天生成的ID1开始自增也可以表示为发送的数量
* 每天生成的ID1开始自增只保存最后一条消息的相关信息,故也可以表示为每天发送的数量
* 默认保存30天的数据
*/
public class MessageIdGenerator {
private static final String TAG = "MessageIdGenerator";

View File

@@ -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);
}

View File

@@ -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;
}
}

View File

@@ -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);
}
/**

View File

@@ -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());