王振全
【摘要】本文主要介紹在TEKLOGIX工業級手持終端XT15上實現語音集群功能的方法。首先,本文簡單介紹了華為TD-LTE寬帶集群的特點及港口的需求情況。其次,本文介紹了TEKLOGIXXT15的軟件平臺和硬件接口,同時介紹了華為TD-LTE集群通信模塊EM350的特點及接口形式。接下來,本文提出了將EM350模塊嫁接到XT15上的基本思路和實現方法。最后,本文描述了在XT15上通過虛擬串口調用EM350的AT指令集實現點對點呼叫和群組呼叫的軟件實現。
【關鍵詞】TEKLOGIXTD-LTE手持終端語音集群CE
我國自主知識產權的4G標準TD-LTE的快速發展,推動了港口行業的無線網絡由多頻點、多制式向一網多能的演進,即一張TD-LTE專用網絡同時實現數據、語音和視頻信息的傳輸。然而,由于港口行業對于無線終端的特殊要求(三防、全鍵盤、條碼掃描等),現有的TD-LTE終端無法滿足港口的需要,而能夠滿足港口需要的無線終端又無法接入TD-LTE網絡并支持集群功能。因此,在現有的數據終端上適配基于TD-LTE的集群通信模塊使其成為多功能的集群終端,對TD-LTE在港口行業的產業化具有重要的現實意義。
本文采用工業級終端廠商TEKLOGIX的手持終端XT15作為基本終端,通過在其上擴展接入華為EM350集群模塊,使之成為多功能集群終端。
一、TEKLOGIXXT15和華為EM350介紹
1.TEKLOGIXXT15
XT15是一款基于Window CE6.0的智能手持終端,具有堅固耐用、接口豐富、擴展容易的特點,被廣泛用作港口工人的無線理貨終端。XT15具有很好的靈活性,可以通過擴展SD插槽、TTL串口、USB接口、GPIO接口接入第三方模塊。
2.華為EM350介紹
華為EM350 模塊是一塊TD-LTE制式的Mini PCIe集群通信模塊,將該模塊集成到終端設備中,作為LTE Modem使用,提供無線數據接口,就可以實現集群語音通話以及空口數據傳輸功能。
EM350的物理接口包括Mini PCIe接口和天線接口。Mini PCIe接口可以擴展出USB接口、SIM卡接口、語音接口和電源接口。天線接口通過射頻連接器外接天線。
3.XT15的接口適配
通過分析XT15的擴展槽和EM350的外部接口,本文提出對二者進行適配的基本思路:在XT15的硬件擴展槽上加裝mini PCIe母槽,將EM350插接到此母槽上,然后通過連接母槽的針腳分別連接XT15的USB接口、語音接口、電源接口、SIM卡接口等[1]。
本文主要探討USB接口的適配,其它接口直接連接對應部件即可。
USB 接口電路設計參考圖如下:
EM350通過USB接口與XT15終端通信,在XT15終端上虛擬出AT口、Diag口和數據口,AT口是AT指令的執行口。
二、集群功能的軟件實現
XT15和EM350的接口適配完成后,需要在XT15上開發一款專門的軟件來實現群組呼叫功能。本文采用.Net框架和C#語言來實現上述功能,通過在虛擬AT串口上執行AT命令來完成對EM350的操作。
1.AT指令介紹
AT 命令是TE(Terminal Equipment)和MT(Mobile Terminal)之間的通信命令協議。AT命令是以AT做首,回車字符結束的字符串。AT 命令的返回值包括兩部分,響應信息和結果碼,AT 命令的響應數據包在回車換行字符中。
EM350的AT命令結果碼分為主動式和被動式。被動式結果碼是指在TE(XT15)側執行AT命令后才返回的結果碼,相當于函數的返回值。而主動式結果碼無須執行任何AT命令,是由MT(EM350)定期發送給TE(XT15),類似于事件[2]。
2.XT15串口訪問
本文通過.Net提供的串口訪問類SerialPort來是實現對虛擬AT串口的操作。
打開串口代碼:
serialPort = new SerialPort(portName, baudRate);
serialPort.Open();
關閉串口代碼:
serialPort.Close();
寫入數據代碼:
serialPort.WriteLine(command);
同步讀取數據代碼:
res = serialPort.ReadExisting();
異步讀取數據代碼:
DataReceived事件被觸發時,通過以下函數處理。
void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
3.AT結果碼解析
EM350在執行部分AT指令時可能會占用較長的時間,此時,主動響應結果碼就會穿插在正常響應結果碼中返回,從而出現響應結果碼不完整的情況。為了避免這種情況,本文先創建一個字節隊列,將串口中讀出的數據字節保存在此字節隊列中。另外開啟一個線程,負責從字節隊列中解析出特定的結果碼。完整的結果碼將被直接解析出,不完整的結果碼,則會留在隊列總,直到不斷有新的字節從串口讀出并寫入隊列,使得結果碼完整后再進行解析。
創建隊列代碼:
private List
隊列寫入數據代碼:
數據寫入串口緩存時,在DataReceived事件中將串口緩存中的數據讀出寫入隊列
byte[] buffer = new byte[this.serialPort.BytesToRead];
int readCount = this.serialPort.Read(buffer, 0, buffer.Length);
this.responses.AddRange(buffer);
命令解析線程函數
private void ParseReceivedData(object obj){ {
string res = Encoding.Default.GetString(this.responses.ToArray(), 0, responses.Count);
int commandEndIndex = res.IndexOf(" ");
if (commandEndIndex >= 0){
string command = res.Substring(0, commandEndIndex + 2);
命令處理部分
this.responses.RemoveRange(0, commandEndIndex + 2);
}
}
群組呼叫實現
加入群組代碼:
res = ExecuteCommand("AT+CTGS=" + groupId, "+CTGS:");
話權申請代碼:
res = ExecuteCommand("AT+CAPTTD=" + cCInstance + "," + groupCallVoice + "," + priority + ","" + calledPartyId + """, "");
話權申請成功結果碼:
+CAPTTG:
信道建立結果碼:
+CTCC:
開始釋放話權代碼:
res = ExecuteCommand("AT+CAPTTR=" + cCInstance + "," + groupId + "", "");
信道斷開結果碼:
+CTCR:
群組關閉代碼:
res =ExecuteCommand("AT+CTGR=" + cCInstance + "," + groupId + "", "");
三、結論
本文通過在TEKLOGIXXT15手持終端上擴展接入華為EM350集群通信模塊的方法將傳統數據終端升級成兼容TD-LTE的多功能集群終端。經過測試,適配后的終端能夠很好地實現XT15終端之間、XT15和華為集群終端EP680之間的集群對講。本文描述的方法同樣適用于XP平臺、Android平臺手持或車載終端的TD-LTE集群改造。在當前TD-LTE網絡剛剛起步、TD-LTE工業級終端匱乏的情況下,通過本文描述的方法對實現TD-LTE終端多樣化,推動TD-LTE技術的產業化具有重要的現實意義。
參考文獻
[1]陳杰,TETRA數字集群終端語音功能的開發,北京交通大學圖書館,北京交通大學,2007:2-3
[2]3GPP-TS-27.007,AT command set for User Equipment (UE)[S]