AT+CNMI

短消息類(class)的概念:根據指定儲存的位置,短消息分爲class 0 – 3四個類。也能夠不指定類(no class),由ME按默認設置進行處理,存儲到內存或者SIM卡中。在TPDU的TP-DCS字節中,當bit7-bit4爲00x1, 01x1, 1111時,bit1-bit0指出消息所屬類:spa

00 – class 0:只顯示,不儲存內存

01 – class 1:儲存在ME內存中文檔

02 – class 2:儲存在SIM卡中it

03 – class 3:直接傳輸到TEclass

GSMModem通常都支持一條「AT+CNMI」指令,可用於設定當有某類短消息到達時,如何處置它:只儲存在指定的內存(易失的/非易失的)中,先儲存後通知TE,仍是直接轉發到TE,等等。語法

「AT+CNMI」指令語法爲程序

AT+CNMI=[<mode>[,<mt>[,<bm>[,<ds>[,<bfr>]]]]]通信

mode -通知方式:數據

0 – 不通知TE。時間

1 – 只在數據線空閒的狀況下,通知TE;不然不通知TE。

2 – 通知TE。在數據線被佔用的狀況下,先緩衝起來,待數據線空閒,再行通知。

3 – 通知TE。在數據線被佔用的狀況下,通知混合在數據中一塊兒傳輸。

mt - 消息儲存或直接轉發到TE:

0 – 儲存到默認的內存位置(包括class 3)

1 – 儲存到默認的內存位置,而且向TE發出通知(包括class 3)

2 – 對於class 2,儲存到SIM卡,而且向TE發出通知;對於其它class,直接將消息轉發到 TE

3 – 對於class 3,直接將消息轉發到 TE;對於其它class,同mt=1

bm,ds, bfr的含義,請參考相關標準文檔。通常不須要去關心它們。

在程序中具體實現時,使用mode=2,mt=1,比較簡單。對全部類型的短消息,只要在收到ME送來的「+CMTI」通知後,用「AT+CMGR」指令讀取消息內容就好了。TE與ME之間的通訊過程,舉例以下:

(初始化)

AT+CNMI=?(查看能支持的設置範圍)

+CNMI:(0-2),(0-3),(0,2,3),(0,1),(0,1)

OK

 

AT+CNMI?(查看當前設置)

+CNMI:0,0,0,0,0

OK

 

AT+CNMI=2,1(設置爲mode=2, mt=1)

OK

 

AT+CNMI?(再查看當前設置)

+CNMI:2,1,0,0,0

OK

 

(過了一段時間,有一條消息到達)

+CMTI 「ME」,8 (通知:消息已經存儲在ME內存中,序號爲8)

 

AT+CMGR=8(讀第8條消息)

+CMGR:8,27

0891683108200505F0240D91683158812764F80000402052110373800741E19058341E01

OK

 

AT+CMGD=8(刪除第8條消息)

OK

還 有一種方式mode=2,mt=2也很使人感興趣。在這種方式下,除了class 2外,消息不存儲,直接轉發到TE。須要處理消息通知和內容兩種狀況,複雜一些。但若是發送方也由程序控制,能夠只發noclass或class 1的消息,這樣不存儲在接收方ME內存(通常是閃存,非易失性的)中,確定能延長它的使用壽命。TE與ME之間的通訊過程,舉例以下:

AT+CNMI=2,2(設置爲mode=2, mt=2)

OK

 

(過了一段時間,有一條消息到達)

+CMT:,26

0891683108200505F0040D91683158812764F8000840205211639180064F60597D0021

轉自bbs.sendsms.cn

本站公眾號
   歡迎關注本站公眾號,獲取更多信息