/ src / predict-tools.h
predict-tools.h
  1  /*
  2      Gpredict: Real-time satellite tracking and orbit prediction program
  3  
  4      Copyright (C)  2001-2009  Alexandru Csete, OZ9AEC.
  5  
  6      Authors: Alexandru Csete <oz9aec@gmail.com>
  7      Charles Suprin <hamaa1vs@gmail.com>
  8  
  9      Comments, questions and bugreports should be submitted via
 10      http://sourceforge.net/projects/gpredict/
 11      More details can be found at the project home page:
 12  
 13              http://gpredict.oz9aec.net/
 14   
 15      This program is free software; you can redistribute it and/or modify
 16      it under the terms of the GNU General Public License as published by
 17      the Free Software Foundation; either version 2 of the License, or
 18      (at your option) any later version.
 19    
 20      This program is distributed in the hope that it will be useful,
 21      but WITHOUT ANY WARRANTY; without even the implied warranty of
 22      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 23      GNU General Public License for more details.
 24    
 25      You should have received a copy of the GNU General Public License
 26      along with this program; if not, visit http://www.fsf.org/
 27  */
 28  #ifndef PREDICT_TOOLS_H
 29  #define PREDICT_TOOLS_H 1
 30  
 31  #include <glib.h>
 32  #include "gtk-sat-data.h"
 33  #include "sat-vis.h"
 34  #include "sgpsdp/sgp4sdp4.h"
 35  
 36  
 37  /** \brief Brief satellite pass info. */
 38  typedef struct {
 39      gchar      *satname;  /*!< satellite name */
 40      gdouble     aos;      /*!< AOS time in "jul_utc" */
 41      gdouble     tca;      /*!< TCA time in "jul_utc" */
 42      gdouble     los;      /*!< LOS time in "jul_utc" */
 43      gdouble     max_el;   /*!< Maximum elevation during pass */
 44      gdouble     aos_az;   /*!< Azimuth at AOS */
 45      gdouble     los_az;   /*!< Azimuth at LOS */
 46      gint        orbit;    /*!< Orbit number */
 47      gdouble     maxel_az; /*!< Azimuth at maximum elevation */
 48      gchar       vis[4];   /*!< Visibility string, e.g. VSE, -S-, V-- */
 49      GSList     *details;  /*!< List of pass_detail_t entries */
 50      qth_small_t qth_comp; /*!< Short version of qth at time computed */
 51  } pass_t;
 52  
 53  /**
 54   * \brief Pass detail entry.
 55   *
 56   * In order to ensure maximum flexibility at a minimal effort, only the
 57   * raw position and velocity is calculated. Calculations of the
 58   * "human readable" parameters are the responsibility of the consumer.
 59   * This way we can use the same prediction engine for various consumers
 60   * without having too much overhead and complexity in the low level code.
 61   */
 62  typedef struct {
 63      gdouble   time;   /*!< time in "jul_utc" */
 64      vector_t  pos;    /*!< Raw unprocessed position at time */
 65      vector_t  vel;    /*!< Raw unprocessed velocity at time */
 66      gdouble   velo;
 67      gdouble   az;
 68      gdouble   el;
 69      gdouble   range;
 70      gdouble   range_rate;
 71      gdouble   lat;
 72      gdouble   lon;
 73      gdouble   alt;
 74      gdouble   ma;
 75      gdouble   phase;
 76      gdouble   footprint;
 77      sat_vis_t vis;
 78      gint      orbit;
 79  } pass_detail_t;
 80  
 81  /* type casting macros */
 82  #define PASS(x) ((pass_t *) x)
 83  #define PASS_DETAIL(x) ((pass_detail_t *) x)
 84  
 85  /* SGP4/SDP4 driver */
 86  void predict_calc (sat_t *sat, qth_t *qth, gdouble t);
 87  
 88  /* AOS/LOS time calculators */
 89  gdouble find_aos           (sat_t *sat, qth_t *qth, gdouble start, gdouble maxdt);
 90  gdouble find_los           (sat_t *sat, qth_t *qth, gdouble start, gdouble maxdt);
 91  gdouble find_prev_aos      (sat_t *sat, qth_t *qth, gdouble start);
 92  
 93  /* next events */
 94  pass_t *get_next_pass      (sat_t *sat, qth_t *qth, gdouble maxdt);
 95  GSList *get_next_passes    (sat_t *sat, qth_t *qth, gdouble maxdt, guint num);
 96  
 97  /* future events */
 98  pass_t *get_pass           (sat_t *sat, qth_t *qth, gdouble start, gdouble maxdt);
 99  GSList *get_passes         (sat_t *sat, qth_t *qth, gdouble start, gdouble maxdt, guint num);
100  pass_t *get_current_pass   (sat_t *sat, qth_t *qth, gdouble start);
101  pass_t *get_pass_no_min_el (sat_t *sat, qth_t *qth, gdouble start, gdouble maxdt);
102  
103  /* copying */
104  pass_t        *copy_pass         (pass_t *pass);
105  GSList        *copy_pass_details (GSList *details);
106  pass_detail_t *copy_pass_detail  (pass_detail_t *detail);
107  
108  /* memory cleaning */
109  void free_pass         (pass_t *pass);
110  void free_passes       (GSList *passes);
111  void free_pass_detail  (pass_detail_t *detail);
112  void free_pass_details (GSList *details);
113  
114  #endif