2014-03-13 23 views
0

我寫了一個代碼發送數據到串口/ dev/ttyACM0。基本上這與GSM調制解調器一起使用來發送SMS。 AT命令設置SMS在存儲器中併發送它是發送ctrl-z到C(GSM SMS)中的串口

首先我需要寫在串行端口 下面的「AT + CMGW = 16 \ R」

然後寫以下PDU轉換後的消息 069110090000F111000A9210299232900000AA03C8F40F 然後發送CTRL-Z

我有發送CTRL-Z的問題

說消息= 「069110090000F111000A9210299232900000AA03C8F40F」 我已經試過

strcat(message,"\x1A"); //Does not work 
strcat(message,"\032"); //Does not work 

我甚至試着在其中增加一個字符爲char *

void append(char *s,char c) 
{ 
    int len = strlen(s); 
    s[len] = c; 
    s[len+1] = '\0'; 
} 

append(message, '\032'); //Does not work 
append(message, '\x1A'); //Does not work 

的功能,我需要讀取接收端口的緩衝區,以檢查計數 例子+ CMGW:4

然後寫 AT + CMSS = 3 \ r 發送消息。

在minicom上鍵入上面的AT命令發送SMS。但在C代碼中,我只能輸入ctrl-z。

有誰知道如何去做呢?

任何幫助表示讚賞 謝謝

+0

它不附加到消息還是不發送ctrl-z?如果它沒有發送ctrl-z,你是否檢查了發送代碼中是否短了一個字符? – cup

+0

@cup看來它附加。我在接收緩衝區數據的消息旁邊看到一個奇怪的外觀符號。但是一旦發送了ctrl-z,我還需要收到+ CMGW: OK。我根本沒有收到這個。我只看到上面的命令和消息旁邊的一個奇怪的符號,沒有任何符號。所以我假設ctrl-z沒有發送 – Giz

回答

0

嗯,這是我的錯誤。我概括了發送到串口的數據大小。我認爲,由於定義的發送大小較大,ctrl-z十六進制值0x1A後面的值是垃圾值。所以我的命令無法將短信保存在內存中,因爲它不知道0x1A後面的值。爲了解決這個問題,我使用strlen來發送char *發送到串口的實際大小。