Kann nicht zum senden von SMS über AT-Befehle
Ich bin mit QextSerialPort
zu access-ports
#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;
}
In diesem code, den ich versuche zum senden von SMS über AT-Befehle. Mein dongle ist ein Huawei-USB-dongle. Es ist bekannt als "MegaFone Modem" sowieso.
In meinem code, ich bin nicht in der Lage zu senden SMS eigentlich. Warum ist das so? Bitte beachten Sie, müssen Sie Bearbeiten die Telefonnummer, wenn Sie diesen code ausführen. Ich bin sehr neu in QT, USB-Programmierung und AT-Befehle. Ich selbst weiß nicht, ob ich den Zugriff auf den richtigen Anschluss, denn es gibt 3 Häfen gehören zu Huawei. Meine Ausgabe ist wie folgt.
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;
}
- Hat man sich hier und versuchen Sie dieses Programm zum ersten mal? codeproject.com/Articles/120638/3G-Modem-Internet-Dialer
- Haben Sie gelesen V. 250 noch? Sie beenden die Befehle mit "\n" das ist falsch, V. 250 explizit sagt, dass AUF Befehl Linien sollte gekündigt werden, mit
<CR>
, z.B. "\r" (eigentlich dieS3
Wert, aber das sollte immer sein 13).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein problem ist folgende:
Immer nach übersendung einer AUF der Kommandozeile, um das modem, das Sie MUSS warten, bis das endgültige Ergebnis code (z.B. in der Regel
OK
oderERROR
obwohl es einige mehr, und Sie müssen bereit sein, Sie alle zu behandeln. Ein Beispiel dafür, wie zu warten, für die endgültige Ergebnis-codes, können Sie sich den Quellcode ansehen von atinout, einem kleinen Programm zum Lesen eine Liste von AT-Befehlen, senden Sie Sie an das modem und drucken der Antworten).Da ohne zu warten, den folgenden Befehl Abbrechen wird der aktuell ausgeführte Befehl. Abtreibung der AT-Befehle definiert im Abschnitt "5.6.1 Abbruch der Befehle" in V. 250. Wenn Sie wenig Erfahrung haben mit dem Umgang mit AT-Befehlen, die Spezifikation zu Lesen ist ein muss. Auch würden Sie gut tun, im Lesen 27.005 für die +CMG... Befehle, die Sie verwenden. Sie finden links zu den Spezifikationen auf der at-Befehl-tag-Informationen.
Für
AT+CMGS
insbesondere müssen Sie auch warten "\r\n> " vor dem senden den text finden Sie unter meine anderen answer.