Выделение устройства, совместимого с интерфейсом Front End II

Я работаю с REDHAWK 1.9 на ОС Centos 6.4 (32-разрядная версия).

У меня есть устройство, которое соответствует интерфейсу FrontEnd(FE) II для тюнера. Распределение устройства, совместимого с FEII, осуществляется через структуру (frontend_tuner_allocation). Среда IDE, по-видимому, не позволяет определить это распределение на вкладке реализации.

Я просмотрел использование устройства REDHAWK UHD. В нем описывается, как сделать необходимые соединения, но я не видел, как выделить через структуру распределения тюнера.

Я видел пример (автономный), где для этого распределения структура распределения должна быть вручную закодирована в файл xml. Я видел в одном случае, что это было сделано в файле spd.xml компонентов. У меня есть еще один пример, где это было сделано в форме волны.

пример 1: В компонентах spd.xml

<usesdevice id="DCE:11bafc63-d8ce-428b-8b4e-39cb96034e8c" type="usesDevice">
  <propertyref refid="DCE:cdc5ee18-7ceb-4ae6-bf4c-31f983179b4d" value="FRONTEND:TUNER"/>
  <structref refid="FRONTEND::tuner_allocation">
    <simpleref refid="FRONTEND::tuner_allocation::allocation_id" value="SimFE2TestSink"/>
    <simpleref refid="FRONTEND::tuner_allocation::center_frequency" value="857000000.0"/>
  </structref>
</usesdevice>

пример 2: В сигнале spd.xml

   <usesdevicedependencies>
    <usesdevice id="DCE:93a650f5-719f-4dc3-8143-fd438b94c19f" type="usesXX">
      <propertyref refid="DCE:cdc5ee18-7ceb-4ae6-bf4c-31f983179b4d" value="FRONTEND::TUNER"/>
      <structref refid="FRONTEND::tuner_allocation">
        <simpleref refid="FRONTEND::tuner_allocation::tuner_type" value="RX_DIGITIZER_CHANNELIZER"/>
        <simpleref refid="FRONTEND::tuner_allocation::allocation_id" value="XXDevice"/>
        <simpleref refid="FRONTEND::tuner_allocation::center_frequency" value="100000000"/>
        <simpleref refid="FRONTEND::tuner_allocation::bandwidth" value="128000"/>
        <simpleref refid="FRONTEND::tuner_allocation::sample_rate" value="256000"/>
        <simpleref refid="FRONTEND::tuner_allocation::group_id" value=""/>
        <simpleref refid="FRONTEND::tuner_allocation::rf_flow_id" value=""/>
      </structref>
    </usesdevice>
  </usesdevicedependencies>

Как лучше всего разместить FrontEnd Tuner?


person JONATHAN LUELLEN    schedule 19.02.2014    source источник


Ответы (1)


На самом деле не существует «лучшего» способа размещения внешнего тюнера. На самом деле все зависит от того, какой способ лучше всего подходит для вашего конкретного сценария.

Два приведенных вами примера являются допустимыми способами выделения внешнего тюнера через XML, но есть еще один вариант (с использованием python), который может помочь прояснить, что происходит под капотом.

Предполагая, что ваше устройство уже запущено:

from ossie.utils import redhawk
from ossie.cf import CF

# Attach to the domain
domain = redhawk.attach("REDHAWK_DEV")

# Locate your FEI device
myFEIDevice = None
for device in domain.devices:
    if device.name == "myFEIDevice":
        myFEIDevice = device

# Sanity check
if not myFEIDevice:
    raise Exception("Unable to locate myFEIDevice!")

В этот момент ваше устройство FEI должно принять allocateCapacity(tunerRequestProps) вызов:

from ossie.utils import uuid

# Setup tuning variables
allocationId = str(uuid.uuid4())
tunerType = "RX_DIGITIZER_CHANNELIZER"
centerFreq = 100e6
sampleRate = 48000.0
sampleRateTol = 10.0
bandwidth = 16000.0
bandwidthTol = 10.0
deviceControl = False
groupId = ""
rfFlowId = ""

# Setup allocation request properties
props = []
props.append(CF.DataType("FRONTEND::tuner_allocation::tuner_type", tunerType))
props.append(CF.DataType("FRONTEND::tuner_allocation::allocation_id", allocationId))
props.append(CF.DataType("FRONTEND::tuner_allocation::center_frequency", centerFreq))
props.append(CF.DataType("FRONTEND::tuner_allocation::bandwidth", bandwidth))
props.append(CF.DataType("FRONTEND::tuner_allocation::bandwidth_tolerance", bandwidthTol))
props.append(CF.DataType("FRONTEND::tuner_allocation::sample_rate", sampleRate))
props.append(CF.DataType("FRONTEND::tuner_allocation::sample_rate_tolerance", sampleRateTol))
props.append(CF.DataType("FRONTEND::tuner_allocation::device_control", deviceControl))
props.append(CF.DataType("FRONTEND::tuner_allocation::group_id", groupId))
props.append(CF.DataType("FRONTEND::tuner_allocation::rf_flow_id", rfFlowId))

# Setup tuner request struct properties
fe_alloc_props = {}
fe_alloc_props["FRONTEND::tuner_allocation"] = props

# Attempt to allocate your device
allocationResult = myFEIDevice.allocateCapacity(fe_alloc_props)

На этом этапе, если выделение прошло успешно, вы должны увидеть, что запрос на выделение теперь представлен в свойстве frontend_tuner_status устройства.

person djbarbalato    schedule 27.02.2014