首页 理论教育 车载语音电话技术实例

车载语音电话技术实例

时间:2023-10-31 理论教育 版权反馈
【摘要】:车载电话为司机与外界的联系提供了一个方便快捷的渠道。嵌入式车载终端采用嵌入式语音合成技术,实现了车载电话信息变看为听,加强了信息获取的途径,降低了驾驶的危险,给车载电话增加了更多人性化功能。车载语音电话的软件设计分为用户界面、MC35i控制模块、语音合成控制模块和串口通信模块等几个模块。无线通信模块与XF-3011语音合成芯片都是通过串口与S3C2440A进行通信的。

车载语音电话技术实例

车载电话为司机与外界的联系提供了一个方便快捷的渠道。但是,从安全的角度考虑,在行车途中查看信息是非常不方便和危险的,如看来电号码、时间和短信息等。嵌入式车载终端采用嵌入式语音合成技术,实现了车载电话信息变看为听,加强了信息获取的途径,降低了驾驶的危险,给车载电话增加了更多人性化功能。

车载语音电话的软件设计分为用户界面、MC35i控制模块、语音合成控制模块和串口通信模块等几个模块。无线通信模块与XF-3011语音合成芯片都是通过串口与S3C2440A进行通信的。软件的最底层是串口通信模块,用于S3C2440A和MC35i模块、语音合成芯片建立通信链路。MC35i控制程序模块主要实现了对MC35i模块进行控制的函数,包括模块的初始化、控制命令的封装和MC35i返回数据的解析等。语音合成控制模块主要实现对语音合成芯片的操作函数,包括语音合成命令的封装、需要合成的文本数据的封装等。软件的最上层是与用户直接交互的图形界面,它为用户提供了一个操作方便的图形接口,包括拨打电话、查看电话簿和浏览短消息等功能。

1.串口通信

在Linux下对串口设备的操作和操作文件是相同的,使用标准的系统调用来打开、关闭和读写。串口的设置主要是通过设置structtermio结构体的各成员值来实现的。其中常用的关键设置是控制模式和本地模式的设置。

978-7-111-33316-6-Chapter11-31.jpg

串口的控制模式设置是最基本的设置,包括波特率、校验位和停止位各项设置。本设计中MC35i使用的控制模式为波特率115200bit/s、8位数据位,1位停止位,无奇偶校验位。语音合成芯片使用的控制模式为波特率9600bit/s。本地模式的设置使用默认设置。

对于本地模式的设置,Linux下串行设备有3种不同的传输方式,可以根据实际应用中数据的传输特点选择合适的传输方式。下面对串行设备的3种传输方式进行介绍。

(1)标准输入模式

这是终端设备的标准处理模式。在这种方式中,read会传回一整行完整的输入。一行的结束,默认是NL文件结束符,或是一个行结束字符。在默认设置中,CR(DOS/Windows中的默认行结束符)并不是行结束标志,可以通过设置自动将CR转换为NL。

(2)非标准输入模式

非标准输入处理可以用在需要每次读取固定数量字符的情况下,并允许使用字符接收时间定时器。这种模式可以用在每次读取固定长度字符串的程序中,或者所连接的设备会突然送出大量字符的情况下。

(3)异步输入模式

在异步输入模式下,read的状态会立即返回,并送出一个信号到所调用的函数,直到完成工作。这个信号可以由信号处理函数handler()来接收。

对于无线通信模块MC35i,串口接收的数据格式与数量是不固定的,在读取消息时串口可能会接收大量字符。根据这种情况,与MC35i通信的串口设置为非标准输入模式,由程序来判断串口是否已接收完毕数据。与MC35i通信的串口初始化程序如下:

978-7-111-33316-6-Chapter11-32.jpg

在读取MC35i的返回数据时,程序调用read()函数循环读取串口,直到读取到标志返回数据结束的字符后结束。为了防止因为传输错误或其他原因读不到结束标志字符而导致循环读取无法正常结束,在进入读串口循环时开启一个定时器,读取超时程序便自动退出循环,并进行相应的错误处理。

2.MC35i控制程序模块的设计

MC35i控制程序模块主要负责把上层应用的请求转化为MC35i可以识别的控制指令,并把MC35i返回的数据进行解析和处理后提供给上层应用。所有对MC35i模块的操作都是通过AT指令完成的。AT指令集是计算机和调制解调器之间进行通信的标准语言,用来控制调制解调器进行拨号和应答等操作。用户从终端设备向终端适配器发送AT指令,进行呼叫、短信、电话本、数据业务和传真等方面的控制。起初的AT指令并不完善,后来主要的移动电话生产厂商诺基亚爱立信摩托罗拉和HP共同为GSM研制了一整套AT指令,其中包括了对SMS的控制。AT指令在此基础上演化并被加入GSM07.05标准以及现在的GSM07.07标准。除“A/”和“+++”外,所有的AT指令都必须加“AT”前缀,每条指令以回车符<CR>结束。通常,在发出命令后会收到如下格式的响应:

978-7-111-33316-6-Chapter11-33.jpg

其中,<LF>代表换行符;<reponse>是具体的返回数据。

根据车载电话所要实现的功能,本模块主要包括以下几部分:电话簿操作、短消息操作和电话呼叫等基本操作。

(1)电话簿操作

对电话簿的操作包括读取电话簿、添加和删除联系人。读取电话簿的命令如下:

AT+CPBR=<location1>,[<location2>]

location1和location2分别是读取SIM卡存储区间的起始地址和结束地址。目前的SIM卡通常可以存储250条电话记录,因此要读出所有电话簿,应设置读取区间为1~250。发出读取电话簿指令后,MC35i模块会返回SIM卡中的电话簿记录,格式如下:

978-7-111-33316-6-Chapter11-34.jpg

其中,location为存储位置;number为电话号码;type为电话号码格式;text为联系人。程序收到MC35i模块反馈的数据后,须解析每一条记录并用一个结构体保存记录信息供上层应用使用。

添加和删除联系人使用的是同一条指令:(www.xing528.com)

978-7-111-33316-6-Chapter11-35.jpg

该指令的参数与读电话簿时返回的数据格式类似。当参数完整时,在location所在位置添加一条记录;当参数只含有location时,删除该位置的记录。

(2)短消息操作

MC35i模块支持两种模式的短消息,即文本模式和PDU(Protocal Data Unit)模式。文本模式对中文的支持不是很好,国内使用的手机基本都不使用这种模式。PDU模式可以使用各种字符集,可以很好地支持中文,并且所有的手机都支持这种模式,是手机的默认短消息模式。

程序中对短消息的操作包括读取、发送和删除。通过串口发送指令AT+CMGL=4可以读取SIM卡中所有的消息。该指令的返回数据格式如下:

978-7-111-33316-6-Chapter11-36.jpg

其中,index是消息索引号;stat是状态标志;alpha是字符串类型;length是信息长度;pdu是PDU码串。

程序发送短消息时,首先通过串口向MC35i模块发送AT+CMGS=<length><CR>命令,其中length参数为发送消息PDU码长度,然后通过串口发送PDU码以ctrl-Z为结束。删除短消息的操作相对简单,通过串口发送命令AT+CMGD=<index>即可删除存储位置index的短消息。

(3)电话呼叫

电话呼叫包括从电话本呼叫、直接输入电话号码和回拨短消息号码。语音呼叫的命令有直接从输入号码呼叫、从存储区中直接呼叫和从电话本呼叫等几种形式。

直接从输入号码呼叫:

978-7-111-33316-6-Chapter11-37.jpg

其中,n为电话号码;mgsm为GSM字符串调整参数。

从存储区中直接呼叫:

978-7-111-33316-6-Chapter11-38.jpg

其中,mem为存储区;n为号码在存储区中的索引号。

从电话本呼叫:

978-7-111-33316-6-Chapter11-39.jpg

3.语音合成模块

S3C2440A与XF-S3011语音合成芯片通信时,发送给XF-S3011的所有命令和数据都需要用“帧”方式进行封装后,再通过串口发送到芯片,帧的最大长度为204B(包括帧头标记字节)。

帧结构由帧头标志和帧数据区两大部分组成。帧头标志长度为1B,定义为十六进制的“0xFE”。所有的命令帧都以该字节为起始标志,帧数据区的长度为1~203B,由命令字和命令参数区两部分组成,其中命令字代表要执行的命令,长度为1B,命令参数区存放该命令对应的参数数据,长度为0~202B。部分命令无参数,因此这些命令的命令参数区的长度为零。

XF-S3011在收到命令后会做出3种类型的反馈。当收到一帧正确的命令帧后,会立即反馈“0x41”。如果是合成命令,那么开始合成所接收的文本数据,所有文本合成完毕之后,向上位机反馈“0x4F”,当遇到不识别或是错误的命令时,会立即回传“0x45”。

XF-S3011芯片提供了多种控制命令,用于播放、暂停、继续和停止文本播放等功能,以及让芯片进入休眠状态等。

向XF-S3011发送的控制命令需要按照其数据传输的格式进行封装。根据不同指令选择相应的命令字,如停止合成、合成一段文本等。XF-S3011的合成命令有两个:一个是直接合成命令,只能合成G2312编码类型的文本;另一个是带文本编码类型的合成命令,可以指定文本编码类型,能合成GB2312或Unicode编码类型的文本。语音合成模块的程序流程图如图11-7所示。

978-7-111-33316-6-Chapter11-40.jpg

图11-7 语音合成模块的程序流程图

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈