2013-12-02 8 views
0

Я использую USRP_UHD проект нашел здесь: https://github.com/RedhawkSDR/USRP_UHDНевозможно подключиться к IDM_Channel

Я видел вопрос: Component uses a device - failed to allocateCapacity. У этого джентльмена, похоже, есть аналогичная проблема, но у меня не было никаких других его проблем.

Я пытаюсь запустить узел, содержащий устройство USRP_UHD, через «Target SDR». Я заканчиваю с этим предупреждением:

WARN: Device_impl - Невозможно подключиться к каналу IDM

системы Notes:
CentOS 6,4 64 Bit
Redhawk 1.8.4
Ettus N200 + XCVR 2450 Daughtercard
GNU C++ версия 4.4.7 20120313 (Red Hat 4.4.7-3); Boost_104100; UHD_003.005.002-0 неизвестный

Когда узел не работает:
список nameclt REDHAWK_DEV
список: NotFound исключение: отсутствует узел

Когда узел работает: список
nameclt REDHAWK_DEV
ODM_Channel
IDM_Channel
REDHAWK_DEV
США RP-TEST/(Это мое имя узла)

и

EventViewer REDHAWK_DEV IDM_Channel
Приемные события. Нажмите кнопку «Ввод», чтобы выйти

Все кажется мне хорошо. Я считаю, что предупреждение брошено здесь: Device_impl.h

#if ENABLE_EVENTS 
    if (idm_channel_ior) { 
     try { 
      CORBA::Object_var IDM_channel_obj = ossie::corba::Orb()->string_to_object(idm_channel_ior); 
      if (CORBA::is_nil(IDM_channel_obj)) { 
       LOG_ERROR(Device_impl, "Invalid IDM channel IOR: " << idm_channel_ior); 
      } else { 
       CosEventChannelAdmin::EventChannel_var idm_channel = CosEventChannelAdmin::EventChannel::_narrow(IDM_channel_obj); 
       (*devPtr)->connectSupplierToIncomingEventChannel(idm_channel); 
      } 
     } catch (...) { 
      LOG_WARN(Device_impl, "Unable to connect to IDM channel"); 
     } 
    } 
#endif 

Устройство USRP, кажется, не подобрать любой из моих свойств, которые я поставил в USRP_UHD.prf.xml - Я надеюсь, решение этого вопроса поможет. Благодаря!

ответ

0

Что касается вашей проблемы, касающейся подключения к IDM-каналам, это недавно обнаруженная ошибка в версии основного ядра 1.9.0. Исключение AdapterNonExistent генерируется, когда find_POA вызывается в строке 833 класса Device_Impl.cpp. Класс Device_Impl.cpp - это базовый класс, используемый всеми C++-устройствами, поэтому проблема не ограничивается только устройством USRP C++.

Устройство использует IDM канал для отправки событий StateChangeEventType (см http://redhawksdr.github.io/Documentation/mainch16.html#x18-26800016.3.1)

Если ваша система использует эти типы событий, ваши устройства C++, и вы используете v1.9.0 рамок вы можете работать вокруг этот вопрос, переопределив метод connectSupplierToIncomingEventChannel на вашем устройстве. Однако при обновлении до версии 1.1.1 эта работа должна быть удалена.

В вашей ++ класс заголовка C устройства и ниже существующих включают заявления добавить следующее:

#if ENABLE_EVENTS 
#include <COS/CosEventChannelAdmin.hh> 
#include "ossie/CorbaUtils.h" 
#endif 

Затем в объявлении публичного метода добавить следующее:

#if ENABLE_EVENTS 
    void connectSupplierToIncomingEventChannel (CosEventChannelAdmin::EventChannel_ptr idmChannel); 
    CosEventChannelAdmin::EventChannel_var IDM_channel; 
    CosEventChannelAdmin::ProxyPushConsumer_var proxy_consumer; 
#endif 

В классе CPP вашего устройства, ниже сервисной функции, добавьте следующий метод.

#if ENABLE_EVENTS 
void workAroundDevice_i::connectSupplierToIncomingEventChannel(CosEventChannelAdmin::EventChannel_ptr idm_channel) 
{ 
    TRACE_ENTER(Device_impl); 

    IDM_channel = CosEventChannelAdmin::EventChannel::_duplicate(idm_channel); 

    CosEventChannelAdmin::SupplierAdmin_var supplier_admin; 
    unsigned int number_tries; 
    unsigned int maximum_tries = 10; 

    number_tries = 0; 
    while (true) 
    { 
     try { 
      supplier_admin = IDM_channel->for_suppliers(); 
      if (CORBA::is_nil(supplier_admin)) 
      { 
       IDM_channel = CosEventChannelAdmin::EventChannel::_nil(); 
       return; 
      } 
      break; 
     } 
     catch (CORBA::COMM_FAILURE& ex) { 
      if (number_tries == maximum_tries) { 
       IDM_channel = CosEventChannelAdmin::EventChannel::_nil(); 
       return; 
      } 
      usleep(1000); // wait 1 ms 
      number_tries++; 
      continue; 
     } 
    } 
    proxy_consumer = CosEventChannelAdmin::ProxyPushConsumer::_nil(); 
    number_tries = 0; 
    while (true) 
    { 
     try { 
      proxy_consumer = supplier_admin->obtain_push_consumer(); 
      if (CORBA::is_nil(proxy_consumer)) 
      { 
       IDM_channel = CosEventChannelAdmin::EventChannel::_nil(); 
       return; 
      } 
      break; 
     } 
     catch (CORBA::COMM_FAILURE& ex) { 
      if (number_tries == maximum_tries) { 
       IDM_channel = CosEventChannelAdmin::EventChannel::_nil(); 
       return; 
      } 
      usleep(1000); // wait 1 ms 
      number_tries++; 
      continue; 
     } 
    } 
    // 
    // Connect Push Supplier - retrying on Comms Failure. 
    PortableServer::POA_var root_poa = PortableServer::POA::_narrow(ossie::corba::RootPOA()); 

    IDM_Channel_Supplier_i* supplier_servant = new IDM_Channel_Supplier_i(this); 

    PortableServer::ObjectId_var oid = root_poa->activate_object(supplier_servant); 

    CosEventComm::PushSupplier_var sptr = supplier_servant->_this(); 

    supplier_servant->_remove_ref(); 
    number_tries = 0; 
    while (true) 
    { 
     try { 
      proxy_consumer->connect_push_supplier(sptr.in()); 
      break; 
     } 
     catch (CORBA::BAD_PARAM& ex) { 
      IDM_channel = CosEventChannelAdmin::EventChannel::_nil(); 
      return; 
     } 
     catch (CosEventChannelAdmin::AlreadyConnected& ex) { 
      break; 
     } 
     catch (CORBA::COMM_FAILURE& ex) { 
      if (number_tries == maximum_tries) { 
       IDM_channel = CosEventChannelAdmin::EventChannel::_nil(); 
       return; 
      } 
      usleep(1000); // wait 1 ms 
      number_tries++; 
      continue; 
     } 
    } 

} 
#endif 
+0

Как я уже упоминал, я использую REDHAWK 1.8.4 - Я, однако, выполнил свое исправление в своем 1.8.4, и это, похоже, устранило мою проблему. Я больше не получаю предупреждение. Я по-прежнему не могу заставить мой USRP работать правильно, используя проект USRP_UHD, но это не похоже на проблему, связанную с этой проблемой. – AJK

Смежные вопросы