通过 C++ 程序发送 CTRL-Z

send CTRL-Z through C++ program

我正在尝试编写一个简单的 C++ 程序,根据用户的输入发送 SMS 消息。简单的 C++ 程序无法完成这项工作:

#include<stdio.h>
#include <stdlib.h>     /* system, NULL, EXIT_FAILURE */

#include<iostream>
#define CTRL(x) (#x[0]-'a'+1)

using namespace std;
int main()
{
    char buffer[128];
    sprintf(buffer, "/opt/modemcli AT+CMGC=\"+112345678\"\rTEST%c", CTRL(z));
    printf (buffer);
    system(buffer);
    return 0;
}

modemcli 只是一个简单的 C++ 程序,可将消息写入 USB 端口并读取响应。

modemcli is simple, here is a test:
/opt/modemcli AT
Received AT
OK

我的猜测是 CMGC 未正确形成。格式为:

AT+CMGC="PHONE_NUMBER"<CR>SMS MESSAGE BODY.<Ctrl+z>

有人可以帮我解决这个问题吗?

首先,我认为您想使用 AT+CMGS 命令,而不是 AT+CMGC。查看 27.005 to see if you really want AT+CMGC. But before reading that document, read all of chapter 5 in V.250 中每个命令的描述,这将教会你所有你需要的 AT 命令处理的基础知识。

您正在尝试的是不可能通过使用发送 AT 命令的通用命令行程序(如 modemcli 或我的 atinout 程序)来完成。为了 运行 AT+CMGS 在调制解调器上,发出它的程序 必须 明确支持此特定 AT 命令的行为。

这是因为在发送负载之前需要等待调制解调器的 "ready to receive" 提示。有关详细信息,请参阅 this answer 的第一部分。

我已经开始着手开发一个辅助程序,专门用来处理 AT+CMGS,但还没有完成,请不要屏住呼吸,开发目前处于暂停状态。