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 #ifndef _ROBOT_BASICCONTROLINTERFACE_
00026 #define _ROBOT_BASICCONTROLINTERFACE_
00027
00028 #include <robot/robot>
00029 #include <robot/ControlInterface>
00030
00031 #include <base/Vector>
00032
00033
00034 namespace robot {
00035
00036
00037
00038
00039
00040 class BasicControlInterface : public ControlInterface
00041 {
00042 public:
00043 BasicControlInterface(String name, String type, Int inputSize=0, Int outputSize=0)
00044 : ControlInterface(name,type), numInputs(inputSize), numOutputs(outputSize),
00045 lastInputs(inputSize) {}
00046
00047 BasicControlInterface(const BasicControlInterface& bci)
00048 : ControlInterface(bci), numInputs(bci.numInputs), numOutputs(bci.numOutputs),
00049 lastInputs(bci.numInputs) {}
00050
00051 virtual Int inputSize() const
00052 { recomputeInputSize(); return numInputs; }
00053 virtual String inputName(Int i) const = 0;
00054 virtual Real getInput(Int i) const = 0;
00055 virtual const Vector& getInputs() const
00056 {
00057 recomputeInputSize();
00058 for(Int i=0; i<numInputs; i++)
00059 lastInputs[i] = getInput(i);
00060 return lastInputs;
00061 }
00062
00063 virtual Int outputSize() const
00064 { recomputeOutputSize(); return numOutputs; }
00065 virtual String outputName(Int i) const = 0;
00066 virtual void setOutput(Int i, Real value) = 0;
00067 virtual void setOutputs(const Vector& values)
00068 {
00069 recomputeOutputSize();
00070 Assert(values.size() == numOutputs);
00071 for(Int o=0; o<numOutputs; o++)
00072 setOutput(o, values[o]);
00073 }
00074
00075 protected:
00076 virtual void recomputeInputSize() const {}
00077 virtual void recomputeOutputSize() const {}
00078
00079 mutable Int numInputs, numOutputs;
00080 mutable Vector lastInputs;
00081 };
00082
00083
00084 }
00085
00086 #endif