【问题标题】:Sending ctrl-z to serial port in C (GSM SMS)将 ctrl-z 发送到 C 中的串行端口(GSM SMS)
【发布时间】:2014-03-27 20:29:34
【问题描述】:

我写了一个代码来发送数据到串口/dev/ttyACM0。基本上,这与 GSM 调制解调器一起用于发送 SMS。在内存中设置短信并发送的AT指令是

首先我需要在串口中写入以下内容 "AT+CMGW=16\r"

然后写下面的pdu转换消息 069110090000F111000A9210299232900000AA03C8F40F 然后发送 ctrl-z

我在发送 ctrl-z 时遇到问题

说消息=“069110090000F111000A9210299232900000AA03C8F40F” 我试过了

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

我什至尝试过一个将 char 添加到 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。

有人知道怎么做吗?

任何帮助表示赞赏 谢谢

【问题讨论】:

  • 它不附加到消息中还是不发送 ctrl-z?如果不发送ctrl-z,你有没有检查你是否在发送代码中短了一个字符?
  • @cup 好像是附加的。我在接收缓冲区数据的消息旁边看到一个奇怪的符号。但是一旦发送 ctrl-z 我还需要接收 +CMGW: OK。我根本没有收到这个。我只看到上面的命令和消息旁边的一个奇怪的符号,后面什么都没有。所以我假设没有发送 ctrl-z

标签: c linux serial-port sms


【解决方案1】:

好吧,这是我的错误。我概括了发送到串口的数据大小。我认为由于定义的发送大小较大,因此 ctrl-z 十六进制值 0x1A 之后的值是垃圾值。所以我的命令无法将短信保存在内存中,因为它不知道 0x1A 后面的值意味着什么。为了解决这个问题,我使用 strlen 将实际大小的 char * 发送到串口。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    相关资源
    最近更新 更多