00001 // Copyright (C) 2004 Pablo Mejia 00002 // Authors: Pablo Mejia, Firas Bouz 00003 00004 00005 #ifndef NCOM_CHANNEL_5_H 00006 #define NCOM_CHANNEL_5_H 00007 00008 00009 #include "ncom_channel.H" 00010 00011 00012 namespace ncom 00013 { 00014 00015 class channel_5_t : public channel_t 00016 { 00017 protected: 00018 static unsigned const HEADING_ACCURACY_OFFSET = 0; 00019 static unsigned const PITCH_ACCURACY_OFFSET = 2; 00020 static unsigned const ROLL_ACCURACY_OFFSET = 4; 00021 static unsigned const AGE_OFFSET = 6; 00022 00023 public: 00024 channel_5_t (packet_t const *packet) : channel_t (packet) 00025 { 00026 assert (packet->channel () == 5); 00027 } 00028 00029 // Units of orientation accuracies are 1e-5 00030 00031 double heading_accuracy (void) const 00032 { 00033 return (1E-5 * letoh<u16_t> (m_data + 00034 HEADING_ACCURACY_OFFSET)); 00035 } 00036 double pitch_accuracy (void) const 00037 { 00038 return (1E-5 * letoh<u16_t> (m_data + 00039 PITCH_ACCURACY_OFFSET)); 00040 } 00041 double roll_accuracy (void) const 00042 { 00043 return (1E-5 * letoh<u16_t> (m_data + 00044 ROLL_ACCURACY_OFFSET)); 00045 } 00046 unsigned age (void) const 00047 { 00048 return (m_data[AGE_OFFSET]); 00049 } 00050 bool attitude_accuracy_valid (void) const 00051 { 00052 return (age () < 150); 00053 } 00054 }; 00055 }; 00056 00057 00058 #endif