2 * Copyright 2012 Ruediger Gad
4 * This file is part of QZeeControl.
6 * QZeeControl is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
11 * QZeeControl is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with QZeeControl. If not, see <http://www.gnu.org/licenses/>.
24 #include <QtConnectivity/QBluetoothAddress>
25 #include <QtConnectivity/QBluetoothSocket>
28 class BtConnector : public QObject
32 Q_PROPERTY(int x READ x NOTIFY xChanged)
33 Q_PROPERTY(int y READ y NOTIFY yChanged)
35 explicit BtConnector(QObject *parent = 0){
44 Q_INVOKABLE void connect(QString address, int port){
45 qDebug("Trying to connect to: %s--%d", address.toUtf8().constData(), port);
50 socket = new QBluetoothSocket(QBluetoothSocket::RfcommSocket);
51 QObject::connect(socket, SIGNAL(connected()), this, SIGNAL(connected()));
52 QObject::connect(socket, SIGNAL(disconnected()), this, SIGNAL(disconnected()));
53 QObject::connect(socket, SIGNAL(error(QBluetoothSocket::SocketError)), this, SIGNAL(error(QBluetoothSocket::SocketError)));
55 qDebug("Connecting...");
56 socket->connectToService(QBluetoothAddress(address), port);
59 QObject::connect(socket, SIGNAL(readyRead()), this, SLOT(readData()));
80 void error(QBluetoothSocket::SocketError errorCode);
82 void stickMoved(int x, int y);
83 void buttonsChanged(bool a, bool b, bool c, bool d);
90 // qDebug("readData...");
91 QByteArray data = socket->readAll();
92 // qDebug("read %d bytes.", data.size());
95 for(int i=0; i < data.size(); i++){
96 qDebug("%d: %d", i, ((signed char)data.at(i)));
101 * Actually it seems like that the first three bytes are used for
102 * identifying the "type" of data sent. However, for now using the
103 * first seems to suffice.
107 _x = (int)(signed char) data.at(4);
108 _y = (int)(signed char) data.at(5);
112 emit(stickMoved(_x, _y));
113 }else if(data.at(0) == 8){
116 * A -> 0, B -> 1, C -> 2, D ->3
117 * At index 3 to 6 (inclusive)
122 for(int i = 3; i <= 6; i++){
123 for(int b = 0; b <= 3; b++){
125 buttonMap ^= (1 << b);
130 // qDebug("Button map: %d", buttonMap);
131 emit(buttonsChanged(buttonMap & 0x01, buttonMap & 0x02, buttonMap & 0x04, buttonMap & 0x08));
136 QBluetoothSocket *socket;
142 #endif // BTCONNECTOR_H