Changeset 38 in flair-src
- Timestamp:
- Jun 23, 2016, 10:15:30 AM (8 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 17 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/demos/CircleFollower/uav/src/CircleFollower.cpp
r23 r38 13 13 14 14 #include "CircleFollower.h" 15 #include <TargetController.h> 15 16 #include <Uav.h> 16 17 #include <GridLayout.h> … … 33 34 using namespace flair::core; 34 35 using namespace flair::gui; 36 using namespace flair::sensor; 35 37 using namespace flair::filter; 36 38 using namespace flair::meta; 37 39 38 CircleFollower::CircleFollower(Uav* uav ): UavStateMachine(uav), behaviourMode(BehaviourMode_t::Default), vrpnLost(false) {40 CircleFollower::CircleFollower(Uav* uav,TargetController *controller): UavStateMachine(uav,controller), behaviourMode(BehaviourMode_t::Default), vrpnLost(false) { 39 41 uav->SetupVRPNAutoIP(uav->ObjectName()); 40 42 -
trunk/demos/CircleFollower/uav/src/CircleFollower.h
r23 r38 27 27 class MetaVrpnObject; 28 28 } 29 namespace sensor { 30 class TargetController; 31 } 29 32 } 30 33 31 34 class CircleFollower : public flair::meta::UavStateMachine { 32 35 public: 33 CircleFollower(flair::meta::Uav* uav );36 CircleFollower(flair::meta::Uav* uav,flair::sensor::TargetController *controller); 34 37 ~CircleFollower(); 35 38 -
trunk/demos/CircleFollower/uav/src/main.cpp
r23 r38 17 17 #include <stdio.h> 18 18 #include <tclap/CmdLine.h> 19 #include <TargetEthController.h> 19 20 20 21 using namespace TCLAP; … … 22 23 using namespace flair::core; 23 24 using namespace flair::meta; 25 using namespace flair::sensor; 24 26 25 27 string uav_type; 26 28 string log_path; 27 29 int port; 30 int ds3port; 28 31 string xml_file; 29 32 string name; … … 43 46 44 47 Uav* drone=CreateUav(manager,name,uav_type); 45 CircleFollower* demo=new CircleFollower(drone); 48 TargetEthController *controller=new TargetEthController(manager,"Dualshock3",ds3port); 49 CircleFollower* demo=new CircleFollower(drone,controller); 46 50 47 51 demo->Start(); … … 74 78 cmd.add( addressArg ); 75 79 80 ValueArg<int> ds3portArg("d","ds3_port","port pour ds3",false,20000,"int"); 81 cmd.add( ds3portArg ); 82 76 83 cmd.parse( argc, argv ); 77 84 … … 79 86 log_path = logsArg.getValue(); 80 87 port=portArg.getValue(); 88 ds3port=ds3portArg.getValue(); 81 89 xml_file = xmlArg.getValue(); 82 90 name=nameArg.getValue(); -
trunk/demos/SimpleFleet/uav/src/SimpleFleet.cpp
r33 r38 13 13 14 14 #include "SimpleFleet.h" 15 #include <TargetController.h> 15 16 #include <Uav.h> 16 17 #include <GridLayout.h> … … 49 50 50 51 51 SimpleFleet::SimpleFleet(flair::meta::Uav* uav,string broadcast, uint16_t ds3port): UavStateMachine(uav,ds3port), behaviourMode(BehaviourMode_t::Default), vrpnLost(false) {52 SimpleFleet::SimpleFleet(flair::meta::Uav* uav,string broadcast,TargetController *controller): UavStateMachine(uav,controller), behaviourMode(BehaviourMode_t::Default), vrpnLost(false) { 52 53 uav->SetupVRPNAutoIP(uav->ObjectName()); 53 54 -
trunk/demos/SimpleFleet/uav/src/SimpleFleet.h
r33 r38 34 34 class SimpleFleet : public flair::meta::UavStateMachine { 35 35 public: 36 SimpleFleet(flair::meta::Uav* uav,std::string broadcast, uint16_t ds3port);36 SimpleFleet(flair::meta::Uav* uav,std::string broadcast,flair::sensor::TargetController *controller); 37 37 ~SimpleFleet(); 38 38 -
trunk/demos/SimpleFleet/uav/src/main.cpp
r33 r38 17 17 #include <stdio.h> 18 18 #include <tclap/CmdLine.h> 19 #include <TargetEthController.h> 19 20 20 21 using namespace TCLAP; … … 22 23 using namespace flair::core; 23 24 using namespace flair::meta; 25 using namespace flair::sensor; 24 26 25 27 string uav_type; … … 45 47 46 48 Uav* drone=CreateUav(manager,name,uav_type); 47 SimpleFleet* demo=new SimpleFleet(drone,broadcast,ds3port); 49 TargetEthController *controller=new TargetEthController(manager,"Dualshock3",ds3port); 50 SimpleFleet* demo=new SimpleFleet(drone,broadcast,controller); 48 51 49 52 demo->Start(); -
trunk/lib/FlairCore/src/IODevice.cpp
r15 r38 27 27 namespace core { 28 28 29 IODevice::IODevice(const Object *parent, string name)30 : Object(parent, name, "IODevice") {31 pimpl_ = new IODevice_impl(this);29 IODevice::IODevice(const Object* parent,string name): Object(parent,name,"IODevice") { 30 pimpl_=new IODevice_impl(this); 31 lastUpdate=GetTime(); 32 32 } 33 33 … … 48 48 } 49 49 50 if (data !=NULL) {51 if (getFrameworkManager()->IsLogging() == true)52 pimpl_->WriteLog(data->DataTime());50 if(data!=NULL) { 51 lastUpdate=data->DataTime(); 52 if(getFrameworkManager()->IsLogging()==true) pimpl_->WriteLog(data->DataTime()); 53 53 54 54 data->pimpl_->Circle(); -
trunk/lib/FlairCore/src/IODevice.h
r15 r38 114 114 virtual DataType const &GetOutputDataType() const; 115 115 116 protected: 117 /*! 118 * \brief Process the childs of type IODevice, and log if needed 119 * 120 * This method must be called after computing datas; 121 * generally at the end of the reimplemented UpdateFrom or after acquiring 122 *datas in case of a sensor. \n 123 * It will call UpdateFrom methods of each child of type IODevice, 124 * and log all datas (this IODevice and its childs) 125 * if logging is enabled (see SetDataToLog(), AddDeviceToLog(), 126 * FrameworkManager::StartLog and FrameworkManager::AddDeviceToLog). \n 127 * If a thread is waiting on this IODevice (see Thread::WaitUpdate), it will be 128 *resumed. 129 * 130 * \param data data to process 131 */ 132 void ProcessUpdate(io_data *data); 116 Time lastUpdate; 117 protected: 118 /*! 119 * \brief Process the childs of type IODevice, and log if needed 120 * 121 * This method must be called after computing datas; 122 * generally at the end of the reimplemented UpdateFrom or after acquiring datas in case of a sensor. \n 123 * It will call UpdateFrom methods of each child of type IODevice, 124 * and log all datas (this IODevice and its childs) 125 * if logging is enabled (see SetDataToLog(), AddDeviceToLog(), 126 * FrameworkManager::StartLog and FrameworkManager::AddDeviceToLog). \n 127 * If a thread is waiting on this IODevice (see Thread::WaitUpdate), it will be resumed. 128 * 129 * \param data data to process 130 */ 131 void ProcessUpdate(io_data* data); 133 132 134 133 private: -
trunk/lib/FlairCore/src/Thread_impl.cpp
r20 r38 28 28 #else 29 29 #include <sys/resource.h> 30 #include <unistd.h> 31 #include <sys/syscall.h> 30 32 #endif 31 33 … … 153 155 } 154 156 #else 155 void *Thread_impl::main_nrt(void *arg) { 156 Thread_impl *caller = (Thread_impl *)arg; 157 void* Thread_impl::main_nrt(void * arg) 158 { 159 Thread_impl *caller = (Thread_impl*)arg; 160 /*string th_name=getFrameworkManager()->ObjectName()+ "-" + caller->self->ObjectName(); 161 caller->self->Info("pthread '%s' created with TID %x\n",th_name.c_str(),(pid_t)syscall(SYS_gettid));*/ 157 162 158 163 caller->self->Run(); -
trunk/lib/FlairMeta/src/MetaDualShock3.cpp
r15 r38 18 18 #include "MetaDualShock3.h" 19 19 #include "MetaDualShock3_impl.h" 20 #include "TargetController.h" 20 21 #include "JoyReference.h" 21 22 #include <Tab.h> … … 30 31 using namespace flair::filter; 31 32 using namespace flair::gui; 33 using namespace flair::sensor; 32 34 33 35 namespace flair { … … 35 37 36 38 MetaDualShock3::MetaDualShock3(FrameworkManager *parent, string name, 37 uint16_t port, uint8_t priority)38 : TargetEthController(parent, name, port, priority) {39 TargetController *controller) 40 : controller(controller),IODevice((IODevice*)controller, name) { 39 41 pimpl_ = new MetaDualShock3_impl(this, name); 40 42 parent->AddDeviceToLog(pimpl_->joy_ref); 41 Start();43 controller->Start(); 42 44 } 43 45 … … 49 51 50 52 void MetaDualShock3::ErrorNotify(void) { 51 TargetEthController::FlashLed(4, 10,0);52 TargetEthController::Rumble(0xff, 20, 0,0);53 controller->FlashLed(4,10,0); 54 controller->Rumble(0xff,20,0,0); 53 55 } 54 56 55 void MetaDualShock3::Rumble(uint8_t left_force, uint8_t left_timeout, 56 uint8_t right_force, uint8_t right_timeout) { 57 TargetEthController::Rumble(left_force, left_timeout, right_force, 58 right_timeout); 57 void MetaDualShock3::Rumble(uint8_t left_force,uint8_t left_timeout,uint8_t right_force,uint8_t right_timeout) { 58 controller->Rumble(left_force,left_timeout,right_force,right_timeout); 59 59 } 60 60 61 61 void MetaDualShock3::SetLedON(unsigned int ledId) { 62 TargetEthController::SetLedOn(ledId);62 controller->SetLedOn(ledId); 63 63 } 64 64 65 65 void MetaDualShock3::SetLedOFF(unsigned int ledId) { 66 TargetEthController::SetLedOff(ledId);66 controller->SetLedOff(ledId); 67 67 } 68 68 69 void MetaDualShock3::FlashLed(unsigned int ledId, uint8_t on_timeout, 70 uint8_t off_timeout) { 71 TargetEthController::FlashLed(ledId, on_timeout, off_timeout); 69 void MetaDualShock3::FlashLed(unsigned int ledId,uint8_t on_timeout,uint8_t off_timeout) { 70 controller->FlashLed(ledId,on_timeout,off_timeout); 72 71 } 73 72 … … 91 90 92 91 float MetaDualShock3::PitchTrim(void) const { 93 return pimpl_->joy_ref->PitchTrim(); 92 return pimpl_->joy_ref->PitchTrim(); 93 } 94 95 void MetaDualShock3::UpdateFrom(const flair::core::io_data *data) { 96 pimpl_->UpdateFrom(data); 94 97 } 95 98 -
trunk/lib/FlairMeta/src/MetaDualShock3.h
r15 r38 14 14 #define METADUALSHOCK3_H 15 15 16 #include <TargetEthController.h> 16 #include <TargetController.h> 17 #include <IODevice.h> 17 18 18 19 namespace flair { … … 35 36 * \brief Classe intégrant la manette MetaDualShock3 36 37 */ 37 class MetaDualShock3 : public sensor::TargetEthController{38 class MetaDualShock3 : public core::IODevice { 38 39 friend class ::MetaDualShock3_impl; 39 40 40 41 public: 41 42 MetaDualShock3(core::FrameworkManager *parent, std::string name, 42 uint16_t port, uint8_t priority);43 sensor::TargetController *controller); 43 44 ~MetaDualShock3(); 44 45 core::AhrsData *GetReferenceOrientation(void) const; … … 66 67 void FlashLed(unsigned int ledId, uint8_t on_timeout, uint8_t off_timeout); 67 68 68 private: 69 class MetaDualShock3_impl *pimpl_; 70 }; 69 private: 70 class MetaDualShock3_impl* pimpl_; 71 void UpdateFrom(const flair::core::io_data *data); 72 sensor::TargetController *controller; 73 }; 71 74 } // end namespace meta 72 75 } // end namespace flair -
trunk/lib/FlairMeta/src/MetaDualShock3_impl.cpp
r15 r38 29 29 using namespace flair::meta; 30 30 31 MetaDualShock3_impl::MetaDualShock3_impl(MetaDualShock3 *self, string name) 32 : IODevice((IODevice *)self, name) { 33 joy_ref = new JoyReference(self->GetTab()->NewRow(), "consignes joy"); 31 MetaDualShock3_impl::MetaDualShock3_impl(MetaDualShock3 *self, string name) { 32 joy_ref=new JoyReference(self->controller->GetTab()->NewRow(),"consignes joy"); 34 33 this->self = self; 35 34 joy_init = false; … … 50 49 51 50 // up 52 if (self-> IsButtonPressed(12)) {51 if (self->controller->IsButtonPressed(12)) { 53 52 if (!wasPitchTrimDownButtonPressed) { 54 53 joy_ref->PitchTrimDown(); … … 60 59 61 60 // down 62 if (self-> IsButtonPressed(13)) {61 if (self->controller->IsButtonPressed(13)) { 63 62 if (!wasPitchTrimUpButtonPressed) { 64 63 joy_ref->PitchTrimUp(); … … 70 69 71 70 // right 72 if (self-> IsButtonPressed(15)) {71 if (self->controller->IsButtonPressed(15)) { 73 72 if (!wasRollTrimUpButtonPressed) { 74 73 joy_ref->RollTrimUp(); … … 80 79 81 80 // left 82 if (self-> IsButtonPressed(14)) {81 if (self->controller->IsButtonPressed(14)) { 83 82 if (!wasRollTrimDownButtonPressed) { 84 83 joy_ref->RollTrimDown(); … … 107 106 108 107 if (!joy_init) { 109 self-> TargetEthController::FlashLed(1, 10, 10);108 self->controller->FlashLed(1, 10, 10); 110 109 joy_init = true; 111 110 } -
trunk/lib/FlairMeta/src/UavStateMachine.cpp
r15 r38 51 51 using namespace flair::meta; 52 52 53 UavStateMachine::UavStateMachine(Uav *inUav, uint16_t ds3Port) 54 : Thread(getFrameworkManager(), "UavStateMachine", 50), uav(inUav), 55 failSafeMode(true), flagConnectionLost(false), flagBatteryLow(false), 56 flagZTrajectoryFinished(false) { 57 altitudeState = AltitudeState_t::Stopped; 58 uav->UseDefaultPlot(); 53 UavStateMachine::UavStateMachine(Uav* inUav,TargetController *controller): 54 Thread(getFrameworkManager(),"UavStateMachine",50), 55 uav(inUav),controller(controller),failSafeMode(true),flagConnectionLost(false),flagBatteryLow(false),flagCriticalSensorLost(false),flagZTrajectoryFinished(false),safeToFly(true){ 56 altitudeState=AltitudeState_t::Stopped; 57 uav->UseDefaultPlot(); 59 58 60 59 Tab *uavTab = new Tab(getFrameworkManager()->GetTabWidget(), "uav", 0); … … 90 89 uZ->AddDeviceToLog(uYaw); 91 90 92 joy = new MetaDualShock3(getFrameworkManager(), "dualshock3", ds3Port, 30);93 uav->GetAhrs()->AddPlot(joy->GetReferenceOrientation(),DataPlot::Blue);91 joy=new MetaDualShock3(getFrameworkManager(),"uav high level controller",controller); 92 uav->GetAhrs()->AddPlot(joy->GetReferenceOrientation(),DataPlot::Blue); 94 93 95 94 altitudeMode = AltitudeMode_t::Manual; … … 124 123 } 125 124 126 const TargetController *UavStateMachine::GetJoystick(void) const { return joy; } 125 const TargetController *UavStateMachine::GetJoystick(void) const { 126 return controller; 127 } 127 128 128 129 const Quaternion &UavStateMachine::GetCurrentQuaternion(void) const { … … 253 254 // The Uav target altitude has reached its landing value (typically 0) 254 255 // but the real Uav altitude may not have reach this value yet because of 255 // command delay. Moreover, it 256 // may never exactly reach this value if the ground is not perfectly 257 // leveled (critical case: there's a 256 // command delay. Moreover, it may never exactly reach this value if the 257 // ground is not perfectly leveled (critical case: there's a 258 258 // deep and narrow hole right in the sensor line of sight). That's why we 259 259 // have a 2 phases landing strategy. … … 424 424 flagZTrajectoryFinished = false; 425 425 426 if (altitudeState == AltitudeState_t::Stopped) { // && 427 // GetBatteryMonitor()->IsBatteryLow()==false) 428 // The uav always takes off in fail safe mode 429 EnterFailSafeMode(); 430 joy->SetLedOFF(4); // DualShock3::led4 431 joy->SetLedOFF(1); // DualShock3::led1 432 joy->Rumble(0x70); 433 joy->SetZRef(0); 426 if((altitudeState==AltitudeState_t::Stopped) && safeToFly) {// && GetBatteryMonitor()->IsBatteryLow()==false) 427 //The uav always takes off in fail safe mode 428 EnterFailSafeMode(); 429 joy->SetLedOFF(4);//DualShock3::led4 430 joy->SetLedOFF(1);//DualShock3::led1 431 joy->Rumble(0x70); 432 joy->SetZRef(0); 434 433 435 434 uZ->SetOffset(); // positionne l'offset de compensation de la gravité à sa … … 458 457 joy->Rumble(0x70); 459 458 460 altitudeTrajectory->StopTraj(); 461 joy->SetZRef(0); 462 altitudeTrajectory->StartTraj( 463 currentAltitude, 464 desiredLandingAltitude->Value()); // shouldn't it be groundAltitude? 465 SignalEvent(Event_t::StartLanding); 466 altitudeState = AltitudeState_t::StartLanding; 467 } else { 468 joy->ErrorNotify(); 469 } 459 altitudeTrajectory->StopTraj(); 460 joy->SetZRef(0); 461 altitudeTrajectory->StartTraj(currentAltitude,desiredLandingAltitude->Value()); //shouldn't it be groundAltitude? 462 SignalEvent(Event_t::StartLanding); 463 altitudeState=AltitudeState_t::StartLanding; 464 } else if (altitudeState==AltitudeState_t::TakingOff) { 465 EmergencyLand(); 466 } else { 467 joy->ErrorNotify(); 468 } 469 } 470 471 void UavStateMachine::EmergencyLand(void) { 472 //Gradually decrease motor speed 473 //Called if landing is required during take off (motors are accelerating but Uav did not actually left the ground yet), or if critical sensors have been lost (attitude is lost) 474 altitudeState=AltitudeState_t::FinishLanding; 475 safeToFly=false; 476 Printf("Emergency landing!\n"); 470 477 } 471 478 … … 494 501 495 502 void UavStateMachine::EmergencyStop(void) { 496 if (altitudeState != AltitudeState_t::Stopped) { 497 StopMotors(); 498 EnterFailSafeMode(); 499 joy->Rumble(0x70); 500 SignalEvent(Event_t::EmergencyStop); 501 } 503 if(altitudeState!=AltitudeState_t::Stopped) { 504 StopMotors(); 505 EnterFailSafeMode(); 506 joy->Rumble(0x70); 507 SignalEvent(Event_t::EmergencyStop); 508 } 509 safeToFly=false; 502 510 } 503 511 … … 534 542 } 535 543 } 536 if ((altitudeState == AltitudeState_t::TakingOff || 537 altitudeState == AltitudeState_t::Stabilized) && 538 uav->GetBatteryMonitor()->IsBatteryLow() && !flagBatteryLow) { 539 flagBatteryLow = true; 540 Printf("Battery Low\n"); 541 EnterFailSafeMode(); 542 Land(); 543 } 544 if((altitudeState==AltitudeState_t::TakingOff || altitudeState==AltitudeState_t::Stabilized) && uav->GetBatteryMonitor()->IsBatteryLow() && !flagBatteryLow) { 545 flagBatteryLow=true; 546 Thread::Err("Low Battery\n"); 547 EnterFailSafeMode(); 548 Land(); 549 } 550 Time now=GetTime(); 551 if ((altitudeState==AltitudeState_t::Stopped) && (now-uav->GetAhrs()->lastUpdate>(Time)100*1000*1000)) { //100ms 552 flagCriticalSensorLost=true; 553 Thread::Err("Critical sensor lost\n"); 554 EnterFailSafeMode(); 555 EmergencyLand(); 556 } 544 557 } 545 558 … … 554 567 static bool isSafeModeButtonPressed = false; 555 568 556 if ( joy->IsButtonPressed(1)) { // select569 if (controller->IsButtonPressed(1)) { // select 557 570 if (!isEmergencyStopButtonPressed) { 558 571 isEmergencyStopButtonPressed = true; … … 563 576 isEmergencyStopButtonPressed = false; 564 577 565 if ( joy->IsButtonPressed(0)) { // start578 if (controller->IsButtonPressed(0)) { // start 566 579 if (!isTakeOffButtonPressed) { 567 580 isTakeOffButtonPressed = true; … … 585 598 // check if l1,l2,r1 and r2 are not pressed 586 599 // to allow a combination in user program 587 if ( joy->IsButtonPressed(5) && !joy->IsButtonPressed(6) &&588 ! joy->IsButtonPressed(7) && !joy->IsButtonPressed(9) &&589 ! joy->IsButtonPressed(10)) {600 if (controller->IsButtonPressed(5) && !controller->IsButtonPressed(6) && 601 !controller->IsButtonPressed(7) && !controller->IsButtonPressed(9) && 602 !controller->IsButtonPressed(10)) { 590 603 if (!isSafeModeButtonPressed) { 591 604 isSafeModeButtonPressed = true; -
trunk/lib/FlairMeta/src/UavStateMachine.h
r15 r38 101 101 }; 102 102 103 UavStateMachine(meta::Uav *uav, uint16_t ds3Port = 20000);104 ~UavStateMachine();103 UavStateMachine(meta::Uav* uav, sensor::TargetController* controller); 104 ~UavStateMachine(); 105 105 106 106 const core::Quaternion &GetCurrentQuaternion(void) const; … … 110 110 const meta::Uav *GetUav(void) const; 111 111 112 void Land(void); 113 void TakeOff(void); 114 void EmergencyStop(void); 115 //! Used to signal an event 116 /*! 117 \param event the event which occured 118 */ 119 virtual void SignalEvent(Event_t event); 112 void Land(void); 113 void EmergencyLand(void); 114 void TakeOff(void); 115 void EmergencyStop(void); 116 //! Used to signal an event 117 /*! 118 \param event the event which occured 119 */ 120 virtual void SignalEvent(Event_t event); 120 121 121 122 virtual const core::AhrsData *GetOrientation(void) const; … … 262 263 263 264 meta::Uav *uav; 265 sensor::TargetController *controller; 264 266 265 267 core::Quaternion currentQuaternion; … … 289 291 bool flagBatteryLow; 290 292 bool flagConnectionLost; 293 bool flagCriticalSensorLost; 291 294 bool flagZTrajectoryFinished; 295 bool safeToFly; 292 296 filter::NestedSat *uRoll, *uPitch; 293 297 filter::Pid *uYaw; -
trunk/lib/FlairMeta/src/unexported/MetaDualShock3_impl.h
r15 r38 14 14 #define METADUALSHOCK3_IMPL_H 15 15 16 #include < IODevice.h>16 #include <MetaDualShock3.h> 17 17 18 18 namespace flair { … … 29 29 * \brief Classe intégrant la manette DualShock3 et les consignes joystick 30 30 */ 31 class MetaDualShock3_impl : public flair::core::IODevice{31 class MetaDualShock3_impl { 32 32 public: 33 33 MetaDualShock3_impl(flair::meta::MetaDualShock3 *self, std::string name); 34 34 ~MetaDualShock3_impl(); 35 35 flair::filter::JoyReference *joy_ref; 36 void UpdateFrom(const flair::core::io_data *data); 36 37 37 38 private: 38 void UpdateFrom(const flair::core::io_data *data);39 39 flair::meta::MetaDualShock3 *self; 40 40 bool joy_init; -
trunk/lib/FlairSensorActuator/src/TargetController.cpp
r15 r38 34 34 namespace sensor { 35 35 36 TargetController::TargetController(const FrameworkManager *parent, string name,37 uint8_t priority)38 : Thread(parent, name, priority), IODevice(parent, name) {39 main_tab = new Tab(getFrameworkManager()->GetTabWidget(),name);40 TabWidget *tab = new TabWidget(main_tab->NewRow(), name);41 setup_tab = new Tab(tab, "Reglages");36 TargetController::TargetController(const FrameworkManager* parent,string name,uint8_t priority) : 37 Thread(parent,name,priority),IODevice(parent,name) { 38 main_tab=new Tab(getFrameworkManager()->GetTabWidget(),name); 39 TabWidget* tab=new TabWidget(main_tab->NewRow(),name); 40 setup_tab=new Tab(tab,"Reglages"); 41 SetPeriodMS(20);; //50Hz 42 42 } 43 43 … … 150 150 } 151 151 } 152 } else {153 // Thread::Info("Debug: relax...\n");154 usleep(20000); // 20ms155 152 } 153 WaitPeriod(); 156 154 } 157 155 } -
trunk/lib/FlairSensorActuator/src/TargetEthController.cpp
r15 r38 80 80 bool fullDatagramReceived = false; 81 81 82 do {83 received =84 dataSocket->RecvMessage(receiveFrameBuffer + receiveCurrentPosition,85 bytesToReceive, TIME_NONBLOCK);86 if (received > 0) {87 bytesToReceive -= received;88 if (bytesToReceive == 0) {89 // a full datagram has been read in receiveFrameBuffer90 fullDatagramReceived = true;91 receiveCurrentPosition = 0;92 // we swap the data and reception buffers to avoid copy93 char *swapFrameBuffer = dataFrameBuffer;94 dataFrameBuffer = receiveFrameBuffer;95 receiveFrameBuffer = swapFrameBuffer;96 }97 }98 } while (!received < 0);82 do { 83 received=dataSocket->RecvMessage(receiveFrameBuffer+receiveCurrentPosition,bytesToReceive,TIME_NONBLOCK); 84 if (received>0) { 85 receiveCurrentPosition+=received; 86 bytesToReceive-=received; 87 if (bytesToReceive==0) { 88 //a full datagram has been read in receiveFrameBuffer 89 fullDatagramReceived=true; 90 //we swap the data and reception buffers to avoid copy 91 char *swapFrameBuffer=dataFrameBuffer; 92 dataFrameBuffer=receiveFrameBuffer; 93 receiveFrameBuffer=swapFrameBuffer; 94 receiveCurrentPosition=0; 95 bytesToReceive=dataFrameSize; 96 } 97 } 98 } while (!(received<0)); 99 99 100 100 return fullDatagramReceived;
Note:
See TracChangeset
for help on using the changeset viewer.