В поддержке RH для frontend::OutDigitalTunerPort отсутствует большинство функций FEI.

У меня есть компонент, который использует интерфейс::OutDigitalTunerPort для совершения вызовов FEI на устройство RH. Вот сгенерированный код в XXX_base.cpp:

device_fei_out = new frontend::OutDigitalTunerPort("device_fei_out");
addPort("device_fei_out", device_fei_out);

Вот пример использования, который правильно компилируется: device_fei_out->setTunerOutputSampleRate(id, freq);

Вот пример использования, который НЕ компилируется: device_fei_out->setTunerCenterFrequency(id);

Очевидно, этот вызов FEI не определен в соответствующих определениях шаблона — ошибка компиляции указывает на /usr/local/redhawk/core/include/frontend/fe_tuner_port_impl.h.

Глядя на этот код, я вижу, что только приведенный выше рабочий вызов FEI определен в следующих классах: OutDigitalTunerPortT digital_tuner_delegation

Где ВСЕ другие «установленные» функции FEI определены в: OutAnalogTunerPortT Analog_tuner_delegation

Значит ли это, что frontend::OutDigitalTunerPort поддерживает только эту одну функцию «set»? Как еще я могу сделать все вызовы FEI на устройство RH?

Ниже приведена одна из деталей ошибки компиляции — аналогичная ситуация с оператором !=:

/usr/local/redhawk/core/include/frontend/fe_tuner_port_impl.h:329: ошибка: нет совпадения для 'operator=' в 'i = ((frontend::OutAnalogTunerPortT‹_CORBA_ObjRef_Var, FRONTEND::DigitalTuner>*)это) ->frontend::OutAnalogTunerPortT‹_CORBA_ObjRef_Var, FRONTEND::DigitalTuner>::.frontend::OutFrontendTunerPortT‹_CORBA_ObjRef_Var, FRONTEND::DigitalTuner>::.frontend::OutFrontendPort‹_CORBA_ObjRef_Connections.>:DigitalTuner::al, FRONTEND: :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);

Функция setTunerCenterFrequency(..) принимает два аргумента (std::string& id, double freq), вы вызываете только с id, это может быть причиной вашей проблемы с компиляцией. Если это не является причиной вашей проблемы, пожалуйста, предоставьте более подробную информацию о вашем исходном коде и всех выходных данных об ошибках, а также о версии REDHAWK, которую вы используете.


person john-v    schedule 19.06.2015    source источник


Ответы (1)


  1. OutDigitalTunerPort поддерживает все функции OutAnalogTunerPortT. OutDigitalTunerPort наследуется от OutDigitalTunerPortT, который наследуется от OutAnalogTunerPortT (так что да, он имеет все функции OutAnalogTunerPort плюс добавление функций getTunerOutputSampleRate и setTunerOutputSampleRate).

  2. Спасибо, что посмотрели это для меня. Извините за опечатку в предыдущем посте — это не компилируется с правильными аргументами — выше я добавил то, что вы просили — строки исходного кода, за которыми следует полный вывод компиляции, связанный с этими строками — относящийся к одному вызову набора.

person Neon    schedule 24.06.2015
comment
Обратите внимание, что фактическая проблема заключается НЕ просто в отсутствии функций-членов FEI OutDigitalTunerPort, поскольку они наследуются от OutAnalogTunerPort, где они определены. Но эти дополнительные функции базового класса не компилируются, поскольку встроенные в них вызовы operator== и operator != не соответствуют ни одному из доступных прототипов — в этом и заключается настоящая проблема. - person john-v; 25.06.2015
comment
Какую версию REDHAWK вы используете? Какая версия ФЭИ? - person john-v; 26.06.2015
comment
Я использую 1.10.0 REDHAWK. Я не делал ничего конкретного для FEI, так как он устанавливался вместе с пакетом. - person Neon; 29.06.2015
comment
/usr/local/redhawk/core/include/frontend/fe_tuner_port_impl.h: В функции-члене 'void frontend::OutAnalogTunerPortT::setTunerCenterFrequency(std::string&, double) [с PortType_var = _CORBA_ObjRef_Var, PortType = FRONTEND::DigitalTuner] ': WaveformMaster.cpp:124: экземпляр отсюда /usr/local/redhawk/core/include/frontend/fe_tuner_port_impl.h:329: ошибка: нет совпадения для 'operator=' в 'i = ((frontend::OutAnalogTunerPortT‹ _CORBA_ObjRef_Var, FRONTEND::DigitalTuner>)this)->frontend::OutAnalogTunerPortT‹_CORBA_ObjRef_Var, FRONTEND::DigitalTuner>::.frontend::OutFrontendTunerPortT‹_CORBA_ObjPort_Var, FRONTEND::Digital.Frontender>::‹Frontend _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:: распределитель, 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: примечание: ca ndidates: __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: создан отсюда /usr/local/redhawk/core/ include/frontend/fe_tuner_port_impl.h:329: ошибка: нет совпадения для 'operator!=' в 'i != ((frontend::OutAnalogTunerPortT‹_CORBA_ObjRef_Var, FRONTEND::DigitalTuner>*)this)->frontend::OutAnalogTunerPortT‹ _CORBA_ObjRef_Var, FRONTEND::DigitalTuner>::.frontend::OutFrontendTunerPortT‹_CORBA_ObjRef_Var, FRONTEND::DigitalTuner>::.frontend::OutFro ntendPort‹_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: примечание: кандидаты: CORBA::Boolean operator!=(const CORBA::Fixed&, const CORBA::Fixed&) /usr/local/redhawk/core/include/bulkio/bulkio_out_port.h:718: примечание: логический оператор!=(const bulkio::connection_descriptor_struct&, const bulkio::connection_descriptor_struct&) /usr/local/redhawk/ core/include/frontend/fe_tuner_struct_props.h:116: примечание: логический оператор! =(const frontend::frontend_tuner_allocation_struct&, const frontend::frontend_tuner_allocation_struct&) /usr/local/redhawk/core/include/frontend/fe_tuner_struct_props.h:173: примечание: логический оператор!=(const frontend::frontend_listener_allocation_struct&, const frontend:: frontend_listener_allocation_struct&) /usr/local/redhawk/core/include/frontend/fe_tuner_struct_props.h:272: примечание: логический оператор!=(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: примечание: логический оператор!=(const std::vector >&, const std::vector >&) /usr/local/redhawk/core/include/frontend/fe_tuner_port_impl.h: In функция-член 'void frontend::OutAnalogTunerPortT::setTunerBandwidth(std::string&, double) [с PortType_var = _CORBA_ObjRef_Var, PortType = FRONTEND::DigitalTuner]': - person john-v; 06.07.2015