> 问答

linux input subsystem虚拟键盘和鼠标

人阅读 2024-10-17 00:06:28Linux
广告 X
欧意最新版本

欧意最新版本

欧意最新版本app是一款安全、稳定、可靠的数字货币交易平台。

APP下载  官网地址

  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);

关键词标签:linux,input,subsyste

LOT物联网

iot产品 iot技术 iot应用 iot工程

Powered By LOT物联网  闽ICP备2024036174号-1

联系邮箱:support1012@126.com