车载Android系统快速倒车
Posted 四季帆
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了车载Android系统快速倒车相关的知识,希望对你有一定的参考价值。
1. 概念
1.1 快速倒车
android系统完全起来(各种service初始化、app初始化等)需要22秒左右的时间,所以当车机刚刚启动时(22秒之前),驾驶员挂R档进入倒车时Android 的倒车应用是无法响应的,此阶段的倒车需求称之为“快速倒车”。
快速倒车的实现方式有很多种,小编所知的有两种,一种是在kernel 中直接调用camera和frame buffer的接口实现快速倒车功能,kernel启动2秒左右的时间就可以相应倒车;第二种是SOC内置一块MCU 来运行一个RTOS,在Android系统未完全起来之前,倒车影像的获取和显示由该RTOS实现。
系统完全起来之前,kernel 通过倒车引脚的电平变化,进入快速倒车,显示倒车画面。
1.2 正常倒车
Android系统起来后,kernel 通过倒车引脚的电平变化,发送uevent到用户空间,用户空间有个device服务一直监听该 uevent,然后在用户空间启动倒车程序,显示倒车画面。
1.3 差异
正常倒车可以使用图形系统绘制动态倒车轨迹线,而快速倒车只有固定倒车线。
2. 实现思路
2.1 快速倒车
摄像头数据获取、显示屏图层叠加都由kernel 完成,此时Android应用还没启动起来,所以倒车相关的所有策略都由内核来做。
2.2 正常倒车
Android应用直接打开设备文件,通过ioctl获取摄像头数据,显示屏图层叠加,即通过驱动提供的接口进行倒车操作,内核不做任何策略,所有倒车相关的策略都由Android应用来做。
3. 流程图
4. 进入快速倒车
MCU收到了倒车的CAN信号以后会将某个GPIO 电平拉高以通知SOC进入倒车,但是有的时候手头可能没有CAN板之类的CAN信号模拟器,此时可以使用DEVICE_ATTR 添加一个属性,来控制是否进入倒车,实现也很简单,就是在倒车判断条件处添加一个flag,该属性控制flag 的值即可。注意:该属性只能控制是否进入快速倒车,也就是说,Android完全启动以后再操控该属性是无效的,不会进入倒车界面。
5. 倒车信息处理
倒车过程中方向盘的角度大小、速度大小、雷达检测到的距离以及雷达音量等信息都是由MCU通过串口发送给SOC的,可以定义一个通知链A,SOC 串口驱动在处理MCU发送过来的信息时,调用通知链A上所有感兴趣的模块函数。
譬如,快速倒车模块可以注册一个通知块到通知链A,当SOC串口进行DMA搬运时通知通知链A上所有感兴趣的模块函数,此时快速倒车模块的通知块就可以获取串口信息中倒车相关的数据。
注:不知到通知链用法的可以看我的博客《Linux通知链机制》。
6. 其它
快速倒车的UI界面都是图片形式的,为了加快读取图片的速度,可以将png、jpg等格式的图片转化为二进制格式(bin格式)以提升图片加载的速度,因为二进制格式的图片不用解码。
以上是关于车载Android系统快速倒车的主要内容,如果未能解决你的问题,请参考以下文章
收藏向 | 车载Android系统开发学习专题,进军车载必备
“2023热门岗位”Android车载系统开发工程师入门指南