本文連接:https://blog.csdn.net/sjz4860402/article/details/78552756
這次的短信AT指令和信令從如下幾個方面介紹:
一 . 短信AT指令的格式
二 . 短信AT指令的使用(超級終端)
三 . 短信AT指令在log中的查看
四 . 短信modem相關信令
五 . 超級終端的使用(hyper_terminal)
六 . 其餘短信AT指令
七 . CMC ERROR 錯誤碼
一 . 短信AT指令的格式
短信的編碼方式有兩種:text模式,pdu模式。所以短信的AT指令執行格式也有兩種,分別對應text模式和pdu模式。
1 . Text模式
純文本模式,支持不一樣的字符集,從技術上說也可用於發送中文短消息,但國內手機基本上不支持,主要用於歐美地區。
2 . Pdu模式
這個是手機默認的編碼方式,能夠使用任何字符集,其包括三種編碼方式:7bit編碼,8bit編碼,UCS2編碼。
7bit編碼:ASCⅡ碼就是7bit編碼。
8bit編碼:ASCⅡ字符能夠使用7位二進制表示,可是因爲計算機的基本處理單位是字節(1byte=8bit),因此通常在高位補0,用一個字節表示一個ASCⅡ字符。這就是8bit編碼。
UCS2編碼:處理Unicode字符,使用2個字節來表示一個字符,能夠表示世界上全部的字符。發送中文就是使用此編碼方式。
二 . 短信AT指令的使用(超級終端)
1 . 查看目前的短信編碼模式
AT+CMGF?
2 . 切換編碼模式
AT+CMGF=0//PDU
AT+CMGF=1//TEXT
3 . 當模式爲text時,發送格式以下
AT+CMGS=」18579853304」
dddddd…. (此處爲發送內容)
0X1A (此處表示內容結尾,必須)
結果:
+CMGS: 211
OK
4 . 當模式爲pdu時,發送格式以下
AT+CMGS=19, 「0001000b818125514688f4000006c8329bfd0601」 或者
AT+CMGS=20, 「0001000b818175893503f4000008d3ba3a1d76ebcb」
19和20爲:pdu約定固定長度15+發送的報文的長度(16進制數)
00 服務號碼信息長度爲0
01 沒有多餘信息的發送,即不包括服務號碼信息
00 消息基準值(TP-MR) 0
0b 發送號碼的信息長度
81 國際號碼格式即」+」
8125514688f4 目的號碼,即18521564884(算法:末尾加f後奇偶位調換)
00 協議標識是普通GSM 類型,點到點方式
00 編碼方式,08–USC2,00–7-bit
00 有效期
06 信息長度
c8329bfd0601 信息內容/Hello
三 . 短信AT指令在log中的查看
1 . 正常發送短信
1 RILJ : [4194]> SEND_SMS [SUB0] //從RIL.java中發出SEND_SMS消息 ,給AT
2 AT : AT send on RIL_CMD_READER_3, tid:548282602560
3 AT : AT>AT+CMGS=19,"0001000b818175893503f4000006c8329bfd0e03" //AT 向modem發送,也即向服務器發送消息
4 AT : AT< +CMGS: 218 //modem返回的結果給AT,返回CMGS說明發送成功
5 AT : response received on RIL_CMD_READER_3, tid:548282602560
6RILJ : [4194]< SEND_SMS { mMessageRef = 218, mErrorCode = 0, mAckPdu = null} [SUB0] //把從modem返回的結果,AT向RIL.java報告發送狀況
2 . 發送短信失敗
1 RILJ : [4838]> SEND_SMS [SUB0]
2 AT : AT send on RIL_CMD_READER_3, tid:548305933376
3 AT : AT>AT+CMGS=20,"0001000b818175893503f4000008d3ba3a1d76ebcb" //發送的是PDU編碼
4 AT : AT< ERROR
以上例子失敗緣由:
設置編碼爲Text模式,可是手機默認的編碼爲pdu模式,以上AT+CMGS命令執行時參數爲pdu碼。所以報AT< ERROR。
以上例子不具備表明性,實際上,發送短信失敗,最終AT的返回結果爲:
AT< +CMS ERROR: 111。
111表明的意思爲:Protocol error, unspecified
每一個錯誤碼對應響應的失敗緣由,CMS ERROR的錯誤碼見文檔最後。
3 . 正常接收短信
1 AT : AT< +CMT: ,25
2 AT : SMS Urc Received!
3 AT : AT< 0891683110501905F0040BA18175893503F400006101809103242306F732681C7603
4 AT : RIL_URC_READER:line1:+CMT:,25,line2:0891683110501905F0040BA18175893503F400006101809103242306F732681C7603
5 RILJ : [UNSL]< UNSOL_RESPONSE_NEW_SMS [SUB0] //向RIL.java上報新消息
6 RILJ : [4223]> SMS_ACKNOWLEDGE true 0 [SUB0] //RIL.java確認新消息已收到
7 AT : AT send on RIL_CMD_READER_2, tid:548283642944
8 AT : AT> AT+CNMA=1, 2, "0000" //AT向服務器反饋消息已收到
9 AT : AT< OK //基站服務器響應ok
10 AT : response received on RIL_CMD_READER_2, tid:548283642944
11 RILJ : [4223]< SMS_ACKNOWLEDGE [SUB0] //AT向RIL.java響應ok
4 . 接收短信失敗
AT : AT< +EIMSCMT: ,22
AT : SMS Urc Received!
AT : AT< 0891683109520000F0000A11620010861400006190032180958004D4F29C0E
AT : RIL_URC_READER: line1:+EIMSCMT: ,22,line2:0891683109520000F0000A11620010861400006190032180958004D4F29C0E
RILJ : [UNSL]< UNSOL_RESPONSE_NEW_SMS [SUB0]SmsMessage: SMS PDU parsing failed:
.......
RILJ : [3892]> SMS_ACKNOWLEDGE false 255 [SUB0] //RIL.java確認新消息已收到,可是新消息存在問題,返回255錯誤碼
AT : AT send on RIL_CMD_READER_2, tid:547637703744
AT : AT> AT+EIMSCNMA=2, 3, "00FF00" //AT向服務器反饋消息已收到
AT : AT< OK
AT : response received on RIL_CMD_READER_2, tid:547637703744
RILJ : [3892]< SMS_ACKNOWLEDGE [SUB0]
以上例子:
客戶使用一臺樣機向另外一臺樣機發送短信,發送方發送短信成功,可是接收方接收不到短信。
從以上log能夠看出,RIL.java在對pdu碼解析的過程當中發生了錯誤,可是實際上AT已經收到了新短信,所以也須要向服務器反饋結果,AT的整個流程是沒有問題的。由於pdu解析出錯,新短信天然不能保存並顯示,咱們看到的現象就是接收不到新短信。
解析pdu出錯的詳細信息以下:
SmsMessage: java.lang.RuntimeException: Invalid TOA - high bit must be set. toa = 17 (at offset 11)
SmsMessage: at com.android.internal.telephony.gsm.SmsMessage$PduParser.getAddress(SmsMessage.java:609)
SmsMessage: at com.android.internal.telephony.gsm.SmsMessage.parseSmsDeliver(SmsMessage.java:1041)
SmsMessage: at com.android.internal.telephony.gsm.SmsMessage.parsePdu(SmsMessage.java:968)
SmsMessage: at com.android.internal.telephony.gsm.SmsMessage.newFromCMT(SmsMessage.java:163)
SmsMessage: at android.telephony.SmsMessage.newFromCMT(SmsMessage.java:257)
SmsMessage: at com.android.internal.telephony.RIL.processUnsolicited(RIL.java:3832)
SmsMessage: at com.android.internal.telephony.RIL.processResponse(RIL.java:2930)
SmsMessage: at com.android.internal.telephony.RIL.-wrap6(RIL.java)
SmsMessage: at com.android.internal.telephony.RIL$RILReceiver.run(RIL.java:848)
SmsMessage: at java.lang.Thread.run(Thread.java:818)
從RuntimeException信息中看到, code 會作SMS OA address type 的檢查。log 中 的號碼爲0A116200108614 ,address type 欄位是0x11,但spec要求 最高bit是1,所以拋出了異常。
解決辦法:一是咱們去掉SMS OA address type的檢查,可是會存在不肯定性,二是看看運營商在發送短信時檢查下OA address type的最高一個bit 是否爲1。
四 . 短信modem相關信令
在GSM中,SMS在協議上分爲三層(RP/CP/TP),每層傳輸使用的protocol不同,RP和CP分別表明在SM-RL與CM-sublayer上的數據,定義在TS 24.011。RP是處於CP的上層,所以發送SMS數據時RP數據單元要在CM-sublayer層上打包爲CP數據單元,接收的CP則要在SM-RL解包爲RP。詳細的SMS分層參考3GPP TS24.011第2.1節。
發送短信:
(UE –> NW) CP-DATA[包含SMS的文本內容;包含RP-DATA]
(UE <– NW) CP-ACK [簡單響應收到上一個CP-DATA;不包含RP]
(UE <– NW) CP-DATA[若是短信有什麼異常或網絡拒絕等異常cause會攜帶在裏面;包含RP-ACK或者是RP-ERROR,響應上面的RP-DATA]
(UE –> NW) CP-ACK [簡單響應NW收到了上一個CP-DATA;不包含RP]
接收短信:
(UE <– NW) CP-DATA[包含SMS的文本內容;包含RP-DATA]
(UE –> NW) CP-ACK [簡單響應收到上一個CP-DATA;不包含RP]
(UE –> NW) CP-DATA[若是短信有什麼異常或手機拒絕等異常cause會攜帶在裏面;包含RP-ACK或者是RP-ERROR,響應上面的RP-DATA]
(UE <– NW) CP-ACK [簡單響應手機收到上一個CP-DATA;不包含RP]
ERROR cause是攜帶在第三個流程中,具體的cause能夠查TS 24.011附件 Annex E
五 . 超級終端的使用(hyper_terminal)
1.安裝超級終端。
2.獲取串口(COM1,2,3,4)。
因爲手機在Normal Mode下,PC須要經過Kernel VCOM Port向手機發送AT Command;而手機默認在Normal Mode下並無打開Kernel VCOM Port。此時須要經過向手機發送ADB Command去讓手機枚舉Kernel VCOM Port。
對於ICS及以上版本,手機枚舉Kernel VCOM的命令爲:在adb shell下,輸入setprop persist.sys.usb.config mass_storage,adb,acm
對於MT6572 GB3版本,手機枚舉Kernel VCOM的命令爲:在adb shell下,輸入echo 1 > /sys/class/usb_composite/acm/enable
1
2
3.測試
AT 確認串口正常
ok
六 . 其餘短信AT指令
1.AT+CPMS
命令解釋:選擇短信存儲載體
1.1 設置短信存儲載體
命令格式:AT+CPMS=[,][,]
命令返回:+CPMS:,,,,, OK/ERROR
測試結果:
1.2 顯示當前短信存儲載體設置
命令格式:AT+CPMS?
命令返回:+CPMS:,,,,,,,, OK/ERROR
測試結果:
1.3 顯示本命令支持的參數
命令格式:AT+CPMS=?
命令返回:+CPMS: (list of supporteds),(list of supporteds),(list of supporteds) OK/ERROR
測試結果:
命令內容:AT+CPMS=?
命令返回:+CPMS: (「ME」,」SM」),(「ME」,」SM」),(「ME」,」SM」) OK
2.AT+CMGF
命令解釋:設置短信格式
2.1 設置短信格式
命令格式:AT+CMGF=//0:PDU格式 1:文本格式
命令返回:OK/ERROR
2.2 顯示本命令支持的參數
命令格式:AT+CMGF=?
命令返回:OK/ERROR
2.3 顯示當前短信格式
命令格式:AT+CMGF?
命令返回:OK/ERROR
測試結果:
3.AT+CMGS
命令解釋:發送短信
命令格式:AT+CMGS=[,]
Text is entered
七 . CMC ERROR 錯誤碼
Error Description
CMS ERROR: 1 Unassigned number
CMS ERROR: 8 Operator determined barring
CMS ERROR: 10 Call bared
CMS ERROR: 21 Short message transfer rejected
CMS ERROR: 27 Destination out of service
CMS ERROR: 28 Unindentified subscriber
CMS ERROR: 29 Facility rejected
CMS ERROR: 30 Unknown subscriber
CMS ERROR: 38 Network out of order
CMS ERROR: 41 Temporary failure
CMS ERROR: 42 Congestion
CMS ERROR: 47 Recources unavailable
CMS ERROR: 50 Requested facility not subscribed
CMS ERROR: 69 Requested facility not implemented
CMS ERROR: 81 Invalid short message transfer reference value
CMS ERROR: 95 Invalid message unspecified
CMS ERROR: 96 Invalid mandatory information
CMS ERROR: 97 Message type non existent or not implemented
CMS ERROR: 98 Message not compatible with short message protocol
CMS ERROR: 99 Information element non-existent or not implemente
CMS ERROR: 111 Protocol error, unspecified
CMS ERROR: 127 Internetworking , unspecified
CMS ERROR: 128 Telematic internetworking not supported
CMS ERROR: 129 Short message type 0 not supported
CMS ERROR: 130 Cannot replace short message
CMS ERROR: 143 Unspecified TP-PID error
CMS ERROR: 144 Data code scheme not supported
CMS ERROR: 145 Message class not supported
CMS ERROR: 159 Unspecified TP-DCS error
CMS ERROR: 160 Command cannot be actioned
CMS ERROR: 161 Command unsupported
CMS ERROR: 175 Unspecified TP-Command error
CMS ERROR: 176 TPDU not supported
CMS ERROR: 192 SC busy
CMS ERROR: 193 No SC subscription
CMS ERROR: 194 SC System failure
CMS ERROR: 195 Invalid SME address
CMS ERROR: 196 Destination SME barred
CMS ERROR: 197 SM Rejected-Duplicate SM
CMS ERROR: 198 TP-VPF not supported
CMS ERROR: 199 TP-VP not supported
CMS ERROR: 208 D0 SIM SMS Storage full
CMS ERROR: 209 No SMS Storage capability in SIM
CMS ERROR: 210 Error in MS
CMS ERROR: 211 Memory capacity exceeded
CMS ERROR: 212 Sim application toolkit busy
CMS ERROR: 213 SIM data download error
CMS ERROR: 255 Unspecified error cause
CMS ERROR: 300 ME Failure
CMS ERROR: 301 SMS service of ME reserved
CMS ERROR: 302 Operation not allowed
CMS ERROR: 303 Operation not supported
CMS ERROR: 304 Invalid PDU mode parameter
CMS ERROR: 305 Invalid Text mode parameter
CMS ERROR: 310 SIM not inserted
CMS ERROR: 311 SIM PIN required
CMS ERROR: 312 PH-SIM PIN required
CMS ERROR: 313 SIM failure
CMS ERROR: 314 SIM busy
CMS ERROR: 315 SIM wrong
CMS ERROR: 316 SIM PUK required
CMS ERROR: 317 SIM PIN2 required
CMS ERROR: 318 SIM PUK2 required
CMS ERROR: 320 Memory failure
CMS ERROR: 321 Invalid memory index
CMS ERROR: 322 Memory full
CMS ERROR: 330 SMSC address unknown
CMS ERROR: 331 No network service
CMS ERROR: 332 Network timeout
CMS ERROR: 340 No +CNMA expected
CMS ERROR: 500 Unknown error
CMS ERROR: 512 User abort
CMS ERROR: 513 Unable to store
CMS ERROR: 514 Invalid Status
CMS ERROR: 515 Device busy or Invalid Character in string
CMS ERROR: 516 Invalid length
CMS ERROR: 517 Invalid character in PDU
CMS ERROR: 518 Invalid parameter
CMS ERROR: 519 Invalid length or character
CMS ERROR: 520 Invalid character in text
CMS ERROR: 521 Timer expired
CMS ERROR: 522 Operation temporary not allowed
CMS ERROR: 532 SIM not ready
CMS ERROR: 534 Cell Broadcast error unknown
CMS ERROR: 535 Protocol stack busy
CMS ERROR: 538 Invalid parameter
參考:http://blog.sina.com.cn/s/blog_4c8b0d600100dlt7.html
http://www.cppblog.com/zhangyq/archive/2009/07/04/89245.html
————————————————
版權聲明:本文爲CSDN博主「誰的影子」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接及本聲明。
原文連接:https://blog.csdn.net/sjz4860402/article/details/78552756html