00001 // Copyright (C) 2004 Pablo Mejia 00002 00003 00004 #ifndef CAJUN_SICK_H 00005 #define CAJUN_SICK_H 00006 00007 00008 #include "msg_0xB0.H" 00009 #include "msg_0xF5.H" 00010 #include "msg_0xC4.H" 00011 #include "data_type.H" 00012 00013 namespace cajun 00014 { 00015 class input_buffer_t; 00016 00017 class sick_t 00018 { 00019 #define MAX_BYTE_ELAPSE 14//millisecond 00020 #define WAIT_AFTER_NAK 30//millisecond 00021 #define MAX_MODE_CHANGE_ELAPSE 5000//millisecond 00022 00023 public: 00024 sick_t (); 00025 ~sick_t (); 00026 00027 void handle_input (int fd); 00028 00029 class observer_t 00030 { 00031 public: 00032 virtual ~observer_t () {} 00033 00034 virtual void scan (double tstamp, 00035 sick::msg_0xB0_t const &msg) {} 00036 virtual void scan (double tstamp, 00037 sick::msg_0xF5_t const &msg) {} 00038 virtual void scan (double tstamp, 00039 sick::msg_0xC4_t const &msg) {} 00040 virtual void publish_status (double tstamp, 00041 unsigned status) {} 00042 }; 00043 00044 void register_observer (observer_t *observer) 00045 { 00046 m_observer = observer; 00047 } 00048 00049 void setup (int fd, bool reflectivity); 00050 protected: 00051 00052 input_buffer_t *m_ib; 00053 00054 observer_t *m_observer; 00055 00056 double m_down_time; 00057 bool m_garbage_data; 00058 bool m_reflectivity; 00059 }; 00060 }; 00061 00062 00063 #endif