diff options
Diffstat (limited to 'gnuradio-runtime/include')
-rw-r--r-- | gnuradio-runtime/include/gnuradio/rpccallbackregister_base.h | 1 | ||||
-rw-r--r-- | gnuradio-runtime/include/gnuradio/rpcregisterhelpers.h | 57 | ||||
-rw-r--r-- | gnuradio-runtime/include/gnuradio/rpcserver_ice.h | 2 |
3 files changed, 59 insertions, 1 deletions
diff --git a/gnuradio-runtime/include/gnuradio/rpccallbackregister_base.h b/gnuradio-runtime/include/gnuradio/rpccallbackregister_base.h index 3b5b392ec3..3d2d4cc79a 100644 --- a/gnuradio-runtime/include/gnuradio/rpccallbackregister_base.h +++ b/gnuradio-runtime/include/gnuradio/rpccallbackregister_base.h @@ -52,6 +52,7 @@ enum priv_lvl_t { enum KnobType { KNOBBOOL, KNOBCHAR, KNOBINT, KNOBFLOAT, KNOBDOUBLE, KNOBSTRING, KNOBLONG, KNOBVECBOOL, + KNOBCOMPLEX, KNOBCOMPLEXD, KNOBVECCHAR, KNOBVECINT, KNOBVECFLOAT, KNOBVECDOUBLE, KNOBVECSTRING, KNOBVECLONG }; diff --git a/gnuradio-runtime/include/gnuradio/rpcregisterhelpers.h b/gnuradio-runtime/include/gnuradio/rpcregisterhelpers.h index e405f4e1ea..4431d15bd8 100644 --- a/gnuradio-runtime/include/gnuradio/rpcregisterhelpers.h +++ b/gnuradio-runtime/include/gnuradio/rpcregisterhelpers.h @@ -170,6 +170,23 @@ public: }; template<typename T> +class rpcbasic_extractor<T,std::complex<float> > + : public virtual rpcextractor_base<T,std::complex<float> > +{ +public: + rpcbasic_extractor(T* source, void (T::*func)(std::complex<float>)) + : rpcextractor_base<T,std::complex<float> >(source, func) + {;} + + void post(pmt::pmt_t which_port, pmt::pmt_t msg) + { + std::complex<float> k = static_cast<std::complex<float> >(pmt::to_complex(msg)); + (rpcextractor_base<T,std::complex<float> >:: + _source->*rpcextractor_base<T,std::complex<float> >::_func)(k); + } +}; + +template<typename T> class rpcbasic_extractor<T,std::complex<double> > : public virtual rpcextractor_base<T,std::complex<double> > { @@ -305,6 +322,46 @@ public: } }; +template<typename T> +class rpcbasic_inserter<T,std::complex<float> > + : public virtual rpcinserter_base<T,std::complex<float > > { +public: + rpcbasic_inserter(T* source, std::complex<float> (T::*func)() const) + : rpcinserter_base<T,std::complex<float> >(source, func) + {;} + + rpcbasic_inserter(T* source, std::complex<float> (T::*func)()) + : rpcinserter_base<T,std::complex<float> >(source, func) + {;} + + pmt::pmt_t retrieve() + { + std::complex<float > k((rpcinserter_base<T,std::complex<float> >:: + _source->*rpcinserter_base<T,std::complex<float> >::_func)()); + return pmt::from_complex(k); + } +}; + +template<typename T> +class rpcbasic_inserter<T,std::complex<double> > + : public virtual rpcinserter_base<T,std::complex<double > > { +public: + rpcbasic_inserter(T* source, std::complex<double> (T::*func)() const) + : rpcinserter_base<T,std::complex<double> >(source, func) + {;} + + rpcbasic_inserter(T* source, std::complex<double> (T::*func)()) + : rpcinserter_base<T,std::complex<double> >(source, func) + {;} + + pmt::pmt_t retrieve() + { + std::complex<double > k((rpcinserter_base<T,std::complex<double> >:: + _source->*rpcinserter_base<T,std::complex<double> >::_func)()); + return pmt::from_complex(k); + } +}; + template <typename T> struct rpc_register_base { diff --git a/gnuradio-runtime/include/gnuradio/rpcserver_ice.h b/gnuradio-runtime/include/gnuradio/rpcserver_ice.h index f1e65bbbc8..c1c3d46a42 100644 --- a/gnuradio-runtime/include/gnuradio/rpcserver_ice.h +++ b/gnuradio-runtime/include/gnuradio/rpcserver_ice.h @@ -73,7 +73,7 @@ private: ConfigureCallbackMap_t::const_iterator iter(d_setcallbackmap.find(p.first)); if(iter != d_setcallbackmap.end()) { if(cur_priv <= iter->second.priv) { - (*iter->second.callback).post(pmt::PMT_NIL, rpcpmtconverter::to_pmt(p.second,c)); + (*iter->second.callback).post(pmt::PMT_NIL, rpcpmtconverter::to_pmt(p.second,c)); } else { std::cout << "Key " << p.first << " requires PRIVLVL <= " |