我在用QextSerialPort
访问端口
#include <qstring.h>
#include <qdebug.h>
#include <QCoreApplication>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QList<QextPortInfo> ports = QextSerialEnumerator::getPorts();
QextSerialPort *port;
QString portName;
int counter=0;
//Navigate through ports untill you find huwawei USB dongle
while(counter<ports.size())
{
portName = ports[counter].portName;
QString productId= ports[counter].productID;
QString physicalName = ports[counter].physName;
QString vendorId = ports[counter].vendorID;
QString friendName = ports[counter].friendName;
string convertedPortName = portName.toLocal8Bit().constData();
string convertedProductId = productId.toLocal8Bit().constData();
string convertedPhysicalName = physicalName.toLocal8Bit().constData();
string convertedVendorId = vendorId.toLocal8Bit().constData();
string convertedFriendName = friendName.toLocal8Bit().constData();
cout << "Port Name: " << convertedPortName << endl;
cout << "Product ID:" << convertedProductId << endl;
cout << "Physical Name: " << convertedPhysicalName << endl;
cout << "Vendor Id: " << convertedVendorId << endl;
cout << "Friend Name: " << convertedFriendName << endl;
cout << endl;
counter++;
//Break if you found Huwawei USB dongle, assign the port to a new port
if (std::string::npos != convertedFriendName.find("HUAWEI Mobile Connect - 3G Modem"))
{
std::cout << "found!" << std::endl;
port = new QextSerialPort(portName);
break;
}
}
//Write and send the SMS
port->open(QIODevice::ReadWrite) ;
cout << port->isOpen() << endl;
port->write("AT+CFUN=1");
port->write("AT+CMGF=1 ");
port->write("AT+CMGS=1234567");
port->write("Hello Test SMS");
//port->write("0x1A");
port->flush();
port->close();
cout << port->isOpen() << endl;
system("pause");
return 0;
}
在此代码中,我尝试使用 AT 命令发送短信。我的加密狗是华为 USB 加密狗。无论如何,它被称为“MegaFone 调制解调器”。
在我的代码中,我实际上无法发送任何短信。这是为什么?请注意,运行此代码时必须编辑电话号码。我对 QT、USB 编程和 AT 命令非常陌生。我什至不知道我是否访问了正确的端口,因为有3个端口属于华为。我的输出如下。
UPDATE
#include <qstring.h>
#include <qdebug.h>
#include <QCoreApplication>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QList<QextPortInfo> ports = QextSerialEnumerator::getPorts();
QextSerialPort *port;
QString portName;
int counter=0;
//Navigate through ports untill you find huwawei USB dongle
while(counter<ports.size())
{
portName = ports[counter].portName;
QString productId= ports[counter].productID;
QString physicalName = ports[counter].physName;
QString vendorId = ports[counter].vendorID;
QString friendName = ports[counter].friendName;
string convertedPortName = portName.toLocal8Bit().constData();
string convertedProductId = productId.toLocal8Bit().constData();
string convertedPhysicalName = physicalName.toLocal8Bit().constData();
string convertedVendorId = vendorId.toLocal8Bit().constData();
string convertedFriendName = friendName.toLocal8Bit().constData();
cout << "Port Name: " << convertedPortName << endl;
cout << "Product ID:" << convertedProductId << endl;
cout << "Physical Name: " << convertedPhysicalName << endl;
cout << "Vendor Id: " << convertedVendorId << endl;
cout << "Friend Name: " << convertedFriendName << endl;
cout << endl;
counter++;
//Break if you found Huwawei USB dongle, assign the port to a new port
if (std::string::npos != convertedFriendName.find("HUAWEI Mobile Connect - 3G Modem"))
{
std::cout << "found!" << std::endl;
port = new QextSerialPort(portName);
break;
}
}
//Write and send the SMS
port->open(QIODevice::ReadWrite) ;
cout << port->isOpen() << endl;
port->write("AT+CFUN=1\n");
cout << "\n";
port->write("AT+CMGF=1 \n ");
cout << "\n";
port->write("AT+CMGS=0776255495\n");
cout << "\n";
port->write("Hello Test SMS\n");
cout << "\n";
//port->write("0x1A");
port->flush();
port->close();
cout << port->isOpen() << endl;
system("pause");
return 0;
}
您的问题如下:
port->write("AT+CFUN=1");
port->write("AT+CMGF=1 ");
port->write("AT+CMGS=1234567");
port->write("Hello Test SMS");
总是在向调制解调器发送 AT 命令行后,您MUST等待最终结果代码(例如通常OK
or ERROR
尽管还有更多,但您必须准备好处理所有这些。关于如何等待最终结果代码的示例,可以查看源码atinout http://atinout.sourceforge.net/,这是一个小程序,用于读取 AT 命令列表,将它们发送到调制解调器并打印响应)。
因为不等待以下命令将中止当前正在执行的命令。 AT 命令的中止在 V.250 中的“5.6.1 中止命令”部分中定义。如果您对处理 AT 命令缺乏经验,那么该规范是必读的。此外,您还可以阅读 27.005 来了解您使用的 +CMG... 命令。您可以在以下位置找到规格链接:at命令标签信息 https://stackoverflow.com/tags/at-command/info.
For AT+CMGS
具体来说,您还必须在发送文本之前等待“\r\n>”,请参阅我的另一个答案 https://stackoverflow.com/a/15591673/23118r.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)