|
|
|
@ -65,6 +65,10 @@ void axis_history_add(int axis, double diff, double out) {
|
|
|
|
|
#define CALIB_DURATION_DIST 20.0 // max distance to detect movement
|
|
|
|
|
#define CALIB_STARTSTOP_DELAY 2.5 // time to wait for start and stop
|
|
|
|
|
|
|
|
|
|
// axis definitions
|
|
|
|
|
#define AXIS_RA 1
|
|
|
|
|
#define AXIS_DEC 0
|
|
|
|
|
|
|
|
|
|
void posctl_gui_update();
|
|
|
|
|
|
|
|
|
|
void cb_posctl_show_window (GtkWidget *widget, gpointer data) {
|
|
|
|
@ -116,51 +120,51 @@ void cb_posctl_show (GtkWidget *widget, gpointer data) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void cb_posctl_btn_axismove (GtkWidget *widget, gpointer data) {
|
|
|
|
|
GtkWidget *btn_a1min = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_btn_a1_min"));
|
|
|
|
|
GtkWidget *btn_a1center = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_btn_a1_center"));
|
|
|
|
|
GtkWidget *btn_a1max = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_btn_a1_max"));
|
|
|
|
|
GtkWidget *btn_a2min = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_btn_a2_min"));
|
|
|
|
|
GtkWidget *btn_a2center = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_btn_a2_center"));
|
|
|
|
|
GtkWidget *btn_a2max = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_btn_a2_max"));
|
|
|
|
|
double a1min, a2min, a1max, a2max;
|
|
|
|
|
GtkWidget *btn_ramin = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_btn_ra_min"));
|
|
|
|
|
GtkWidget *btn_racenter = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_btn_ra_center"));
|
|
|
|
|
GtkWidget *btn_ramax = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_btn_ra_max"));
|
|
|
|
|
GtkWidget *btn_decmin = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_btn_dec_min"));
|
|
|
|
|
GtkWidget *btn_deccenter = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_btn_dec_center"));
|
|
|
|
|
GtkWidget *btn_decmax = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_btn_dec_max"));
|
|
|
|
|
double ramin, decmin, ramax, decmax;
|
|
|
|
|
|
|
|
|
|
printf ("%s:%d %s\n", __FILE__, __LINE__, __FUNCTION__);
|
|
|
|
|
|
|
|
|
|
posctl.GetAxisParam(0, &a1min, &a1max, NULL, NULL, NULL);
|
|
|
|
|
posctl.GetAxisParam(1, &a2min, &a2max, NULL, NULL, NULL);
|
|
|
|
|
posctl.GetAxisParam(0, &ramin, &ramax, NULL, NULL, NULL);
|
|
|
|
|
posctl.GetAxisParam(1, &decmin, &decmax, NULL, NULL, NULL);
|
|
|
|
|
|
|
|
|
|
if (widget == btn_a1min) posctl.OutputWriteValue(0, a1min);
|
|
|
|
|
else if (widget == btn_a1center) posctl.OutputWriteValue(0, (a1max-a1min)/2.0+a1min);
|
|
|
|
|
else if (widget == btn_a1max) posctl.OutputWriteValue(0, a1max);
|
|
|
|
|
else if (widget == btn_a2min) posctl.OutputWriteValue(1, a1min);
|
|
|
|
|
else if (widget == btn_a2center) posctl.OutputWriteValue(1, (a1max-a1min)/2.0+a1min);
|
|
|
|
|
else if (widget == btn_a2max) posctl.OutputWriteValue(1, a1max);
|
|
|
|
|
if (widget == btn_ramin) posctl.OutputWriteValue(AXIS_DEC, ramin);
|
|
|
|
|
else if (widget == btn_racenter) posctl.OutputWriteValue(AXIS_DEC, (ramax-ramin)/2.0+ramin);
|
|
|
|
|
else if (widget == btn_ramax) posctl.OutputWriteValue(AXIS_DEC, ramax);
|
|
|
|
|
else if (widget == btn_decmin) posctl.OutputWriteValue(AXIS_RA, decmin);
|
|
|
|
|
else if (widget == btn_deccenter) posctl.OutputWriteValue(AXIS_RA, (decmax-decmin)/2.0+decmin);
|
|
|
|
|
else if (widget == btn_decmax) posctl.OutputWriteValue(AXIS_RA, decmax);
|
|
|
|
|
|
|
|
|
|
posctl_gui_update();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void cb_posctl_change_entry (GtkWidget *widget, gpointer data) {
|
|
|
|
|
double a1min, a1max, a1p, a1i, a1d;
|
|
|
|
|
double a2min, a2max, a2p, a2i, a2d;
|
|
|
|
|
double ramin, ramax, rap, rai, rad;
|
|
|
|
|
double decmin, decmax, decp, deci, decd;
|
|
|
|
|
|
|
|
|
|
GtkWidget *e_posdevice = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_device"));
|
|
|
|
|
GtkWidget *a1_min = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a1_min"));
|
|
|
|
|
GtkWidget *a1_max = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a1_max"));
|
|
|
|
|
GtkWidget *a1_kp = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a1_kp"));
|
|
|
|
|
GtkWidget *a1_ki = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a1_ki"));
|
|
|
|
|
GtkWidget *a1_kd = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a1_kd"));
|
|
|
|
|
GtkWidget *a2_min = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a2_min"));
|
|
|
|
|
GtkWidget *a2_max = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a2_max"));
|
|
|
|
|
GtkWidget *a2_kp = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a2_kp"));
|
|
|
|
|
GtkWidget *a2_ki = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a2_ki"));
|
|
|
|
|
GtkWidget *a2_kd = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a2_kd"));
|
|
|
|
|
GtkWidget *ra_min = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_ra_min"));
|
|
|
|
|
GtkWidget *ra_max = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_ra_max"));
|
|
|
|
|
GtkWidget *ra_kp = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_ra_kp"));
|
|
|
|
|
GtkWidget *ra_ki = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_ra_ki"));
|
|
|
|
|
GtkWidget *ra_kd = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_ra_kd"));
|
|
|
|
|
GtkWidget *dec_min = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_dec_min"));
|
|
|
|
|
GtkWidget *dec_max = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_dec_max"));
|
|
|
|
|
GtkWidget *dec_kp = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_dec_kp"));
|
|
|
|
|
GtkWidget *dec_ki = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_dec_ki"));
|
|
|
|
|
GtkWidget *dec_kd = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_dec_kd"));
|
|
|
|
|
GtkWidget *resetsim = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_btn_resetsim"));
|
|
|
|
|
|
|
|
|
|
const char *s;
|
|
|
|
|
|
|
|
|
|
posctl.GetAxisParam(0, &a1min, &a1max, &a1p, &a1i, &a1d);
|
|
|
|
|
posctl.GetAxisParam(1, &a2min, &a2max, &a2p, &a2i, &a2d);
|
|
|
|
|
posctl.GetAxisParam(0, &ramin, &ramax, &rap, &rai, &rad);
|
|
|
|
|
posctl.GetAxisParam(1, &decmin, &decmax, &decp, &deci, &decd);
|
|
|
|
|
|
|
|
|
|
printf ("%s:%d %s\n", __FILE__, __LINE__, __FUNCTION__);
|
|
|
|
|
s = gtk_entry_get_text(GTK_ENTRY(widget));
|
|
|
|
@ -169,19 +173,19 @@ void cb_posctl_change_entry (GtkWidget *widget, gpointer data) {
|
|
|
|
|
|
|
|
|
|
posctl.LockMutex();
|
|
|
|
|
if (e_posdevice == widget) posctl.SetDevice(s);
|
|
|
|
|
else if (a1_min == widget) a1min = atof(s);
|
|
|
|
|
else if (a1_max == widget) a1max = atof(s);
|
|
|
|
|
else if (a1_kp == widget) a1p = atof(s);
|
|
|
|
|
else if (a1_ki == widget) a1i = atof(s);
|
|
|
|
|
else if (a1_kd == widget) a1d = atof(s);
|
|
|
|
|
else if (a2_min == widget) a2min = atof(s);
|
|
|
|
|
else if (a2_max == widget) a2max = atof(s);
|
|
|
|
|
else if (a2_kp == widget) a2p = atof(s);
|
|
|
|
|
else if (a2_ki == widget) a2i = atof(s);
|
|
|
|
|
else if (a2_kd == widget) a2d = atof(s);
|
|
|
|
|
|
|
|
|
|
posctl.SetAxisParam(0, a1min, a1max, a1p, a1i, a1d);
|
|
|
|
|
posctl.SetAxisParam(1, a2min, a2max, a2p, a2i, a2d);
|
|
|
|
|
else if (ra_min == widget) ramin = atof(s);
|
|
|
|
|
else if (ra_max == widget) ramax = atof(s);
|
|
|
|
|
else if (ra_kp == widget) rap = atof(s);
|
|
|
|
|
else if (ra_ki == widget) rai = atof(s);
|
|
|
|
|
else if (ra_kd == widget) rad = atof(s);
|
|
|
|
|
else if (dec_min == widget) decmin = atof(s);
|
|
|
|
|
else if (dec_max == widget) decmax = atof(s);
|
|
|
|
|
else if (dec_kp == widget) decp = atof(s);
|
|
|
|
|
else if (dec_ki == widget) deci = atof(s);
|
|
|
|
|
else if (dec_kd == widget) decd = atof(s);
|
|
|
|
|
|
|
|
|
|
posctl.SetAxisParam(0, ramin, ramax, rap, rai, rad);
|
|
|
|
|
posctl.SetAxisParam(1, decmin, decmax, decp, deci, decd);
|
|
|
|
|
|
|
|
|
|
posctl.UnLockMutex();
|
|
|
|
|
}
|
|
|
|
@ -202,17 +206,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_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"));
|
|
|
|
|
GtkWidget *entry_axis1_angle = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_ra_angle"));
|
|
|
|
|
GtkWidget *entry_axis1_len = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_ra_len"));
|
|
|
|
|
GtkWidget *entry_axis2_angle = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_dec_angle"));
|
|
|
|
|
GtkWidget *entry_axis2_len = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_dec_len"));
|
|
|
|
|
|
|
|
|
|
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 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)));
|
|
|
|
|
float ra_angle = atof(gtk_entry_get_text(GTK_ENTRY(entry_axis1_angle))) * (M_PI / 180);
|
|
|
|
|
float ra_len = atof(gtk_entry_get_text(GTK_ENTRY(entry_axis1_len)));
|
|
|
|
|
float dec_angle = atof(gtk_entry_get_text(GTK_ENTRY(entry_axis2_angle))) * (M_PI / 180);
|
|
|
|
|
float dec_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"));
|
|
|
|
@ -260,8 +264,8 @@ void cb_posctl_angles_draw(GtkWidget *area, cairo_t *cr, int w, int h, gpointer
|
|
|
|
|
cairo_stroke(cr);
|
|
|
|
|
|
|
|
|
|
// axis1
|
|
|
|
|
lpos.x = sin(a1_angle) * a1_len * 4.0;
|
|
|
|
|
lpos.y = cos(a1_angle) * a1_len * 4.0;
|
|
|
|
|
lpos.x = sin(ra_angle) * ra_len * 4.0;
|
|
|
|
|
lpos.y = cos(ra_angle) * ra_len * 4.0;
|
|
|
|
|
cairo_set_source_rgb(cr, 0.0, 0.75, 0.3);
|
|
|
|
|
cairo_set_line_width(cr, 4.0);
|
|
|
|
|
cairo_move_to(cr, center.x, center.y);
|
|
|
|
@ -273,8 +277,8 @@ void cb_posctl_angles_draw(GtkWidget *area, cairo_t *cr, int w, int h, gpointer
|
|
|
|
|
cairo_stroke(cr);
|
|
|
|
|
|
|
|
|
|
// axis2
|
|
|
|
|
lpos.x = sin(a2_angle) * a2_len * 4.0;
|
|
|
|
|
lpos.y = cos(a2_angle) * a2_len * 4.0;
|
|
|
|
|
lpos.x = sin(dec_angle) * dec_len * 4.0;
|
|
|
|
|
lpos.y = cos(dec_angle) * dec_len * 4.0;
|
|
|
|
|
cairo_set_source_rgb(cr, 0.0, 0.3, 0.75);
|
|
|
|
|
cairo_set_line_width(cr, 4.0);
|
|
|
|
|
cairo_move_to(cr, center.x, center.y);
|
|
|
|
@ -445,37 +449,37 @@ 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_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_raangle = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_ra_angle"));
|
|
|
|
|
GtkWidget *e_cal_ralen = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_ra_len"));
|
|
|
|
|
|
|
|
|
|
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_cal_decangle = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_dec_angle"));
|
|
|
|
|
GtkWidget *e_cal_declen = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_dec_len"));
|
|
|
|
|
GtkWidget *lb_earthaxis = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_lb_earthaxis"));
|
|
|
|
|
GtkWidget *lb_axisaxis = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_lb_axisaxis"));
|
|
|
|
|
|
|
|
|
|
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"));
|
|
|
|
|
GtkWidget *btn_a1center = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_btn_a1_center"));
|
|
|
|
|
GtkWidget *btn_a1max = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_btn_a1_max"));
|
|
|
|
|
GtkWidget *btn_a2min = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_btn_a2_min"));
|
|
|
|
|
GtkWidget *btn_a2center = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_btn_a2_center"));
|
|
|
|
|
GtkWidget *btn_a2max = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_btn_a2_max"));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
GtkWidget *a1_min = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a1_min"));
|
|
|
|
|
GtkWidget *a1_max = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a1_max"));
|
|
|
|
|
GtkWidget *a1_kp = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a1_kp"));
|
|
|
|
|
GtkWidget *a1_ki = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a1_ki"));
|
|
|
|
|
GtkWidget *a1_kd = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a1_kd"));
|
|
|
|
|
GtkWidget *a1_out = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_lb_outx"));
|
|
|
|
|
GtkWidget *a1_pv = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_lb_dx"));
|
|
|
|
|
GtkWidget *a2_min = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a2_min"));
|
|
|
|
|
GtkWidget *a2_max = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a2_max"));
|
|
|
|
|
GtkWidget *a2_kp = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a2_kp"));
|
|
|
|
|
GtkWidget *a2_ki = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a2_ki"));
|
|
|
|
|
GtkWidget *a2_kd = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_a2_kd"));
|
|
|
|
|
GtkWidget *a2_out = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_lb_outy"));
|
|
|
|
|
GtkWidget *a2_pv = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_lb_dy"));
|
|
|
|
|
GtkWidget *btn_ramin = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_btn_ra_min"));
|
|
|
|
|
GtkWidget *btn_racenter = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_btn_ra_center"));
|
|
|
|
|
GtkWidget *btn_ramax = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_btn_ra_max"));
|
|
|
|
|
GtkWidget *btn_decmin = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_btn_dec_min"));
|
|
|
|
|
GtkWidget *btn_deccenter = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_btn_dec_center"));
|
|
|
|
|
GtkWidget *btn_decmax = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_btn_dec_max"));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
GtkWidget *ra_min = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_ra_min"));
|
|
|
|
|
GtkWidget *ra_max = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_ra_max"));
|
|
|
|
|
GtkWidget *ra_kp = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_ra_kp"));
|
|
|
|
|
GtkWidget *ra_ki = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_ra_ki"));
|
|
|
|
|
GtkWidget *ra_kd = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_ra_kd"));
|
|
|
|
|
GtkWidget *ra_out = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_lb_outx"));
|
|
|
|
|
GtkWidget *ra_pv = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_lb_dx"));
|
|
|
|
|
GtkWidget *dec_min = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_dec_min"));
|
|
|
|
|
GtkWidget *dec_max = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_dec_max"));
|
|
|
|
|
GtkWidget *dec_kp = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_dec_kp"));
|
|
|
|
|
GtkWidget *dec_ki = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_dec_ki"));
|
|
|
|
|
GtkWidget *dec_kd = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_entry_dec_kd"));
|
|
|
|
|
GtkWidget *dec_out = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_lb_outy"));
|
|
|
|
|
GtkWidget *dec_pv = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "posctl_lb_dy"));
|
|
|
|
|
|
|
|
|
|
posctl.LockMutex();
|
|
|
|
|
int m = posctl.GetMode();
|
|
|
|
@ -484,12 +488,12 @@ void posctl_gui_update() {
|
|
|
|
|
gtk_widget_set_sensitive(btnclib, true);
|
|
|
|
|
gtk_widget_set_sensitive(btncontrol, true);
|
|
|
|
|
gtk_widget_set_sensitive(btnstop, false);
|
|
|
|
|
gtk_widget_set_sensitive(btn_a1min, true);
|
|
|
|
|
gtk_widget_set_sensitive(btn_a1center, true);
|
|
|
|
|
gtk_widget_set_sensitive(btn_a1max, true);
|
|
|
|
|
gtk_widget_set_sensitive(btn_a2min, true);
|
|
|
|
|
gtk_widget_set_sensitive(btn_a2center, true);
|
|
|
|
|
gtk_widget_set_sensitive(btn_a2max, true);
|
|
|
|
|
gtk_widget_set_sensitive(btn_ramin, true);
|
|
|
|
|
gtk_widget_set_sensitive(btn_racenter, true);
|
|
|
|
|
gtk_widget_set_sensitive(btn_ramax, true);
|
|
|
|
|
gtk_widget_set_sensitive(btn_decmin, true);
|
|
|
|
|
gtk_widget_set_sensitive(btn_deccenter, true);
|
|
|
|
|
gtk_widget_set_sensitive(btn_decmax, true);
|
|
|
|
|
gtk_widget_set_sensitive(e_posdevice, true);
|
|
|
|
|
gtk_label_set_label(GTK_LABEL(caliblabel), (char *) "");
|
|
|
|
|
}
|
|
|
|
@ -500,12 +504,12 @@ void posctl_gui_update() {
|
|
|
|
|
gtk_widget_set_sensitive(btnclib, false);
|
|
|
|
|
gtk_widget_set_sensitive(btncontrol, false);
|
|
|
|
|
gtk_widget_set_sensitive(btnstop, true);
|
|
|
|
|
gtk_widget_set_sensitive(btn_a1min, false);
|
|
|
|
|
gtk_widget_set_sensitive(btn_a1center, false);
|
|
|
|
|
gtk_widget_set_sensitive(btn_a1max, false);
|
|
|
|
|
gtk_widget_set_sensitive(btn_a2min, false);
|
|
|
|
|
gtk_widget_set_sensitive(btn_a2center, false);
|
|
|
|
|
gtk_widget_set_sensitive(btn_a2max, false);
|
|
|
|
|
gtk_widget_set_sensitive(btn_ramin, false);
|
|
|
|
|
gtk_widget_set_sensitive(btn_racenter, false);
|
|
|
|
|
gtk_widget_set_sensitive(btn_ramax, false);
|
|
|
|
|
gtk_widget_set_sensitive(btn_decmin, false);
|
|
|
|
|
gtk_widget_set_sensitive(btn_deccenter, false);
|
|
|
|
|
gtk_widget_set_sensitive(btn_decmax, false);
|
|
|
|
|
gtk_widget_set_sensitive(e_posdevice, false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -515,14 +519,14 @@ void posctl_gui_update() {
|
|
|
|
|
gtk_entry_set_text (GTK_ENTRY(e_cal_rotlen), txt);
|
|
|
|
|
|
|
|
|
|
strfromd (txt, sizeof(txt-1), (char *)"%f", posctl.calib_axis1.a);
|
|
|
|
|
gtk_entry_set_text (GTK_ENTRY(e_cal_a1angle), txt);
|
|
|
|
|
gtk_entry_set_text (GTK_ENTRY(e_cal_raangle), txt);
|
|
|
|
|
strfromd (txt, sizeof(txt-1), (char *)"%f", posctl.calib_axis1.l);
|
|
|
|
|
gtk_entry_set_text (GTK_ENTRY(e_cal_a1len), txt);
|
|
|
|
|
gtk_entry_set_text (GTK_ENTRY(e_cal_ralen), txt);
|
|
|
|
|
|
|
|
|
|
strfromd (txt, sizeof(txt-1), (char *)"%f", posctl.calib_axis2.a);
|
|
|
|
|
gtk_entry_set_text (GTK_ENTRY(e_cal_a2angle), txt);
|
|
|
|
|
gtk_entry_set_text (GTK_ENTRY(e_cal_decangle), txt);
|
|
|
|
|
strfromd (txt, sizeof(txt-1), (char *)"%f", posctl.calib_axis2.l);
|
|
|
|
|
gtk_entry_set_text (GTK_ENTRY(e_cal_a2len), txt);
|
|
|
|
|
gtk_entry_set_text (GTK_ENTRY(e_cal_declen), txt);
|
|
|
|
|
|
|
|
|
|
strfromd (txt, sizeof(txt-1), (char *)"%f", posctl.calib_rot.a - posctl.calib_axis1.a);
|
|
|
|
|
gtk_label_set_text (GTK_LABEL(lb_earthaxis), txt);
|
|
|
|
@ -531,38 +535,38 @@ void posctl_gui_update() {
|
|
|
|
|
|
|
|
|
|
gtk_entry_set_text (GTK_ENTRY(e_posdevice), posctl.GetDevice().c_str());
|
|
|
|
|
strfromd (txt, sizeof(txt-1), (char *)"%f", posctl.axis_op[0]);
|
|
|
|
|
gtk_label_set_text(GTK_LABEL(a1_out), txt);
|
|
|
|
|
gtk_label_set_text(GTK_LABEL(ra_out), txt);
|
|
|
|
|
strfromd (txt, sizeof(txt-1), (char *)"%f", posctl.axis_op[1]);
|
|
|
|
|
gtk_label_set_text(GTK_LABEL(a2_out), txt);
|
|
|
|
|
gtk_label_set_text(GTK_LABEL(dec_out), txt);
|
|
|
|
|
|
|
|
|
|
strfromd (txt, sizeof(txt-1), (char *)"%f", posctl.axis_pv[0]);
|
|
|
|
|
gtk_label_set_text(GTK_LABEL(a1_pv), txt);
|
|
|
|
|
gtk_label_set_text(GTK_LABEL(ra_pv), txt);
|
|
|
|
|
strfromd (txt, sizeof(txt-1), (char *)"%f", posctl.axis_pv[1]);
|
|
|
|
|
gtk_label_set_text(GTK_LABEL(a2_pv), txt);
|
|
|
|
|
gtk_label_set_text(GTK_LABEL(dec_pv), txt);
|
|
|
|
|
|
|
|
|
|
posctl.GetAxisParam(0, &mi, &ma, &kp, &ki, &kd);
|
|
|
|
|
strfromd (txt, sizeof(txt-1), (char *)"%f", mi);
|
|
|
|
|
gtk_entry_set_text_nofocus (a1_min, txt);
|
|
|
|
|
gtk_entry_set_text_nofocus (ra_min, txt);
|
|
|
|
|
strfromd (txt, sizeof(txt-1), (char *)"%f", ma);
|
|
|
|
|
gtk_entry_set_text_nofocus (a1_max, txt);
|
|
|
|
|
gtk_entry_set_text_nofocus (ra_max, txt);
|
|
|
|
|
strfromd (txt, sizeof(txt-1), (char *)"%f", kp);
|
|
|
|
|
gtk_entry_set_text_nofocus (a1_kp, txt);
|
|
|
|
|
gtk_entry_set_text_nofocus (ra_kp, txt);
|
|
|
|
|
strfromd (txt, sizeof(txt-1), (char *)"%f", ki);
|
|
|
|
|
gtk_entry_set_text_nofocus (a1_ki, txt);
|
|
|
|
|
gtk_entry_set_text_nofocus (ra_ki, txt);
|
|
|
|
|
strfromd (txt, sizeof(txt-1), (char *)"%f", kd);
|
|
|
|
|
gtk_entry_set_text_nofocus (a1_kd, txt);
|
|
|
|
|
gtk_entry_set_text_nofocus (ra_kd, txt);
|
|
|
|
|
|
|
|
|
|
posctl.GetAxisParam(1, &mi, &ma, &kp, &ki, &kd);
|
|
|
|
|
strfromd (txt, sizeof(txt-1), (char *)"%f", mi);
|
|
|
|
|
gtk_entry_set_text_nofocus (a2_min, txt);
|
|
|
|
|
gtk_entry_set_text_nofocus (dec_min, txt);
|
|
|
|
|
strfromd (txt, sizeof(txt-1), (char *)"%f", ma);
|
|
|
|
|
gtk_entry_set_text_nofocus (a2_max, txt);
|
|
|
|
|
gtk_entry_set_text_nofocus (dec_max, txt);
|
|
|
|
|
strfromd (txt, sizeof(txt-1), (char *)"%f", kp);
|
|
|
|
|
gtk_entry_set_text_nofocus (a2_kp, txt);
|
|
|
|
|
gtk_entry_set_text_nofocus (dec_kp, txt);
|
|
|
|
|
strfromd (txt, sizeof(txt-1), (char *)"%f", ki);
|
|
|
|
|
gtk_entry_set_text_nofocus (a2_ki, txt);
|
|
|
|
|
gtk_entry_set_text_nofocus (dec_ki, txt);
|
|
|
|
|
strfromd (txt, sizeof(txt-1), (char *)"%f", kd);
|
|
|
|
|
gtk_entry_set_text_nofocus (a2_kd, txt);
|
|
|
|
|
gtk_entry_set_text_nofocus (dec_kd, txt);
|
|
|
|
|
|
|
|
|
|
const gchar *txtptr = gtk_entry_get_text(GTK_ENTRY(e_posdevice));
|
|
|
|
|
if (strncmp(txtptr, "SIMULATION", 11) == 0) gtk_widget_show (btnsimreset);
|
|
|
|
@ -608,7 +612,7 @@ gboolean cb_thread_posctl (gpointer data) {
|
|
|
|
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(tg), true);
|
|
|
|
|
break;
|
|
|
|
|
case (POSCTL_CALIB_MODE_AXIS1M):
|
|
|
|
|
tg = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "cal_mode_a1"));
|
|
|
|
|
tg = GTK_WIDGET(gtk_builder_get_object (GTK_BUILDER(_builder_), "cal_mode_ra"));
|
|
|
|
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(tg), true);
|
|
|
|
|
break;
|
|
|
|
|
case (POSCTL_CALIB_MODE_AXIS2START):
|
|
|
|
@ -794,7 +798,7 @@ void PosCtl::CalibModeWait(int x, int y) {
|
|
|
|
|
void PosCtl::CalibModeDelta(int x, int y) {
|
|
|
|
|
struct timeval tv;
|
|
|
|
|
float timediff;
|
|
|
|
|
double a1min, a1max;
|
|
|
|
|
double ramin, ramax;
|
|
|
|
|
float dist = hypot ((float)(x - calib_pos.x), (float)(y - calib_pos.y));
|
|
|
|
|
|
|
|
|
|
gettimeofday (&tv, NULL);
|
|
|
|
@ -804,7 +808,7 @@ void PosCtl::CalibModeDelta(int x, int y) {
|
|
|
|
|
position_f_2d fp;
|
|
|
|
|
|
|
|
|
|
printf ("%s:%d %s\n", __FILE__, __LINE__, __FUNCTION__);
|
|
|
|
|
pid_axis[0].GetParam(&a1min, &a1max, NULL, NULL, NULL);
|
|
|
|
|
pid_axis[0].GetParam(&ramin, &ramax, NULL, NULL, NULL);
|
|
|
|
|
|
|
|
|
|
fp.x = (x - calib_pos.x) / (float)timediff;
|
|
|
|
|
fp.y = (y - calib_pos.y) / (float)timediff;
|
|
|
|
@ -1139,7 +1143,7 @@ int PosCtl::OutputWriteValue (int axis, double value) {
|
|
|
|
|
std::string s = setlocale(LC_ALL, NULL);
|
|
|
|
|
setlocale (LC_ALL, "C");
|
|
|
|
|
|
|
|
|
|
snprintf(outbuf, 254, ":R%c%+09.4f#", (axis == 0 ? 'D' : 'R'), value);
|
|
|
|
|
snprintf(outbuf, 254, ":R%c%+09.4f#", (axis == AXIS_DEC ? 'D' : 'R'), value);
|
|
|
|
|
outbuf[254] = 0;
|
|
|
|
|
|
|
|
|
|
// reset language setting to default
|
|
|
|
@ -1175,11 +1179,8 @@ int PosCtl::OutputWriteStop () {
|
|
|
|
|
int PosCtl::OutputWriteStart () {
|
|
|
|
|
printf ("%s:%d %s\n", __FILE__, __LINE__, __FUNCTION__);
|
|
|
|
|
|
|
|
|
|
OutputWriteValue(0, 0.0);
|
|
|
|
|
OutputWriteValue(1, 0.0);
|
|
|
|
|
OutputWriteValue(AXIS_DEC, 0.0);
|
|
|
|
|
OutputWriteValue(AXIS_RA, 0.0);
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|