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