当前所在位置:珠峰网资料 >> 计算机 >> 计算机等级考试 >> 正文
linuxinputsubsystem虚拟键盘和鼠标
发布时间:2011/1/12 10:58:24 来源:城市学习网 编辑:ziteng
  1  event device
  in /dev/input/event?
  cat data from /dev/input/event? the data format is :
  struct input_event {
  struct timeval time;
  __u16 type;
  __u16 code;
  __s32 value;
  };
  e.g :
  xx xx xx xx yy yy yy yy tt tt cc cc vv vv vv vv
  xx is usec
  yy is sec
  tt is type
  cc is key code
  vv is value, might be it means keyup or keydown
  for mouse event, you can get the same message format
  xx, yy is the same as keyboard
  tt is EV_REL, it means the value feild is relative distance;
  cc is REL_X or REL_Y
  vv is the value of relative distance
  2 register input_dev
  /**************************
  for virtual mouse
  **/
  static int  vkm_vmouse_register(void)
  {
  struct input_dev *vmouse_dev;
  vmouse_dev = input_allocate_device();
  if (!vmouse_dev)
  return -ENOMEM;
  vmouse_dev->name = "VMouse ";
  vmouse_dev->phys = "xxmouse/input1";
  vmouse_dev->id.bustype = BUS_HOST;
  vmouse_dev->id.vendor = 0x0001;
  vmouse_dev->id.product = 0x0002;
  vmouse_dev->id.version = 0x0100;
  vmouse_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL);
  vmouse_dev->keybit[BIT_WORD(BTN_MOUSE)] =
  BIT_MASK(BTN_LEFT) | BIT_MASK(BTN_RIGHT);
  vmouse_dev->relbit[0] = BIT_MASK(REL_X) | BIT_MASK(REL_Y);
  /* error check */
  error = input_register_device(vmouse_dev);
  if (error) {
  input_free_device(vmouse_dev);
  return error;
  }
  }
  /**************************
  for virtual keyboard
  **/
  static int  vkm_vkbd_register(void)
  {
  int i, error;
  struct input_dev *vkbd_dev;
  vkbd_dev = input_allocate_device();
  if (!vkbd_dev)
  return -ENOMEM;
  vkbd_dev->name = "VKBD Keyboard";
  vkbd_dev->phys = "atakbd/input0";
  vkbd_dev->id.bustype = BUS_HOST;
  vkbd_dev->id.vendor = 0x0001;
  vkbd_dev->id.product = 0x0001;
  vkbd_dev->id.version = 0x0100;
  vkbd_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP);
  vkbd_dev->keycode = atakbd_keycode;
  vkbd_dev->keycodesize = sizeof(unsigned char);
  vkbd_dev->keycodemax = ARRAY_SIZE(atakbd_keycode);
  for (i = 1; i < 0x72; i++) {
  set_bit(atakbd_keycode[i], vkbd_dev->keybit);
  }
  /* error check */
  error = input_register_device(vkbd_dev);
  if (error) {
  input_free_device(vkbd_dev);
  return error;
  }
  return 0;
  }
  send keyboard event to input handler like this:
  input_report_key(vkbd_dev,KEY_A,0);
  input_sync(vkbd_dev);
  and send mouse event to input handler like this:
  input_report_rel(vmouse_dev, REL_X, 10);
  input_report_rel(vmouse_dev, REL_Y, 10);
  input_sync(vmouse_dev);
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved