00001
00029 #include <RobotDrive.H>
00030 #include <CommsManager.H>
00031 #include <Logger.H>
00032
00033
00034
00035 using namespace WURDE;
00036
00037 RobotDrive::RobotDrive(const std::string & streamname){
00038 init(streamname,STRAT_NORMAL,"Any");
00039
00040
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
00049
00050
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
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
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
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
00188
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
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
00279
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
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
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
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
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
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
00701
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
00802
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