/* * 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(); } }
/* * 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; } }
/* * 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); } } }