[3.4.0][mogo-adas]Taxi和清扫车共用后摄像头接口,改为主动订阅接口方式

This commit is contained in:
xinfengkun
2023-07-12 16:02:41 +08:00
parent 494a3e51db
commit cfc36e03a3
15 changed files with 78 additions and 51 deletions

View File

@@ -1032,6 +1032,14 @@ class MoGoAutopilotControlProvider :
}
}
override fun setIsSubscribeBackCameraVideoVideo(role: Int, isSubscribe: Boolean) {
val type =
if (isSubscribe) Constants.SUBSCRIBE_TYPE.SUBSCRIBE else Constants.SUBSCRIBE_TYPE.UNSUBSCRIBE
AdasManager.getInstance().subscribeInterface(
role, type, MessageType.TYPE_RECEIVE_BACK_CAMERA_VIDEO
)
}
override fun sendRoboBusJinlvM1FrontDoorCmd(switchCmd: Int): Boolean {
return AdasManager.getInstance().sendRoboBusJinlvM1FrontDoorCmd(switchCmd)
}

View File

@@ -534,7 +534,7 @@ class MoGoAdasListenerImpl : OnAdasListener {
* @param data 数据
*/
override fun onBackCameraVideo(header: MessagePad.Header, data: ByteArray) {
CallerSweeperFutianBackCameraVideoListenerManager.invokeSweeperFutianBackCameraVideo(data)
CallerBackCameraVideoListenerManager.invokeBackCameraVideo(data)
}
/**

View File

@@ -21,7 +21,7 @@ import mogo.telematics.pad.MessagePad.SetParamReq
import java.util.concurrent.atomic.AtomicInteger
import kotlin.concurrent.*
internal class MoGoLookAroundProviderImpl: IMoGoLookAroundProvider, IMoGoSweeperFutianBackCameraVideoListener, IMoGoRoboBusJinlvM1StitchedVideoListener, IMoGoGetParamResponseListener {
internal class MoGoLookAroundProviderImpl: IMoGoLookAroundProvider, IMoGoBackCameraVideoListener, IMoGoRoboBusJinlvM1StitchedVideoListener, IMoGoGetParamResponseListener {
companion object {
private const val TAG = "MoGoLookAroundProvider"
@@ -58,7 +58,7 @@ internal class MoGoLookAroundProviderImpl: IMoGoLookAroundProvider, IMoGoSweeper
private var job: Job? = null
override fun init(ctx: Context) {
CallerSweeperFutianBackCameraVideoListenerManager.addListener(TAG, this)
CallerBackCameraVideoListenerManager.addListener(TAG, this)
CallerRoboBusJinlvM1StitchedVideoListenerManager.addListener(TAG, this)
CallerAutopilotGetParamResponseDispatcher.addListener(TAG, this)
if (AppIdentityModeUtils.isM1(FunctionBuildConfig.appIdentityMode)) {
@@ -116,7 +116,7 @@ internal class MoGoLookAroundProviderImpl: IMoGoLookAroundProvider, IMoGoSweeper
}
override fun onSweeperFutianBackCameraVideo(data: ByteArray) {
override fun onBackCameraVideo(data: ByteArray) {
if (bitmapWidth.get() == 0 || bitmapHeight.get() == 0) {
val options = BitmapFactory.Options()
options.inJustDecodeBounds = true

View File

@@ -15,18 +15,17 @@ import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.target.CustomTarget;
import com.bumptech.glide.request.transition.Transition;
import com.mogo.eagle.core.function.api.autopilot.IMoGoBackCameraVideoListener;
import com.mogo.eagle.core.function.api.autopilot.IMoGoRoboBusJinlvM1StitchedVideoListener;
import com.mogo.eagle.core.function.api.autopilot.IMoGoSweeperFutianBackCameraVideoListener;
import com.mogo.eagle.core.function.call.autopilot.CallerBackCameraVideoListenerManager;
import com.mogo.eagle.core.function.call.autopilot.CallerRoboBusJinlvM1StitchedVideoListenerManager;
import com.mogo.eagle.core.function.call.autopilot.CallerSweeperFutianBackCameraVideoListenerManager;
import com.mogo.eagle.core.utilcode.mogo.glide.GlideApp;
import com.mogo.eagle.core.utilcode.util.ThreadUtils;
/**
* 清扫车摄像头展示View 10Hz
* M1拼接视频展示View 10Hz 需要订阅连接成功后订阅才生效CallerAutoPilotControlManager.setIsSubscribeM1StitchedVideo(isSubscribe)
* 图片帧展示View
*/
public class MogoVideoView extends AppCompatImageView implements IMoGoSweeperFutianBackCameraVideoListener, IMoGoRoboBusJinlvM1StitchedVideoListener {
public class MogoVideoView extends AppCompatImageView implements IMoGoBackCameraVideoListener, IMoGoRoboBusJinlvM1StitchedVideoListener {
private static final String TAG = MogoVideoView.class.getSimpleName();
private final RequestOptions requestOptions = new RequestOptions()
.priority(Priority.HIGH)
@@ -49,14 +48,14 @@ public class MogoVideoView extends AppCompatImageView implements IMoGoSweeperFut
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
CallerSweeperFutianBackCameraVideoListenerManager.INSTANCE.addListener(TAG, this);
CallerBackCameraVideoListenerManager.INSTANCE.addListener(TAG, this);
CallerRoboBusJinlvM1StitchedVideoListenerManager.INSTANCE.addListener(TAG, this);
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
CallerSweeperFutianBackCameraVideoListenerManager.INSTANCE.removeListener(this);
CallerBackCameraVideoListenerManager.INSTANCE.removeListener(this);
CallerRoboBusJinlvM1StitchedVideoListenerManager.INSTANCE.removeListener(this);
}
@@ -90,7 +89,7 @@ public class MogoVideoView extends AppCompatImageView implements IMoGoSweeperFut
}
@Override
public void onSweeperFutianBackCameraVideo(@NonNull byte[] data) {
public void onBackCameraVideo(@NonNull byte[] data) {
draw(data);
}

View File

@@ -412,6 +412,13 @@ interface IMoGoAutopilotControlProvider : IMoGoFunctionServerProvider {
*/
fun setIsSubscribeM1StitchedVideo(isSubscribe: Boolean)
/**
* 后摄像头接口订阅 目前用于清扫车后摄像头接口和Taxi右后摄像头接口
* @param role 角色 详情参见{@link Constants.TERMINAL_ROLE}
* @param isSubscribe 是否订阅
*/
fun setIsSubscribeBackCameraVideoVideo(role: Int,isSubscribe: Boolean)
fun sendRoboBusJinlvM1FrontDoorCmd(switchCmd: Int): Boolean
fun sendRoboBusJinlvM1AirConditionerCmd(

View File

@@ -0,0 +1,13 @@
package com.mogo.eagle.core.function.api.autopilot
/**
* 后摄像头视频数据
* 目前用于清扫车福田后摄像头和Taxi右后摄像头
* 需要进行接口订阅才能 CallerAutoPilotControlManager.setIsSubscribeBackCameraVideoVideo(role: Int, isSubscribe: Boolean)
*/
interface IMoGoBackCameraVideoListener {
/**
* 后摄像头视频数据 10Hz 每一帧为一张图片
*/
fun onBackCameraVideo(data: ByteArray)
}

View File

@@ -1,11 +0,0 @@
package com.mogo.eagle.core.function.api.autopilot
/**
* 清扫车(福田)后摄像头视频数据
*/
interface IMoGoSweeperFutianBackCameraVideoListener {
/**
* 清扫车(福田)后摄像头视频数据 10Hz 每一帧为一张图片
*/
fun onSweeperFutianBackCameraVideo(data: ByteArray)
}

View File

@@ -566,6 +566,15 @@ object CallerAutoPilotControlManager {
providerApi?.setIsSubscribeM1StitchedVideo(isSubscribe)
}
/**
* 后摄像头接口订阅 目前用于清扫车后摄像头接口和Taxi右后摄像头接口
* @param role 角色 详情参见{@link Constants.TERMINAL_ROLE}
* @param isSubscribe 是否订阅
*/
fun setIsSubscribeBackCameraVideoVideo(role: Int, isSubscribe: Boolean) {
providerApi?.setIsSubscribeBackCameraVideoVideo(role, isSubscribe)
}
fun sendRoboBusJinlvM1FrontDoorCmd(switchCmd: Int): Boolean {
return providerApi?.sendRoboBusJinlvM1FrontDoorCmd(switchCmd) ?: false
}

View File

@@ -0,0 +1,20 @@
package com.mogo.eagle.core.function.call.autopilot
import com.mogo.eagle.core.function.api.autopilot.IMoGoBackCameraVideoListener
import com.mogo.eagle.core.function.call.base.CallerBase
/**
* 后摄像头视频数据
*/
object CallerBackCameraVideoListenerManager : CallerBase<IMoGoBackCameraVideoListener>() {
/**
* 后摄像头视频数据
*/
fun invokeBackCameraVideo(data: ByteArray) {
M_LISTENERS.forEach {
val listener = it.value
listener.onBackCameraVideo(data)
}
}
}

View File

@@ -1,20 +0,0 @@
package com.mogo.eagle.core.function.call.autopilot
import com.mogo.eagle.core.function.api.autopilot.IMoGoSweeperFutianBackCameraVideoListener
import com.mogo.eagle.core.function.call.base.CallerBase
/**
* 清扫车(福田)后摄像头视频数据
*/
object CallerSweeperFutianBackCameraVideoListenerManager : CallerBase<IMoGoSweeperFutianBackCameraVideoListener>() {
/**
* 后摄像头视频数据
*/
fun invokeSweeperFutianBackCameraVideo(data: ByteArray) {
M_LISTENERS.forEach {
val listener = it.value
listener.onSweeperFutianBackCameraVideo(data)
}
}
}

View File

@@ -261,8 +261,8 @@ public interface OnAdasListener {
// void onFSMStatusReasonRespond(@NonNull MessagePad.Header header, @NonNull FSMStatusReasonQueryOuterClass.FSMStatusReasonRespond respond);
/**
* 清扫车后部摄像头视频 10Hz
*
* 后部摄像头视频 10Hz
* 目前用于清扫车后摄像头和Taxi右右后摄像头
* @param header 头
* @param data 数据
*/

View File

@@ -28,7 +28,7 @@ public enum MessageType {
TYPE_RECEIVE_PLANNING_OBJECTS(MessagePad.MessageType.MsgTypePlanningObjects, "Planning障碍物"),
TYPE_RECEIVE_CHASSIS_STATES(MessagePad.MessageType.MsgTypeChassisStates, "底盘状态"),
TYPE_RECEIVE_FUNCTION_STATES(MessagePad.MessageType.MsgTypeFunctionStates, "重构后功能状态"),
TYPE_RECEIVE_BACK_CAMERA_VIDEO(MessagePad.MessageType.MsgTypeBackCameraVideo, "清扫车后摄像头"),
TYPE_RECEIVE_BACK_CAMERA_VIDEO(MessagePad.MessageType.MsgTypeBackCameraVideo, "后摄像头"),
TYPE_RECEIVE_M1_STITCHED_VIDEO(MessagePad.MessageType.MsgTypeM1StitchedVideo, "M1拼接视频"),
TYPE_RECEIVE_BASIC_INFO_REQ(MessagePad.MessageType.MsgTypeBasicInfoReq, "自动驾驶设备基础信息请求"),

View File

@@ -9,7 +9,8 @@ import com.zhidao.support.adas.high.common.CupidLogUtils;
import com.zhidao.support.adas.high.protocol.RawData;
/**
* 清扫车后摄像头 10Hz
* 清扫车和Taxi后摄像头
* 需要主动订阅,否则工控机不会发送此数据
*/
public class BackCameraVideoMessage extends MyAbstractMessageHandler {
@@ -21,13 +22,13 @@ public class BackCameraVideoMessage extends MyAbstractMessageHandler {
int len = raw.getPackageLengthValue() - raw.getOffsetValue();
byte[] data = new byte[len];
System.arraycopy(raw.originalData.toByteArray(), raw.getOffsetValue(), data, 0, len);
AdasChannel.calculateTimeConsumingOnDispatchRaw("清扫车后摄像头", raw.receiveTime);
AdasChannel.calculateTimeConsumingOnDispatchRaw("后摄像头", raw.receiveTime);
long nowTime = 0;
if (CupidLogUtils.isEnableLog())
nowTime = SystemClock.elapsedRealtime();
if (adasListener != null) {
adasListener.onBackCameraVideo(raw.getHeader(), data);
}
AdasChannel.calculateTimeConsumingBusiness("清扫车后摄像头", nowTime);
AdasChannel.calculateTimeConsumingBusiness("后摄像头", nowTime);
}
}

View File

@@ -10,6 +10,7 @@ import com.zhidao.support.adas.high.protocol.RawData;
/**
* M1拼接视频 10Hz
* 需要主动订阅,否则工控机不会发送此数据
*/
public class M1StitchedVideoMessage extends MyAbstractMessageHandler {

View File

@@ -139,8 +139,8 @@ public class SubscribeInterface {
if (types.length > 0) {
for (MessageType messageType : types) {
if (messageType.name().toLowerCase().contains("type_receive")) {
//连接成功后只有M1拼接视频接收接口默认不进行订阅其他接收接口默认自动订阅
if (messageType == MessageType.TYPE_RECEIVE_M1_STITCHED_VIDEO) {
//连接成功后只有M1拼接视频接收接口和后摄像头接口默认不进行订阅,其他接收接口默认自动订阅
if (messageType == MessageType.TYPE_RECEIVE_M1_STITCHED_VIDEO || messageType == MessageType.TYPE_RECEIVE_BACK_CAMERA_VIDEO) {
unsubscribedInterface.put(messageType, messageType.typeCode.getNumber());
} else {
subscribedInterface.put(messageType, messageType.typeCode.getNumber());