有些设备需要有灯的闪烁来表达一些含义,比如电池电量。利用GPIO实现灯的灭、亮、慢闪、快闪需要配合内核定时器来实现。

首先我们找到高通内核自带的LED相关的文件,

/kernel/driver​s/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,内核定时器相关推荐

  1. android display 框架,高通android display subsystem

    转自:http://blog.csdn.net/shichaog/article/details/61191716 MDSS:Multimedia Display Sub-system Display ...

  2. 高通android编译命令,高通Android源码

    电脑环境: Ubuntu17.04 高通开源源码网站:下载地址 安装git &repo sudo apt install git sudo apt install repo 修改repo su ...

  3. Android调焦函数,高通Android驱动中的对焦马达的配置

    对焦马达主要配置static const struct v4l2_isp_regval ov8865_isp_setting_oflim[] 函数,其中配置地方如下所示: 1.马达I2C地址的配置: ...

  4. 高通MSM8255串口驱动移植

    1.在板载信息里面添加东东: a.首先进入kernel/arch/arm/mach-msm/board-msm7x30.c 在结构体struct platform_device *devices[ ] ...

  5. 高通Android智能平台环境搭建_编译流程分析

    高通Android智能平台环境搭建_编译流程分析 高通平台环境搭建,编译,系统引导流程分析 TOC \o \h \z \u 1. 高通平台android开发总结. 7 1.1 搭建高通平台环境开发环境 ...

  6. 高通Android智能平台开发总结

    高通Android智能平台开发总结 1. 高通平台android开发总结. 7 1.1 搭建高通平台环境开发环境. 7 1.2 搭建高通平台环境开发环境. 7 1.2.1 高通android智能平台概 ...

  7. android加载efi分区,高通Android UEFI XBL 代码流程分析

    高通Android UEFI XBL 代码流程分析 背景 之前学习的lk阶段点亮LCD的流程算是比较经典,但是高通已经推出了很多种基于UEFI方案的启动架构. 所以需要对这块比较新的技术进行学习.在学 ...

  8. 高通Android平台硬件调试之Camera篇

    之前一段时间有幸在高通android平台上调试2款camera sensor,一款是OV的5M YUV sensor,支持jpeg out,同时也支持AF,调试比较比较简单,因为别的项目已经在使用了, ...

  9. 高通Android平台开发

    问题描述:          对于有过开发高通android系统的人来说,获取代码构建开发环境并不是难事,但对于刚刚接触这一块内容的人,如果没有详细的说明很容易走弯路,本文档就是根据本人的实践总结的一 ...

最新文章

  1. 零售连锁专卖信息化解决方案简介之二
  2. CentOS7关闭防火墙方法
  3. python os.path 模块 路径文件名 新建文件夹 文件 路径 是否存在
  4. 标号的类型是near还是far有什么区别,作用是什么?
  5. easyui中tab页中js脚本无法加载的问题及解决方法
  6. Spark on Yarn集群多Application并行执行
  7. Jakarta EE 8状态
  8. [渝粤教育] 武汉交通职业学院 现代物流管理概论 参考 资料
  9. android play gif,Play.gif image in android without using webview
  10. python post json 解析失败_python中json对象转换出错解决方法
  11. tomcat 7 无法打开管理页面
  12. android自动修音,唱吧自动修音app下载-唱吧自动修音 安卓版v8.6.0-PC6安卓网
  13. 考前必练15道题_《系统集成项目管理工程师备考宝典》
  14. 所谓的三十之后无技术
  15. 一次 Kafka 导致的 Sentry 无法处理 MiniDump 问题分析
  16. TCL语言学习笔记一
  17. 关于手机打开pdf文档乱码的解决办法
  18. 【Arduino IDE 2.0他来了】
  19. ProtoBuf(Google Protocol Buffers)—— repeated 修饰字段注意点(packed修饰)
  20. 一文读懂|什么是dToF激光雷达技术?

热门文章

  1. LiteOS内核源码分析:任务栈信息
  2. Python 异步 ASGI 服务器及框架
  3. 红橙Darren视频笔记 面试题 为什么view获取宽高为0 onCreate onResume view.post源码浅析(继承activity api27)
  4. pycharm与python连接_pycharm2017实现python3.6与mysql的连接
  5. FileZilla软件下载使用简易教程
  6. Spark 部署及示例代码讲解
  7. linux增加 inode空间,linux 增加inode 的方法
  8. linux-x86_64 error,Linux-x86_64 Error: 5: Input/output error的问题
  9. Java中事件驱动程序设计_【JAVA语言程序设计基础篇】--事件驱动程序设计--鼠标事件...
  10. c++引用另一个类的方法_转:关于A类,B类,C类IP地址的网段和主机数的计算方法...