Merge remote-tracking branch 'upstream/edge' into upstream-master
[clinton/Smoothieware.git] / src / modules / communication / utils / Gcode.h
CommitLineData
df27a6a3 1/*
cd011f58
AW
2 This file is part of Smoothie (http://smoothieware.org/). The motion control part is heavily based on Grbl (https://github.com/simen/grbl).
3 Smoothie is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
4 Smoothie is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
df27a6a3 5 You should have received a copy of the GNU General Public License along with Smoothie. If not, see <http://www.gnu.org/licenses/>.
cd011f58
AW
6*/
7
8
4cff3ded
AW
9#ifndef GCODE_H
10#define GCODE_H
11#include <string>
7d678d16
JM
12#include <map>
13
4cff3ded 14using std::string;
4cff3ded 15
fc7b9a7b
JM
16class StreamOutput;
17
18// Object to represent a Gcode command
4cff3ded
AW
19class Gcode {
20 public:
aae5a789 21 Gcode(const string&, StreamOutput*, bool strip=true);
fc7b9a7b 22 Gcode(const Gcode& to_copy);
e55e3062 23 Gcode& operator= (const Gcode& to_copy);
8090190d
JM
24 ~Gcode();
25
26 const char* get_command() const { return command; }
27 bool has_letter ( char letter ) const;
b9b1bb25
JM
28 float get_value ( char letter, char **ptr= nullptr ) const;
29 int get_int ( char letter, char **ptr= nullptr ) const;
230079d4 30 uint32_t get_uint ( char letter, char **ptr= nullptr ) const;
8090190d 31 int get_num_args() const;
7d678d16 32 std::map<char,float> get_args() const;
df16e9b0 33 std::map<char,int> get_args_int() const;
b9b1bb25 34 void strip_parameters();
8090190d
JM
35
36 // FIXME these should be private
e6b5ae25
AW
37 unsigned int m;
38 unsigned int g;
8090190d 39 float millimeters_of_travel;
e6b5ae25 40
8090190d
JM
41 struct {
42 bool add_nl:1;
43 bool has_m:1;
44 bool has_g:1;
7d678d16 45 bool stripped:1;
6f648cda 46 uint8_t subcode:3;
8090190d 47 };
ac9f9b7a 48
8090190d 49 StreamOutput* stream;
93284f6f 50 string txt_after_ok;
702023f3 51
8090190d 52 private:
aae5a789 53 void prepare_cached_values(bool strip=true);
b9b1bb25 54 char *command;
4cff3ded
AW
55};
56#endif