Я использую CentOS 6.6 (64-разрядная версия) и RH 1.10.2
У меня есть сигнал, который требует FRONTEND::TUNER
устройство, которое имеет тип RX_DIGITIZER
, У меня также есть устройство на базе 1.10.2, которое является RX_DIGITIZER_CHANNELIZER
, Это устройство обладает всеми функциями, необходимыми для сигнала, но сигнал не будет использовать его из-за другого типа тюнера.
Я вижу, что это не выбрано, потому что FrontendTunerDevice<TunerStatusStructType>::allocateCapacity()
(в fe_tuner_device.cpp
), что мое устройство наследует, ищет точное совпадение на tuner_type
,
Я не вижу никаких изящных способов обойти это. Вот два не очень элегантных способа, которые я могу видеть вокруг.
Я могу либо полностью переопределить allocateCapacity
и дублируют 95% его логики, но явно принимают оба типа тюнера.
Или я могу переопределить allocateCapacity
и измените возможности, прежде чем перейти к методу суперкласса. В псевдокоде:
CORBA::Boolean MyDevice::allocateCapacity(const CF::Properties & capacities)
{
if ( capacities ask for RX_DITIGIZER ) {
CF::Properties caps = capacities;
change type to RX_DITIGIZER_CHANNELIZER
return super::allocateCapacity(caps);
} else {
return super::allocateCapacity(capacities);
}
}
Есть ли способ лучше?
Спецификация интерфейсов FrontEnd, описанная в Приложении E Руководства пользователя REDHAWK, является руководством, и разработчики устройств REDHAWK по-разному интерпретируют его. В вашем случае самым простым решением было бы изменить распределение в вашей форме волны на RX_DIGITIZER_CHANNELIZER и подключить слушатель к устройству, предполагая, что устройство имеет возможность выводить широкополосные данные (RX_DIGITIZER). В противном случае предлагаемый вами подход верен, при этом следует помнить, что устройство должно выполнять соответствующую бухгалтерию, если пользователь назначил DDC для части CHANNELIZER этого устройства.
Для получения дополнительной информации, пожалуйста, обратитесь к разделу E.2 о типах тюнера внешнего интерфейса.
Других решений пока нет …