我在Centos 6.4(32位)操作系统上使用REDHAWK 1.9。
我的设备符合Tuner的FrontEnd(FE)II接口。符合FEII的设备的分配是通过结构(frontend_tuner_allocation)。 IDE似乎不允许在实现选项卡上定义此分配。
我看了REDHAWK UHD device usage。它描述了如何进行必要的连接,但我没有看到如何通过调谐器分配结构进行分配。
我见过示例(离线)在哪里进行此分配,分配结构必须手动编码到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的最佳方法是什么?
答案 0 :(得分: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属性中表示