예제 #1
0
파일: calibration.c 프로젝트: NoPublic/GIMX
/*
 * Use keys to calibrate the mouse.
 */
void cal_key(int device_id, int sym, int down)
{
  s_mouse_control* mc = cfg_get_mouse_control(current_mouse);
  e_current_cal prev = current_cal;

  switch (sym)
  {
    case GE_KEY_LEFTCTRL:
      lctrl = down ? 1 : 0;
      break;
    case GE_KEY_RIGHTCTRL:
      rctrl = down ? 1 : 0;
      break;

    case GE_KEY_LEFTSHIFT:
      lshift = down ? 1 : 0;
      break;
    case GE_KEY_RIGHTSHIFT:
      rshift = down ? 1 : 0;
      break;

    case GE_KEY_LEFTALT:
      lalt = down ? 1 : 0;
      break;
    case GE_KEY_RIGHTALT:
      ralt = down ? 1 : 0;
      break;
  }

  switch (sym)
  {
    case GE_KEY_ESC:
      if(current_cal != NONE)
      {
        current_cal = NONE;
      }
      if(lshift)
      {
        set_done();
      }
      break;
    case GE_KEY_F1:
      if (down)
      {
        if(rctrl || lctrl)
        {
          if (current_cal == NONE)
          {
            if(GE_GetMKMode() == GE_MK_MODE_MULTIPLE_INPUTS)
            {
              current_cal = MC;
              gprintf(_("mouse selection\n"));
            }
            else
            {
              current_cal = CC;
              gprintf(_("config selection\n"));
            }
          }
          else
          {
            current_cal = NONE;
            if (cfgw_modify_file(gimx_params.config_file))
            {
              gprintf(_("error writting the config file %s\n"), gimx_params.config_file);
            }
            gprintf(_("calibration done\n"));
          }
        }
        else if(current_cal != NONE)
        {
          if(GE_GetMKMode() == GE_MK_MODE_MULTIPLE_INPUTS)
          {
            current_cal = MC;
            gprintf(_("mouse selection\n"));
          }
        }
      }
      break;
    case GE_KEY_F2:
      if (down && current_cal != NONE)
      {
        current_cal = CC;
        gprintf(_("config selection\n"));
      }
      break;
    case GE_KEY_F9:
      if (down && current_cal != NONE)
      {
        gprintf(_("calibrating sensitivity\n"));
        current_cal = MX;
      }
      break;
    case GE_KEY_F12:
      if (down && current_cal != NONE)
      {
        gprintf(_("calibrating x/y ratio\n"));
        current_cal = MY;
      }
      break;
    case GE_KEY_F3:
      if (down && current_cal != NONE)
      {
        gprintf(_("calibrating dead zone x\n"));
        current_cal = DZX;
        mc->merge_x[mc->index] = 1;
        mc->merge_y[mc->index] = 0;
        mc->change = 1;
      }
      break;
    case GE_KEY_F4:
      if (down && current_cal != NONE)
      {
        gprintf(_("calibrating dead zone y\n"));
        current_cal = DZY;
        mc->merge_x[mc->index] = 0;
        mc->merge_y[mc->index] = 1;
        mc->change = 1;
      }
      break;
    case GE_KEY_F5:
      if (down && current_cal != NONE)
      {
        gprintf(_("calibrating dead zone shape\n"));
        current_cal = DZS;
        mc->merge_x[mc->index] = 1;
        mc->merge_y[mc->index] = 1;
        mc->change = 1;
      }
      break;
    case GE_KEY_F7:
      if (down && current_cal != NONE)
      {
        gprintf(_("calibrating acceleration x\n"));
        current_cal = EX;
      }
      break;
    case GE_KEY_F8:
      if (down && current_cal != NONE)
      {
        gprintf(_("calibrating acceleration y\n"));
        current_cal = EY;
      }
      break;
    case GE_KEY_F10:
      if (down && current_cal != NONE)
      {
        if(current_cal != RD && current_cal != VEL)
        {
          circle_step = 0;
        }
        gprintf(_("adjusting circle test radius\n"));
        current_cal = RD;
      }
      break;
    case GE_KEY_F11:
      if (down && current_cal != NONE)
      {
        if(current_cal != RD && current_cal != VEL)
        {
          circle_step = 0;
        }
        gprintf(_("adjusting circle test velocity\n"));
        current_cal = VEL;
      }
      break;
    case GE_KEY_F6:
      if (down && current_cal != NONE)
      {
        if(current_cal != TEST)
        {
          distance = 0.1; //0.1 inches
          dots = 0;
          direction = 1;
          step = 1;
        }
        gprintf(_("translation test started\n"));
        current_cal = TEST;
      }
      break;
  }

  if(prev != current_cal)
  {
    if(gimx_params.curses)
    {
      display_calibration();
    }
    else
    {
      cal_display();
    }
  }

  /*
   * Following code is not calibration code... it should be moved somewhere else!
   */
  if (lshift && rshift)
  {
    if (gimx_params.status)
    {
      gimx_params.status = 0;
    }
    else
    {
      if(!gimx_params.curses)
      {
        gimx_params.status = 1;
      }
    }
  }

  if (lalt && ralt)
  {
    GE_grab_toggle();
  }
}
예제 #2
0
파일: calibration.c 프로젝트: NoPublic/GIMX
/*
 * Use the mouse wheel to calibrate the mouse.
 */
void cal_button(int which, int button)
{
  double ratio;
  s_mouse_control* mc = cfg_get_mouse_control(current_mouse);
  s_mouse_cal* mcal = cal_get_mouse(current_mouse, current_conf);

  e_controller_type ctype = adapter_get(cal_get_controller(current_mouse))->ctype;

  if(ctype == C_TYPE_NONE)
  {
    return;
  }

  switch (button)
  {
    case GE_BTN_WHEELUP:
      switch (current_cal)
      {
        case MC:
          current_mouse += 1;
          if (!GE_MouseName(current_mouse))
          {
            current_mouse -= 1;
          }
          break;
        case CC:
          current_conf += 1;
          if (current_conf > MAX_CONFIGURATIONS - 1)
          {
            current_conf = MAX_CONFIGURATIONS - 1;
          }
          break;
        case MX:
          if (mcal->mx && mcal->my)
          {
            ratio = *mcal->my / *mcal->mx;
            *mcal->mx += DEFAULT_MULTIPLIER_STEP;
            *mcal->my = *mcal->mx * ratio;
          }
          break;
        case MY:
          if (mcal->mx && mcal->my)
          {
            ratio = *mcal->my / *mcal->mx;
            ratio += DEFAULT_MULTIPLIER_STEP;
            *mcal->my = *mcal->mx * ratio;
          }
          break;
        case DZX:
          if (mcal->dzx)
          {
            *mcal->dzx += 1;
            if (*mcal->dzx > controller_get_mean_unsigned(ctype, rel_axis_rstick_x) / controller_get_axis_scale(ctype, rel_axis_rstick_x))
            {
              *mcal->dzx = controller_get_mean_unsigned(ctype, rel_axis_rstick_x) / controller_get_axis_scale(ctype, rel_axis_rstick_x);
            }
            mc->merge_x[mc->index] = 1;
            mc->merge_y[mc->index] = 0;
            mc->change = 1;
          }
          break;
        case DZY:
          if (mcal->dzy)
          {
            *mcal->dzy += 1;
            if (*mcal->dzy > controller_get_mean_unsigned(ctype, rel_axis_rstick_x) / controller_get_axis_scale(ctype, rel_axis_rstick_x))
            {
              *mcal->dzy = controller_get_mean_unsigned(ctype, rel_axis_rstick_x) / controller_get_axis_scale(ctype, rel_axis_rstick_x);
            }
            mc->merge_x[mc->index] = 0;
            mc->merge_y[mc->index] = 1;
            mc->change = 1;
          }
          break;
        case DZS:
          if (mcal->dzs)
          {
            if (*mcal->dzs == E_SHAPE_CIRCLE)
            {
              *mcal->dzs = E_SHAPE_RECTANGLE;
            }
            else
            {
              *mcal->dzs = E_SHAPE_CIRCLE;
            }
            mc->merge_x[mc->index] = 1;
            mc->merge_y[mc->index] = 1;
            mc->change = 1;
          }
          break;
        case RD:
          mcal->rd += 1;
          break;
        case VEL:
          mcal->vel += 1;
          break;
        case EX:
          if (mcal->ex)
          {
            *mcal->ex += EXPONENT_STEP;
          }
          break;
        case EY:
          if (mcal->ey)
          {
            *mcal->ey += EXPONENT_STEP;
          }
          break;
        case TEST:
          test_time += 10;
          break;
        case NONE:
          break;
      }
      if(current_cal != NONE)
      {
        if(gimx_params.curses)
        {
          display_calibration();
        }
        else
        {
          cal_display();
        }
      }
      break;
    case GE_BTN_WHEELDOWN:
      switch (current_cal)
      {
        case MC:
          if (current_mouse > 0)
          {
            current_mouse -= 1;
          }
          break;
        case CC:
          if (current_conf > 0)
          {
            current_conf -= 1;
          }
          break;
        case MX:
          if (mcal->mx && mcal->my)
          {
            ratio = *mcal->my / *mcal->mx;
            *mcal->mx -= DEFAULT_MULTIPLIER_STEP;
            *mcal->my = *mcal->mx * ratio;
          }
          break;
        case MY:
          if (mcal->mx && mcal->my)
          {
            ratio = *mcal->my / *mcal->mx;
            ratio -= DEFAULT_MULTIPLIER_STEP;
            *mcal->my = *mcal->mx * ratio;
          }
          break;
        case DZX:
          if (mcal->dzx && *mcal->dzx > 0)
          {
            *mcal->dzx -= 1;
            mc->merge_x[mc->index] = -1;
            mc->merge_y[mc->index] = 0;
            mc->change = 1;
          }
          break;
        case DZY:
          if (mcal->dzy && *mcal->dzy > 0)
          {
            *mcal->dzy -= 1;
            mc->merge_x[mc->index] = 0;
            mc->merge_y[mc->index] = -1;
            mc->change = 1;
          }
          break;
        case DZS:
          if (mcal->dzs)
          {
            if (*mcal->dzs == E_SHAPE_CIRCLE)
            {
              *mcal->dzs = E_SHAPE_RECTANGLE;
            }
            else
            {
              *mcal->dzs = E_SHAPE_CIRCLE;
            }
            mc->merge_x[mc->index] = -1;
            mc->merge_y[mc->index] = -1;
            mc->change = 1;
          }
          break;
        case RD:
          mcal->rd -= 1;
          if(mcal->rd < 1)
          {
            mcal->rd = 1;
          }
          break;
        case VEL:
          mcal->vel -= 1;
          if(mcal->vel < 1)
          {
            mcal->vel = 1;
          }
          break;
        case EX:
          if (mcal->ex)
          {
            *mcal->ex -= EXPONENT_STEP;
          }
          break;
        case EY:
          if (mcal->ey)
          {
            *mcal->ey -= EXPONENT_STEP;
          }
          break;
        case TEST:
          test_time -= 10;
          break;
        case NONE:
          break;
      }
      if(current_cal != NONE)
      {
        if(gimx_params.curses)
        {
          display_calibration();
        }
        else
        {
          cal_display();
        }
      }
      break;
    default:
      break;
  }
}
예제 #3
0
파일: spl.c 프로젝트: OpenNoah/u-boot
/*
 * called from C runtime startup code (arch/arm/lib/crt0.S:_main)
 * - we have a stack and a place to store GD, both in SRAM
 * - no variable global data is available
 */
void board_init_f(ulong dummy)
{
	int errs;
	struct mx6_mmdc_calibration calibration = {0};

	memset((void *)gd, 0, sizeof(struct global_data));

	/* write leveling calibration defaults */
	calibration.p0_mpwrdlctl = 0x40404040;
	calibration.p1_mpwrdlctl = 0x40404040;

	/* setup AIPS and disable watchdog */
	arch_cpu_init();

	ccgr_init();

	SETUP_IOMUX_PADS(uart_pads);

	/* setup GP timer */
	timer_init();

	/* UART clocks enabled and gd valid - init serial console */
	preloader_console_init();

	if (sysinfo.dsize != 1) {
		if (is_cpu_type(MXC_CPU_MX6SX) ||
		    is_cpu_type(MXC_CPU_MX6UL) ||
		    is_cpu_type(MXC_CPU_MX6ULL) ||
		    is_cpu_type(MXC_CPU_MX6SL)) {
			printf("cpu type 0x%x doesn't support 64-bit bus\n",
			       get_cpu_type());
			reset_cpu(0);
		}
	}
#ifdef CONFIG_MX6SL
	mx6sl_dram_iocfg(CONFIG_DDRWIDTH, &mx6sl_ddr_ioregs,
			 &mx6sl_grp_ioregs);
#else
	if (is_cpu_type(MXC_CPU_MX6Q)) {
		mx6dq_dram_iocfg(CONFIG_DDRWIDTH, &mx6dq_ddr_ioregs,
				 &mx6dq_grp_ioregs);
	} else {
		mx6sdl_dram_iocfg(CONFIG_DDRWIDTH, &mx6sdl_ddr_ioregs,
				  &mx6sdl_grp_ioregs);
	}
#endif
	mx6_dram_cfg(&sysinfo, &calibration, &ddrtype);

	errs = mmdc_do_write_level_calibration(&sysinfo);
	if (errs) {
		printf("error %d from write level calibration\n", errs);
	} else {
		errs = mmdc_do_dqs_calibration(&sysinfo);
		if (errs) {
			printf("error %d from dqs calibration\n", errs);
		} else {
			printf("completed successfully\n");
			mmdc_read_calibration(&sysinfo, &calibration);
			display_calibration(&calibration);
		}
	}
}