2017-01-06 22 views
0

我正在嘗試完成具有兩個獨立TX通道的無線電的FE設備。該向導爲TX數據生成了一個具有2個短輸入端口的設備。當我分配一個TX通道作爲設備的用戶時,我不知道分配使用哪個端口。處理這個問題的最佳方法是什麼,因爲我將不得不從適當的端口讀取數據發送到TX通道?TX有沒有等同於matchAllocationIdToStreamId的?

如果我將輸入端口的數量減少到一個,我可以擁有爲每個路由設置流ID(作爲過濾器)的屬性,並讓用戶將流ID綁定到調諧器索引。這必須在分配後完成。

回答

0

你有正確的想法。應該有一個輸入BulkIO端口,可以處理多個流,而不是多個輸入端口。該向導允許開發人員指定要生成多少個輸入端口,因此您必須選擇兩個。 FEI Tuner設備沒有太多理由需要兩個相同類型的輸入端口來攝取數據流。 USRP_UHD是多個輸入端口確實有意義的示例,但這僅僅是因爲它支持多種數據類型(shortfloat),並且它具有每種類型的輸入端口。

所以,現在讓我們假設你有一個輸入端口用於發送數據到兩個TX通道。您應該將輸入數據的流ID映射到TX調諧器的分配ID。您建議使用調諧器索引,但我建議使用分配ID。有(至少)三種方式輸入流映射到特定分配的調諧器:

  1. 使用結構序列屬性輸入流ID映射到目標TX調諧器的分配ID(這類似於你建議)。 connectionTable屬性通常用於多輸出端口,但同樣的概念可以應用於多輸入端口。每個struct條目都會將輸入流ID映射到Allocation ID(也許是輸入端口的端口名,儘管在這種情況下離開端口名可能更好)。這必須像任何其他屬性一樣在外部進行配置,而不是在用於多輸出端口時進行配置,並且在FEI設備本身進行分配期間進行配置。當在輸入端口接收到數據時,開發者代碼將不得不檢查connectionTable屬性以知道數據流與哪個調諧器相關聯(如果有的話)。
  2. 另一種可能性是使用分配ID(例如,密鑰= "TUNER_ID"和值= <actual allocation id of TX tuner>)來定義識別目標TX調諧器的SRI關鍵字,並將其添加到輸入數據流的SRI。再次,開發者代碼將需要檢查SRI關鍵字以知道數據流與哪個調諧器相關聯(如果有的話)。
  3. 當然,另一種選擇是要求分配ID與流ID相同,這樣分配將使用流ID作爲分配ID(而不是改變流ID以匹配任何分配ID被使用了......雖然兩者都有效)。

注意,對於多輸出端口到端口的連接使用的是,分配ID相匹配的連接ID製成,並且其連同connectionTable屬性(它映射分配/連接ID到流ID)可以使輸出端口僅將數據流發送到適當的連接。輸入端口(或「提供」端口,因爲它們被稱爲)實際上並不知道連接ID,因此不能使用類似的方法。

有上述每個提議的解決方案的優點和缺點:

  • 選項1需要設備屬性配置。如果誰使分配也知道Stream ID,這並不是什麼大不了的事情。如果通過框架處理分配的波形中的用戶設備關係進行分配,則會更棘手。另外,配置connectionTable屬性時必須格外小心,因爲消除現有的connectionTable配置將非常容易。您必須查詢屬性才能獲取當前配置,並根據需要進行修改,然後使用修改的值配置該屬性。只需使用Stream ID和Allocation ID映射進行配置即可清除任何現有的配置。一個簡單的方法是創建一個名爲類似於addStreamMapping的結構體,它在配置時將值添加到connectionTable結構序列(使用Property偵聽器)。相同的技術可以用於去除connectionTable條目。這允許FEI設備同步添加/刪除條目。
  • 選項2需要注入關鍵字,但並非總是需要。數據處理路徑必須知道分配ID才能工作。使用關鍵字注入器組件使這更加可行。
  • 選項3要求:在分配時流ID是已知的,或者流ID被設置爲分配ID。

理想情況下,你甚至可以支持所有三種。 FEI沒有定義如何將輸入數據流映射到特定的TX調諧器,所以在定義和記錄之前,請使用最適合您使用情況的方法。