00001 /*!@file SeaBee/SensorResult.C information of objects to find */ 00002 // //////////////////////////////////////////////////////////////////// // 00003 // The iLab Neuromorphic Vision C++ Toolkit - Copyright (C) 2001 by the // 00004 // University of Southern California (USC) and the iLab at USC. // 00005 // See http://iLab.usc.edu for information about this project. // 00006 // //////////////////////////////////////////////////////////////////// // 00007 // Major portions of the iLab Neuromorphic Vision Toolkit are protected // 00008 // under the U.S. patent ``Computation of Intrinsic Perceptual Saliency // 00009 // in Visual Environments, and Applications'' by Christof Koch and // 00010 // Laurent Itti, California Institute of Technology, 2001 (patent // 00011 // pending; application number 09/912,225 filed July 23, 2001; see // 00012 // http://pair.uspto.gov/cgi-bin/final/home.pl for current status). // 00013 // //////////////////////////////////////////////////////////////////// // 00014 // This file is part of the iLab Neuromorphic Vision C++ Toolkit. // 00015 // // 00016 // The iLab Neuromorphic Vision C++ Toolkit is free software; you can // 00017 // redistribute it and/or modify it under the terms of the GNU General // 00018 // Public License as published by the Free Software Foundation; either // 00019 // version 2 of the License, or (at your option) any later version. // 00020 // // 00021 // The iLab Neuromorphic Vision C++ Toolkit is distributed in the hope // 00022 // that it will be useful, but WITHOUT ANY WARRANTY; without even the // 00023 // implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR // 00024 // PURPOSE. See the GNU General Public License for more details. // 00025 // // 00026 // You should have received a copy of the GNU General Public License // 00027 // along with the iLab Neuromorphic Vision C++ Toolkit; if not, write // 00028 // to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, // 00029 // Boston, MA 02111-1307 USA. // 00030 // //////////////////////////////////////////////////////////////////// // 00031 // 00032 // Primary maintainer for this file: Michael Montalbo <montalbo@usc.edu> 00033 // $HeadURL: svn://isvn.usc.edu/software/invt/trunk/saliency/src/SeaBee/SensorResult.C $ 00034 // $Id: SensorResult.C 10794 2009-02-08 06:21:09Z itti $ 00035 // 00036 00037 #include "SensorResult.H" 00038 00039 // ###################################################################### 00040 // Constructors 00041 SensorResult::SensorResult() 00042 { 00043 sensorResultMutex = (pthread_mutex_t *)malloc(sizeof(pthread_mutex_t)); 00044 pthread_mutex_init(sensorResultMutex,NULL); 00045 00046 itsStatus = NOT_FOUND; 00047 itsPosition = Point3D(-1,-1,-1); 00048 itsOrientation = -1.0; 00049 itsFrequency = -1.0; 00050 itsDistance = -1.0; 00051 itsMass = -1.0; 00052 itsFrameNumber = 0; 00053 itsTimer.reset(new Timer(1000000)); 00054 } 00055 00056 // ###################################################################### 00057 SensorResult::SensorResult(SensorResultType type) 00058 { 00059 00060 sensorResultMutex = (pthread_mutex_t *)malloc(sizeof(pthread_mutex_t)); 00061 pthread_mutex_init(sensorResultMutex,NULL); 00062 00063 itsType = type; 00064 itsStatus = NOT_FOUND; 00065 itsPosition = Point3D(-1,-1,-1); 00066 itsOrientation = -1.0; 00067 itsFrequency = -1.0; 00068 itsDistance = -1.0; 00069 itsMass = -1.0; 00070 itsFrameNumber = 0; 00071 itsTimer.reset(new Timer(1000000)); 00072 } 00073 00074 00075 // ###################################################################### 00076 void SensorResult::copySensorResult(SensorResult sr) 00077 { 00078 pthread_mutex_lock(sensorResultMutex); 00079 itsPosition = sr.getPosition(); 00080 itsOrientation = sr.getOrientation(); 00081 itsFrequency = sr.getFrequency(); 00082 itsDistance = sr.getDistance(); 00083 itsMass = sr.getMass(); 00084 itsType = sr.getType(); 00085 itsStatus = sr.getStatus(); 00086 itsTimer->reset(); 00087 pthread_mutex_unlock(sensorResultMutex); 00088 } 00089 00090 00091 // ###################################################################### 00092 void SensorResult::startTimer() 00093 { 00094 itsTimer.reset(new Timer(1000000)); 00095 } 00096 00097 // ###################################################################### 00098 // Accessor methods 00099 void SensorResult::setStatus(SensorResultStatus s) 00100 { 00101 pthread_mutex_lock(sensorResultMutex); 00102 itsStatus = s; 00103 pthread_mutex_unlock(sensorResultMutex); 00104 } 00105 00106 // ###################################################################### 00107 void SensorResult::setType(SensorResultType t) 00108 { 00109 pthread_mutex_lock(sensorResultMutex); 00110 itsType = t; 00111 pthread_mutex_unlock(sensorResultMutex); 00112 } 00113 00114 // ###################################################################### 00115 void SensorResult::setPosition(Point3D pos) 00116 { 00117 pthread_mutex_lock(sensorResultMutex); 00118 itsPosition = pos; 00119 itsTimer->reset(); 00120 pthread_mutex_unlock(sensorResultMutex); 00121 } 00122 00123 // ###################################################################### 00124 void SensorResult::setOrientation(Angle ori) 00125 { 00126 pthread_mutex_lock(sensorResultMutex); 00127 itsOrientation = ori; 00128 itsTimer->reset(); 00129 pthread_mutex_unlock(sensorResultMutex); 00130 } 00131 00132 // ###################################################################### 00133 void SensorResult::setFrequency(float freq) 00134 { 00135 pthread_mutex_lock(sensorResultMutex); 00136 itsFrequency = freq; 00137 itsTimer->reset(); 00138 pthread_mutex_unlock(sensorResultMutex); 00139 } 00140 00141 // ###################################################################### 00142 void SensorResult::setDistance(float dist) 00143 { 00144 pthread_mutex_lock(sensorResultMutex); 00145 itsDistance = dist; 00146 itsTimer->reset(); 00147 pthread_mutex_unlock(sensorResultMutex); 00148 } 00149 00150 // ###################################################################### 00151 void SensorResult::setMass(float mass) 00152 { 00153 pthread_mutex_lock(sensorResultMutex); 00154 itsMass = mass; 00155 itsTimer->reset(); 00156 pthread_mutex_unlock(sensorResultMutex); 00157 } 00158 00159 // ###################################################################### 00160 void SensorResult::setId(uint id) 00161 { 00162 pthread_mutex_lock(sensorResultMutex); 00163 itsId = id; 00164 itsTimer->reset(); 00165 pthread_mutex_unlock(sensorResultMutex); 00166 } 00167 00168 // ###################################################################### 00169 void SensorResult::setFrameNum(uint fnum) 00170 { 00171 pthread_mutex_lock(sensorResultMutex); 00172 itsFrameNumber = fnum; 00173 itsTimer->reset(); 00174 pthread_mutex_unlock(sensorResultMutex); 00175 } 00176 00177 // ###################################################################### 00178 Point3D SensorResult::getPosition() 00179 { 00180 pthread_mutex_lock(sensorResultMutex); 00181 Point3D p = itsPosition; 00182 pthread_mutex_unlock(sensorResultMutex); 00183 return p; 00184 } 00185 00186 // ###################################################################### 00187 rutz::shared_ptr<Point3D> SensorResult::getPositionPtr() 00188 { 00189 pthread_mutex_lock(sensorResultMutex); 00190 rutz::shared_ptr<Point3D> p (new Point3D(itsPosition)); 00191 pthread_mutex_unlock(sensorResultMutex); 00192 return p; 00193 } 00194 00195 // ###################################################################### 00196 Angle SensorResult::getOrientation() 00197 { 00198 pthread_mutex_lock(sensorResultMutex); 00199 Angle o = itsOrientation; 00200 pthread_mutex_unlock(sensorResultMutex); 00201 return o; 00202 } 00203 00204 // ###################################################################### 00205 rutz::shared_ptr<Angle> SensorResult::getOrientationPtr() 00206 { 00207 pthread_mutex_lock(sensorResultMutex); 00208 rutz::shared_ptr<Angle> o (new Angle(itsOrientation)); 00209 pthread_mutex_unlock(sensorResultMutex); 00210 return o; 00211 } 00212 00213 00214 // ###################################################################### 00215 float SensorResult::getFrequency() 00216 { 00217 pthread_mutex_lock(sensorResultMutex); 00218 float f = itsFrequency; 00219 pthread_mutex_unlock(sensorResultMutex); 00220 return f; 00221 } 00222 00223 // ###################################################################### 00224 float SensorResult::getDistance() 00225 { 00226 pthread_mutex_lock(sensorResultMutex); 00227 float d = itsDistance; 00228 pthread_mutex_unlock(sensorResultMutex); 00229 return d; 00230 } 00231 00232 // ###################################################################### 00233 float SensorResult::getMass() 00234 { 00235 pthread_mutex_lock(sensorResultMutex); 00236 float m = itsMass; 00237 pthread_mutex_unlock(sensorResultMutex); 00238 return m; 00239 } 00240 00241 // ###################################################################### 00242 uint SensorResult::getId() 00243 { 00244 pthread_mutex_lock(sensorResultMutex); 00245 uint id = itsId; 00246 pthread_mutex_unlock(sensorResultMutex); 00247 return id; 00248 } 00249 00250 // ###################################################################### 00251 uint SensorResult::getFrameNum() 00252 { 00253 pthread_mutex_lock(sensorResultMutex); 00254 uint fnum = itsFrameNumber; 00255 pthread_mutex_unlock(sensorResultMutex); 00256 return fnum; 00257 } 00258 00259 // ###################################################################### 00260 SensorResult::SensorResultStatus SensorResult::getStatus() 00261 { 00262 pthread_mutex_lock(sensorResultMutex); 00263 SensorResultStatus currentStatus = itsStatus; 00264 int lastUpdate = itsTimer->get(); 00265 00266 if(lastUpdate > NOT_FOUND_TIME) 00267 { 00268 if(currentStatus == SensorResult::FOUND) 00269 currentStatus = SensorResult::LOST; 00270 else 00271 currentStatus = SensorResult::NOT_FOUND; 00272 } 00273 00274 pthread_mutex_unlock(sensorResultMutex); 00275 return currentStatus; 00276 } 00277 00278 // ###################################################################### 00279 SensorResult::SensorResultType SensorResult::getType() 00280 { 00281 pthread_mutex_lock(sensorResultMutex); 00282 // int lastAccess = itsTimer->get(); 00283 //LINFO("LastAccess:%d",lastAccess); 00284 SensorResultType currentType = itsType; 00285 pthread_mutex_unlock(sensorResultMutex); 00286 return currentType; 00287 } 00288 00289 // ###################################################################### 00290 bool SensorResult::downwardCoordsOk() 00291 { 00292 pthread_mutex_lock(sensorResultMutex); 00293 bool isValid = (itsPosition.isValidZ() && 00294 itsPosition.isValidX()); 00295 pthread_mutex_unlock(sensorResultMutex); 00296 00297 return isValid; 00298 } 00299 00300 // ###################################################################### 00301 bool SensorResult::forwardCoordsOk() 00302 { 00303 pthread_mutex_lock(sensorResultMutex); 00304 bool isValid = (itsPosition.isValidY() && 00305 itsPosition.isValidX()); 00306 pthread_mutex_unlock(sensorResultMutex); 00307 00308 return isValid; 00309 } 00310 00311 00312 // ###################################################################### 00313 /* So things look consistent in everyone's emacs... */ 00314 /* Local Variables: */ 00315 /* indent-tabs-mode: nil */ 00316 /* End: */