我正在尝试编写一个简单的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中查看每个命令的描述,以查看是否确实需要AT + CMGC。但是在阅读该文档之前,请阅读V.250中第5章的全部内容,这将教您所需的AT命令处理的所有基础知识。

通过使用用于发送AT命令的通用命令行程序(如modemcli或我的atinout程序),您无法做任何尝试。为了在调制解调器上运行AT+CMGS,发出它的程序必须明确支持此特定AT命令的行为。

这是因为在发送有效负载之前,需要等待调制解调器的“准备接收”提示。有关详细信息,请参见this answer的第一部分。

我已经开始着手开发一个专门用于处理AT+CMGS的配套程序,但尚未完成,请不要屏住呼吸,目前该开发处于暂停状态。

关于c++ - 通过C++程序发送CTRL-Z,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43080648/

10-11 22:42
查看更多