summaryrefslogtreecommitdiff
path: root/hfpag.cc
diff options
context:
space:
mode:
authorJavier <dev.git@javispedro.com>2014-10-19 18:45:03 +0200
committerJavier <dev.git@javispedro.com>2014-10-19 18:45:03 +0200
commitd8d8fc7a0d139e7b864eee3b573bd208f823ad4f (patch)
treea9b54d6e6e6941c620f4f10cef4b5def9be86f82 /hfpag.cc
downloadsapd-d8d8fc7a0d139e7b864eee3b573bd208f823ad4f.tar.gz
sapd-d8d8fc7a0d139e7b864eee3b573bd208f823ad4f.zip
initial import, no crypto
Diffstat (limited to 'hfpag.cc')
-rw-r--r--hfpag.cc78
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");
+ }
+}