0%

Platform Information :
 System: Android4.4.4
 Platform: Qualcomm msm8916
 Author: Andy Lee
 Email: huaqianlee@gmail.com

如有错误欢迎指出,共同学习,共同进步
 
  电池对移动设备的重要性不言而喻,所以电池监控系统也是Android的重中之重。今天就结合工作中的内容来分析一下电池监控系统。
##电池系统架构
  Android中的电池使用方式包括AC(即电源适配器)、Wireless(无线充电)、USB、Battery 等不同的模式。在APP层,通常包括电池状态显示等功能。在framework层 ,主要包括从底层获取电池信息、电池管理、LED控制、绘制更新充电图标等功能。因此,bms主要负责电池状态信息读取和更新相应状态。其架构如下: 
 
  电池系统架构

自上而下,Android电池监控系统分为如下几个部分:

###电池信息查看APP
  此部分主要是指查看电池信息的APP,比如电池医生、手机内置的电池信息查看APP等。这里就用工作的为例,在拨号状态下输入*#360*#,则会打开电池信息查看APP。如下所示:

Read more »

  对于移动设备,电源管理是相当重要的一部分,因为现在在公司主要负责电源管理部分,所以借用Google对其研究了一下,再结合自己的工作经验,准备接下来写一系列相关的文章。因为现在还研究得不够,所以最初的文章会不够深入。不过我会慢慢研究,然后写一些比较详细的解读。

高通的引导体系结构

boot
SBL- Second BootLoader

Read more »

  前些时间把Android Studio的环境折腾好,典型的geek风一下子完全吸引了我,比eclipse好用太多了,有很多意外的功能,快捷键可以自定义,但我基本都用的默认的。或许用Macbook Pro做Android开发是最好的选择,但自己平时要搞Linux/Android底层相关的东西,thinkpad就成为最好的选择,所以就入手了thinkpad,用着Ubuntu和Windows,先总结我使用环境下的快捷键。

Read more »

  因之前工作需要在kernel里存取数据到文件中,特意研究了一下怎么做,我们应尽可能避免直接操作文件I/O,选择通过调用VFS(虚拟文件系统)的函数来实现,我的实现demo如下:

##Includes

1
2
3
4
#include <linux/fs.h>
#include <asm/segment.h>
#include <asm/uaccess.h>
#include <linux/buffer_head.h>

##Opening a file

Read more »

  一直比较好奇,Android的电量是怎么计算出来的,今天就借用qualcomm平台的8916芯片研究了一下,因为其不带电量计,所以是通过一个bms系统计算出来的,下面就来详细分析一下计算方法。

SOC(state of charge 荷电状态 - 电量)

英文缩写:
FCC  Full-charge capacity
RC   Remaining capacity (剩余电量)
CC   Coulumb counter
UUC  Unusable capacity
RUC  Remaining usable capacity
SoC  State of charge
OCV  Open circuit voltage

Read more »

为了方便调试,不用每写一个类都需要写一个main方法对其测试,所以Java编写会经常用到JUnit测试。

新建一个JUnit.test测试包,如下图:

new

JUnit测试

可以在原文件类的方法上面加上@Test作为JUnit测试单元运行,也可以新建JUnit文件测试,编写方法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public class PersonTest {

@BeforeClass // 测试类加载之前运行
public static void setUpBeforeClass() throws Exception {
System.out.println("Before");
}

@Before // 每个测试方法运行前运行, 常用
public void setUp() throws Exception {
System.out.println("所有的测试方法运行之前运行!!");
}

@Test // 注解,给程序看
public void testEat(){

cn.itcast.Person p = new cn.itcast.Person();
p.eat();

}

@Test
public void testRun(){
cn.itcast.Person p = new cn.itcast.Person();
p.run();
}

@After // 每个测试方法运行后运行 ,常用
public void tearDown() throws Exception {
System.out.println("所有的测试方法运行之后运行!!");
}

@AfterClass //测试类加载之后运行
public static void tearDownAfterClass() throws Exception {
System.out.println("After");
}

运行JUnit

可以单独运行某个测试方法,也可以选中类,运行所以的测试方法,如下图:
run

在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束,常用的约束技术:
 1. XML DTD
 2. XML Schema

#DTD

##DTD格式
DTD(Document Type Definition),全称为文档类型定义。 DTD文件应使用UTF-8或Unicode。格式如下:
 
###外部文件

 

#PCDATA:放置字符数据 

Read more »

XML 是有w3c组织发布的一种可扩展标记语言(Extensible Markup Language)。

##XML 的常见应用

XML常见的应用场景:  

  1. XML技术除用于保存有关系的数据之外,它还经常用作软件配置文件,以描述程序模块之间的关系。
  2. 在一个软件系统中,为提高系统的灵活性,它所启动的模块通常由其配置文件决定
     
    例如一个软件在启动时,它需要启动A、B两个模块,而A、B这两个模块在启动时,又分别需要A1、A2和B1、B2模块的支持,为了准确描述这种关系,此时使用XML文件最为合适不过。

##XML的语法

###文档的声明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="GB2312"  standalone="yes" ?>
encoding - 文档的字符编码。(代码里面写什么格式,一般就将文档存为什么格式,一般通用“UTF-8”)
standalone - 文档是否为独立的,有依赖
```
###元素

元素指XML中的标签,可以嵌套,只有一个主标签,两种书写方式如下:
•包含标签体:<a>www.itcast.cn</a>
•不含标签体的:<a></a>, 简写为:<a/>

###属性
属性值必须用""'' 引起来,如:
```bash
<input name=“text”>
也可以:(XML将空格也当做内容,不过现在浏览器都会执行处理,调用trim())
<input>
<name>text</name>
</input>

###注释
<!–注释–> // 注释语句必须写在XML声明语句后面

###CDATA区

CDATA(character data)区用于让解析引擎不对其进行处理,按照原始内容显示.

1
2
3
4
5
6
7
格式:<![CDATA[ 内容 ]]>
eg:
<![CDATA[
<itcast>
<br/>
</itcast>
]]>

###转义字符
escape
###处理指令

处理指令,简称PI (processing instruction)。处理指令用来指挥解析引擎如何解析XML文档内容。例如,在XML文档中可以使用xml-stylesheet指令,通知XML解析引擎,应用css文件显示xml文档内容。

处理指令必须以“”作为结尾,XML声明语句就是最常见的一种处理指令。

  或许我是一个geek范的人,又或许是想显得很有逼格, whatever, 反正我就喜欢Linux的命令行,喜欢黑黑的geek风,这样完全体现出了技术的酷炫。现将一些自己觉得很有用能让自己显得很牛的装X快捷键和指令总结如下,其中有一部分相当有用,使用后逼格瞬间提升,不信看文章最后的后记。

Shell终端常用快捷键

  当进行命令行操作时,使用快捷键将极大提高工作效率,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Ctrl + U – 剪切光标前的内容
Ctrl + K – 剪切光标至行末的内容
Ctrl + Y – 粘贴
Ctrl + E – 移动光标到行末
Ctrl + A – 移动光标到行首
ALT + F – 跳向下一个空格
ALT + B – 跳回上一个空格
ALT + Backspace – 删除前一个单词
Ctrl + W – 剪切光标前一个单词
Ctrl + Insert – 复制
Shift + Insert – 粘贴
# 下面两个命令的用法,如: 在shell终端输入vi main.c进入vi界面后,想切换到命令行,可以通过Ctrl+Z
Ctrl + Z – 暂停应用程序
fg – 重新将程序唤到前台
Read more »