[Gpredict-svn] SF.net SVN: gpredict:[324] trunk
Real time satellite tracking and orbit prediction
Status: Beta
Brought to you by:
csete
|
From: <cs...@us...> - 2009-05-23 14:54:23
|
Revision: 324
http://gpredict.svn.sourceforge.net/gpredict/?rev=324&view=rev
Author: csete
Date: 2009-05-23 14:54:20 +0000 (Sat, 23 May 2009)
Log Message:
-----------
Fixed a bug that could result in incorrect Doppler shift in certain cases.
Modified Paths:
--------------
trunk/ChangeLog
trunk/NEWS
trunk/doc/um/gpredict-user-manual.odt
trunk/src/gtk-rig-ctrl.c
trunk/src/gtk-rig-ctrl.h
trunk/src/gtk-sat-data.c
trunk/src/gtk-sat-data.h
trunk/src/gtk-sat-module.c
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2009-05-23 10:52:05 UTC (rev 323)
+++ trunk/ChangeLog 2009-05-23 14:54:20 UTC (rev 324)
@@ -1,3 +1,19 @@
+2009-05-23 Alexandru Csete <oz...@gm...>
+
+ * src/gtk-rig-ctrl.c:
+ Fixed some bugs that caused the Doppler shift to be calculated incorrectly
+ in some cases.
+
+ * src/gtk-single-sat.c:
+ Improved tooltip texts.
+
+
+2009-05-21 Alexandru Csete <oz...@gm...>
+
+ * src/gtk-sat-data.[ch]:
+ Added function to copy satellite data from one sat_t structure to another.
+
+
2009-05-20 Alexandru Csete <oz...@gm...>
* src/data:
@@ -7,7 +23,8 @@
2009-05-13 Alexadnru Csete <oz...@gm...>
* src/gtk-rig-ctrl.c:
- Fixed bug that caused rig type to switch from DUPLEX -> RX after first cycle.
+ Fixed bug that caused rig type to switch from DUPLEX -> RX after first
+ cycle.
* src/sat-pass-dialogs.c:
Fixed bug 2691797: Potential array index out of range.
Modified: trunk/NEWS
===================================================================
--- trunk/NEWS 2009-05-23 10:52:05 UTC (rev 323)
+++ trunk/NEWS 2009-05-23 14:54:20 UTC (rev 324)
@@ -7,6 +7,8 @@
Changes in version 1.0 beta 5 (TBD)
- Added new transponder files received from David VK5DG.
+- Fixed some bugs that caused the Doppler shift to be calculated
+ incorrectly in some cases.
Changes in version 1.0 beta 4 (13 May 2009)
Modified: trunk/doc/um/gpredict-user-manual.odt
===================================================================
(Binary files differ)
Modified: trunk/src/gtk-rig-ctrl.c
===================================================================
--- trunk/src/gtk-rig-ctrl.c 2009-05-23 10:52:05 UTC (rev 323)
+++ trunk/src/gtk-rig-ctrl.c 2009-05-23 14:54:20 UTC (rev 324)
@@ -337,15 +337,15 @@
/* Doppler shift down */
satfreq = gtk_freq_knob_get_value (GTK_FREQ_KNOB (ctrl->SatFreqDown));
- doppler = -satfreq * (ctrl->target->range_rate / 299792.4580); // Hz
- buff = g_strdup_printf ("%.0f Hz", doppler);
+ ctrl->dd = -satfreq * (ctrl->target->range_rate / 299792.4580); // Hz
+ buff = g_strdup_printf ("%.0f Hz", ctrl->dd);
gtk_label_set_text (GTK_LABEL (ctrl->SatDopDown), buff);
g_free (buff);
/* Doppler shift up */
satfreq = gtk_freq_knob_get_value (GTK_FREQ_KNOB (ctrl->SatFreqUp));
- doppler = -satfreq * (ctrl->target->range_rate / 299792.4580); // Hz
- buff = g_strdup_printf ("%.0f Hz", doppler);
+ 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);
@@ -398,6 +398,9 @@
/* Downlink doppler */
label = gtk_label_new (_("Doppler:"));
+ gtk_widget_set_tooltip_text (label,
+ _("The Doppler shift according to the range rate and "\
+ "the currently selected downlink frequency"));
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
ctrl->SatDopDown = gtk_label_new ("---- Hz");
@@ -460,6 +463,9 @@
/* Uplink doppler */
label = gtk_label_new (_("Doppler:"));
+ gtk_widget_set_tooltip_text (label,
+ _("The Doppler shift according to the range rate and "\
+ "the currently selected downlink frequency"));
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0);
ctrl->SatDopUp = gtk_label_new ("---- Hz");
@@ -527,7 +533,9 @@
/* tracking button */
track = gtk_toggle_button_new_with_label (_("Track"));
- gtk_widget_set_tooltip_text (track, _("Track the satellite when it is within range"));
+ gtk_widget_set_tooltip_text (track, _("Track the satellite transponder.\n"\
+ "Enabling this button will apply Dopper correction "\
+ "to the frequency of the radio."));
gtk_table_attach_defaults (GTK_TABLE (table), track, 3, 4, 0, 1);
g_signal_connect (track, "toggled", G_CALLBACK (track_toggle_cb), ctrl);
@@ -591,7 +599,14 @@
ctrl->SatRng = gtk_label_new ("0 km");
gtk_misc_set_alignment (GTK_MISC (ctrl->SatRng), 0.0, 0.5);
gtk_table_attach_defaults (GTK_TABLE (table), ctrl->SatRng, 3, 4, 2, 3);
-
+
+ gtk_widget_set_tooltip_text (label,
+ _("This is the current distance between the satellite "\
+ "and the observer."));
+ gtk_widget_set_tooltip_text (ctrl->SatRng,
+ _("This is the current distance between the satellite "\
+ "and the observer."));
+
/* Range rate */
label = gtk_label_new (_(" Rate:"));
gtk_misc_set_alignment (GTK_MISC (label), 1.0, 0.5);
@@ -599,7 +614,14 @@
ctrl->SatRngRate = gtk_label_new ("0.0 km/s");
gtk_misc_set_alignment (GTK_MISC (ctrl->SatRngRate), 0.0, 0.5);
gtk_table_attach_defaults (GTK_TABLE (table), ctrl->SatRngRate, 3, 4, 3, 4);
-
+
+ gtk_widget_set_tooltip_text (label,
+ _("The rate of change for the distance between "
+ "the satellite and the observer."));
+ gtk_widget_set_tooltip_text (ctrl->SatRngRate,
+ _("The rate of change for the distance between "
+ "the satellite and the observer."));
+
frame = gtk_frame_new (_("Target"));
gtk_container_add (GTK_CONTAINER (frame), table);
@@ -762,6 +784,9 @@
gtk_misc_set_alignment (GTK_MISC (ctrl->SatCnt), 0.5, 0.5);
gtk_label_set_markup (GTK_LABEL (ctrl->SatCnt),
_("<span size='large'><b>\316\224T: 00:00:00</b></span>"));
+ gtk_widget_set_tooltip_text (ctrl->SatCnt,
+ _("The time remaining until the next AOS or LOS event, "\
+ "depending on which one comes first."));
frame = gtk_frame_new (NULL);
gtk_container_add (GTK_CONTAINER (frame), ctrl->SatCnt);
@@ -930,6 +955,10 @@
GtkRigCtrl *ctrl = GTK_RIG_CTRL (data);
ctrl->tracking = gtk_toggle_button_get_active (button);
+
+ /* invalidate sync with radio */
+ ctrl->lastrxf = 0.0;
+ ctrl->lasttxf = 0.0;
}
@@ -1158,49 +1187,31 @@
/* set initial frequency */
if (ctrl->conf2 != NULL) {
/* set initial dual mode */
- ctrl->lastrxf = gtk_freq_knob_get_value (GTK_FREQ_KNOB(ctrl->RigFreqDown));
- set_freq_simplex (ctrl, ctrl->conf, ctrl->lastrxf);
- ctrl->lasttxf = gtk_freq_knob_get_value (GTK_FREQ_KNOB(ctrl->RigFreqUp));
- set_freq_simplex (ctrl, ctrl->conf2, ctrl->lasttxf);
+ exec_dual_rig_cycle (ctrl);
}
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);
+ exec_rx_cycle (ctrl);
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);
+ exec_tx_cycle (ctrl);
break;
case RIG_TYPE_TRX:
- 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);
- }
- else {
- ctrl->lastrxf = gtk_freq_knob_get_value (GTK_FREQ_KNOB(ctrl->RigFreqDown));
- set_freq_simplex (ctrl, ctrl->conf, ctrl->lastrxf);
- }
+ exec_trx_cycle (ctrl);
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);
+ exec_duplex_cycle (ctrl);
break;
default:
/* this is an error! */
ctrl->conf->type = RIG_TYPE_RX;
- ctrl->lastrxf = gtk_freq_knob_get_value (GTK_FREQ_KNOB(ctrl->RigFreqDown));
- set_freq_simplex (ctrl, ctrl->conf, ctrl->lastrxf);
+ exec_rx_cycle (ctrl);
break;
}
}
@@ -1360,8 +1371,10 @@
/* doppler shift; only if we are tracking */
if (ctrl->tracking) {
- satfreqd = (readfreq + ctrl->conf->lo) /
- (1 - (ctrl->target->range_rate/299792.4580));
+ /*satfreqd = (readfreq + ctrl->conf->lo) /
+ (1.0 - (ctrl->target->range_rate/299792.4580));*/
+ satfreqd = (readfreq - ctrl->dd + ctrl->conf->lo);
+
}
else {
satfreqd = readfreq + ctrl->conf->lo;
@@ -1388,13 +1401,15 @@
satfrequ = gtk_freq_knob_get_value (GTK_FREQ_KNOB (ctrl->SatFreqUp));
if (ctrl->tracking) {
/* downlink */
- doppler = -satfreqd * (ctrl->target->range_rate / 299792.4580);
+ /*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 + doppler - ctrl->conf->lo);
+ satfreqd + ctrl->dd - ctrl->conf->lo);
/* uplink */
- doppler = -satfrequ * (ctrl->target->range_rate / 299792.4580);
+ /*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 + doppler - ctrl->conf->loup);
+ satfrequ + ctrl->du - ctrl->conf->loup);
}
else {
gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->RigFreqDown),
@@ -1411,7 +1426,7 @@
/* reset error counter */
ctrl->errcnt = 0;
- /* The actual frequency migh be different from what we have set because
+ /* 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
frequency from the rig. */
@@ -1473,8 +1488,9 @@
/* doppler shift; only if we are tracking */
if (ctrl->tracking) {
- satfrequ = (readfreq + ctrl->conf->loup) /
- (1 - (ctrl->target->range_rate/299792.4580));
+ 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;
@@ -1501,13 +1517,13 @@
satfrequ = gtk_freq_knob_get_value (GTK_FREQ_KNOB (ctrl->SatFreqUp));
if (ctrl->tracking) {
/* downlink */
- doppler = -satfreqd * (ctrl->target->range_rate / 299792.4580);
+ /*doppler = -satfreqd * (ctrl->target->range_rate / 299792.4580);*/
gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->RigFreqDown),
- satfreqd + doppler - ctrl->conf->lo);
+ satfreqd + ctrl->dd - ctrl->conf->lo);
/* uplink */
- doppler = -satfrequ * (ctrl->target->range_rate / 299792.4580);
+ /*doppler = -satfrequ * (ctrl->target->range_rate / 299792.4580);*/
gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->RigFreqUp),
- satfrequ + doppler - ctrl->conf->loup);
+ satfrequ + ctrl->du - ctrl->conf->loup);
}
else {
gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->RigFreqDown),
@@ -1548,6 +1564,7 @@
*/
static void exec_trx_cycle (GtkRigCtrl *ctrl)
{
+ /*
if (ctrl->engaged) {
if (get_ptt (ctrl, ctrl->conf) == TRUE) {
exec_tx_cycle (ctrl);
@@ -1555,7 +1572,10 @@
else {
exec_rx_cycle (ctrl);
}
- }
+ }*/
+
+ exec_rx_cycle (ctrl);
+ exec_tx_cycle (ctrl);
}
@@ -1576,6 +1596,12 @@
set_vfo (ctrl, ctrl->conf->vfoUp);
exec_tx_cycle (ctrl);
}
+ else {
+ /* still execute cycles to update UI widgets
+ no data will be sent to RIG */
+ exec_rx_cycle (ctrl);
+ exec_tx_cycle (ctrl);
+ }
}
/** \brief Execute dual-rig cycle.
@@ -1608,8 +1634,9 @@
/* doppler shift; only if we are tracking */
if (ctrl->tracking) {
- satfreqd = (readfreq + ctrl->conf->lo) /
- (1 - (ctrl->target->range_rate/299792.4580));
+ 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;
@@ -1627,9 +1654,9 @@
/* update uplink */
satfrequ = gtk_freq_knob_get_value (GTK_FREQ_KNOB (ctrl->SatFreqUp));
if (ctrl->tracking) {
- doppler = -satfrequ * (ctrl->target->range_rate / 299792.4580);
+ /*doppler = -satfrequ * (ctrl->target->range_rate / 299792.4580);*/
gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->RigFreqUp),
- satfrequ + doppler - ctrl->conf2->loup);
+ satfrequ + ctrl->du - ctrl->conf2->loup);
}
else {
gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->RigFreqUp),
@@ -1662,9 +1689,9 @@
satfreqd = gtk_freq_knob_get_value (GTK_FREQ_KNOB (ctrl->SatFreqDown));
if (ctrl->tracking) {
/* downlink */
- doppler = -satfreqd * (ctrl->target->range_rate / 299792.4580);
+ /*doppler = -satfreqd * (ctrl->target->range_rate / 299792.4580);*/
gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->RigFreqDown),
- satfreqd + doppler - ctrl->conf->lo);
+ satfreqd + ctrl->dd - ctrl->conf->lo);
}
else {
gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->RigFreqDown),
@@ -1707,8 +1734,9 @@
/* doppler shift; only if we are tracking */
if (ctrl->tracking) {
- satfrequ = (readfreq + ctrl->conf2->loup) /
- (1 - (ctrl->target->range_rate/299792.4580));
+ 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;
@@ -1726,9 +1754,9 @@
/* update downlink */
satfreqd = gtk_freq_knob_get_value (GTK_FREQ_KNOB (ctrl->SatFreqDown));
if (ctrl->tracking) {
- doppler = -satfreqd * (ctrl->target->range_rate / 299792.4580);
+ /*doppler = -satfreqd * (ctrl->target->range_rate / 299792.4580);*/
gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->RigFreqDown),
- satfreqd + doppler - ctrl->conf->lo);
+ satfreqd + ctrl->dd - ctrl->conf->lo);
}
else {
gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->RigFreqDown),
@@ -1756,9 +1784,9 @@
/* 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);
+ /*doppler = -satfrequ * (ctrl->target->range_rate / 299792.4580);*/
gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->RigFreqUp),
- satfrequ + doppler - ctrl->conf2->loup);
+ satfrequ + ctrl->du - ctrl->conf2->loup);
}
else {
gtk_freq_knob_set_value (GTK_FREQ_KNOB (ctrl->RigFreqUp),
Modified: trunk/src/gtk-rig-ctrl.h
===================================================================
--- trunk/src/gtk-rig-ctrl.h 2009-05-23 10:52:05 UTC (rev 323)
+++ trunk/src/gtk-rig-ctrl.h 2009-05-23 14:54:20 UTC (rev 324)
@@ -104,6 +104,7 @@
gdouble lastrxf; /*!< Last frequency sent to receiver. */
gdouble lasttxf; /*!< Last frequency sent to tranmitter. */
+ gdouble du,dd; /*!< Last computed up/down Doppler shift; computed in update() */
/* debug related */
guint wrops;
Modified: trunk/src/gtk-sat-data.c
===================================================================
--- trunk/src/gtk-sat-data.c 2009-05-23 10:52:05 UTC (rev 323)
+++ trunk/src/gtk-sat-data.c 2009-05-23 14:54:20 UTC (rev 324)
@@ -623,7 +623,7 @@
* function for initializing the other fields.
*
*/
-void gtk_sat_data_copy_sat (sat_t *source, sat_t *dest, qth_t *qth)
+void gtk_sat_data_copy_sat (const sat_t *source, sat_t *dest, qth_t *qth)
{
guint i;
@@ -655,5 +655,30 @@
dest->tle.xincl1 = source->tle.xincl1;
dest->tle.omegao1 = source->tle.omegao1;
+ dest->otype = source->otype;
+
+ /* very important */
+ dest->flags = 0;
+ select_ephemeris (dest);
+
+ /* initialise variable fields */
+ dest->jul_utc = 0.0;
+ dest->tsince = 0.0;
+ dest->az = 0.0;
+ dest->el = 0.0;
+ dest->range = 0.0;
+ dest->range_rate = 0.0;
+ dest->ra = 0.0;
+ dest->dec = 0.0;
+ dest->ssplat = 0.0;
+ dest->ssplon = 0.0;
+ dest->alt = 0.0;
+ dest->velo = 0.0;
+ dest->ma = 0.0;
+ dest->footprint = 0.0;
+ dest->phase = 0.0;
+ dest->aos = 0.0;
+ dest->los = 0.0;
+
gtk_sat_data_init_sat (dest, qth);
}
Modified: trunk/src/gtk-sat-data.h
===================================================================
--- trunk/src/gtk-sat-data.h 2009-05-23 10:52:05 UTC (rev 323)
+++ trunk/src/gtk-sat-data.h 2009-05-23 14:54:20 UTC (rev 324)
@@ -53,6 +53,6 @@
void gtk_sat_data_free_qth (qth_t *qth);
gint gtk_sat_data_read_sat (gint catnum, sat_t *sat);
void gtk_sat_data_init_sat (sat_t *sat, qth_t *qth);
-void gtk_sat_data_copy_sat (sat_t *source, sat_t *dest, qth_t *qth);
+void gtk_sat_data_copy_sat (const sat_t *source, sat_t *dest, qth_t *qth);
#endif
Modified: trunk/src/gtk-sat-module.c
===================================================================
--- trunk/src/gtk-sat-module.c 2009-05-23 10:52:05 UTC (rev 323)
+++ trunk/src/gtk-sat-module.c 2009-05-23 14:54:20 UTC (rev 324)
@@ -862,13 +862,18 @@
if (mod->child_3 != NULL)
update_child (mod->child_3, mod->tmgCdnum);
+ /* update satellite data (it may have got out of sync during child updates) */
+ g_hash_table_foreach (mod->satellites,
+ gtk_sat_module_update_sat,
+ module);
+
/* send notice to radio and rotator controller */
if (mod->rigctrl)
gtk_rig_ctrl_update (GTK_RIG_CTRL (mod->rigctrl), mod->tmgCdnum);
if (mod->rotctrl)
gtk_rot_ctrl_update (GTK_ROT_CTRL (mod->rotctrl), mod->tmgCdnum);
-
+
mod->event_count++;
/* store time keeping variables */
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|