MotoNavi对接
一、设备端实现指令
支持GPS轨迹,需要使用有为GPS模块
1.1 获取设备功能集
说明
获取设备是否支持,carplay wifi投屏等,各平台实现参考wifi协议各平台中获取设备功能集指令和wifi协议概览中定义
备注
如果设备不支持记录仪,请联系我们增加专用指令
1.2 获取硬件识别码
说明
硬件识别码主要用于区分机型、方案、品牌等,目前主要用于ota,各平台实现参考wifi协议各平台中获取硬件识别码
1.3 获取设备wifi信息
说明
获取设备当前wifi的名称、密码,用于后续自动连接
1.4 切换到投屏模式
说明
从wifi热点模式,切换到投屏模式,用于不支持同时打开投屏与热点模式设备,设备自动切换到上一次的投屏模式
1.5 设备ota流程
2)app判断功能集 中 ota字段是否为1
3)app使用硬件识别码向服务器请求最新固件版本
备注
版本检测参考 硬件识别码定义
4)app通过服务器返回判断有更新版本,app切换网络下载固件到手机存储
5)app向设备发起升级请求(部分平台需要)
6)app通过指令上传固件到设备
7)app通知设备上传完成,开始升级(部分平台需要)
1.6 设备从视频模式自动切回投屏模式(上一次使用的投屏模式)
设备端监测APP wifi模式连接状态,通过心跳指令来判断设备异常退出情况,设备端超时(10秒)未收到app心跳指令请求, 则自动切回上一次投屏模式
1.7 轮胎信息传输
设备端监测APP wifi模式连接获取胎压数据并展示
二、模块功能
1. 事件数据,设备发送给APP
1)开启
发送命令:HBX_P2P_CONNECT
不用带参数
2)停止
发送命令:HBX_P2P_DISCONNECT
不用带参数
3)发送触屏事件
发送命令:HBX_P2P_TOUCH
参数:触摸屏json数据如下,需要转换成720p分辨率:
{
"ACT": "touch",
"action": 0,
"pointerCount": 1,
"x": 782.6667,
"y": 370
}
2.视频数据,APP发送给设备
1 视频数据格式,h264;
2 sdk通过回调上报上来;
接口调用方式下面介绍HBX_APP_CB_VIDEO;
三 APP与设备链接流程
链接过程
1) APP第一次链接,app填写车辆信息;
2) 设备切到换到热点模式,app进入系统WLAN进行连接(防止搜索不到导致无法连接),连接设备WiFi成功后返回app
备注:
此为修改后逻辑,之前为自动连接失败后进系系统连接
3) WIFI连接成后后,APP探测设备WIFI协议类型,根据协议类型,读取功能集(读取p2p连接信息)、WIFI信息(用于自动连接记录仪)、识别码指令(用于ota及定制化UI扩展),
4) APP探测成功,检测设备是否激活,已激活直接绑定并返回首页,未激活则输入(扫码)激活码,激活并绑定,返回首页。
5) APP自动扫描当前绑定设备的P2P并自动连接;
6) APP根据设备支持的功能,跳转不同的首页
备注
wifi名称以moto_开头(优先展示)
四 SO支持库(设备端)
说明
设备集成投屏相关库,不同平台不一样,请联系我们提供
库函数
1)初始化函数
void HbxP2PInit(void),开机调用一次;
2)释放函数
void HbxP2PRelease(void),关机调用一次;
3)设备发送数据接口函数
int HbxP2PCmd(HBX_P2PCMD_TYPE cmd_type,unsigned char *buf,int len);
参数: cmd_type,命令类型;
Buf: 内容;
Len: buf的长度;
命令具体类型:
1 HBX_P2P_CONNECT
设备p2p链接成功后发送消息给sdk:
参数: 不带参数
返回值:无
2 HBX_P2P_DISCONNECT
设备退出p2p或者退出投屏发送消息给sdk:
参数: 不带参数
返回值:无
3 HBX_P2P_TOUCH
设备端发送触摸屏事件,发送这个命令给so库;
参数类型:json格式,如下例:
char *touch = " {
"ACT" : "touch", --- 触摸事件
"action" : 1, --- 按下,移动,弹起
"pointerCount" : 1, --- 单点
"x" : 131, --- x 坐标,与视频分辨率转换过的
"y" : 292 --- y 坐标,与视频分辨率转换过的
}"
HbxP2PCmd(HBX_P2P_TOUCH, touch,strlen(touch));
Action:
0: ACTION_DOWN 表示触摸屏上的一个新触摸点被按下,或是轨迹球按下并移动的动作开始
1: ACTION_UP 表示一个触摸点被释放,或是轨迹球弹起的动作结束
2: ACTION_MOVE 表示一个或多个触摸点正在移动,或是轨迹球正在移动
3: ACTION_CANCEL 表示一个正在进行的触摸动作被系统取消,通常是因为另一个窗口需要接收输入焦点
返回值: 无
4 HBX_P2P_NATIVE
设备端界面被切走,目前不需要处理;
5 HBX_P2P_KEYFRAME
设备端请求获取最接近时间的关键帧
参数: 不带参数
返回值:无
So通过回调函数会主动上报当前关键帧;
6 HBX_P2P_RATIO
设备端设置分辨率
参数: 分辨率信息,宽与高,已经帧率
格式如下: ”ratio:1280,720,15”
用例如下:
HbxP2PCmd(HBX_P2P_RATIO,"ratio:1280,720,15",0);
返回值:无
默认分辨率720P,20帧率
4)设备回调函数的注册
回调函数:库接收到app那边的数据与命令,将这些信息返回给设备端;
int HbxP2PSetCallBack(HBXCMDCB eventCB,HBXCMDCB dataCB);
参数:eventCB ,回调处理事件,出去音视频数据之外的数据;
dataCB,回调音视频数据;
注意:
这个dataCB回调函数不能处理太长延时函数,只适合传输数据,不能再这个函数里面去做软解码视频数据操作,最好只实现数据拷贝到缓存里面,然后再另一个线程用这个缓存实现刷屏等功能;
1 HBX_APP_CB_VIDEO
so库上报视频帧,一次一个完整的数据包,目前支持H264格式;
2 HBX_APP_CB_AUDIO
so上报音频帧,一次一个完整的pcm数据包;目前支持采样率16000,单通道,16位音频数据;
3 HBX_APP_CB_KEYFRAME
so上报关键视频帧,一个完整的h264数据包;
4 HBX_APP_CB_CONNECT:
so上报与APP链接成功,设备端收到这个消息可以开启显示界面
上报数据格式:
参数格式:
{
"ACK": "start",
"x": "1280",
"y": "720",
"f": "20",
"time": "1720694787"
}
x,y,f,为分辨率
5 HBX_APP_CB_DISCONNECT
so上报与APP停止发送视频数据,设备端收到这个消息可以退出显示界面,
不带参数
6 HBX_APP_CB_NATIVE
so上报APP已经被切换到后台,目前不需要处理这个消息
7 HBX_APP_CB_AP
so 上报 APP 请求,需要将设备切换到 wifi 的 ap 模式
附录一
p2p链接成功后需要同步双方的dns,根据dns来设置p2p的dns,将手机与设备放在同一个网段中才能正常链接;