#ifndef MICROCONTROLLER_H #define MICROCONTROLLER_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include "items/item.h" class Microcontroller : public QObject { Q_OBJECT public: static constexpr char AMP_RELAY = 0; static constexpr char SENSOR_TEMPERATURE = 1; static constexpr char SENSOR_DOOR = 0 ; private: static constexpr int TRAIN_LIST = 1; static constexpr int TURNOUT_LIST = 2; static constexpr int SIGNAL_LIST = 3; int listMode = 0; //uint8_t _auxState = 0; QIODevice* _port = nullptr; std::vector< std::shared_ptr > itemList; QScopedPointer loop; QString _buffer; void processMicroReturn(); void processList(const QString& buffer); void processItemState(const QString& buffer); std::shared_ptr processTrainLine(const QString& buffer); std::shared_ptr processTurnoutLine(const QString& buffer); std::shared_ptr processSignalLine(const QString& buffer); void write(char *buffer, const size_t length); void write(const QByteArray& buffer); public: Microcontroller(QIODevice* port); Microcontroller(); ~Microcontroller(); bool connected(); void setIODevice(QIODevice* port); public slots: void requestState(); void trainSetSpeed(uint8_t id, int8_t speed); void trainReverse(uint8_t id); void trainSetFunction(uint8_t id, uint8_t function, bool on); void tunoutSetDirection(uint8_t id, bool direction); void signalSetValue(uint8_t id, uint8_t state); void estop(); void setPower(bool on); private slots: void isReadyRead(); signals: void textRecived(const QString string); void itemChanged(ItemData relay); void auxStateChanged(int value); void gotItemList(std::vector< std::shared_ptr >&); }; #endif // MICROCONTROLLER_H