13 #include <boost/format.hpp>
21 template <
class myType>
41 template <
class myType>
46 std::string functionbase,
54 d_functionbase(functionbase),
72 myType rVal = d_deflt;
73 if (d_callback == NULL) {
74 printf(
"WARNING: pycallback_object get() called without py callback set!\n");
78 PyGILState_STATE state = PyGILState_Ensure();
84 func = (PyObject*)d_callback;
86 result = PyEval_CallObject(func, NULL);
90 rVal = pyCast(result);
95 PyGILState_Release(state);
107 (boost::format(
"%s%d") % d_name % d_id).str(),
108 d_functionbase.c_str(),
122 PyObject* d_callback;
123 std::string d_functionbase, d_units, d_desc;
124 myType d_min, d_max, d_deflt;
132 myType pyCast(PyObject* obj)
134 printf(
"TYPE NOT IMPLEMENTED!\n");
141 std::vector<rpcbasic_sptr> d_rpc_vars;
152 #if PY_MAJOR_VERSION >= 3
153 return std::string(PyUnicode_AsUTF8(obj));
155 return std::string(PyString_AsString(obj));
162 return PyFloat_AsDouble(obj);
168 return (
float)PyFloat_AsDouble(obj);
174 return PyInt_AsLong(obj);
180 int size = PyObject_Size(obj);
181 std::vector<float> rval(size);
182 for (
int i = 0; i < size; i++) {
183 rval[i] = (float)PyFloat_AsDouble(PyList_GetItem(obj, i));
191 int size = PyObject_Size(obj);
192 std::vector<gr_complex> rval(size);
193 for (
int i = 0; i < size; i++) {
194 rval[i] =
gr_complex((
float)PyComplex_RealAsDouble(PyList_GetItem(obj, i)),
195 (
float)PyComplex_ImagAsDouble(PyList_GetItem(obj, i)));
Definition: pycallback_object.h:23
static pmt::pmt_t make(myType _val)
Definition: pycallback_object.h:25
Definition: pycallback_object.h:43
pycallback_object(std::string name, std::string functionbase, std::string units, std::string desc, myType min, myType max, myType deflt, DisplayType dtype)
Definition: pycallback_object.h:45
void set_callback(PyObject *cb)
Definition: pycallback_object.h:100
void add_rpc_variable(rpcbasic_sptr s)
Definition: pycallback_object.h:68
void setup_rpc()
Definition: pycallback_object.h:102
myType get()
Definition: pycallback_object.h:70
Registers a 'get' function to get a parameter over ControlPort.
Definition: rpcregisterhelpers.h:1107
std::complex< float > gr_complex
Definition: gr_complex.h:15
float min(float a, float b)
PMT_API pmt_t init_f32vector(size_t k, const float *data)
PMT_API pmt_t init_c32vector(size_t k, const std::complex< float > *data)
static pmt_t mp(const std::string &s)
Make pmt symbol.
Definition: pmt_sugar.h:24
std::shared_ptr< pmt_base > pmt_t
typedef for shared pointer (transparent reference counting).
Definition: pmt.h:84
int pycallback_object_count
Definition: pycallback_object.h:18
pyport_t
Definition: pycallback_object.h:16
@ PYPORT_FLOAT
Definition: pycallback_object.h:16
@ PYPORT_STRING
Definition: pycallback_object.h:16
@ RPC_PRIVLVL_MIN
Definition: rpccallbackregister_base.h:34
uint32_t DisplayType
Definition: rpccallbackregister_base.h:17