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

  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值