00001 #ifndef IBEO_MSG_H 00002 #define IBEO_MSG_H 00003 00004 00005 // Copyright (C) 2007 University of Louisiana at Lafayette 00006 00007 00008 #include "endian.H" 00009 00010 00011 namespace ibeo 00012 { 00013 using namespace endian; 00014 00015 00016 class msg_t 00017 { 00018 protected: 00019 bool m_valid; 00020 unsigned char const *m_data; 00021 00022 enum { STX_OFFSET = 0 }; 00023 enum { SIZE_OFFSET = 4 }; 00024 enum { TYPE_OFFSET = 8 }; 00025 enum { SEND_TIMESTAMP_OFFSET = 12 }; 00026 00027 unsigned skip_to_stx (unsigned char const *data_, unsigned size_); 00028 00029 public: 00030 enum { STX = 0xAFFEC0C0 }; 00031 enum { HEADER_SIZE = 16 }; 00032 00033 00034 msg_t () : m_data (0) {} 00035 msg_t (msg_t const &msg_) : m_data (msg_.m_data) {} 00036 00037 bool valid () const { return m_valid; } 00038 unsigned decode (unsigned char const *data_, unsigned size_); 00039 00040 unsigned char const *data () const 00041 { return m_data; } 00042 unsigned size () const 00043 { return betoh<u32_t> (m_data + SIZE_OFFSET); } 00044 00045 enum 00046 { 00047 TYPE_OBJECT = 1, 00048 TYPE_SCAN = 15, 00049 }; 00050 00051 unsigned type () const 00052 { return betoh<u32_t> (m_data + TYPE_OFFSET); } 00053 double send_timestamp () const 00054 { return .001 * betoh<u32_t> (m_data + SEND_TIMESTAMP_OFFSET); } 00055 00056 }; 00057 00058 00059 }; 00060 00061 00062 #endif