android 全局定时器,高通Android LED驱动移植-GPIO,内核定时器
有些设备需要有灯的闪烁来表达一些含义,比如电池电量。利用GPIO实现灯的灭、亮、慢闪、快闪需要配合内核定时器来实现。
首先我们找到高通内核自带的LED相关的文件,
/kernel/drivers/leds/leds-msm-pmic.c
利用这个文件来实现灯的灭、亮、慢闪、快闪。
一.注册这个设备
1.添加编译选项
修改
kernel\drivers\leds\Makefile
添加
obj-y
+= leds-msm-pmic.o
2.修改配置文件
修改
kernel\arch\arm\configs\xxxx_defconfig
打开或添加
CONFIG_LEDS_MSM_PMIC=y
3.注册平台驱动
修改
kernel\arch\arm\mach-msm\board-xxxx.c
(1)添加
static struct platform_device
msm_device_pmic_leds = {
.name = "pmic-leds",
.id =
-1,
};
(2)
添加
static struct platform_device
*devices[] __initdata = {
&msm_device_pmic_leds
}
这样就可以在/sys/class/leds/下注册设备节点了。
二.实现灯的闪烁。
有两种方式实现灯的闪烁,一是在modem端实现灯的逻辑控制,二是在Android端实现等的控制。
modem端是利用宏的传递:
#define
PCOM_CUSTOMER_CMD_LED_POWER_ON
1
(void)msm_led_proc_comm(PCOM_CUSTOMER_CMD_LED_POWER_ON,
LED_COLOR_RED);
我们这里只讲android端:
1.首先注册一个内核定时器
struct timer_list
led_test_timer;
然后在设备初始化的时候初始化定时器
init_timer(&led_test_timer);
led_test_timer.data
=
(unsignedlong)0x00;
led_test_timer.expires =
jiffies + 0xFFFFFFFF*HZ;
led_test_timer.function =
led_test_timer_function;
//该函数按照自己的需要进行修改
add_timer(&led_test_timer);
调用的时候修改定时器的时间
mod_timer(&reset_button_timer, jiffies +
xx*HZ);
调用完成了再修改回去
mod_timer(&reset_button_timer,
jiffies + 0xFFFFFFFF*HZ);
2.然后注册一个新设备
static int
msm_pmic_led_probe(struct platform_device
*pdev)
{
......
rc
= led_classdev_register(&pdev->dev,
&led_test);//添加
if
(rc) {
dev_err(&pdev->dev,
"unable to register
led_test driver\n");
return
rc;
}
......
}
static int __devexit
msm_pmic_led_remove(struct platform_device *pdev)
{
......
led_classdev_unregister(&led_test);//添加
......
}
//添加
static struct led_classdev
msm_led_test = {
.name= "led_test",
.brightness_set= msm_led_test_set,
.brightness= 0,
};
//添加,灯的控制就在如下函数里面实现
static voidmsm_led_test_set(struct
led_classdev *led_cdev,
enum led_brightness value)
{
if(value == 0)//灭
{
mod_timer(&reset_button_timer,
jiffies +0xFFFFFFFF*HZ);
value_now = 0;
}
else if (value ==
1)//亮
{
mod_timer(&reset_button_timer,
jiffies +0xFFFFFFFF*HZ);
value_now = 1;
}
else
if (value == 2)//慢闪
{
mod_timer(&reset_button_timer,
jiffies
+0x1*HZ);//时间自己设定
value_now = 2;
}
else
if (value == 3)//快闪
{
mod_timer(&reset_button_timer,
jiffies
+0x2*HZ);//时间自己设定
value_now = 3;
}
}
我的led_test_timer_function函数实现如下
int
value_now;//全局变量
led_test_timer_function()
{
int i =
1;
if(value_now== 0)
{
led_set_gpio_value(10,0);//这里是把GPIO10拉低(看硬件的定义),
这个函数看自己的系统是怎么定义的,名称不固定
}
if(value_now== 1)
{
led_set_gpio_value(10,0);//这里把GPIO10la'gao1,灯亮
}
if(value_now==
2)
{
if(i == 1)
{
led_set_gpio_value(10,1);
i =
0;
}
else
{
led_set_gpio_value(10,0);
}
}
if(value_now== 3)
{
if(i == 1)
{
led_set_gpio_value(10,1);
i =
0;
}
else
{
led_set_gpio_value(10,0);
}
}
}
这样,向/sys/class/leds/led_test/brightness写入0,1,2,3,一个灯的各种灭、亮、慢闪、快闪就实现了。
android 全局定时器,高通Android LED驱动移植-GPIO,内核定时器相关推荐
- android display 框架,高通android display subsystem
转自:http://blog.csdn.net/shichaog/article/details/61191716 MDSS:Multimedia Display Sub-system Display ...
- 高通android编译命令,高通Android源码
电脑环境: Ubuntu17.04 高通开源源码网站:下载地址 安装git &repo sudo apt install git sudo apt install repo 修改repo su ...
- Android调焦函数,高通Android驱动中的对焦马达的配置
对焦马达主要配置static const struct v4l2_isp_regval ov8865_isp_setting_oflim[] 函数,其中配置地方如下所示: 1.马达I2C地址的配置: ...
- 高通MSM8255串口驱动移植
1.在板载信息里面添加东东: a.首先进入kernel/arch/arm/mach-msm/board-msm7x30.c 在结构体struct platform_device *devices[ ] ...
- 高通Android智能平台环境搭建_编译流程分析
高通Android智能平台环境搭建_编译流程分析 高通平台环境搭建,编译,系统引导流程分析 TOC \o \h \z \u 1. 高通平台android开发总结. 7 1.1 搭建高通平台环境开发环境 ...
- 高通Android智能平台开发总结
高通Android智能平台开发总结 1. 高通平台android开发总结. 7 1.1 搭建高通平台环境开发环境. 7 1.2 搭建高通平台环境开发环境. 7 1.2.1 高通android智能平台概 ...
- android加载efi分区,高通Android UEFI XBL 代码流程分析
高通Android UEFI XBL 代码流程分析 背景 之前学习的lk阶段点亮LCD的流程算是比较经典,但是高通已经推出了很多种基于UEFI方案的启动架构. 所以需要对这块比较新的技术进行学习.在学 ...
- 高通Android平台硬件调试之Camera篇
之前一段时间有幸在高通android平台上调试2款camera sensor,一款是OV的5M YUV sensor,支持jpeg out,同时也支持AF,调试比较比较简单,因为别的项目已经在使用了, ...
- 高通Android平台开发
问题描述: 对于有过开发高通android系统的人来说,获取代码构建开发环境并不是难事,但对于刚刚接触这一块内容的人,如果没有详细的说明很容易走弯路,本文档就是根据本人的实践总结的一 ...
最新文章
- 零售连锁专卖信息化解决方案简介之二
- CentOS7关闭防火墙方法
- python os.path 模块 路径文件名 新建文件夹 文件 路径 是否存在
- 标号的类型是near还是far有什么区别,作用是什么?
- easyui中tab页中js脚本无法加载的问题及解决方法
- Spark on Yarn集群多Application并行执行
- Jakarta EE 8状态
- [渝粤教育] 武汉交通职业学院 现代物流管理概论 参考 资料
- android play gif,Play.gif image in android without using webview
- python post json 解析失败_python中json对象转换出错解决方法
- tomcat 7 无法打开管理页面
- android自动修音,唱吧自动修音app下载-唱吧自动修音 安卓版v8.6.0-PC6安卓网
- 考前必练15道题_《系统集成项目管理工程师备考宝典》
- 所谓的三十之后无技术
- 一次 Kafka 导致的 Sentry 无法处理 MiniDump 问题分析
- TCL语言学习笔记一
- 关于手机打开pdf文档乱码的解决办法
- 【Arduino IDE 2.0他来了】
- ProtoBuf(Google Protocol Buffers)—— repeated 修饰字段注意点(packed修饰)
- 一文读懂|什么是dToF激光雷达技术?
热门文章
- LiteOS内核源码分析:任务栈信息
- Python 异步 ASGI 服务器及框架
- 红橙Darren视频笔记 面试题 为什么view获取宽高为0 onCreate onResume view.post源码浅析(继承activity api27)
- pycharm与python连接_pycharm2017实现python3.6与mysql的连接
- FileZilla软件下载使用简易教程
- Spark 部署及示例代码讲解
- linux增加 inode空间,linux 增加inode 的方法
- linux-x86_64 error,Linux-x86_64 Error: 5: Input/output error的问题
- Java中事件驱动程序设计_【JAVA语言程序设计基础篇】--事件驱动程序设计--鼠标事件...
- c++引用另一个类的方法_转:关于A类,B类,C类IP地址的网段和主机数的计算方法...