00001
00002
00003
00004 #ifndef CAJUN_RT3K_UDP_H
00005 #define CAJUN_RT3K_UDP_H
00006
00007
00008 #include "ncom.H"
00009
00010
00011 #include <ctime>
00012
00013
00014 namespace cajun
00015 {
00016 class input_buffer_t;
00017
00018 class rt3k_udp_t
00019 {
00020 public:
00021 rt3k_udp_t ();
00022 ~rt3k_udp_t ();
00023
00024 void handle_input (int fd);
00025
00026 void debug (bool flag) { m_debug = flag; }
00027 void overwrite_gps_time (bool flag)
00028 { m_overwrite_gps_time = flag;}
00029
00030 class observer_t
00031 {
00032 public:
00033 virtual ~observer_t () {}
00034
00035 virtual void notify_backward_time (double tstamp,
00036 double delta,
00037 double packet_tstamp) {}
00038 virtual void notify_time_mismatch (double tstamp,
00039 double sys_tstamp) {}
00040 virtual void notify_full_buffer (double tstamp) {}
00041 virtual void notify_garbage_data (double tstamp) {}
00042 virtual void notify_nav_status_locked (double tstamp) {} virtual void notify_no_differential_corrections (double tstamp, unsigned mode) {}
00043 virtual void notify_yaw_rate (double tstamp,
00044 double x_angular_rate) {}
00045 virtual void cog (double tstamp, double cog) {}
00046 virtual void sog (double tstamp, double sog) {}
00047 virtual void heading (double tstamp, double heading,
00048 double heading_accuracy,
00049 bool attitude_accuracy_valid) {}
00050 virtual void motion (double tstamp, double roll,
00051 double pitch, double heading,
00052 double roll_accuracy,
00053 double pitch_accuracy,
00054 double heading_accuracy,
00055 bool attitude_accuracy_valid) {}
00056 virtual void position (double tstamp, double lat,
00057 double lon, double z,
00058 double n_position_accuracy,
00059 double e_position_accuracy,
00060 double d_position_accuracy,
00061 bool position_accuracy_valid) {}
00062 virtual void acceleration (double tstamp,
00063 double x_acl, double y_acl,
00064 double z_acl) {}
00065 virtual void angular_rate (double tstamp,
00066 double x_ang_rate,
00067 double y_ang_rate,
00068 double z_ang_rate) {}
00069 };
00070
00071 void register_observer (observer_t *observer)
00072 {
00073 m_observer = observer;
00074 }
00075
00076 protected:
00077
00078 input_buffer_t *m_ib;
00079
00080 observer_t *m_observer;
00081
00082 bool m_debug;
00083 bool m_overwrite_gps_time;
00084
00085 double m_sys_tstamp;
00086 double m_last_tstamp;
00087
00088 int m_gps2utc_offset;
00089 time_t m_gps_time_base;
00090 time_t m_gps_minute_base;
00091 double m_n_position_accuracy;
00092 double m_e_position_accuracy;
00093 double m_d_position_accuracy;
00094 unsigned m_age;
00095 bool m_position_accuracy_valid;
00096
00097 double m_heading_accuracy;
00098 double m_pitch_accuracy;
00099 double m_roll_accuracy;
00100 unsigned m_attitude_age;
00101 bool m_attitude_accuracy_valid;
00102
00103 double utc_tstamp (double gps_minute_offset);
00104
00105 void decode (ncom::channel_0_t const &channel);
00106 void decode (ncom::channel_3_t const &channel);
00107 void decode (ncom::channel_5_t const &channel);
00108 void decode (ncom::channel_16_t const &channel);
00109 void decode_packet (ncom::packet_t const &packet);
00110
00111 void decode (unsigned char const *beg,
00112 unsigned char const *end);
00113 };
00114 };
00115
00116
00117 #endif