summaryrefslogtreecommitdiffstats
path: root/src/serialbus/qcansignaldescription.h
blob: aa5441970c14be97c24a077780a094599cb9ab6c (plain)
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
// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only

#ifndef QCANSIGNALDESCRIPTION_H
#define QCANSIGNALDESCRIPTION_H

#include <QtCore/QDebug>
#include <QtCore/QExplicitlySharedDataPointer>

#include <QtSerialBus/qcancommondefinitions.h>
#include <QtSerialBus/qtserialbusglobal.h>

QT_BEGIN_NAMESPACE

class QCanSignalDescriptionPrivate;
QT_DECLARE_QESDP_SPECIALIZATION_DTOR_WITH_EXPORT(QCanSignalDescriptionPrivate, Q_SERIALBUS_EXPORT)

class Q_SERIALBUS_EXPORT QCanSignalDescription
{
public:
    using MultiplexValues = QList<QPair<QVariant, QVariant>>;
    using MultiplexSignalValues = QHash<QString, MultiplexValues>;


    QCanSignalDescription();
    QCanSignalDescription(const QCanSignalDescription &other);
    QCanSignalDescription(QCanSignalDescription &&other) noexcept = default;
    ~QCanSignalDescription() = default;

    QCanSignalDescription &operator=(const QCanSignalDescription &other);
    QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QCanSignalDescription)

    friend bool operator==(const QCanSignalDescription &lhs, const QCanSignalDescription &rhs)
    {
        return equals(lhs, rhs);
    }
    friend bool operator!=(const QCanSignalDescription &lhs, const QCanSignalDescription &rhs)
    {
        return !equals(lhs, rhs);
    }

    void swap(QCanSignalDescription &other) noexcept { d.swap(other.d); }

    bool isValid() const;

    QString name() const;
    void setName(const QString &name);

    QString physicalUnit() const;
    void setPhysicalUnit(const QString &unit);

    QString receiver() const;
    void setReceiver(const QString &receiver);

    QString comment() const;
    void setComment(const QString &text);

    QtCanBus::DataSource dataSource() const;
    void setDataSource(QtCanBus::DataSource source);

    QSysInfo::Endian dataEndian() const;
    void setDataEndian(QSysInfo::Endian endian);

    QtCanBus::DataFormat dataFormat() const;
    void setDataFormat(QtCanBus::DataFormat format);

    quint16 startBit() const;
    void setStartBit(quint16 bit);

    quint16 bitLength() const;
    void setBitLength(quint16 length);

    double factor() const;
    void setFactor(double factor);

    double offset() const;
    void setOffset(double offset);

    double scaling() const;
    void setScaling(double scaling);

    double minimum() const;
    double maximum() const;
    void setRange(double minimum, double maximum);

    QtCanBus::MultiplexState multiplexState() const;
    void setMultiplexState(QtCanBus::MultiplexState state);

    MultiplexSignalValues multiplexSignals() const;
    void clearMultiplexSignals();
    void setMultiplexSignals(const MultiplexSignalValues &multiplexorSignals);
    void addMultiplexSignal(const QString &name, const MultiplexValues &ranges);
    void addMultiplexSignal(const QString &name, const QVariant &value);

private:
    QExplicitlySharedDataPointer<QCanSignalDescriptionPrivate> d;
    friend class QCanSignalDescriptionPrivate;

    static bool equals(const QCanSignalDescription &lhs, const QCanSignalDescription &rhs);

#ifndef QT_NO_DEBUG_STREAM
    friend QDebug operator<<(QDebug dbg, const QCanSignalDescription &sig)
    {
        return debugStreaming(dbg, sig);
    }
    static QDebug debugStreaming(QDebug dbg, const QCanSignalDescription &sig);
#endif // QT_NO_DEBUG_STREAM
};

Q_DECLARE_SHARED(QCanSignalDescription)

QT_END_NAMESPACE

#endif // QCANSIGNALDESCRIPTION_H