李文军,芮茂海,王苏毅,舒德全,任德成
(总参通信训练基地,宣化 075100)
基于ARM硬件的手持机间短消息交互的程序设计
李文军,芮茂海,王苏毅,舒德全,任德成
(总参通信训练基地,宣化 075100)
基于自主搭建的嵌入式开发环境和VS2003软件开发的控制终端软件,设计了一种短消息交互的实现方案。通过对短消息菜单的程序设计,结合键盘、显示屏等外设,实现对字符编辑、发送和接收,从而实现了手持机间的短消息交互。
T9输入法;状态机;中英混排;信令结构
短消息是现代通信的重要形式之一,短信业务让手机成为电报式的解读工具,使视觉文字成为现代通信中传递信息和沟通的一种重要方式。短信这种文字视觉式的信息传输、解析特点,使其他类似的短消息业务广泛应用于具备通信功能的嵌入式手持设备中。
在研制一种基于STM32F107VCT6芯片的互联形嵌入式手持机时,不同的用户之间需要进行文本信息交互。本文基于现实需求,根据短信的基本定义并参考现代手机中短信的功能设计,研究了一套实现短消息功能的方案,以实现短消息的编辑、存储、发送、接收等功能,并在某嵌入式手持设备中获得了应用。
手持机的短消息通信功能是嵌入式通信系统整体设计方案的一部分,不同的嵌入式手持机设备通过网线采用星型拓扑结构与控制终端电脑相连,利用控制终端软件的调度实现手持机与电脑之间的信令交互和状态控制,最终使控制终端实现对固定格式的短消息信令的转发,进而实现不同手持机间的短消息通信,其星型拓扑结构如图1所示。
图1 星型拓扑结构及短消息实现总体设计方框图
手持机是互联互通功能实现的终端,其短消息功能实现的方案是:在STM32F107VCT6主控芯片的调度下,相关外围软、硬件外设相互配合,完成短消息的4个功能模块,即短消息发送(包括文字编辑)、短消息接收、短消息存储、短消息删除。
1.1 硬件模块简介
实现短消息通信功能的硬件系统包括计算机和手持机两大部分,计算机为成型的商业电脑,不再赘述。手持机为自主设计,其硬件电路主要由以下几部分组成,即控制芯片STM32F107VCT6、像素为128×64的JLX12864G-573-PC型液晶显示模块(包括字库IC)、容量为64Mb 的W25Q64的FLASH存储芯片、网络通信模块(包括网络控制芯片VM35RB DP83848VVVBC及网络变压器HR911105A及其附属电容、电阻)、4×5键盘(包括0~9 及A、B、C、#键及上、下、确定键),以及电源等其他外设。
STM32F107VCT6是ST公司设计的内核为Cortex -M3的32位处理器,其最高工作频率达72MHz,内部含有256KB的FLASH和64KB的SRAM,实时性好,且具有很强的中断处理能力,目前广泛应用于嵌入式和手持设备中,是手持机实现短消息功能的核心部件。
JLX12864G-573-PC型液晶显示模块包括ST7565R驱动芯片、显示屏(128×64像素)和内置标准字库的存储芯片,可以通过STM32F107VCT6的引脚接口实现对字符、图片的提取、显示以及变更等操作。
W25Q64是华邦公司推出的大容量SPI FLASH产品,容量为8MB,支持标准SPI,最大SPI时钟可达80MHz[2]。在本设计中是利用STM32F107VCT6自带的SPI来实现对外部FLASH(即W25Q64)存储内容的读写,以实现手持机短消息的存储、删除功能。
网络控制芯片VM35RB DP83848VVVBC是美国国家半导体公司生产的一种支持10/100Mbps的单路物理层网络芯片,具备良好的鲁棒性和低功耗特点,对各种标准的以太网解决方案有良好的兼容性,在本设计中通过UDP通信方式实现主电脑控制终端的信令交互与短消息收发。
1.2 软件模块简介
实现短消息通信功能的软件系统包括计算机中控软件和手持机操作软件两个部分。
计算机中控软件采用VC++编写,利用VS2003开发环境基于无链接的UDP协议,自定义了短消息类,接收并解析收到的短消息信令,根据信令中包含的目标ID和目标ID所指向手持机的工作状态,决定是否转发短消息。代码相对简单,不再赘述。
短消息的程序实现方面主要由以下5部分组成:STM32F107VCT6的驱动程序、显示芯片驱动和显示程序、网络驱动及初始化程序、按键控制程序以及短消息实现程序。在本设计中,手持机操作软件的编写不依赖操作系统,为自主设计的代码,以上5部分代码是在ST公司自带的库文件上编写。手持机开机后,程序初始化,配置好STM32F107VCT6的内部时钟以及SPI、键盘、W25Q64、显示屏、网络接口等外设的引脚,并分别启动。之后利用UDP协议通过网络向电脑控制终端上报开机信息。在开机后,以心跳的方式每3s向控制终端汇报一次工作状态。最后通过键盘操作进入到短消息界面,进行短消息的操作(接收短消息通过中断的方式进行)。
在本设计中,短消息是由手持机编辑并发出,以特定格式的信令通过控制终端的解析、转发到目的手持机,手持机短消息菜单界面分为收件箱、写信息、发件箱、删除短信4个子菜单,其界面如图2左图所示。
图2 短消息功能界面及汉字编辑、英汉混排界面
“收件箱”即接收到信息后,将信息解析、存储,以便查看、编辑(包括删除、转发)的功能菜单。其接收功能是“收件箱”的核心,具体实现是利用网络通信中断函数ETH_IRQHandler(),通过指定端口接收并解析来自控制终端转发的短消息信令,并将之存储在W25Q64芯片中。
“删除短信”功能就是对存储在W25Q64中的发送信息、接收信息进行擦除,即将目标存储空间覆盖特定字符,如0x00。在本设计中存储芯片W25Q64最小擦除单位为一个4KB大小的扇区[2],为了使程序逻辑更加简单明了,对信息的删除,以及对接收信息、发送信息的存储操作都是以4KB为单位对W25Q64的扇区进行操作的。
“写信息”功能是短消息功能实现代码中最庞大也是最核心的部分,即通过键盘操作,参考T9输入算法编辑文字(包括英、汉、数字、标点等),并提取相应的GB2312码存放到STM32F107VCT6开辟的缓存buffer中。当决定发送时,与输入的信宿号码(相当于手机号码)一起按照固定格式组成一条短消息信令,利用UDP协议通过网络接口发送出去,并将之存储到W25Q64芯片中预先划分的“发件箱”区域中,即“发件箱”所能够查看的内容。
存储(包括删除)、接收短消息的代码相对简单,技术实现难度较低,在此不再赘述。“写信息”中汉字编辑的难度较高,远远超过英文、数字、标点的编辑,因此,以汉字的编辑过程为主要对象进行详细说明。
2.1 “写信息”程序设计与状态转换
“写信息”菜单的代码程序参考了当前市场流行的T9输入法的界面和基本操作流程,并根据应用需求做适当改进。不同的输入内容可通过“#”键进行循环切换,数字输入采用直接按键的方式,英文大/小写字母、标点符号以快速连按的方式进行选择并输入,程序设计相对简单。以汉语拼音的方式实现汉字输入的方法需要随时根据键盘和显示屏的显示内容进行状态转换,过程相对复杂。
汉字拥有固定的形、音对应关系,这是汉字编辑的逻辑起点。利用T9拼音输入汉字的思维逻辑是:一个汉字至少对应一个拼音,因此可利用汉字对应的汉语拼音查找同音汉字,然后在同音汉字中查找目标汉字。“写信息”菜单中汉字编辑的实现及状态机转换过程也是与这种认知规律相一致,即是一个采用循环[3-4]结构,不断查找、判断输入数字串与拼音组合及同拼音汉字这三者之间的映射关系过程[5]。
首先通过“#”号键调整输入方式,使之处于汉字输入的状态下;然后通过键盘2~9输入代表拼音的数字串,并在显示屏上实时显示拼音的“匹配结果”,若代表拼音的数字串输入有误,可以通过C键删除上一个错误输入的数字,若代表拼音的数字串输入正确,则通过A或B键查找目标字符拼音,即筛选与数字串对应的拼音组合;若拼音组合也正确,则判断、确定目标汉字,即按下“1”键,确定拼音,并通过1~5键选择排列的1~5个汉字,存储其GB2312码,并将其对应的点阵组合显示到显示屏上,或利用上、下键选择下一组同音的5个汉字。至此一个汉字的输入过程便完成了,下一步则可以根据短消息编辑的需求,决定是继续输入汉字还是按下确定键输入信宿的号码,并按发送键将保存的GB2312码流发送出去。算法的主体结构如图3所示,并可借鉴参考文献[1]中汉字“帮”的输入过程(如图2右图所示)。
2.2 信息功能实现的关键点设计
要完成短消息的编辑、发送和接收等主体功能,汉字拼音码表的查找,中、英文混排编辑以及设计合理的信令结构是其中的关键点。
2.2.1 “码表查找”数据结构
图3 写信息编辑汉字的操作流程和状态机转换图
汉字输入法的实现过程实际上是一个根据键盘输入查找拼音组合以及相应汉字的过程,但关键在于数字串到拼音往往是一种多对多的映射关系,而拼音到同音的汉字排列表是一种一对多的映射关系。为实现正确的汉字输入,首先要获得正确组合的数字串,根据数字串找到对应的拼音,再根据该拼音找到对应的汉字,最后根据汉字的机内码到汉字字库中查找汉字的显示点阵,这一过程不妨称为“码表查找”过程。“码表查找”的实现中对合理码表的设计具有重要意义[4]。
拼音索引数据结构,是一个包括输入数字序列、拼音、拼音码表的结构体,这三者构成一个完整的三级映射关系。其定义如下:
其中具体的拼音索引表(部分)由2~9数字组合成的数字序列、数字序列对应的拼音,以及拼音码表数组3部分组成。
在本设计自定义的拼音索引表py_index_li[]中,拼音顺序按英文字母表顺序排列。数字串2264对应两个拼音,即“bang”与“cang”,但在输入“2264”数字串后,显示屏上首先显示的匹配结果为“bang”及其对应的同音汉字,因为“bang”的位置比“cang”靠前,是第一顺位匹配拼音,而若目标汉字为“苍”,则需要根据A或B键调换拼音,并通过上/下键,结合“1”键以及其他数字键选择汉字“苍”,并将其GB2312码存放到预先设定的数组中。
}//拼音索引表
与拼音码表数组对应的汉字排列表(部分),每一个拼音码表数组中存放的内容并不是表面显示的汉字字形,而是标识汉字的GB2312内码,即目标汉字编辑、存储的内容。
2.2.2 中、英文混排编辑
短消息是一种视觉式的文字信息,涉及文字在LCD显示屏上的显示与排版。在本设计中显示与排版的主要难度在于中、英文字符的混排。
本设计中采用的液晶显视屏为64×128像素,采用的汉字点阵为16×16像素,英文字母、数字、标点为8×16像素。在中、英文混排编辑时,尤其在文字换行排版时容易出现以下两种情形,导致排版显示异常:其一,行尾仅剩8×16像素的空间,却要输入一个16×16像素的汉字;其二,对已输入的字符进行删除时,首先确定需要删除字符所占用的像素空间。
欲解决以上问题,需要在文字编辑时建立一个与输入文字相对应的标志位数组(如英文字符为1,汉字为2),以标识当前输入文字的像素大小。在每一次文字输入或删除时,都需要根据这个数组的值、确定文字显示的排版。
2.2.3 短消息信令格式
短消息以固定信令格式的形式由控制终端转发,在不同的手持机之间传输。控制终端在转发时需要知道的信息包括短消息标识性字头、信源、信宿以及各自的权限。而为了使信宿手持机能够准确地解析出信息内容,控制终端转发的短消息信令应该包括短消息标识性字头、信源号码、信息长度、号码长度以及短消息内容。
当短消息发出时,号码区存放的号码为信宿号码,而控制终端利用本机ID号识别信源并确定其权限;当控制终端接收到信源发来的短消息信令时,需要将接收到的ID号转化为信源号码并填充到号码区,然后根据信宿号码对应的IP地址和端口,利用UDP协议发送出去。短消息信令的基本格式如下所示:
$$AA$$ 信息长度号码长度内容(≤48)信宿号码(发)或信源号码(收)本机ID
短消息式的文本信息交互方式在当前嵌入式设备中应用非常广泛,本文基于短消息的基本功能菜单提出了一套既简单又能满足基本文字交互的短消息交互实现方案。本实现方案中程序采用VC++编写,代码具有较强的可修改、可移植性,并可根据需要添加新功能。目前本方案己经应用在某通信系统中,但是本设计中文本的传输方案相对简单,增加校验、加密以及采用更可靠的传输方式是下一步研究的重点。
[1]李文军,于明浩,王新征.T9输入法在嵌入式设备中的实现方案[J].单片机与嵌入式系统应用,2014,12(14):1-4.
[2]张洋,刘军.原子教你玩STM32[M].北京:北京航空航天大学出版社,2013.
[3]张真波,李俊,倪宏,等.电视机遥控器中文输入法的实现[J].计算机工程,2008,1(2):278-280.
[4]甘亚辉.嵌入式中文拼音输入法的设计[J].开发案例,2008,3(3):84-85.
[5]李晨.嵌入式系统下中文拼音输入法的设计与实现[J].航空电子技术,2009,12(4):31-34.
李文军(讲师),主要从事嵌入式硬件及软件系统研发;芮茂海、任德成,主要从事通信领域相关的科研、教学;王苏毅、舒德全,主要从事硬件设计与开发。
Program of Short Message lnteraction Between Handheld Machines Based on ARM
Li Wenjun,Rui Maohai,Wang Suyi,Shu Dequan,Ren Decheng
(Communication Training Base of General Staff,Xuanhua 075100,China)
The paper introduces a solution of communication with short message based on the embedded development environment designed independent and control terminal software of VS2003.Through the design of menu of short message,combining with the keyboard and the display screen,the characters of editing,sending and receiving are realized,so as to the short message interaction between the handheld machines is realized.
T9input method;state machine;mix of chinese and english;structure of signaling
TP393;TN919
A
��薛士然
2015-01-27)