Skip to content

Commit 4227fe3

Browse files
committed
Refactor for clearness
1 parent 33bcfcc commit 4227fe3

File tree

5 files changed

+121
-126
lines changed

5 files changed

+121
-126
lines changed

src/AutoPilotPlugins/Common/RadioComponent.qml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -434,7 +434,7 @@ SetupPage {
434434
smooth: true
435435
source: controller.imageHelp
436436
}
437-
437+
0
438438
RCChannelMonitor {
439439
width: parent.width
440440
twoColumn: true

src/Joystick/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
set(EXTRA_SRC)
32

43
if (ANDROID)

src/Joystick/Joystick.cc

Lines changed: 99 additions & 109 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ AssignedButtonAction::AssignedButtonAction(QObject* parent, const QString action
9191
: QObject(parent)
9292
, _action(action)
9393
, _isPwmOverrideAction(false)
94-
, _rcChannel(0)
94+
, _pwmRcChannel(0)
9595
{
9696
}
9797

@@ -102,8 +102,8 @@ AssignedButtonAction::AssignedButtonAction(
102102
, _isPwmOverrideAction(true)
103103
, _loPwmValue(loPwmValue)
104104
, _hiPwmValue(hiPwmValue)
105-
, _latchMode(latch)
106-
, _rcChannel(getRcChannelFromAction(action))
105+
, _pwmLatchMode(latch)
106+
, _pwmRcChannel(getRcChannelFromAction(action))
107107
{
108108
}
109109

@@ -115,40 +115,20 @@ void AssignedButtonAction::sendPwm(Vehicle *vehicle, bool buttonDown)
115115
}
116116

117117
uint16_t pwmValue = buttonDown ? _hiPwmValue : _loPwmValue;
118-
if (_latchMode) {
119-
qCDebug(JoystickLog) << "Latch mode, current saved button state " << (_latchButtonDown ? "down" : "up");
118+
if (_pwmLatchMode) {
119+
qCDebug(JoystickLog) << "Latch mode, current saved button state " << (_pwmLatchButtonDown ? "down" : "up");
120120

121121
if (buttonDown) {
122-
_latchButtonDown = !_latchButtonDown;
123-
pwmValue = _latchButtonDown ? _hiPwmValue : _loPwmValue;
122+
_pwmLatchButtonDown = !_pwmLatchButtonDown;
123+
pwmValue = _pwmLatchButtonDown ? _hiPwmValue : _loPwmValue;
124124
qCDebug(JoystickLog) << " calculated new PWM Value " << pwmValue;
125125
} else {
126126
qCDebug(JoystickLog) << "since button up - exiting";
127127
return;
128128
}
129129
}
130130

131-
vehicle->rcChannelOverride(_rcChannel, pwmValue);
132-
}
133-
134-
uint8_t AssignedButtonAction::pwmChannel() const
135-
{
136-
return _rcChannel;
137-
};
138-
139-
void AssignedButtonAction::pwmLatchMode(bool latch)
140-
{
141-
_latchMode = latch;
142-
}
143-
144-
bool AssignedButtonAction::pwmLatchMode() const
145-
{
146-
return _latchMode;
147-
}
148-
149-
bool AssignedButtonAction::isPwmOverrideAction() const
150-
{
151-
return _isPwmOverrideAction;
131+
vehicle->rcChannelOverride(_pwmRcChannel, pwmValue);
152132
}
153133

154134
uint8_t AssignedButtonAction::getRcChannelFromAction(const QString action)
@@ -180,7 +160,6 @@ Joystick::Joystick(const QString& name, int axisCount, int buttonCount, int hatC
180160
, _totalButtonCount(_buttonCount+_hatButtonCount)
181161
, _multiVehicleManager(multiVehicleManager)
182162
{
183-
// qRegisterMetaType<QList<bool>*>("QList<bool>*");
184163
_rgAxisValues = new int[static_cast<size_t>(_axisCount)];
185164
_rgCalibration = new Calibration_t[static_cast<size_t>(_axisCount)];
186165
_rgButtonValues = new uint8_t[static_cast<size_t>(_totalButtonCount)];
@@ -369,12 +348,13 @@ void Joystick::_loadSettings()
369348
// Remap to stored TX mode in settings
370349
_remapAxes(2, _transmitterMode, _rgFunctionAxis);
371350

372-
while (_pwmVisibilities.length() < _totalButtonCount) {
373-
_pwmVisibilities.push_back(false);
351+
// Preparing pwm sections visibility map
352+
while (_pwmSettingsVisibilities.length() < _totalButtonCount) {
353+
_pwmSettingsVisibilities.push_back(false);
374354
}
375355

376356
for (int button = 0; button < _totalButtonCount; button++) {
377-
_pwmVisibilities[button] = false;
357+
_pwmSettingsVisibilities[button] = false;
378358
QString action = settings.value(QString(_buttonActionNameKey).arg(button), QString()).toString();
379359
if (!action.isEmpty() && action != _buttonActionNone) {
380360
if (_buttonActionArray[button]) {
@@ -383,7 +363,7 @@ void Joystick::_loadSettings()
383363

384364
AssignedButtonAction *ap;
385365
if (assignableActionIsPwm(action)) {
386-
_pwmVisibilities[button] = true;
366+
_pwmSettingsVisibilities[button] = true;
387367
int lowPwm = settings.value(QString(_buttonActionLowPwmValueKey).arg(button), -1).toInt();
388368
int highPwm = settings.value(QString(_buttonActionHighPwmValueKey).arg(button), -1).toInt();
389369
bool latch = settings.value(QString(_buttonActionLatchPwmValueKey).arg(button), false).toBool();
@@ -393,13 +373,14 @@ void Joystick::_loadSettings()
393373
} else {
394374
ap = new AssignedButtonAction(this, action);
395375
}
396-
ap->repeat(settings.value(QString(_buttonActionRepeatKey).arg(button), false).toBool());
397-
398376
_buttonActionArray[button] = ap;
399377
_buttonActionArray[button]->buttonTime().start();
378+
379+
bool savedRepeatState = settings.value(QString(_buttonActionRepeatKey).arg(button), false).toBool();
380+
setButtonRepeatIfAvailable(button, savedRepeatState);
381+
400382
qCDebug(JoystickLog) << "_loadSettings button:action" << button << _buttonActionArray[button]->action()
401383
<< _buttonActionArray[button]->repeat();
402-
403384
}
404385
}
405386
if (badSettings) {
@@ -910,67 +891,87 @@ void Joystick::setButtonAction(int button, const QString& action)
910891
return;
911892
}
912893
qCWarning(JoystickLog) << "setButtonAction:" << button << action;
913-
QSettings settings;
914-
settings.beginGroup(_settingsGroup);
915-
settings.beginGroup(_name);
916-
if(action.isEmpty() || action == _buttonActionNone) {
917-
_pwmVisibilities[button] = false;
918-
if(_buttonActionArray[button]) {
919-
//-- Clear from settings
920-
settings.remove(QString(_buttonActionNameKey).arg(button));
921-
settings.remove(QString(_buttonActionRepeatKey).arg(button));
922-
if (_buttonActionArray[button]->isPwmOverrideAction()) {
923-
settings.remove(QString(_buttonActionHighPwmValueKey).arg(button));
924-
settings.remove(QString(_buttonActionLowPwmValueKey).arg(button));
925-
settings.remove(QString(_buttonActionLatchPwmValueKey).arg(button));
926-
}
894+
895+
if (action.isEmpty() || action == _buttonActionNone) {
896+
_pwmSettingsVisibilities[button] = false;
897+
if (_buttonActionArray[button]) {
898+
removeButtonSettings(button);
927899
_buttonActionArray[button]->deleteLater();
928900
_buttonActionArray[button] = nullptr;
929901
}
930902
} else {
931903
bool isPwmAction = assignableActionIsPwm(action);
932-
_pwmVisibilities[button] = isPwmAction;
933-
qCDebug(JoystickLog) << "setButtonAction: isPwmAction" << isPwmAction;
934-
AssignedButtonAction *ap;
935-
//TODO(bzd) rethink this section
936-
if(!_buttonActionArray[button]) {
937-
if (isPwmAction) {
938-
ap = new AssignedButtonAction(this, action, 0, 0, false);
939-
} else {
940-
ap = new AssignedButtonAction(this, action);
941-
}
942-
_buttonActionArray[button] = ap;
904+
_pwmSettingsVisibilities[button] = isPwmAction;
905+
qCDebug(JoystickLog) << "setButtonAction: isPwmAction " << isPwmAction;
906+
907+
if (!_buttonActionArray[button]) {
908+
_buttonActionArray[button] = isPwmAction ? new AssignedButtonAction(this, action, 1000, 2000, false)
909+
: new AssignedButtonAction(this, action);
943910
} else {
944911
if (isPwmAction) {
945-
//TODO fix it better, maybe one aciton with PWM values in it
912+
// PWM Actions are not reusable
946913
_buttonActionArray[button]->deleteLater();
947-
ap = new AssignedButtonAction(this, action, 0, 0, false);
948-
_buttonActionArray[button] = ap;
949-
}
950-
_buttonActionArray[button]->action(action);
951-
}
952-
//-- Make sure repeat is off if this action doesn't support repeats
953-
int idx = _findAssignableButtonAction(action);
954-
if(idx >= 0) {
955-
AssignableButtonAction* p = qobject_cast<AssignableButtonAction*>(_assignableButtonActions[idx]);
956-
if(!p->canRepeat()) {
957-
_buttonActionArray[button]->repeat(false);
914+
_buttonActionArray[button] = new AssignedButtonAction(this, action, 0, 0, false);
915+
} else {
916+
if (_buttonActionArray[button]->isPwmOverrideAction()) {
917+
_buttonActionArray[button]->deleteLater();
918+
_buttonActionArray[button] = new AssignedButtonAction(this, action);
919+
} else {
920+
_buttonActionArray[button]->action(action);
921+
}
958922
}
959923
}
960924

961-
//-- Save to settings
962-
settings.setValue(QString(_buttonActionNameKey).arg(button), _buttonActionArray[button]->action());
963-
settings.setValue(QString(_buttonActionRepeatKey).arg(button), _buttonActionArray[button]->repeat());
964-
if (isPwmAction) {
965-
settings.setValue(QString(_buttonActionLowPwmValueKey).arg(button), _buttonActionArray[button]->lowPwm());
966-
settings.setValue(QString(_buttonActionHighPwmValueKey).arg(button), _buttonActionArray[button]->highPwm());
967-
settings.setValue(QString(_buttonActionLatchPwmValueKey).arg(button), _buttonActionArray[button]->pwmLatchMode());
968-
}
925+
//-- Make sure repeat is off if this action doesn't support repeats
926+
setButtonRepeatIfAvailable(button, false);
927+
saveButtonSettings(button);
969928
}
970929
emit pwmVisibilitiesChanged();
971930
emit buttonActionsChanged();
972931
}
973932

933+
void Joystick::setButtonRepeatIfAvailable(int button, bool repeat)
934+
{
935+
int idx = _findAssignableButtonAction(_buttonActionArray[button]->action());
936+
if (idx >= 0) {
937+
AssignableButtonAction *p = qobject_cast<AssignableButtonAction *>(_assignableButtonActions[idx]);
938+
if (p->canRepeat()) {
939+
_buttonActionArray[button]->repeat(repeat);
940+
return;
941+
}
942+
}
943+
_buttonActionArray[button]->repeat(false);
944+
}
945+
946+
void Joystick::saveButtonSettings(int button)
947+
{
948+
QSettings settings;
949+
settings.beginGroup(_settingsGroup);
950+
settings.beginGroup(_name);
951+
//-- Save to settings
952+
settings.setValue(QString(_buttonActionNameKey).arg(button), _buttonActionArray[button]->action());
953+
settings.setValue(QString(_buttonActionRepeatKey).arg(button), _buttonActionArray[button]->repeat());
954+
if (_buttonActionArray[button]->isPwmOverrideAction()) {
955+
settings.setValue(QString(_buttonActionLowPwmValueKey).arg(button), _buttonActionArray[button]->lowPwm());
956+
settings.setValue(QString(_buttonActionHighPwmValueKey).arg(button), _buttonActionArray[button]->highPwm());
957+
settings.setValue(QString(_buttonActionLatchPwmValueKey).arg(button), _buttonActionArray[button]->pwmLatchMode());
958+
}
959+
}
960+
961+
void Joystick::removeButtonSettings(int button)
962+
{
963+
QSettings settings;
964+
settings.beginGroup(_settingsGroup);
965+
settings.beginGroup(_name);
966+
settings.remove(QString(_buttonActionNameKey).arg(button));
967+
settings.remove(QString(_buttonActionRepeatKey).arg(button));
968+
if (_buttonActionArray[button]->isPwmOverrideAction()) {
969+
settings.remove(QString(_buttonActionHighPwmValueKey).arg(button));
970+
settings.remove(QString(_buttonActionLowPwmValueKey).arg(button));
971+
settings.remove(QString(_buttonActionLatchPwmValueKey).arg(button));
972+
}
973+
}
974+
974975
QString Joystick::getButtonAction(int button)
975976
{
976977
if (_validButton(button)) {
@@ -981,41 +982,34 @@ QString Joystick::getButtonAction(int button)
981982
return QString(_buttonActionNone);
982983
}
983984

984-
bool Joystick::assignableActionIsPwm(int button) {
985-
qDebug(JoystickLog) << "assignableActionIsPwm: " << button;
986-
if (_validButton(button)) {
987-
auto action = getButtonAction(button);
988-
qDebug(JoystickLog) << "action " << action;
989-
return action.contains("PWM");
990-
}
991-
return false;
985+
bool Joystick::assignableButtonActionIsPwm(int button) {
986+
return (_validButton(button) && _buttonActionArray[button]) ? _buttonActionArray[button]->isPwmOverrideAction() : false;
992987
}
993988

994989
bool Joystick::assignableActionIsPwm(QString action) {
995990
return action.contains("PWM");
996991
}
997992

998993
void Joystick::setButtonPwm(int button, bool lowPwm, int value) {
999-
//TODO czy tutaj przychodzi z GUI i trzeba ustawic tez w _buttonActionArray[button]?
1000994
qDebug(JoystickLog) << "setButtonPwm: " << button << (lowPwm ? "LOW " : "HIGH ") << value;
1001-
if (_validButton(button)) {
1002-
if (assignableActionIsPwm(button)) {
1003-
QSettings settings;
1004-
settings.beginGroup(_settingsGroup);
1005-
settings.beginGroup(_name);
1006-
if (lowPwm) {
1007-
settings.setValue(QString(_buttonActionLowPwmValueKey).arg(button), value);
1008-
} else {
1009-
settings.setValue(QString(_buttonActionHighPwmValueKey).arg(button), value);
1010-
}
995+
if (assignableButtonActionIsPwm(button)) {
996+
QSettings settings;
997+
settings.beginGroup(_settingsGroup);
998+
settings.beginGroup(_name);
999+
if (lowPwm) {
1000+
_buttonActionArray[button]->lowPwm(value);
1001+
settings.setValue(QString(_buttonActionLowPwmValueKey).arg(button), value);
1002+
} else {
1003+
_buttonActionArray[button]->highPwm(value);
1004+
settings.setValue(QString(_buttonActionHighPwmValueKey).arg(button), value);
10111005
}
10121006
}
1007+
10131008
}
10141009

10151010
int Joystick::getButtonPwm(int button, bool lowPwm) {
1016-
qDebug(JoystickLog) << "getButtonPwm: " << button << (lowPwm ? "LOW " : "HIGH ");
10171011
if (_validButton(button)) {
1018-
if (assignableActionIsPwm(button)) {
1012+
if (assignableButtonActionIsPwm(button)) {
10191013
QSettings settings;
10201014
settings.beginGroup(_settingsGroup);
10211015
settings.beginGroup(_name);
@@ -1035,12 +1029,9 @@ void Joystick::setButtonPwmLatch(int button, bool latch)
10351029
return;
10361030
}
10371031
qCDebug(JoystickLog) << "PWM Latch mode for button " << button << (latch ? " enabled" : " disabled");
1038-
//TODO check is really this class
1039-
auto *action = (_buttonActionArray[button]);
1032+
auto action = _buttonActionArray[button];
10401033
action->pwmLatchMode(latch);
10411034

1042-
//TODO finish saving settings
1043-
10441035
QSettings settings;
10451036
settings.beginGroup(_settingsGroup);
10461037
settings.beginGroup(_name);
@@ -1051,9 +1042,8 @@ bool Joystick::getButtonPwmLatch(int button) {
10511042
if (!_validButton(button) || !_buttonActionArray[button]) {
10521043
return false;
10531044
}
1054-
//TODO check is really this class
1055-
auto *action = (_buttonActionArray[button]);
1056-
return action->pwmLatchMode();
1045+
auto action = (_buttonActionArray[button]);
1046+
return _buttonActionArray[button]->isPwmOverrideAction() ? action->pwmLatchMode() : false;
10571047
}
10581048

10591049
QStringList Joystick::buttonActions()

0 commit comments

Comments
 (0)