output of AT command c++ code

*爱你&永不变心* 提交于 2019-12-02 16:50:18

问题


I wrote the following code which sends a simple message to my mobile with GSM SM5100B. But it does not work. I would like to check the outputs of each printf line with c++ code. For example

AT+CMFG=1
ok
AT+CMGS="69******"
ok

etc. Is there any why to implement this?

My code

#include <stdio.h> // standard input / output functions
#include <string.h> // string function definitions
#include <unistd.h> // UNIX standard function definitions
#include <fcntl.h> // File control definitions
#include <errno.h> // Error number definitions
#include <termios.h> // POSIX terminal control definitionss
#include <time.h>   // time calls

int open_port(void)
{
int fd; // file description for the serial port
fd = open("/dev/ttyAMA0", O_RDWR | O_NOCTTY | O_NDELAY);
if(fd == -1) // if open is unsucessful
{
    printf("open_port: Unable to open /dev/ttyAMA0. \n");
}
else
{
    fcntl(fd, F_SETFL, 0);
    printf("port is open.\n");
}

return(fd);
} //open_port

int configure_port(int fd)      // configure the port
{
struct termios port_settings;      // structure to store the port settings in

cfsetispeed(&port_settings, B9600);    // set baud rates
cfsetospeed(&port_settings, B9600);

port_settings.c_cflag &= ~PARENB;    // set no parity, stop bits, data bits
port_settings.c_cflag &= ~CSTOPB;
port_settings.c_cflag &= ~CSIZE;
port_settings.c_cflag |= CS8;

tcsetattr(fd, TCSANOW, &port_settings);    // apply the settings to the port
return(fd);

}  

void init_gsm()
{
 printf("AT+CMGF=1\r\n");
 sleep(3);
 printf("AT+CMGS=\"+34603****\"\r\n");
 sleep(3);
 //printf("Hello\r\n%c",26); 
 printf("Hello\x1A");
 sleep(3);
// printf("\x1A");

}
int main(void)
{
int fd = open_port();
configure_port(fd);
sleep(5);
//query_modem(fd);
    init_gsm();
return(0);

}

回答1:


Most seriously, you are not waiting for the final result code after sending an AT command. Using sleep is not a valid solution. You MUST fix this to do proper parsing of the response you get back from the modem. See the following answers for more details, answer 1, answer 2.

Then your init_gsm function ought to have an int fd argument to use for sending the AT commands to as well as reading the response from.




回答2:


The C++ method is that you use a combination of stringstream and write.

stringstream ss;
string number;

cout << "Enter phone number to send to:");  
cout.flush();
cin >> number;
ss << "AT+CMGS=\"" << number << "\"\r\n";
string str = ss.str();
write(fd, str.c_str(), str.length());


来源:https://stackoverflow.com/questions/16663848/output-of-at-command-c-code

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!