平台demo
来源:互联网 发布:mac电脑翻墙教程 编辑:程序博客网 时间:2024/05/18 02:29
#ifndef __GPIO_BUTTONS_H__
#define __GPIO_BUTTONS_H__
struct gpio_button
{
int code;//按键值
char *desc;//描述信息
int gpio;//对应的管脚编号
};
#endif
#include <linux/init.h>
#include <linux/module.h>
#include <linux/input.h>
#include <linux/interrupt.h>
#include <linux/plarform_device.h>
#include <asm/gpio.h>
#include <plat/gpio-cfg.h>
#include "gpio_buttons.h"
MODULE_LICENSE("GPL");
struct resources button_resource[] ={
{
.start = IRQ_EINT0,
.end = IRQ_EINT0,
/*定义资源类型*/
flags = IORESOURCE_IRQ,
},
{
.start = IRQ_EINT0,
.end = IRQ_EINT0,
/*定义资源类型*/
flags = IORESOURCE_IRQ,
},
{
.start = IRQ_EINT0,
.end = IRQ_EINT0,
/*定义资源类型*/
flags = IORESOURCE_IRQ,
},
};
struct gpio_button gpio_buttons[] ={
{
.code = KEY_UP,
.desc = "up"
.gpio = s5pv210_gpio(3);
},
{
.code = KEY_UP,
.desc = "up"
.gpio = s5pv210_gpio(3);
},
{
.code = KEY_UP,
.desc = "up"
.gpio = s5pv210_gpio(3);
},
};
void gpio_button_release(struct device *dev){
printk("enter gpio_btton_release!\n");
}
struct platform_device button_dev = {
.name = "mybutton"
.resource = button_resource,
.num_resource = ARRAY_SIZE(button_resource);
.dev =
{
.platform_data = gpio_buttons,
.release = gpio_button_release,
},
};
int __init button_dev_init(void)
{
platform_device_register(&button_dev);
return 0;
}
void __exit button_dev_exit(void)
{
platform_device_unregister(&button_dev);
}
module_init(button_dev_init);
module_init(button_dev_exit);
struct input_dev *buttons_dev = NULL;
struct timer_list buttons_timer;
struct gpio_button *irq_button_data = NULL;
irqreturn_t buttons_isr(int irq,void *dev_id)
{
irq_button_data = (volatile struct gpio_button *)dev_id;
mod_timer(&buttons_timer,jiffies+HZ/100);
return IRQ_HANDLED;
}
void buttons_timer_function(unsigned long data)
{
unsigned int pinval;
volatile struct gpio_button *pindesc = irq_button_data;
if(!pindesc)
{
return ;
}
pinval= gpio_get_value(pindesc->gpio);
if(pinval)
{
/*释放*/
input_event(buttons_dev,EV_KEY,pindesc->code,0);
input_event(buttons_dev,EV_SYN,0,0);
}else{
input_event(buttons_dev,EV_KEY,pindesc->code,1);
input_event(button_dev,EV_SYN,0,0);
}
}
int button_probe(struct platform_device *pdev)
{
int i=0;
int ret = 0;
struct resources *res = NULL;
struct gpio_button *data = pdev->dev.platform_data;
buttons_dev = input_allocate_device();
set_bit(EV_KEY,button_dev->evbit);
set_bit(EV_SYN,button_dev->evbit);
set_bit(EV_REP,button_dev->evbit);
for(;i<pdev->num_resources,i++){
set_bit(data[i].code,buttons_dev->keybit);
/*获取一个资源
*dev制定从哪个platform_device获取资源
*type
*/
res = platform_get_resource(pdev,IORESOURCE_IRQ, i);
/*注册中断*/
request_irq(res->start, buttons_isr,
IRQF_TRIGGER_FALLING|IRQF_TRIGGER_RISING,
data[i].desc, &(data[i]))
}
ret = input_reset_device(buttons_dev);
init_timer(&buttons_timer);
buttons_timer.function = buttons_timer_function;
add_timer(&buttons_timer);
//ffstruct gpio_button *data =
return 0;
}
int button_remove(struct platform_device *dev)
{
int i = 0;
struct resources *res = NULL;
struct gpio_button *data = pdev->dev.platform_data;
del_timer(&buttons_timer);
input_unregister_device(buttons_dev);
for(;i<pdev->num_resources;i++){
res = platform_get_resource(pdev,IORESOURCE_IRQ, i)
free_irq(res->start,data+i);
}
input_free_device(pdev);
return 0;
}
struct platform_driver button_drv ={
.probe = button_probe,
.remove = button_remove,
.driver = {
.name = "mybutton",
}
};
int __init button_drv_init(void)
{
platform_driver_register(&button_drv);
return 0;
}
void __exit button_drv_exit(void)
{
platform_driver_unregister(&button_drv);
}
module_init(button_drv_exit);
module_init(button_drv_init);
#define __GPIO_BUTTONS_H__
struct gpio_button
{
int code;//按键值
char *desc;//描述信息
int gpio;//对应的管脚编号
};
#endif
#include <linux/init.h>
#include <linux/module.h>
#include <linux/input.h>
#include <linux/interrupt.h>
#include <linux/plarform_device.h>
#include <asm/gpio.h>
#include <plat/gpio-cfg.h>
#include "gpio_buttons.h"
MODULE_LICENSE("GPL");
struct resources button_resource[] ={
{
.start = IRQ_EINT0,
.end = IRQ_EINT0,
/*定义资源类型*/
flags = IORESOURCE_IRQ,
},
{
.start = IRQ_EINT0,
.end = IRQ_EINT0,
/*定义资源类型*/
flags = IORESOURCE_IRQ,
},
{
.start = IRQ_EINT0,
.end = IRQ_EINT0,
/*定义资源类型*/
flags = IORESOURCE_IRQ,
},
};
struct gpio_button gpio_buttons[] ={
{
.code = KEY_UP,
.desc = "up"
.gpio = s5pv210_gpio(3);
},
{
.code = KEY_UP,
.desc = "up"
.gpio = s5pv210_gpio(3);
},
{
.code = KEY_UP,
.desc = "up"
.gpio = s5pv210_gpio(3);
},
};
void gpio_button_release(struct device *dev){
printk("enter gpio_btton_release!\n");
}
struct platform_device button_dev = {
.name = "mybutton"
.resource = button_resource,
.num_resource = ARRAY_SIZE(button_resource);
.dev =
{
.platform_data = gpio_buttons,
.release = gpio_button_release,
},
};
int __init button_dev_init(void)
{
platform_device_register(&button_dev);
return 0;
}
void __exit button_dev_exit(void)
{
platform_device_unregister(&button_dev);
}
module_init(button_dev_init);
module_init(button_dev_exit);
struct input_dev *buttons_dev = NULL;
struct timer_list buttons_timer;
struct gpio_button *irq_button_data = NULL;
irqreturn_t buttons_isr(int irq,void *dev_id)
{
irq_button_data = (volatile struct gpio_button *)dev_id;
mod_timer(&buttons_timer,jiffies+HZ/100);
return IRQ_HANDLED;
}
void buttons_timer_function(unsigned long data)
{
unsigned int pinval;
volatile struct gpio_button *pindesc = irq_button_data;
if(!pindesc)
{
return ;
}
pinval= gpio_get_value(pindesc->gpio);
if(pinval)
{
/*释放*/
input_event(buttons_dev,EV_KEY,pindesc->code,0);
input_event(buttons_dev,EV_SYN,0,0);
}else{
input_event(buttons_dev,EV_KEY,pindesc->code,1);
input_event(button_dev,EV_SYN,0,0);
}
}
int button_probe(struct platform_device *pdev)
{
int i=0;
int ret = 0;
struct resources *res = NULL;
struct gpio_button *data = pdev->dev.platform_data;
buttons_dev = input_allocate_device();
set_bit(EV_KEY,button_dev->evbit);
set_bit(EV_SYN,button_dev->evbit);
set_bit(EV_REP,button_dev->evbit);
for(;i<pdev->num_resources,i++){
set_bit(data[i].code,buttons_dev->keybit);
/*获取一个资源
*dev制定从哪个platform_device获取资源
*type
*/
res = platform_get_resource(pdev,IORESOURCE_IRQ, i);
/*注册中断*/
request_irq(res->start, buttons_isr,
IRQF_TRIGGER_FALLING|IRQF_TRIGGER_RISING,
data[i].desc, &(data[i]))
}
ret = input_reset_device(buttons_dev);
init_timer(&buttons_timer);
buttons_timer.function = buttons_timer_function;
add_timer(&buttons_timer);
//ffstruct gpio_button *data =
return 0;
}
int button_remove(struct platform_device *dev)
{
int i = 0;
struct resources *res = NULL;
struct gpio_button *data = pdev->dev.platform_data;
del_timer(&buttons_timer);
input_unregister_device(buttons_dev);
for(;i<pdev->num_resources;i++){
res = platform_get_resource(pdev,IORESOURCE_IRQ, i)
free_irq(res->start,data+i);
}
input_free_device(pdev);
return 0;
}
struct platform_driver button_drv ={
.probe = button_probe,
.remove = button_remove,
.driver = {
.name = "mybutton",
}
};
int __init button_drv_init(void)
{
platform_driver_register(&button_drv);
return 0;
}
void __exit button_drv_exit(void)
{
platform_driver_unregister(&button_drv);
}
module_init(button_drv_exit);
module_init(button_drv_init);
0 0
- 平台demo
- 视频通讯跨平台demo
- 淘宝开放平台基础DEMO下载
- android 音视频跨平台通信Demo
- 基于qualcomm平台的无人机开发demo
- (Linux平台)配置文件读写demo
- 按平台引导至相应页面demo
- 根据OLAMI平台开发的日历Demo
- unity3d运行在android平台的一个demo
- [cocos2dx系列1]windows平台编译android demo
- Android微信开放平台SDK, demo调试
- Android微信开放平台SDK, demo调试
- cocos2dx 跨平台游戏开发基础框架以及Demo
- 在线Demo介绍—陕西省地理信息公共服务平台
- COCOS2D-X之跨平台创建目录Demo
- Android微信开放平台SDK, demo调试
- Qt5.3.0 for android windows平台下搭建及demo
- 【第一篇章-android平台buffer播放探索】buffer play demo
- Android中Recyclerview使用10----Recyclerview外面嵌套ScrollView滑动事件冲突
- QUTOJ 1363 麻烦的小卓 思维
- 如何在 Java 中正确使用 wait, notify 和 notifyAll
- Tomcat启动过程
- 一分耕耘,一分收获——自考总结
- 平台demo
- MySQL 常用语句
- 浅谈前端与SEO
- [综合] 一个简单图形界面框架XYGui的设计与实现 (二)
- Unity3D开发小贴士(十四)JsonUtility
- 在普通用户下无法创建目录
- Android: 显示系统模块加载以及调用流程 HWComposer::loadFbHalModule() -> framebuffer_open()
- Linux命令之patch操作命令 与diff命令结合
- 野指针与避免