#ifndef VHFMILL_H #define VHFMILL_H #include #include #include #include #include #include #include class VhfMill : public QObject { Q_OBJECT public: enum { AXIS_NONE = 0, AXIS_X = 1, AXIS_Y = 1<<1, AXIS_Z = 1<<2, AXIS_A = 1<<3, AXIS_B = 1<<4, AXIS_ALL = AXIS_X | AXIS_Y | AXIS_Z | AXIS_A | AXIS_B, }; typedef int Axis; private: typedef enum { MODE_PREINIT, MODE_HOME, MODE_NORMAL, MODE_TOOLCHANGE, MODE_JOG, } Mode; std::vector limits_; QIODevice* serial_; uint8_t nAxis_; uint8_t outputs_ = 0; int spindleSpeed_ = 0; uint16_t sensors_; std::vector lastKnownPos_; std::vector touchoffPos_; Mode mode_ = MODE_PREINIT; Axis axisHomed_ = AXIS_NONE; Axis homeAxis_ = AXIS_NONE; Axis jogAxis_ = AXIS_NONE; int jogStep_ = -1; int jogDirection_ = 0; QTimer positionTimer; QTimer stateTimer; QTimer initTimer; QByteArray lineBuffer_; void processIncomeingLine(); static int axisToMashineNumber(Axis axis); QByteArray generateCmdForOffset(QByteArray command); private slots: void serialReadyRead(); void initTimerFn(); void stateTimerFn(); void reinit(); public: explicit VhfMill(QIODevice* serial, uint8_t nAxis = 4, QObject *parent = nullptr); std::vector getLastKnownPosition() const; Axis homed() const; bool allHomed() const; uint8_t axisCount() const; uint16_t getLastKnownSensors() const; bool presureReady() const; bool isInitDone() const; int getLastSpindleSpeed() const; std::vector getLastTouchoffPosition() const; const std::vector& getLimits() const; static const QString textForErrno(int errorNumber); static size_t axisToIndex(Axis axis); public slots: void setSpindleSpeed(int speed); void send(const QByteArray& cmd); void stop(); void home(VhfMill::Axis axis); void jog(VhfMill::Axis axis, int jogDirection); void setOutput(int output, bool state); void setTool(int tool); void reqTool(); void reqOutputs(); void reqPosition(); void reqSensors(); void reqSpindleSpeed(); void enablePosUpdates(bool enable); void enableStateUpdates(bool enable); void touchOff(VhfMill::Axis axis, int offset); void touchOffAbsolute(std::vector touchoffPos); void setjogStep(int step); void init(); signals: void raiseError(int errorNumber); void positionUpdate(std::vector position); void isHomed(VhfMill::Axis axis); void gotLine(QByteArray string); void gotToolNum(int tool); void gotOutputs(uint8_t outputs); void gotSindleSpeed(int speed); void gotProbeState(bool state); void gotPressureState(bool state); void touchOffChanged(); void initDone(); void toolChangeDone(); void touchoffChanged(std::vector touchoffPos); void jogStepChanged(int step); }; #endif // VHFMILL_H