APP下载

在TEKLOGIX手持终端上实现基于TD-LTE的语音集群功能

2014-09-11王振全

中国新通信 2014年11期
关键词:队列命令串口

王振全

【摘要】本文主要介绍在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 responses;

队列写入数据代码:

数据写入串口缓存时,在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:,< Comms Typ>

开始释放话权代码:

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]

猜你喜欢

队列命令串口
只听主人的命令
浅谈AB PLC串口跟RFID传感器的通讯应用
队列里的小秘密
基于多队列切换的SDN拥塞控制*
在队列里
移防命令下达后
丰田加速驶入自动驾驶队列
USB接口的多串口数据并行接收方法探索
这是人民的命令
基于蓝牙串口适配器的GPS接收机与AutoCAD的实时无线通信