其他分享
首页 > 其他分享> > 车载Android系统快速倒车

车载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格式)以提升图片加载的速度,因为二进制格式的图片不用解码。

标签:kernel,SOC,通知,车载,倒车,Android,快速
来源: https://blog.csdn.net/qq_41076734/article/details/118103376