diff options
author | Javier <dev.git@javispedro.com> | 2014-10-19 18:45:03 +0200 |
---|---|---|
committer | Javier <dev.git@javispedro.com> | 2014-10-19 18:45:03 +0200 |
commit | d8d8fc7a0d139e7b864eee3b573bd208f823ad4f (patch) | |
tree | a9b54d6e6e6941c620f4f10cef4b5def9be86f82 /hfpag.cc | |
download | sapd-d8d8fc7a0d139e7b864eee3b573bd208f823ad4f.tar.gz sapd-d8d8fc7a0d139e7b864eee3b573bd208f823ad4f.zip |
initial import, no crypto
Diffstat (limited to 'hfpag.cc')
-rw-r--r-- | hfpag.cc | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/hfpag.cc b/hfpag.cc new file mode 100644 index 0000000..1d84c8f --- /dev/null +++ b/hfpag.cc @@ -0,0 +1,78 @@ +#include <QtCore/QDebug> +#include "hfpag.h" + +HfpAg::HfpAg(const QBluetoothAddress &addr, QObject *parent) : + QObject(parent), _socket(new QBluetoothSocket(QBluetoothSocket::RfcommSocket, this)) +{ + connect(_socket, SIGNAL(connected()), SLOT(handleConnected())); + connect(_socket, SIGNAL(disconnected()), SLOT(handleDisconnected())); + connect(_socket, SIGNAL(readyRead()), SLOT(handleReadyRead())); + _socket->connectToService(addr, 7); // HFP AG +} + +void HfpAg::send(const QString &cmd) +{ + _socket->write("\r\n", 2); + _socket->write(cmd.toLatin1()); + _socket->write("\r\n", 2); + //qDebug() << "HFP response:" << cmd; +} + +void HfpAg::handleConnected() +{ + qDebug() << "Connected to HFP"; +} + +void HfpAg::handleDisconnected() +{ + qDebug() << "Disconnected from HFP"; +} + +void HfpAg::handleReadyRead() +{ + _inBuf.append(_socket->readAll()); + + int offset = _inBuf.indexOf("\r\n"); + while (offset >= 0) { + QString cmd = QString::fromLatin1(_inBuf.mid(0, offset)); + _inBuf.remove(0, offset + 2); + + handleCommand(cmd); + + offset = _inBuf.indexOf("\r\n"); + } +} + +void HfpAg::handleCommand(const QString &cmd) +{ + //qDebug() << "HFP command:" << cmd; + + if (cmd.startsWith("AT+BRSF=")) { + send("+BRSF: 20"); + send("OK"); + } else if (cmd == "AT+CIND=?") { + send("+CIND: (\"call\",(0,1)),(\"callsetup\",(0-3)),(\"service\",(0-1)),(\"signal\",(0-5)),(\"roam\",(0,1)),(\"battchg\",(0-5)),(\"callheld\",(0-2))"); + send("OK"); + } else if (cmd == "AT+CIND?") { + send("+CIND: 0,0,0,0,0,3,0"); + send("OK"); + } else if (cmd.startsWith("AT+CMER=")) { + send("OK"); + } else if (cmd.startsWith("AT+CLIP=")) { + send("OK"); + } else if (cmd.startsWith("AT+COPS=")) { + send("OK"); + } else if (cmd.startsWith("AT+CCWA=")) { + send("OK"); + } else if (cmd.startsWith("AT+BIA=")) { + send("OK"); + } else if (cmd.startsWith("AT+CLCC=")) { + send("OK"); + } else if (cmd.startsWith("ATD")) { + qDebug() << "Dialing" << cmd.mid(3); + send("OK"); + } else { + qWarning() << "Unknown AT command: " << cmd; + send("+CME ERROR: 0"); + } +} |