以NOKIA8250为例。通过8250的红外与PC连接之后,会产生一个虚拟串口,这个串口的序号可能在每台电脑上都不一样。利用这个串口,就可以对手机进行一系列操作,包括发送、接收短信。通过程序操作串口,就可以把这部手机做成短信平台。
在Windows中,打开超级终端,在手机未连接之前,查看连接可使用的串口列表,然后连接手机,再查看列表,多出来的那个串口就是与手机通信的串口。通过该串口连接手机,就可以用AT指令来操作它。
输入AT回车,出现OK,就说明这个串口是支持AT指令的,有可能是手机,也有可能是普通的MODEM。
输入AT+CGMI回车,出现手机厂商信息,例如NOKIA,就说明这是手机,下面就可以进行一系列的操作了。
AT指令有几个实用的规则:
1.输入AT指令然后加“?”,就能列出该指令的当前状态,例如输入AT+CSCS?,就能列出当前手机使用的字符集,例如:+CSCS: "PCCP437"。
2.输入AT指令然后加“=?”,就能列出该指令的可选值,也就是手机所能支持的所有值,例如输入AT+CSCS=?,就能列出手机能支持的所有字符集,例如:+CSCS: ("GSM","HEX","IRA","PCCP437","PCDN","8859-1"),可以通过AT+CSCS="HEX"来设置手机的字符集为HEX。
短信内容的格式有两种,一种是text,一种是PDU,text格式比较简单,但不能发送特殊的短信,例如免提短信,发送中文短信也会乱码。PDU格式则可以发送各种形式(免提,闪烁)和字符集的短信,不过PDU不够直观,需要通过程序来编码解码,例如发送到8613000000000的短信“中文信息”的PDU编码为:0011000D91683100000000F00008A70C4E2D65874FE1606F000D000A,其长度为27。在PDU格式下,短信内容还包含了目标号码,而在text格式下,目标号码和短信内容是分开的。锐方超级SMS控件是一个很好的PDU编解码控件。
与短信相关的AT指令:
AT 指令 |
功 能 |
AT+CMGC |
Send an SMS command(发出一条短消息命令) |
AT+CMGD |
Delete SMS message(删除SIM卡内存的短消息) |
AT+CMGF |
Select SMS message formate(选择短消息信息格式:0-PDU;1-文本) |
AT+CMGL |
List SMS message from preferred store(列出SIM卡中的短消息,在PDU模式下,该值为数字,在text模式下,该值为字符串。PDU/text:0/"REC UNREAD"-未读,1/"REC READ"-已读,2/"STO UNSENT"-待发,3/"STO SENT"-已发,4/"ALL"-全部的) |
AT+CMGR |
Read SMS message(读短消息) |
AT+CMGS |
Send SMS message(发送短消息。在PDU格式下,该值设置为PDU长度,例如30;在Text格式下,该值设置为目标手机号码字符串,例如"8613888888888"。注意,在PDU模式下,手机号码需要加上86开头,否则不能发送。) |
AT+CMGW |
Write SMS message to memory(向SIM内存中写入待发的短消息) |
AT+CMSS |
Send SMS message from storage(从SIN|M内存中发送短消息) |
AT+CNMI |
New SMS message indications(设置是否显示新收到的短信,一般设成2,1,0,0,0,手机收到新的短信后会给PC发一条消息,包含了该短信在内存中的索引号,通过该索引号就可以读出该短信) |
AT+CPMS |
Preferred SMS message storage(选择短消息内存) |
AT+CSCA |
SMS service center address(短消息中心地址) |
AT+CSCB |
Select cell broadcast messages(选择蜂窝广播消息) |
AT+CSMP |
Set SMS text mode parameters(设置短消息文本模式参数) |
AT+CSMS |
Select Message Service(选择短消息服务) |
知道这些之后,就可以通过编程来操作手机。在java中,利用Java Communication包可以操作串口,但官方的包在3.0之后就支持Linux和Solaris平台了,Windows平台的只支持到2.0,98年出的,不过在XP下还能使用,google一下就可以下载到,例如:
http://mdubuc.freeshell.org/Jolt/javacomm20-win32.zip。也可以用开源的
Rxtx实现串口通信。
如果不想直接操作AT指令,还可以使用开源的
SMSLib包,该包封装了与短信相关的所有AT指令,也实现了PDU编解码功能,使用起来十分方便。