/
pi_coder
/
ByteMachine
Обзор
Документация
Войти
/
pi_coder
/
ByteMachine
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/nodes/com_reader_node.h
173 строки
7 KB
pimenov-and
Перенос функциональности из старого проекта, в основном это описания узлов
19 июл 2026, 20:13
19 июл 2026, 20:13
cb3c51b
Код
Авторство
О чём код?
//////////////////////////////////////////////////////////////// // ByteMachine // Узел для чтения из COM-порта //////////////////////////////////////////////////////////////// #ifndef COM_READER_NODE_H #define COM_READER_NODE_H //============================================================== #include "base_node.h" #include "com_port_baud_rates.h" #include "com_port_packet_modes.h" //============================================================== // Узел для чтения из COM-порта //============================================================== class ComReaderNode : public BaseNode { Q_OBJECT Q_PROPERTY(QString portName READ portName WRITE setPortName RESET resetPortName) Q_PROPERTY(ComPortBaudRates baudRate READ baudRate WRITE setBaudRate RESET resetBaudRate) Q_PROPERTY(ComPortPacketModes packetMode READ packetMode WRITE setPacketMode RESET resetPacketMode) public: // Конструктор с параметрами explicit ComReaderNode(QUndoStack *undoStack, QObject *parent = nullptr); // Деструктор ~ComReaderNode() override; // Чтение из XML void readFromXml(const QDomElement &elem) override; // Запись в XML void writeToXml(QDomDocument &doc, QDomElement &elem) const override; // Получение типа узла [[nodiscard]] NodeTypes type() const noexcept override { return NodeTypes::ComReader; } // Рисование узла void draw(QPainter *painter, ColorThemes theme = ColorThemes::Light) const override; // Получение копии узла [[nodiscard]] ShPtrBaseNode clone() const override; // Получение текста подсказки [[nodiscard]] QString tooltipText() const override; // Открытие порта [[nodiscard]] bool openPort(); // Получение признака открытого порта [[nodiscard]] bool isOpenPort() const { return comPort_.isOpen(); } // Закрытие порта void closePort(); // Изменение состояния порта bool changeState(); // Получение размера данных [[nodiscard]] std::size_t dataSize() const override; // Получение байта данных [[nodiscard]] quint8 dataByte(std::size_t index) const override; // Получение блока данных [[nodiscard]] ByteList dataBlock(std::size_t index, std::size_t count) const override; // Функция вызывается при изменении данных void dataChanged() override; // Получение выходных пинов [[nodiscard]] QVector<ShPtrOutputPin> outputPins() override; // Получение выходных пинов (константный вариант) [[nodiscard]] QVector<ShPtrConstOutputPin> outputPins() const override; // Получение имени порта [[nodiscard]] QString portName() const { return portName_; } // Задание имени порта void setPortName(const QString &portName); // Сброс имени порта void resetPortName(); // Получение признака изменения имени порта [[nodiscard]] bool isPortNameModified() const { return portName_ != "Unknown"; } // Получение частоты порта [[nodiscard]] ComPortBaudRates baudRate() const { return baudRate_; } // Задание частоты порта void setBaudRate(ComPortBaudRates baud); // Сброс частоты порта void resetBaudRate(); // Получение признака изменения частоты порта [[nodiscard]] bool isBaudRateModified() const { return !isBaud_9600(baudRate_); } // Получение режима пакетов [[nodiscard]] ComPortPacketModes packetMode() const { return packetMode_; } // Задание режима пакетов void setPacketMode(ComPortPacketModes mode); // Сброс режима пакетов void resetPacketMode(); // Получение признака изменения режима пакетов [[nodiscard]] bool packetModeModified() const { return !isRaw(packetMode_); } // Функция получения имени свойства для графического // интерфейса по его системному имени [[nodiscard]] QString getUiPropertyName(const QString &systemName) override; // Функция перевода void retranslate() override; signals: // Сигнал возникает при изменении состояния порта (открылся/закрылся) void sigChangedPortState(bool isOpen); private slots: // Функция вызывается при подключении выходного пина void slotOutputPinConnectChanged(ConnectStates state, InputPin *pin); // Функция вызывается при появлении данных в COM-порте void slotReadyReadData(); private: // Задание соединений void setConnections(); // Создание выходного пина void createOutputPin(); // Вывод комментария void drawComment(QPainter *painter, ColorThemes theme) const; // Обновление состояния узла void updateStateInfo(); //---------------------------------------------------------- // Чтение/запись в XML //---------------------------------------------------------- // Чтение имени порта из XML [[nodiscard]] QString readPortNameFromXml(const QDomElement &elem) const; // Запись имени порта в XML void writePortNameToXml(QDomDocument &doc, QDomElement &elem) const; // Чтение частоты порта из XML [[nodiscard]] ComPortBaudRates readBaudRateFromXml(const QDomElement &elem) const; // Запись частоты порта в XML void writeBaudRateToXml(QDomDocument &doc, QDomElement &elem) const; // Чтение режима разбора пакетов из XML [[nodiscard]] ComPortPacketModes readPacketModeFromXml(const QDomElement &elem) const; // Запись режима разбора пакетов из XML void writePacketModeToXml(QDomDocument &doc, QDomElement &elem) const; // Выходной пин ShPtrOutputPin outputPin_{nullptr}; // COM-порт QSerialPort comPort_{}; // Имя порта QString portName_ = "Unknown"; // Частота порта ComPortBaudRates baudRate_ = ComPortBaudRates::Baud_9600; // Режим пакетов ComPortPacketModes packetMode_ = ComPortPacketModes::Raw; // Буфер данных ByteList buffer_{}; }; //============================================================== using ShPtrComReaderNode = QSharedPointer<ComReaderNode>; using ShPtrConstComReaderNode = QSharedPointer<const ComReaderNode>; //============================================================== #endif // COM_READER_NODE_H