This repository has been archived on 2025-02-01. You can view files and clone it, but cannot push or open issues or pull requests.
reprapfirmware-dc42/GCodes.h

121 lines
2.7 KiB
C++

/****************************************************************************************************
RepRapFirmware - G Codes
This class interprets G Codes from one or more sources, and calls the functions in Move, Heat etc
that drive the machine to do what the G Codes command.
-----------------------------------------------------------------------------------------------------
Version 0.1
13 February 2013
Adrian Bowyer
RepRap Professional Ltd
http://reprappro.com
Licence: GPL
****************************************************************************************************/
#ifndef GCODES_H
#define GCODES_H
// Small class to hold an individual GCode
class GCodeBuffer
{
public:
GCodeBuffer(Platform* p);
void Init();
boolean Put(char c);
boolean Seen(char c);
float GetFValue();
int GetIValue();
long GetLValue();
char* Buffer();
private:
Platform* platform;
char gcodeBuffer[GCODE_LENGTH];
int gcodePointer;
int readPointer;
boolean inComment;
};
//****************************************************************************************************
// The GCode interpreter
class GCodes
{
public:
GCodes(Platform* p, Webserver* w);
void Spin();
void Init();
void Exit();
boolean ReadMove(float* m, boolean& ce);
boolean ReadHeat(float* h);
void QueueFileToPrint(char* fileName);
boolean PrintingAFile();
private:
boolean ActOnGcode(GCodeBuffer* gb);
boolean SetUpMove(GCodeBuffer* gb);
boolean DoDwell(GCodeBuffer *gb);
boolean DoHome();
boolean NoHome();
Platform* platform;
boolean active;
Webserver* webserver;
unsigned long dwellTime;
boolean dwellWaiting;
GCodeBuffer* webGCode;
GCodeBuffer* fileGCode;
boolean webGCodeFinished;
boolean fileGCodeFinished;
boolean moveAvailable;
boolean heatAvailable;
float moveBuffer[DRIVES+1]; // Last is feedrate
boolean checkEndStops;
boolean drivesRelative; // All except X, Y and Z
boolean axesRelative; // X, Y and Z
char gCodeLetters[DRIVES + 1]; // Extra is for F
float lastPos[DRIVES - AXES]; // Just needed for relative moves.
float distanceScale;
int fileBeingPrinted;
int fileToPrint;
boolean homeX;
boolean homeY;
boolean homeZ;
};
//*****************************************************************************************************
// Get an Int after a G Code letter
inline int GCodeBuffer::GetIValue()
{
return (int)GetLValue();
}
inline char* GCodeBuffer::Buffer()
{
return gcodeBuffer;
}
inline boolean GCodes::PrintingAFile()
{
return fileBeingPrinted >= 0;
}
inline boolean GCodes::NoHome()
{
return !(homeX || homeY || homeZ);
}
#endif