00001 // Copyright (C) 2003, 2004 Pablo Mejia 00002 00003 00004 #ifndef CAJUN_CNAV_H 00005 #define CAJUN_CNAV_H 00006 00007 00008 #include <vector> 00009 00010 00011 namespace cajun 00012 { 00013 class input_buffer_t; 00014 00015 class cnav_t 00016 { 00017 public: 00018 cnav_t (); 00019 ~cnav_t (); 00020 00021 void handle_input (int fd); 00022 00023 class observer_t 00024 { 00025 public: 00026 enum cnav_message_t 00027 { 00028 STATUS_FULL_BUFFER, 00029 STATUS_GARBAGE_DATA 00030 }; 00031 00032 virtual ~observer_t () {} 00033 virtual void publish_status (double tstamp, 00034 unsigned status) {} 00035 virtual void cog (double tstamp, double cog) {} 00036 virtual void position (double tstamp, double lat, 00037 double lon, double z) {} 00038 virtual void sog (double tstamp, double sog) {} 00039 }; 00040 00041 void register_observer (observer_t *observer) 00042 { 00043 m_observer = observer; 00044 } 00045 00046 protected: 00047 input_buffer_t *m_ib; 00048 00049 double m_tstamp; 00050 observer_t *m_observer; 00051 00052 void decode (unsigned char const *beg, 00053 unsigned char const *end); 00054 00055 struct token_t 00056 { 00057 unsigned char const *beg; 00058 unsigned len; 00059 }; 00060 std::vector<token_t> m_token; 00061 00062 void decode_gga (void); 00063 void decode_vtg (void); 00064 }; 00065 }; 00066 00067 00068 #endif