00001 /* 00002 * MKData.cpp 00003 * 00004 * Created on: Nov 25, 2011 00005 * Author: mriedel 00006 */ 00007 00008 #include <tk_mkinterface/MKData.hpp> 00009 00010 #include <boost/foreach.hpp> 00011 00012 namespace TELEKYB_NAMESPACE { 00013 MKData::MKData() 00014 { 00015 // create Map 00016 createMap(); 00017 } 00018 00019 MKData::~MKData() 00020 { 00021 MKValueMap::iterator it; 00022 for (it = valueMap.begin(); it != valueMap.end(); it++) { 00023 delete (*it).second; 00024 } 00025 } 00026 00027 void MKData::createMap() 00028 { 00029 for (int i = 0; i < MKDataDefines::MKDATAIDS_NUM; ++i) { 00030 valueMap[i] = new MKValue( MKDataDefines::MKDATAIDS_NAMES[i],i); 00031 } 00032 } 00033 00034 MKValue* MKData::getValueByID(MKInt id) const 00035 { 00036 MKValue* value = NULL; 00037 if (valueMap.count(id) > 0) { 00038 value = valueMap.at(id); 00039 } 00040 return value; 00041 } 00042 00043 MKValue* MKData::setValue(MKSingleValuePacket packet) 00044 { 00045 MKValue* value = getValueByID(packet.id); 00046 if (value) { 00047 value->setValue(packet.value); 00048 // notify 00049 notifyMKDataListeners(value); 00050 } 00051 // NULL means not successful! 00052 return value; 00053 } 00054 00055 void MKData::notifyMKDataListeners(MKValue* value) 00056 { 00057 BOOST_FOREACH(MKDataListener* l, dataListenerSet) { 00058 l->dataValueUpdated(value); 00059 } 00060 } 00061 00062 bool MKData::isMember(MKValue* value_) const 00063 { 00064 return value_ && (value_ == getValueByID(value_->getID())); 00065 } 00066 00067 MKActiveIDs MKData::getPattern(MKDataPattern pattern) 00068 { 00069 MKActiveIDs activeIDs; 00070 switch (pattern.value()) { 00071 case MKDataPattern::RawImuAttEst: 00072 activeIDs.ids[0] = MKDataDefines::RAW_ACC_X; 00073 activeIDs.ids[1] = MKDataDefines::RAW_ACC_Y; 00074 activeIDs.ids[2] = MKDataDefines::RAW_ACC_Z; 00075 activeIDs.ids[3] = MKDataDefines::RAW_GYRO_X; 00076 activeIDs.ids[4] = MKDataDefines::RAW_GYRO_Y; 00077 activeIDs.ids[5] = MKDataDefines::RAW_GYRO_Z; 00078 activeIDs.ids[6] = MKDataDefines::PITCH; 00079 activeIDs.ids[7] = MKDataDefines::ROLL; 00080 activeIDs.ids[8] = MKDataDefines::MOTOR_STATE; 00081 activeIDs.ids[9] = MKDataDefines::TIME_MS_MOD_60S; 00082 break; 00083 case MKDataPattern::AccOffsetGyroDrift: 00084 activeIDs.ids[0] = MKDataDefines::DRIFT_GYRO_X; 00085 activeIDs.ids[1] = MKDataDefines::DRIFT_GYRO_Y; 00086 activeIDs.ids[2] = MKDataDefines::DRIFT_GYRO_Z; 00087 activeIDs.ids[3] = MKDataDefines::OFFSET_RAW_ACC_X; 00088 activeIDs.ids[4] = MKDataDefines::OFFSET_RAW_ACC_Y; 00089 activeIDs.ids[5] = MKDataDefines::OFFSET_RAW_ACC_Z; 00090 activeIDs.ids[6] = MKDataDefines::DRIFT_ESTIM_ACTIVE; 00091 activeIDs.ids[7] = MKDataDefines::MIRROR_DATA_ACTIVE; 00092 activeIDs.ids[8] = MKDataDefines::MOTOR_STATE; 00093 activeIDs.ids[9] = MKDataDefines::TIME_MS_MOD_60S; 00094 break; 00095 case MKDataPattern::CompFilt: 00096 activeIDs.ids[0] = MKDataDefines::PITCH; 00097 activeIDs.ids[1] = MKDataDefines::ROLL; 00098 activeIDs.ids[2] = MKDataDefines::PITCH_RATE; 00099 activeIDs.ids[3] = MKDataDefines::ROLL_RATE; 00100 activeIDs.ids[4] = MKDataDefines::RAW_ACC_X; 00101 activeIDs.ids[5] = MKDataDefines::RAW_ACC_Y; 00102 activeIDs.ids[6] = MKDataDefines::RAW_ACC_Z; 00103 activeIDs.ids[7] = MKDataDefines::MIRROR_TIME_PERIOD; 00104 activeIDs.ids[8] = MKDataDefines::MOTOR_STATE; 00105 activeIDs.ids[9] = MKDataDefines::TIME_MS_MOD_60S; 00106 break; 00107 case MKDataPattern::Stats: 00108 activeIDs.ids[0] = MKDataDefines::RCVD_CMD_PER_SEC; 00109 activeIDs.ids[1] = MKDataDefines::MAX_RCVD_PERIOD_MS; 00110 activeIDs.ids[2] = MKDataDefines::SENT_PKT_PER_SEC; 00111 activeIDs.ids[3] = MKDataDefines::MAX_SENT_PERIOD_MS; 00112 activeIDs.ids[4] = MKDataDefines::CTRL_STEPS_PER_SEC; 00113 activeIDs.ids[5] = MKDataDefines::MAX_FLIGHT_CTRL_PERIOD_MS; 00114 activeIDs.ids[6] = MKDataDefines::BATT_VOLT; 00115 activeIDs.ids[7] = MKDataDefines::MIRROR_TIME_PERIOD; 00116 activeIDs.ids[8] = MKDataDefines::MOTOR_STATE; 00117 activeIDs.ids[9] = MKDataDefines::TIME_MS_MOD_60S; 00118 break; 00119 default: 00120 00121 // Default Config 00122 for (int i = 0; i < ACTIVEDATA_SIZE; i++) { 00123 activeIDs.ids[i] = i; 00124 } 00125 00126 00127 break; 00128 } 00129 00130 return activeIDs; 00131 } 00132 00133 void MKData::registerMKDataListener(MKDataListener* listener) 00134 { 00135 dataListenerSet.insert(listener); 00136 } 00137 00138 void MKData::unRegisterMKDataListener(MKDataListener* listener) 00139 { 00140 dataListenerSet.erase(listener); 00141 } 00142 00143 00144 } /* namespace telekyb */