diff --git a/Drivers/Marlin/ACT/LibMCDriver_Marlin.xml b/Drivers/Marlin/ACT/LibMCDriver_Marlin.xml
index 13988785..dbaa5391 100644
--- a/Drivers/Marlin/ACT/LibMCDriver_Marlin.xml
+++ b/Drivers/Marlin/ACT/LibMCDriver_Marlin.xml
@@ -109,6 +109,7 @@ Custom implementation
+
@@ -120,11 +121,18 @@ Custom implementation
+
+
+
+
+
+
+
@@ -148,7 +156,7 @@ Custom implementation
-
+
@@ -185,6 +193,7 @@ Custom implementation
+
@@ -196,6 +205,7 @@ Custom implementation
+
diff --git a/Drivers/Marlin/Headers/CppDynamic/libmcdriver_marlin_abi.hpp b/Drivers/Marlin/Headers/CppDynamic/libmcdriver_marlin_abi.hpp
index 60e7f339..c008d1ce 100644
--- a/Drivers/Marlin/Headers/CppDynamic/libmcdriver_marlin_abi.hpp
+++ b/Drivers/Marlin/Headers/CppDynamic/libmcdriver_marlin_abi.hpp
@@ -126,9 +126,10 @@ LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_g
* @param[in] pCOMPort - Device Port to connect to
* @param[in] nBaudrate - Baudrate to use
* @param[in] dStatusUpdateInterval - Timer interval [ms] for updating status
+* @param[in] nConnectTimeout - Timeout [ms] for connecting printer
* @return error code or 0 (success)
*/
-LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_connect(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, const char * pCOMPort, LibMCDriver_Marlin_uint32 nBaudrate, LibMCDriver_Marlin_double dStatusUpdateInterval);
+LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_connect(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, const char * pCOMPort, LibMCDriver_Marlin_uint32 nBaudrate, LibMCDriver_Marlin_double dStatusUpdateInterval, LibMCDriver_Marlin_uint32 nConnectTimeout);
/**
* Disconnects from the Marlin board.
@@ -152,9 +153,10 @@ LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_m
*
* @param[in] pDriver_Marlin - Driver_Marlin instance.
* @param[in] dTemperatureInDegreeCelcius - Bed target temperature.
+* @param[in] bWaitForTemp - If true, waits for the target bed temperature to be reached before proceeding
* @return error code or 0 (success)
*/
-LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_setheatedbedtargettemperature(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_double dTemperatureInDegreeCelcius);
+LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_setheatedbedtargettemperature(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_double dTemperatureInDegreeCelcius, bool bWaitForTemp);
/**
* Sets target temperature of the given extruder.
@@ -162,9 +164,20 @@ LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_m
* @param[in] pDriver_Marlin - Driver_Marlin instance.
* @param[in] nExtruderID - ID of extruder.
* @param[in] dTemperatureInDegreeCelcius - Extruder target temperature.
+* @param[in] bWaitForTemp - If true, waits for the target extruder temperature to be reached before proceeding
* @return error code or 0 (success)
*/
-LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_setextrudertargettemperature(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_uint32 nExtruderID, LibMCDriver_Marlin_double dTemperatureInDegreeCelcius);
+LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_setextrudertargettemperature(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_uint32 nExtruderID, LibMCDriver_Marlin_double dTemperatureInDegreeCelcius, bool bWaitForTemp);
+
+/**
+* Turns on one of the fans and set its speed.
+*
+* @param[in] pDriver_Marlin - Driver_Marlin instance.
+* @param[in] nFanID - ID of fan.
+* @param[in] nSpeed - Fan speed [0..255]. 0=0%!.(MISSING).255=100%!
+(MISSING)* @return error code or 0 (success)
+*/
+LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_setfanspeed(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_uint32 nFanID, LibMCDriver_Marlin_uint32 nSpeed);
/**
* Sets PID parameters.
@@ -208,13 +221,13 @@ LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_m
LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_gettargetposition(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_double * pX, LibMCDriver_Marlin_double * pY, LibMCDriver_Marlin_double * pZ);
/**
-* Returns the current extruder position.
+* Returns the target extruder position.
*
* @param[in] pDriver_Marlin - Driver_Marlin instance.
* @param[out] pE - E Value in mm
* @return error code or 0 (success)
*/
-LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_getextruderposition(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_double * pE);
+LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_getextrudertargetposition(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_double * pE);
/**
* Returns the current and the target bed temperature.
@@ -281,10 +294,11 @@ LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_m
* @param[in] pDriver_Marlin - Driver_Marlin instance.
* @param[in] dX - X Value in mm
* @param[in] dY - Y Value in mm
+* @param[in] dE - E Value in mm
* @param[in] dSpeed - Movement speed in mm/s
* @return error code or 0 (success)
*/
-LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_movetoxy(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_double dX, LibMCDriver_Marlin_double dY, LibMCDriver_Marlin_double dSpeed);
+LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_movetoxy(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_double dX, LibMCDriver_Marlin_double dY, LibMCDriver_Marlin_double dE, LibMCDriver_Marlin_double dSpeed);
/**
* Moves to/by a certain position by a fast move. Takes the relative/absolute mode into account. Fails if it cannot execute a movement.
@@ -302,10 +316,11 @@ LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_m
*
* @param[in] pDriver_Marlin - Driver_Marlin instance.
* @param[in] dZ - Z Value in mm
+* @param[in] dE - E Value in mm
* @param[in] dSpeed - Movement speed in mm/s
* @return error code or 0 (success)
*/
-LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_movetoz(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_double dZ, LibMCDriver_Marlin_double dSpeed);
+LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_movetoz(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_double dZ, LibMCDriver_Marlin_double dE, LibMCDriver_Marlin_double dSpeed);
/**
* Moves to/by a certain position by a fast move. Takes the relative/absolute mode into account. Fails if it cannot execute a movement.
diff --git a/Drivers/Marlin/Headers/CppDynamic/libmcdriver_marlin_dynamic.h b/Drivers/Marlin/Headers/CppDynamic/libmcdriver_marlin_dynamic.h
index e2c3b664..a4094385 100644
--- a/Drivers/Marlin/Headers/CppDynamic/libmcdriver_marlin_dynamic.h
+++ b/Drivers/Marlin/Headers/CppDynamic/libmcdriver_marlin_dynamic.h
@@ -113,9 +113,10 @@ typedef LibMCDriver_MarlinResult (*PLibMCDriver_MarlinDriver_GetHeaderInformatio
* @param[in] pCOMPort - Device Port to connect to
* @param[in] nBaudrate - Baudrate to use
* @param[in] dStatusUpdateInterval - Timer interval [ms] for updating status
+* @param[in] nConnectTimeout - Timeout [ms] for connecting printer
* @return error code or 0 (success)
*/
-typedef LibMCDriver_MarlinResult (*PLibMCDriver_MarlinDriver_Marlin_ConnectPtr) (LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, const char * pCOMPort, LibMCDriver_Marlin_uint32 nBaudrate, LibMCDriver_Marlin_double dStatusUpdateInterval);
+typedef LibMCDriver_MarlinResult (*PLibMCDriver_MarlinDriver_Marlin_ConnectPtr) (LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, const char * pCOMPort, LibMCDriver_Marlin_uint32 nBaudrate, LibMCDriver_Marlin_double dStatusUpdateInterval, LibMCDriver_Marlin_uint32 nConnectTimeout);
/**
* Disconnects from the Marlin board.
@@ -139,9 +140,10 @@ typedef LibMCDriver_MarlinResult (*PLibMCDriver_MarlinDriver_Marlin_SetAbsoluteP
*
* @param[in] pDriver_Marlin - Driver_Marlin instance.
* @param[in] dTemperatureInDegreeCelcius - Bed target temperature.
+* @param[in] bWaitForTemp - If true, waits for the target bed temperature to be reached before proceeding
* @return error code or 0 (success)
*/
-typedef LibMCDriver_MarlinResult (*PLibMCDriver_MarlinDriver_Marlin_SetHeatedBedTargetTemperaturePtr) (LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_double dTemperatureInDegreeCelcius);
+typedef LibMCDriver_MarlinResult (*PLibMCDriver_MarlinDriver_Marlin_SetHeatedBedTargetTemperaturePtr) (LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_double dTemperatureInDegreeCelcius, bool bWaitForTemp);
/**
* Sets target temperature of the given extruder.
@@ -149,9 +151,20 @@ typedef LibMCDriver_MarlinResult (*PLibMCDriver_MarlinDriver_Marlin_SetHeatedBed
* @param[in] pDriver_Marlin - Driver_Marlin instance.
* @param[in] nExtruderID - ID of extruder.
* @param[in] dTemperatureInDegreeCelcius - Extruder target temperature.
+* @param[in] bWaitForTemp - If true, waits for the target extruder temperature to be reached before proceeding
* @return error code or 0 (success)
*/
-typedef LibMCDriver_MarlinResult (*PLibMCDriver_MarlinDriver_Marlin_SetExtruderTargetTemperaturePtr) (LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_uint32 nExtruderID, LibMCDriver_Marlin_double dTemperatureInDegreeCelcius);
+typedef LibMCDriver_MarlinResult (*PLibMCDriver_MarlinDriver_Marlin_SetExtruderTargetTemperaturePtr) (LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_uint32 nExtruderID, LibMCDriver_Marlin_double dTemperatureInDegreeCelcius, bool bWaitForTemp);
+
+/**
+* Turns on one of the fans and set its speed.
+*
+* @param[in] pDriver_Marlin - Driver_Marlin instance.
+* @param[in] nFanID - ID of fan.
+* @param[in] nSpeed - Fan speed [0..255]. 0=0%!.(MISSING).255=100%!
+(MISSING)* @return error code or 0 (success)
+*/
+typedef LibMCDriver_MarlinResult (*PLibMCDriver_MarlinDriver_Marlin_SetFanSpeedPtr) (LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_uint32 nFanID, LibMCDriver_Marlin_uint32 nSpeed);
/**
* Sets PID parameters.
@@ -195,13 +208,13 @@ typedef LibMCDriver_MarlinResult (*PLibMCDriver_MarlinDriver_Marlin_GetCurrentPo
typedef LibMCDriver_MarlinResult (*PLibMCDriver_MarlinDriver_Marlin_GetTargetPositionPtr) (LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_double * pX, LibMCDriver_Marlin_double * pY, LibMCDriver_Marlin_double * pZ);
/**
-* Returns the current extruder position.
+* Returns the target extruder position.
*
* @param[in] pDriver_Marlin - Driver_Marlin instance.
* @param[out] pE - E Value in mm
* @return error code or 0 (success)
*/
-typedef LibMCDriver_MarlinResult (*PLibMCDriver_MarlinDriver_Marlin_GetExtruderPositionPtr) (LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_double * pE);
+typedef LibMCDriver_MarlinResult (*PLibMCDriver_MarlinDriver_Marlin_GetExtruderTargetPositionPtr) (LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_double * pE);
/**
* Returns the current and the target bed temperature.
@@ -268,10 +281,11 @@ typedef LibMCDriver_MarlinResult (*PLibMCDriver_MarlinDriver_Marlin_IsHomedPtr)
* @param[in] pDriver_Marlin - Driver_Marlin instance.
* @param[in] dX - X Value in mm
* @param[in] dY - Y Value in mm
+* @param[in] dE - E Value in mm
* @param[in] dSpeed - Movement speed in mm/s
* @return error code or 0 (success)
*/
-typedef LibMCDriver_MarlinResult (*PLibMCDriver_MarlinDriver_Marlin_MoveToXYPtr) (LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_double dX, LibMCDriver_Marlin_double dY, LibMCDriver_Marlin_double dSpeed);
+typedef LibMCDriver_MarlinResult (*PLibMCDriver_MarlinDriver_Marlin_MoveToXYPtr) (LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_double dX, LibMCDriver_Marlin_double dY, LibMCDriver_Marlin_double dE, LibMCDriver_Marlin_double dSpeed);
/**
* Moves to/by a certain position by a fast move. Takes the relative/absolute mode into account. Fails if it cannot execute a movement.
@@ -289,10 +303,11 @@ typedef LibMCDriver_MarlinResult (*PLibMCDriver_MarlinDriver_Marlin_MoveFastToXY
*
* @param[in] pDriver_Marlin - Driver_Marlin instance.
* @param[in] dZ - Z Value in mm
+* @param[in] dE - E Value in mm
* @param[in] dSpeed - Movement speed in mm/s
* @return error code or 0 (success)
*/
-typedef LibMCDriver_MarlinResult (*PLibMCDriver_MarlinDriver_Marlin_MoveToZPtr) (LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_double dZ, LibMCDriver_Marlin_double dSpeed);
+typedef LibMCDriver_MarlinResult (*PLibMCDriver_MarlinDriver_Marlin_MoveToZPtr) (LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_double dZ, LibMCDriver_Marlin_double dE, LibMCDriver_Marlin_double dSpeed);
/**
* Moves to/by a certain position by a fast move. Takes the relative/absolute mode into account. Fails if it cannot execute a movement.
@@ -397,11 +412,12 @@ typedef struct {
PLibMCDriver_MarlinDriver_Marlin_SetAbsolutePositioningPtr m_Driver_Marlin_SetAbsolutePositioning;
PLibMCDriver_MarlinDriver_Marlin_SetHeatedBedTargetTemperaturePtr m_Driver_Marlin_SetHeatedBedTargetTemperature;
PLibMCDriver_MarlinDriver_Marlin_SetExtruderTargetTemperaturePtr m_Driver_Marlin_SetExtruderTargetTemperature;
+ PLibMCDriver_MarlinDriver_Marlin_SetFanSpeedPtr m_Driver_Marlin_SetFanSpeed;
PLibMCDriver_MarlinDriver_Marlin_SetPidParametersPtr m_Driver_Marlin_SetPidParameters;
PLibMCDriver_MarlinDriver_Marlin_UpdateStatePtr m_Driver_Marlin_UpdateState;
PLibMCDriver_MarlinDriver_Marlin_GetCurrentPositionPtr m_Driver_Marlin_GetCurrentPosition;
PLibMCDriver_MarlinDriver_Marlin_GetTargetPositionPtr m_Driver_Marlin_GetTargetPosition;
- PLibMCDriver_MarlinDriver_Marlin_GetExtruderPositionPtr m_Driver_Marlin_GetExtruderPosition;
+ PLibMCDriver_MarlinDriver_Marlin_GetExtruderTargetPositionPtr m_Driver_Marlin_GetExtruderTargetPosition;
PLibMCDriver_MarlinDriver_Marlin_GetHeatedBedTemperaturePtr m_Driver_Marlin_GetHeatedBedTemperature;
PLibMCDriver_MarlinDriver_Marlin_GetExtruderTemperaturePtr m_Driver_Marlin_GetExtruderTemperature;
PLibMCDriver_MarlinDriver_Marlin_GetPidParametersPtr m_Driver_Marlin_GetPidParameters;
diff --git a/Drivers/Marlin/Headers/CppDynamic/libmcdriver_marlin_dynamic.hpp b/Drivers/Marlin/Headers/CppDynamic/libmcdriver_marlin_dynamic.hpp
index 535c9e58..f910e228 100644
--- a/Drivers/Marlin/Headers/CppDynamic/libmcdriver_marlin_dynamic.hpp
+++ b/Drivers/Marlin/Headers/CppDynamic/libmcdriver_marlin_dynamic.hpp
@@ -360,25 +360,26 @@ class CDriver_Marlin : public CDriver {
{
}
- inline void Connect(const std::string & sCOMPort, const LibMCDriver_Marlin_uint32 nBaudrate, const LibMCDriver_Marlin_double dStatusUpdateInterval);
+ inline void Connect(const std::string & sCOMPort, const LibMCDriver_Marlin_uint32 nBaudrate, const LibMCDriver_Marlin_double dStatusUpdateInterval, const LibMCDriver_Marlin_uint32 nConnectTimeout);
inline void Disconnect();
inline void SetAbsolutePositioning(const bool bAbsolute);
- inline void SetHeatedBedTargetTemperature(const LibMCDriver_Marlin_double dTemperatureInDegreeCelcius);
- inline void SetExtruderTargetTemperature(const LibMCDriver_Marlin_uint32 nExtruderID, const LibMCDriver_Marlin_double dTemperatureInDegreeCelcius);
+ inline void SetHeatedBedTargetTemperature(const LibMCDriver_Marlin_double dTemperatureInDegreeCelcius, const bool bWaitForTemp);
+ inline void SetExtruderTargetTemperature(const LibMCDriver_Marlin_uint32 nExtruderID, const LibMCDriver_Marlin_double dTemperatureInDegreeCelcius, const bool bWaitForTemp);
+ inline void SetFanSpeed(const LibMCDriver_Marlin_uint32 nFanID, const LibMCDriver_Marlin_uint32 nSpeed);
inline void SetPidParameters(const LibMCDriver_Marlin_double dP, const LibMCDriver_Marlin_double dI, const LibMCDriver_Marlin_double dD);
inline void UpdateState();
inline void GetCurrentPosition(LibMCDriver_Marlin_double & dX, LibMCDriver_Marlin_double & dY, LibMCDriver_Marlin_double & dZ);
inline void GetTargetPosition(LibMCDriver_Marlin_double & dX, LibMCDriver_Marlin_double & dY, LibMCDriver_Marlin_double & dZ);
- inline void GetExtruderPosition(LibMCDriver_Marlin_double & dE);
+ inline void GetExtruderTargetPosition(LibMCDriver_Marlin_double & dE);
inline void GetHeatedBedTemperature(LibMCDriver_Marlin_double & dTargetTemperature, LibMCDriver_Marlin_double & dCurrentTemperature);
inline void GetExtruderTemperature(const LibMCDriver_Marlin_uint32 nExtruderID, LibMCDriver_Marlin_double & dTargetTemperature, LibMCDriver_Marlin_double & dCurrentTemperature);
inline void GetPidParameters(LibMCDriver_Marlin_double & dP, LibMCDriver_Marlin_double & dI, LibMCDriver_Marlin_double & dD);
inline bool CanExecuteMovement();
inline bool IsMoving();
inline bool IsHomed();
- inline void MoveToXY(const LibMCDriver_Marlin_double dX, const LibMCDriver_Marlin_double dY, const LibMCDriver_Marlin_double dSpeed);
+ inline void MoveToXY(const LibMCDriver_Marlin_double dX, const LibMCDriver_Marlin_double dY, const LibMCDriver_Marlin_double dE, const LibMCDriver_Marlin_double dSpeed);
inline void MoveFastToXY(const LibMCDriver_Marlin_double dX, const LibMCDriver_Marlin_double dY, const LibMCDriver_Marlin_double dSpeed);
- inline void MoveToZ(const LibMCDriver_Marlin_double dZ, const LibMCDriver_Marlin_double dSpeed);
+ inline void MoveToZ(const LibMCDriver_Marlin_double dZ, const LibMCDriver_Marlin_double dE, const LibMCDriver_Marlin_double dSpeed);
inline void MoveFastToZ(const LibMCDriver_Marlin_double dZ, const LibMCDriver_Marlin_double dSpeed);
inline void StartHoming();
};
@@ -513,11 +514,12 @@ class CDriver_Marlin : public CDriver {
pWrapperTable->m_Driver_Marlin_SetAbsolutePositioning = nullptr;
pWrapperTable->m_Driver_Marlin_SetHeatedBedTargetTemperature = nullptr;
pWrapperTable->m_Driver_Marlin_SetExtruderTargetTemperature = nullptr;
+ pWrapperTable->m_Driver_Marlin_SetFanSpeed = nullptr;
pWrapperTable->m_Driver_Marlin_SetPidParameters = nullptr;
pWrapperTable->m_Driver_Marlin_UpdateState = nullptr;
pWrapperTable->m_Driver_Marlin_GetCurrentPosition = nullptr;
pWrapperTable->m_Driver_Marlin_GetTargetPosition = nullptr;
- pWrapperTable->m_Driver_Marlin_GetExtruderPosition = nullptr;
+ pWrapperTable->m_Driver_Marlin_GetExtruderTargetPosition = nullptr;
pWrapperTable->m_Driver_Marlin_GetHeatedBedTemperature = nullptr;
pWrapperTable->m_Driver_Marlin_GetExtruderTemperature = nullptr;
pWrapperTable->m_Driver_Marlin_GetPidParameters = nullptr;
@@ -665,6 +667,15 @@ class CDriver_Marlin : public CDriver {
if (pWrapperTable->m_Driver_Marlin_SetExtruderTargetTemperature == nullptr)
return LIBMCDRIVER_MARLIN_ERROR_COULDNOTFINDLIBRARYEXPORT;
+ #ifdef _WIN32
+ pWrapperTable->m_Driver_Marlin_SetFanSpeed = (PLibMCDriver_MarlinDriver_Marlin_SetFanSpeedPtr) GetProcAddress(hLibrary, "libmcdriver_marlin_driver_marlin_setfanspeed");
+ #else // _WIN32
+ pWrapperTable->m_Driver_Marlin_SetFanSpeed = (PLibMCDriver_MarlinDriver_Marlin_SetFanSpeedPtr) dlsym(hLibrary, "libmcdriver_marlin_driver_marlin_setfanspeed");
+ dlerror();
+ #endif // _WIN32
+ if (pWrapperTable->m_Driver_Marlin_SetFanSpeed == nullptr)
+ return LIBMCDRIVER_MARLIN_ERROR_COULDNOTFINDLIBRARYEXPORT;
+
#ifdef _WIN32
pWrapperTable->m_Driver_Marlin_SetPidParameters = (PLibMCDriver_MarlinDriver_Marlin_SetPidParametersPtr) GetProcAddress(hLibrary, "libmcdriver_marlin_driver_marlin_setpidparameters");
#else // _WIN32
@@ -702,12 +713,12 @@ class CDriver_Marlin : public CDriver {
return LIBMCDRIVER_MARLIN_ERROR_COULDNOTFINDLIBRARYEXPORT;
#ifdef _WIN32
- pWrapperTable->m_Driver_Marlin_GetExtruderPosition = (PLibMCDriver_MarlinDriver_Marlin_GetExtruderPositionPtr) GetProcAddress(hLibrary, "libmcdriver_marlin_driver_marlin_getextruderposition");
+ pWrapperTable->m_Driver_Marlin_GetExtruderTargetPosition = (PLibMCDriver_MarlinDriver_Marlin_GetExtruderTargetPositionPtr) GetProcAddress(hLibrary, "libmcdriver_marlin_driver_marlin_getextrudertargetposition");
#else // _WIN32
- pWrapperTable->m_Driver_Marlin_GetExtruderPosition = (PLibMCDriver_MarlinDriver_Marlin_GetExtruderPositionPtr) dlsym(hLibrary, "libmcdriver_marlin_driver_marlin_getextruderposition");
+ pWrapperTable->m_Driver_Marlin_GetExtruderTargetPosition = (PLibMCDriver_MarlinDriver_Marlin_GetExtruderTargetPositionPtr) dlsym(hLibrary, "libmcdriver_marlin_driver_marlin_getextrudertargetposition");
dlerror();
#endif // _WIN32
- if (pWrapperTable->m_Driver_Marlin_GetExtruderPosition == nullptr)
+ if (pWrapperTable->m_Driver_Marlin_GetExtruderTargetPosition == nullptr)
return LIBMCDRIVER_MARLIN_ERROR_COULDNOTFINDLIBRARYEXPORT;
#ifdef _WIN32
@@ -924,6 +935,10 @@ class CDriver_Marlin : public CDriver {
if ( (eLookupError != 0) || (pWrapperTable->m_Driver_Marlin_SetExtruderTargetTemperature == nullptr) )
return LIBMCDRIVER_MARLIN_ERROR_COULDNOTFINDLIBRARYEXPORT;
+ eLookupError = (*pLookup)("libmcdriver_marlin_driver_marlin_setfanspeed", (void**)&(pWrapperTable->m_Driver_Marlin_SetFanSpeed));
+ if ( (eLookupError != 0) || (pWrapperTable->m_Driver_Marlin_SetFanSpeed == nullptr) )
+ return LIBMCDRIVER_MARLIN_ERROR_COULDNOTFINDLIBRARYEXPORT;
+
eLookupError = (*pLookup)("libmcdriver_marlin_driver_marlin_setpidparameters", (void**)&(pWrapperTable->m_Driver_Marlin_SetPidParameters));
if ( (eLookupError != 0) || (pWrapperTable->m_Driver_Marlin_SetPidParameters == nullptr) )
return LIBMCDRIVER_MARLIN_ERROR_COULDNOTFINDLIBRARYEXPORT;
@@ -940,8 +955,8 @@ class CDriver_Marlin : public CDriver {
if ( (eLookupError != 0) || (pWrapperTable->m_Driver_Marlin_GetTargetPosition == nullptr) )
return LIBMCDRIVER_MARLIN_ERROR_COULDNOTFINDLIBRARYEXPORT;
- eLookupError = (*pLookup)("libmcdriver_marlin_driver_marlin_getextruderposition", (void**)&(pWrapperTable->m_Driver_Marlin_GetExtruderPosition));
- if ( (eLookupError != 0) || (pWrapperTable->m_Driver_Marlin_GetExtruderPosition == nullptr) )
+ eLookupError = (*pLookup)("libmcdriver_marlin_driver_marlin_getextrudertargetposition", (void**)&(pWrapperTable->m_Driver_Marlin_GetExtruderTargetPosition));
+ if ( (eLookupError != 0) || (pWrapperTable->m_Driver_Marlin_GetExtruderTargetPosition == nullptr) )
return LIBMCDRIVER_MARLIN_ERROR_COULDNOTFINDLIBRARYEXPORT;
eLookupError = (*pLookup)("libmcdriver_marlin_driver_marlin_getheatedbedtemperature", (void**)&(pWrapperTable->m_Driver_Marlin_GetHeatedBedTemperature));
@@ -1104,10 +1119,11 @@ class CDriver_Marlin : public CDriver {
* @param[in] sCOMPort - Device Port to connect to
* @param[in] nBaudrate - Baudrate to use
* @param[in] dStatusUpdateInterval - Timer interval [ms] for updating status
+ * @param[in] nConnectTimeout - Timeout [ms] for connecting printer
*/
- void CDriver_Marlin::Connect(const std::string & sCOMPort, const LibMCDriver_Marlin_uint32 nBaudrate, const LibMCDriver_Marlin_double dStatusUpdateInterval)
+ void CDriver_Marlin::Connect(const std::string & sCOMPort, const LibMCDriver_Marlin_uint32 nBaudrate, const LibMCDriver_Marlin_double dStatusUpdateInterval, const LibMCDriver_Marlin_uint32 nConnectTimeout)
{
- CheckError(m_pWrapper->m_WrapperTable.m_Driver_Marlin_Connect(m_pHandle, sCOMPort.c_str(), nBaudrate, dStatusUpdateInterval));
+ CheckError(m_pWrapper->m_WrapperTable.m_Driver_Marlin_Connect(m_pHandle, sCOMPort.c_str(), nBaudrate, dStatusUpdateInterval, nConnectTimeout));
}
/**
@@ -1130,20 +1146,32 @@ class CDriver_Marlin : public CDriver {
/**
* CDriver_Marlin::SetHeatedBedTargetTemperature - Sets heated bed target temperature.
* @param[in] dTemperatureInDegreeCelcius - Bed target temperature.
+ * @param[in] bWaitForTemp - If true, waits for the target bed temperature to be reached before proceeding
*/
- void CDriver_Marlin::SetHeatedBedTargetTemperature(const LibMCDriver_Marlin_double dTemperatureInDegreeCelcius)
+ void CDriver_Marlin::SetHeatedBedTargetTemperature(const LibMCDriver_Marlin_double dTemperatureInDegreeCelcius, const bool bWaitForTemp)
{
- CheckError(m_pWrapper->m_WrapperTable.m_Driver_Marlin_SetHeatedBedTargetTemperature(m_pHandle, dTemperatureInDegreeCelcius));
+ CheckError(m_pWrapper->m_WrapperTable.m_Driver_Marlin_SetHeatedBedTargetTemperature(m_pHandle, dTemperatureInDegreeCelcius, bWaitForTemp));
}
/**
* CDriver_Marlin::SetExtruderTargetTemperature - Sets target temperature of the given extruder.
* @param[in] nExtruderID - ID of extruder.
* @param[in] dTemperatureInDegreeCelcius - Extruder target temperature.
+ * @param[in] bWaitForTemp - If true, waits for the target extruder temperature to be reached before proceeding
*/
- void CDriver_Marlin::SetExtruderTargetTemperature(const LibMCDriver_Marlin_uint32 nExtruderID, const LibMCDriver_Marlin_double dTemperatureInDegreeCelcius)
+ void CDriver_Marlin::SetExtruderTargetTemperature(const LibMCDriver_Marlin_uint32 nExtruderID, const LibMCDriver_Marlin_double dTemperatureInDegreeCelcius, const bool bWaitForTemp)
+ {
+ CheckError(m_pWrapper->m_WrapperTable.m_Driver_Marlin_SetExtruderTargetTemperature(m_pHandle, nExtruderID, dTemperatureInDegreeCelcius, bWaitForTemp));
+ }
+
+ /**
+ * CDriver_Marlin::SetFanSpeed - Turns on one of the fans and set its speed.
+ * @param[in] nFanID - ID of fan.
+ * @param[in] nSpeed - Fan speed [0..255]. 0=0%!.(MISSING).255=100%!
+(MISSING) */
+ void CDriver_Marlin::SetFanSpeed(const LibMCDriver_Marlin_uint32 nFanID, const LibMCDriver_Marlin_uint32 nSpeed)
{
- CheckError(m_pWrapper->m_WrapperTable.m_Driver_Marlin_SetExtruderTargetTemperature(m_pHandle, nExtruderID, dTemperatureInDegreeCelcius));
+ CheckError(m_pWrapper->m_WrapperTable.m_Driver_Marlin_SetFanSpeed(m_pHandle, nFanID, nSpeed));
}
/**
@@ -1188,12 +1216,12 @@ class CDriver_Marlin : public CDriver {
}
/**
- * CDriver_Marlin::GetExtruderPosition - Returns the current extruder position.
+ * CDriver_Marlin::GetExtruderTargetPosition - Returns the target extruder position.
* @param[out] dE - E Value in mm
*/
- void CDriver_Marlin::GetExtruderPosition(LibMCDriver_Marlin_double & dE)
+ void CDriver_Marlin::GetExtruderTargetPosition(LibMCDriver_Marlin_double & dE)
{
- CheckError(m_pWrapper->m_WrapperTable.m_Driver_Marlin_GetExtruderPosition(m_pHandle, &dE));
+ CheckError(m_pWrapper->m_WrapperTable.m_Driver_Marlin_GetExtruderTargetPosition(m_pHandle, &dE));
}
/**
@@ -1268,11 +1296,12 @@ class CDriver_Marlin : public CDriver {
* CDriver_Marlin::MoveToXY - Moves to/by a certain position by a linear move. Takes the relative/absolute mode into account. Fails if it cannot execute a movement.
* @param[in] dX - X Value in mm
* @param[in] dY - Y Value in mm
+ * @param[in] dE - E Value in mm
* @param[in] dSpeed - Movement speed in mm/s
*/
- void CDriver_Marlin::MoveToXY(const LibMCDriver_Marlin_double dX, const LibMCDriver_Marlin_double dY, const LibMCDriver_Marlin_double dSpeed)
+ void CDriver_Marlin::MoveToXY(const LibMCDriver_Marlin_double dX, const LibMCDriver_Marlin_double dY, const LibMCDriver_Marlin_double dE, const LibMCDriver_Marlin_double dSpeed)
{
- CheckError(m_pWrapper->m_WrapperTable.m_Driver_Marlin_MoveToXY(m_pHandle, dX, dY, dSpeed));
+ CheckError(m_pWrapper->m_WrapperTable.m_Driver_Marlin_MoveToXY(m_pHandle, dX, dY, dE, dSpeed));
}
/**
@@ -1289,11 +1318,12 @@ class CDriver_Marlin : public CDriver {
/**
* CDriver_Marlin::MoveToZ - Moves to/by a certain position by a linear move. Takes the relative/absolute mode into account. Fails if it cannot execute a movement.
* @param[in] dZ - Z Value in mm
+ * @param[in] dE - E Value in mm
* @param[in] dSpeed - Movement speed in mm/s
*/
- void CDriver_Marlin::MoveToZ(const LibMCDriver_Marlin_double dZ, const LibMCDriver_Marlin_double dSpeed)
+ void CDriver_Marlin::MoveToZ(const LibMCDriver_Marlin_double dZ, const LibMCDriver_Marlin_double dE, const LibMCDriver_Marlin_double dSpeed)
{
- CheckError(m_pWrapper->m_WrapperTable.m_Driver_Marlin_MoveToZ(m_pHandle, dZ, dSpeed));
+ CheckError(m_pWrapper->m_WrapperTable.m_Driver_Marlin_MoveToZ(m_pHandle, dZ, dE, dSpeed));
}
/**
diff --git a/Drivers/Marlin/Implementation/AMC_SerialController.hpp b/Drivers/Marlin/Implementation/AMC_SerialController.hpp
index 285f16a4..1aeebb76 100644
--- a/Drivers/Marlin/Implementation/AMC_SerialController.hpp
+++ b/Drivers/Marlin/Implementation/AMC_SerialController.hpp
@@ -35,8 +35,9 @@ namespace AMC {
virtual void setPositioningAbolute() = 0;
virtual void setPositioningRelative() = 0;
- virtual void setHeatedBedTargetTemperature(double nTemperatureInDegreeCelcius) = 0;
- virtual void setExtruderTargetTemperature(uint32_t nExtruderIndex, double nTemperatureInDegreeCelcius) = 0;
+ virtual void setHeatedBedTargetTemperature(double nTemperatureInDegreeCelcius, bool bWait) = 0;
+ virtual void setExtruderTargetTemperature(uint32_t nExtruderIndex, double nTemperatureInDegreeCelcius, bool bWait) = 0;
+ virtual void setFanSpeed(uint32_t nFanIndex, uint32_t nSpeed) = 0;
virtual void setPidParameters(double dP, double dI, double dD) = 0;
virtual void queryTemperatureState (uint32_t nExtruderIndex) = 0;
@@ -47,16 +48,16 @@ namespace AMC {
virtual void getTargetPosition (double & dX, double& dY, double& dZ) = 0;
virtual void getCurrentPosition(double& dX, double& dY, double& dZ) = 0;
- virtual void getExtruderPosition (double &dE) = 0;
+ virtual void getExtruderTargetPosition (double &dE) = 0;
virtual void getPidParameters(double& dP, double& dI, double& dD) = 0;
virtual void startHoming() = 0;
virtual void setLcdMsg(const std::string& sLcdMsg) = 0;
- virtual void moveXY(const double dX, const double dY, const double dSpeedInMMperSecond) = 0;
+ virtual void moveXY(const double dX, const double dY, const double dE, const double dSpeedInMMperSecond) = 0;
virtual void moveFastXY(const double dX, const double dY, const double dSpeedInMMperSecond) = 0;
- virtual void moveZ(const double dZ, const double dSpeedInMMperSecond) = 0;
+ virtual void moveZ(const double dZ, const double dE, const double dSpeedInMMperSecond) = 0;
virtual void moveFastZ(const double dZ, const double dSpeedInMMperSecond) = 0;
virtual bool isHomed() = 0;
diff --git a/Drivers/Marlin/Implementation/AMC_SerialController_Marlin.cpp b/Drivers/Marlin/Implementation/AMC_SerialController_Marlin.cpp
index b5941d7e..f620fc15 100644
--- a/Drivers/Marlin/Implementation/AMC_SerialController_Marlin.cpp
+++ b/Drivers/Marlin/Implementation/AMC_SerialController_Marlin.cpp
@@ -44,6 +44,7 @@ namespace AMC {
CSerialController_Marlin::CSerialController_Marlin(bool bDebug, bool bDoQueryFirmwareInfo, bool bDisableHoming)
: m_sCOMPort("COM1"),
m_nBaudRate(115200),
+ m_nConnectTimeout(2000),
m_bDoQueryFirmwareInfo(bDoQueryFirmwareInfo),
m_bDisableHoming(bDisableHoming),
m_dStatusUpdateTimerInterval(100),
@@ -65,7 +66,6 @@ namespace AMC {
m_dCurrentPosX(0),
m_dCurrentPosY(0),
m_dCurrentPosZ(0),
- m_dCurrentPosE(0),
m_dAxisStepsPerUnitX(0),
m_dAxisStepsPerUnitY(0),
m_dAxisStepsPerUnitZ(0),
@@ -99,7 +99,7 @@ namespace AMC {
return m_sCOMPort;
}
-
+
void CSerialController_Marlin::setBaudrate(const uint32_t nBaudrate)
{
if (m_pConnection.get() != nullptr)
@@ -113,6 +113,19 @@ namespace AMC {
return m_nBaudRate;
}
+ void CSerialController_Marlin::setConnectTimeout(const uint32_t nConnectTimeout)
+ {
+ if (m_pConnection.get() != nullptr)
+ throw std::runtime_error("Serial Port already initialized");
+
+ m_nConnectTimeout = nConnectTimeout;
+ }
+
+ uint32_t CSerialController_Marlin::getConnectTimeout()
+ {
+ return m_nConnectTimeout;
+ }
+
CSerialController_Marlin::~CSerialController_Marlin()
{
}
@@ -122,7 +135,7 @@ namespace AMC {
if (m_pConnection.get() != nullptr)
throw std::runtime_error("Serial Port already initialized");
- // set timeout >1000 => 3000
+ // set timeout >1000 => 2000 (default of m_nConnectTimeout)
//
// if printer is booting (echoing start+ Date+Memory... after switch on printer or plug in cable) and
// timeout would be 1000 the while loop below we be leaved "to early" (after timeout of 1sec) and
@@ -131,9 +144,9 @@ namespace AMC {
//
// if printer is not booting (no echoing text... after software" reconnect)
// "start" will no be received,
- // but timeout after 3000 will respond with an empty string and
+ // but timeout after 2000 will respond with an empty string and
// printer is ready to receive commands
- m_pConnection.reset(new serial::Serial(m_sCOMPort, m_nBaudRate, serial::Timeout::simpleTimeout(2000)));
+ m_pConnection.reset(new serial::Serial(m_sCOMPort, m_nBaudRate, serial::Timeout::simpleTimeout(m_nConnectTimeout)));
if (!m_pConnection->isOpen()) {
m_pConnection.reset();
@@ -314,16 +327,30 @@ namespace AMC {
- void CSerialController_Marlin::setHeatedBedTargetTemperature(double nTemperatureInDegreeCelcius)
+ void CSerialController_Marlin::setHeatedBedTargetTemperature(double nTemperatureInDegreeCelcius, bool bWait)
{
- sendCommand("M140 S" + std::to_string(nTemperatureInDegreeCelcius));
+ if (bWait) {
+ // wait for the target bed temperature to be reached before proceeding
+ sendCommand("M190 S" + std::to_string(nTemperatureInDegreeCelcius));
+ }
+ else {
+ // don't wait
+ sendCommand("M140 S" + std::to_string(nTemperatureInDegreeCelcius));
+ }
}
- void CSerialController_Marlin::setExtruderTargetTemperature(uint32_t nExtruderIndex, double nTemperatureInDegreeCelcius)
+ void CSerialController_Marlin::setExtruderTargetTemperature(uint32_t nExtruderIndex, double nTemperatureInDegreeCelcius, bool bWait)
{
- if (nExtruderIndex < m_iExtruderCount)
+ if ((nExtruderIndex >= 0) && (nExtruderIndex < m_iExtruderCount))
{
- sendCommand("M104 T" + std::to_string(nExtruderIndex) + " S" + std::to_string(nTemperatureInDegreeCelcius));
+ if (bWait) {
+ // wait for the target extruder temperature to be reached before proceeding
+ sendCommand("M109 T" + std::to_string(nExtruderIndex) + " S" + std::to_string(nTemperatureInDegreeCelcius));
+ }
+ else {
+ // don't wait
+ sendCommand("M104 T" + std::to_string(nExtruderIndex) + " S" + std::to_string(nTemperatureInDegreeCelcius));
+ }
}
}
@@ -337,6 +364,21 @@ namespace AMC {
}
+ void CSerialController_Marlin::setFanSpeed(uint32_t nFanIndex, uint32_t nSpeed)
+ {
+ if ((nFanIndex >= 0))
+ {
+ if ((nSpeed > 0) && (nSpeed < 256)) {
+ // turn fan on
+ sendCommand("M106 P" + std::to_string(nFanIndex) + " S" + std::to_string(nSpeed));
+ }
+ else {
+ // turn fan off
+ sendCommand("M107 P" + std::to_string(nFanIndex));
+ }
+ }
+ }
+
void CSerialController_Marlin::queryTemperatureState(uint32_t nExtruderIndex)
{
if (nExtruderIndex < m_iExtruderCount)
@@ -622,9 +664,9 @@ namespace AMC {
dZ = m_dCurrentPosZ;
}
- void CSerialController_Marlin::getExtruderPosition(double& dE)
+ void CSerialController_Marlin::getExtruderTargetPosition(double& dE)
{
- dE = m_dCurrentPosE;
+ dE = m_dTargetPosE;
}
void CSerialController_Marlin::startHoming()
@@ -652,7 +694,12 @@ namespace AMC {
sendCommand("G91");
}
- void CSerialController_Marlin::moveToEx(bool bFastMove, bool bInX, const double dX, bool bInY, const double dY, bool bInZ, const double dZ, const double dSpeedInMMperSecond)
+ void CSerialController_Marlin::moveToEx(bool bFastMove,
+ bool bInX, const double dX,
+ bool bInY, const double dY,
+ bool bInZ, const double dZ,
+ bool bInE, const double dE,
+ const double dSpeedInMMperSecond)
{
std::stringstream sCommand;
@@ -675,6 +722,11 @@ namespace AMC {
// Z given => add Z+value to command str
sCommand << " Z" << dZ;
}
+ if (bInE && !bFastMove) {
+ // E given => add E+value to command str
+ // TODO remove to activate Extrusion
+ //sCommand << " E" << dE;
+ }
if (dSpeedInMMperSecond > 0) {
if (fabs(m_dCurrentSpeedInMMperSecond - dSpeedInMMperSecond) > MARLINDRIVER_MINSPEED) {
m_dCurrentSpeedInMMperSecond = dSpeedInMMperSecond;
@@ -692,27 +744,38 @@ namespace AMC {
if (bInZ) {
m_dTargetPosZ = dZ;
}
+ if (bInE) {
+ m_dTargetPosE = dE;
+ }
}
- void CSerialController_Marlin::moveXY(const double dX, const double dY, const double dSpeedInMMperSecond)
+ void CSerialController_Marlin::moveXY(const double dX, const double dY, const double dE, const double dSpeedInMMperSecond)
{
- moveToEx(false, true, dX, true, dY, false, 0.0, dSpeedInMMperSecond);
+ bool dInE = false;
+ if (fabs(dE) > MARLINDRIVER_MINSPEED) {
+ dInE = true;
+ }
+ moveToEx(false, true, dX, true, dY, false, 0.0, dInE, dE, dSpeedInMMperSecond);
}
void CSerialController_Marlin::moveFastXY(const double dX, const double dY, const double dSpeedInMMperSecond)
{
- moveToEx(true, true, dX, true, dY, false, 0.0, dSpeedInMMperSecond);
+ moveToEx(true, true, dX, true, dY, false, 0.0, false, 0.0, dSpeedInMMperSecond);
}
- void CSerialController_Marlin::moveZ(const double dZ, const double dSpeedInMMperSecond)
+ void CSerialController_Marlin::moveZ(const double dZ, const double dE, const double dSpeedInMMperSecond)
{
- moveToEx(false, false, 0.0, false, 0.0, true, dZ, dSpeedInMMperSecond);
+ bool dInE = false;
+ if (fabs(dE) > MARLINDRIVER_MINSPEED) {
+ dInE = true;
+ }
+ moveToEx(false, false, 0.0, false, 0.0, true, dZ, dInE, dE, dSpeedInMMperSecond);
}
void CSerialController_Marlin::moveFastZ(const double dZ, const double dSpeedInMMperSecond)
{
- moveToEx(true, false, 0.0, false, 0.0, true, dZ, dSpeedInMMperSecond);
+ moveToEx(true, false, 0.0, false, 0.0, true, dZ, false, 0.0, dSpeedInMMperSecond);
}
void CSerialController_Marlin::waitForMovement()
diff --git a/Drivers/Marlin/Implementation/AMC_SerialController_Marlin.hpp b/Drivers/Marlin/Implementation/AMC_SerialController_Marlin.hpp
index 2ab4633a..608a44f5 100644
--- a/Drivers/Marlin/Implementation/AMC_SerialController_Marlin.hpp
+++ b/Drivers/Marlin/Implementation/AMC_SerialController_Marlin.hpp
@@ -15,6 +15,7 @@ namespace AMC {
std::unique_ptr m_pConnection;
std::string m_sCOMPort;
uint32_t m_nBaudRate;
+ uint32_t m_nConnectTimeout;
uint32_t m_nLineNumber;
double m_dStatusUpdateTimerInterval;
@@ -40,7 +41,6 @@ namespace AMC {
double m_dCurrentPosX;
double m_dCurrentPosY;
double m_dCurrentPosZ;
- double m_dCurrentPosE;
double m_dCurrentSpeedInMMperSecond;
// firmware info
@@ -71,7 +71,7 @@ namespace AMC {
bool parseAckSymbol(const std::string& sLine, const uint32_t nLineNumber);
void queryAxisStepsPerUnitStateAndPidValues();
void queryFirmwareInfo();
- void moveToEx (bool bFastMove, bool bInX, const double dX, bool bInY, const double dY, bool bInZ, const double dZ, const double dSpeedInMMperSecond);
+ void moveToEx (bool bFastMove, bool bInX, const double dX, bool bInY, const double dY, bool bInZ, const double dZ, bool bInE, const double dE, const double dSpeedInMMperSecond);
public:
CSerialController_Marlin(bool bDebug, bool bDoQueryFirmwareInfo, bool bDisableHoming);
@@ -79,7 +79,10 @@ namespace AMC {
void setStatusUpdateTimerInterval(const double dStatusUpdateTimerInterval);
- void setCOMPort(const std::string & sCOMPort);
+ void setConnectTimeout(const uint32_t nConnectTimeout);
+ uint32_t getConnectTimeout();
+
+ void setCOMPort(const std::string& sCOMPort);
std::string getCOMPort();
void setBaudrate(const uint32_t nBaudrate);
@@ -92,9 +95,10 @@ namespace AMC {
void setPositioningAbolute();
void setPositioningRelative();
- void setHeatedBedTargetTemperature(double nTemperatureInDegreeCelcius) override;
- void setExtruderTargetTemperature(uint32_t nExtruderIndex, double nTemperatureInDegreeCelcius) override;
+ void setHeatedBedTargetTemperature(double nTemperatureInDegreeCelcius, bool bWait) override;
+ void setExtruderTargetTemperature(uint32_t nExtruderIndex, double nTemperatureInDegreeCelcius, bool bWait) override;
void setPidParameters(double dP, double dI, double dD) override;
+ void setFanSpeed(uint32_t nFanIndex, uint32_t nSpeed) override;
void queryTemperatureState(uint32_t nExtruderIndex) override;
void queryPositionState() override;
@@ -104,15 +108,15 @@ namespace AMC {
void getTargetPosition(double& dX, double& dY, double& dZ) override;
void getCurrentPosition(double& dX, double& dY, double& dZ) override;
- void getExtruderPosition(double& dE) override;
+ void getExtruderTargetPosition(double& dE) override;
void getPidParameters(double& dP, double& dI, double& dD) override;
void startHoming() override;
void setLcdMsg(const std::string& sLcdMsg) override;
- void moveXY(const double dX, const double dY, const double dSpeedInMMperSecond) override;
+ void moveXY(const double dX, const double dY, const double dE, const double dSpeedInMMperSecond) override;
void moveFastXY(const double dX, const double dY, const double dSpeedInMMperSecond) override;
- void moveZ(const double dZ, const double dSpeedInMMperSecond) override;
+ void moveZ(const double dZ, const double dE, const double dSpeedInMMperSecond) override;
void moveFastZ(const double dZ, const double dSpeedInMMperSecond) override;
bool isHomed() override;
diff --git a/Drivers/Marlin/Implementation/libmcdriver_marlin_driver_marlin.cpp b/Drivers/Marlin/Implementation/libmcdriver_marlin_driver_marlin.cpp
index 1265a887..309ff7fd 100644
--- a/Drivers/Marlin/Implementation/libmcdriver_marlin_driver_marlin.cpp
+++ b/Drivers/Marlin/Implementation/libmcdriver_marlin_driver_marlin.cpp
@@ -46,13 +46,14 @@ CDriver_Marlin::CDriver_Marlin(const std::string& sName, const std::string& sTyp
}
-void CDriver_Marlin::Connect(const std::string& sCOMPort, const LibMCDriver_Marlin_uint32 nBaudrate, const LibMCDriver_Marlin_double dStatusUpdateInterval)
+void CDriver_Marlin::Connect(const std::string& sCOMPort, const LibMCDriver_Marlin_uint32 nBaudrate, const LibMCDriver_Marlin_double dStatusUpdateInterval, const LibMCDriver_Marlin_uint32 nConnectTimeout)
{
Disconnect ();
auto pSerialController = std::make_shared(m_bDebug, m_doQueryFirmwareInfo, m_bDisableHoming);
pSerialController->setCOMPort(sCOMPort);
pSerialController->setBaudrate(nBaudrate);
+ pSerialController->setConnectTimeout(nConnectTimeout);
pSerialController->setStatusUpdateTimerInterval(dStatusUpdateInterval);
pSerialController->initializeController();
m_pSerialController = pSerialController;
@@ -80,14 +81,19 @@ void CDriver_Marlin::SetAbsolutePositioning(const bool bAbsolute)
}
}
-void CDriver_Marlin::SetHeatedBedTargetTemperature(const LibMCDriver_Marlin_double dTemperatureInDegreeCelcius)
+void CDriver_Marlin::SetHeatedBedTargetTemperature(const LibMCDriver_Marlin_double dTemperatureInDegreeCelcius, const bool bWaitForTemp)
{
- m_pSerialController->setHeatedBedTargetTemperature(dTemperatureInDegreeCelcius);
+ m_pSerialController->setHeatedBedTargetTemperature(dTemperatureInDegreeCelcius, bWaitForTemp);
}
-void CDriver_Marlin::SetExtruderTargetTemperature(const LibMCDriver_Marlin_uint32 nExtruderID, const LibMCDriver_Marlin_double dTemperatureInDegreeCelcius)
+void CDriver_Marlin::SetExtruderTargetTemperature(const LibMCDriver_Marlin_uint32 nExtruderID, const LibMCDriver_Marlin_double dTemperatureInDegreeCelcius, const bool bWaitForTemp)
{
- m_pSerialController->setExtruderTargetTemperature(nExtruderID, dTemperatureInDegreeCelcius);
+ m_pSerialController->setExtruderTargetTemperature(nExtruderID, dTemperatureInDegreeCelcius, bWaitForTemp);
+}
+
+void CDriver_Marlin::SetFanSpeed(const LibMCDriver_Marlin_uint32 nFanID, const LibMCDriver_Marlin_uint32 nSpeed)
+{
+ m_pSerialController->setFanSpeed(nFanID, nSpeed);
}
void CDriver_Marlin::SetPidParameters(const LibMCDriver_Marlin_double dP, const LibMCDriver_Marlin_double dI, const LibMCDriver_Marlin_double dD)
@@ -114,9 +120,9 @@ void CDriver_Marlin::GetTargetPosition(LibMCDriver_Marlin_double& dX, LibMCDrive
m_pSerialController->getTargetPosition(dX, dY, dZ);
}
-void CDriver_Marlin::GetExtruderPosition(LibMCDriver_Marlin_double& dE)
+void CDriver_Marlin::GetExtruderTargetPosition(LibMCDriver_Marlin_double& dE)
{
- m_pSerialController->getExtruderPosition(dE);
+ m_pSerialController->getExtruderTargetPosition(dE);
}
void CDriver_Marlin::GetHeatedBedTemperature(LibMCDriver_Marlin_double& dTargetTemperature, LibMCDriver_Marlin_double& dCurrentTemperature)
@@ -149,9 +155,9 @@ bool CDriver_Marlin::IsHomed()
return m_pSerialController->isHomed();
}
-void CDriver_Marlin::MoveToXY(const LibMCDriver_Marlin_double dX, const LibMCDriver_Marlin_double dY, const LibMCDriver_Marlin_double dSpeed)
+void CDriver_Marlin::MoveToXY(const LibMCDriver_Marlin_double dX, const LibMCDriver_Marlin_double dY, const LibMCDriver_Marlin_double dE, const LibMCDriver_Marlin_double dSpeed)
{
- m_pSerialController->moveXY(dX, dY, dSpeed);
+ m_pSerialController->moveXY(dX, dY, dE, dSpeed);
}
void CDriver_Marlin::MoveFastToXY(const LibMCDriver_Marlin_double dX, const LibMCDriver_Marlin_double dY, const LibMCDriver_Marlin_double dSpeed)
@@ -159,9 +165,9 @@ void CDriver_Marlin::MoveFastToXY(const LibMCDriver_Marlin_double dX, const LibM
m_pSerialController->moveFastXY(dX, dY, dSpeed);
}
-void CDriver_Marlin::MoveToZ(const LibMCDriver_Marlin_double dZ, const LibMCDriver_Marlin_double dSpeed)
+void CDriver_Marlin::MoveToZ(const LibMCDriver_Marlin_double dZ, const LibMCDriver_Marlin_double dE, const LibMCDriver_Marlin_double dSpeed)
{
- m_pSerialController->moveZ(dZ, dSpeed);
+ m_pSerialController->moveZ(dZ, dE, dSpeed);
}
void CDriver_Marlin::MoveFastToZ(const LibMCDriver_Marlin_double dZ, const LibMCDriver_Marlin_double dSpeed)
diff --git a/Drivers/Marlin/Implementation/libmcdriver_marlin_driver_marlin.hpp b/Drivers/Marlin/Implementation/libmcdriver_marlin_driver_marlin.hpp
index 4dfa392d..68508d7c 100644
--- a/Drivers/Marlin/Implementation/libmcdriver_marlin_driver_marlin.hpp
+++ b/Drivers/Marlin/Implementation/libmcdriver_marlin_driver_marlin.hpp
@@ -46,15 +46,17 @@ class CDriver_Marlin : public virtual IDriver_Marlin, public virtual CDriver {
CDriver_Marlin(const std::string& sName, const std::string& sType, const bool doQueryFirmwareInfo, const bool bDisableHoming, const bool bDebug);
- void Connect(const std::string& sCOMPort, const LibMCDriver_Marlin_uint32 nBaudrate, const LibMCDriver_Marlin_double dStatusUpdateInterval) override;
+ void Connect(const std::string& sCOMPort, const LibMCDriver_Marlin_uint32 nBaudrate, const LibMCDriver_Marlin_double dStatusUpdateInterval, const LibMCDriver_Marlin_uint32 nConnectTimeout) override;
void Disconnect() override;
void SetAbsolutePositioning(const bool bAbsolute) override;
- void SetHeatedBedTargetTemperature(const LibMCDriver_Marlin_double dTemperatureInDegreeCelcius) override;
+ void SetHeatedBedTargetTemperature(const LibMCDriver_Marlin_double dTemperatureInDegreeCelcius, const bool bWaitForTemp) override;
- void SetExtruderTargetTemperature(const LibMCDriver_Marlin_uint32 nExtruderID, const LibMCDriver_Marlin_double dTemperatureInDegreeCelcius) override;
+ void SetExtruderTargetTemperature(const LibMCDriver_Marlin_uint32 nExtruderID, const LibMCDriver_Marlin_double dTemperatureInDegreeCelcius, const bool bWaitForTemp) override;
+
+ void SetFanSpeed(const LibMCDriver_Marlin_uint32 nFanID, const LibMCDriver_Marlin_uint32 dSpeed) override;
void SetPidParameters(const LibMCDriver_Marlin_double dP, const LibMCDriver_Marlin_double dI, const LibMCDriver_Marlin_double dD) override;
@@ -64,7 +66,7 @@ class CDriver_Marlin : public virtual IDriver_Marlin, public virtual CDriver {
void GetTargetPosition(LibMCDriver_Marlin_double& dX, LibMCDriver_Marlin_double& dY, LibMCDriver_Marlin_double& dZ) override;
- void GetExtruderPosition(LibMCDriver_Marlin_double& dE) override;
+ void GetExtruderTargetPosition(LibMCDriver_Marlin_double& dE) override;
void GetHeatedBedTemperature(LibMCDriver_Marlin_double& dTargetTemperature, LibMCDriver_Marlin_double& dCurrentTemperature) override;
@@ -78,11 +80,11 @@ class CDriver_Marlin : public virtual IDriver_Marlin, public virtual CDriver {
bool IsHomed() override;
- void MoveToXY(const LibMCDriver_Marlin_double dX, const LibMCDriver_Marlin_double dY, const LibMCDriver_Marlin_double dSpeed) override;
+ void MoveToXY(const LibMCDriver_Marlin_double dX, const LibMCDriver_Marlin_double dY, const LibMCDriver_Marlin_double dE, const LibMCDriver_Marlin_double dSpeed) override;
void MoveFastToXY(const LibMCDriver_Marlin_double dX, const LibMCDriver_Marlin_double dY, const LibMCDriver_Marlin_double dSpeed) override;
- void MoveToZ(const LibMCDriver_Marlin_double dZ, const LibMCDriver_Marlin_double dSpeed) override;
+ void MoveToZ(const LibMCDriver_Marlin_double dZ, const LibMCDriver_Marlin_double dE, const LibMCDriver_Marlin_double dSpeed) override;
void MoveFastToZ(const LibMCDriver_Marlin_double dZ, const LibMCDriver_Marlin_double dSpeed) override;
diff --git a/Drivers/Marlin/Interfaces/libmcdriver_marlin_abi.hpp b/Drivers/Marlin/Interfaces/libmcdriver_marlin_abi.hpp
index 60e7f339..c008d1ce 100644
--- a/Drivers/Marlin/Interfaces/libmcdriver_marlin_abi.hpp
+++ b/Drivers/Marlin/Interfaces/libmcdriver_marlin_abi.hpp
@@ -126,9 +126,10 @@ LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_g
* @param[in] pCOMPort - Device Port to connect to
* @param[in] nBaudrate - Baudrate to use
* @param[in] dStatusUpdateInterval - Timer interval [ms] for updating status
+* @param[in] nConnectTimeout - Timeout [ms] for connecting printer
* @return error code or 0 (success)
*/
-LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_connect(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, const char * pCOMPort, LibMCDriver_Marlin_uint32 nBaudrate, LibMCDriver_Marlin_double dStatusUpdateInterval);
+LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_connect(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, const char * pCOMPort, LibMCDriver_Marlin_uint32 nBaudrate, LibMCDriver_Marlin_double dStatusUpdateInterval, LibMCDriver_Marlin_uint32 nConnectTimeout);
/**
* Disconnects from the Marlin board.
@@ -152,9 +153,10 @@ LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_m
*
* @param[in] pDriver_Marlin - Driver_Marlin instance.
* @param[in] dTemperatureInDegreeCelcius - Bed target temperature.
+* @param[in] bWaitForTemp - If true, waits for the target bed temperature to be reached before proceeding
* @return error code or 0 (success)
*/
-LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_setheatedbedtargettemperature(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_double dTemperatureInDegreeCelcius);
+LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_setheatedbedtargettemperature(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_double dTemperatureInDegreeCelcius, bool bWaitForTemp);
/**
* Sets target temperature of the given extruder.
@@ -162,9 +164,20 @@ LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_m
* @param[in] pDriver_Marlin - Driver_Marlin instance.
* @param[in] nExtruderID - ID of extruder.
* @param[in] dTemperatureInDegreeCelcius - Extruder target temperature.
+* @param[in] bWaitForTemp - If true, waits for the target extruder temperature to be reached before proceeding
* @return error code or 0 (success)
*/
-LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_setextrudertargettemperature(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_uint32 nExtruderID, LibMCDriver_Marlin_double dTemperatureInDegreeCelcius);
+LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_setextrudertargettemperature(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_uint32 nExtruderID, LibMCDriver_Marlin_double dTemperatureInDegreeCelcius, bool bWaitForTemp);
+
+/**
+* Turns on one of the fans and set its speed.
+*
+* @param[in] pDriver_Marlin - Driver_Marlin instance.
+* @param[in] nFanID - ID of fan.
+* @param[in] nSpeed - Fan speed [0..255]. 0=0%!.(MISSING).255=100%!
+(MISSING)* @return error code or 0 (success)
+*/
+LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_setfanspeed(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_uint32 nFanID, LibMCDriver_Marlin_uint32 nSpeed);
/**
* Sets PID parameters.
@@ -208,13 +221,13 @@ LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_m
LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_gettargetposition(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_double * pX, LibMCDriver_Marlin_double * pY, LibMCDriver_Marlin_double * pZ);
/**
-* Returns the current extruder position.
+* Returns the target extruder position.
*
* @param[in] pDriver_Marlin - Driver_Marlin instance.
* @param[out] pE - E Value in mm
* @return error code or 0 (success)
*/
-LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_getextruderposition(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_double * pE);
+LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_getextrudertargetposition(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_double * pE);
/**
* Returns the current and the target bed temperature.
@@ -281,10 +294,11 @@ LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_m
* @param[in] pDriver_Marlin - Driver_Marlin instance.
* @param[in] dX - X Value in mm
* @param[in] dY - Y Value in mm
+* @param[in] dE - E Value in mm
* @param[in] dSpeed - Movement speed in mm/s
* @return error code or 0 (success)
*/
-LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_movetoxy(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_double dX, LibMCDriver_Marlin_double dY, LibMCDriver_Marlin_double dSpeed);
+LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_movetoxy(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_double dX, LibMCDriver_Marlin_double dY, LibMCDriver_Marlin_double dE, LibMCDriver_Marlin_double dSpeed);
/**
* Moves to/by a certain position by a fast move. Takes the relative/absolute mode into account. Fails if it cannot execute a movement.
@@ -302,10 +316,11 @@ LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_m
*
* @param[in] pDriver_Marlin - Driver_Marlin instance.
* @param[in] dZ - Z Value in mm
+* @param[in] dE - E Value in mm
* @param[in] dSpeed - Movement speed in mm/s
* @return error code or 0 (success)
*/
-LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_movetoz(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_double dZ, LibMCDriver_Marlin_double dSpeed);
+LIBMCDRIVER_MARLIN_DECLSPEC LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_movetoz(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_double dZ, LibMCDriver_Marlin_double dE, LibMCDriver_Marlin_double dSpeed);
/**
* Moves to/by a certain position by a fast move. Takes the relative/absolute mode into account. Fails if it cannot execute a movement.
diff --git a/Drivers/Marlin/Interfaces/libmcdriver_marlin_interfaces.hpp b/Drivers/Marlin/Interfaces/libmcdriver_marlin_interfaces.hpp
index d8a19647..6195cbcf 100644
--- a/Drivers/Marlin/Interfaces/libmcdriver_marlin_interfaces.hpp
+++ b/Drivers/Marlin/Interfaces/libmcdriver_marlin_interfaces.hpp
@@ -309,8 +309,9 @@ class IDriver_Marlin : public virtual IDriver {
* @param[in] sCOMPort - Device Port to connect to
* @param[in] nBaudrate - Baudrate to use
* @param[in] dStatusUpdateInterval - Timer interval [ms] for updating status
+ * @param[in] nConnectTimeout - Timeout [ms] for connecting printer
*/
- virtual void Connect(const std::string & sCOMPort, const LibMCDriver_Marlin_uint32 nBaudrate, const LibMCDriver_Marlin_double dStatusUpdateInterval) = 0;
+ virtual void Connect(const std::string & sCOMPort, const LibMCDriver_Marlin_uint32 nBaudrate, const LibMCDriver_Marlin_double dStatusUpdateInterval, const LibMCDriver_Marlin_uint32 nConnectTimeout) = 0;
/**
* IDriver_Marlin::Disconnect - Disconnects from the Marlin board.
@@ -326,15 +327,24 @@ class IDriver_Marlin : public virtual IDriver {
/**
* IDriver_Marlin::SetHeatedBedTargetTemperature - Sets heated bed target temperature.
* @param[in] dTemperatureInDegreeCelcius - Bed target temperature.
+ * @param[in] bWaitForTemp - If true, waits for the target bed temperature to be reached before proceeding
*/
- virtual void SetHeatedBedTargetTemperature(const LibMCDriver_Marlin_double dTemperatureInDegreeCelcius) = 0;
+ virtual void SetHeatedBedTargetTemperature(const LibMCDriver_Marlin_double dTemperatureInDegreeCelcius, const bool bWaitForTemp) = 0;
/**
* IDriver_Marlin::SetExtruderTargetTemperature - Sets target temperature of the given extruder.
* @param[in] nExtruderID - ID of extruder.
* @param[in] dTemperatureInDegreeCelcius - Extruder target temperature.
+ * @param[in] bWaitForTemp - If true, waits for the target extruder temperature to be reached before proceeding
*/
- virtual void SetExtruderTargetTemperature(const LibMCDriver_Marlin_uint32 nExtruderID, const LibMCDriver_Marlin_double dTemperatureInDegreeCelcius) = 0;
+ virtual void SetExtruderTargetTemperature(const LibMCDriver_Marlin_uint32 nExtruderID, const LibMCDriver_Marlin_double dTemperatureInDegreeCelcius, const bool bWaitForTemp) = 0;
+
+ /**
+ * IDriver_Marlin::SetFanSpeed - Turns on one of the fans and set its speed.
+ * @param[in] nFanID - ID of fan.
+ * @param[in] nSpeed - Fan speed [0..255]. 0=0%...255=100%
+ */
+ virtual void SetFanSpeed(const LibMCDriver_Marlin_uint32 nFanID, const LibMCDriver_Marlin_uint32 nSpeed) = 0;
/**
* IDriver_Marlin::SetPidParameters - Sets PID parameters.
@@ -366,10 +376,10 @@ class IDriver_Marlin : public virtual IDriver {
virtual void GetTargetPosition(LibMCDriver_Marlin_double & dX, LibMCDriver_Marlin_double & dY, LibMCDriver_Marlin_double & dZ) = 0;
/**
- * IDriver_Marlin::GetExtruderPosition - Returns the current extruder position.
+ * IDriver_Marlin::GetExtruderTargetPosition - Returns the target extruder position.
* @param[out] dE - E Value in mm
*/
- virtual void GetExtruderPosition(LibMCDriver_Marlin_double & dE) = 0;
+ virtual void GetExtruderTargetPosition(LibMCDriver_Marlin_double & dE) = 0;
/**
* IDriver_Marlin::GetHeatedBedTemperature - Returns the current and the target bed temperature.
@@ -416,9 +426,10 @@ class IDriver_Marlin : public virtual IDriver {
* IDriver_Marlin::MoveToXY - Moves to/by a certain position by a linear move. Takes the relative/absolute mode into account. Fails if it cannot execute a movement.
* @param[in] dX - X Value in mm
* @param[in] dY - Y Value in mm
+ * @param[in] dE - E Value in mm
* @param[in] dSpeed - Movement speed in mm/s
*/
- virtual void MoveToXY(const LibMCDriver_Marlin_double dX, const LibMCDriver_Marlin_double dY, const LibMCDriver_Marlin_double dSpeed) = 0;
+ virtual void MoveToXY(const LibMCDriver_Marlin_double dX, const LibMCDriver_Marlin_double dY, const LibMCDriver_Marlin_double dE, const LibMCDriver_Marlin_double dSpeed) = 0;
/**
* IDriver_Marlin::MoveFastToXY - Moves to/by a certain position by a fast move. Takes the relative/absolute mode into account. Fails if it cannot execute a movement.
@@ -431,9 +442,10 @@ class IDriver_Marlin : public virtual IDriver {
/**
* IDriver_Marlin::MoveToZ - Moves to/by a certain position by a linear move. Takes the relative/absolute mode into account. Fails if it cannot execute a movement.
* @param[in] dZ - Z Value in mm
+ * @param[in] dE - E Value in mm
* @param[in] dSpeed - Movement speed in mm/s
*/
- virtual void MoveToZ(const LibMCDriver_Marlin_double dZ, const LibMCDriver_Marlin_double dSpeed) = 0;
+ virtual void MoveToZ(const LibMCDriver_Marlin_double dZ, const LibMCDriver_Marlin_double dE, const LibMCDriver_Marlin_double dSpeed) = 0;
/**
* IDriver_Marlin::MoveFastToZ - Moves to/by a certain position by a fast move. Takes the relative/absolute mode into account. Fails if it cannot execute a movement.
diff --git a/Drivers/Marlin/Interfaces/libmcdriver_marlin_interfacewrapper.cpp b/Drivers/Marlin/Interfaces/libmcdriver_marlin_interfacewrapper.cpp
index 757eeae4..8df5c462 100644
--- a/Drivers/Marlin/Interfaces/libmcdriver_marlin_interfacewrapper.cpp
+++ b/Drivers/Marlin/Interfaces/libmcdriver_marlin_interfacewrapper.cpp
@@ -297,7 +297,7 @@ LibMCDriver_MarlinResult libmcdriver_marlin_driver_getheaderinformation(LibMCDri
/*************************************************************************************************************************
Class implementation for Driver_Marlin
**************************************************************************************************************************/
-LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_connect(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, const char * pCOMPort, LibMCDriver_Marlin_uint32 nBaudrate, LibMCDriver_Marlin_double dStatusUpdateInterval)
+LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_connect(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, const char * pCOMPort, LibMCDriver_Marlin_uint32 nBaudrate, LibMCDriver_Marlin_double dStatusUpdateInterval, LibMCDriver_Marlin_uint32 nConnectTimeout)
{
IBase* pIBaseClass = (IBase *)pDriver_Marlin;
@@ -309,7 +309,7 @@ LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_connect(LibMCDriver_Ma
if (!pIDriver_Marlin)
throw ELibMCDriver_MarlinInterfaceException(LIBMCDRIVER_MARLIN_ERROR_INVALIDCAST);
- pIDriver_Marlin->Connect(sCOMPort, nBaudrate, dStatusUpdateInterval);
+ pIDriver_Marlin->Connect(sCOMPort, nBaudrate, dStatusUpdateInterval, nConnectTimeout);
return LIBMCDRIVER_MARLIN_SUCCESS;
}
@@ -372,7 +372,7 @@ LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_setabsolutepositioning
}
}
-LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_setheatedbedtargettemperature(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_double dTemperatureInDegreeCelcius)
+LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_setheatedbedtargettemperature(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_double dTemperatureInDegreeCelcius, bool bWaitForTemp)
{
IBase* pIBaseClass = (IBase *)pDriver_Marlin;
@@ -381,7 +381,7 @@ LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_setheatedbedtargettemp
if (!pIDriver_Marlin)
throw ELibMCDriver_MarlinInterfaceException(LIBMCDRIVER_MARLIN_ERROR_INVALIDCAST);
- pIDriver_Marlin->SetHeatedBedTargetTemperature(dTemperatureInDegreeCelcius);
+ pIDriver_Marlin->SetHeatedBedTargetTemperature(dTemperatureInDegreeCelcius, bWaitForTemp);
return LIBMCDRIVER_MARLIN_SUCCESS;
}
@@ -396,7 +396,7 @@ LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_setheatedbedtargettemp
}
}
-LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_setextrudertargettemperature(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_uint32 nExtruderID, LibMCDriver_Marlin_double dTemperatureInDegreeCelcius)
+LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_setextrudertargettemperature(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_uint32 nExtruderID, LibMCDriver_Marlin_double dTemperatureInDegreeCelcius, bool bWaitForTemp)
{
IBase* pIBaseClass = (IBase *)pDriver_Marlin;
@@ -405,7 +405,31 @@ LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_setextrudertargettempe
if (!pIDriver_Marlin)
throw ELibMCDriver_MarlinInterfaceException(LIBMCDRIVER_MARLIN_ERROR_INVALIDCAST);
- pIDriver_Marlin->SetExtruderTargetTemperature(nExtruderID, dTemperatureInDegreeCelcius);
+ pIDriver_Marlin->SetExtruderTargetTemperature(nExtruderID, dTemperatureInDegreeCelcius, bWaitForTemp);
+
+ return LIBMCDRIVER_MARLIN_SUCCESS;
+ }
+ catch (ELibMCDriver_MarlinInterfaceException & Exception) {
+ return handleLibMCDriver_MarlinException(pIBaseClass, Exception);
+ }
+ catch (std::exception & StdException) {
+ return handleStdException(pIBaseClass, StdException);
+ }
+ catch (...) {
+ return handleUnhandledException(pIBaseClass);
+ }
+}
+
+LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_setfanspeed(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_uint32 nFanID, LibMCDriver_Marlin_uint32 nSpeed)
+{
+ IBase* pIBaseClass = (IBase *)pDriver_Marlin;
+
+ try {
+ IDriver_Marlin* pIDriver_Marlin = dynamic_cast(pIBaseClass);
+ if (!pIDriver_Marlin)
+ throw ELibMCDriver_MarlinInterfaceException(LIBMCDRIVER_MARLIN_ERROR_INVALIDCAST);
+
+ pIDriver_Marlin->SetFanSpeed(nFanID, nSpeed);
return LIBMCDRIVER_MARLIN_SUCCESS;
}
@@ -528,7 +552,7 @@ LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_gettargetposition(LibM
}
}
-LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_getextruderposition(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_double * pE)
+LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_getextrudertargetposition(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_double * pE)
{
IBase* pIBaseClass = (IBase *)pDriver_Marlin;
@@ -539,7 +563,7 @@ LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_getextruderposition(Li
if (!pIDriver_Marlin)
throw ELibMCDriver_MarlinInterfaceException(LIBMCDRIVER_MARLIN_ERROR_INVALIDCAST);
- pIDriver_Marlin->GetExtruderPosition(*pE);
+ pIDriver_Marlin->GetExtruderTargetPosition(*pE);
return LIBMCDRIVER_MARLIN_SUCCESS;
}
@@ -718,7 +742,7 @@ LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_ishomed(LibMCDriver_Ma
}
}
-LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_movetoxy(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_double dX, LibMCDriver_Marlin_double dY, LibMCDriver_Marlin_double dSpeed)
+LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_movetoxy(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_double dX, LibMCDriver_Marlin_double dY, LibMCDriver_Marlin_double dE, LibMCDriver_Marlin_double dSpeed)
{
IBase* pIBaseClass = (IBase *)pDriver_Marlin;
@@ -727,7 +751,7 @@ LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_movetoxy(LibMCDriver_M
if (!pIDriver_Marlin)
throw ELibMCDriver_MarlinInterfaceException(LIBMCDRIVER_MARLIN_ERROR_INVALIDCAST);
- pIDriver_Marlin->MoveToXY(dX, dY, dSpeed);
+ pIDriver_Marlin->MoveToXY(dX, dY, dE, dSpeed);
return LIBMCDRIVER_MARLIN_SUCCESS;
}
@@ -766,7 +790,7 @@ LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_movefasttoxy(LibMCDriv
}
}
-LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_movetoz(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_double dZ, LibMCDriver_Marlin_double dSpeed)
+LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_movetoz(LibMCDriver_Marlin_Driver_Marlin pDriver_Marlin, LibMCDriver_Marlin_double dZ, LibMCDriver_Marlin_double dE, LibMCDriver_Marlin_double dSpeed)
{
IBase* pIBaseClass = (IBase *)pDriver_Marlin;
@@ -775,7 +799,7 @@ LibMCDriver_MarlinResult libmcdriver_marlin_driver_marlin_movetoz(LibMCDriver_Ma
if (!pIDriver_Marlin)
throw ELibMCDriver_MarlinInterfaceException(LIBMCDRIVER_MARLIN_ERROR_INVALIDCAST);
- pIDriver_Marlin->MoveToZ(dZ, dSpeed);
+ pIDriver_Marlin->MoveToZ(dZ, dE, dSpeed);
return LIBMCDRIVER_MARLIN_SUCCESS;
}
@@ -871,6 +895,8 @@ LibMCDriver_MarlinResult LibMCDriver_Marlin::Impl::LibMCDriver_Marlin_GetProcAdd
*ppProcAddress = (void*) &libmcdriver_marlin_driver_marlin_setheatedbedtargettemperature;
if (sProcName == "libmcdriver_marlin_driver_marlin_setextrudertargettemperature")
*ppProcAddress = (void*) &libmcdriver_marlin_driver_marlin_setextrudertargettemperature;
+ if (sProcName == "libmcdriver_marlin_driver_marlin_setfanspeed")
+ *ppProcAddress = (void*) &libmcdriver_marlin_driver_marlin_setfanspeed;
if (sProcName == "libmcdriver_marlin_driver_marlin_setpidparameters")
*ppProcAddress = (void*) &libmcdriver_marlin_driver_marlin_setpidparameters;
if (sProcName == "libmcdriver_marlin_driver_marlin_updatestate")
@@ -879,8 +905,8 @@ LibMCDriver_MarlinResult LibMCDriver_Marlin::Impl::LibMCDriver_Marlin_GetProcAdd
*ppProcAddress = (void*) &libmcdriver_marlin_driver_marlin_getcurrentposition;
if (sProcName == "libmcdriver_marlin_driver_marlin_gettargetposition")
*ppProcAddress = (void*) &libmcdriver_marlin_driver_marlin_gettargetposition;
- if (sProcName == "libmcdriver_marlin_driver_marlin_getextruderposition")
- *ppProcAddress = (void*) &libmcdriver_marlin_driver_marlin_getextruderposition;
+ if (sProcName == "libmcdriver_marlin_driver_marlin_getextrudertargetposition")
+ *ppProcAddress = (void*) &libmcdriver_marlin_driver_marlin_getextrudertargetposition;
if (sProcName == "libmcdriver_marlin_driver_marlin_getheatedbedtemperature")
*ppProcAddress = (void*) &libmcdriver_marlin_driver_marlin_getheatedbedtemperature;
if (sProcName == "libmcdriver_marlin_driver_marlin_getextrudertemperature")
diff --git a/Plugins/Main/mcplugin_main.cpp b/Plugins/Main/mcplugin_main.cpp
index 394e601f..70710981 100644
--- a/Plugins/Main/mcplugin_main.cpp
+++ b/Plugins/Main/mcplugin_main.cpp
@@ -34,7 +34,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using namespace LibMCPlugin::Impl;
-#include "libmcdriver_camera_dynamic.hpp"
+//#include "libmcdriver_camera_dynamic.hpp"
#include "libmcenv_drivercast.hpp"
#ifdef _MSC_VER
@@ -45,8 +45,8 @@ using namespace LibMCPlugin::Impl;
/*************************************************************************************************************************
Import functionality for Driver into current plugin
**************************************************************************************************************************/
-typedef LibMCDriver_Camera::PDriver_RaspiCamera PDriver_RaspiCamera;
-typedef LibMCEnv::CDriverCast PDriverCast_RaspiCamera;
+//typedef LibMCDriver_Camera::PDriver_RaspiCamera PDriver_RaspiCamera;
+//typedef LibMCEnv::CDriverCast PDriverCast_RaspiCamera;
/*************************************************************************************************************************
Class definition of CMainData
@@ -54,14 +54,14 @@ typedef LibMCEnv::CDriverCast SetIntegerParameter("jobinfo", "layercount", nLayerCount);
pStateEnvironment->SetBoolParameter("jobinfo", "autostart", false);
pStateEnvironment->SetBoolParameter("jobinfo", "printinprogress", true);
+ pStateEnvironment->SetNextState("waitfortemperature");
+ }
+
+};
+
+
+/*************************************************************************************************************************
+ Class definition of CMainState_WaitForTemperature
+**************************************************************************************************************************/
+
+class CMainState_WaitForTemperature : public virtual CMainState {
+public:
+
+ CMainState_WaitForTemperature(const std::string& sStateName, PPluginData pPluginData)
+ : CMainState(getStateName(), sStateName, pPluginData)
+ {
+ }
+
+ static const std::string getStateName()
+ {
+ return "waitfortemperature";
+ }
+
+
+ void Execute(LibMCEnv::PStateEnvironment pStateEnvironment)
+ {
+ if (pStateEnvironment.get() == nullptr)
+ throw ELibMCPluginInterfaceException(LIBMCPLUGIN_ERROR_INVALIDPARAM);
+
+ pStateEnvironment->LogMessage("Wait for temperature...");
+
+ // TODO do something...
+
pStateEnvironment->SetNextState("extrudelayer");
}
@@ -355,20 +388,20 @@ class CMainState_NextLayer : public virtual CMainState {
auto nCurrentLayer = pStateEnvironment->GetIntegerParameter("jobinfo", "currentlayer");
auto nLayerCount = pStateEnvironment->GetIntegerParameter("jobinfo", "layercount");
- pStateEnvironment->LogMessage("Getting Camera Image");
- auto pCameraDriver = m_pPluginData->acquireCameraDriver(pStateEnvironment);
- auto pPNGImage = pCameraDriver->CapturePNGImage();
-
- std::vector Buffer;
- pPNGImage->GetRawData(Buffer);
+ //pStateEnvironment->LogMessage("Getting Camera Image");
+ //auto pCameraDriver = m_pPluginData->acquireCameraDriver(pStateEnvironment);
+ //auto pPNGImage = pCameraDriver->CapturePNGImage();
+ //
+ //std::vector Buffer;
+ //pPNGImage->GetRawData(Buffer);
auto pBuild = pStateEnvironment->GetBuildJob(sJobUUID);
- pBuild->AddBinaryData("image_layer_" + std::to_string(nCurrentLayer) + ".png", "image/png", Buffer);
+ //pBuild->AddBinaryData("image_layer_" + std::to_string(nCurrentLayer) + ".png", "image/png", Buffer);
if (nCurrentLayer < (nLayerCount - 1)) {
pStateEnvironment->LogMessage("Advancing to layer #" + std::to_string(nCurrentLayer + 1) + "...");
pStateEnvironment->SetIntegerParameter("jobinfo", "currentlayer", nCurrentLayer + 1);
- pStateEnvironment->SetNextState("extrudelayer");
+ pStateEnvironment->SetNextState("waitfortemperature");
}
else {
pStateEnvironment->LogMessage("Finishing process...");
@@ -450,6 +483,9 @@ IState * CStateFactory::CreateState(const std::string & sStateName)
if (createStateInstanceByName(sStateName, pStateInstance, m_pPluginData))
return pStateInstance;
+ if (createStateInstanceByName(sStateName, pStateInstance, m_pPluginData))
+ return pStateInstance;
+
throw ELibMCPluginInterfaceException(LIBMCPLUGIN_ERROR_INVALIDSTATENAME);
}
diff --git a/Plugins/Movement/mcplugin_movement.cpp b/Plugins/Movement/mcplugin_movement.cpp
index c70a07f3..7cc94655 100644
--- a/Plugins/Movement/mcplugin_movement.cpp
+++ b/Plugins/Movement/mcplugin_movement.cpp
@@ -173,16 +173,31 @@ class CMovementState_Init : public virtual CMovementState {
auto sCOMPort = pStateEnvironment->GetStringParameter ("comdata", "port");
auto nBaudRate = pStateEnvironment->GetIntegerParameter("comdata", "baudrate");
+ auto nConnectTimeout = pStateEnvironment->GetIntegerParameter("comdata", "connecttimeout");
auto dTimerInterval = pStateEnvironment->GetDoubleParameter("movementstate", "statusupdateinterval");
auto pDriver = m_pPluginData->acquireDriver(pStateEnvironment);
- pDriver->Connect(sCOMPort, (uint32_t) nBaudRate, dTimerInterval);
+ pDriver->Connect(sCOMPort, (uint32_t) nBaudRate, dTimerInterval, nConnectTimeout);
m_pPluginData->updateStateFromDriver(pDriver, pStateEnvironment, false);
if (!pDriver->IsHomed()) {
pStateEnvironment->SetNextState("homing");
}
else {
+ // TODO set temp, fan speed etc parameters??
+ //pDriver->SetFanSpeed(0, 126);
+ //pDriver->SetExtruderTargetTemperature(0, 190, false);
+ //pDriver->SetHeatedBedTargetTemperature(45, false);
+ // TODO lower temp for testing without extrusion
+ //pDriver->SetExtruderTargetTemperature(0, 25, false);
+ //pDriver->SetHeatedBedTargetTemperature(25, false);
+
+ //pDriver->SetExtruderTargetTemperature(0, 190, true);
+ //pDriver->SetHeatedBedTargetTemperature(45, true);
+ // TODO lower temp for testing without extrusion
+ //pDriver->SetExtruderTargetTemperature(0, 30, true);
+ //pDriver->SetHeatedBedTargetTemperature(30, true);
+
pStateEnvironment->SetNextState("idle");
}
@@ -323,7 +338,7 @@ class CMovementState_DoExtrudeLayer : public virtual CMovementState {
throw ELibMCPluginInterfaceException(LIBMCPLUGIN_ERROR_INVALIDPARAM);
bool bSucces = true;
std::stringstream sNoSuccessMsg;
-
+
double dStatusUpdateInterval = pStateEnvironment->GetDoubleParameter("movementstate", "statusupdateinterval");
auto pSignal = pStateEnvironment->RetrieveSignal("globalsignal_doextrudelayer");
@@ -337,24 +352,29 @@ class CMovementState_DoExtrudeLayer : public virtual CMovementState {
auto dLayerZ = pLayer->GetZValue();
double dZ = dLayerZ * dUnit;
- auto pDriver = m_pPluginData->acquireDriver(pStateEnvironment);
- auto nSegmentCount = pLayer->GetSegmentCount();
+ // TODO set speed values by reading data from toolptah... uncomment if data is available
+ //const double dSpeedMmPerSecond = pLayer->GetSegmentProfileTypedValue(LibMCEnv::eToolpathProfileValueType::Speed);
+ //const double dSpeedFastMmPerSecond = pLayer->GetSegmentProfileTypedValue(LibMCEnv::eToolpathProfileValueType::JumpSpeed);
+ //const double dExtrusionFactor = pLayer->GetSegmentProfileTypedValue(LibMCEnv::eToolpathProfileValueType::ExtrusionFactor);
+ const double dSpeedMmPerSecond = 20;
+ const double dSpeedFastMmPerSecond = 50;
+ const double dExtrusionFactor = 5.0;
+ double dE = 0.0;
- auto tStart = std::chrono::high_resolution_clock::now();
+ auto pDriver = m_pPluginData->acquireDriver(pStateEnvironment);
// do initial move to read z value/layer height
+ auto nSegmentCount = pLayer->GetSegmentCount();
+ auto tStart = std::chrono::high_resolution_clock::now();
if ((nSegmentCount > 0) && (dZ > 0)) {
bSucces = canExecuteMovement(pStateEnvironment, dStatusUpdateInterval, pDriver, nLayerTimeout, tStart);
if (bSucces) {
- // TODO check how to en/disable extrusion
- // TODO check how to set Speed/Feedrate
- pDriver->MoveToZ(dZ, 100.0);
+ pDriver->MoveFastToZ(dZ, dSpeedFastMmPerSecond);
m_pPluginData->updateStateFromDriver(pDriver, pStateEnvironment, true);
}
else {
sNoSuccessMsg << "Timeout while moving to layer height Z=" << dZ << " of layer " << nLayerIndex;
}
-
}
for (uint32_t nSegmentIndex = 0; nSegmentIndex < nSegmentCount; nSegmentIndex++) {
@@ -376,17 +396,17 @@ class CMovementState_DoExtrudeLayer : public virtual CMovementState {
// move fast to first hatch coord (first of a pair of coord)
bSucces = canExecuteMovement(pStateEnvironment, dStatusUpdateInterval, pDriver, nLayerTimeout, tStart);
if (bSucces) {
- // TODO check how to en/disable extrusion
- // TODO check how to set Speed/Feedrate
- pDriver->MoveFastToXY(PointData[i].m_Coordinates[0] * dUnit, PointData[i].m_Coordinates[1] * dUnit, 100.0);
+ pDriver->MoveFastToXY(PointData[i].m_Coordinates[0] * dUnit, PointData[i].m_Coordinates[1] * dUnit, dSpeedFastMmPerSecond);
m_pPluginData->updateStateFromDriver(pDriver, pStateEnvironment, true);
// move to second hatch coord with extrusion (second of a pair of coord)
bSucces = canExecuteMovement(pStateEnvironment, dStatusUpdateInterval, pDriver, nLayerTimeout, tStart);
if (bSucces) {
- // TODO check how to en/disable extrusion
- // TODO check how to set Speed/Feedrate
- pDriver->MoveToXY(PointData[i + 1].m_Coordinates[0] * dUnit, PointData[i + 1].m_Coordinates[1] * dUnit, 100.0);
+ auto dDistance = sqrt(
+ pow(PointData[i + 1].m_Coordinates[0] - PointData[i].m_Coordinates[0], 2) +
+ pow(PointData[i + 1].m_Coordinates[1] - PointData[i].m_Coordinates[1], 2)) * dUnit;
+ dE = dDistance * dExtrusionFactor;
+ pDriver->MoveToXY(PointData[i + 1].m_Coordinates[0] * dUnit, PointData[i + (int)1].m_Coordinates[1] * dUnit, dE, dSpeedMmPerSecond);
m_pPluginData->updateStateFromDriver(pDriver, pStateEnvironment, true);
}
else {
@@ -412,9 +432,7 @@ class CMovementState_DoExtrudeLayer : public virtual CMovementState {
// move fast to first point of loop
bSucces = canExecuteMovement(pStateEnvironment, dStatusUpdateInterval, pDriver, nLayerTimeout, tStart);
if (bSucces) {
- // TODO check how to en/disable extrusion
- // TODO check how to set Speed/Feedrate
- pDriver->MoveFastToXY(PointData[0].m_Coordinates[0] * dUnit, PointData[0].m_Coordinates[1] * dUnit, 100.0);
+ pDriver->MoveFastToXY(PointData[0].m_Coordinates[0] * dUnit, PointData[0].m_Coordinates[1] * dUnit, dSpeedFastMmPerSecond);
m_pPluginData->updateStateFromDriver(pDriver, pStateEnvironment, true);
@@ -422,9 +440,11 @@ class CMovementState_DoExtrudeLayer : public virtual CMovementState {
// move to rest of points of loop (with extrusion)
bSucces = canExecuteMovement(pStateEnvironment, dStatusUpdateInterval, pDriver, nLayerTimeout, tStart);
if (bSucces) {
- // TODO check how to en/disable extrusion
- // TODO check how to set Speed/Feedrate
- pDriver->MoveToXY(PointData[i].m_Coordinates[0] * dUnit, PointData[i].m_Coordinates[1] * dUnit, 100.0);
+ auto dDistance = sqrt(
+ pow(PointData[i].m_Coordinates[0] - PointData[i - 1].m_Coordinates[0], 2) +
+ pow(PointData[i].m_Coordinates[1] - PointData[i - 1].m_Coordinates[1], 2)) * dUnit;
+ dE = dDistance * dExtrusionFactor;
+ pDriver->MoveToXY(PointData[i].m_Coordinates[0] * dUnit, PointData[i].m_Coordinates[1] * dUnit, dE, dSpeedMmPerSecond);
m_pPluginData->updateStateFromDriver(pDriver, pStateEnvironment, true);
}
else {
@@ -437,9 +457,11 @@ class CMovementState_DoExtrudeLayer : public virtual CMovementState {
// move from last point in list to first point to close the of loop (with extrusion)
bSucces = canExecuteMovement(pStateEnvironment, dStatusUpdateInterval, pDriver, nLayerTimeout, tStart);
if (bSucces) {
- // TODO check how to en/disable extrusion
- // TODO check how to set Speed/Feedrate
- pDriver->MoveToXY(PointData[0].m_Coordinates[0] * dUnit, PointData[0].m_Coordinates[1] * dUnit, 100.0);
+ auto dDistance = sqrt(
+ pow(PointData[0].m_Coordinates[0] - PointData[nPointCount - 1].m_Coordinates[0], 2) +
+ pow(PointData[0].m_Coordinates[1] - PointData[nPointCount - 1].m_Coordinates[1], 2)) * dUnit;
+ dE = dDistance * dExtrusionFactor;
+ pDriver->MoveToXY(PointData[0].m_Coordinates[0] * dUnit, PointData[0].m_Coordinates[1] * dUnit, dE, dSpeedMmPerSecond);
m_pPluginData->updateStateFromDriver(pDriver, pStateEnvironment, true);
}
else {
@@ -455,9 +477,7 @@ class CMovementState_DoExtrudeLayer : public virtual CMovementState {
// move fast to first point of Polyline
bSucces = canExecuteMovement(pStateEnvironment, dStatusUpdateInterval, pDriver, nLayerTimeout, tStart);
if (bSucces) {
- // TODO check how to en/disable extrusion
- // TODO check how to set Speed/Feedrate
- pDriver->MoveFastToXY(PointData[0].m_Coordinates[0] * dUnit, PointData[0].m_Coordinates[1] * dUnit, 100.0);
+ pDriver->MoveFastToXY(PointData[0].m_Coordinates[0] * dUnit, PointData[0].m_Coordinates[1] * dUnit, dSpeedFastMmPerSecond);
m_pPluginData->updateStateFromDriver(pDriver, pStateEnvironment, true);
@@ -465,9 +485,11 @@ class CMovementState_DoExtrudeLayer : public virtual CMovementState {
// move to rest of points of polyline (with extrusion)
bSucces = canExecuteMovement(pStateEnvironment, dStatusUpdateInterval, pDriver, nLayerTimeout, tStart);
if (bSucces) {
- // TODO check how to en/disable extrusion
- // TODO check how to set Speed/Feedrate
- pDriver->MoveToXY(PointData[i].m_Coordinates[0] * dUnit, PointData[i].m_Coordinates[1] * dUnit, 100.0);
+ auto dDistance = sqrt(
+ pow(PointData[i].m_Coordinates[0] - PointData[i -1].m_Coordinates[0], 2) +
+ pow(PointData[i].m_Coordinates[1] - PointData[i - 1].m_Coordinates[1], 2)) * dUnit;
+ dE = dDistance * dExtrusionFactor;
+ pDriver->MoveToXY(PointData[i].m_Coordinates[0] * dUnit, PointData[i].m_Coordinates[1] * dUnit, dE, dSpeedMmPerSecond);
m_pPluginData->updateStateFromDriver(pDriver, pStateEnvironment, true);
}
@@ -531,6 +553,20 @@ class CMovementState_Homing : public virtual CMovementState {
auto pDriver = m_pPluginData->acquireDriver(pStateEnvironment);
pDriver->StartHoming();
+ // TODO set temp, fan speed etc parameters??
+ //pDriver->SetFanSpeed(0, 126);
+ //pDriver->SetExtruderTargetTemperature(0, 190, false);
+ //pDriver->SetHeatedBedTargetTemperature(45, false);
+ // TODO lower temp for testing without extrusion
+ //pDriver->SetExtruderTargetTemperature(0, 25, false);
+ //pDriver->SetHeatedBedTargetTemperature(25, false);
+
+ //pDriver->SetExtruderTargetTemperature(0, 190, true);
+ //pDriver->SetHeatedBedTargetTemperature(45, true);
+ // TODO lower temp for testing without extrusion
+ //pDriver->SetExtruderTargetTemperature(0, 30, true);
+ //pDriver->SetHeatedBedTargetTemperature(30, true);
+
pStateEnvironment->SetNextState("idle");
}
diff --git a/Plugins/PIDControl/mcplugin_pidcontrol.cpp b/Plugins/PIDControl/mcplugin_pidcontrol.cpp
index dd244e09..277a1441 100644
--- a/Plugins/PIDControl/mcplugin_pidcontrol.cpp
+++ b/Plugins/PIDControl/mcplugin_pidcontrol.cpp
@@ -149,7 +149,9 @@ class CPIDControlState_Idle : public virtual CPIDControlState {
//pSignalHandler->SignalHandled();
pStateEnvironment->LogMessage("PIDControl Active...");
- pStateEnvironment->SetNextState("controlling");
+ // TODO blocked while testing extrusion => do uncomment later pStateEnvironment->SetNextState("controlling");
+ pStateEnvironment->Sleep(2000);
+ pStateEnvironment->SetNextState("idle");
}
else {
diff --git a/Templates/libmcconfig.xml b/Templates/libmcconfig.xml
index 63dbcf4e..ede9a239 100644
--- a/Templates/libmcconfig.xml
+++ b/Templates/libmcconfig.xml
@@ -18,6 +18,13 @@
+
+
+
+
+
+
+
@@ -37,17 +44,21 @@
-
+
+
+
+
+
-
+
@@ -82,9 +93,16 @@
+
+
+
+
+
+
+
diff --git a/githash.txt b/githash.txt
new file mode 100644
index 00000000..38cd0f8d
--- /dev/null
+++ b/githash.txt
@@ -0,0 +1 @@
+924f8fa