2015-05-08 68 views
4

我正面臨與AT+CUSD命令相關的問題。在一些Gsm調制解調器上,這個命令需要三個參數,而其他參數需要兩個參數。而且,這些參數的值不同。如何編寫AT + CUSD ussd命令以支持最大手機號碼

我想知道,如何配置Gsm調制解調器,以便在大多數Gsm調制解調器上以統一的方式執行該命令

Forexample:在諾基亞C6-01,則CUSD命令僅成功地以這種方式執行:

AT+CUSD=1,"*123#",15 

而索尼愛立信K750:

AT+CUSD=1,"*123#" 

它使假如一個錯誤我給出第三個參數。

回答

4

命令在27.007限定,並且給出的語法

+CUSD=[<n>[,<str>[,<dcs>]]] 

所以實際上所有的參數是可選的,它是有效的與爲0,1,2或3個參數來調用該命令。

關於<dsc>值,其指定的默認值0映射到GSM 7位默認字母用德語和值15是GSM 7位默認字母沒有根據23.038據我可以告訴任何特定的語言。它也說

GSM 7位默認字母表的實施是強制性的。其他字符集的支持是可選的。

因此,如果諾基亞設備提供了錯誤與AT+CUSD=1,"*123#"我會解釋,由於沒有任何德語語言支持,因此它失敗。至於索尼愛立信的手機,我不能說爲什麼它失敗,如果它失敗了任何價值的論點(當然會有幾個值將失敗,但它應該支持15)。嘗試遍歷語言,看看你是否受到任何打擊(例如英語支持?)。

您可能會嘗試以其他方式指定GSM 7位,例如32(或可能通過探索Any reserved codings shall be assumed to be the GSM 7 bit default alphabet (the same as codepoint 00001111) by a receiving entity.,儘管這可能不適用於所有手機)。

既然你正在檢查的最終結果代碼的任何AT命令你在任何情況下發出(你是吧?),它不是實現回退算法那麼多額外的工作:

  1. 首先嚐試使用dcs = 15調用
  2. 如果失敗,則調用dcs = 32
  3. 最後,如果以上所有失敗都嘗試不使用dcs。

這應該是在大量手機上調用AT+CUSD最便攜的方式。


順便說一句,請注意,對於<n>0值在27.007規範下劃線。這是一個有點微妙,但它意味着它是一個默認值,沒有說明確這樣(像做了<dsc>例如)。所以AT+CUSD=是一樣的AT+CUSD=0(實際上,你甚至可以調用AT+CUSD=,"*123#"一樣的AT+CUSD=0,"*123#",雖然你可能會遇到無法正確解析這個手機,所有手機/索尼埃裏克森年初生產的,幾乎所有的生產後調制解調器,並所有基於ST-Ericsson平臺的手機都可以正確解析)。


如果你想進行自動化測試,你可以這樣做用我 atinout程序,例如:

echo ATE1 | atinout - /dev/ttyACM0 - 
for i in $(seq 0 15) 32; \ 
do \ 
     echo AT+CUSD=1,"xxxx",$i; \ 
done | atinout - /dev/ttyACM0 - 

如果您的調制解調器設備是/ dev/ttyASM0。


更新:像this answer描述你所選字符的字符串集可能很可能是這裏的問題。嘗試運行AT+CSCS="GSM",看看是否有幫助。

+0

設置字符設置爲GSM,將反應是英語嗎? –

+0

更改字符編碼不會改變的內容,只是它的表現。請對此進行測試並更新我們的結果。 – hlovdal

+0

問題是設置AT + CSCS = 「GSM」 後得到解決。現在索尼ericson手機也接受第三個參數。但我仍然收到人類可讀格式的迴應。它是否打算行爲?我想如果我將CSCS設置爲GSM,那麼我將以某種非人類可讀格式接收響應。 –