1 lighteffect系统架构图
图1-1 整改前lighteffect系统架构图
上图为整改前lighteffect系统架构图,存在的问题如下:
(1)代码bug
原因:由于系统中兼容了lighteffect和lighteffect2,写代码时只记了一个,出现代码bug。如:
图1-3 代码bug举例
强制关闭LED时,由于疏忽只杀了lighteffect进程,忘记杀lighteffect2进程。
(2)系统架构问题
从图1-1我们可以看出,整个系统对于LED的控制比较混乱,很容易出现灯效控制混乱的结果。
首先,Hal层存在两个版本的lighteffect。
其次,Framework层存在两个LedManager类来控制灯效。
最后,Apk可直接跨过Framework层调用Hal层的lighteffect控制灯效。
基于以上问题,整改思路有如下几点:
[1]Hal层只使用一个版本lighteffect2
因为lighteffect已经不再维护,且lighteffect2灯效能覆盖lighteffect。
[2]将framework和vendor目录下的LedManager类统一,通过aidl增加接口供apk和系统调用
具体参考<android系统通过aidl增加接口供apk调用>
整改后的lighteffect系统架构图如下:
图1-4 整改后lighteffect系统架构图
整改后的逻辑是,所有处理灯效的请求通过LedManager以进程间通信地方式发送给服务端LedManagerService统一处理。
2 UML类图
(1)aidl定义接口
LedManager.aidl目前开放如下4个接口:
// apk使用
public void setLedStatus(String value)
// 系统使用
public void setNoSuspend()
public void turnOffLed()
public void setLedEnabled(boolean value)
(2)客户端
LedManager
图2-1 LedManager类图
(3)服务端
LedManagerService
图2-2 LedManagerService类图
3 lighteffect2指令功能汇总
指令 | 灯效 | |
1 | lighteffect2 1 1 | 开机⽩⾊呼吸灯效 |
2 | lighteffect2 2 1 | 关机红⾊呼吸灯效 |
3 | lighteffect2 3 1 | 视频通话绿⾊⻓亮灯效 |
4 | lighteffect2 4 1 | 语⾳输⼊蓝⾊伸缩灯效 |
5 | lighteffect2 5 1 | 语⾳输⼊蓝⾊流⽔灯效 |
6 | lighteffect2 6 1 | 智能⾳箱蓝⾊⻓亮灯效 |
7 | lighteffect2 7 1 | 智能⾳箱蓝⾊呼吸灯效 |
8 | lighteffect2 8 1 | 待机状态⽩⾊呼吸灯效 |
9 | lighteffect2 9 1 | 开机状态⽩⾊⻓亮灯效 |
10 | lighteffect2 10 1 | 错误状态橙⾊⻓亮灯效 |
11 | lighteffect2 11 1 | 错误状态橙⾊呼吸灯效 |
12 | lighteffect2 12 1 | 红⾊模式灯效 |
13 | lighteffect2 13 1 | ⽩⾊模式灯效 |
14 | lighteffect2 14 1 | 关闭灯效 |
4 功能测试
操作 | 期望 | 测试结果 | |
1 | 打开指示灯效 | ->白灯 | ok |
2 | 关闭指示灯效 | ->灯灭 | ok |
3 | 打开指示灯效,test->开启远场语音 | ->白,流水蓝,白 | ok |
4 | 关闭指示灯效,test->开启远场语音 | ->灭,流水蓝,灭 | ok |
5 | 待机 | ->红 | ok |
6 | 待机后开机 | ->红,白 | ok |
7 | 关机 | ->灭 | ok |
8 | 关机后开机 | ->灭,白 | 概率,关机后开机,白灯过很久才亮 |
9 | 打开指示灯效,重启,test->开启远场语音 | ->白,流水蓝,白 | ok |
10 | 关闭指示灯效,重启,test->开启远场语音 | ->灭,流水蓝,灭 | ok |
5 UML顺序图
以4(8)"关机后开机"为例画UML顺序图,其余操作类似:
图5-1 "关机后开机"UML顺序图