2017-04-27 18:24:53 +00:00
|
|
|
// SPDX-License-Identifier: GPL-2.0
|
2014-06-10 12:03:26 +00:00
|
|
|
#ifndef DEVICEDETAILS_H
|
|
|
|
#define DEVICEDETAILS_H
|
|
|
|
|
|
|
|
#include <QObject>
|
|
|
|
#include <QDateTime>
|
|
|
|
#include "libdivecomputer.h"
|
|
|
|
|
2014-06-11 08:09:01 +00:00
|
|
|
struct gas {
|
2014-10-10 05:34:14 +00:00
|
|
|
unsigned char oxygen;
|
|
|
|
unsigned char helium;
|
|
|
|
unsigned char type;
|
|
|
|
unsigned char depth;
|
2016-03-06 22:40:57 +00:00
|
|
|
gas(unsigned char oxygen = 0, unsigned char helium = 0, unsigned char type = 0, unsigned char depth = 0);
|
2014-06-11 08:09:01 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
struct setpoint {
|
2014-10-10 05:34:14 +00:00
|
|
|
unsigned char sp;
|
|
|
|
unsigned char depth;
|
2016-03-06 22:40:57 +00:00
|
|
|
setpoint(unsigned char sp = 0, unsigned char depth = 0);
|
2014-06-11 08:09:01 +00:00
|
|
|
};
|
|
|
|
|
computer configuration: use value semantics for DeviceDetails
The memory managements for DeviceDetails was very sketchy.
First of all, sharing a pointer to a structure between threads
seems like a recipe for disaster. Secondly, the structure was
a QObject and when first generated included in the (silly)
Qt object tree, but when generated in the threads it was not.
Clearly, this leaks.
Instead, use value semantics and use local copies of the
structure. I didn't go full length and use std::move to
move the data, because this doesn't work through signals
(which are the wrong abstraction here, but OK) and secondly
I didn't have time to analyze whether the caller still
needs the data after passing it down to the worker thread.
To be able to pass an object through signals, the class
has to be registered in the Qt MetaType system. Super
ugly, but fine for now. Ultimately, this whole thing should
probably be replaced by futures, co-routines, or whatever.
Moreover, this removes the prefix from number of "m_*"
function parameters. By convention, "m_" marks member
variables, which function parameters are not.
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
make DeviceDetails a metatype
So that we can pass it as value through the signal/slot system.
(squash with original commit)
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2024-03-16 08:29:54 +00:00
|
|
|
class DeviceDetails
|
2014-06-10 12:03:26 +00:00
|
|
|
{
|
|
|
|
public:
|
computer configuration: use value semantics for DeviceDetails
The memory managements for DeviceDetails was very sketchy.
First of all, sharing a pointer to a structure between threads
seems like a recipe for disaster. Secondly, the structure was
a QObject and when first generated included in the (silly)
Qt object tree, but when generated in the threads it was not.
Clearly, this leaks.
Instead, use value semantics and use local copies of the
structure. I didn't go full length and use std::move to
move the data, because this doesn't work through signals
(which are the wrong abstraction here, but OK) and secondly
I didn't have time to analyze whether the caller still
needs the data after passing it down to the worker thread.
To be able to pass an object through signals, the class
has to be registered in the Qt MetaType system. Super
ugly, but fine for now. Ultimately, this whole thing should
probably be replaced by futures, co-routines, or whatever.
Moreover, this removes the prefix from number of "m_*"
function parameters. By convention, "m_" marks member
variables, which function parameters are not.
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
make DeviceDetails a metatype
So that we can pass it as value through the signal/slot system.
(squash with original commit)
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2024-03-16 08:29:54 +00:00
|
|
|
DeviceDetails();
|
2014-06-10 12:03:26 +00:00
|
|
|
|
2015-09-02 21:59:59 +00:00
|
|
|
QString serialNo;
|
|
|
|
QString firmwareVersion;
|
|
|
|
QString customText;
|
|
|
|
QString model;
|
|
|
|
bool syncTime;
|
|
|
|
gas gas1;
|
|
|
|
gas gas2;
|
|
|
|
gas gas3;
|
|
|
|
gas gas4;
|
|
|
|
gas gas5;
|
|
|
|
gas dil1;
|
|
|
|
gas dil2;
|
|
|
|
gas dil3;
|
|
|
|
gas dil4;
|
|
|
|
gas dil5;
|
|
|
|
setpoint sp1;
|
|
|
|
setpoint sp2;
|
|
|
|
setpoint sp3;
|
|
|
|
setpoint sp4;
|
|
|
|
setpoint sp5;
|
|
|
|
bool setPointFallback;
|
|
|
|
int ccrMode;
|
|
|
|
int calibrationGas;
|
|
|
|
int diveMode;
|
|
|
|
int decoType;
|
|
|
|
int ppO2Max;
|
|
|
|
int ppO2Min;
|
|
|
|
int futureTTS;
|
|
|
|
int gfLow;
|
|
|
|
int gfHigh;
|
|
|
|
int aGFLow;
|
|
|
|
int aGFHigh;
|
|
|
|
int aGFSelectable;
|
2017-04-27 19:25:04 +00:00
|
|
|
int vpmConservatism;
|
2015-09-02 21:59:59 +00:00
|
|
|
int saturation;
|
|
|
|
int desaturation;
|
|
|
|
int lastDeco;
|
|
|
|
int brightness;
|
|
|
|
int units;
|
|
|
|
int samplingRate;
|
|
|
|
int salinity;
|
|
|
|
int diveModeColor;
|
|
|
|
int language;
|
|
|
|
int dateFormat;
|
|
|
|
int compassGain;
|
|
|
|
int pressureSensorOffset;
|
|
|
|
bool flipScreen;
|
|
|
|
bool safetyStop;
|
|
|
|
int maxDepth;
|
|
|
|
int totalTime;
|
|
|
|
int numberOfDives;
|
|
|
|
int altitude;
|
|
|
|
int personalSafety;
|
|
|
|
int timeFormat;
|
|
|
|
bool lightEnabled;
|
|
|
|
int light;
|
|
|
|
bool alarmTimeEnabled;
|
|
|
|
int alarmTime;
|
|
|
|
bool alarmDepthEnabled;
|
|
|
|
int alarmDepth;
|
2015-09-02 22:00:00 +00:00
|
|
|
int leftButtonSensitivity;
|
|
|
|
int rightButtonSensitivity;
|
2017-04-27 19:25:04 +00:00
|
|
|
int buttonSensitivity;
|
2015-09-02 22:00:00 +00:00
|
|
|
int bottomGasConsumption;
|
|
|
|
int decoGasConsumption;
|
2017-04-27 19:25:04 +00:00
|
|
|
int travelGasConsumption;
|
2015-09-02 22:00:00 +00:00
|
|
|
bool modWarning;
|
|
|
|
bool dynamicAscendRate;
|
|
|
|
bool graphicalSpeedIndicator;
|
|
|
|
bool alwaysShowppO2;
|
2016-01-22 13:17:49 +00:00
|
|
|
int tempSensorOffset;
|
2016-01-22 13:17:50 +00:00
|
|
|
unsigned safetyStopLength;
|
|
|
|
unsigned safetyStopStartDepth;
|
|
|
|
unsigned safetyStopEndDepth;
|
|
|
|
unsigned safetyStopResetDepth;
|
2014-06-10 12:03:26 +00:00
|
|
|
};
|
|
|
|
|
computer configuration: use value semantics for DeviceDetails
The memory managements for DeviceDetails was very sketchy.
First of all, sharing a pointer to a structure between threads
seems like a recipe for disaster. Secondly, the structure was
a QObject and when first generated included in the (silly)
Qt object tree, but when generated in the threads it was not.
Clearly, this leaks.
Instead, use value semantics and use local copies of the
structure. I didn't go full length and use std::move to
move the data, because this doesn't work through signals
(which are the wrong abstraction here, but OK) and secondly
I didn't have time to analyze whether the caller still
needs the data after passing it down to the worker thread.
To be able to pass an object through signals, the class
has to be registered in the Qt MetaType system. Super
ugly, but fine for now. Ultimately, this whole thing should
probably be replaced by futures, co-routines, or whatever.
Moreover, this removes the prefix from number of "m_*"
function parameters. By convention, "m_" marks member
variables, which function parameters are not.
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
make DeviceDetails a metatype
So that we can pass it as value through the signal/slot system.
(squash with original commit)
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
2024-03-16 08:29:54 +00:00
|
|
|
Q_DECLARE_METATYPE(DeviceDetails);
|
2014-06-10 12:03:26 +00:00
|
|
|
|
|
|
|
#endif // DEVICEDETAILS_H
|