-
Notifications
You must be signed in to change notification settings - Fork 6
/
MainWindow.h
136 lines (112 loc) · 3.58 KB
/
MainWindow.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
// QWalkingPad - Simple desktop application for controlling the Kingsmith WalkingPad over BLE
// Copyright (C) 2021 Dorian Rudolph
//
// This program is free software: you can redistribute it and/or modify it
// under the terms of the GNU General Public License as published by the Free
// Software Foundation, either version 3 of the License, or (at your option)
// any later version.
//
// This program is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
// more details.
//
// You should have received a copy of the GNU General Public License along with
// this program. If not, see <http://www.gnu.org/licenses/>.
#pragma once
#include <QMainWindow>
#include <QBluetoothDeviceInfo>
#include <QBluetoothDeviceDiscoveryAgent>
#include <QLowEnergyController>
#include "Settings.h"
#include "Statistics.h"
class QBluetoothDeviceInfo;
class QLabel;
class QLowEnergyController;
class QRadioButton;
class QSlider;
class QPushButton;
class MainWindow : public QMainWindow {
Q_OBJECT
public:
MainWindow();
public slots:
void receivedMessage(int instanceId, QByteArray message);
protected:
void showEvent(QShowEvent *event) override;
private slots:
void disconnect();
void addDevice(const QBluetoothDeviceInfo &device);
void scanFinished();
void scanError(QBluetoothDeviceDiscoveryAgent::Error error);
void tick();
void serviceDiscovered(const QBluetoothUuid &gatt);
void discoveryFinished();
void connectError(QLowEnergyController::Error error);
void connected();
void disconnected();
void serviceStateChanged(QLowEnergyService::ServiceState newState);
void characteristicChanged(const QLowEnergyCharacteristic &c, const QByteArray &value);
void handleSend();
void setSpeedWidgets(int speed);
void setStartSpeedWidgets(int speed);
private:
void startDiscovering();
void setupMenu();
void scan();
void showMessage(const QString &message);
void setStatus(const QString &status);
void setupTimer();
void setConnectActionEnabled(bool enabled);
void handleInvalidService();
void connectDevice();
void setupLayout();
void send(const QByteArray &msg);
QSlider *makeSpeedSlider();
void updateStatsLabel();
void sendStart();
QLabel *statusLabel;
QLabel *messageLabel;
enum {
DISCONNECTED,
DISCONNECTING,
CONNECTING,
CONNECTED
} state {DISCONNECTED};
QMenu *connectMenu;
QAction *disconnectAction;
QAction *scanAction;
QList<QAction*> connectActions;
QList<QBluetoothDeviceInfo> devices;
QBluetoothDeviceInfo selectedDevice;
QBluetoothDeviceDiscoveryAgent *deviceDiscoveryAgent {};
QList<QRadioButton*> modeButtons {nullptr, nullptr, nullptr};
QLowEnergyController *bleController {};
QLowEnergyService *service {};
QLowEnergyCharacteristic writeChar;
QTimer *tickTimer;
QTimer *sendTimer;
QList<QByteArray> sendQueue;
Settings settings;
bool autoConnected {}; //only auto connect once
bool connectionsEnabled {true};
qint64 setModeTime {}; // don't update UI directly after setting
qint64 setSpeedTime {};
QWidget *centerWidget;
QSlider *speedSlider;
QLabel *speedLabel;
QSlider *startSpeedSlider;
QLabel *startSpeedLabel;
QPushButton *startButton;
bool queriedParams {};
Pad::Statistics::Data currentData {};
Pad::Statistics stats {};
int currentSpeed {};
QLabel *statsLabel;
bool retrievingRecords {};
uint8_t remainingRecords {};
qint64 retrievingRecordsTime {};
int relativeSetSpeed;
qint64 relativeSetTime {};
int maxSpeed {60};
};