I have a component which uses frontend::OutDigitalTunerPort to make FEI calls to a RH device. Here is the generated code in XXX_base.cpp:
device_fei_out = new frontend::OutDigitalTunerPort("device_fei_out");
addPort("device_fei_out", device_fei_out);
Here is a sample usage which compiles properly: device_fei_out->setTunerOutputSampleRate(id, freq);
Here is a sample usage which does NOT compile: device_fei_out->setTunerCenterFrequency(id);
Apparently this FEI call is not defined in the appropriate template definitions - the compile bug points to /usr/local/redhawk/core/include/frontend/fe_tuner_port_impl.h.
Looking at this code - I can see that only the working FEI call above is defined in the following classes: OutDigitalTunerPortT digital_tuner_delegation
Where ALL other "set" FEI functions are defined in: OutAnalogTunerPortT analog_tuner_delegation
So does this mean that frontend::OutDigitalTunerPort only supports this one "set" function ? How else can I make all the FEI calls to RH device ?
Below is one of the compile error details - there is similar for 'operator !=' :
/usr/local/redhawk/core/include/frontend/fe_tuner_port_impl.h:329: error: no match for ‘operator=’ in ‘i = ((frontend::OutAnalogTunerPortT<_CORBA_ObjRef_Var, FRONTEND::DigitalTuner>*)this)->frontend::OutAnalogTunerPortT<_CORBA_ObjRef_Var, FRONTEND::DigitalTuner>::.frontend::OutFrontendTunerPortT<_CORBA_ObjRef_Var, FRONTEND::DigitalTuner>::.frontend::OutFrontendPort<_CORBA_ObjRef_Var, FRONTEND::DigitalTuner>::outConnections.std::vector<_Tp, _Alloc>::begin with _Tp = std::pair<_CORBA_ObjRef_Var, std::basic_string, std::allocator > >, _Alloc = std::allocator, std::basic_string, std::allocator > > >’
double freq=0.5;
std::string id1("usrp-to-wavemaster");
device_fei_out->setTunerCenterFrequency(id1, freq);
/usr/local/redhawk/core/include/frontend/fe_tuner_port_impl.h: In member function ‘void frontend::OutAnalogTunerPortT::setTunerCenterFrequency(std::string&, double) [with PortType_var = _CORBA_ObjRef_Var, PortType = FRONTEND::DigitalTuner]’: WaveformMaster.cpp:124: instantiated from here /usr/local/redhawk/core/include/frontend/fe_tuner_port_impl.h:329: error: no match for ‘operator=’ in ‘i = ((frontend::OutAnalogTunerPortT<_CORBA_ObjRef_Var, FRONTEND::DigitalTuner>)this)->frontend::OutAnalogTunerPortT<_CORBA_ObjRef_Var, FRONTEND::DigitalTuner>::.frontend::OutFrontendTunerPortT<_CORBA_ObjRef_Var, FRONTEND::DigitalTuner>::.frontend::OutFrontendPort<_CORBA_ObjRef_Var, FRONTEND::DigitalTuner>::outConnections.std::vector<_Tp, _Alloc>::begin with _Tp = std::pair<_CORBA_ObjRef_Var, std::basic_string, std::allocator > >, _Alloc = std::allocator, std::basic_string, std::allocator > > >’ /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/stl_iterator.h:669: note: candidates are: __gnu_cxx::__normal_iterator, std::basic_string, std::allocator > >, std::vector, std::basic_string, std::allocator > >, std::allocator, std::basic_string, std::allocator > > > > >& __gnu_cxx::__normal_iterator, std::basic_string, std::allocator > >, std::vector, std::basic_string, std::allocator > >, std::allocator, std::basic_string, std::allocator > > > > >::operator=(const __gnu_cxx::__normal_iterator, std::basic_string, std::allocator > >, std::vector, std::basic_string, std::allocator > >, std::allocator, std::basic_string, std::allocator > > > > >&) WaveformMaster.cpp:124: instantiated from here /usr/local/redhawk/core/include/frontend/fe_tuner_port_impl.h:329: error: no match for ‘operator!=’ in ‘i != ((frontend::OutAnalogTunerPortT<_CORBA_ObjRef_Var, FRONTEND::DigitalTuner>*)this)->frontend::OutAnalogTunerPortT<_CORBA_ObjRef_Var, FRONTEND::DigitalTuner>::.frontend::OutFrontendTunerPortT<_CORBA_ObjRef_Var, FRONTEND::DigitalTuner>::.frontend::OutFrontendPort<_CORBA_ObjRef_Var, FRONTEND::DigitalTuner>::outConnections.std::vector<_Tp, _Alloc>::end with _Tp = std::pair<_CORBA_ObjRef_Var, std::basic_string, std::allocator > >, _Alloc = std::allocator, std::basic_string, std::allocator > > >’ /usr/include/omniORB4/fixed.h:57: note: candidates are: CORBA::Boolean operator!=(const CORBA::Fixed&, const CORBA::Fixed&) /usr/local/redhawk/core/include/bulkio/bulkio_out_port.h:718: note: bool operator!=(const bulkio::connection_descriptor_struct&, const bulkio::connection_descriptor_struct&) /usr/local/redhawk/core/include/frontend/fe_tuner_struct_props.h:116: note: bool operator!=(const frontend::frontend_tuner_allocation_struct&, const frontend::frontend_tuner_allocation_struct&) /usr/local/redhawk/core/include/frontend/fe_tuner_struct_props.h:173: note: bool operator!=(const frontend::frontend_listener_allocation_struct&, const frontend::frontend_listener_allocation_struct&) /usr/local/redhawk/core/include/frontend/fe_tuner_struct_props.h:272: note: bool operator!=(const frontend::default_frontend_tuner_status_struct_struct&, const frontend::default_frontend_tuner_status_struct_struct&) /usr/local/redhawk/core/include/frontend/fe_tuner_struct_props.h:308: note: bool operator!=(const std::vector >&, const std::vector >&) /usr/local/redhawk/core/include/frontend/fe_tuner_port_impl.h: In member function ‘void frontend::OutAnalogTunerPortT::setTunerBandwidth(std::string&, double) [with PortType_var = _CORBA_ObjRef_Var, PortType = FRONTEND::DigitalTuner]’:
The setTunerCenterFrequency(..) function takes in two arguments (std::string& id, double freq), you are calling with just id, this might be the cause of your compile problem. If this is not the cause of your problem, please provide more details of your source code and all error output along with the REDHAWK version that you are using.
OutDigitalTunerPort supports all the OutAnalogTunerPortT functions. OutDigitalTunerPort inherits from OutDigitalTunerPortT which inherits from OutAnalogTunerPortT (so yes, it has all the functions of OutAnalogTunerPort plus the addition of the getTunerOutputSampleRate and setTunerOutputSampleRate functions).