|
|
|
@ -31,6 +31,8 @@ GtkWidget *posctl_rot_da = NULL;
|
|
|
|
|
double linedash1[] = { 1.0, 4.0 };
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define CALIB_MAXSPEED 2.0
|
|
|
|
|
|
|
|
|
|
void posctl_gui_update();
|
|
|
|
|
|
|
|
|
|
void cb_posctl_show_window (GtkWidget *widget, gpointer data) {
|
|
|
|
@ -138,25 +140,17 @@ void cb_posctl_angles_draw(GtkWidget *area, cairo_t *cr, int w, int h, gpointer
|
|
|
|
|
// rotation da
|
|
|
|
|
GtkWidget *entry_rot_angle = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_rotangle"));
|
|
|
|
|
GtkWidget *entry_rot_len = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_rotlen"));
|
|
|
|
|
GtkWidget *entry_axis1_minangle = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a1minangle"));
|
|
|
|
|
GtkWidget *entry_axis1_minlen = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a1minlen"));
|
|
|
|
|
GtkWidget *entry_axis1_maxangle = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a1maxangle"));
|
|
|
|
|
GtkWidget *entry_axis1_maxlen = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a1maxlen"));
|
|
|
|
|
GtkWidget *entry_axis2_minangle = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a2minangle"));
|
|
|
|
|
GtkWidget *entry_axis2_minlen = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a2minlen"));
|
|
|
|
|
GtkWidget *entry_axis2_maxangle = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a2maxangle"));
|
|
|
|
|
GtkWidget *entry_axis2_maxlen = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a2maxlen"));
|
|
|
|
|
GtkWidget *entry_axis1_angle = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a1angle"));
|
|
|
|
|
GtkWidget *entry_axis1_len = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a1len"));
|
|
|
|
|
GtkWidget *entry_axis2_angle = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a2angle"));
|
|
|
|
|
GtkWidget *entry_axis2_len = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a2len"));
|
|
|
|
|
|
|
|
|
|
float rotangle = atof(gtk_entry_get_text(GTK_ENTRY(entry_rot_angle))) * (M_PI / 180);
|
|
|
|
|
float rotlen = atof(gtk_entry_get_text(GTK_ENTRY(entry_rot_len)));
|
|
|
|
|
float a1min_angle = atof(gtk_entry_get_text(GTK_ENTRY(entry_axis1_minangle))) * (M_PI / 180);
|
|
|
|
|
float a1min_len = atof(gtk_entry_get_text(GTK_ENTRY(entry_axis1_minlen)));
|
|
|
|
|
float a1max_angle = atof(gtk_entry_get_text(GTK_ENTRY(entry_axis1_maxangle))) * (M_PI / 180);
|
|
|
|
|
float a1max_len = atof(gtk_entry_get_text(GTK_ENTRY(entry_axis1_maxlen)));
|
|
|
|
|
float a2min_angle = atof(gtk_entry_get_text(GTK_ENTRY(entry_axis2_minangle))) * (M_PI / 180);
|
|
|
|
|
float a2min_len = atof(gtk_entry_get_text(GTK_ENTRY(entry_axis2_minlen)));
|
|
|
|
|
float a2max_angle = atof(gtk_entry_get_text(GTK_ENTRY(entry_axis2_maxangle))) * (M_PI / 180);
|
|
|
|
|
float a2max_len = atof(gtk_entry_get_text(GTK_ENTRY(entry_axis2_maxlen)));
|
|
|
|
|
float a1_angle = atof(gtk_entry_get_text(GTK_ENTRY(entry_axis1_angle))) * (M_PI / 180);
|
|
|
|
|
float a1_len = atof(gtk_entry_get_text(GTK_ENTRY(entry_axis1_len)));
|
|
|
|
|
float a2_angle = atof(gtk_entry_get_text(GTK_ENTRY(entry_axis2_angle))) * (M_PI / 180);
|
|
|
|
|
float a2_len = atof(gtk_entry_get_text(GTK_ENTRY(entry_axis2_len)));
|
|
|
|
|
|
|
|
|
|
if (posctl_rot_da == NULL) // should only be called once
|
|
|
|
|
posctl_rot_da = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_da_rotation"));
|
|
|
|
@ -190,15 +184,15 @@ void cb_posctl_angles_draw(GtkWidget *area, cairo_t *cr, int w, int h, gpointer
|
|
|
|
|
lpos[0].x = sin(rotangle) * rotlen;
|
|
|
|
|
lpos[0].y = cos(rotangle) * rotlen;
|
|
|
|
|
|
|
|
|
|
lpos[1].x = lpos[0].x + sin(a1min_angle) * a1min_len;
|
|
|
|
|
lpos[1].y = lpos[0].y + cos(a1min_angle) * a1min_len;
|
|
|
|
|
lpos[2].x = lpos[0].x + sin(a1max_angle) * a1max_len;
|
|
|
|
|
lpos[2].y = lpos[0].y + cos(a1max_angle) * a1max_len;
|
|
|
|
|
lpos[1].x = lpos[0].x + sin(a1_angle) * a1_len;
|
|
|
|
|
lpos[1].y = lpos[0].y + cos(a1_angle) * a1_len;
|
|
|
|
|
lpos[2].x = lpos[0].x;
|
|
|
|
|
lpos[2].y = lpos[0].y;
|
|
|
|
|
|
|
|
|
|
lpos[3].x = lpos[0].x + sin(a2min_angle) * a2min_len;
|
|
|
|
|
lpos[3].y = lpos[0].y + cos(a2min_angle) * a2min_len;
|
|
|
|
|
lpos[4].x = lpos[0].x + sin(a2max_angle) * a2max_len;
|
|
|
|
|
lpos[4].y = lpos[0].y + cos(a2max_angle) * a2max_len;
|
|
|
|
|
lpos[3].x = lpos[0].x + sin(a2_angle) * a2_len;
|
|
|
|
|
lpos[3].y = lpos[0].y + cos(a2_angle) * a2_len;
|
|
|
|
|
lpos[4].x = lpos[0].x;
|
|
|
|
|
lpos[4].y = lpos[0].y;
|
|
|
|
|
|
|
|
|
|
// find maximum
|
|
|
|
|
for (int i = 0; i < 5; i++) {
|
|
|
|
@ -234,8 +228,8 @@ void cb_posctl_angles_draw(GtkWidget *area, cairo_t *cr, int w, int h, gpointer
|
|
|
|
|
cairo_line_to(cr, center.x + float (lpos[2].x * center.x * 0.8 / lmax),
|
|
|
|
|
center.y - float (lpos[2].y * center.y * 0.8 / lmax));
|
|
|
|
|
cairo_stroke(cr);
|
|
|
|
|
cairo_move_to(cr, center.x + float (lpos[2].x * center.x * 0.9 / lmax),
|
|
|
|
|
center.y - float (lpos[2].y * center.y * 0.9 / lmax));
|
|
|
|
|
cairo_move_to(cr, center.x + float (lpos[1].x * center.x * 0.9 / lmax),
|
|
|
|
|
center.y - float (lpos[1].y * center.y * 0.9 / lmax));
|
|
|
|
|
cairo_show_text(cr, (char *)"1");
|
|
|
|
|
|
|
|
|
|
// axis2
|
|
|
|
@ -245,8 +239,8 @@ void cb_posctl_angles_draw(GtkWidget *area, cairo_t *cr, int w, int h, gpointer
|
|
|
|
|
cairo_line_to(cr, center.x + float (lpos[4].x * center.x * 0.8 / lmax),
|
|
|
|
|
center.y - float (lpos[4].y * center.y * 0.8 / lmax));
|
|
|
|
|
cairo_stroke(cr);
|
|
|
|
|
cairo_move_to(cr, center.x + float (lpos[4].x * center.x * 0.9 / lmax),
|
|
|
|
|
center.y - float (lpos[4].y * center.y * 0.9 / lmax));
|
|
|
|
|
cairo_move_to(cr, center.x + float (lpos[3].x * center.x * 0.9 / lmax),
|
|
|
|
|
center.y - float (lpos[3].y * center.y * 0.9 / lmax));
|
|
|
|
|
cairo_show_text(cr, (char *)"2");
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
@ -310,15 +304,11 @@ void posctl_gui_update() {
|
|
|
|
|
GtkWidget *e_cal_rotangle = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_rotangle"));
|
|
|
|
|
GtkWidget *e_cal_rotlen = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_rotlen"));
|
|
|
|
|
|
|
|
|
|
GtkWidget *e_cal_a1minangle = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a1minangle"));
|
|
|
|
|
GtkWidget *e_cal_a1minlen = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a1minlen"));
|
|
|
|
|
GtkWidget *e_cal_a1maxangle = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a1maxangle"));
|
|
|
|
|
GtkWidget *e_cal_a1maxlen = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a1maxlen"));
|
|
|
|
|
GtkWidget *e_cal_a1angle = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a1angle"));
|
|
|
|
|
GtkWidget *e_cal_a1len = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a1len"));
|
|
|
|
|
|
|
|
|
|
GtkWidget *e_cal_a2minangle = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a2minangle"));
|
|
|
|
|
GtkWidget *e_cal_a2minlen = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a2minlen"));
|
|
|
|
|
GtkWidget *e_cal_a2maxangle = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a2maxangle"));
|
|
|
|
|
GtkWidget *e_cal_a2maxlen = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a2maxlen"));
|
|
|
|
|
GtkWidget *e_cal_a2angle = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a2angle"));
|
|
|
|
|
GtkWidget *e_cal_a2len = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a2len"));
|
|
|
|
|
|
|
|
|
|
GtkWidget *e_posdevice = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_device"));
|
|
|
|
|
GtkWidget *btn_a1min = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_btn_a1_min"));
|
|
|
|
@ -371,28 +361,20 @@ void posctl_gui_update() {
|
|
|
|
|
gtk_widget_set_sensitive(e_posdevice, false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
strfromd (txt, sizeof(txt-1), (const char *)"%f", posctl.calib_rot_angle);
|
|
|
|
|
strfromd (txt, sizeof(txt-1), (const char *)"%f", posctl.calib_rot.a);
|
|
|
|
|
gtk_entry_set_text (GTK_ENTRY(e_cal_rotangle), txt);
|
|
|
|
|
strfromd (txt, sizeof(txt-1), (const char *)"%f", posctl.calib_rot_len);
|
|
|
|
|
strfromd (txt, sizeof(txt-1), (const char *)"%f", posctl.calib_rot.l);
|
|
|
|
|
gtk_entry_set_text (GTK_ENTRY(e_cal_rotlen), txt);
|
|
|
|
|
|
|
|
|
|
strfromd (txt, sizeof(txt-1), (const char *)"%f", posctl.calib_axis1min_angle);
|
|
|
|
|
gtk_entry_set_text (GTK_ENTRY(e_cal_a1minangle), txt);
|
|
|
|
|
strfromd (txt, sizeof(txt-1), (const char *)"%f", posctl.calib_axis1min_len);
|
|
|
|
|
gtk_entry_set_text (GTK_ENTRY(e_cal_a1minlen), txt);
|
|
|
|
|
strfromd (txt, sizeof(txt-1), (const char *)"%f", posctl.calib_axis1max_angle);
|
|
|
|
|
gtk_entry_set_text (GTK_ENTRY(e_cal_a1maxangle), txt);
|
|
|
|
|
strfromd (txt, sizeof(txt-1), (const char *)"%f", posctl.calib_axis1max_len);
|
|
|
|
|
gtk_entry_set_text (GTK_ENTRY(e_cal_a1maxlen), txt);
|
|
|
|
|
|
|
|
|
|
strfromd (txt, sizeof(txt-1), (const char *)"%f", posctl.calib_axis2min_angle);
|
|
|
|
|
gtk_entry_set_text (GTK_ENTRY(e_cal_a2minangle), txt);
|
|
|
|
|
strfromd (txt, sizeof(txt-1), (const char *)"%f", posctl.calib_axis2min_len);
|
|
|
|
|
gtk_entry_set_text (GTK_ENTRY(e_cal_a2minlen), txt);
|
|
|
|
|
strfromd (txt, sizeof(txt-1), (const char *)"%f", posctl.calib_axis2max_angle);
|
|
|
|
|
gtk_entry_set_text (GTK_ENTRY(e_cal_a2maxangle), txt);
|
|
|
|
|
strfromd (txt, sizeof(txt-1), (const char *)"%f", posctl.calib_axis2max_len);
|
|
|
|
|
gtk_entry_set_text (GTK_ENTRY(e_cal_a2maxlen), txt);
|
|
|
|
|
strfromd (txt, sizeof(txt-1), (const char *)"%f", posctl.calib_axis1.a);
|
|
|
|
|
gtk_entry_set_text (GTK_ENTRY(e_cal_a1angle), txt);
|
|
|
|
|
strfromd (txt, sizeof(txt-1), (const char *)"%f", posctl.calib_axis1.l);
|
|
|
|
|
gtk_entry_set_text (GTK_ENTRY(e_cal_a1len), txt);
|
|
|
|
|
|
|
|
|
|
strfromd (txt, sizeof(txt-1), (const char *)"%f", posctl.calib_axis2.a);
|
|
|
|
|
gtk_entry_set_text (GTK_ENTRY(e_cal_a2angle), txt);
|
|
|
|
|
strfromd (txt, sizeof(txt-1), (const char *)"%f", posctl.calib_axis2.l);
|
|
|
|
|
gtk_entry_set_text (GTK_ENTRY(e_cal_a2len), txt);
|
|
|
|
|
|
|
|
|
|
gtk_entry_set_text (GTK_ENTRY(e_posdevice), posctl.GetDevice().c_str());
|
|
|
|
|
strfromd (txt, sizeof(txt-1), (const char *)"%f", posctl.out[0]);
|
|
|
|
@ -442,16 +424,6 @@ PosCtl::PosCtl() {
|
|
|
|
|
mode = POSCTL_MODE_OFF;
|
|
|
|
|
|
|
|
|
|
calib_mode = POSCTL_CALIB_MODE_OFF;
|
|
|
|
|
calib_rot_len = 0.0;
|
|
|
|
|
calib_rot_angle = 0.0;
|
|
|
|
|
calib_axis1min_angle = 0.0;
|
|
|
|
|
calib_axis1min_len = 0.0;
|
|
|
|
|
calib_axis1max_angle = 0.0;
|
|
|
|
|
calib_axis1max_len = 0.0;
|
|
|
|
|
calib_axis2min_angle = 0.0;
|
|
|
|
|
calib_axis2min_len = 0.0;
|
|
|
|
|
calib_axis2max_angle = 0.0;
|
|
|
|
|
calib_axis2max_len = 0.0;
|
|
|
|
|
device_fd = -1;
|
|
|
|
|
device = "";
|
|
|
|
|
device_type = POSCTL_DEVTYPE_TTY;
|
|
|
|
@ -542,22 +514,20 @@ void PosCtl::CalibModeDelta(int x, int y) {
|
|
|
|
|
printf ("%s:%d %s\n", __FILE__, __LINE__, __FUNCTION__);
|
|
|
|
|
pid_axis[0].GetParam(&a1min, &a1max, NULL, NULL, NULL);
|
|
|
|
|
|
|
|
|
|
OutputWriteStart();
|
|
|
|
|
|
|
|
|
|
fp.x = (x - calib_pos.x) / (float)timediff;
|
|
|
|
|
fp.y = -(y - calib_pos.y) / (float)timediff;
|
|
|
|
|
|
|
|
|
|
LockMutex();
|
|
|
|
|
calib_rot_angle = atan2(fp.x, fp.y) * 180.0 / M_PI;
|
|
|
|
|
while (calib_rot_angle < 0.0) calib_rot_angle += 360.0;
|
|
|
|
|
calib_rot_len = sqrt(fp.x * fp.x + fp.y * fp.y);
|
|
|
|
|
calib_rot_v = fp;
|
|
|
|
|
calc_vec2anglelen(&fp, &calib_rot);
|
|
|
|
|
UnLockMutex();
|
|
|
|
|
|
|
|
|
|
calib_mode = POSCTL_CALIB_MODE_AXIS1_MI;
|
|
|
|
|
calib_mode = POSCTL_CALIB_MODE_AXIS1;
|
|
|
|
|
calib_pos.x = x;
|
|
|
|
|
calib_pos.y = y;
|
|
|
|
|
|
|
|
|
|
OutputWriteValue(0, a1min);
|
|
|
|
|
OutputWriteValue(0, CALIB_MAXSPEED);
|
|
|
|
|
|
|
|
|
|
gettimeofday (&calib_timestamp, NULL);
|
|
|
|
|
gdk_threads_add_idle(cb_thread_posctl, NULL);
|
|
|
|
|
}
|
|
|
|
@ -567,7 +537,6 @@ void PosCtl::CalibModeDelta(int x, int y) {
|
|
|
|
|
void PosCtl::CalibModeAxis(int x, int y) {
|
|
|
|
|
struct timeval tv;
|
|
|
|
|
float timediff;
|
|
|
|
|
double a1min, a1max, a2min, a2max;
|
|
|
|
|
position_f_2d fp;
|
|
|
|
|
|
|
|
|
|
gettimeofday (&tv, NULL);
|
|
|
|
@ -576,35 +545,19 @@ void PosCtl::CalibModeAxis(int x, int y) {
|
|
|
|
|
if (timediff > 5.0) {
|
|
|
|
|
printf ("%s:%d %s calib_mode: %d\n", __FILE__, __LINE__, __FUNCTION__, calib_mode);
|
|
|
|
|
|
|
|
|
|
pid_axis[0].GetParam(&a1min, &a1max, NULL, NULL, NULL);
|
|
|
|
|
pid_axis[1].GetParam(&a2min, &a2max, NULL, NULL, NULL);
|
|
|
|
|
|
|
|
|
|
fp.x = (x - calib_pos.x) / (float)timediff;
|
|
|
|
|
fp.y = -(y - calib_pos.y) / (float)timediff;
|
|
|
|
|
|
|
|
|
|
if (calib_mode == POSCTL_CALIB_MODE_AXIS1_MI) {
|
|
|
|
|
calib_axis1min_angle = atan2(fp.x, fp.y) * 180.0 / M_PI;
|
|
|
|
|
while (calib_axis1min_angle < 0.0) calib_axis1min_angle += 360.0;
|
|
|
|
|
calib_axis1min_len = sqrt(fp.x * fp.x + fp.y * fp.y);
|
|
|
|
|
OutputWriteValue(0, a1max);
|
|
|
|
|
}
|
|
|
|
|
else if (calib_mode == POSCTL_CALIB_MODE_AXIS1_MA) {
|
|
|
|
|
calib_axis1max_angle = atan2(fp.x, fp.y) * 180.0 / M_PI;
|
|
|
|
|
while (calib_axis1max_angle < 0.0) calib_axis1max_angle += 360.0;
|
|
|
|
|
calib_axis1max_len = sqrt(fp.x * fp.x + fp.y * fp.y);
|
|
|
|
|
OutputWriteValue(1, a2min);
|
|
|
|
|
}
|
|
|
|
|
else if (calib_mode == POSCTL_CALIB_MODE_AXIS2_MI) {
|
|
|
|
|
calib_axis2min_angle = atan2(fp.x, fp.y) * 180.0 / M_PI;
|
|
|
|
|
while (calib_axis2min_angle < 0.0) calib_axis2min_angle += 360.0;
|
|
|
|
|
calib_axis2min_len = sqrt(fp.x * fp.x + fp.y * fp.y);
|
|
|
|
|
OutputWriteValue(1, a2max);
|
|
|
|
|
if (calib_mode == POSCTL_CALIB_MODE_AXIS1) {
|
|
|
|
|
calib_axis1_v = fp;
|
|
|
|
|
calc_vec2anglelen(&calib_axis1_v, &calib_axis1);
|
|
|
|
|
OutputWriteStop();
|
|
|
|
|
OutputWriteValue(1, CALIB_MAXSPEED);
|
|
|
|
|
}
|
|
|
|
|
else if (calib_mode == POSCTL_CALIB_MODE_AXIS2_MA) {
|
|
|
|
|
calib_axis2max_angle = atan2(fp.x, fp.y) * 180.0 / M_PI;
|
|
|
|
|
while (calib_axis2max_angle < 0.0) calib_axis2max_angle += 360.0;
|
|
|
|
|
calib_axis2max_len = sqrt(fp.x * fp.x + fp.y * fp.y);
|
|
|
|
|
OutputWriteStart(); // reset speed output to 50%
|
|
|
|
|
else if (calib_mode == POSCTL_CALIB_MODE_AXIS2) {
|
|
|
|
|
calib_axis2_v = fp;
|
|
|
|
|
calc_vec2anglelen(&calib_axis2_v, &calib_axis2);
|
|
|
|
|
OutputWriteStart();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
calib_mode++;
|
|
|
|
@ -640,10 +593,8 @@ void PosCtl::Loop (int posx, int posy) {
|
|
|
|
|
case (POSCTL_CALIB_MODE_DELTA):
|
|
|
|
|
CalibModeDelta(posx, posy);
|
|
|
|
|
break;
|
|
|
|
|
case (POSCTL_CALIB_MODE_AXIS1_MI):
|
|
|
|
|
case (POSCTL_CALIB_MODE_AXIS1_MA):
|
|
|
|
|
case (POSCTL_CALIB_MODE_AXIS2_MI):
|
|
|
|
|
case (POSCTL_CALIB_MODE_AXIS2_MA):
|
|
|
|
|
case (POSCTL_CALIB_MODE_AXIS1):
|
|
|
|
|
case (POSCTL_CALIB_MODE_AXIS2):
|
|
|
|
|
CalibModeAxis(posx, posy);
|
|
|
|
|
break;
|
|
|
|
|
case (POSCTL_CALIB_MODE_FINISH):
|
|
|
|
|