#ifndef CANCONTROLLER_H #define CANCONTROLLER_H #include #include #include 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 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