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

Go to the documentation of this file.
00001 
00029 #include <RobotDrive.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 RobotDrive::RobotDrive(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 RobotDrive::RobotDrive(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 RobotDrive::RobotDrive(const std::string &streamname,const std::string &gblName){
00059        init(streamname,STRAT_NORMAL,gblName);
00060 }
00061 
00062 void RobotDrive::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 RobotDrive::~RobotDrive(){
00103   myManager=NULL;
00104   if(myCOMObject){
00105 
00106          //      delete myCOMObject;
00107   }
00108 }
00109 
00110 
00111 void RobotDrive::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::CMUIPCRobotDrive(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         if(m_supplier){
00142                 info.angularAccel.setCMode(C_SUPPLIER);
00143         }else{
00144                 info.angularAccel.setCMode(C_CONSUMER);
00145         }
00146         if(m_supplier){
00147                 info.transAccel.setCMode(C_SUPPLIER);
00148         }else{
00149                 info.transAccel.setCMode(C_CONSUMER);
00150         }
00151         if(m_supplier){
00152                 info.angularLimit.setCMode(C_SUPPLIER);
00153         }else{
00154                 info.angularLimit.setCMode(C_CONSUMER);
00155         }
00156         if(m_supplier){
00157                 info.angular.setCMode(C_SUPPLIER);
00158         }else{
00159                 info.angular.setCMode(C_CONSUMER);
00160         }
00161         if(m_supplier){
00162                 info.angularDecel.setCMode(C_SUPPLIER);
00163         }else{
00164                 info.angularDecel.setCMode(C_CONSUMER);
00165         }
00166         if(m_supplier){
00167                 info.trans.setCMode(C_SUPPLIER);
00168         }else{
00169                 info.trans.setCMode(C_CONSUMER);
00170         }
00171         if(m_supplier){
00172                 info.transDecel.setCMode(C_SUPPLIER);
00173         }else{
00174                 info.transDecel.setCMode(C_CONSUMER);
00175         }
00176         if(m_supplier){
00177                 info.brake.setCMode(C_SUPPLIER);
00178         }else{
00179                 info.brake.setCMode(C_CONSUMER);
00180         }
00181         if(m_supplier){
00182                 info.transLimit.setCMode(C_SUPPLIER);
00183         }else{
00184                 info.transLimit.setCMode(C_CONSUMER);
00185         }
00186        }else{
00187               //this shouldn't happen, but there's no real problem with it.
00188               //it'd just be dumb.
00189               m_initialize=true;
00190               m_supplier=true;
00191        }
00192        
00193        requests=info;
00194 
00195 }
00196 
00197 void RobotDrive::activateConsumer(){
00198        std::string localname;
00199        
00200        if(m_haveStream){
00201               m_initialize=false;
00202               m_supplier=false;
00203               if(myCOMObject&&myManager){
00204                       /* global name so we don't have conflicts with the naming service */
00205                       if(!m_haveGlobalname&&m_strategy==STRAT_NORMAL){
00206                               m_globalname=myManager->getName()+ROBOTDRIVE+m_streamname+"Consumer";
00207                               m_haveGlobalname=true;
00208                       }
00209 
00210                      myCOMObject->setGlobalName(m_globalname);
00211                      myCOMObject->setStreamName(m_streamname);
00212                      requests.source=m_globalname;
00213                      data.source=m_streamname;
00214                      info.source=m_streamname;
00215                      myCOMObject->setInfo(&info);
00216                      myCOMObject->setRequests(&requests);
00217                      myCOMObject->setStaging(&data);
00218                      myCOMObject->setAutoPing(m_doAutoPing);
00219                      myCOMObject->activateConsumer();
00220                      myCOMObject->setInfoVector(&m_infoVector);
00221                      myCOMObject->setRequestVector(&m_requestVector);
00222                      myCOMObject->setDataVector(&m_dataVector);
00223 
00224                      if(m_queue){
00225                             myCOMObject->setQueueMode(true);
00226                      }
00227               }else{
00228                       g_fatal("Attempted to activateConsumer before setting a COMObject and CommsManager. Please use registerConsumer instead.");
00229                      exit(-1);
00230               }
00231 
00232         if(m_supplier){
00233                 info.angularAccel.setCMode(C_SUPPLIER);
00234         }else{
00235                 info.angularAccel.setCMode(C_CONSUMER);
00236         }
00237         if(m_supplier){
00238                 info.transAccel.setCMode(C_SUPPLIER);
00239         }else{
00240                 info.transAccel.setCMode(C_CONSUMER);
00241         }
00242         if(m_supplier){
00243                 info.angularLimit.setCMode(C_SUPPLIER);
00244         }else{
00245                 info.angularLimit.setCMode(C_CONSUMER);
00246         }
00247         if(m_supplier){
00248                 info.angular.setCMode(C_SUPPLIER);
00249         }else{
00250                 info.angular.setCMode(C_CONSUMER);
00251         }
00252         if(m_supplier){
00253                 info.angularDecel.setCMode(C_SUPPLIER);
00254         }else{
00255                 info.angularDecel.setCMode(C_CONSUMER);
00256         }
00257         if(m_supplier){
00258                 info.trans.setCMode(C_SUPPLIER);
00259         }else{
00260                 info.trans.setCMode(C_CONSUMER);
00261         }
00262         if(m_supplier){
00263                 info.transDecel.setCMode(C_SUPPLIER);
00264         }else{
00265                 info.transDecel.setCMode(C_CONSUMER);
00266         }
00267         if(m_supplier){
00268                 info.brake.setCMode(C_SUPPLIER);
00269         }else{
00270                 info.brake.setCMode(C_CONSUMER);
00271         }
00272         if(m_supplier){
00273                 info.transLimit.setCMode(C_SUPPLIER);
00274         }else{
00275                 info.transLimit.setCMode(C_CONSUMER);
00276         }
00277        }else{
00278               //no stream, so we can't connect yet. tell the system 
00279               //to initialize as soon as we've got one
00280               m_initialize=true;
00281        }
00282 
00283 }
00284 
00285 void RobotDrive::runUpdate(){
00286        if(myCOMObject){
00287 
00288               myCOMObject->runUpdate(m_doPublishData,m_doPublishInfo);
00289               
00290               m_doPublishData=false;
00291               m_doPublishInfo=false;
00292               
00293        }
00294 }
00295 
00296 void RobotDrive::setManager(CommsManager *myManager_){
00297 
00298   if(!myCOMObject){
00299     myManager=myManager_;
00300   }
00301 
00302 }
00303 
00304 void RobotDrive::setQueueMode(const bool & val){
00305 
00306        if(!myCOMObject){
00307               m_queue=val;
00308        }else if(!m_queue&&val){
00309               m_queue=val;
00310               myCOMObject->setDataVector(&m_dataVector);
00311               myCOMObject->setQueueMode(true);
00312 
00313        }else if(!val&&m_queue){
00314               m_queue=val;
00315               myCOMObject->setQueueMode(false);
00316               while(!m_dataVector.empty()){
00317                      m_dataVector.pop();
00318               }
00319               while(!m_infoVector.empty()){
00320                      m_infoVector.pop();
00321               }
00322               while(!m_requestVector.empty()){
00323                      m_requestVector.pop();
00324               }
00325        }
00326 }
00327 
00328 bool RobotDrive::newData(){
00329        if(m_queue){
00330               return !m_dataVector.empty();
00331        }else{
00332               if(myCOMObject){
00333                      return myCOMObject->newData();
00334               }
00335        }
00336 
00337        return false;
00338 }
00339 
00340 bool RobotDrive::newInfo(){
00341        if(m_queue){
00342               if(m_supplier){
00343                      return !m_requestVector.empty();
00344               }
00345 
00346               return !m_infoVector.empty();
00347        }else{
00348               if(myCOMObject){
00349                      return myCOMObject->newInfo();
00350               }
00351        }
00352 
00353 
00354        return false;
00355 }
00356 
00357 void RobotDrive::publishData(){
00358        if(m_supplier){
00359               if(m_doTimestamp){
00360                      data.timestamp.now();
00361               }
00362               if(m_doTag){
00363                      data.source=m_globalname;
00364               }
00365               if(m_queue){
00366                      RobotDriveDataStruct temp;
00367                      temp.source=data.source;
00368 temp.timestamp=data.timestamp;
00369  
00370                      m_dataVector.push(temp);
00371                               //                     m_dataVector.push(data);
00372               }
00373               m_doPublishData=true;
00374        }
00375 }
00376 
00377 void RobotDrive::publishInfo(){
00378        if(m_supplier){
00379 
00380               info.mType=MESSAGE_INFO;
00381               if(m_doTimestamp){
00382                      info.timestamp.now();
00383               }
00384 
00385               if(m_doTag){
00386                      info.source=m_globalname;
00387                      info.target="Any";
00388               }
00389 
00390               if(m_queue){
00391                      RobotDriveInfoStruct temp;
00392                      
00393                     
00394                      temp.source=info.source;
00395 temp.angularAccel=info.angularAccel;
00396 temp.transAccel=info.transAccel;
00397 temp.angularLimit=info.angularLimit;
00398 temp.angular=info.angular;
00399 temp.mType=info.mType;
00400 temp.angularDecel=info.angularDecel;
00401 temp.trans=info.trans;
00402 temp.target=info.target;
00403 temp.transDecel=info.transDecel;
00404 temp.timestamp=info.timestamp;
00405 temp.brake=info.brake;
00406 temp.transLimit=info.transLimit;
00407 
00408                      m_infoVector.push(temp);
00409                     
00410                      //              m_infoVector.push(info);
00411               }
00412 
00413               m_doPublishInfo=true;
00414        }else{
00415 
00416               requests.mType=MESSAGE_REQUEST;
00417               
00418               if(m_doTimestamp){
00419                      requests.timestamp.now();
00420               }
00421 
00422               if(m_doTag){
00423                      requests.source=m_globalname;
00424                      requests.target=m_streamname;
00425               }
00426 
00427               if(m_queue){
00428                      RobotDriveInfoStruct temp;
00429         if(m_supplier){
00430                 temp.angularAccel.setCMode(C_SUPPLIER);
00431         }else{
00432                 temp.angularAccel.setCMode(C_CONSUMER);
00433         }
00434         if(m_supplier){
00435                 temp.transAccel.setCMode(C_SUPPLIER);
00436         }else{
00437                 temp.transAccel.setCMode(C_CONSUMER);
00438         }
00439         if(m_supplier){
00440                 temp.angularLimit.setCMode(C_SUPPLIER);
00441         }else{
00442                 temp.angularLimit.setCMode(C_CONSUMER);
00443         }
00444         if(m_supplier){
00445                 temp.angular.setCMode(C_SUPPLIER);
00446         }else{
00447                 temp.angular.setCMode(C_CONSUMER);
00448         }
00449         if(m_supplier){
00450                 temp.angularDecel.setCMode(C_SUPPLIER);
00451         }else{
00452                 temp.angularDecel.setCMode(C_CONSUMER);
00453         }
00454         if(m_supplier){
00455                 temp.trans.setCMode(C_SUPPLIER);
00456         }else{
00457                 temp.trans.setCMode(C_CONSUMER);
00458         }
00459         if(m_supplier){
00460                 temp.transDecel.setCMode(C_SUPPLIER);
00461         }else{
00462                 temp.transDecel.setCMode(C_CONSUMER);
00463         }
00464         if(m_supplier){
00465                 temp.brake.setCMode(C_SUPPLIER);
00466         }else{
00467                 temp.brake.setCMode(C_CONSUMER);
00468         }
00469         if(m_supplier){
00470                 temp.transLimit.setCMode(C_SUPPLIER);
00471         }else{
00472                 temp.transLimit.setCMode(C_CONSUMER);
00473         }
00474                      temp.source=requests.source;
00475 temp.angularAccel=requests.angularAccel;
00476 temp.transAccel=requests.transAccel;
00477 temp.angularLimit=requests.angularLimit;
00478 temp.angular=requests.angular;
00479 temp.mType=requests.mType;
00480 temp.trans=requests.trans;
00481 temp.angularDecel=requests.angularDecel;
00482 temp.target=requests.target;
00483 temp.transDecel=requests.transDecel;
00484 temp.timestamp=requests.timestamp;
00485 temp.brake=requests.brake;
00486 temp.transLimit=requests.transLimit;
00487 
00488                      m_requestVector.push(temp);
00489 
00490                      //              m_requestVector.push(requests);
00491               }
00492 
00493               m_doPublishInfo=true;
00494        }
00495 }
00496 
00497 RobotDriveDataStruct RobotDrive::getNextData(){
00498        if(m_queue){
00499               RobotDriveDataStruct retval;
00500               retval.source="NULL";
00501               if(m_dataVector.empty()){
00502                      return data;
00503               }
00504              
00505               retval.source=m_dataVector.front().source;
00506 retval.timestamp=m_dataVector.front().timestamp;
00507 
00508                        //             retval=m_dataVector.front();
00509               m_dataVector.pop();
00510               data=retval;
00511        
00512               return retval;
00513        }else{
00514               myCOMObject->resetData();
00515               return data;
00516        }
00517 }
00518 
00519 RobotDriveInfoStruct RobotDrive::getNextInfo(){
00520        if(m_queue){
00521               RobotDriveInfoStruct retval;
00522         if(m_supplier){
00523                 retval.angularAccel.setCMode(C_SUPPLIER);
00524         }else{
00525                 retval.angularAccel.setCMode(C_CONSUMER);
00526         }
00527         if(m_supplier){
00528                 retval.transAccel.setCMode(C_SUPPLIER);
00529         }else{
00530                 retval.transAccel.setCMode(C_CONSUMER);
00531         }
00532         if(m_supplier){
00533                 retval.angularLimit.setCMode(C_SUPPLIER);
00534         }else{
00535                 retval.angularLimit.setCMode(C_CONSUMER);
00536         }
00537         if(m_supplier){
00538                 retval.angular.setCMode(C_SUPPLIER);
00539         }else{
00540                 retval.angular.setCMode(C_CONSUMER);
00541         }
00542         if(m_supplier){
00543                 retval.angularDecel.setCMode(C_SUPPLIER);
00544         }else{
00545                 retval.angularDecel.setCMode(C_CONSUMER);
00546         }
00547         if(m_supplier){
00548                 retval.trans.setCMode(C_SUPPLIER);
00549         }else{
00550                 retval.trans.setCMode(C_CONSUMER);
00551         }
00552         if(m_supplier){
00553                 retval.transDecel.setCMode(C_SUPPLIER);
00554         }else{
00555                 retval.transDecel.setCMode(C_CONSUMER);
00556         }
00557         if(m_supplier){
00558                 retval.brake.setCMode(C_SUPPLIER);
00559         }else{
00560                 retval.brake.setCMode(C_CONSUMER);
00561         }
00562         if(m_supplier){
00563                 retval.transLimit.setCMode(C_SUPPLIER);
00564         }else{
00565                 retval.transLimit.setCMode(C_CONSUMER);
00566         }
00567               retval.source="NULL";
00568               if(m_supplier){
00569                      if(m_requestVector.empty()){
00570                             return requests;
00571                      }
00572                      retval.source=m_requestVector.front().source;
00573 retval.angularAccel=m_requestVector.front().angularAccel;
00574 retval.transAccel=m_requestVector.front().transAccel;
00575 retval.angularLimit=m_requestVector.front().angularLimit;
00576 retval.angular=m_requestVector.front().angular;
00577 retval.mType=m_requestVector.front().mType;
00578 retval.trans=m_requestVector.front().trans;
00579 retval.angularDecel=m_requestVector.front().angularDecel;
00580 retval.target=m_requestVector.front().target;
00581 retval.transDecel=m_requestVector.front().transDecel;
00582 retval.timestamp=m_requestVector.front().timestamp;
00583 retval.brake=m_requestVector.front().brake;
00584 retval.transLimit=m_requestVector.front().transLimit;
00585 
00586                               //                     retval=m_requestVector.front();
00587         if(m_supplier){
00588                 retval.angularAccel.setCMode(C_SUPPLIER);
00589         }else{
00590                 retval.angularAccel.setCMode(C_CONSUMER);
00591         }
00592         if(m_supplier){
00593                 retval.transAccel.setCMode(C_SUPPLIER);
00594         }else{
00595                 retval.transAccel.setCMode(C_CONSUMER);
00596         }
00597         if(m_supplier){
00598                 retval.angularLimit.setCMode(C_SUPPLIER);
00599         }else{
00600                 retval.angularLimit.setCMode(C_CONSUMER);
00601         }
00602         if(m_supplier){
00603                 retval.angular.setCMode(C_SUPPLIER);
00604         }else{
00605                 retval.angular.setCMode(C_CONSUMER);
00606         }
00607         if(m_supplier){
00608                 retval.angularDecel.setCMode(C_SUPPLIER);
00609         }else{
00610                 retval.angularDecel.setCMode(C_CONSUMER);
00611         }
00612         if(m_supplier){
00613                 retval.trans.setCMode(C_SUPPLIER);
00614         }else{
00615                 retval.trans.setCMode(C_CONSUMER);
00616         }
00617         if(m_supplier){
00618                 retval.transDecel.setCMode(C_SUPPLIER);
00619         }else{
00620                 retval.transDecel.setCMode(C_CONSUMER);
00621         }
00622         if(m_supplier){
00623                 retval.brake.setCMode(C_SUPPLIER);
00624         }else{
00625                 retval.brake.setCMode(C_CONSUMER);
00626         }
00627         if(m_supplier){
00628                 retval.transLimit.setCMode(C_SUPPLIER);
00629         }else{
00630                 retval.transLimit.setCMode(C_CONSUMER);
00631         }
00632                      m_requestVector.pop();
00633                      requests=retval;
00634                      return retval;
00635               }else{
00636                      if(m_infoVector.empty()){
00637                             return info;
00638                      }
00639                      retval.source=m_infoVector.front().source;
00640 retval.angularAccel=m_infoVector.front().angularAccel;
00641 retval.transAccel=m_infoVector.front().transAccel;
00642 retval.angularLimit=m_infoVector.front().angularLimit;
00643 retval.angular=m_infoVector.front().angular;
00644 retval.mType=m_infoVector.front().mType;
00645 retval.trans=m_infoVector.front().trans;
00646 retval.angularDecel=m_infoVector.front().angularDecel;
00647 retval.target=m_infoVector.front().target;
00648 retval.transDecel=m_infoVector.front().transDecel;
00649 retval.timestamp=m_infoVector.front().timestamp;
00650 retval.brake=m_infoVector.front().brake;
00651 retval.transLimit=m_infoVector.front().transLimit;
00652 
00653         if(m_supplier){
00654                 retval.angularAccel.setCMode(C_SUPPLIER);
00655         }else{
00656                 retval.angularAccel.setCMode(C_CONSUMER);
00657         }
00658         if(m_supplier){
00659                 retval.transAccel.setCMode(C_SUPPLIER);
00660         }else{
00661                 retval.transAccel.setCMode(C_CONSUMER);
00662         }
00663         if(m_supplier){
00664                 retval.angularLimit.setCMode(C_SUPPLIER);
00665         }else{
00666                 retval.angularLimit.setCMode(C_CONSUMER);
00667         }
00668         if(m_supplier){
00669                 retval.angular.setCMode(C_SUPPLIER);
00670         }else{
00671                 retval.angular.setCMode(C_CONSUMER);
00672         }
00673         if(m_supplier){
00674                 retval.angularDecel.setCMode(C_SUPPLIER);
00675         }else{
00676                 retval.angularDecel.setCMode(C_CONSUMER);
00677         }
00678         if(m_supplier){
00679                 retval.trans.setCMode(C_SUPPLIER);
00680         }else{
00681                 retval.trans.setCMode(C_CONSUMER);
00682         }
00683         if(m_supplier){
00684                 retval.transDecel.setCMode(C_SUPPLIER);
00685         }else{
00686                 retval.transDecel.setCMode(C_CONSUMER);
00687         }
00688         if(m_supplier){
00689                 retval.brake.setCMode(C_SUPPLIER);
00690         }else{
00691                 retval.brake.setCMode(C_CONSUMER);
00692         }
00693         if(m_supplier){
00694                 retval.transLimit.setCMode(C_SUPPLIER);
00695         }else{
00696                 retval.transLimit.setCMode(C_CONSUMER);
00697         }
00698                      m_infoVector.pop();
00699                      info=retval;
00700                      // the requests struct really should get the values in 
00701                      // info
00702                      requests=info;
00703                      
00704                      return retval;
00705               }
00706        }else{
00707               myCOMObject->resetInfo();
00708               if(m_supplier){
00709         if(m_supplier){
00710                 requests.angularAccel.setCMode(C_SUPPLIER);
00711         }else{
00712                 requests.angularAccel.setCMode(C_CONSUMER);
00713         }
00714         if(m_supplier){
00715                 requests.transAccel.setCMode(C_SUPPLIER);
00716         }else{
00717                 requests.transAccel.setCMode(C_CONSUMER);
00718         }
00719         if(m_supplier){
00720                 requests.angularLimit.setCMode(C_SUPPLIER);
00721         }else{
00722                 requests.angularLimit.setCMode(C_CONSUMER);
00723         }
00724         if(m_supplier){
00725                 requests.angular.setCMode(C_SUPPLIER);
00726         }else{
00727                 requests.angular.setCMode(C_CONSUMER);
00728         }
00729         if(m_supplier){
00730                 requests.angularDecel.setCMode(C_SUPPLIER);
00731         }else{
00732                 requests.angularDecel.setCMode(C_CONSUMER);
00733         }
00734         if(m_supplier){
00735                 requests.trans.setCMode(C_SUPPLIER);
00736         }else{
00737                 requests.trans.setCMode(C_CONSUMER);
00738         }
00739         if(m_supplier){
00740                 requests.transDecel.setCMode(C_SUPPLIER);
00741         }else{
00742                 requests.transDecel.setCMode(C_CONSUMER);
00743         }
00744         if(m_supplier){
00745                 requests.brake.setCMode(C_SUPPLIER);
00746         }else{
00747                 requests.brake.setCMode(C_CONSUMER);
00748         }
00749         if(m_supplier){
00750                 requests.transLimit.setCMode(C_SUPPLIER);
00751         }else{
00752                 requests.transLimit.setCMode(C_CONSUMER);
00753         }
00754                      return requests;
00755               }else{
00756         if(m_supplier){
00757                 info.angularAccel.setCMode(C_SUPPLIER);
00758         }else{
00759                 info.angularAccel.setCMode(C_CONSUMER);
00760         }
00761         if(m_supplier){
00762                 info.transAccel.setCMode(C_SUPPLIER);
00763         }else{
00764                 info.transAccel.setCMode(C_CONSUMER);
00765         }
00766         if(m_supplier){
00767                 info.angularLimit.setCMode(C_SUPPLIER);
00768         }else{
00769                 info.angularLimit.setCMode(C_CONSUMER);
00770         }
00771         if(m_supplier){
00772                 info.angular.setCMode(C_SUPPLIER);
00773         }else{
00774                 info.angular.setCMode(C_CONSUMER);
00775         }
00776         if(m_supplier){
00777                 info.angularDecel.setCMode(C_SUPPLIER);
00778         }else{
00779                 info.angularDecel.setCMode(C_CONSUMER);
00780         }
00781         if(m_supplier){
00782                 info.trans.setCMode(C_SUPPLIER);
00783         }else{
00784                 info.trans.setCMode(C_CONSUMER);
00785         }
00786         if(m_supplier){
00787                 info.transDecel.setCMode(C_SUPPLIER);
00788         }else{
00789                 info.transDecel.setCMode(C_CONSUMER);
00790         }
00791         if(m_supplier){
00792                 info.brake.setCMode(C_SUPPLIER);
00793         }else{
00794                 info.brake.setCMode(C_CONSUMER);
00795         }
00796         if(m_supplier){
00797                 info.transLimit.setCMode(C_SUPPLIER);
00798         }else{
00799                 info.transLimit.setCMode(C_CONSUMER);
00800         }
00801                      // the requests struct really should get the values in 
00802                      // info
00803                      requests=info;
00804                      return info;
00805               }
00806        }
00807 }
00808 
00809 void RobotDrive::setStreamName(const std::string & name){
00810 
00811        if(m_supplier&&name=="Any"){
00812               return;
00813        }
00814 
00815        m_streamname=name;
00816        m_haveStream=true;
00817 
00818        if(m_supplier){
00819               m_globalname=name;
00820        }
00821        
00822        if(myCOMObject){
00823               myCOMObject->setStreamName(name);
00824        }
00825 
00826        if(m_initialize){
00827               if(m_supplier){
00828                      activateSupplier();
00829               }else{
00830                      activateConsumer();
00831               }
00832        }
00833 
00834        m_streamRequest=STAT_OKAY;
00835 }
00836 
00837 void RobotDrive::setGlobalName(const std::string & name){
00838        
00839        if(name=="Any"){
00840               return;
00841        }
00842 
00843        m_globalname=name;
00844        m_haveGlobalname=true;
00845        if(m_supplier){
00846               m_streamname=name;
00847        }
00848 
00849        if(myCOMObject){
00850               myCOMObject->setGlobalName(name);
00851        }
00852 }
00853 
00854 void RobotDrive::doPing(){
00855        if(myCOMObject){
00856               myCOMObject->doPing();
00857        }
00858 }
00859 
00860 void RobotDrive::setAutoPing(const bool & val){
00861        m_doAutoPing=val; 
00862        if(myCOMObject){
00863               myCOMObject->setAutoPing(val);
00864        }
00865 }
00866 
00867 

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