00001 // Copyright (C) 2004 Pablo Mejia 00002 00003 00004 #ifndef NCOM_CHANNEL_16_H 00005 #define NCOM_CHANNEL_16_H 00006 00007 00008 #include "ncom_channel.H" 00009 00010 00011 namespace ncom 00012 { 00013 class channel_16_t : public channel_t 00014 { 00015 protected: 00016 static unsigned const HEADING_OFFSET = 0; 00017 static unsigned const PITCH_OFFSET = 2; 00018 static unsigned const ROLL_OFFSET = 4; 00019 static unsigned const ATTITUDE_VALID_OFFSET = 6; 00020 static unsigned const GPS2UTC_OFFSET = 7; 00021 00022 public: 00023 channel_16_t (packet_t const *packet) : channel_t (packet) 00024 { 00025 assert (packet->channel () == 16); 00026 } 00027 00028 double heading (void) const 00029 { 00030 return (1E-4 * letoh<s16_t> (m_data + HEADING_OFFSET)); 00031 } 00032 double pitch (void) const 00033 { 00034 return (1E-4 * letoh<s16_t> (m_data + PITCH_OFFSET)); 00035 } 00036 double roll (void) const 00037 { 00038 return (1E-4 * letoh<s16_t> (m_data + ROLL_OFFSET)); 00039 } 00040 bool attitude_valid (void) const 00041 { 00042 return (m_data[ATTITUDE_VALID_OFFSET] == 0); 00043 } 00044 00045 bool gps2utc_offset_valid (void) const 00046 { 00047 return (m_data[GPS2UTC_OFFSET] & 0x01); 00048 } 00049 int gps2utc_offset (void) const 00050 { 00051 return (((signed char) m_data[GPS2UTC_OFFSET]) >> 1); 00052 } 00053 }; 00054 }; 00055 00056 00057 #endif