コード例 #1
0
ファイル: uibc.c プロジェクト: CobraJet93/kernel-3.10.54
static long uibc_kbd_dev_ioctl(struct file * file, unsigned int cmd, unsigned long arg) {
    void __user *uarg = (void __user *)arg;
    static short XValue;
    static short YValue;
    short keycode;
    short touchPosition[16];
    int err, i;

    pr_debug("uibc_kbd_dev_ioctl,cmd=%d\n", cmd);
    switch (cmd) {
    case UIBC_KEYBOARD: {
        uibc_input_dev->keycodemax = ARRAY_SIZE(uibc_keycode);
        for (i = 0; i < ARRAY_SIZE(uibckbd->keymap); i++)
            __set_bit(uibckbd->keymap[i], uibc_input_dev->keybit);
        err = input_register_device(uibc_input_dev);
        if (err) {
            pr_err("register input device failed (%d)\n", err);
            input_free_device(uibc_input_dev);
            return err;
        }
        uibc_registered = 1;
        break;
    }
    case UIBC_KEYBOARD_MIRACAST: {
        uibc_input_dev->keycodemax = ARRAY_SIZE(uibc_keycode_chars);
        for (i = 0; i < ARRAY_SIZE(uibc_keycode_chars); i++)
            __set_bit(uibc_keycode_chars[i], uibc_input_dev->keybit);
        err = input_register_device(uibc_input_dev);
        if (err) {
            pr_err("register input device failed (%d)\n", err);
            input_free_device(uibc_input_dev);
            return err;
        }
        uibc_registered = 1;
        break;
    }
    case UIBC_KEY_PRESS: {
        if (copy_from_user(&keycode, uarg, sizeof(keycode)))
            return -EFAULT;
        pr_debug("uibc keycode %d\n", keycode);
        input_report_key(uibc_input_dev, keycode, 1);
        input_sync(uibc_input_dev);
        break;
    }
    case UIBC_KEY_RELEASE: {
        if (copy_from_user(&keycode, uarg, sizeof(keycode)))
            return -EFAULT;
        input_report_key(uibc_input_dev, keycode, 0);
        input_sync(uibc_input_dev);
        break;
    }
    case UIBC_POINTER_X: {
        if (copy_from_user(&XValue, uarg, sizeof(XValue)))
            return -EFAULT;
        pr_debug("uibc pointer X %d\n", XValue);
        break;
    }
    case UIBC_POINTER_Y: {
        if (copy_from_user(&YValue, uarg, sizeof(YValue)))
            return -EFAULT;
        pr_debug("uibc pointer Y %d\n", YValue);
        input_report_rel(uibc_input_dev, REL_X, XValue);
        input_report_rel(uibc_input_dev, REL_Y, YValue);
        input_sync(uibc_input_dev);
        XValue = 0;
        YValue = 0;
        break;
    }
    case UIBC_TOUCH_DOWN: {
        if (copy_from_user(&touchPosition, uarg, sizeof(touchPosition)))
            return -EFAULT;
        pr_debug("uibc UIBC_TOUCH_DOWN id=%d,(%d,%d)\n",
                 touchPosition[idVal(0)],
                 touchPosition[xVal(0)], touchPosition[yVal(0)]);
        input_report_key(uibc_input_dev, BTN_TOUCH, 1);
        input_report_abs(uibc_input_dev,
                         ABS_MT_TRACKING_ID, touchPosition[idVal(0)]);
        input_report_abs(uibc_input_dev, ABS_MT_POSITION_X, touchPosition[xVal(0)]);
        input_report_abs(uibc_input_dev, ABS_MT_POSITION_Y, touchPosition[yVal(0)]);
        input_mt_sync(uibc_input_dev);
        input_sync(uibc_input_dev);
        break;
    }
    case UIBC_TOUCH_UP: {
        if (copy_from_user(&touchPosition, uarg, sizeof(touchPosition)))
            return -EFAULT;
        pr_debug("uibc UIBC_TOUCH_UP");
        input_report_key(uibc_input_dev, BTN_TOUCH, 0);
        input_sync(uibc_input_dev);
        break;
    }
    case UIBC_TOUCH_MOVE: {
        if (copy_from_user(&touchPosition, uarg, sizeof(touchPosition)))
            return -EFAULT;
        for (i = 0; i < MAX_POINTERS; i++) {
            if (touchPosition[xVal(i)] == 0 && touchPosition[yVal(i)] == 0)
                continue;
            input_report_abs(uibc_input_dev,
                             ABS_MT_TRACKING_ID, touchPosition[idVal(i)]);
            input_report_abs(uibc_input_dev,
                             ABS_MT_POSITION_X, touchPosition[xVal(i)]);
            input_report_abs(uibc_input_dev,
                             ABS_MT_POSITION_Y, touchPosition[yVal(i)]);
            input_mt_sync(uibc_input_dev);
        }
        input_sync(uibc_input_dev);
        break;
    }
    default:
        return -EINVAL;
    }
    return 0;
}
コード例 #2
0
ファイル: se.c プロジェクト: oracc/owi
static void
vid_show_results(struct Datum *dp)
{
  int i;
  switch (res_gran)
    {
    case g_not_set:
    case g_text:
    case g_record:
      for (i = 0; i < dp->count; ++i)
	{
	  struct location8 *l8p = dp->l.l8p[i];
	  fprintf(out_f, "%s\n", 
		  vid_get_id(vp,idVal(l8p->text_id), vid_display_proj));
	}
      break;
    case g_field:
      for (i = 0; i < dp->count; ++i)
	{
	  struct location8 *l8p = dp->l.l8p[i];
	  fprintf(out_f, "%s.%d\n",
		  vid_get_id(vp,idVal(l8p->text_id), vid_display_proj),
		  l8p->unit_id);
	}
      break;
    case g_word:
    case g_grapheme:
      if (dp->data_size == sizeof(struct location24))
	{
	  for (i = 0; i < dp->count; ++i)
	    {
	      struct location8 *l8p = dp->l.l8p[i];
	      const char *tra = "";
	      
	      if (return_index && !strcmp(return_index,"tra"))
		tra = set_tra_suffix(dp->l.l16p[i]->branch_id);
	      
	      fprintf(out_f, "%s%s.%d.%d", 
		      vid_get_id(vp,idVal(l8p->text_id), vid_display_proj), 
		      tra,
		      l8p->unit_id,
		      l8p->word_id);
	      while (more_in_unit24(l8p, dp->l.l8p[i+1]))
		{
		  if (l8p->word_id != dp->l.l8p[i+1]->word_id)
		    {
		      /* FIXME: both the fprinted l8p[i]
			 here were l8p[++i] which must be
			 wrong--but with new wmapper this 
			 code is going to go away anyway */			
		      ++i;
		      fprintf(out_f, ",%d.%d",
			      dp->l.l8p[i]->unit_id,
			      dp->l.l8p[i]->word_id);
		      l8p = dp->l.l8p[i];
		    }
		  else
		    ++i;
		}
	      fputc('\n',out_f);
	    }
	}
      else
	{
	  for (i = 0; i < dp->count; ++i)
	    {
	      struct location8 *l8p = dp->l.l8p[i];
	      const char *tra = "";
	      
	      if (return_index && !strcmp(return_index,"tra"))
		tra = set_tra_suffix(dp->l.l16p[i]->branch_id);
	      
	      fprintf(out_f, "%s%s.%d.%d", 
		      vid_get_id(vp,idVal(l8p->text_id), vid_display_proj), 
		      tra,
		      l8p->unit_id,
		      l8p->word_id);
	      while (more_in_unit(l8p, dp->l.l8p[i+1]))
		{
		  if (l8p->word_id != dp->l.l8p[i+1]->word_id)
		    {
		      fprintf(out_f, ",%d",dp->l.l8p[++i]->word_id);
		      l8p = dp->l.l8p[i];
		    }
		  else
		    ++i;
		}
	      fputc('\n',out_f);
	    }
	}
      break;
    }
}