超低功耗操作系统的设计经验

导语

续航时长一直是智能手表的最大痛点。目前的安卓智能手表,在正常使用的情况下,最多使用1-2天(那些宣称能使用5天以上的,其实要阉割很多功能,一般只能看时间和计步,与手环没有什么差别)。如何解决这个问题?行业里没有太好的方案。1.加大电池容量?手表的个头不可能太大,人们需要戴的是手表而不是“手雷”。2.不用全触摸的真彩屏?可以,那就用按键和低功耗的屏幕吧,反正佳明就是这样,这样的操作与显示的效果,与几十年前的电子表有什么区别呢。3.用运算量更小的CPU?那些丰富的安卓手表应用就跑不起来了,还不如直接戴手环。行业里这几年无论是卡西欧、摩托罗拉、三星还是苹果,在智能手表的续航时长上一直没有实质性的突破。长期以来长续航与高颜值就是鱼和熊掌的关系。但软硬结合的架构设计以及操作系统层面的自研,其实可以很好的解决这个问题。本文从CPU的选取开始,然后介绍双核架构的必要性,再进一步阐述自研OS的软硬件架构、双核通信的设计与实现、UI框架、其他省电优化的关键点,逐步勾勒出既高颜值又省电易用的智能手表操作系统。

使用规范

libaroma GUI 使用规范

在使用 libaroma framework 遇到很多使用问题,造成后期改动,其实就是使用没遵循规范造成死机,显示异常。各种莫名奇妙的问题。这里就列举几个使用规范。

Traffic Card

公交卡蓝牙稳定性完善

背景

公交卡开卡过程中药频繁和后台交互拉取数据,由于手表没有联网能力,所以我们自己封装一套HttpManager 供第三方合作的App使用,以便访问自己的服务器,但是在与雪球合作的时候,合作业务不稳定,反馈给我们说,是调用我们的接口返回蓝牙异常造成的, 所以我们这边也复现这个问题,在实际的调试过程中也有发现,蓝牙不稳定,尤其是泰山2代上非常不稳定,之前HttpManager都是假设蓝牙稳定情况下,但是在蓝牙不稳定的情况下就有可能造成消息请求发送出去回不来,或者请求根本就没从手表发送出去,缺少相应的回包机制。

S8 Volte

经过一两天的研究,初步得出一些方法来开启联通volte,由于没有机器,或者其他原因就不打算继续研究了.既然研究了就分享下,具体是否有效还有待探究.

Android eSE

Android eSE 访问接口

NFC 基于eSE的卡模拟,需要访问eSE,来替换秘钥建立安全域下载Applet个人化应用读取个人信息等。这些过程都要通过OMA接口访问,OMA其实是一个装饰APK,来给上层提供统一的API。目前SE实现方式主要分三种 基于SIM卡的 基于SD卡的和基于内置eSE的。针对不同的实现有不同的终端,所以用OMA包装一层,现阶段基于eSE的方案,最终的实现在NFC系统APK中,这是一个系统级别的服务,开机自启动运行。NFC整体架构如下。

FreeRTOS_GUI

最近研究了下libaroma GUI在FreeRTOS上实现,再结合特定的外设调整,本以为自己有可能去做,项目原因,如果有机会有条件做就自己尝试移植下,现在只能先放一边了,突然觉得没啥玩了,总体框架如下,其实就是android 2D UI框架的缩小版本.

libaroma_gt.png

Compile_Win_aapt

理论上,只要下一个windows版本的SDK,里面就自带了fastboot和adb工具。
但我最近确实遇到了一个需要在linux下编译出windows版本的adb的问题,废话不多说,步骤如下:

  1. 执行:apt-get install mingw32
    安装了linux-windows交叉编译环境mingwin
    
  2. 执行:. build/envsetup.sh
  3. 执行choosecombo,选择各个参数
    这两步设置了一些编译参数和环境变量,按照你正常编译android的设置即可。
    
  4. 执行:make USE_MINGW=y adb
  5. 执行:make USE_MINGW=y fastboot
  6. 执行:make USE_MINGW=y aapt

微信离线支付

微信支付(智能设备离线支付)

离线支付能力对智能穿戴设备很重要,如果支付要依靠与手机连接,支付能力过于依赖手机,则在使用太多限制,是用户感觉使用穿戴设备支付不够便捷,如果只用绑定一次就可以离线支付这样便捷性自然凸显出来,增加便携性.现在微信客服端已经可以在没有网络下支付,所以要是智能手表具有微信支付能力,不需要太多的改动.下面可以简单陈述下实现

Global Platform

[TOC]

术语表

术语 英文 解释
EMV Europay, MasterCard and Visa
ISD Issuer Secure Domains 发卡方安全域
SD Secure Domains 安全域
DM SD
DES Data Encryption Standard 数据加密标准
DEK Data Encryption Key 数据加密密钥
TDES Triple DES 3DES 算法
MAC Message Authentication Code 消息认证码
C-MAC Command Message Authentication Code
KMC DES Master Key for Personalization Session Keys
ICV Initial Chaining Vecto 初始向量
CM CardManger
SCP Secure Channel Protocol 安全通道协议
AID Application Identifier 应用标识符
APDU Application Protocol Data Unit 应用协议数据单元
CLA Class byte of the command message 命令消息中的类字节
INS Instruction byte of the command message
P1 Reference control parameter 1 引用控制参数1
P2 Reference control parameter 2 引用控制参数2
Lc Exact length of data in a case 3 or case 4 command
Le Maximum length of data expected in response to a case 2 or case 4 command
SW Status Word 状态字
SW1 Status Word One
SW2 Status Word Two
TLV Tag Length Value
OPEN GlobalPlatform envisequenguochengceronment
ENC Encryption 加密