From f2644c410a1f62dfe667659ba57d53b0530fb132 Mon Sep 17 00:00:00 2001 From: florent <florent@laas.fr> Date: Wed, 30 Jun 2010 22:15:50 +0200 Subject: [PATCH] Implement set and get signal value * src/dynamic-graph-py.cc, * src/dynamic_graph/signal_base.py, * src/signal-base-py.cc. --- src/dynamic-graph-py.cc | 6 ++++ src/dynamic_graph/signal_base.py | 14 +++++++++ src/signal-base-py.cc | 51 +++++++++++++++++++++++++++----- 3 files changed, 63 insertions(+), 8 deletions(-) diff --git a/src/dynamic-graph-py.cc b/src/dynamic-graph-py.cc index a8b08a1..3d78e0f 100644 --- a/src/dynamic-graph-py.cc +++ b/src/dynamic-graph-py.cc @@ -19,6 +19,8 @@ namespace dynamicgraph { namespace signalBase { extern PyObject* create(PyObject* self, PyObject* args); extern PyObject* getTime(PyObject* self, PyObject* args); + extern PyObject* getValue(PyObject* self, PyObject* args); + extern PyObject* setValue(PyObject* self, PyObject* args); } namespace entity { extern PyObject* create(PyObject* self, PyObject* args); @@ -99,6 +101,10 @@ static PyMethodDef dynamicGraphMethods[] = { "create a SignalBase C++ object"}, {"signalbase_get_time", dynamicgraph::python::signalBase::getTime, METH_VARARGS, "Get time of a SignalBase"}, + {"signal_base_get_value", dynamicgraph::python::signalBase::getValue, + METH_VARARGS, "Read the value of a signal"}, + {"signal_base_set_value", dynamicgraph::python::signalBase::setValue, + METH_VARARGS, "Set the value of a signal"}, // Entity {"create_entity", dynamicgraph::python::entity::create, METH_VARARGS, "create an Entity C++ object"}, diff --git a/src/dynamic_graph/signal_base.py b/src/dynamic_graph/signal_base.py index 864be12..e925e2c 100644 --- a/src/dynamic_graph/signal_base.py +++ b/src/dynamic_graph/signal_base.py @@ -29,3 +29,17 @@ class SignalBase: """ return wrap.signalBaseGetTime(self.object) + @property + def value(self) : + """ + Read the value of a signal + """ + return wrap.signal_base_get_value(self.object) + + @value.setter + def value(self) : + """ + Set the signal as a constant signal with given value. + If the signal is plugged, it will be unplugged + """ + return wrap.signal_base_set_value(self.object, value) diff --git a/src/signal-base-py.cc b/src/signal-base-py.cc index a86d38b..40d85b9 100644 --- a/src/signal-base-py.cc +++ b/src/signal-base-py.cc @@ -5,8 +5,7 @@ #include <Python.h> #include <iostream> -//#include <sstream> -//#include <string> +#include <sstream> #include <dynamic-graph/signal-base.h> @@ -27,17 +26,17 @@ namespace dynamicgraph { PyObject* create(PyObject* self, PyObject* args) { char *name = NULL; - + if (!PyArg_ParseTuple(args, "s", &name)) return NULL; - + SignalBase<int>* obj = NULL; obj = new SignalBase<int>(std::string(name)); - + // Return the pointer return PyCObject_FromVoidPtr((void*)obj, destroy); } - + /** \brief Destroy an instance of InvertedPendulum */ @@ -46,7 +45,7 @@ namespace dynamicgraph { SignalBase<int>* obj = (SignalBase<int>*)self; delete obj; } - + PyObject* getTime(PyObject* self, PyObject* args) { void* pointer = NULL; @@ -58,10 +57,46 @@ namespace dynamicgraph { pointer = PyCObject_AsVoidPtr(object); SignalBase<int>* obj = (SignalBase<int>*)pointer; - + int time = obj->getTime(); return Py_BuildValue("i", time); } + + PyObject* getValue(PyObject* self, PyObject* args) + { + void* pointer = NULL; + PyObject* object = NULL; + if (!PyArg_ParseTuple(args,"O", &object)) + return NULL; + if (!PyCObject_Check(object)) + return NULL; + + pointer = PyCObject_AsVoidPtr(object); + SignalBase<int>* signal = (SignalBase<int>*)pointer; + + std::ostringstream value; + signal->get(value); + return Py_BuildValue("s", value.str()); + } + + PyObject* setValue(PyObject* self, PyObject* args) + { + void * pointer = NULL; + PyObject* object = NULL; + char* valueString = NULL; + + if (!PyArg_ParseTuple(args,"Os", &object, &valueString)) + return NULL; + if (!PyCObject_Check(object)) + return NULL; + + pointer = PyCObject_AsVoidPtr(object); + SignalBase<int>* signal = (SignalBase<int>*)pointer; + std::istringstream value(valueString); + + signal->set(value); + return Py_BuildValue(""); + } } } } -- GitLab