00001 // Copyright (C) 2006 University of Louisiana at Lafayette 00002 00003 00004 #ifndef CAJUN_PLFUCHS_H 00005 #define CAJUN_PLFUCHS_H 00006 00007 00008 #include "data_type.H" 00009 00010 #include <vector> 00011 00012 00013 namespace cajun 00014 { 00015 00016 00017 class input_buffer_t; 00018 00019 00020 class plfuchs_t 00021 { 00022 public: 00023 enum format_t { F_ASCII, F_ASCII_SHORT, F_BINARY }; 00024 00025 plfuchs_t (format_t format_); 00026 ~plfuchs_t (); 00027 00028 void test_mode (bool enable_) { m_test_mode = enable_; } 00029 00030 void handle_input (int fd_); 00031 00032 class observer_t 00033 { 00034 public: 00035 virtual ~observer_t () {} 00036 00037 virtual void publish_data (double tstamp_, 00038 unsigned position_, int velocity_) {} 00039 virtual void publish_status (double tstamp_, 00040 unsigned status_) {} 00041 }; 00042 00043 void register_observer (observer_t *observer) 00044 { m_observer = observer; } 00045 00046 protected: 00047 input_buffer_t *m_ib; 00048 observer_t *m_observer; 00049 00050 00051 double m_max_tx_time; 00052 double m_last_tstamp; 00053 unsigned m_last_tick; 00054 struct data_t 00055 { 00056 double tstamp; 00057 unsigned tick; 00058 unsigned position; 00059 int velocity; 00060 }; 00061 std::vector<data_t> m_data; 00062 00063 unsigned decode_ascii (); 00064 unsigned decode_ascii_short (); 00065 unsigned decode_binary (); 00066 00067 bool m_test_mode; 00068 format_t m_format; 00069 unsigned decode (); 00070 00071 void log_test_data (double tstamp_); 00072 }; 00073 00074 00075 }; 00076 00077 00078 #endif