/home/fwph/code/wurde/rde/core/capabilities/Bumper.cpp

Go to the documentation of this file.
00001 
00029 #include <Bumper.H>
00030 #include <CommsManager.H>
00031 #include <Logger.H>
00032 
00033 // $Id: Type.cpp 68 2007-02-01 17:56:57Z fwph $
00034 
00035 using namespace WURDE;
00036 
00037 Bumper::Bumper(const std::string & streamname){
00038        init(streamname,STRAT_NORMAL,"Any");
00039 
00040        //global name will be set later
00041        m_haveGlobalname=false;
00042 }
00043 
00044 Bumper::Bumper(const ConnectionStrategy & strategy,const std::string & gblName){
00045        init("Any",strategy,gblName);
00046 
00047        if(strategy==STRAT_NORMAL){
00048               //then the global name really specifies the streamname,
00049               // and the global name should be assigned automagically once we have
00050               // confirmation that the stream has been started
00051               m_haveGlobalname=false;   
00052        }
00053 
00054        m_haveStream=false;
00055        
00056 }
00057 
00058 Bumper::Bumper(const std::string &streamname,const std::string &gblName){
00059        init(streamname,STRAT_NORMAL,gblName);
00060 }
00061 
00062 void Bumper::init(const std::string &streamname,const ConnectionStrategy &strategy,const std::string &gblName){
00063   m_globalname=gblName;
00064   m_streamname=streamname;
00065 
00066   myCOMObject=NULL;
00067   
00068   //  data.source=streamname.c_str();
00069   requests=info;
00070 
00071   m_queue=false;
00072   m_supplier=false;
00073   m_doTimestamp=true;
00074   m_doTag=true;
00075 
00076   m_doPublishData=false;
00077   m_doPublishInfo=false;
00078 
00079   m_initialize=false;
00080   m_strategy=strategy;
00081 
00082   m_haveStream=true;
00083   m_haveGlobalname=true;
00084   m_doPublishData=false;
00085   m_doPublishInfo=false;
00086 
00087   m_doAutoPing=true;
00088 
00089   info.source=streamname;
00090   requests.source=m_globalname;
00091   info.target="Any";
00092   requests.target=streamname;
00093   info.timestamp.now();
00094   requests.timestamp.now();
00095 
00096   m_streamRequest=STAT_NULL;
00097   
00098   m_sourceModule="Unknown";
00099 }
00100 
00101 
00102 Bumper::~Bumper(){
00103   myManager=NULL;
00104   if(myCOMObject){
00105 
00106          //      delete myCOMObject;
00107   }
00108 }
00109 
00110 
00111 void Bumper::activateSupplier(){
00112        if(m_haveStream){
00113               m_supplier=true;
00114               m_globalname=m_streamname;
00115               m_haveGlobalname=true;
00116               m_initialize=false;
00117               if(myCOMObject){
00118                       //                     myCOMObject=new CMUIPCRobotProtocol::CMUIPCBumper(m_globalname);
00119                      myCOMObject->setGlobalName(m_globalname);
00120                      myCOMObject->setStreamName(m_streamname);
00121                      myCOMObject->setInfo(&requests);
00122                      myCOMObject->setRequests(&info);
00123                      myCOMObject->setStaging(&data);
00124                      myCOMObject->activateSupplier();
00125                      myCOMObject->setAutoPing(m_doAutoPing);
00126                      myCOMObject->setInfoVector(&m_requestVector);
00127                      myCOMObject->setRequestVector(&m_infoVector);
00128                      myCOMObject->setDataVector(&m_dataVector);
00129 
00130                      data.source=m_streamname;
00131                      info.source=m_streamname;
00132 
00133                      if(m_queue){
00134                             myCOMObject->setQueueMode(true);
00135                      }
00136 
00137               }else{
00138                       g_fatal("Attempted to activateSupplier before setting a COMObject Please just use registerSupplier.");
00139                       exit(-1);
00140               }
00141         data.bumped=0;
00142         data.bumpers.clear();
00143         if(m_supplier){
00144                 info.x_offset.setCMode(C_SUPPLIER);
00145         }else{
00146                 info.x_offset.setCMode(C_CONSUMER);
00147         }
00148         if(m_supplier){
00149                 info.y_offset.setCMode(C_SUPPLIER);
00150         }else{
00151                 info.y_offset.setCMode(C_CONSUMER);
00152         }
00153         if(m_supplier){
00154                 info.phi_separation.setCMode(C_SUPPLIER);
00155         }else{
00156                 info.phi_separation.setCMode(C_CONSUMER);
00157         }
00158         if(m_supplier){
00159                 info.psi_offset.setCMode(C_SUPPLIER);
00160         }else{
00161                 info.psi_offset.setCMode(C_CONSUMER);
00162         }
00163         if(m_supplier){
00164                 info.x_separation.setCMode(C_SUPPLIER);
00165         }else{
00166                 info.x_separation.setCMode(C_CONSUMER);
00167         }
00168         if(m_supplier){
00169                 info.phi_offset.setCMode(C_SUPPLIER);
00170         }else{
00171                 info.phi_offset.setCMode(C_CONSUMER);
00172         }
00173         if(m_supplier){
00174                 info.theta_separation.setCMode(C_SUPPLIER);
00175         }else{
00176                 info.theta_separation.setCMode(C_CONSUMER);
00177         }
00178         if(m_supplier){
00179                 info.psi_separation.setCMode(C_SUPPLIER);
00180         }else{
00181                 info.psi_separation.setCMode(C_CONSUMER);
00182         }
00183         if(m_supplier){
00184                 info.sensor_positions.setCMode(C_SUPPLIER);
00185         }else{
00186                 info.sensor_positions.setCMode(C_CONSUMER);
00187         }
00188         if(m_supplier){
00189                 info.y_separation.setCMode(C_SUPPLIER);
00190         }else{
00191                 info.y_separation.setCMode(C_CONSUMER);
00192         }
00193         if(m_supplier){
00194                 info.uniform.setCMode(C_SUPPLIER);
00195         }else{
00196                 info.uniform.setCMode(C_CONSUMER);
00197         }
00198         if(m_supplier){
00199                 info.theta_offset.setCMode(C_SUPPLIER);
00200         }else{
00201                 info.theta_offset.setCMode(C_CONSUMER);
00202         }
00203         if(m_supplier){
00204                 info.z_separation.setCMode(C_SUPPLIER);
00205         }else{
00206                 info.z_separation.setCMode(C_CONSUMER);
00207         }
00208         if(m_supplier){
00209                 info.z_offset.setCMode(C_SUPPLIER);
00210         }else{
00211                 info.z_offset.setCMode(C_CONSUMER);
00212         }
00213        }else{
00214               //this shouldn't happen, but there's no real problem with it.
00215               //it'd just be dumb.
00216               m_initialize=true;
00217               m_supplier=true;
00218        }
00219        
00220        requests=info;
00221 
00222 }
00223 
00224 void Bumper::activateConsumer(){
00225        std::string localname;
00226        
00227        if(m_haveStream){
00228               m_initialize=false;
00229               m_supplier=false;
00230               if(myCOMObject&&myManager){
00231                       /* global name so we don't have conflicts with the naming service */
00232                       if(!m_haveGlobalname&&m_strategy==STRAT_NORMAL){
00233                               m_globalname=myManager->getName()+BUMPER+m_streamname+"Consumer";
00234                               m_haveGlobalname=true;
00235                       }
00236 
00237                      myCOMObject->setGlobalName(m_globalname);
00238                      myCOMObject->setStreamName(m_streamname);
00239                      requests.source=m_globalname;
00240                      data.source=m_streamname;
00241                      info.source=m_streamname;
00242                      myCOMObject->setInfo(&info);
00243                      myCOMObject->setRequests(&requests);
00244                      myCOMObject->setStaging(&data);
00245                      myCOMObject->setAutoPing(m_doAutoPing);
00246                      myCOMObject->activateConsumer();
00247                      myCOMObject->setInfoVector(&m_infoVector);
00248                      myCOMObject->setRequestVector(&m_requestVector);
00249                      myCOMObject->setDataVector(&m_dataVector);
00250 
00251                      if(m_queue){
00252                             myCOMObject->setQueueMode(true);
00253                      }
00254               }else{
00255                       g_fatal("Attempted to activateConsumer before setting a COMObject and CommsManager. Please use registerConsumer instead.");
00256                      exit(-1);
00257               }
00258 
00259         data.bumped=0;
00260         data.bumpers.clear();
00261         if(m_supplier){
00262                 info.x_offset.setCMode(C_SUPPLIER);
00263         }else{
00264                 info.x_offset.setCMode(C_CONSUMER);
00265         }
00266         if(m_supplier){
00267                 info.y_offset.setCMode(C_SUPPLIER);
00268         }else{
00269                 info.y_offset.setCMode(C_CONSUMER);
00270         }
00271         if(m_supplier){
00272                 info.phi_separation.setCMode(C_SUPPLIER);
00273         }else{
00274                 info.phi_separation.setCMode(C_CONSUMER);
00275         }
00276         if(m_supplier){
00277                 info.psi_offset.setCMode(C_SUPPLIER);
00278         }else{
00279                 info.psi_offset.setCMode(C_CONSUMER);
00280         }
00281         if(m_supplier){
00282                 info.x_separation.setCMode(C_SUPPLIER);
00283         }else{
00284                 info.x_separation.setCMode(C_CONSUMER);
00285         }
00286         if(m_supplier){
00287                 info.phi_offset.setCMode(C_SUPPLIER);
00288         }else{
00289                 info.phi_offset.setCMode(C_CONSUMER);
00290         }
00291         if(m_supplier){
00292                 info.theta_separation.setCMode(C_SUPPLIER);
00293         }else{
00294                 info.theta_separation.setCMode(C_CONSUMER);
00295         }
00296         if(m_supplier){
00297                 info.psi_separation.setCMode(C_SUPPLIER);
00298         }else{
00299                 info.psi_separation.setCMode(C_CONSUMER);
00300         }
00301         if(m_supplier){
00302                 info.sensor_positions.setCMode(C_SUPPLIER);
00303         }else{
00304                 info.sensor_positions.setCMode(C_CONSUMER);
00305         }
00306         if(m_supplier){
00307                 info.y_separation.setCMode(C_SUPPLIER);
00308         }else{
00309                 info.y_separation.setCMode(C_CONSUMER);
00310         }
00311         if(m_supplier){
00312                 info.uniform.setCMode(C_SUPPLIER);
00313         }else{
00314                 info.uniform.setCMode(C_CONSUMER);
00315         }
00316         if(m_supplier){
00317                 info.theta_offset.setCMode(C_SUPPLIER);
00318         }else{
00319                 info.theta_offset.setCMode(C_CONSUMER);
00320         }
00321         if(m_supplier){
00322                 info.z_separation.setCMode(C_SUPPLIER);
00323         }else{
00324                 info.z_separation.setCMode(C_CONSUMER);
00325         }
00326         if(m_supplier){
00327                 info.z_offset.setCMode(C_SUPPLIER);
00328         }else{
00329                 info.z_offset.setCMode(C_CONSUMER);
00330         }
00331        }else{
00332               //no stream, so we can't connect yet. tell the system 
00333               //to initialize as soon as we've got one
00334               m_initialize=true;
00335        }
00336 
00337 }
00338 
00339 void Bumper::runUpdate(){
00340        if(myCOMObject){
00341 
00342               myCOMObject->runUpdate(m_doPublishData,m_doPublishInfo);
00343               
00344               m_doPublishData=false;
00345               m_doPublishInfo=false;
00346               
00347        }
00348 }
00349 
00350 void Bumper::setManager(CommsManager *myManager_){
00351 
00352   if(!myCOMObject){
00353     myManager=myManager_;
00354   }
00355 
00356 }
00357 
00358 void Bumper::setQueueMode(const bool & val){
00359 
00360        if(!myCOMObject){
00361               m_queue=val;
00362        }else if(!m_queue&&val){
00363               m_queue=val;
00364               myCOMObject->setDataVector(&m_dataVector);
00365               myCOMObject->setQueueMode(true);
00366 
00367        }else if(!val&&m_queue){
00368               m_queue=val;
00369               myCOMObject->setQueueMode(false);
00370               while(!m_dataVector.empty()){
00371                      m_dataVector.pop();
00372               }
00373               while(!m_infoVector.empty()){
00374                      m_infoVector.pop();
00375               }
00376               while(!m_requestVector.empty()){
00377                      m_requestVector.pop();
00378               }
00379        }
00380 }
00381 
00382 bool Bumper::newData(){
00383        if(m_queue){
00384               return !m_dataVector.empty();
00385        }else{
00386               if(myCOMObject){
00387                      return myCOMObject->newData();
00388               }
00389        }
00390 
00391        return false;
00392 }
00393 
00394 bool Bumper::newInfo(){
00395        if(m_queue){
00396               if(m_supplier){
00397                      return !m_requestVector.empty();
00398               }
00399 
00400               return !m_infoVector.empty();
00401        }else{
00402               if(myCOMObject){
00403                      return myCOMObject->newInfo();
00404               }
00405        }
00406 
00407 
00408        return false;
00409 }
00410 
00411 void Bumper::publishData(){
00412        if(m_supplier){
00413               if(m_doTimestamp){
00414                      data.timestamp.now();
00415               }
00416               if(m_doTag){
00417                      data.source=m_globalname;
00418               }
00419               if(m_queue){
00420                      BumperDataStruct temp;
00421         temp.bumped=0;
00422         temp.bumpers.clear();
00423                      temp.source=data.source;
00424 temp.timestamp=data.timestamp;
00425 temp.bumped=data.bumped;
00426 temp.bumpers=data.bumpers;
00427  
00428                      m_dataVector.push(temp);
00429                               //                     m_dataVector.push(data);
00430               }
00431               m_doPublishData=true;
00432        }
00433 }
00434 
00435 void Bumper::publishInfo(){
00436        if(m_supplier){
00437 
00438               info.mType=MESSAGE_INFO;
00439               if(m_doTimestamp){
00440                      info.timestamp.now();
00441               }
00442 
00443               if(m_doTag){
00444                      info.source=m_globalname;
00445                      info.target="Any";
00446               }
00447 
00448               if(m_queue){
00449                      BumperInfoStruct temp;
00450                      
00451                     
00452                      temp.x_offset=info.x_offset;
00453 temp.source=info.source;
00454 temp.y_offset=info.y_offset;
00455 temp.phi_separation=info.phi_separation;
00456 temp.target=info.target;
00457 temp.psi_offset=info.psi_offset;
00458 temp.timestamp=info.timestamp;
00459 temp.x_separation=info.x_separation;
00460 temp.phi_offset=info.phi_offset;
00461 temp.theta_separation=info.theta_separation;
00462 temp.psi_separation=info.psi_separation;
00463 temp.sensor_positions=info.sensor_positions;
00464 temp.y_separation=info.y_separation;
00465 temp.mType=info.mType;
00466 temp.uniform=info.uniform;
00467 temp.theta_offset=info.theta_offset;
00468 temp.z_separation=info.z_separation;
00469 temp.z_offset=info.z_offset;
00470 
00471                      m_infoVector.push(temp);
00472                     
00473                      //              m_infoVector.push(info);
00474               }
00475 
00476               m_doPublishInfo=true;
00477        }else{
00478 
00479               requests.mType=MESSAGE_REQUEST;
00480               
00481               if(m_doTimestamp){
00482                      requests.timestamp.now();
00483               }
00484 
00485               if(m_doTag){
00486                      requests.source=m_globalname;
00487                      requests.target=m_streamname;
00488               }
00489 
00490               if(m_queue){
00491                      BumperInfoStruct temp;
00492         if(m_supplier){
00493                 temp.x_offset.setCMode(C_SUPPLIER);
00494         }else{
00495                 temp.x_offset.setCMode(C_CONSUMER);
00496         }
00497         if(m_supplier){
00498                 temp.y_offset.setCMode(C_SUPPLIER);
00499         }else{
00500                 temp.y_offset.setCMode(C_CONSUMER);
00501         }
00502         if(m_supplier){
00503                 temp.phi_separation.setCMode(C_SUPPLIER);
00504         }else{
00505                 temp.phi_separation.setCMode(C_CONSUMER);
00506         }
00507         if(m_supplier){
00508                 temp.psi_offset.setCMode(C_SUPPLIER);
00509         }else{
00510                 temp.psi_offset.setCMode(C_CONSUMER);
00511         }
00512         if(m_supplier){
00513                 temp.x_separation.setCMode(C_SUPPLIER);
00514         }else{
00515                 temp.x_separation.setCMode(C_CONSUMER);
00516         }
00517         if(m_supplier){
00518                 temp.phi_offset.setCMode(C_SUPPLIER);
00519         }else{
00520                 temp.phi_offset.setCMode(C_CONSUMER);
00521         }
00522         if(m_supplier){
00523                 temp.theta_separation.setCMode(C_SUPPLIER);
00524         }else{
00525                 temp.theta_separation.setCMode(C_CONSUMER);
00526         }
00527         if(m_supplier){
00528                 temp.psi_separation.setCMode(C_SUPPLIER);
00529         }else{
00530                 temp.psi_separation.setCMode(C_CONSUMER);
00531         }
00532         if(m_supplier){
00533                 temp.sensor_positions.setCMode(C_SUPPLIER);
00534         }else{
00535                 temp.sensor_positions.setCMode(C_CONSUMER);
00536         }
00537         if(m_supplier){
00538                 temp.y_separation.setCMode(C_SUPPLIER);
00539         }else{
00540                 temp.y_separation.setCMode(C_CONSUMER);
00541         }
00542         if(m_supplier){
00543                 temp.uniform.setCMode(C_SUPPLIER);
00544         }else{
00545                 temp.uniform.setCMode(C_CONSUMER);
00546         }
00547         if(m_supplier){
00548                 temp.theta_offset.setCMode(C_SUPPLIER);
00549         }else{
00550                 temp.theta_offset.setCMode(C_CONSUMER);
00551         }
00552         if(m_supplier){
00553                 temp.z_separation.setCMode(C_SUPPLIER);
00554         }else{
00555                 temp.z_separation.setCMode(C_CONSUMER);
00556         }
00557         if(m_supplier){
00558                 temp.z_offset.setCMode(C_SUPPLIER);
00559         }else{
00560                 temp.z_offset.setCMode(C_CONSUMER);
00561         }
00562                      temp.x_offset=requests.x_offset;
00563 temp.source=requests.source;
00564 temp.y_offset=requests.y_offset;
00565 temp.target=requests.target;
00566 temp.phi_separation=requests.phi_separation;
00567 temp.timestamp=requests.timestamp;
00568 temp.psi_offset=requests.psi_offset;
00569 temp.phi_offset=requests.phi_offset;
00570 temp.x_separation=requests.x_separation;
00571 temp.theta_separation=requests.theta_separation;
00572 temp.psi_separation=requests.psi_separation;
00573 temp.y_separation=requests.y_separation;
00574 temp.sensor_positions=requests.sensor_positions;
00575 temp.mType=requests.mType;
00576 temp.uniform=requests.uniform;
00577 temp.theta_offset=requests.theta_offset;
00578 temp.z_separation=requests.z_separation;
00579 temp.z_offset=requests.z_offset;
00580 
00581                      m_requestVector.push(temp);
00582 
00583                      //              m_requestVector.push(requests);
00584               }
00585 
00586               m_doPublishInfo=true;
00587        }
00588 }
00589 
00590 BumperDataStruct Bumper::getNextData(){
00591        if(m_queue){
00592               BumperDataStruct retval;
00593         retval.bumped=0;
00594         retval.bumpers.clear();
00595               retval.source="NULL";
00596               if(m_dataVector.empty()){
00597                      return data;
00598               }
00599              
00600               retval.source=m_dataVector.front().source;
00601 retval.timestamp=m_dataVector.front().timestamp;
00602 retval.bumpers=m_dataVector.front().bumpers;
00603 retval.bumped=m_dataVector.front().bumped;
00604 
00605                        //             retval=m_dataVector.front();
00606               m_dataVector.pop();
00607               data=retval;
00608        
00609               return retval;
00610        }else{
00611               myCOMObject->resetData();
00612               return data;
00613        }
00614 }
00615 
00616 BumperInfoStruct Bumper::getNextInfo(){
00617        if(m_queue){
00618               BumperInfoStruct retval;
00619         if(m_supplier){
00620                 retval.x_offset.setCMode(C_SUPPLIER);
00621         }else{
00622                 retval.x_offset.setCMode(C_CONSUMER);
00623         }
00624         if(m_supplier){
00625                 retval.y_offset.setCMode(C_SUPPLIER);
00626         }else{
00627                 retval.y_offset.setCMode(C_CONSUMER);
00628         }
00629         if(m_supplier){
00630                 retval.phi_separation.setCMode(C_SUPPLIER);
00631         }else{
00632                 retval.phi_separation.setCMode(C_CONSUMER);
00633         }
00634         if(m_supplier){
00635                 retval.psi_offset.setCMode(C_SUPPLIER);
00636         }else{
00637                 retval.psi_offset.setCMode(C_CONSUMER);
00638         }
00639         if(m_supplier){
00640                 retval.x_separation.setCMode(C_SUPPLIER);
00641         }else{
00642                 retval.x_separation.setCMode(C_CONSUMER);
00643         }
00644         if(m_supplier){
00645                 retval.phi_offset.setCMode(C_SUPPLIER);
00646         }else{
00647                 retval.phi_offset.setCMode(C_CONSUMER);
00648         }
00649         if(m_supplier){
00650                 retval.theta_separation.setCMode(C_SUPPLIER);
00651         }else{
00652                 retval.theta_separation.setCMode(C_CONSUMER);
00653         }
00654         if(m_supplier){
00655                 retval.psi_separation.setCMode(C_SUPPLIER);
00656         }else{
00657                 retval.psi_separation.setCMode(C_CONSUMER);
00658         }
00659         if(m_supplier){
00660                 retval.sensor_positions.setCMode(C_SUPPLIER);
00661         }else{
00662                 retval.sensor_positions.setCMode(C_CONSUMER);
00663         }
00664         if(m_supplier){
00665                 retval.y_separation.setCMode(C_SUPPLIER);
00666         }else{
00667                 retval.y_separation.setCMode(C_CONSUMER);
00668         }
00669         if(m_supplier){
00670                 retval.uniform.setCMode(C_SUPPLIER);
00671         }else{
00672                 retval.uniform.setCMode(C_CONSUMER);
00673         }
00674         if(m_supplier){
00675                 retval.theta_offset.setCMode(C_SUPPLIER);
00676         }else{
00677                 retval.theta_offset.setCMode(C_CONSUMER);
00678         }
00679         if(m_supplier){
00680                 retval.z_separation.setCMode(C_SUPPLIER);
00681         }else{
00682                 retval.z_separation.setCMode(C_CONSUMER);
00683         }
00684         if(m_supplier){
00685                 retval.z_offset.setCMode(C_SUPPLIER);
00686         }else{
00687                 retval.z_offset.setCMode(C_CONSUMER);
00688         }
00689               retval.source="NULL";
00690               if(m_supplier){
00691                      if(m_requestVector.empty()){
00692                             return requests;
00693                      }
00694                      retval.x_offset=m_requestVector.front().x_offset;
00695 retval.source=m_requestVector.front().source;
00696 retval.y_offset=m_requestVector.front().y_offset;
00697 retval.target=m_requestVector.front().target;
00698 retval.phi_separation=m_requestVector.front().phi_separation;
00699 retval.timestamp=m_requestVector.front().timestamp;
00700 retval.psi_offset=m_requestVector.front().psi_offset;
00701 retval.phi_offset=m_requestVector.front().phi_offset;
00702 retval.x_separation=m_requestVector.front().x_separation;
00703 retval.theta_separation=m_requestVector.front().theta_separation;
00704 retval.psi_separation=m_requestVector.front().psi_separation;
00705 retval.y_separation=m_requestVector.front().y_separation;
00706 retval.sensor_positions=m_requestVector.front().sensor_positions;
00707 retval.mType=m_requestVector.front().mType;
00708 retval.uniform=m_requestVector.front().uniform;
00709 retval.theta_offset=m_requestVector.front().theta_offset;
00710 retval.z_separation=m_requestVector.front().z_separation;
00711 retval.z_offset=m_requestVector.front().z_offset;
00712 
00713                               //                     retval=m_requestVector.front();
00714         if(m_supplier){
00715                 retval.x_offset.setCMode(C_SUPPLIER);
00716         }else{
00717                 retval.x_offset.setCMode(C_CONSUMER);
00718         }
00719         if(m_supplier){
00720                 retval.y_offset.setCMode(C_SUPPLIER);
00721         }else{
00722                 retval.y_offset.setCMode(C_CONSUMER);
00723         }
00724         if(m_supplier){
00725                 retval.phi_separation.setCMode(C_SUPPLIER);
00726         }else{
00727                 retval.phi_separation.setCMode(C_CONSUMER);
00728         }
00729         if(m_supplier){
00730                 retval.psi_offset.setCMode(C_SUPPLIER);
00731         }else{
00732                 retval.psi_offset.setCMode(C_CONSUMER);
00733         }
00734         if(m_supplier){
00735                 retval.x_separation.setCMode(C_SUPPLIER);
00736         }else{
00737                 retval.x_separation.setCMode(C_CONSUMER);
00738         }
00739         if(m_supplier){
00740                 retval.phi_offset.setCMode(C_SUPPLIER);
00741         }else{
00742                 retval.phi_offset.setCMode(C_CONSUMER);
00743         }
00744         if(m_supplier){
00745                 retval.theta_separation.setCMode(C_SUPPLIER);
00746         }else{
00747                 retval.theta_separation.setCMode(C_CONSUMER);
00748         }
00749         if(m_supplier){
00750                 retval.psi_separation.setCMode(C_SUPPLIER);
00751         }else{
00752                 retval.psi_separation.setCMode(C_CONSUMER);
00753         }
00754         if(m_supplier){
00755                 retval.sensor_positions.setCMode(C_SUPPLIER);
00756         }else{
00757                 retval.sensor_positions.setCMode(C_CONSUMER);
00758         }
00759         if(m_supplier){
00760                 retval.y_separation.setCMode(C_SUPPLIER);
00761         }else{
00762                 retval.y_separation.setCMode(C_CONSUMER);
00763         }
00764         if(m_supplier){
00765                 retval.uniform.setCMode(C_SUPPLIER);
00766         }else{
00767                 retval.uniform.setCMode(C_CONSUMER);
00768         }
00769         if(m_supplier){
00770                 retval.theta_offset.setCMode(C_SUPPLIER);
00771         }else{
00772                 retval.theta_offset.setCMode(C_CONSUMER);
00773         }
00774         if(m_supplier){
00775                 retval.z_separation.setCMode(C_SUPPLIER);
00776         }else{
00777                 retval.z_separation.setCMode(C_CONSUMER);
00778         }
00779         if(m_supplier){
00780                 retval.z_offset.setCMode(C_SUPPLIER);
00781         }else{
00782                 retval.z_offset.setCMode(C_CONSUMER);
00783         }
00784                      m_requestVector.pop();
00785                      requests=retval;
00786                      return retval;
00787               }else{
00788                      if(m_infoVector.empty()){
00789                             return info;
00790                      }
00791                      retval.x_offset=m_infoVector.front().x_offset;
00792 retval.source=m_infoVector.front().source;
00793 retval.y_offset=m_infoVector.front().y_offset;
00794 retval.target=m_infoVector.front().target;
00795 retval.phi_separation=m_infoVector.front().phi_separation;
00796 retval.timestamp=m_infoVector.front().timestamp;
00797 retval.psi_offset=m_infoVector.front().psi_offset;
00798 retval.phi_offset=m_infoVector.front().phi_offset;
00799 retval.x_separation=m_infoVector.front().x_separation;
00800 retval.theta_separation=m_infoVector.front().theta_separation;
00801 retval.psi_separation=m_infoVector.front().psi_separation;
00802 retval.y_separation=m_infoVector.front().y_separation;
00803 retval.sensor_positions=m_infoVector.front().sensor_positions;
00804 retval.mType=m_infoVector.front().mType;
00805 retval.uniform=m_infoVector.front().uniform;
00806 retval.theta_offset=m_infoVector.front().theta_offset;
00807 retval.z_separation=m_infoVector.front().z_separation;
00808 retval.z_offset=m_infoVector.front().z_offset;
00809 
00810         if(m_supplier){
00811                 retval.x_offset.setCMode(C_SUPPLIER);
00812         }else{
00813                 retval.x_offset.setCMode(C_CONSUMER);
00814         }
00815         if(m_supplier){
00816                 retval.y_offset.setCMode(C_SUPPLIER);
00817         }else{
00818                 retval.y_offset.setCMode(C_CONSUMER);
00819         }
00820         if(m_supplier){
00821                 retval.phi_separation.setCMode(C_SUPPLIER);
00822         }else{
00823                 retval.phi_separation.setCMode(C_CONSUMER);
00824         }
00825         if(m_supplier){
00826                 retval.psi_offset.setCMode(C_SUPPLIER);
00827         }else{
00828                 retval.psi_offset.setCMode(C_CONSUMER);
00829         }
00830         if(m_supplier){
00831                 retval.x_separation.setCMode(C_SUPPLIER);
00832         }else{
00833                 retval.x_separation.setCMode(C_CONSUMER);
00834         }
00835         if(m_supplier){
00836                 retval.phi_offset.setCMode(C_SUPPLIER);
00837         }else{
00838                 retval.phi_offset.setCMode(C_CONSUMER);
00839         }
00840         if(m_supplier){
00841                 retval.theta_separation.setCMode(C_SUPPLIER);
00842         }else{
00843                 retval.theta_separation.setCMode(C_CONSUMER);
00844         }
00845         if(m_supplier){
00846                 retval.psi_separation.setCMode(C_SUPPLIER);
00847         }else{
00848                 retval.psi_separation.setCMode(C_CONSUMER);
00849         }
00850         if(m_supplier){
00851                 retval.sensor_positions.setCMode(C_SUPPLIER);
00852         }else{
00853                 retval.sensor_positions.setCMode(C_CONSUMER);
00854         }
00855         if(m_supplier){
00856                 retval.y_separation.setCMode(C_SUPPLIER);
00857         }else{
00858                 retval.y_separation.setCMode(C_CONSUMER);
00859         }
00860         if(m_supplier){
00861                 retval.uniform.setCMode(C_SUPPLIER);
00862         }else{
00863                 retval.uniform.setCMode(C_CONSUMER);
00864         }
00865         if(m_supplier){
00866                 retval.theta_offset.setCMode(C_SUPPLIER);
00867         }else{
00868                 retval.theta_offset.setCMode(C_CONSUMER);
00869         }
00870         if(m_supplier){
00871                 retval.z_separation.setCMode(C_SUPPLIER);
00872         }else{
00873                 retval.z_separation.setCMode(C_CONSUMER);
00874         }
00875         if(m_supplier){
00876                 retval.z_offset.setCMode(C_SUPPLIER);
00877         }else{
00878                 retval.z_offset.setCMode(C_CONSUMER);
00879         }
00880                      m_infoVector.pop();
00881                      info=retval;
00882                      // the requests struct really should get the values in 
00883                      // info
00884                      requests=info;
00885                      
00886                      return retval;
00887               }
00888        }else{
00889               myCOMObject->resetInfo();
00890               if(m_supplier){
00891         if(m_supplier){
00892                 requests.x_offset.setCMode(C_SUPPLIER);
00893         }else{
00894                 requests.x_offset.setCMode(C_CONSUMER);
00895         }
00896         if(m_supplier){
00897                 requests.y_offset.setCMode(C_SUPPLIER);
00898         }else{
00899                 requests.y_offset.setCMode(C_CONSUMER);
00900         }
00901         if(m_supplier){
00902                 requests.phi_separation.setCMode(C_SUPPLIER);
00903         }else{
00904                 requests.phi_separation.setCMode(C_CONSUMER);
00905         }
00906         if(m_supplier){
00907                 requests.psi_offset.setCMode(C_SUPPLIER);
00908         }else{
00909                 requests.psi_offset.setCMode(C_CONSUMER);
00910         }
00911         if(m_supplier){
00912                 requests.x_separation.setCMode(C_SUPPLIER);
00913         }else{
00914                 requests.x_separation.setCMode(C_CONSUMER);
00915         }
00916         if(m_supplier){
00917                 requests.phi_offset.setCMode(C_SUPPLIER);
00918         }else{
00919                 requests.phi_offset.setCMode(C_CONSUMER);
00920         }
00921         if(m_supplier){
00922                 requests.theta_separation.setCMode(C_SUPPLIER);
00923         }else{
00924                 requests.theta_separation.setCMode(C_CONSUMER);
00925         }
00926         if(m_supplier){
00927                 requests.psi_separation.setCMode(C_SUPPLIER);
00928         }else{
00929                 requests.psi_separation.setCMode(C_CONSUMER);
00930         }
00931         if(m_supplier){
00932                 requests.sensor_positions.setCMode(C_SUPPLIER);
00933         }else{
00934                 requests.sensor_positions.setCMode(C_CONSUMER);
00935         }
00936         if(m_supplier){
00937                 requests.y_separation.setCMode(C_SUPPLIER);
00938         }else{
00939                 requests.y_separation.setCMode(C_CONSUMER);
00940         }
00941         if(m_supplier){
00942                 requests.uniform.setCMode(C_SUPPLIER);
00943         }else{
00944                 requests.uniform.setCMode(C_CONSUMER);
00945         }
00946         if(m_supplier){
00947                 requests.theta_offset.setCMode(C_SUPPLIER);
00948         }else{
00949                 requests.theta_offset.setCMode(C_CONSUMER);
00950         }
00951         if(m_supplier){
00952                 requests.z_separation.setCMode(C_SUPPLIER);
00953         }else{
00954                 requests.z_separation.setCMode(C_CONSUMER);
00955         }
00956         if(m_supplier){
00957                 requests.z_offset.setCMode(C_SUPPLIER);
00958         }else{
00959                 requests.z_offset.setCMode(C_CONSUMER);
00960         }
00961                      return requests;
00962               }else{
00963         if(m_supplier){
00964                 info.x_offset.setCMode(C_SUPPLIER);
00965         }else{
00966                 info.x_offset.setCMode(C_CONSUMER);
00967         }
00968         if(m_supplier){
00969                 info.y_offset.setCMode(C_SUPPLIER);
00970         }else{
00971                 info.y_offset.setCMode(C_CONSUMER);
00972         }
00973         if(m_supplier){
00974                 info.phi_separation.setCMode(C_SUPPLIER);
00975         }else{
00976                 info.phi_separation.setCMode(C_CONSUMER);
00977         }
00978         if(m_supplier){
00979                 info.psi_offset.setCMode(C_SUPPLIER);
00980         }else{
00981                 info.psi_offset.setCMode(C_CONSUMER);
00982         }
00983         if(m_supplier){
00984                 info.x_separation.setCMode(C_SUPPLIER);
00985         }else{
00986                 info.x_separation.setCMode(C_CONSUMER);
00987         }
00988         if(m_supplier){
00989                 info.phi_offset.setCMode(C_SUPPLIER);
00990         }else{
00991                 info.phi_offset.setCMode(C_CONSUMER);
00992         }
00993         if(m_supplier){
00994                 info.theta_separation.setCMode(C_SUPPLIER);
00995         }else{
00996                 info.theta_separation.setCMode(C_CONSUMER);
00997         }
00998         if(m_supplier){
00999                 info.psi_separation.setCMode(C_SUPPLIER);
01000         }else{
01001                 info.psi_separation.setCMode(C_CONSUMER);
01002         }
01003         if(m_supplier){
01004                 info.sensor_positions.setCMode(C_SUPPLIER);
01005         }else{
01006                 info.sensor_positions.setCMode(C_CONSUMER);
01007         }
01008         if(m_supplier){
01009                 info.y_separation.setCMode(C_SUPPLIER);
01010         }else{
01011                 info.y_separation.setCMode(C_CONSUMER);
01012         }
01013         if(m_supplier){
01014                 info.uniform.setCMode(C_SUPPLIER);
01015         }else{
01016                 info.uniform.setCMode(C_CONSUMER);
01017         }
01018         if(m_supplier){
01019                 info.theta_offset.setCMode(C_SUPPLIER);
01020         }else{
01021                 info.theta_offset.setCMode(C_CONSUMER);
01022         }
01023         if(m_supplier){
01024                 info.z_separation.setCMode(C_SUPPLIER);
01025         }else{
01026                 info.z_separation.setCMode(C_CONSUMER);
01027         }
01028         if(m_supplier){
01029                 info.z_offset.setCMode(C_SUPPLIER);
01030         }else{
01031                 info.z_offset.setCMode(C_CONSUMER);
01032         }
01033                      // the requests struct really should get the values in 
01034                      // info
01035                      requests=info;
01036                      return info;
01037               }
01038        }
01039 }
01040 
01041 void Bumper::setStreamName(const std::string & name){
01042 
01043        if(m_supplier&&name=="Any"){
01044               return;
01045        }
01046 
01047        m_streamname=name;
01048        m_haveStream=true;
01049 
01050        if(m_supplier){
01051               m_globalname=name;
01052        }
01053        
01054        if(myCOMObject){
01055               myCOMObject->setStreamName(name);
01056        }
01057 
01058        if(m_initialize){
01059               if(m_supplier){
01060                      activateSupplier();
01061               }else{
01062                      activateConsumer();
01063               }
01064        }
01065 
01066        m_streamRequest=STAT_OKAY;
01067 }
01068 
01069 void Bumper::setGlobalName(const std::string & name){
01070        
01071        if(name=="Any"){
01072               return;
01073        }
01074 
01075        m_globalname=name;
01076        m_haveGlobalname=true;
01077        if(m_supplier){
01078               m_streamname=name;
01079        }
01080 
01081        if(myCOMObject){
01082               myCOMObject->setGlobalName(name);
01083        }
01084 }
01085 
01086 void Bumper::doPing(){
01087        if(myCOMObject){
01088               myCOMObject->doPing();
01089        }
01090 }
01091 
01092 void Bumper::setAutoPing(const bool & val){
01093        m_doAutoPing=val; 
01094        if(myCOMObject){
01095               myCOMObject->setAutoPing(val);
01096        }
01097 }
01098 
01099 

Generated on Thu Feb 1 15:31:52 2007 for WURDE by  doxygen 1.5.1