{"version":"0.1.0","code":"0000","result":true,"message":"处理成功","errdetail":"","timestamp":1671508964342,"data":{"id":71712604,"title":"12.2交互时序","slug":"dnzhxf","format":"lake","bookId":26046811,"body":null,"body_draft":null,"body_html":"
注意:EHP服务功能,依赖于定位、算路、引导及离线下载服务先初始化,且各服务初始化和EHP服务初始化需在同个线程。
(1)定位初始化依赖
需要定位功能参数funcs包含LocFuncEHPEnable。
LocModeType locModeType = new LocModeType();\nlocModeType.funcs |= LocFuncSwitch.LocFuncEHPEnable;\nPosService.init();
(2)资源依赖
a. 兼容模式(默认,一般都是这个)
HMI重点关注EhpConfig.dat文件的拷贝与路径配置。根据项目需求不同,分为单渠道包和多渠道包。
具体如何区分单渠道包和多渠道包,可见《单个包支持多渠道配置的对接》、《服务管理/初始化》;
简单识别方式:查看收到的AutoSDK包里面的目录:
多渠道包目录示例
a1. 单渠道包的处理(默认):
单渠道包,默认使用包内的资源文件,按如下时序调用:
// initBaseInitParam\nBaseInitParam param = new BaseInitParam();\nparam.assetPath = "your_assetPath"; // eg: your_assetPath="/android_assets/blRes/"; 存在文件:assets/blRes/EhpConfig.dat\nServiceMgr.getServiceMgrInstance().initBaseLibs(param, app);\n\n// initBL\nBLInitParam blInitParam = new BLInitParam();\nblInitParam.dataPath.cfgFilePath = "your_cfgFilePath"; // local path\nblInitParam.*** = ***;\nServiceMgr.getServiceMgrInstance().initBL(blInitParam);\n// initBL时,AutoSDK默认会将“your_assetPath/EhpConfig.dat”拷贝到"your_cfgFilePath"目录下面\n \n// otherInit\n// ***\n// initEHP\nEHPInitParam ehpInitParam = new EHPInitParam();\n// set EhpConfig.dat path; HMI需要再显式告知ehpService“EhpConfig.dat”的位置\nehpInitParam.configPath = "your_cfgFilePath" + "/EhpConfig.dat"; \nehpInitParam.*** = ***;\nehpService.init(ehpInitParam);
a2. 多渠道包的处理
多渠道包,需要HMI主动拷贝资源文件,参考《单个包支持多渠道配置的对接》,调用时序与单渠道一致。多渠道包的用法,不清楚的请咨询高德项目经理。
b. 新双域模式
⚠️ 此模式由高德项目经理在出包时配置,无法通过后期接口调用修改,除非是项目经理明确是这个模式,否则都不需要关注。如有不清楚,请与高德项目经理联系并确认。
a1. 单渠道包的处理(默认):
// initBaseInitParam\nBaseInitParam param = new BaseInitParam();\nparam.assetPath = "your_assetPath"; // eg: your_assetPath="/android_assets/blRes/"; 存在文件:assets/blRes/EhpConfig.dat\nServiceMgr.getServiceMgrInstance().initBaseLibs(param, app);\n\n// initBL\nBLInitParam blInitParam = new BLInitParam();\nblInitParam.dataPath.cfgFilePath = "your_cfgFilePath"; // local path\nblInitParam.*** = ***;\nServiceMgr.getServiceMgrInstance().initBL(blInitParam);\n// initBL时,AutoSDK默认会将“your_assetPath/EhpConfig.dat”拷贝到"your_cfgFilePath"目录下面\n \n// otherInit\n// ***\n\n// initEHP\nEHPInitParam ehpInitParam = new EHPInitParam();\n// ⚠️ 双域不需要配置configPath\n// ehpInitParam.configPath = "your_cfgFilePath" + "/EhpConfig.dat"; \nehpInitParam.*** = ***;\nehpService.init(ehpInitParam);
a2. 多渠道包的处理
多渠道包,需要HMI主动拷贝资源文件,参考《单个包支持多渠道配置的对接》,调用时序与单渠道一致。多渠道包的用法,不清楚的请咨询高德项目经理。
boolean com.autonavi.gbl.ehp.EHPService.init(EHPInitParam initEHP)
请注意检查函数的返回值,通常return false的场景表示配置文件不存在。
com.autonavi.gbl.ehp.model.EHPInitParam
配置项 | 是否必填 | 配置项含义 | 取值 | 默认值 | 生效条件 | 注意事项 |
configPath | 是 | 配置文件EhpConfig.dat存放路径 | 需要用户配置 | 为空 | 初始化 | |
enableSimulatedNavi | 否 | 模拟导航是否支持ehp功能 | true/false | false | 模拟导航 | 台架测试时,为了验证EHP是否能否正常播发,可以设置enableSimulatedNavi=true。此时会将模拟定位信号输入给EHP,并进行一定程度的播发。正常使用请保持enableSimulatedNavi=false。 |
enableNoRouteSendOnInit | 否 | 配置EHPV2与EHPV3建立连接时是否发送无导航路径信息,默认为true,设置为false则建立连接时不向EHPV3发送无导航路径信息 | true/false | true | 有双域通信功能 | 请参考下面导航路线同步,只在崩溃后重启为避免EHPV3导航路径重置时可设置。 |
address | 否 | 指定双域通信IP地址,不指定则使用配置文件中默认设置 | ipv4地址 | 空字符串 | 有双域通信功能 | 请跟双域产品确认后设置 |
port | 否 | 指定双域通信端口号,不指定则使用配置文件中默认设置 | 端口号数字 | 0 | 有双域通信功能 | 请跟双域产品确认后设置 |
/**\n * 初始化ehp服务\n */\npublic boolean initEhpService() {\n\tif (mEHPService == null) {\n\t\tmEHPService = (EHPService) ServiceMgr.getServiceMgrInstance().getBLService(SingleServiceID.EHPSingleServiceID);\n\t}\n\tEHPInitParam ehpInitParam = new EHPInitParam();\n\treturn mEHPService.init(ehpInitParam);\n}
/**\n * 反初始化ehp服务\n */\npublic boolean uninitEhpService() {\n\tif (isEhpInited()) {\n\t\tmEHPService.removeOutputObserver(mObserver);//mObserver保存在实例中\n\t\tmEHPService.unInit();\n\t\treturn true;\n\t}\n\treturn false;\n}
【必须】EHP功能依赖网络,请确保在网络变化时调用。
ServiceMgr.getServiceMgrInstance().networkChange(networkStatus);\nEHPService.updateNetworkStatus(networkStatus);
注意:当前两个接口均需要调用。
开始导航和结束导航场景。
在开始导航时,HMI会将导航路线设置到AutoSDK,并由AutoSDK经由双域通信播发给EHPv3。
播发过程中,有三个控制路线通知的时机:
(1)初始化时,通过EHPInitParam.enableNoRouteSendOnInit控制和EHP v3建立连接时,是否发送无导航路线通知,默认true表示发送。通常只有出现崩溃重启不希望中断EHPv3的路线时,才考虑设置enableNoRouteSendOnInit为false。
(2)在AutoSDK通知双域通信时,EHPService有setAutoUpdateRoute()的接口用于控制AutoSDK是否通知EHP/双域通信导航路径。
(3)HMI可以通过EHPService.setConfigValue决定导航路线是否通知EHPv3。对应下图红色逻辑。
可进行的控制参考EHPConfigType:
/**\n * 配置EHPV2无导航路径信息时是否通知EHPV3,默认为true,设置为false则无导航路径(非建立连接)时不通知EHPV3\n */\n public final static int EHP_CONFIG_TYPE_NOROUTE_SEND = 1;\n /**\n * 配置EHPV2收到导航路径信息是否通知EHPV3,默认为true ,设置为false后SetNaviPath()不通知EHPV3\n */\n public final static int EHP_CONFIG_TYPE_ROUTE_SEND = 2;
如果项目需要使用EHP输出协议(ADASIS v2)协议来获取Short Range/Long Range等消息时,需要进行对接。
具体的ADASIS v2协议请参考《EHP输出协议介绍》
添加Ehp的消息透出观察者,EHP的Adas消息以此接口的Observer对外进行透出
boolean com.autonavi.gbl.ehp.EHPService.addOutputObserver(IEHPOutputObserver output)
删除Ehp的消息透出观察者
boolean com.autonavi.gbl.ehp.EHPService.removeOutputObserver(IEHPOutputObserver output)
清除Ehp的消息透出观察者
boolean com.autonavi.gbl.ehp.EHPService.clearOutputObserver()
交互协议观察者,通过output接口输出json协议
void com.autonavi.gbl.ehp.observer.IEHPOutputObserver.output(String key,byte[] buffer)
private IEHPOutputObserver mObserver;\n/**\n * 协议观察者实现类\n */\npublic class EHPOutputObserver implements IEHPOutputObserver {\n\t/**\n\t * buffer 为输出json协议串内容\n\t */\n @Override\n public void output(String type, byte[] buffer) {\n final String msg = new String(buffer);\n // 将type和buffer内容回调给客户端\n }\n}\n\n/**\n * 协议观察者添加\n */\npublic boolean addEhpOutputObserver(IEHPOutputObserver observer) {\n\tif (observer != null && isEhpInited()) {\n mObserver = observer;\n\t\treturn mEHPService.addOutputObserver(observer);\n\t}\n\treturn false;\n}\n\n/**\n * 转发 EhpOutput或者EHR 数据给 EHP\n * 该接口只透传数据,不解析Json数据,目前用来传递 UsageMode和CarMode 以及 EHR反馈的激活信号\n * @param jsonMsg json字符串,如: "{\\"UsageMode\\": 1, \\"CarMode\\":0}"\n * @return 是否透传成功\n */\npublic boolean inputExternalMsg(String jsonMsg) {\n\tif (isEhpInited()) {\n\t\tmEHPService.inputMsg(jsonMsg);\n\t\treturn true;\n\t}\n\treturn false;\n}\n\n\n/**\n * 反初始化ehp服务\n */\npublic boolean uninitEhpService() {\n\tif (isEhpInited()) {\n\t\tmEHPService.removeOutputObserver(mObserver);\n\t\tmEHPService.unInit();\n\t\treturn true;\n\t}\n\treturn false;\n}
EHP需要特定的离线数据以支持坡度、曲率获取(_adas.ans)以及车道连通性获取(_lane.ans)。
使用方法请参考《EHP离线数据下载》
HMI按照需要重置EHP预测树。
接口:
void com.autonavi.gbl.ehp.EHPService.resetPredictiveTree()