一个android汽车试验app的技术memo
1 系统构成
这个汽车试验系统中,汽车上有一个设备,可以采集数据,上面运行的可能是某个实时Linux系统,此设备将自己模拟成usb大容量存储设备。
平板是三星galaxy tab 2,带OTG功能,连接车载试验设备。
这个app就运行在平板上,发送操作指令,比如启动、加速,并且获取汽车上的实时数据,比如速度加速度。
2 通信协议
本来可以使用usb命令请求和响应,不过可能是车载设备上RAM有限,转而通过文件作为通信载体,
PAD和车载设备都可以修改文件,然后都通过轮询去检查文件更新。
3 app技术方案
app端按理说应该用jni做这事,因为有实时性的要求。不过经过调研测试发现java层的文件读写也能满足要求,
因为最大文件大小大概在100k,经过试验读写时间在100ms以下。
然后就是车载设备之间的协议是结构体的格式,因为车载设备端是c语言的,
app端就找了一个叫JavaStruct的开源库,能很好的实现类似c中的struct使用。挺有意思的,不过有时也得像c一样计算各种类型的字节数。
另外还有画图,就是速度加速度变化图,带刻度尺和线,小同事也是找了个开源的库,用着好像也行,客户不挑。
1 系统构成
这个汽车试验系统中,汽车上有一个设备,可以采集数据,上面运行的可能是某个实时Linux系统,此设备将自己模拟成usb大容量存储设备。
平板是三星galaxy tab 2,带OTG功能,连接车载试验设备。
这个app就运行在平板上,发送操作指令,比如启动、加速,并且获取汽车上的实时数据,比如速度加速度。
2 通信协议
本来可以使用usb命令请求和响应,不过可能是车载设备上RAM有限,转而通过文件作为通信载体,
PAD和车载设备都可以修改文件,然后都通过轮询去检查文件更新。
这个后来发现,由于缓存原因,车载设备上的文件修改PAD端不能及时检测,
后来同事在文件系统的基础上跳过缓存,在c代码中open文件时使用参数O_DIRECT。
以前就看到资料说MTP协议就有在PC端更新不及时的问题。不过不了解这个车载设备是不是MTP协议。3 app技术方案
app端按理说应该用jni做这事,因为有实时性的要求。不过经过调研测试发现java层的文件读写也能满足要求,
因为最大文件大小大概在100k,经过试验读写时间在100ms以下。
然后就是车载设备之间的协议是结构体的格式,因为车载设备端是c语言的,
app端就找了一个叫JavaStruct的开源库,能很好的实现类似c中的struct使用。挺有意思的,不过有时也得像c一样计算各种类型的字节数。
另外还有画图,就是速度加速度变化图,带刻度尺和线,小同事也是找了个开源的库,用着好像也行,客户不挑。