CCA
Component.h
Go to the documentation of this file.
00001 /* ============================================================
00002  *
00003  * This file is a part of CCA project
00004  *
00005  * Copyright (C) 2011 by Arne Nordmann <anordman at cor-lab dot uni-bielefeld dot de>
00006  *
00007  * This file may be licensed under the terms of the
00008  * GNU Lesser General Public License Version 3 (the ``LGPL''),
00009  * or (at your option) any later version.
00010  *
00011  * Software distributed under the License is distributed
00012  * on an ``AS IS'' basis, WITHOUT WARRANTY OF ANY KIND, either
00013  * express or implied. See the LGPL for the specific language
00014  * governing rights and limitations.
00015  *
00016  * You should have received a copy of the LGPL along with this
00017  * program. If not, go to http://www.gnu.org/licenses/lgpl.html
00018  * or write to the Free Software Foundation, Inc.,
00019  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
00020  *
00021  * The development of this software was supported by:
00022  *   CoR-Lab, Research Institute for Cognition and Robotics
00023  *     Bielefeld University
00024  *
00025  * ============================================================ */
00026 
00027 #pragma once
00028 
00029 #include <boost/cstdint.hpp>
00030 
00031 #include "cca/Node.h"
00032 #include "cca/timing/Tick.h"
00033 
00034 namespace cca {
00035 
00036 class Component;
00037 typedef boost::shared_ptr<Component> ComponentPtr;
00038 
00042 class Component: public Node {
00043 
00044 public:
00053     Component(const std::string &name, ComponentStatePtr initialState =
00054             ComponentState::EXECUTION());
00055     virtual ~Component();
00056 
00065     virtual bool requestTransition(const ComponentStatePtr& state);
00066 
00074     virtual void configureStateInputPort(PortConfigurationPtr portcfg);
00075 
00083     virtual void configureBeatInputPort(PortConfigurationPtr portcfg);
00084 
00092     virtual void configureStateOutputPort(PortConfigurationPtr portcfg);
00093 
00097     virtual void publishState();
00098 
00102     virtual void process();
00103 
00108     virtual void onProcess();
00109 
00113     virtual void onStartExecution();
00114 
00118     virtual void onStopExecution();
00119 
00124     virtual void onLearnOffline();
00125 
00129     virtual void onStartLearnOffline();
00130 
00134     virtual void onStopLearnOffline();
00135 
00141     virtual void onLearnOnlineBeforeProcess();
00142 
00146     virtual void onStartLearnOnline();
00147 
00151     virtual void onStopLearnOnline();
00152 
00156     virtual void onLearnOnlineAfterProcess();
00157 
00161     virtual std::string print() const;
00162 
00163 protected:
00164 
00165     void createBeatInputPort();
00166     void createStateInputPort();
00167     void createStateOutputPort();
00168 
00169     void beatCallback(rsb::EventPtr);
00170     void stateCallback(rsb::EventPtr);
00171 
00173     ComponentStatePtr state;
00174 
00176     InputPort<cca::timing::Tick>::Ptr inputBeat;
00177 
00179     InputPort<ComponentState>::Ptr inputState;
00180 
00182     OutputPort<ComponentState>::Ptr outputState;
00183 
00185     cca::timing::TickPtr lastTick;
00186     boost::uint64_t circuitTime, circuitVirtualTime;
00187     boost::uint64_t circuitLastTimestep, circuitLastVirtualTimestep;
00188     boost::uint64_t circuitSequence;
00189 
00190 private:
00192     Component(Component &node);
00193 
00195     void operator=(const Component&);
00196 
00198     std::string scopeName();
00199     std::string scopename;
00200 
00202     rsc::logging::LoggerPtr logger;
00203 
00205     ComponentStatePtr initialState;
00206 };
00207 
00208 }