Merge the ServiceNotValidError and OperationError of QLEService
[qt:qtconnectivity.git] / src / bluetooth / gatoperipheral_p.h
1 /****************************************************************************
2 **
3 ** Copyright (C) 2013 Javier de San Pedro <dev.git@javispedro.com>
4 ** Contact: http://www.qt-project.org/legal
5 **
6 ** This file is part of the QtBluetooth module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL21$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and Digia. For licensing terms and
14 ** conditions see http://qt.digia.com/licensing. For further information
15 ** use the contact form at http://qt.digia.com/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 2.1 or version 3 as published by the Free
20 ** Software Foundation and appearing in the file LICENSE.LGPLv21 and
21 ** LICENSE.LGPLv3 included in the packaging of this file. Please review the
22 ** following information to ensure the GNU Lesser General Public License
23 ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
24 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
25 **
26 ** In addition, as a special exception, Digia gives you certain additional
27 ** rights. These rights are described in the Digia Qt LGPL Exception
28 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
29 **
30 ** $QT_END_LICENSE$
31 **
32 ****************************************************************************/
33
34 #ifndef GATOPERIPHERAL_P_H
35 #define GATOPERIPHERAL_P_H
36
37 #include "gatoperipheral.h"
38 #include "gatoservice.h"
39 #include "gatocharacteristic.h"
40 #include "gatodescriptor.h"
41 #include "gatoattclient.h"
42
43 QT_BEGIN_NAMESPACE
44
45 class GatoPeripheralPrivate : public QObject
46 {
47     Q_OBJECT
48
49     Q_DECLARE_PUBLIC(GatoPeripheral)
50
51 public:
52     GatoPeripheralPrivate(GatoPeripheral *parent);
53     ~GatoPeripheralPrivate();
54
55     GatoPeripheral *q_ptr;
56     GatoAddress addr;
57     QString name;
58     QSet<GatoUUID> service_uuids;
59     QMap<GatoHandle, GatoService> services;
60
61     bool complete_name : 1;
62     bool complete_services : 1;
63
64     /** Maps attribute handles to service handles. */
65     QMap<GatoHandle, GatoHandle> characteristic_to_service;
66     QMap<GatoHandle, GatoHandle> value_to_characteristic;
67     QMap<GatoHandle, GatoHandle> descriptor_to_characteristic;
68
69     GatoAttClient *att;
70     QMap<uint, GatoUUID> pending_primary_reqs;
71     QMap<uint, GatoHandle> pending_characteristic_reqs;
72     QMap<uint, GatoHandle> pending_characteristic_read_reqs;
73     QMap<uint, GatoHandle> pending_descriptor_reqs;
74     QMap<uint, GatoHandle> pending_descriptor_read_reqs;
75
76     QMap<GatoHandle, bool> pending_set_notify;
77
78     void parseEIRFlags(quint8 data[], int len);
79     void parseEIRUUIDs(int size, bool complete, quint8 data[], int len);
80     void parseName(bool complete, quint8 data[], int len);
81
82     static GatoCharacteristic parseCharacteristicValue(const QByteArray &ba);
83
84     static QByteArray genClientCharConfiguration(bool notification, bool indication);
85
86     void clearServices();
87     void clearServiceCharacteristics(GatoService *service);
88     void clearCharacteristicDescriptors(GatoCharacteristic *characteristic);
89
90     void finishSetNotifyOperations(const GatoCharacteristic &characteristic);
91
92 public slots:
93     void handleAttConnected();
94     void handleAttDisconnected();
95     void handleAttAttributeUpdated(GatoHandle handle, const QByteArray &value, bool confirmed);
96     void handlePrimary(uint req, const QList<GatoAttClient::AttributeGroupData>& list);
97     void handlePrimaryForService(uint req, const QList<GatoAttClient::HandleInformation>& list);
98     void handleCharacteristic(uint req, const QList<GatoAttClient::AttributeData> &list);
99     void handleDescriptors(uint req, const QList<GatoAttClient::InformationData> &list);
100     void handleCharacteristicRead(uint req, const QByteArray &value);
101     void handleDescriptorRead(uint req, const QByteArray &value);
102     void handleCharacteristicWrite(uint req, bool ok);
103     void handleDescriptorWrite(uint req, bool ok);
104 };
105
106 QT_END_NAMESPACE
107
108 #endif // GATOPERIPHERAL_P_H