Welcome to mirror list, hosted at ThFree Co, Russian Federation.

GCodes.h - github.com/Duet3D/RepRapFirmware.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: fd1913dcaca7044ae368351d6123a96fb0fdcb4f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/****************************************************************************************************

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

#define STACK 5


// Small class to hold an individual GCode

class GCodeBuffer
{
  public:
    GCodeBuffer(Platform* p, char* id);
    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];
    char* identity;
    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 AllMovesAreFinishedAndMoveBufferIsLoaded();
    boolean ActOnGcode(GCodeBuffer* gb);
    boolean SetUpMove(GCodeBuffer* gb);
    boolean DoDwell(GCodeBuffer *gb);
    boolean DoHome();
    boolean NoHome();
    boolean Push();
    boolean Pop();
    Platform* platform;
    boolean active;
    Webserver* webserver;
    float 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
    boolean drivesRelativeStack[STACK];
    boolean axesRelativeStack[STACK];
    float feedrateStack[STACK];
    int8_t stackPointer;
    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;
    boolean homeXQueued;
    boolean homeYQueued;
    boolean homeZQueued;
};

//*****************************************************************************************************

// 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