summaryrefslogtreecommitdiffstats
path: root/recipes-demo-hmi/.gitkeep
blob: e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 (plain)

20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/*
 * Copyright (C) 2018 Konsulko Group
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef BLUETOOTH_H
#define BLUETOOTH_H

#include <QDebug>
#include <QObject>
#include <QJsonArray>

#include "messageengine.h"
#include "bluetoothmodel.h"

class Bluetooth : public QObject
{
    Q_OBJECT
    Q_PROPERTY(bool power READ power WRITE setPower NOTIFY powerChanged)
    Q_PROPERTY(bool discoverable READ discoverable WRITE setDiscoverable NOTIFY discoverableChanged)

    public:
        explicit Bluetooth(QUrl &url, QQmlContext *context, QObject * parent = Q_NULLPTR);
        virtual ~Bluetooth();

        void setPower(bool);
        void setDiscoverable(bool);

        Q_INVOKABLE void start_discovery(void);
        Q_INVOKABLE void stop_discovery(void);

        Q_INVOKABLE void remove_device(QString device);
        Q_INVOKABLE void pair(QString device);
        Q_INVOKABLE void cancel_pair(QString device);

        Q_INVOKABLE void connect(QString device, QString uuid);
        Q_INVOKABLE void connect(QString device);

        Q_INVOKABLE void disconnect(QString device, QString uuid);
        Q_INVOKABLE void disconnect(QString device);

        Q_INVOKABLE void send_confirmation(int pincode);

        bool power() const { return m_power; };
        bool discoverable() const { return m_discoverable; };

    signals:
        void powerChanged(bool state);
        void discoverableChanged();

        void connectionEvent(QJsonObject data);
        void requestConfirmationEvent(QJsonObject data);

    private:
        MessageEngine *m_mloop;
        QQmlContext *m_context;
        BluetoothModel *m_bluetooth;
        void send_command(QString, QJsonObject);
        void set_discovery_filter();
        void discovery_command(bool);
        void populateDeviceList(QJsonObject data);
        void processDeviceChangesEvent(QJsonObject data);

        // slots
        void onConnected();
        void onDisconnected();
        void onMessageReceived(MessageType, Message*);

        QString process_uuid(QString uuid) { if (uuid.length() == 36) return uuid; return uuids.value(uuid); };

        // values
        bool m_power;
        bool m_discoverable;

        QMap<QString, QString> uuids;

        const QStringList events {
            "device_changes",
            "agent",
        };
};

#endif // BLUETOOTH_H