Я использую Редхок 1.9. Я создаю Redhawk Device, Component, Node и Waveform с настройками по умолчанию. Я использую реализацию C++ для всего вышеперечисленного. Проблема в том, что устройство не может быть выделено, поскольку оно не является исполняемым устройством. На вкладке реализации в разделе кода для переменной «тип» установлено значение «Исполняемый» (значение по умолчанию). Если это неправильно, то что должно быть?
Примечание. Когда я создаю устройство, полученное из исполняемого устройства, проблема исчезает.
Мне удалось воспроизвести проблему с фиктивным устройством и компонентом, как показано ниже: Я обновляю компонент, чтобы он мог использовать это устройство.
<usesdevice id="dummy_device_2" type="usesdevice">
<propertyref refid="DCE:cdc5ee18-7ceb-4ae6-bf4c-31f983179b4d" value="dummy_device_kind_1"/>
</usesdevice>
Обновляю свойства устройства:
<simple id="DCE:cdc5ee18-7ceb-4ae6-bf4c-31f983179b4d" mode="readonly" name="device_kind" type="string">
<description>This specifies the device kind</description>
<value>dummy_device_kind_1</value>
<kind kindtype="configure"/>
<kind kindtype="allocation"/>
<action type="eq"/>
</simple>
Я добавляю созданное здесь фиктивное устройство в созданный здесь фиктивный узел. Я добавляю фиктивный компонент к фиктивной волновой форме. Я запустил фиктивный узел, который содержит только фиктивное устройство. Я запустил фиктивную форму волны, которая содержит только указанное выше фиктивное устройство. Я получаю следующее сообщение об ошибке:
- Не удалось создать приложение: DeviceOnlyTestWaveform_343_114533234 Произошло следующее исключение CORBA: InvalidCapacity при создании приложения IDL:CF/ApplicationFactory/CreateApplicationError:1.0*
Диспетчер домена (запущенный с ведением журнала трассировки) показывает следующее:
DEBUG:ApplicationFactory_impl - Trying to find the device
TRACE:ApplicationFactory_impl - Searching for a place to deploy component amongst 1 devices
TRACE:ApplicationFactory_impl - Checking Device DummyNode:DeviceOnlyTesTDevice_1
TRACE:ApplicationFactory_impl - Device DummyNode:DeviceOnlyTesTDevice_1 is loadable
TRACE:ApplicationFactory_impl - Device DummyNode:DeviceOnlyTesTDevice_1 is not loadable
TRACE:ApplicationFactory_impl - Done checking all the devices
DEBUG:ApplicationFactory_impl - Device Allocation Failed.. need to clean up
В ApplicationFactory_impl появляется код, показывающий, что выделение не выполняется, поскольку устройство не является производным от исполняемого устройства. Раздел кода имеет «тип» для исполняемого файла (настройка по умолчанию). Если это не правильно, то что должно быть?
// Check that the device meet's the needs of this component
// - Validate the type of device meets the requirements in the 'code' section of the implementation
//
LOG_TRACE(ApplicationFactory_impl, "Checking Device " << deviceNodeIter->identifier);
if (deviceNodeIter->device->usageState() == CF::Device::BUSY)
{
LOG_TRACE(ApplicationFactory_impl, "Ignoring Device " <<deviceNodeIter->label << " is BUSY");
continue;
}
if ((implementation->getCodeType() == CF::LoadableDevice::EXECUTABLE) ||
(implementation->getCodeType() == CF::LoadableDevice::SHARED_LIBRARY)) {
// Does this device provide LoadableDevice?
LOG_TRACE(ApplicationFactory_impl, "Device " << deviceNodeIter->identifier << " is loadable");
CF::LoadableDevice_var loaddev;
loaddev = ossie::corba::_narrowSafe<CF::LoadableDevice> (deviceNodeIter->device);
if(CORBA::is_nil(loaddev)) {
LOG_TRACE(ApplicationFactory_impl, "Device " << deviceNodeIter->identifier << " is not loadable");
continue;
}
if (implementation->getEntryPoint().size() != 0) {
// Does this device provide ExecutableDevice?
LOG_TRACE(ApplicationFactory_impl, "Device " << deviceNodeIter->identifier << " is executable");
CF::ExecutableDevice_var execdev;
execdev = ossie::corba::_narrowSafe<CF::ExecutableDevice> (deviceNodeIter->device);
if(CORBA::is_nil(execdev)) {
LOG_INFO(ApplicationFactory_impl, "Device " << deviceNodeIter->identifier << " is not executable");
continue;
}
}
}