From f0b7da252b1e9b0e8111399a8a74f22801c1f477 Mon Sep 17 00:00:00 2001 From: Adrian Bowyer Date: Fri, 29 Nov 2013 10:55:43 +0000 Subject: [PATCH] M561 reset bed transform to identity added. --- Configuration.h | 4 ++-- GCodes.cpp | 8 ++++++++ Move.cpp | 4 +++- Move.h | 9 +++++++-- Platform.h | 2 +- Release/RepRapFirmware.bin | Bin 166220 -> 166204 bytes SD-image/sys/config.g | 4 ++-- 7 files changed, 23 insertions(+), 8 deletions(-) diff --git a/Configuration.h b/Configuration.h index 70e7fda..f5f6d28 100644 --- a/Configuration.h +++ b/Configuration.h @@ -24,8 +24,8 @@ Licence: GPL #define CONFIGURATION_H #define NAME "RepRapFirmware" -#define VERSION "0.25" -#define DATE "2013-11-28" +#define VERSION "0.26" +#define DATE "2013-11-29" #define LAST_AUTHOR "reprappro.com" // Other firmware that we might switch to be compatible with. diff --git a/GCodes.cpp b/GCodes.cpp index 5ffde15..3097ec1 100644 --- a/GCodes.cpp +++ b/GCodes.cpp @@ -519,6 +519,7 @@ bool GCodes::DoHome() if(DoCannedCycleMove(true)) { homeX = false; + homeAxisFinalMove = false; return NoHome(); } } @@ -552,6 +553,7 @@ bool GCodes::DoHome() if(DoCannedCycleMove(true)) { homeY = false; + homeAxisFinalMove = false; return NoHome(); } } @@ -584,6 +586,7 @@ bool GCodes::DoHome() checkEndStops = false; moveAvailable = false; + homeAxisFinalMove = false; return true; } @@ -1182,6 +1185,7 @@ bool GCodes::ActOnGcode(GCodeBuffer *gb) case 28: // Home if(NoHome()) { + homeAxisFinalMove = false; homeX = gb->Seen(gCodeLetters[X_AXIS]); homeY = gb->Seen(gCodeLetters[Y_AXIS]); homeZ = gb->Seen(gCodeLetters[Z_AXIS]); @@ -1561,6 +1565,10 @@ bool GCodes::ActOnGcode(GCodeBuffer *gb) snprintf(reply, STRING_LENGTH, "Writing to file: %s", str); break; + case 561: + reprap.GetMove()->SetIdentityTransform(); + break; + case 906: // Set Motor currents for(uint8_t i = 0; i < DRIVES; i++) { diff --git a/Move.cpp b/Move.cpp index ab3eec7..fd14e73 100644 --- a/Move.cpp +++ b/Move.cpp @@ -258,9 +258,11 @@ void Move::Spin() platform->ClassReport("Move", longWait); } +// These are the actual numbers we want in the positions, so don't transform them. + void Move::SetPositions(float move[]) { - Transform(move); + //Transform(move); for(uint8_t drive = 0; drive < DRIVES; drive++) lastMove->SetDriveCoordinateAndZeroEndSpeed(move[drive], drive); lastMove->SetFeedRate(move[DRIVES]); diff --git a/Move.h b/Move.h index dee4453..97c246c 100644 --- a/Move.h +++ b/Move.h @@ -159,6 +159,7 @@ class Move void HitLowStop(int8_t drive, LookAhead* la, DDA* hitDDA); void HitHighStop(int8_t drive, LookAhead* la, DDA* hitDDA); void SetPositions(float move[]); + void SetLiveCoordinates(float coords[]); void SetXBedProbePoint(int index, float x); void SetYBedProbePoint(int index, float y); void SetZBedProbePoint(int index, float z); @@ -174,8 +175,8 @@ class Move void InverseTransform(float move[]); void Diagnostics(); float ComputeCurrentCoordinate(int8_t drive, LookAhead* la, DDA* runningDDA); - void SetLiveCoordinates(float coords[]); + friend class DDA; // protected: @@ -388,11 +389,15 @@ inline void Move::LiveCoordinates(float m[]) InverseTransform(m); } + +// These are the actual numbers that we want to be the coordinates, so +// don't transform them. + inline void Move::SetLiveCoordinates(float coords[]) { for(int8_t drive = 0; drive <= DRIVES; drive++) liveCoordinates[drive] = coords[drive]; - Transform(liveCoordinates); + //Transform(liveCoordinates); } // To wait until all the current moves in the buffers are diff --git a/Platform.h b/Platform.h index de1d9e4..376b903 100644 --- a/Platform.h +++ b/Platform.h @@ -125,7 +125,7 @@ Licence: GPL #define STANDBY_TEMPERATURES {ABS_ZERO, ABS_ZERO} // We specify one for the bed, though it's not needed #define ACTIVE_TEMPERATURES {ABS_ZERO, ABS_ZERO} #define COOLING_FAN_PIN 34 -#define HEAT_ON 1 // 0 for inverted heater (eg Duet v0.6) +#define HEAT_ON 0 // 0 for inverted heater (eg Duet v0.6) #define AD_RANGE 1023.0//16383 // The A->D converter that measures temperatures gives an int this big as its max value diff --git a/Release/RepRapFirmware.bin b/Release/RepRapFirmware.bin index 290e4fc95d42b50a256f6937a94bf82f60716690..0988559c4ad808b4fda3b0d347fef9973b806dfb 100755 GIT binary patch delta 18482 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 delta 18488 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 z