Thread: [Gpredict-svn] SF.net SVN: gpredict:[94] trunk/src/gtk-rig-ctrl.c
Real time satellite tracking and orbit prediction
Status: Beta
Brought to you by:
csete
From: <cs...@us...> - 2008-09-06 21:48:01
|
Revision: 94 http://gpredict.svn.sourceforge.net/gpredict/?rev=94&view=rev Author: csete Date: 2008-09-06 21:48:12 +0000 (Sat, 06 Sep 2008) Log Message: ----------- updated. Modified Paths: -------------- trunk/src/gtk-rig-ctrl.c Modified: trunk/src/gtk-rig-ctrl.c =================================================================== --- trunk/src/gtk-rig-ctrl.c 2008-09-06 21:38:14 UTC (rev 93) +++ trunk/src/gtk-rig-ctrl.c 2008-09-06 21:48:12 UTC (rev 94) @@ -51,11 +51,11 @@ #endif /* NETWORK */ -#include <sys/types.h> -#include <sys/socket.h> -#include <netinet/in.h> -#include <arpa/inet.h> -#include <netdb.h> +//#include <sys/types.h> +#include <sys/socket.h> /* socket(), connect(), send() */ +#include <netinet/in.h> /* struct sockaddr_in */ +#include <arpa/inet.h> /* htons() */ +#include <netdb.h> /* gethostbyname() */ /* END */ #define AZEL_FMTSTR "%7.2f\302\260" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cs...@us...> - 2008-09-15 23:29:54
|
Revision: 111 http://gpredict.svn.sourceforge.net/gpredict/?rev=111&view=rev Author: csete Date: 2008-09-15 23:30:05 +0000 (Mon, 15 Sep 2008) Log Message: ----------- Log an error message if trying to engage invalid configuration. Modified Paths: -------------- trunk/src/gtk-rig-ctrl.c Modified: trunk/src/gtk-rig-ctrl.c =================================================================== --- trunk/src/gtk-rig-ctrl.c 2008-09-15 23:29:11 UTC (rev 110) +++ trunk/src/gtk-rig-ctrl.c 2008-09-15 23:30:05 UTC (rev 111) @@ -722,6 +722,9 @@ else { if (ctrl->conf == NULL) { /* we don't have a working configuration */ + sat_log_log (SAT_LOG_LEVEL_ERROR, + _("%s: Controller does not have a valid configuration"), + __FUNCTION__); return; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cs...@us...> - 2008-09-16 00:31:18
|
Revision: 112 http://gpredict.svn.sourceforge.net/gpredict/?rev=112&view=rev Author: csete Date: 2008-09-16 00:31:28 +0000 (Tue, 16 Sep 2008) Log Message: ----------- Shutdown socket after use (before close). Modified Paths: -------------- trunk/src/gtk-rig-ctrl.c Modified: trunk/src/gtk-rig-ctrl.c =================================================================== --- trunk/src/gtk-rig-ctrl.c 2008-09-15 23:30:05 UTC (rev 111) +++ trunk/src/gtk-rig-ctrl.c 2008-09-16 00:31:28 UTC (rev 112) @@ -847,6 +847,7 @@ __FUNCTION__, written, size); } g_free (buff); + shutdown (sock, SHUT_RDWR); close (sock); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cs...@us...> - 2008-09-18 11:52:41
|
Revision: 136 http://gpredict.svn.sourceforge.net/gpredict/?rev=136&view=rev Author: csete Date: 2008-09-18 18:52:52 +0000 (Thu, 18 Sep 2008) Log Message: ----------- Implemented active feedback to take into account frequency changes made via radio dial. Removed newline from the end of hamlib commands. Improved controller algorithm to only set frequency if it has changed. Modified Paths: -------------- trunk/src/gtk-rig-ctrl.c Modified: trunk/src/gtk-rig-ctrl.c =================================================================== --- trunk/src/gtk-rig-ctrl.c 2008-09-18 00:17:26 UTC (rev 135) +++ trunk/src/gtk-rig-ctrl.c 2008-09-18 18:52:52 UTC (rev 136) @@ -82,6 +82,7 @@ static void rig_locked_cb (GtkToggleButton *button, gpointer data); static gboolean rig_ctrl_timeout_cb (gpointer data); static gboolean set_freq (GtkRigCtrl *ctrl, gdouble freq); +static gboolean get_freq (GtkRigCtrl *ctrl, gdouble *freq); static void update_count_down (GtkRigCtrl *ctrl, gdouble t); @@ -744,7 +745,7 @@ rig_ctrl_timeout_cb (gpointer data) { GtkRigCtrl *ctrl = GTK_RIG_CTRL (data); - gdouble satfreq,doppler,lof; + gdouble satfreq,doppler,lof,readfreq=0,lastfreq; if (ctrl->busy) { @@ -754,6 +755,39 @@ ctrl->busy = TRUE; + lof = 1.0e6*gtk_spin_button_get_value (GTK_SPIN_BUTTON (ctrl->LO)); + + /* Dial feedback: + If radio device is engaged read frequency from radio and compare it to the + last set frequency. If different, it means that user has changed frequency + on the radio dial => update transponder knob + */ + if ((ctrl->engaged) && (ctrl->conf != NULL)) { + lastfreq = gtk_freq_knob_get_value (GTK_FREQ_KNOB (ctrl->RigFreq)); + + /* get current frequency from rig */ + if (!get_freq (ctrl, &readfreq)) { + /* error => use a passive value */ + readfreq = lastfreq; + } + + if (fabs (readfreq - lastfreq) > 0.99) { + /* user might have altered radio frequency => update transponder knob */ + gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->RigFreq), readfreq); + + /* doppler shift; only if we are tracking */ + if (ctrl->tracking) { + satfreq = (readfreq+lof) / (1 - (ctrl->target->range_rate/299792.4580)); + } + else { + satfreq = readfreq + lof; + } + gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->SatFreq), satfreq); + } + } + + /* now, forward tracking */ + /* If we are tracking, calculate the radio freq by applying both dopper shift and tranverter LO frequency. If we are not tracking, apply only LO frequency. @@ -761,17 +795,17 @@ if (ctrl->tracking) { satfreq = gtk_freq_knob_get_value (GTK_FREQ_KNOB (ctrl->SatFreq)); doppler = -satfreq * (ctrl->target->range_rate / 299792.4580); - lof = 1.0e6*gtk_spin_button_get_value (GTK_SPIN_BUTTON (ctrl->LO)); - gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->RigFreq), satfreq+doppler+lof); + gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->RigFreq), satfreq+doppler-lof); } else { satfreq = gtk_freq_knob_get_value (GTK_FREQ_KNOB (ctrl->SatFreq)); - lof = 1.0e6*gtk_spin_button_get_value (GTK_SPIN_BUTTON (ctrl->LO)); - gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->RigFreq), satfreq+lof); + gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->RigFreq), satfreq-lof); } + /* if device is engaged, send freq command to radio */ - if ((ctrl->engaged) && (ctrl->conf != NULL)) { + if ((ctrl->engaged) && (ctrl->conf != NULL) && + (fabs (readfreq-gtk_freq_knob_get_value (GTK_FREQ_KNOB(ctrl->RigFreq))) > 0.99)) { if (set_freq (ctrl, gtk_freq_knob_get_value (GTK_FREQ_KNOB(ctrl->RigFreq)))) { /* reset error counter */ ctrl->errcnt = 0; @@ -857,14 +891,9 @@ } /* send command */ - buff = g_strdup_printf ("F %10.0f\n", freq); + buff = g_strdup_printf ("F %10.0f", freq); - /* number of bytes to write depends on platform (EOL) */ -#ifdef G_OS_WIN32 - size = 14; -#else - size = 13; -#endif + size = 12; written = send(sock, buff, size, 0); if (written != size) { sat_log_log (SAT_LOG_LEVEL_ERROR, @@ -881,6 +910,114 @@ } +/** \brief Get frequency + * \param ctrl Pointer to the GtkRigCtrl structure. + * \param freq The current frequency of the radio. + * \return TRUE if the operation was successful, FALSE if a connection error + * occurred. + */ +static gboolean get_freq (GtkRigCtrl *ctrl, gdouble *freq) +{ + gchar *buff,**vbuff; + gint written,size; + gint status; + struct hostent *h; + struct sockaddr_in ServAddr; + gint sock; /*!< Network socket */ + + + if (freq == NULL) { + sat_log_log (SAT_LOG_LEVEL_BUG, + _("%s:%d: NULL storage."), + __FILE__, __LINE__); + return FALSE; + } + + /* create socket */ + sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); + if (sock < 0) { + sat_log_log (SAT_LOG_LEVEL_ERROR, + _("%s:%d: Failed to create socket"), + __FILE__, __LINE__); + return FALSE; + } + else { + sat_log_log (SAT_LOG_LEVEL_DEBUG, + _("%s:%d Network socket created successfully"), + __FILE__, __LINE__); + } + + memset(&ServAddr, 0, sizeof(ServAddr)); /* Zero out structure */ + ServAddr.sin_family = AF_INET; /* Internet address family */ + h = gethostbyname(ctrl->conf->host); + memcpy((char *) &ServAddr.sin_addr.s_addr, h->h_addr_list[0], h->h_length); + ServAddr.sin_port = htons(ctrl->conf->port); /* Server port */ + + /* establish connection */ + status = connect(sock, (struct sockaddr *) &ServAddr, sizeof(ServAddr)); + if (status < 0) { + sat_log_log (SAT_LOG_LEVEL_ERROR, + _("%s:%d: Failed to connect to %s:%d"), + __FILE__, __LINE__, ctrl->conf->host, ctrl->conf->port); + return FALSE; + } + else { + sat_log_log (SAT_LOG_LEVEL_DEBUG, + _("%s:%d: Connection opened to %s:%d"), + __FILE__, __LINE__, ctrl->conf->host, ctrl->conf->port); + } + + /* send command */ + buff = g_strdup_printf ("f"); + + size = 1; + written = send(sock, buff, size, 0); + if (written != size) { + sat_log_log (SAT_LOG_LEVEL_ERROR, + _("%s:%d: SIZE ERROR %d / %d"), + __FILE__, __LINE__, written, size); + } + g_free (buff); + + + /* try to read answer */ + buff = g_try_malloc (128); + if (buff == NULL) { + sat_log_log (SAT_LOG_LEVEL_ERROR, + _("%s:%s: Failed to allocate 128 bytes (yes, this means trouble)"), + __FILE__, __FUNCTION__); + shutdown (sock, SHUT_RDWR); + close (sock); + return FALSE; + } + + size = read (sock, buff, 127); + if (size == 0) { + sat_log_log (SAT_LOG_LEVEL_ERROR, + _("%s:%s: Got 0 bytes from rotctld"), + __FILE__, __FUNCTION__); + } + else { + sat_log_log (SAT_LOG_LEVEL_DEBUG, + _("%s:%s: Read %d bytes from rotctld"), + __FILE__, __FUNCTION__, size); + + buff[size] = 0; + vbuff = g_strsplit (buff, "\n", 3); + *freq = g_strtod (vbuff[0], NULL); + + g_free (buff); + g_strfreev (vbuff); + } + + shutdown (sock, SHUT_RDWR); + close (sock); + + + return TRUE; +} + + /** \brief Update count down label. * \param[in] ctrl Pointer to the RigCtrl widget. * \param[in] t The current time. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cs...@us...> - 2009-03-22 11:18:00
|
Revision: 211 http://gpredict.svn.sourceforge.net/gpredict/?rev=211&view=rev Author: csete Date: 2009-03-22 11:17:51 +0000 (Sun, 22 Mar 2009) Log Message: ----------- Changed set/get_freq to set/get_freq_simplex. Modified Paths: -------------- trunk/src/gtk-rig-ctrl.c Modified: trunk/src/gtk-rig-ctrl.c =================================================================== --- trunk/src/gtk-rig-ctrl.c 2009-03-22 00:32:00 UTC (rev 210) +++ trunk/src/gtk-rig-ctrl.c 2009-03-22 11:17:51 UTC (rev 211) @@ -83,8 +83,8 @@ static void rig_selected_cb (GtkComboBox *box, gpointer data); static void rig_locked_cb (GtkToggleButton *button, gpointer data); static gboolean rig_ctrl_timeout_cb (gpointer data); -static gboolean set_freq (GtkRigCtrl *ctrl, gdouble freq); -static gboolean get_freq (GtkRigCtrl *ctrl, gdouble *freq); +static gboolean set_freq_simplex (GtkRigCtrl *ctrl, gdouble freq); +static gboolean get_freq_simplex (GtkRigCtrl *ctrl, gdouble *freq); static void update_count_down (GtkRigCtrl *ctrl, gdouble t); static gboolean have_conf (void); @@ -854,7 +854,7 @@ lastfreq = gtk_freq_knob_get_value (GTK_FREQ_KNOB (ctrl->RigFreqDown)); /* get current frequency from rig */ - if (!get_freq (ctrl, &readfreq)) { + if (!get_freq_simplex (ctrl, &readfreq)) { /* error => use a passive value */ readfreq = lastfreq; } @@ -894,7 +894,7 @@ /* if device is engaged, send freq command to radio */ if ((ctrl->engaged) && (ctrl->conf != NULL) && (fabs (readfreq-gtk_freq_knob_get_value (GTK_FREQ_KNOB(ctrl->RigFreqDown))) > 0.99)) { - if (set_freq (ctrl, gtk_freq_knob_get_value (GTK_FREQ_KNOB(ctrl->RigFreqDown)))) { + if (set_freq_simplex (ctrl, gtk_freq_knob_get_value (GTK_FREQ_KNOB(ctrl->RigFreqDown)))) { /* reset error counter */ ctrl->errcnt = 0; } @@ -935,7 +935,7 @@ * gotten the current frequency from the ctrl; however, the param * might become useful in the future. */ -static gboolean set_freq (GtkRigCtrl *ctrl, gdouble freq) +static gboolean set_freq_simplex (GtkRigCtrl *ctrl, gdouble freq) { gchar *buff; gint written,size; @@ -1004,7 +1004,7 @@ * \return TRUE if the operation was successful, FALSE if a connection error * occurred. */ -static gboolean get_freq (GtkRigCtrl *ctrl, gdouble *freq) +static gboolean get_freq_simplex (GtkRigCtrl *ctrl, gdouble *freq) { gchar *buff,**vbuff; gint written,size; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cs...@us...> - 2009-03-22 11:47:06
|
Revision: 212 http://gpredict.svn.sourceforge.net/gpredict/?rev=212&view=rev Author: csete Date: 2009-03-22 11:46:57 +0000 (Sun, 22 Mar 2009) Log Message: ----------- Removed conf == NULL checking in controller callback since it is already done during creation of the widget. Modified Paths: -------------- trunk/src/gtk-rig-ctrl.c Modified: trunk/src/gtk-rig-ctrl.c =================================================================== --- trunk/src/gtk-rig-ctrl.c 2009-03-22 11:17:51 UTC (rev 211) +++ trunk/src/gtk-rig-ctrl.c 2009-03-22 11:46:57 UTC (rev 212) @@ -195,7 +195,7 @@ GtkWidget *widget; GtkWidget *table; - /* check that we have rot conf */ + /* check that we have rig conf */ if (!have_conf()) { return NULL; } @@ -850,7 +850,7 @@ last set frequency. If different, it means that user has changed frequency on the radio dial => update transponder knob */ - if ((ctrl->engaged) && (ctrl->conf != NULL)) { + if (ctrl->engaged) { lastfreq = gtk_freq_knob_get_value (GTK_FREQ_KNOB (ctrl->RigFreqDown)); /* get current frequency from rig */ @@ -892,7 +892,7 @@ /* if device is engaged, send freq command to radio */ - if ((ctrl->engaged) && (ctrl->conf != NULL) && + if ((ctrl->engaged) && (fabs (readfreq-gtk_freq_knob_get_value (GTK_FREQ_KNOB(ctrl->RigFreqDown))) > 0.99)) { if (set_freq_simplex (ctrl, gtk_freq_knob_get_value (GTK_FREQ_KNOB(ctrl->RigFreqDown)))) { /* reset error counter */ @@ -925,7 +925,7 @@ } -/** \brief Set frequency +/** \brief Set frequency in * \param ctrl Pointer to the GtkRigCtrl structure. * \param freq The new frequency. * \return TRUE if the operation was successful, FALSE if a connection error This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cs...@us...> - 2009-04-01 22:44:07
|
Revision: 219 http://gpredict.svn.sourceforge.net/gpredict/?rev=219&view=rev Author: csete Date: 2009-04-01 22:44:06 +0000 (Wed, 01 Apr 2009) Log Message: ----------- Added some (currently inactive) code to test read_transponders. Modified Paths: -------------- trunk/src/gtk-rig-ctrl.c Modified: trunk/src/gtk-rig-ctrl.c =================================================================== --- trunk/src/gtk-rig-ctrl.c 2009-04-01 22:43:02 UTC (rev 218) +++ trunk/src/gtk-rig-ctrl.c 2009-04-01 22:44:06 UTC (rev 219) @@ -45,6 +45,7 @@ #include "sat-cfg.h" #include "gtk-freq-knob.h" #include "radio-conf.h" +#include "trsp-conf.h" #ifdef HAVE_CONFIG_H # include <build-config.h> #endif @@ -675,6 +676,7 @@ sat_selected_cb (GtkComboBox *satsel, gpointer data) { GtkRigCtrl *ctrl = GTK_RIG_CTRL (data); + GSList *trsplist = NULL; gint i; i = gtk_combo_box_get_active (satsel); @@ -685,6 +687,11 @@ if (ctrl->pass != NULL) free_pass (ctrl->pass); ctrl->pass = get_next_pass (ctrl->target, ctrl->qth, 3.0); + + /* get transponders */ + //trsplist = read_tranponders (ctrl->target->tle.catnr); + + //g_print ("**** %d \n", g_slist_length (trsplist)); } else { sat_log_log (SAT_LOG_LEVEL_ERROR, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cs...@us...> - 2009-04-08 21:44:19
|
Revision: 227 http://gpredict.svn.sourceforge.net/gpredict/?rev=227&view=rev Author: csete Date: 2009-04-08 21:44:13 +0000 (Wed, 08 Apr 2009) Log Message: ----------- Fixed crash when closing rig controller window with active transponder list. Modified Paths: -------------- trunk/src/gtk-rig-ctrl.c Modified: trunk/src/gtk-rig-ctrl.c =================================================================== --- trunk/src/gtk-rig-ctrl.c 2009-04-04 22:40:08 UTC (rev 226) +++ trunk/src/gtk-rig-ctrl.c 2009-04-08 21:44:13 UTC (rev 227) @@ -198,6 +198,7 @@ /* free transponder */ if (ctrl->trsplist != NULL) { free_transponders (ctrl->trsplist); + ctrl->trsplist = NULL; /* destroy might is called twice (?) so we need to NULL it */ } (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cs...@us...> - 2009-04-10 14:36:53
|
Revision: 232 http://gpredict.svn.sourceforge.net/gpredict/?rev=232&view=rev Author: csete Date: 2009-04-10 14:36:50 +0000 (Fri, 10 Apr 2009) Log Message: ----------- Use new freq_changed signal of GtkFrweqKnob widget to track uplink and downlink changes. Modified Paths: -------------- trunk/src/gtk-rig-ctrl.c Modified: trunk/src/gtk-rig-ctrl.c =================================================================== --- trunk/src/gtk-rig-ctrl.c 2009-04-10 14:34:55 UTC (rev 231) +++ trunk/src/gtk-rig-ctrl.c 2009-04-10 14:36:50 UTC (rev 232) @@ -85,7 +85,10 @@ static void trsp_tune_cb (GtkButton *button, gpointer data); static void trsp_lock_cb (GtkToggleButton *button, gpointer data); static gboolean rig_ctrl_timeout_cb (gpointer data); +static void downlink_changed_cb (GtkFreqKnob *knob, gpointer data); +static void uplink_changed_cb (GtkFreqKnob *knob, gpointer data); + /* radio control functions */ static void exec_rx_cycle (GtkRigCtrl *ctrl); static void exec_tx_cycle (GtkRigCtrl *ctrl); @@ -376,6 +379,7 @@ /* satellite downlink frequency */ ctrl->SatFreqDown = gtk_freq_knob_new (145890000.0, TRUE); + g_signal_connect (ctrl->SatFreqDown, "freq_changed", G_CALLBACK (downlink_changed_cb), ctrl); gtk_box_pack_start_defaults (GTK_BOX (vbox), ctrl->SatFreqDown); /* Downlink doppler */ @@ -437,6 +441,7 @@ /* satellite uplink frequency */ ctrl->SatFreqUp = gtk_freq_knob_new (145890000.0, TRUE); + g_signal_connect (ctrl->SatFreqUp, "freq_changed", G_CALLBACK (uplink_changed_cb), ctrl); gtk_box_pack_start_defaults (GTK_BOX (vbox), ctrl->SatFreqUp); /* Uplink doppler */ @@ -865,7 +870,7 @@ static void trsp_lock_cb (GtkToggleButton *button, gpointer data) { GtkRigCtrl *ctrl = GTK_RIG_CTRL (data); - gdouble offset; + ctrl->trsplock = gtk_toggle_button_get_active (button); @@ -1041,6 +1046,40 @@ } +/** \brief Manage downlink frequency change callbacks. + * \param knob Pointer to the GtkFreqKnob widget that received the signal. + * \param data Pointer to the GtkRigCtrl structure. + * + * This function is called when the user changes the downlink frequency in the controller. + * The function checks if the the transponder is locked, if yes it calls track_downlink(). + */ +static void downlink_changed_cb (GtkFreqKnob *knob, gpointer data) +{ + GtkRigCtrl *ctrl = GTK_RIG_CTRL (data); + + if (ctrl->trsplock) { + track_downlink (ctrl); + } +} + +/** \brief Manage uplink frequency change callbacks. + * \param knob Pointer to the GtkFreqKnob widget that received the signal. + * \param data Pointer to the GtkRigCtrl structure. + * + * This function is called when the user changes the uplink frequency in the controller. + * The function checks if the the transponder is locked, if yes it calls track_uplink(). + */ +static void uplink_changed_cb (GtkFreqKnob *knob, gpointer data) +{ + GtkRigCtrl *ctrl = GTK_RIG_CTRL (data); + + if (ctrl->trsplock) { + track_uplink (ctrl); + } +} + + + /** \brief Rigator controller timeout function * \param data Pointer to the GtkRigCtrl widget. * \return Always TRUE to let the timer continue. @@ -1146,12 +1185,13 @@ } gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->SatFreqDown), satfreqd); - /* TODO Update uplink if locked to downlink */ + /* Update uplink if locked to downlink */ + if (ctrl->trsplock) { + track_downlink (ctrl); + } } } - /* TODO: Follow with uplink if transponder is locked */ - /* now, forward tracking */ if (dialchanged) { /* no need to forward track */ @@ -1261,13 +1301,14 @@ satfrequ = readfreq + ctrl->conf->loup; } gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->SatFreqUp), satfrequ); - - /* TODO Update downlink if locked to uplink */ + + /* Follow with downlink if transponder is locked */ + if (ctrl->trsplock) { + track_uplink (ctrl); + } } } - /* TODO: Follow with downlink if transponder is locked */ - /* now, forward tracking */ if (dialchanged) { /* no need to forward track */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cs...@us...> - 2009-04-10 18:05:43
|
Revision: 234 http://gpredict.svn.sourceforge.net/gpredict/?rev=234&view=rev Author: csete Date: 2009-04-10 18:05:42 +0000 (Fri, 10 Apr 2009) Log Message: ----------- Check for proper transponder config before attempting to track uplink or downlink. Modified Paths: -------------- trunk/src/gtk-rig-ctrl.c Modified: trunk/src/gtk-rig-ctrl.c =================================================================== --- trunk/src/gtk-rig-ctrl.c 2009-04-10 14:38:49 UTC (rev 233) +++ trunk/src/gtk-rig-ctrl.c 2009-04-10 18:05:42 UTC (rev 234) @@ -862,7 +862,7 @@ * \param button Pointer to the GtkToggleButton that received the signal. * \param data Pointer to the GtkRigCtrl structure. * - * This finction is called when the user toggles the "Lock Transponder" button. + * This function is called when the user toggles the "Lock Transponder" button. * When ON, the uplink and downlink are locked according to the current transponder * data, i.e. when user changes the downlink, the uplink will follow automatically * taking into account whether the transponder is inverting or not. @@ -871,7 +871,6 @@ { GtkRigCtrl *ctrl = GTK_RIG_CTRL (data); - ctrl->trsplock = gtk_toggle_button_get_active (button); /* set uplink according to downlink */ @@ -1859,17 +1858,21 @@ return; } - down = gtk_freq_knob_get_value (GTK_FREQ_KNOB (ctrl->SatFreqDown)); - delta = down - ctrl->trsp->downlow; + /* ensure that we have a useable transponder config */ + if ((ctrl->trsp->downlow > 0.0) && (ctrl->trsp->uplow > 0.0)) { - if (ctrl->trsp->invert) { - up = ctrl->trsp->uphigh - delta; + down = gtk_freq_knob_get_value (GTK_FREQ_KNOB (ctrl->SatFreqDown)); + delta = down - ctrl->trsp->downlow; + + if (ctrl->trsp->invert) { + up = ctrl->trsp->uphigh - delta; + } + else { + up = ctrl->trsp->uplow + delta; + } + + gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->SatFreqUp), up); } - else { - up = ctrl->trsp->uplow + delta; - } - - gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->SatFreqUp), up); } @@ -1886,16 +1889,20 @@ if (ctrl->trsp == NULL) { return; } + + /* ensure that we have a useable transponder config */ + if ((ctrl->trsp->downlow > 0.0) && (ctrl->trsp->uplow > 0.0)) { + + up = gtk_freq_knob_get_value (GTK_FREQ_KNOB (ctrl->SatFreqUp)); + delta = up - ctrl->trsp->uplow; - up = gtk_freq_knob_get_value (GTK_FREQ_KNOB (ctrl->SatFreqUp)); - delta = up - ctrl->trsp->uplow; + if (ctrl->trsp->invert) { + down = ctrl->trsp->downhigh - delta; + } + else { + down = ctrl->trsp->downlow + delta; + } - if (ctrl->trsp->invert) { - down = ctrl->trsp->downhigh - delta; + gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->SatFreqDown), down); } - else { - down = ctrl->trsp->downlow + delta; - } - - gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->SatFreqDown), down); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cs...@us...> - 2009-04-10 18:11:48
|
Revision: 235 http://gpredict.svn.sourceforge.net/gpredict/?rev=235&view=rev Author: csete Date: 2009-04-10 18:11:40 +0000 (Fri, 10 Apr 2009) Log Message: ----------- Renamed rig_locked_cb to rig_engaged_cb. Modified Paths: -------------- trunk/src/gtk-rig-ctrl.c Modified: trunk/src/gtk-rig-ctrl.c =================================================================== --- trunk/src/gtk-rig-ctrl.c 2009-04-10 18:05:42 UTC (rev 234) +++ trunk/src/gtk-rig-ctrl.c 2009-04-10 18:11:40 UTC (rev 235) @@ -80,7 +80,7 @@ static void track_toggle_cb (GtkToggleButton *button, gpointer data); static void delay_changed_cb (GtkSpinButton *spin, gpointer data); static void rig_selected_cb (GtkComboBox *box, gpointer data); -static void rig_locked_cb (GtkToggleButton *button, gpointer data); +static void rig_engaged_cb (GtkToggleButton *button, gpointer data); static void trsp_selected_cb (GtkComboBox *box, gpointer data); static void trsp_tune_cb (GtkButton *button, gpointer data); static void trsp_lock_cb (GtkToggleButton *button, gpointer data); @@ -659,7 +659,7 @@ /* Engage button */ ctrl->LockBut = gtk_toggle_button_new_with_label (_("Engage")); gtk_widget_set_tooltip_text (ctrl->LockBut, _("Engage the selcted radio device")); - g_signal_connect (ctrl->LockBut, "toggled", G_CALLBACK (rig_locked_cb), ctrl); + g_signal_connect (ctrl->LockBut, "toggled", G_CALLBACK (rig_engaged_cb), ctrl); gtk_table_attach_defaults (GTK_TABLE (table), ctrl->LockBut, 2, 3, 0, 1); /* Now, load config*/ @@ -980,14 +980,14 @@ -/** \brief Rig locked. +/** \brief Manage Engage button signals. * \param button Pointer to the "Engage" button. * \param data Pointer to the GtkRigCtrl widget. * * This function is called when the user toggles the "Engage" button. */ static void -rig_locked_cb (GtkToggleButton *button, gpointer data) +rig_engaged_cb (GtkToggleButton *button, gpointer data) { GtkRigCtrl *ctrl = GTK_RIG_CTRL (data); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cs...@us...> - 2009-04-11 15:11:05
|
Revision: 238 http://gpredict.svn.sourceforge.net/gpredict/?rev=238&view=rev Author: csete Date: 2009-04-11 15:10:54 +0000 (Sat, 11 Apr 2009) Log Message: ----------- Take set_freq error caused by tuning step size into account. The RX cycle is now fully functional (tested using FT-817 and IC-765). Modified Paths: -------------- trunk/src/gtk-rig-ctrl.c Modified: trunk/src/gtk-rig-ctrl.c =================================================================== --- trunk/src/gtk-rig-ctrl.c 2009-04-11 13:05:09 UTC (rev 237) +++ trunk/src/gtk-rig-ctrl.c 2009-04-11 15:10:54 UTC (rev 238) @@ -1271,7 +1271,11 @@ gboolean ptt = FALSE; gboolean dialchanged = FALSE; + /* get PTT status */ + if (ctrl->engaged && ctrl->conf->ptt) + ptt = get_ptt (ctrl, ctrl->conf); + /* Dial feedback: If radio device is engaged read frequency from radio and compare it to the last set frequency. If different, it means that user has changed frequency @@ -1282,9 +1286,6 @@ */ if ((ctrl->engaged) && (ctrl->lastrxf > 0.0)) { - /* check whether PTT is ON */ - ptt = ctrl->conf->ptt ? get_ptt (ctrl, ctrl->conf) : FALSE; - if (ptt == FALSE) { if (!get_freq_simplex (ctrl, ctrl->conf, &readfreq)) { /* error => use a passive value */ @@ -1296,11 +1297,12 @@ readfreq = ctrl->lastrxf; } - if (fabs (readfreq - ctrl->lastrxf) > 0.99) { + if (fabs (readfreq - ctrl->lastrxf) >= 1.0) { dialchanged = TRUE; /* user might have altered radio frequency => update transponder knob */ gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->RigFreqDown), readfreq); + ctrl->lastrxf = readfreq; /* doppler shift; only if we are tracking */ if (ctrl->tracking) { @@ -1350,10 +1352,16 @@ tmpfreq = gtk_freq_knob_get_value(GTK_FREQ_KNOB(ctrl->RigFreqDown)); /* if device is engaged, send freq command to radio */ - if ((ctrl->engaged) && (ptt == FALSE) && (fabs(ctrl->lastrxf - tmpfreq) > 0.99)) { + if ((ctrl->engaged) && (ptt == FALSE) && (fabs(ctrl->lastrxf - tmpfreq) >= 1.0)) { if (set_freq_simplex (ctrl, ctrl->conf, tmpfreq)) { /* reset error counter */ ctrl->errcnt = 0; + + /* The actual frequency migh be different from what we have set because + the tuning step is larger than what we work with (e.g. FT-817 has a + smallest tuning step of 10 Hz). Therefore we read back the actual + frequency from the rig. */ + get_freq_simplex (ctrl, ctrl->conf, &tmpfreq); ctrl->lastrxf = tmpfreq; } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cs...@us...> - 2009-04-11 15:19:44
|
Revision: 239 http://gpredict.svn.sourceforge.net/gpredict/?rev=239&view=rev Author: csete Date: 2009-04-11 15:19:41 +0000 (Sat, 11 Apr 2009) Log Message: ----------- Also applied tuning step fixes to TX mode controller. Modified Paths: -------------- trunk/src/gtk-rig-ctrl.c Modified: trunk/src/gtk-rig-ctrl.c =================================================================== --- trunk/src/gtk-rig-ctrl.c 2009-04-11 15:10:54 UTC (rev 238) +++ trunk/src/gtk-rig-ctrl.c 2009-04-11 15:19:41 UTC (rev 239) @@ -1395,7 +1395,10 @@ gboolean ptt = FALSE; gboolean dialchanged = FALSE; - + /* get PTT status */ + if (ctrl->engaged && ctrl->conf->ptt) + ptt = get_ptt (ctrl, ctrl->conf); + /* Dial feedback: If radio device is engaged read frequency from radio and compare it to the last set frequency. If different, it means that user has changed frequency @@ -1405,12 +1408,7 @@ and no need to execute the dial feedback. */ if ((ctrl->engaged) && (ctrl->lasttxf > 0.0)) { - // This is no good because it gets out of sync while PTT = ON - //lastfreq = gtk_freq_knob_get_value (GTK_FREQ_KNOB (ctrl->RigFreqDown)); - /* check whether PTT is ON */ - ptt = ctrl->conf->ptt ? get_ptt (ctrl, ctrl->conf) : FALSE; - if (ptt == TRUE) { if (!get_freq_simplex (ctrl, ctrl->conf, &readfreq)) { /* error => use a passive value */ @@ -1422,11 +1420,12 @@ readfreq = ctrl->lasttxf; } - if (fabs (readfreq - ctrl->lasttxf) > 0.99) { + if (fabs (readfreq - ctrl->lasttxf) >= 1.0) { dialchanged = TRUE; /* user might have altered radio frequency => update transponder knob */ gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->RigFreqUp), readfreq); + ctrl->lasttxf = readfreq; /* doppler shift; only if we are tracking */ if (ctrl->tracking) { @@ -1476,10 +1475,16 @@ tmpfreq = gtk_freq_knob_get_value(GTK_FREQ_KNOB(ctrl->RigFreqUp)); /* if device is engaged, send freq command to radio */ - if ((ctrl->engaged) && (ptt == TRUE) && (fabs(ctrl->lasttxf - tmpfreq) > 0.99)) { + if ((ctrl->engaged) && (ptt == TRUE) && (fabs(ctrl->lasttxf - tmpfreq) >= 1.0)) { if (set_freq_simplex (ctrl, ctrl->conf, tmpfreq)) { /* reset error counter */ ctrl->errcnt = 0; + + /* The actual frequency migh be different from what we have set because + the tuning step is larger than what we work with (e.g. FT-817 has a + smallest tuning step of 10 Hz). Therefore we read back the actual + frequency from the rig. */ + get_freq_simplex (ctrl, ctrl->conf, &tmpfreq); ctrl->lasttxf = tmpfreq; } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cs...@us...> - 2009-04-11 16:45:18
|
Revision: 240 http://gpredict.svn.sourceforge.net/gpredict/?rev=240&view=rev Author: csete Date: 2009-04-11 16:45:09 +0000 (Sat, 11 Apr 2009) Log Message: ----------- TX controller should initialize PTT to TRUE, otherwise it won't work with transmitters that don't have read_ptt via CAT. Modified Paths: -------------- trunk/src/gtk-rig-ctrl.c Modified: trunk/src/gtk-rig-ctrl.c =================================================================== --- trunk/src/gtk-rig-ctrl.c 2009-04-11 15:19:41 UTC (rev 239) +++ trunk/src/gtk-rig-ctrl.c 2009-04-11 16:45:09 UTC (rev 240) @@ -1392,7 +1392,7 @@ static void exec_tx_cycle (GtkRigCtrl *ctrl) { gdouble readfreq=0.0, tmpfreq, satfreqd, satfrequ, doppler; - gboolean ptt = FALSE; + gboolean ptt = TRUE; gboolean dialchanged = FALSE; /* get PTT status */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cs...@us...> - 2009-04-11 19:24:52
|
Revision: 241 http://gpredict.svn.sourceforge.net/gpredict/?rev=241&view=rev Author: csete Date: 2009-04-11 19:24:42 +0000 (Sat, 11 Apr 2009) Log Message: ----------- Added check for rig engaged in simplex mode. Modified Paths: -------------- trunk/src/gtk-rig-ctrl.c Modified: trunk/src/gtk-rig-ctrl.c =================================================================== --- trunk/src/gtk-rig-ctrl.c 2009-04-11 16:45:09 UTC (rev 240) +++ trunk/src/gtk-rig-ctrl.c 2009-04-11 19:24:42 UTC (rev 241) @@ -34,7 +34,6 @@ * attached to it. Note, however, that current implementation only * allows one control window per module. * - * TODO Simplex TRX * TODO Duplex TRX * TODO Separate uplink rig * TODO Transponder passband display somewhere @@ -1516,12 +1515,14 @@ */ static void exec_trx_cycle (GtkRigCtrl *ctrl) { - if (get_ptt (ctrl, ctrl->conf) == TRUE) { - exec_tx_cycle (ctrl); + if (ctrl->engaged) { + if (get_ptt (ctrl, ctrl->conf) == TRUE) { + exec_tx_cycle (ctrl); + } + else { + exec_rx_cycle (ctrl); + } } - else { - exec_rx_cycle (ctrl); - } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cs...@us...> - 2009-04-12 10:52:25
|
Revision: 242 http://gpredict.svn.sourceforge.net/gpredict/?rev=242&view=rev Author: csete Date: 2009-04-12 10:52:19 +0000 (Sun, 12 Apr 2009) Log Message: ----------- First cut at dual-rig controller. Modified Paths: -------------- trunk/src/gtk-rig-ctrl.c Modified: trunk/src/gtk-rig-ctrl.c =================================================================== --- trunk/src/gtk-rig-ctrl.c 2009-04-11 19:24:42 UTC (rev 241) +++ trunk/src/gtk-rig-ctrl.c 2009-04-12 10:52:19 UTC (rev 242) @@ -111,6 +111,7 @@ static gboolean have_conf (void); static void track_downlink (GtkRigCtrl *ctrl); static void track_uplink (GtkRigCtrl *ctrl); +static gboolean is_rig_tx_capable (const gchar *confname); static GtkVBoxClass *parent_class = NULL; @@ -661,7 +662,6 @@ g_clear_error (&error); } - g_free (dirname); g_dir_close (dir); gtk_combo_box_set_active (GTK_COMBO_BOX (ctrl->DevSel), 0); @@ -683,12 +683,38 @@ gtk_combo_box_append_text (GTK_COMBO_BOX (ctrl->DevSel2), _("None")); gtk_combo_box_set_active (GTK_COMBO_BOX (ctrl->DevSel2), 0); + dir = g_dir_open (dirname, 0, &error); + if (dir) { + /* read each .rig file */ + while ((filename = g_dir_read_name (dir))) { + + if (g_strrstr (filename, ".rig")) { + + /* only add TX capable rigs */ + vbuff = g_strsplit (filename, ".rig", 0); + if (is_rig_tx_capable (vbuff[0])) { + gtk_combo_box_append_text (GTK_COMBO_BOX (ctrl->DevSel2), vbuff[0]); + } + g_strfreev (vbuff); + } + } + } + else { + sat_log_log (SAT_LOG_LEVEL_ERROR, + _("%s:%d: Failed to open hwconf dir (%s)"), + __FILE__, __LINE__, error->message); + g_clear_error (&error); + } + + g_free (dirname); + g_dir_close (dir); + + //gtk_combo_box_set_active (GTK_COMBO_BOX (ctrl->DevSel), 0); g_signal_connect (ctrl->DevSel2, "changed", G_CALLBACK (secondary_rig_selected_cb), ctrl); gtk_table_attach_defaults (GTK_TABLE (table), ctrl->DevSel2, 1, 2, 1, 2); + - - /* Engage button */ ctrl->LockBut = gtk_toggle_button_new_with_label (_("Engage")); gtk_widget_set_tooltip_text (ctrl->LockBut, _("Engage the selcted radio device")); @@ -957,6 +983,8 @@ * * This function is called when the user selects a new rigor controller * device. + * + * BUG Doesn't prevent user to select same radio as in the secondary conf. */ static void primary_rig_selected_cb (GtkComboBox *box, gpointer data) @@ -996,8 +1024,6 @@ gtk_label_set_text (GTK_LABEL (ctrl->LoUp), buff); g_free (buff); } - - //gtk_spin_button_set_value (GTK_SPIN_BUTTON (ctrl->LO), ctrl->conf->lo/1.0e6); } else { sat_log_log (SAT_LOG_LEVEL_ERROR, @@ -1026,6 +1052,7 @@ { GtkRigCtrl *ctrl = GTK_RIG_CTRL (data); gchar *buff; + gchar *name1, *name2; /* free previous configuration */ @@ -1049,6 +1076,26 @@ return; } + /* ensure that selected secondary rig is not the same as the primary */ + name1 = gtk_combo_box_get_active_text (GTK_COMBO_BOX (ctrl->DevSel)); + name2 = gtk_combo_box_get_active_text (GTK_COMBO_BOX (ctrl->DevSel2)); + if (!g_strcmp0 (name1, name2)) { + /* selected conf is the same as the primary one */ + g_free (name1); + g_free (name2); + if (ctrl->conf != NULL) { + buff = g_strdup_printf (_("%.0f MHz"), ctrl->conf->loup/1.0e6); + gtk_label_set_text (GTK_LABEL (ctrl->LoUp), buff); + g_free (buff); + } + gtk_combo_box_set_active (GTK_COMBO_BOX (ctrl->DevSel2), 0); + + return; + } + + g_free (name1); + g_free (name2); + /* else load new device */ ctrl->conf2 = g_try_new (radio_conf_t, 1); if (ctrl->conf2 == NULL) { @@ -1065,14 +1112,9 @@ _("Loaded new radio configuration %s"), ctrl->conf2->name); /* update LO widgets */ - //buff = g_strdup_printf (_("%.0f MHz"), ctrl->conf2->lo/1.0e6); - //gtk_label_set_text (GTK_LABEL (ctrl->LoDown), buff); - //g_free (buff); buff = g_strdup_printf (_("%.0f MHz"), ctrl->conf2->loup/1.0e6); gtk_label_set_text (GTK_LABEL (ctrl->LoUp), buff); g_free (buff); - - //gtk_spin_button_set_value (GTK_SPIN_BUTTON (ctrl->LO), ctrl->conf->lo/1.0e6); } else { sat_log_log (SAT_LOG_LEVEL_ERROR, @@ -1085,7 +1127,6 @@ g_free (ctrl->conf2); ctrl->conf2 = NULL; } - } @@ -1395,8 +1436,9 @@ gboolean dialchanged = FALSE; /* get PTT status */ - if (ctrl->engaged && ctrl->conf->ptt) + if (ctrl->engaged && ctrl->conf->ptt) { ptt = get_ptt (ctrl, ctrl->conf); + } /* Dial feedback: If radio device is engaged read frequency from radio and compare it to the @@ -1545,12 +1587,225 @@ */ static void exec_dual_rig_cycle (GtkRigCtrl *ctrl) { - //FIXME implement + gdouble tmpfreq,readfreq,satfreqd,satfrequ,doppler; + gboolean dialchanged = FALSE; /* Execute downlink cycle using ctrl->conf */ + if (ctrl->engaged && (ctrl->lastrxf > 0.0)) { + + /* get frequency from receiver */ + if (!get_freq_simplex (ctrl, ctrl->conf, &readfreq)) { + /* error => use a passive value */ + readfreq = ctrl->lastrxf; + ctrl->errcnt++; + } + else { + readfreq = ctrl->lastrxf; + } + + if (fabs (readfreq - ctrl->lastrxf) >= 1.0) { + dialchanged = TRUE; + + /* user might have altered radio frequency => update transponder knob */ + gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->RigFreqDown), readfreq); + ctrl->lastrxf = readfreq; + + /* doppler shift; only if we are tracking */ + if (ctrl->tracking) { + satfreqd = (readfreq + ctrl->conf->lo) / + (1 - (ctrl->target->range_rate/299792.4580)); + } + else { + satfreqd = readfreq + ctrl->conf->lo; + } + gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->SatFreqDown), satfreqd); + + /* Update uplink if locked to downlink */ + if (ctrl->trsplock) { + track_downlink (ctrl); + } + } + } + if (dialchanged) { + /* update uplink */ + satfrequ = gtk_freq_knob_get_value (GTK_FREQ_KNOB (ctrl->SatFreqUp)); + if (ctrl->tracking) { + doppler = -satfrequ * (ctrl->target->range_rate / 299792.4580); + gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->RigFreqUp), + satfrequ + doppler - ctrl->conf2->loup); + } + else { + gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->RigFreqUp), + satfrequ - ctrl->conf2->loup); + } + + tmpfreq = gtk_freq_knob_get_value(GTK_FREQ_KNOB(ctrl->RigFreqUp)); + + /* if device is engaged, send freq command to radio */ + if ((ctrl->engaged) && (fabs(ctrl->lasttxf - tmpfreq) >= 1.0)) { + if (set_freq_simplex (ctrl, ctrl->conf2, tmpfreq)) { + /* reset error counter */ + ctrl->errcnt = 0; + + /* The actual frequency migh be different from what we have set */ + get_freq_simplex (ctrl, ctrl->conf2, &tmpfreq); + ctrl->lasttxf = tmpfreq; + } + else { + ctrl->errcnt++; + } + } + + } /* dialchanged on downlink */ + else { + /* if no dial change on downlink perform forward tracking on downlink + and execute uplink controller too. + */ - /* Execute uplink cycle using ctrl->conf2 */ + satfreqd = gtk_freq_knob_get_value (GTK_FREQ_KNOB (ctrl->SatFreqDown)); + if (ctrl->tracking) { + /* downlink */ + doppler = -satfreqd * (ctrl->target->range_rate / 299792.4580); + gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->RigFreqDown), + satfreqd + doppler - ctrl->conf->lo); + } + else { + gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->RigFreqDown), + satfreqd - ctrl->conf->lo); + } + + tmpfreq = gtk_freq_knob_get_value(GTK_FREQ_KNOB(ctrl->RigFreqDown)); + + /* if device is engaged, send freq command to radio */ + if ((ctrl->engaged) && (fabs(ctrl->lastrxf - tmpfreq) >= 1.0)) { + if (set_freq_simplex (ctrl, ctrl->conf, tmpfreq)) { + /* reset error counter */ + ctrl->errcnt = 0; + + /* The actual frequency migh be different from what we have set */ + get_freq_simplex (ctrl, ctrl->conf, &tmpfreq); + ctrl->lastrxf = tmpfreq; + } + else { + ctrl->errcnt++; + } + } + + /*** Now execute uplink controller ***/ + + /* check if uplink dial has changed */ + if ((ctrl->engaged) && (ctrl->lasttxf > 0.0)) { + + if (!get_freq_simplex (ctrl, ctrl->conf2, &readfreq)) { + /* error => use a passive value */ + readfreq = ctrl->lasttxf; + ctrl->errcnt++; + } + + else { + readfreq = ctrl->lasttxf; + } + + if (fabs (readfreq - ctrl->lasttxf) >= 1.0) { + dialchanged = TRUE; + + gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->RigFreqUp), readfreq); + ctrl->lasttxf = readfreq; + + /* doppler shift; only if we are tracking */ + if (ctrl->tracking) { + satfrequ = (readfreq + ctrl->conf2->loup) / + (1 - (ctrl->target->range_rate/299792.4580)); + } + else { + satfrequ = readfreq + ctrl->conf2->loup; + } + gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->SatFreqUp), satfrequ); + + /* Follow with downlink if transponder is locked */ + if (ctrl->trsplock) { + track_uplink (ctrl); + } + } + } + + if (dialchanged) { /* on uplink */ + /* update downlink */ + satfreqd = gtk_freq_knob_get_value (GTK_FREQ_KNOB (ctrl->SatFreqDown)); + if (ctrl->tracking) { + doppler = -satfreqd * (ctrl->target->range_rate / 299792.4580); + gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->RigFreqDown), + satfreqd + doppler - ctrl->conf->lo); + } + else { + gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->RigFreqDown), + satfreqd - ctrl->conf->lo); + } + + tmpfreq = gtk_freq_knob_get_value(GTK_FREQ_KNOB(ctrl->RigFreqDown)); + + /* if device is engaged, send freq command to radio */ + if ((ctrl->engaged) && (fabs(ctrl->lastrxf - tmpfreq) >= 1.0)) { + if (set_freq_simplex (ctrl, ctrl->conf, tmpfreq)) { + /* reset error counter */ + ctrl->errcnt = 0; + + /* The actual frequency migh be different from what we have set */ + get_freq_simplex (ctrl, ctrl->conf, &tmpfreq); + ctrl->lastrxf = tmpfreq; + } + else { + ctrl->errcnt++; + } + } + } /* dialchanged on uplink */ + else { + /* perform forward tracking on uplink */ + satfrequ = gtk_freq_knob_get_value (GTK_FREQ_KNOB (ctrl->SatFreqUp)); + if (ctrl->tracking) { + doppler = -satfrequ * (ctrl->target->range_rate / 299792.4580); + gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->RigFreqUp), + satfrequ + doppler - ctrl->conf2->loup); + } + else { + gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->RigFreqUp), + satfrequ - ctrl->conf2->loup); + } + + tmpfreq = gtk_freq_knob_get_value(GTK_FREQ_KNOB(ctrl->RigFreqUp)); + + /* if device is engaged, send freq command to radio */ + if ((ctrl->engaged) && (fabs(ctrl->lasttxf - tmpfreq) >= 1.0)) { + if (set_freq_simplex (ctrl, ctrl->conf2, tmpfreq)) { + /* reset error counter */ + ctrl->errcnt = 0; + + /* The actual frequency migh be different from what we have set. */ + get_freq_simplex (ctrl, ctrl->conf2, &tmpfreq); + ctrl->lasttxf = tmpfreq; + } + else { + ctrl->errcnt++; + } + } + } /* else dialchange on uplink */ + + } /* else dialchange on downlink */ + + /* perform error count checking */ + if (ctrl->errcnt >= MAX_ERROR_COUNT) { + /* disengage device */ + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ctrl->LockBut), FALSE); + ctrl->engaged = FALSE; + ctrl->errcnt = 0; + sat_log_log (SAT_LOG_LEVEL_ERROR, + _("%s: MAX_ERROR_COUNT (%d) reached. Disengaging device!"), + __FUNCTION__, MAX_ERROR_COUNT); + + //g_print ("ERROR. WROPS = %d\n", ctrl->wrops); + } + } @@ -2072,3 +2327,43 @@ gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->SatFreqDown), down); } } + + +/** \brief Check whether a radio configuration is TX capable. + * \param confname The name of the configuration to check. + * \return TRUE if the radio is TX capable, FALSE otherwise. + */ +static gboolean is_rig_tx_capable (const gchar *confname) +{ + radio_conf_t *conf = NULL; + gboolean cantx = FALSE; + + conf = g_try_new (radio_conf_t, 1); + if (conf == NULL) { + sat_log_log (SAT_LOG_LEVEL_ERROR, + _("%s:%d: Failed to allocate memory for radio config"), + __FILE__, __LINE__); + return FALSE; + } + + /* load new configuration */ + conf->name = g_strdup (confname); + if (radio_conf_read (conf)) { + cantx = (conf->type == RIG_TYPE_RX) ? FALSE : TRUE; + } + else { + sat_log_log (SAT_LOG_LEVEL_ERROR, + _("%s:%d: Error reading radio configuration %s"), + __FILE__, __LINE__, confname); + + + cantx = FALSE; + } + + g_free (conf->name); + if (conf->host) + g_free (conf->host); + g_free (conf); + + return cantx; +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cs...@us...> - 2009-04-12 11:10:04
|
Revision: 243 http://gpredict.svn.sourceforge.net/gpredict/?rev=243&view=rev Author: csete Date: 2009-04-12 11:09:59 +0000 (Sun, 12 Apr 2009) Log Message: ----------- Some debug mesage improvments. Modified Paths: -------------- trunk/src/gtk-rig-ctrl.c Modified: trunk/src/gtk-rig-ctrl.c =================================================================== --- trunk/src/gtk-rig-ctrl.c 2009-04-12 10:52:19 UTC (rev 242) +++ trunk/src/gtk-rig-ctrl.c 2009-04-12 11:09:59 UTC (rev 243) @@ -634,7 +634,9 @@ gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 0, 1); ctrl->DevSel = gtk_combo_box_new_text (); - gtk_widget_set_tooltip_text (ctrl->DevSel, _("Select primary radio device.")); + gtk_widget_set_tooltip_text (ctrl->DevSel, _("Select primary radio device."\ + "This device will be used for downlink and uplink "\ + "unless you select a secondary device for uplink")); /* open configuration directory */ cfgdir = get_conf_dir (); @@ -675,9 +677,8 @@ gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 1, 2); ctrl->DevSel2 = gtk_combo_box_new_text (); - gtk_widget_set_tooltip_text (ctrl->DevSel2, _("Select secondary radio device, if you want "\ - "to use a transmitter other than the primary "\ - "device.")); + gtk_widget_set_tooltip_text (ctrl->DevSel2, _("Select secondary radio device\n"\ + "This device will be used for uplink")); /* load config */ gtk_combo_box_append_text (GTK_COMBO_BOX (ctrl->DevSel2), _("None")); @@ -993,6 +994,11 @@ gchar *buff; + sat_log_log (SAT_LOG_LEVEL_DEBUG, + _("%s:%s: Primary device selected: %d"), + __FILE__, __FUNCTION__, gtk_combo_box_get_active (box)); + + /* free previous configuration */ if (ctrl->conf != NULL) { g_free (ctrl->conf->name); @@ -1012,8 +1018,8 @@ ctrl->conf->name = gtk_combo_box_get_active_text (box); if (radio_conf_read (ctrl->conf)) { sat_log_log (SAT_LOG_LEVEL_MSG, - _("Loaded new radio configuration %s"), - ctrl->conf->name); + _("%s:%s: Loaded new radio configuration %s"), + __FILE__, __FUNCTION__, ctrl->conf->name); /* update LO widgets */ buff = g_strdup_printf (_("%.0f MHz"), ctrl->conf->lo/1.0e6); gtk_label_set_text (GTK_LABEL (ctrl->LoDown), buff); @@ -1027,8 +1033,8 @@ } else { sat_log_log (SAT_LOG_LEVEL_ERROR, - _("%s:%d: Failed to load radio configuration %s"), - __FILE__, __LINE__, ctrl->conf->name); + _("%s:%s: Failed to load radio configuration %s"), + __FILE__, __FUNCTION__, ctrl->conf->name); g_free (ctrl->conf->name); if (ctrl->conf->host) @@ -1055,6 +1061,10 @@ gchar *name1, *name2; + sat_log_log (SAT_LOG_LEVEL_DEBUG, + _("%s:%s: Secondary device selected: %d"), + __FILE__, __FUNCTION__, gtk_combo_box_get_active (box)); + /* free previous configuration */ if (ctrl->conf2 != NULL) { g_free (ctrl->conf2->name); @@ -1100,8 +1110,8 @@ ctrl->conf2 = g_try_new (radio_conf_t, 1); if (ctrl->conf2 == NULL) { sat_log_log (SAT_LOG_LEVEL_ERROR, - _("%s:%d: Failed to allocate memory for radio config"), - __FILE__, __LINE__); + _("%s:%s: Failed to allocate memory for radio config"), + __FILE__, __FUNCTION__); return; } @@ -1109,8 +1119,8 @@ ctrl->conf2->name = gtk_combo_box_get_active_text (box); if (radio_conf_read (ctrl->conf2)) { sat_log_log (SAT_LOG_LEVEL_MSG, - _("Loaded new radio configuration %s"), - ctrl->conf2->name); + _("%s:%s: Loaded new radio configuration %s"), + __FILE__, __FUNCTION__, ctrl->conf2->name); /* update LO widgets */ buff = g_strdup_printf (_("%.0f MHz"), ctrl->conf2->loup/1.0e6); gtk_label_set_text (GTK_LABEL (ctrl->LoUp), buff); @@ -1118,8 +1128,8 @@ } else { sat_log_log (SAT_LOG_LEVEL_ERROR, - _("%s:%d: Failed to load radio configuration %s"), - __FILE__, __LINE__, ctrl->conf->name); + _("%s:%s: Failed to load radio configuration %s"), + __FILE__, __FUNCTION__, ctrl->conf->name); g_free (ctrl->conf2->name); if (ctrl->conf2->host) @@ -2210,12 +2220,20 @@ /* append transponder names to combo box */ n = g_slist_length (ctrl->trsplist); + sat_log_log (SAT_LOG_LEVEL_DEBUG, + _("%s:%s: Satellite %d has %d transponder modes."), + __FILE__, __FUNCTION__, ctrl->target->tle.catnr, n); + if (n == 0) return; for (i = 0; i < n; i++) { trsp = (trsp_t *) g_slist_nth_data (ctrl->trsplist, i); gtk_combo_box_append_text (GTK_COMBO_BOX (ctrl->TrspSel), trsp->name); + + sat_log_log (SAT_LOG_LEVEL_DEBUG, + _("%s:&s: Read transponder '%s' for satellite %d"), + __FILE__, __FUNCTION__, trsp->name, ctrl->target->tle.catnr); } /* make an initial selection */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cs...@us...> - 2009-04-12 12:19:52
|
Revision: 244 http://gpredict.svn.sourceforge.net/gpredict/?rev=244&view=rev Author: csete Date: 2009-04-12 12:19:45 +0000 (Sun, 12 Apr 2009) Log Message: ----------- Fixed bug that prevented dial feedback in dual-rig mode. This mode now works perfectly. Modified Paths: -------------- trunk/src/gtk-rig-ctrl.c Modified: trunk/src/gtk-rig-ctrl.c =================================================================== --- trunk/src/gtk-rig-ctrl.c 2009-04-12 11:09:59 UTC (rev 243) +++ trunk/src/gtk-rig-ctrl.c 2009-04-12 12:19:45 UTC (rev 244) @@ -793,9 +793,7 @@ sat_selected_cb (GtkComboBox *satsel, gpointer data) { GtkRigCtrl *ctrl = GTK_RIG_CTRL (data); - GSList *trsplist = NULL; - trsp_t *trsp; - gint i,n; + gint i; i = gtk_combo_box_get_active (satsel); if (i >= 0) { @@ -808,25 +806,6 @@ /* read transponders for new target */ load_trsp_list (ctrl); - -#if 0 - /* get transponders */ - trsplist = read_transponders (ctrl->target->tle.catnr); - - n = g_slist_length (trsplist); - //g_print ("*** %d\n", n); - for (i = 0; i < n; i++) { - trsp = (trsp_t *) g_slist_nth_data (trsplist, i); - g_print ("%s: %.0f/%.0f/%.0f/%.0f/%s\n", - trsp->name, - trsp->uplow, trsp->uphigh, - trsp->downlow, trsp->downhigh, - trsp->invert ? "INV" : "NONINV"); - - } - - free_transponders (trsplist); -#endif } else { sat_log_log (SAT_LOG_LEVEL_ERROR, @@ -1609,9 +1588,6 @@ readfreq = ctrl->lastrxf; ctrl->errcnt++; } - else { - readfreq = ctrl->lastrxf; - } if (fabs (readfreq - ctrl->lastrxf) >= 1.0) { dialchanged = TRUE; @@ -1712,10 +1688,6 @@ readfreq = ctrl->lasttxf; ctrl->errcnt++; } - - else { - readfreq = ctrl->lasttxf; - } if (fabs (readfreq - ctrl->lasttxf) >= 1.0) { dialchanged = TRUE; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cs...@us...> - 2009-04-12 22:53:57
|
Revision: 259 http://gpredict.svn.sourceforge.net/gpredict/?rev=259&view=rev Author: csete Date: 2009-04-12 22:53:48 +0000 (Sun, 12 Apr 2009) Log Message: ----------- Implemented new PTT option. Modified Paths: -------------- trunk/src/gtk-rig-ctrl.c Modified: trunk/src/gtk-rig-ctrl.c =================================================================== --- trunk/src/gtk-rig-ctrl.c 2009-04-12 22:53:19 UTC (rev 258) +++ trunk/src/gtk-rig-ctrl.c 2009-04-12 22:53:48 UTC (rev 259) @@ -1547,9 +1547,11 @@ { if (ctrl->engaged) { if (get_ptt (ctrl, ctrl->conf) == TRUE) { + g_print ("TX CYCLE\n"); exec_tx_cycle (ctrl); } else { + g_print ("RX CYCLE\n"); exec_rx_cycle (ctrl); } } @@ -1840,10 +1842,17 @@ __FILE__, __LINE__, conf->host, conf->port); } - /* send command (get_ptt: t) */ - buff = g_strdup_printf ("t"); + if (conf->ptt == PTT_TYPE_CAT) { + /* send command get_ptt (t) */ + buff = g_strdup_printf ("t"); + size = 1; + } + else { + /* send command \get_dcd */ + buff = g_strdup_printf ("%c",0x8b); + size = 1; + } - size = 1; written = send(sock, buff, size, 0); if (written != size) { sat_log_log (SAT_LOG_LEVEL_ERROR, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cs...@us...> - 2009-04-12 23:06:10
|
Revision: 261 http://gpredict.svn.sourceforge.net/gpredict/?rev=261&view=rev Author: csete Date: 2009-04-12 23:05:56 +0000 (Sun, 12 Apr 2009) Log Message: ----------- Removed reminiscent debug code. Modified Paths: -------------- trunk/src/gtk-rig-ctrl.c Modified: trunk/src/gtk-rig-ctrl.c =================================================================== --- trunk/src/gtk-rig-ctrl.c 2009-04-12 22:54:11 UTC (rev 260) +++ trunk/src/gtk-rig-ctrl.c 2009-04-12 23:05:56 UTC (rev 261) @@ -1547,11 +1547,9 @@ { if (ctrl->engaged) { if (get_ptt (ctrl, ctrl->conf) == TRUE) { - g_print ("TX CYCLE\n"); exec_tx_cycle (ctrl); } else { - g_print ("RX CYCLE\n"); exec_rx_cycle (ctrl); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cs...@us...> - 2009-05-09 14:57:39
|
Revision: 287 http://gpredict.svn.sourceforge.net/gpredict/?rev=287&view=rev Author: csete Date: 2009-05-09 14:57:34 +0000 (Sat, 09 May 2009) Log Message: ----------- Moved error count checking up to cycle controller. Modified Paths: -------------- trunk/src/gtk-rig-ctrl.c Modified: trunk/src/gtk-rig-ctrl.c =================================================================== --- trunk/src/gtk-rig-ctrl.c 2009-05-01 23:10:40 UTC (rev 286) +++ trunk/src/gtk-rig-ctrl.c 2009-05-09 14:57:34 UTC (rev 287) @@ -1278,6 +1278,19 @@ } } + + /* perform error count checking */ + if (ctrl->errcnt >= MAX_ERROR_COUNT) { + /* disengage device */ + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ctrl->LockBut), FALSE); + ctrl->engaged = FALSE; + ctrl->errcnt = 0; + sat_log_log (SAT_LOG_LEVEL_ERROR, + _("%s: MAX_ERROR_COUNT (%d) reached. Disengaging device!"), + __FUNCTION__, MAX_ERROR_COUNT); + + //g_print ("ERROR. WROPS = %d\n", ctrl->wrops); + } //g_print (" WROPS = %d\n", ctrl->wrops); @@ -1397,17 +1410,6 @@ } } - if (ctrl->errcnt >= MAX_ERROR_COUNT) { - /* disengage device */ - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ctrl->LockBut), FALSE); - ctrl->engaged = FALSE; - ctrl->errcnt = 0; - sat_log_log (SAT_LOG_LEVEL_ERROR, - _("%s: MAX_ERROR_COUNT (%d) reached. Disengaging device!"), - __FUNCTION__, MAX_ERROR_COUNT); - - //g_print ("ERROR. WROPS = %d\n", ctrl->wrops); - } } @@ -1521,18 +1523,6 @@ } } - if (ctrl->errcnt >= MAX_ERROR_COUNT) { - /* disengage device */ - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ctrl->LockBut), FALSE); - ctrl->engaged = FALSE; - ctrl->errcnt = 0; - sat_log_log (SAT_LOG_LEVEL_ERROR, - _("%s: MAX_ERROR_COUNT (%d) reached. Disengaging device!"), - __FUNCTION__, MAX_ERROR_COUNT); - - //g_print ("ERROR. WROPS = %d\n", ctrl->wrops); - } - } @@ -1774,18 +1764,6 @@ } /* else dialchange on downlink */ - /* perform error count checking */ - if (ctrl->errcnt >= MAX_ERROR_COUNT) { - /* disengage device */ - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ctrl->LockBut), FALSE); - ctrl->engaged = FALSE; - ctrl->errcnt = 0; - sat_log_log (SAT_LOG_LEVEL_ERROR, - _("%s: MAX_ERROR_COUNT (%d) reached. Disengaging device!"), - __FUNCTION__, MAX_ERROR_COUNT); - - //g_print ("ERROR. WROPS = %d\n", ctrl->wrops); - } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cs...@us...> - 2009-05-09 23:54:07
|
Revision: 289 http://gpredict.svn.sourceforge.net/gpredict/?rev=289&view=rev Author: csete Date: 2009-05-09 23:54:06 +0000 (Sat, 09 May 2009) Log Message: ----------- First cut at full-duplex controller. Modified Paths: -------------- trunk/src/gtk-rig-ctrl.c Modified: trunk/src/gtk-rig-ctrl.c =================================================================== --- trunk/src/gtk-rig-ctrl.c 2009-05-09 23:53:19 UTC (rev 288) +++ trunk/src/gtk-rig-ctrl.c 2009-05-09 23:54:06 UTC (rev 289) @@ -102,6 +102,7 @@ static gboolean set_freq_simplex (GtkRigCtrl *ctrl, radio_conf_t *conf, gdouble freq); static gboolean get_freq_simplex (GtkRigCtrl *ctrl, radio_conf_t *conf, gdouble *freq); static gboolean get_ptt (GtkRigCtrl *ctrl, radio_conf_t *conf); +static gboolean set_vfo (GtkRigCtrl *ctrl, vfo_t vfo); static void update_count_down (GtkRigCtrl *ctrl, gdouble t); /* misc utility functions */ @@ -1553,8 +1554,16 @@ */ static void exec_duplex_cycle (GtkRigCtrl *ctrl) { - //FIXME implement - exec_trx_cycle (ctrl); + if (ctrl->engaged) { + + /* Downlink */ + set_vfo (ctrl, ctrl->conf->vfoDown); + exec_rx_cycle (ctrl); + + /* Uplink */ + set_vfo (ctrl, ctrl->conf->vfoUp); + exec_tx_cycle (ctrl); + } } /** \brief Execute dual-rig cycle. @@ -2057,7 +2066,104 @@ return TRUE; } +/** \brief Select target VFO + * \param ctrl Pointer to the GtkRigCtrl structure. + * \param vfo The VFO to select + * \return TRUE if the operation was successful, FALSE if a connection error + * occurred. + * + */ +static gboolean set_vfo (GtkRigCtrl *ctrl, vfo_t vfo) +{ + gchar *buff; + gint written,size; + gint status; + struct hostent *h; + struct sockaddr_in ServAddr; + gint sock; /*!< Network socket */ + + /* create socket */ + sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); + if (sock < 0) { + sat_log_log (SAT_LOG_LEVEL_ERROR, + _("%s: Failed to create socket"), + __FUNCTION__); + return FALSE; + } + else { + sat_log_log (SAT_LOG_LEVEL_DEBUG, + _("%s: Network socket created successfully"), + __FUNCTION__); + } + + memset(&ServAddr, 0, sizeof(ServAddr)); /* Zero out structure */ + ServAddr.sin_family = AF_INET; /* Internet address family */ + h = gethostbyname(ctrl->conf->host); + memcpy((char *) &ServAddr.sin_addr.s_addr, h->h_addr_list[0], h->h_length); + ServAddr.sin_port = htons(ctrl->conf->port); /* Server port */ + /* establish connection */ + status = connect(sock, (struct sockaddr *) &ServAddr, sizeof(ServAddr)); + if (status < 0) { + sat_log_log (SAT_LOG_LEVEL_ERROR, + _("%s: Failed to connect to %s:%d"), + __FUNCTION__, ctrl->conf->host, ctrl->conf->port); + return FALSE; + } + else { + sat_log_log (SAT_LOG_LEVEL_DEBUG, + _("%s: Connection opened to %s:%d"), + __FUNCTION__, ctrl->conf->host, ctrl->conf->port); + } + + /* prepare command */ + switch (vfo) { + case VFO_A: + buff = g_strdup_printf ("V VFOA"); + size = 6; + break; + + case VFO_B: + buff = g_strdup_printf ("V VFOB"); + size = 6; + break; + + case VFO_MAIN: + buff = g_strdup_printf ("V Main"); + size = 6; + break; + + case VFO_SUB: + buff = g_strdup_printf ("V Sub"); + size = 5; + break; + + default: + sat_log_log (SAT_LOG_LEVEL_BUG, + _("%s: Invalid VFO argument. Using VFOA."), + __FUNCTION__); + buff = g_strdup_printf ("V VFOA"); + size = 6; + break; + } + + /* send command */ + written = send(sock, buff, size, 0); + if (written != size) { + sat_log_log (SAT_LOG_LEVEL_ERROR, + _("%s: SIZE ERROR %d / %d"), + __FUNCTION__, written, size); + } + g_free (buff); + shutdown (sock, SHUT_RDWR); + close (sock); + + ctrl->wrops++; + + return TRUE; +} + + /** \brief Update count down label. * \param[in] ctrl Pointer to the RigCtrl widget. * \param[in] t The current time. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cs...@us...> - 2009-05-10 13:16:48
|
Revision: 293 http://gpredict.svn.sourceforge.net/gpredict/?rev=293&view=rev Author: csete Date: 2009-05-10 13:16:46 +0000 (Sun, 10 May 2009) Log Message: ----------- Correctly initialise full-duplex controller when radio is engaged. Modified Paths: -------------- trunk/src/gtk-rig-ctrl.c Modified: trunk/src/gtk-rig-ctrl.c =================================================================== --- trunk/src/gtk-rig-ctrl.c 2009-05-10 11:17:17 UTC (rev 292) +++ trunk/src/gtk-rig-ctrl.c 2009-05-10 13:16:46 UTC (rev 293) @@ -1165,16 +1165,18 @@ } else { switch (ctrl->conf->type) { + case RIG_TYPE_RX: ctrl->lastrxf = gtk_freq_knob_get_value (GTK_FREQ_KNOB(ctrl->RigFreqDown)); set_freq_simplex (ctrl, ctrl->conf, ctrl->lastrxf); break; + case RIG_TYPE_TX: ctrl->lasttxf = gtk_freq_knob_get_value (GTK_FREQ_KNOB(ctrl->RigFreqUp)); set_freq_simplex (ctrl, ctrl->conf, ctrl->lasttxf); break; + case RIG_TYPE_TRX: - case RIG_TYPE_DUPLEX: if (get_ptt (ctrl, ctrl->conf)) { ctrl->lasttxf = gtk_freq_knob_get_value (GTK_FREQ_KNOB(ctrl->RigFreqUp)); set_freq_simplex (ctrl, ctrl->conf, ctrl->lasttxf); @@ -1184,6 +1186,15 @@ set_freq_simplex (ctrl, ctrl->conf, ctrl->lastrxf); } break; + + case RIG_TYPE_DUPLEX: + ctrl->lastrxf = gtk_freq_knob_get_value (GTK_FREQ_KNOB(ctrl->RigFreqDown)); + set_vfo (ctrl, ctrl->conf->vfoDown); + set_freq_simplex (ctrl, ctrl->conf, ctrl->lastrxf); + ctrl->lasttxf = gtk_freq_knob_get_value (GTK_FREQ_KNOB(ctrl->RigFreqUp)); + set_vfo (ctrl, ctrl->conf->vfoUp); + set_freq_simplex (ctrl, ctrl->conf, ctrl->lasttxf); + default: /* this is an error! */ ctrl->conf->type = RIG_TYPE_RX; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cs...@us...> - 2009-05-24 11:12:16
|
Revision: 327 http://gpredict.svn.sourceforge.net/gpredict/?rev=327&view=rev Author: csete Date: 2009-05-24 11:12:05 +0000 (Sun, 24 May 2009) Log Message: ----------- Added delay betwee set_freq() and get_freq() calls. Modified Paths: -------------- trunk/src/gtk-rig-ctrl.c Modified: trunk/src/gtk-rig-ctrl.c =================================================================== --- trunk/src/gtk-rig-ctrl.c 2009-05-24 09:20:09 UTC (rev 326) +++ trunk/src/gtk-rig-ctrl.c 2009-05-24 11:12:05 UTC (rev 327) @@ -65,6 +65,7 @@ #define AZEL_FMTSTR "%7.2f\302\260" #define MAX_ERROR_COUNT 5 +#define WR_DEL 5000 /* delay in usec to wait between write and read commands */ static void gtk_rig_ctrl_class_init (GtkRigCtrlClass *class); @@ -270,15 +271,15 @@ gtk_table_set_col_spacings (GTK_TABLE (table), 5); gtk_container_set_border_width (GTK_CONTAINER (table), 10); gtk_table_attach (GTK_TABLE (table), create_downlink_widgets (GTK_RIG_CTRL (widget)), - 0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 0); + 0, 1, 0, 1, GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND, 0, 0); gtk_table_attach (GTK_TABLE (table), create_uplink_widgets (GTK_RIG_CTRL (widget)), - 1, 2, 0, 1, GTK_FILL, GTK_FILL, 0, 0); + 1, 2, 0, 1, GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND, 0, 0); gtk_table_attach (GTK_TABLE (table), create_target_widgets (GTK_RIG_CTRL (widget)), - 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0); + 0, 1, 1, 2, GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND, 0, 0); gtk_table_attach (GTK_TABLE (table), create_conf_widgets (GTK_RIG_CTRL (widget)), - 1, 2, 1, 2, GTK_FILL, GTK_FILL, 0, 0); + 1, 2, 1, 2, GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND, 0, 0); gtk_table_attach (GTK_TABLE (table), create_count_down_widgets (GTK_RIG_CTRL (widget)), - 0, 2, 2, 3, GTK_FILL, GTK_FILL, 0, 0); + 0, 2, 2, 3, GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND, 0, 0); gtk_container_add (GTK_CONTAINER (widget), table); @@ -300,7 +301,7 @@ void gtk_rig_ctrl_update (GtkRigCtrl *ctrl, gdouble t) { - gdouble satfreq, doppler; + gdouble satfreq; gchar *buff; if (ctrl->target) { @@ -1332,7 +1333,7 @@ */ static void exec_rx_cycle (GtkRigCtrl *ctrl) { - gdouble readfreq=0.0, tmpfreq, satfreqd, satfrequ, doppler; + gdouble readfreq=0.0, tmpfreq, satfreqd, satfrequ; gboolean ptt = FALSE; gboolean dialchanged = FALSE; @@ -1361,7 +1362,7 @@ else { readfreq = ctrl->lastrxf; } - + if (fabs (readfreq - ctrl->lastrxf) >= 1.0) { dialchanged = TRUE; @@ -1371,8 +1372,6 @@ /* doppler shift; only if we are tracking */ if (ctrl->tracking) { - /*satfreqd = (readfreq + ctrl->conf->lo) / - (1.0 - (ctrl->target->range_rate/299792.4580));*/ satfreqd = (readfreq - ctrl->dd + ctrl->conf->lo); } @@ -1401,13 +1400,9 @@ satfrequ = gtk_freq_knob_get_value (GTK_FREQ_KNOB (ctrl->SatFreqUp)); if (ctrl->tracking) { /* downlink */ - /*doppler = -satfreqd * (ctrl->target->range_rate / 299792.4580); - g_print ("Doppler D:%.0f:%.0f ",doppler,ctrl->dd); */ gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->RigFreqDown), satfreqd + ctrl->dd - ctrl->conf->lo); /* uplink */ - /*doppler = -satfrequ * (ctrl->target->range_rate / 299792.4580); - g_print ("U:%.0f:%.0f\n",doppler,ctrl->du); */ gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->RigFreqUp), satfrequ + ctrl->du - ctrl->conf->loup); } @@ -1420,12 +1415,16 @@ tmpfreq = gtk_freq_knob_get_value(GTK_FREQ_KNOB(ctrl->RigFreqDown)); + /* if device is engaged, send freq command to radio */ if ((ctrl->engaged) && (ptt == FALSE) && (fabs(ctrl->lastrxf - tmpfreq) >= 1.0)) { if (set_freq_simplex (ctrl, ctrl->conf, tmpfreq)) { /* reset error counter */ ctrl->errcnt = 0; + /* give radio a chance to set frequency */ + g_usleep (WR_DEL); + /* The actual frequency might be different from what we have set because the tuning step is larger than what we work with (e.g. FT-817 has a smallest tuning step of 10 Hz). Therefore we read back the actual @@ -1449,7 +1448,7 @@ */ static void exec_tx_cycle (GtkRigCtrl *ctrl) { - gdouble readfreq=0.0, tmpfreq, satfreqd, satfrequ, doppler; + gdouble readfreq=0.0, tmpfreq, satfreqd, satfrequ; gboolean ptt = TRUE; gboolean dialchanged = FALSE; @@ -1489,8 +1488,6 @@ /* doppler shift; only if we are tracking */ if (ctrl->tracking) { satfrequ = readfreq - ctrl->du + ctrl->conf->loup; - /*satfrequ = (readfreq + ctrl->conf->loup) / - (1.0 - (ctrl->target->range_rate/299792.4580));*/ } else { satfrequ = readfreq + ctrl->conf->loup; @@ -1517,11 +1514,9 @@ satfrequ = gtk_freq_knob_get_value (GTK_FREQ_KNOB (ctrl->SatFreqUp)); if (ctrl->tracking) { /* downlink */ - /*doppler = -satfreqd * (ctrl->target->range_rate / 299792.4580);*/ gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->RigFreqDown), satfreqd + ctrl->dd - ctrl->conf->lo); /* uplink */ - /*doppler = -satfrequ * (ctrl->target->range_rate / 299792.4580);*/ gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->RigFreqUp), satfrequ + ctrl->du - ctrl->conf->loup); } @@ -1540,6 +1535,9 @@ /* reset error counter */ ctrl->errcnt = 0; + /* give radio a chance to set frequency */ + g_usleep (WR_DEL); + /* The actual frequency migh be different from what we have set because the tuning step is larger than what we work with (e.g. FT-817 has a smallest tuning step of 10 Hz). Therefore we read back the actual @@ -1564,16 +1562,6 @@ */ static void exec_trx_cycle (GtkRigCtrl *ctrl) { - /* - if (ctrl->engaged) { - if (get_ptt (ctrl, ctrl->conf) == TRUE) { - exec_tx_cycle (ctrl); - } - else { - exec_rx_cycle (ctrl); - } - }*/ - exec_rx_cycle (ctrl); exec_tx_cycle (ctrl); } @@ -1612,7 +1600,7 @@ */ static void exec_dual_rig_cycle (GtkRigCtrl *ctrl) { - gdouble tmpfreq,readfreq,satfreqd,satfrequ,doppler; + gdouble tmpfreq,readfreq,satfreqd,satfrequ; gboolean dialchanged = FALSE; /* Execute downlink cycle using ctrl->conf */ @@ -1635,8 +1623,6 @@ /* doppler shift; only if we are tracking */ if (ctrl->tracking) { satfreqd = readfreq - ctrl->dd + ctrl->conf->lo; - /*satfreqd = (readfreq + ctrl->conf->lo) / - (1.0 - (ctrl->target->range_rate/299792.4580));*/ } else { satfreqd = readfreq + ctrl->conf->lo; @@ -1654,7 +1640,6 @@ /* update uplink */ satfrequ = gtk_freq_knob_get_value (GTK_FREQ_KNOB (ctrl->SatFreqUp)); if (ctrl->tracking) { - /*doppler = -satfrequ * (ctrl->target->range_rate / 299792.4580);*/ gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->RigFreqUp), satfrequ + ctrl->du - ctrl->conf2->loup); } @@ -1671,6 +1656,9 @@ /* reset error counter */ ctrl->errcnt = 0; + /* give radio a chance to set frequency */ + g_usleep (WR_DEL); + /* The actual frequency migh be different from what we have set */ get_freq_simplex (ctrl, ctrl->conf2, &tmpfreq); ctrl->lasttxf = tmpfreq; @@ -1689,7 +1677,6 @@ satfreqd = gtk_freq_knob_get_value (GTK_FREQ_KNOB (ctrl->SatFreqDown)); if (ctrl->tracking) { /* downlink */ - /*doppler = -satfreqd * (ctrl->target->range_rate / 299792.4580);*/ gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->RigFreqDown), satfreqd + ctrl->dd - ctrl->conf->lo); } @@ -1705,7 +1692,10 @@ if (set_freq_simplex (ctrl, ctrl->conf, tmpfreq)) { /* reset error counter */ ctrl->errcnt = 0; - + + /* give radio a chance to set frequency */ + g_usleep (WR_DEL); + /* The actual frequency migh be different from what we have set */ get_freq_simplex (ctrl, ctrl->conf, &tmpfreq); ctrl->lastrxf = tmpfreq; @@ -1735,8 +1725,6 @@ /* doppler shift; only if we are tracking */ if (ctrl->tracking) { satfrequ = readfreq - ctrl->du + ctrl->conf2->loup; - /*satfrequ = (readfreq + ctrl->conf2->loup) / - (1.0 - (ctrl->target->range_rate/299792.4580));*/ } else { satfrequ = readfreq + ctrl->conf2->loup; @@ -1754,7 +1742,6 @@ /* update downlink */ satfreqd = gtk_freq_knob_get_value (GTK_FREQ_KNOB (ctrl->SatFreqDown)); if (ctrl->tracking) { - /*doppler = -satfreqd * (ctrl->target->range_rate / 299792.4580);*/ gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->RigFreqDown), satfreqd + ctrl->dd - ctrl->conf->lo); } @@ -1771,6 +1758,9 @@ /* reset error counter */ ctrl->errcnt = 0; + /* give radio a chance to set frequency */ + g_usleep (WR_DEL); + /* The actual frequency migh be different from what we have set */ get_freq_simplex (ctrl, ctrl->conf, &tmpfreq); ctrl->lastrxf = tmpfreq; @@ -1784,7 +1774,6 @@ /* perform forward tracking on uplink */ satfrequ = gtk_freq_knob_get_value (GTK_FREQ_KNOB (ctrl->SatFreqUp)); if (ctrl->tracking) { - /*doppler = -satfrequ * (ctrl->target->range_rate / 299792.4580);*/ gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->RigFreqUp), satfrequ + ctrl->du - ctrl->conf2->loup); } @@ -1801,6 +1790,9 @@ /* reset error counter */ ctrl->errcnt = 0; + /* give radio a chance to set frequency */ + g_usleep (WR_DEL); + /* The actual frequency migh be different from what we have set. */ get_freq_simplex (ctrl, ctrl->conf2, &tmpfreq); ctrl->lasttxf = tmpfreq; @@ -2093,7 +2085,7 @@ buff[size] = 0; vbuff = g_strsplit (buff, "\n", 3); - *freq = g_strtod (vbuff[0], NULL); + *freq = g_ascii_strtod (vbuff[0], NULL); g_free (buff); g_strfreev (vbuff); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <cs...@us...> - 2009-10-13 19:46:07
|
Revision: 494 http://gpredict.svn.sourceforge.net/gpredict/?rev=494&view=rev Author: csete Date: 2009-10-13 19:45:46 +0000 (Tue, 13 Oct 2009) Log Message: ----------- Fixed bug 2877974: Incorrect uplink Doppler. Modified Paths: -------------- trunk/src/gtk-rig-ctrl.c Modified: trunk/src/gtk-rig-ctrl.c =================================================================== --- trunk/src/gtk-rig-ctrl.c 2009-10-13 18:29:03 UTC (rev 493) +++ trunk/src/gtk-rig-ctrl.c 2009-10-13 19:45:46 UTC (rev 494) @@ -345,7 +345,7 @@ /* Doppler shift up */ satfreq = gtk_freq_knob_get_value (GTK_FREQ_KNOB (ctrl->SatFreqUp)); - ctrl->du = -satfreq * (ctrl->target->range_rate / 299792.4580); // Hz + ctrl->du = satfreq * (ctrl->target->range_rate / 299792.4580); // Hz buff = g_strdup_printf ("%.0f Hz", ctrl->du); gtk_label_set_text (GTK_LABEL (ctrl->SatDopUp), buff); g_free (buff); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |