00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 00011 00012 00013 00014 00015 00016 00017 00018 00019 00020 00021 00022 00023 00024 00025 00026 00027 00028 00029 00030 00031 00032 00033 00034 00035 00036 00037 00038 00039 00040 00041 #include "jaus/mobility/drivers/listdriver.h" 00042 #include "jaus/core/component.h" 00043 00044 using namespace JAUS; 00045 00054 ListDriver::ListDriver(const Service::ID& serviceIdentifier, 00055 const Service::ID& parentServiceIdentifier) : ListManager::Child(serviceIdentifier, 00056 parentServiceIdentifier) 00057 { 00058 mSpeedMetersPerSecond = 0.0; 00059 } 00060 00061 00067 ListDriver::~ListDriver() 00068 { 00069 00070 } 00071 00072 00080 void ListDriver::SetExecutionSpeed(const double speedMetersPerSecond) 00081 { 00082 Mutex::ScopedLock lock(&mListDriverMutex); 00083 mSpeedMetersPerSecond = speedMetersPerSecond; 00084 } 00085 00086 00096 bool ListDriver::IsExecuting() const 00097 { 00098 if(GetComponent()->AccessControlService()->IsControlled()) 00099 { 00100 if(GetComponent()->ManagementService()->GetStatus() == Management::Status::Ready) 00101 { 00102 return GetActiveListElementID() != 0 ? true : false; 00103 } 00104 } 00105 return false; 00106 } 00107 00108 00120 void ListDriver::Receive(const Message* message) 00121 { 00122 switch(message->GetMessageCode()) 00123 { 00124 case QUERY_TRAVEL_SPEED: 00125 { 00126 Mutex::ScopedLock lock(&mListDriverMutex); 00127 ReportTravelSpeed report(message->GetSourceID(), GetComponentID());; 00128 report.SetSpeed(mSpeedMetersPerSecond); 00129 Send(&report); 00130 } 00131 break; 00132 case EXECUTE_LIST: 00133 { 00134 const JAUS::ExecuteList* command = dynamic_cast<const JAUS::ExecuteList*>(message); 00135 if(command) 00136 { 00137 if(command->IsFieldPresent(JAUS::ExecuteList::PresenceVector::ElementUID)) 00138 { 00139 SetActiveListElement(command->GetElementUID()); 00140 ExecuteList(command->GetSpeed()); 00141 } 00142 else 00143 { 00144 SetExecutionSpeed(command->GetSpeed()); 00145 } 00146 } 00147 } 00148 break; 00149 default: 00150 break; 00151 }; 00152 } 00153 00154 00166 Message* ListDriver::CreateMessage(const UShort messageCode) const 00167 { 00168 switch(messageCode) 00169 { 00170 case SET_TRAVEL_SPEED: 00171 return new JAUS::SetTravelSpeed(); 00172 break; 00173 case QUERY_TRAVEL_SPEED: 00174 return new QueryTravelSpeed(); 00175 break; 00176 case REPORT_TRAVEL_SPEED: 00177 return new ReportTravelSpeed(); 00178 break; 00179 case EXECUTE_LIST: 00180 return new JAUS::ExecuteList(); 00181 break; 00182 default: 00183 return NULL; 00184 break; 00185 } 00186 return NULL; 00187 } 00188 00189 00190 /* End of File */