#ifndef TRAIN_H #define TRAIN_H #include #include "item.h" #include "../microcontroller.h" #include "../nfcuid.h" class Train : public Item { Q_OBJECT uint8_t functionMask_; uint8_t train_id_; int lastReader_ = -1; int8_t suspendedSpeed_; bool suspended_ = false; public: static constexpr int FORWARD = 1; static constexpr int REVERSE = -1; static constexpr int TAG_FRONT = 0; static constexpr int TAG_BACK = 1; static constexpr int TAG_CENTER = 2; static constexpr int TAG_NONE = -1; static Microcontroller *micro; std::vector tags; Train(uint8_t id = 0, uint8_t address = 0, uint8_t functionMask = 0, int8_t initalValue = 0); uint8_t getFunctionMask() { return functionMask_; } public slots: void reverse(); virtual void setFunction(uint8_t function, bool on); virtual void setValue(int8_t value); virtual void informValue(int8_t value); bool suspend(); bool resume(); bool suspendend(); int getDirection(); int ownsTag(NfcUid uid); bool hasBackTag(); bool passedReader(const NfcUid &uid) { if(lastReader_ == uid.reader) return false; lastReader_ = uid.reader; return true; } uint8_t getTrainId() { return train_id_; } signals: void unsuspended(uint32_t id, int direction); }; #endif // TRAIN_H