Skip to content
This repository was archived by the owner on Jan 28, 2022. It is now read-only.

Commit 4469317

Browse files
authored
fix: button interrupt fix (#469)
1 parent d55bf58 commit 4469317

8 files changed

+194
-253
lines changed

basic_ui/Volume.qml

+4-2
Original file line numberDiff line numberDiff line change
@@ -154,8 +154,10 @@ Item {
154154
onTriggered: {
155155
count++;
156156

157-
if (count >= 4) {
158-
changeInterval = 80;
157+
if (count >= 5) {
158+
changeInterval = 50;
159+
} else if (count >= 3) {
160+
changeInterval = 150;
159161
}
160162

161163
volume.volumeChanged();

sources/hardware/buttonhandler.cpp

+52-182
Original file line numberDiff line numberDiff line change
@@ -57,212 +57,82 @@ QObject *ButtonHandler::getQMLInstance(QQmlEngine *engine, QJSEngine *scriptEngi
5757
void ButtonHandler::onInterrupt(int event) {
5858
switch (event) {
5959
case (DPAD_UP): {
60-
if (m_buttonPressed != DPAD_UP) {
61-
m_buttonReleased = -1;
62-
emit buttonReleased(-1);
63-
64-
m_buttonPressed = DPAD_UP;
65-
emit buttonPressed(DPAD_UP);
66-
qCDebug(CLASS_LC) << "Dpad up pressed";
67-
} else {
68-
m_buttonPressed = -1;
69-
70-
m_buttonReleased = DPAD_UP;
71-
emit buttonReleased(DPAD_UP);
72-
qCDebug(CLASS_LC) << "Dpad up released";
73-
}
60+
emit buttonPressed(DPAD_UP);
61+
} break;
62+
case (DPAD_UP_RELEASED): {
63+
emit buttonReleased(DPAD_UP);
7464
} break;
7565
case (DPAD_DOWN): {
76-
if (m_buttonPressed != DPAD_DOWN) {
77-
m_buttonReleased = -1;
78-
emit buttonReleased(-1);
79-
80-
m_buttonPressed = DPAD_DOWN;
81-
emit buttonPressed(DPAD_DOWN);
82-
qCDebug(CLASS_LC) << "Dpad down pressed";
83-
} else {
84-
m_buttonPressed = -1;
85-
86-
m_buttonReleased = DPAD_DOWN;
87-
emit buttonReleased(DPAD_DOWN);
88-
qCDebug(CLASS_LC) << "Dpad down released";
89-
}
66+
emit buttonPressed(DPAD_DOWN);
67+
} break;
68+
case (DPAD_DOWN_RELEASED): {
69+
emit buttonReleased(DPAD_DOWN);
9070
} break;
9171
case (DPAD_LEFT): {
92-
if (m_buttonPressed != DPAD_LEFT) {
93-
m_buttonReleased = -1;
94-
emit buttonReleased(-1);
95-
96-
m_buttonPressed = DPAD_LEFT;
97-
emit buttonPressed(DPAD_LEFT);
98-
qCDebug(CLASS_LC) << "Dpad left pressed";
99-
} else {
100-
m_buttonPressed = -1;
101-
102-
m_buttonReleased = DPAD_LEFT;
103-
emit buttonReleased(DPAD_LEFT);
104-
qCDebug(CLASS_LC) << "Dpad left released";
105-
}
72+
emit buttonPressed(DPAD_LEFT);
73+
} break;
74+
case (DPAD_LEFT_RELEASED): {
75+
emit buttonReleased(DPAD_LEFT);
10676
} break;
10777
case (DPAD_RIGHT): {
108-
if (m_buttonPressed != DPAD_RIGHT) {
109-
m_buttonReleased = -1;
110-
emit buttonReleased(-1);
111-
112-
m_buttonPressed = DPAD_RIGHT;
113-
emit buttonPressed(DPAD_RIGHT);
114-
qCDebug(CLASS_LC) << "Dpad right pressed";
115-
} else {
116-
m_buttonPressed = -1;
117-
118-
m_buttonReleased = DPAD_RIGHT;
119-
emit buttonReleased(DPAD_RIGHT);
120-
qCDebug(CLASS_LC) << "Dpad right released";
121-
}
78+
emit buttonPressed(DPAD_RIGHT);
79+
} break;
80+
case (DPAD_RIGHT_RELEASED): {
81+
emit buttonReleased(DPAD_RIGHT);
12282
} break;
12383
case (DPAD_MIDDLE): {
124-
if (m_buttonPressed != DPAD_MIDDLE) {
125-
m_buttonReleased = -1;
126-
emit buttonReleased(-1);
127-
128-
m_buttonPressed = DPAD_MIDDLE;
129-
emit buttonPressed(DPAD_MIDDLE);
130-
qCDebug(CLASS_LC) << "Dpad middle pressed";
131-
} else {
132-
m_buttonPressed = -1;
133-
134-
m_buttonReleased = DPAD_MIDDLE;
135-
emit buttonReleased(DPAD_MIDDLE);
136-
qCDebug(CLASS_LC) << "Dpad middle released";
137-
}
84+
emit buttonPressed(DPAD_MIDDLE);
85+
} break;
86+
case (DPAD_MIDDLE_RELEASED): {
87+
emit buttonReleased(DPAD_MIDDLE);
13888
} break;
13989
case (TOP_LEFT): {
140-
if (m_buttonPressed != TOP_LEFT) {
141-
m_buttonReleased = -1;
142-
emit buttonReleased(-1);
143-
144-
m_buttonPressed = TOP_LEFT;
145-
emit buttonPressed(TOP_LEFT);
146-
qCDebug(CLASS_LC) << "Top left pressed";
147-
} else {
148-
m_buttonPressed = -1;
149-
150-
m_buttonReleased = TOP_LEFT;
151-
emit buttonReleased(TOP_LEFT);
152-
qCDebug(CLASS_LC) << "Top left released";
153-
}
90+
emit buttonPressed(TOP_LEFT);
91+
} break;
92+
case (TOP_LEFT_RELEASED): {
93+
emit buttonReleased(TOP_LEFT);
15494
} break;
15595
case (TOP_RIGHT): {
156-
if (m_buttonPressed != TOP_RIGHT) {
157-
m_buttonReleased = -1;
158-
emit buttonReleased(-1);
159-
160-
m_buttonPressed = TOP_RIGHT;
161-
emit buttonPressed(TOP_RIGHT);
162-
qCDebug(CLASS_LC) << "Top right pressed";
163-
} else {
164-
m_buttonPressed = -1;
165-
166-
m_buttonReleased = TOP_RIGHT;
167-
emit buttonReleased(TOP_RIGHT);
168-
qCDebug(CLASS_LC) << "Top right released";
169-
}
96+
emit buttonPressed(TOP_RIGHT);
97+
} break;
98+
case (TOP_RIGHT_RELEASED): {
99+
emit buttonReleased(TOP_RIGHT);
170100
} break;
171101
case (BOTTOM_LEFT): {
172-
if (m_buttonPressed != BOTTOM_LEFT) {
173-
m_buttonReleased = -1;
174-
emit buttonReleased(-1);
175-
176-
m_buttonPressed = BOTTOM_LEFT;
177-
emit buttonPressed(BOTTOM_LEFT);
178-
qCDebug(CLASS_LC) << "Bottom left pressed";
179-
} else {
180-
m_buttonPressed = -1;
181-
182-
m_buttonReleased = BOTTOM_LEFT;
183-
emit buttonReleased(BOTTOM_LEFT);
184-
qCDebug(CLASS_LC) << "Bottom left released";
185-
}
102+
emit buttonPressed(BOTTOM_LEFT);
103+
} break;
104+
case (BOTTOM_LEFT_RELEASED): {
105+
emit buttonReleased(BOTTOM_LEFT);
186106
} break;
187107
case (BOTTOM_RIGHT): {
188-
if (m_buttonPressed != BOTTOM_RIGHT) {
189-
m_buttonReleased = -1;
190-
emit buttonReleased(-1);
191-
192-
m_buttonPressed = BOTTOM_RIGHT;
193-
emit buttonPressed(BOTTOM_RIGHT);
194-
qCDebug(CLASS_LC) << "Bottom right pressed";
195-
} else {
196-
m_buttonPressed = -1;
197-
198-
m_buttonReleased = BOTTOM_RIGHT;
199-
emit buttonReleased(BOTTOM_RIGHT);
200-
qCDebug(CLASS_LC) << "Bottom right released";
201-
}
108+
emit buttonPressed(BOTTOM_RIGHT);
109+
} break;
110+
case (BOTTOM_RIGHT_RELEASED): {
111+
emit buttonReleased(BOTTOM_RIGHT);
202112
} break;
203113
case (VOLUME_UP): {
204-
if (m_buttonPressed != VOLUME_UP) {
205-
m_buttonReleased = -1;
206-
emit buttonReleased(-1);
207-
208-
m_buttonPressed = VOLUME_UP;
209-
emit buttonPressed(VOLUME_UP);
210-
qCDebug(CLASS_LC) << "Volume up pressed";
211-
} else {
212-
m_buttonPressed = -1;
213-
214-
m_buttonReleased = VOLUME_UP;
215-
emit buttonReleased(VOLUME_UP);
216-
qCDebug(CLASS_LC) << "Volume up released";
217-
}
114+
emit buttonPressed(VOLUME_UP);
115+
} break;
116+
case (VOLUME_UP_RELEASED): {
117+
emit buttonReleased(VOLUME_UP);
218118
} break;
219119
case (VOLUME_DOWN): {
220-
if (m_buttonPressed != VOLUME_DOWN) {
221-
m_buttonReleased = -1;
222-
emit buttonReleased(-1);
223-
224-
m_buttonPressed = VOLUME_DOWN;
225-
emit buttonPressed(VOLUME_DOWN);
226-
qCDebug(CLASS_LC) << "Volume down pressed";
227-
} else {
228-
m_buttonPressed = -1;
229-
230-
m_buttonReleased = VOLUME_DOWN;
231-
emit buttonReleased(VOLUME_DOWN);
232-
qCDebug(CLASS_LC) << "Volume down released";
233-
}
120+
emit buttonPressed(VOLUME_DOWN);
121+
} break;
122+
case (VOLUME_DOWN_RELEASED): {
123+
emit buttonReleased(VOLUME_DOWN);
234124
} break;
235125
case (CHANNEL_UP): {
236-
if (m_buttonPressed != CHANNEL_UP) {
237-
m_buttonReleased = -1;
238-
emit buttonReleased(-1);
239-
240-
m_buttonPressed = CHANNEL_UP;
241-
emit buttonPressed(CHANNEL_UP);
242-
qCDebug(CLASS_LC) << "Channel up pressed";
243-
} else {
244-
m_buttonPressed = -1;
245-
246-
m_buttonReleased = CHANNEL_UP;
247-
emit buttonReleased(CHANNEL_UP);
248-
qCDebug(CLASS_LC) << "Channel up released";
249-
}
126+
emit buttonPressed(CHANNEL_UP);
127+
} break;
128+
case (CHANNEL_UP_RELEASED): {
129+
emit buttonReleased(CHANNEL_UP);
250130
} break;
251131
case (CHANNEL_DOWN): {
252-
if (m_buttonPressed != CHANNEL_DOWN) {
253-
m_buttonReleased = -1;
254-
emit buttonReleased(-1);
255-
256-
m_buttonPressed = CHANNEL_DOWN;
257-
emit buttonPressed(CHANNEL_DOWN);
258-
qCDebug(CLASS_LC) << "Channel down pressed";
259-
} else {
260-
m_buttonPressed = -1;
261-
262-
m_buttonReleased = CHANNEL_DOWN;
263-
emit buttonReleased(CHANNEL_DOWN);
264-
qCDebug(CLASS_LC) << "Channel down released";
265-
}
132+
emit buttonPressed(CHANNEL_DOWN);
133+
} break;
134+
case (CHANNEL_DOWN_RELEASED): {
135+
emit buttonReleased(CHANNEL_DOWN);
266136
} break;
267137
}
268138
}

sources/hardware/buttonhandler.h

+26-13
Original file line numberDiff line numberDiff line change
@@ -33,19 +33,32 @@ class ButtonHandler : public QObject {
3333

3434
public:
3535
enum Buttons {
36-
DPAD_UP = InterruptHandler::DPAD_UP,
37-
DPAD_DOWN = InterruptHandler::DPAD_DOWN,
38-
DPAD_LEFT = InterruptHandler::DPAD_LEFT,
39-
DPAD_RIGHT = InterruptHandler::DPAD_RIGHT,
40-
DPAD_MIDDLE = InterruptHandler::DPAD_MIDDLE,
41-
TOP_RIGHT = InterruptHandler::TOP_RIGHT,
42-
TOP_LEFT = InterruptHandler::TOP_LEFT,
43-
BOTTOM_RIGHT = InterruptHandler::BOTTOM_RIGHT,
44-
BOTTOM_LEFT = InterruptHandler::BOTTOM_LEFT,
45-
VOLUME_UP = InterruptHandler::VOLUME_UP,
46-
VOLUME_DOWN = InterruptHandler::VOLUME_DOWN,
47-
CHANNEL_UP = InterruptHandler::CHANNEL_UP,
48-
CHANNEL_DOWN = InterruptHandler::CHANNEL_DOWN
36+
DPAD_UP = InterruptHandler::DPAD_UP,
37+
DPAD_UP_RELEASED = InterruptHandler::DPAD_UP_RELEASED,
38+
DPAD_DOWN = InterruptHandler::DPAD_DOWN,
39+
DPAD_DOWN_RELEASED = InterruptHandler::DPAD_DOWN_RELEASED,
40+
DPAD_LEFT = InterruptHandler::DPAD_LEFT,
41+
DPAD_LEFT_RELEASED = InterruptHandler::DPAD_LEFT_RELEASED,
42+
DPAD_RIGHT = InterruptHandler::DPAD_RIGHT,
43+
DPAD_RIGHT_RELEASED = InterruptHandler::DPAD_RIGHT_RELEASED,
44+
DPAD_MIDDLE = InterruptHandler::DPAD_MIDDLE,
45+
DPAD_MIDDLE_RELEASED = InterruptHandler::DPAD_MIDDLE_RELEASED,
46+
TOP_RIGHT = InterruptHandler::TOP_RIGHT,
47+
TOP_RIGHT_RELEASED = InterruptHandler::TOP_RIGHT_RELEASED,
48+
TOP_LEFT = InterruptHandler::TOP_LEFT,
49+
TOP_LEFT_RELEASED = InterruptHandler::TOP_LEFT_RELEASED,
50+
BOTTOM_RIGHT = InterruptHandler::BOTTOM_RIGHT,
51+
BOTTOM_RIGHT_RELEASED = InterruptHandler::BOTTOM_RIGHT_RELEASED,
52+
BOTTOM_LEFT = InterruptHandler::BOTTOM_LEFT,
53+
BOTTOM_LEFT_RELEASED = InterruptHandler::BOTTOM_LEFT_RELEASED,
54+
VOLUME_UP = InterruptHandler::VOLUME_UP,
55+
VOLUME_UP_RELEASED = InterruptHandler::VOLUME_UP_RELEASED,
56+
VOLUME_DOWN = InterruptHandler::VOLUME_DOWN,
57+
VOLUME_DOWN_RELEASED = InterruptHandler::VOLUME_DOWN_RELEASED,
58+
CHANNEL_UP = InterruptHandler::CHANNEL_UP,
59+
CHANNEL_UP_RELEASED = InterruptHandler::CHANNEL_UP_RELEASED,
60+
CHANNEL_DOWN = InterruptHandler::CHANNEL_DOWN,
61+
CHANNEL_DOWN_RELEASED = InterruptHandler::CHANNEL_DOWN_RELEASED
4962
};
5063
Q_ENUM(Buttons)
5164

sources/hardware/interrupthandler.h

+14-1
Original file line numberDiff line numberDiff line change
@@ -35,18 +35,31 @@ class InterruptHandler : public Device {
3535
APDS9960,
3636
BATTERY,
3737
DPAD_UP,
38+
DPAD_UP_RELEASED,
3839
DPAD_DOWN,
40+
DPAD_DOWN_RELEASED,
3941
DPAD_LEFT,
42+
DPAD_LEFT_RELEASED,
4043
DPAD_RIGHT,
44+
DPAD_RIGHT_RELEASED,
4145
DPAD_MIDDLE,
46+
DPAD_MIDDLE_RELEASED,
4247
TOP_RIGHT,
48+
TOP_RIGHT_RELEASED,
4349
TOP_LEFT,
50+
TOP_LEFT_RELEASED,
4451
BOTTOM_RIGHT,
52+
BOTTOM_RIGHT_RELEASED,
4553
BOTTOM_LEFT,
54+
BOTTOM_LEFT_RELEASED,
4655
VOLUME_UP,
56+
VOLUME_UP_RELEASED,
4757
VOLUME_DOWN,
58+
VOLUME_DOWN_RELEASED,
4859
CHANNEL_UP,
49-
CHANNEL_DOWN
60+
CHANNEL_UP_RELEASED,
61+
CHANNEL_DOWN,
62+
CHANNEL_DOWN_RELEASED
5063
};
5164
Q_ENUM(Events)
5265

sources/hardware/linux/arm/apds9960proximity.cpp

+2-4
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,9 @@
2626
#include <QLoggingCategory>
2727
#include <QtDebug>
2828

29-
3029
static Q_LOGGING_CATEGORY(CLASS_LC, "hw.dev.APDS9960.proximity");
3130

32-
Apds9960ProximitySensor::Apds9960ProximitySensor(APDS9960 *apds, InterruptHandler* interruptHandler, QObject *parent)
31+
Apds9960ProximitySensor::Apds9960ProximitySensor(APDS9960 *apds, InterruptHandler *interruptHandler, QObject *parent)
3332
: ProximitySensor("APDS990 proximity sensor", parent), p_apds(apds) {
3433
Q_ASSERT(apds);
3534
Q_ASSERT(interruptHandler);
@@ -43,10 +42,9 @@ Apds9960ProximitySensor::Apds9960ProximitySensor(APDS9960 *apds, InterruptHandle
4342
}
4443

4544
void Apds9960ProximitySensor::proximityDetection(bool state) {
46-
qCDebug(CLASS_LC) << "Proximity detection set to" << state;
47-
4845
if (p_apds->isOpen()) {
4946
if (state != m_proximityDetection) {
47+
qCDebug(CLASS_LC) << "Proximity detection set to" << state;
5048
if (state) {
5149
// turn on
5250
p_apds->enableProximityInterrupt();

0 commit comments

Comments
 (0)