以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編解碼功能,使用起來十分方便。