input设备个人总结

1.input设备支持的event及解释

关键结构体input_event信息:
struct input_event {
struct timeval time;
__u16 type;
__u16 code;
__s32 value;
};

#define EV_SYN                   0x00       表示设备支持所有的事件
#define EV_KEY                   0x01       键盘或者按键,表示一个键码  
#define EV_REL                   0x02       鼠标设备,表示一个相对的光标位置结果
#define EV_ABS                   0x03       手写板产生的值,其是一个绝对整数值 
#define EV_MSC                   0x04       其他类型 
#define EV_LED                   0x11       LED灯设备
#define EV_SND                   0x12       蜂鸣器,输入声音 
#define EV_REP                   0x14       允许重复按键类型 
#define EV_PWR                   0x16       电源管理事件 
#define EV_FF_STATUS 0x17
#define EV_MAX 0x1f
#define EV_CNT (EV_MAX+1)

2.底层驱动

static int __devinit xxx_probe(struct platform_device *pdev)
{
    struct gpio_keys_platform_data *pdata = pdev->dev.platform_data;
    struct input_dev *input;
    int i, error;

    input = input_allocate_device();//申请input_dev结构
    if (!input)
        return -ENOMEM;

    platform_set_drvdata(pdev, input);//把input_dev结构放好(以后方便调用)

    input->evbit[0] = BIT(EV_KEY);//目前event的类型不操作32,所以你会看到对于evbit数组的操作都是对evbit[0]中的位来进行操作.

    input->name = pdev->name;    //input 设备名
    input->phys = "gpio-keys/input0";
    input->dev.parent = &pdev->dev;

    input->id.bustype = BUS_HOST;
    input->id.vendor = 0x0001;  
    input->id.product = 0x0001;
    input->id.version = 0x0100;  
   //vendor,product,version: 厂商号,产品号,版本号


  error = input_register_device(input);//注册输入设备,并和对应的handler处理函数挂钩
    if (error) {
        printk(KERN_ERR "Unable to register gpio-keys input device\n");
        goto fail;
    }

    return 0;

 fail:

  input_free_device(input);    //如果注册失败的话就注销input设备,释放已分配的input结构体

    return error;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值