Files
Chm30Utility/CanController.h
2025-03-17 19:12:22 +09:00

130 lines
4.0 KiB
C++

#ifndef CANCONTROLLER_H
#define CANCONTROLLER_H
#include <QObject>
#include <QVariant>
#include <QDateTime>
class QQmlEngine;
class QJSEngine;
class QTimer;
class CanId;
class CanMessage;
class CanController : public QObject
{
Q_OBJECT
Q_PROPERTY(bool isConnected MEMBER isConnected_ NOTIFY isConnectedChanged)
Q_PROPERTY(int currentModule MEMBER currentModule_ NOTIFY currentModuleChanged)
Q_PROPERTY(int numberOfModules MEMBER numberOfModules_ NOTIFY numberOfModulesChanged)
Q_PROPERTY(QString serialNumber MEMBER serialNumber_ NOTIFY serialNumberChanged)
Q_PROPERTY(QString characteristics MEMBER characteristics_ NOTIFY characteristicsChanged)
Q_PROPERTY(QString mode MEMBER mode_ NOTIFY modeChanged)
Q_PROPERTY(QString limitations MEMBER limitations_ NOTIFY limitationsChanged)
Q_PROPERTY(QString inputVoltage MEMBER inputVoltage_ NOTIFY inputVoltageChanged)
Q_PROPERTY(QString outputCurrent MEMBER outputCurrent_ NOTIFY outputCurrentChanged)
Q_PROPERTY(QString outputVoltage MEMBER outputVoltage_ NOTIFY outputVoltageChanged)
Q_PROPERTY(QString moduleTemperature MEMBER moduleTemperature_ NOTIFY moduleTemperatureChanged)
Q_PROPERTY(bool isModuleOnOff MEMBER isModuleOnOff_ NOTIFY isModuleOnOffChanged)
Q_PROPERTY(bool isLedOnOff MEMBER isLedOnOff_ NOTIFY isLedOnOffChanged)
Q_PROPERTY(bool highLowMode MEMBER highLowMode_ NOTIFY highLowModeChanged)
Q_PROPERTY(double setupOutputVoltage MEMBER setupOutputVoltage_ NOTIFY setupOutputVoltageChanged)
Q_PROPERTY(double setupOutputCurrent MEMBER setupOutputCurrent_ NOTIFY setupOutputCurrentChanged)
Q_PROPERTY(QVariantList statuses MEMBER statuses_ NOTIFY statusesChanged)
public:
explicit CanController(QObject* parent = nullptr);
~CanController();
static QObject* qmlInstance(QQmlEngine* engine, QJSEngine* scriptEngine);
public slots:
void connectCan();
void disconnectCan();
void tryConnectCan();
void sendCanMessage(const CanMessage& message);
void sendMessages();
void requestNumberOfModules();
void requestParameters();
void setModuleOnOff(bool isOn);
void setLedOnOff(bool isOn);
void setHighLowMode(bool isHigh);
void setOutputParameters();
signals:
void isConnectedChanged();
void currentModuleChanged();
void numberOfModulesChanged();
void serialNumberChanged();
void characteristicsChanged();
void modeChanged();
void limitationsChanged();
void inputVoltageChanged();
void outputCurrentChanged();
void outputVoltageChanged();
void moduleTemperatureChanged();
void isModuleOnOffChanged();
void isLedOnOffChanged();
void highLowModeChanged();
void setupOutputVoltageChanged();
void setupOutputCurrentChanged();
void statusesChanged();
private slots:
void handlePackage(int index);
void handleNumberOfModules(const CanMessage* message);
void handleSerialNumber(const CanMessage* message);
void handleCharacteristics(const CanMessage* message);
void handleMode(const CanMessage* message);
void handleLimitations(const CanMessage* message);
void handleInputParameters(const CanMessage* message);
void handleOutputParameters(const CanMessage* message);
void handleStatus(const CanMessage* message);
void showStatus(quint32 status);
void updateCanStatus();
private:
void setupDrivers();
void saveConfiguration();
private:
bool isConnected_ = false;
bool isFirstCheck_ = true;
QDateTime lastPackageDateTime_;
QList<CanMessage> sendMessages_;
int numberOfModules_ = 1;
int currentModule_ = 0;
QString serialNumber_;
QString characteristics_;
QString mode_;
QString limitations_;
QString inputVoltage_;
QString outputCurrent_;
QString outputVoltage_;
QString moduleTemperature_;
bool isModuleOnOff_ = false;
bool isLedOnOff_ = false;
bool highLowMode_ = false;
double setupOutputVoltage_ = 0;
double setupOutputCurrent_ = 0;
QVariantList statuses_;
};
#endif // CANCONTROLLER_H