From 238fefcb006bb866687b1adb2d93bce12fa595eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Br=C3=A1zio?= Date: Tue, 19 Jul 2016 14:30:44 +0100 Subject: [PATCH 1/2] Updates Stopwatch class to use internal state enum --- Marlin/stopwatch.cpp | 12 ++++++------ Marlin/stopwatch.h | 14 +++++++------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Marlin/stopwatch.cpp b/Marlin/stopwatch.cpp index 042dbfc08..ef701a11b 100644 --- a/Marlin/stopwatch.cpp +++ b/Marlin/stopwatch.cpp @@ -33,7 +33,7 @@ bool Stopwatch::stop() { #endif if (this->isRunning() || this->isPaused()) { - this->state = STOPWATCH_STOPPED; + this->state = STOPPED; this->stopTimestamp = millis(); return true; } @@ -46,7 +46,7 @@ bool Stopwatch::pause() { #endif if (this->isRunning()) { - this->state = STOPWATCH_PAUSED; + this->state = PAUSED; this->stopTimestamp = millis(); return true; } @@ -62,7 +62,7 @@ bool Stopwatch::start() { if (this->isPaused()) this->accumulator = this->duration(); else this->reset(); - this->state = STOPWATCH_RUNNING; + this->state = RUNNING; this->startTimestamp = millis(); return true; } @@ -74,18 +74,18 @@ void Stopwatch::reset() { Stopwatch::debug(PSTR("reset")); #endif - this->state = STOPWATCH_STOPPED; + this->state = STOPPED; this->startTimestamp = 0; this->stopTimestamp = 0; this->accumulator = 0; } bool Stopwatch::isRunning() { - return (this->state == STOPWATCH_RUNNING) ? true : false; + return (this->state == RUNNING) ? true : false; } bool Stopwatch::isPaused() { - return (this->state == STOPWATCH_PAUSED) ? true : false; + return (this->state == PAUSED) ? true : false; } millis_t Stopwatch::duration() { diff --git a/Marlin/stopwatch.h b/Marlin/stopwatch.h index 173b5efb4..709482884 100644 --- a/Marlin/stopwatch.h +++ b/Marlin/stopwatch.h @@ -28,12 +28,6 @@ // Print debug messages with M111 S2 (Uses 156 bytes of PROGMEM) //#define DEBUG_STOPWATCH -enum StopwatchState { - STOPWATCH_STOPPED, - STOPWATCH_RUNNING, - STOPWATCH_PAUSED -}; - /** * @brief Stopwatch class * @details This class acts as a timer proving stopwatch functionality including @@ -41,7 +35,13 @@ enum StopwatchState { */ class Stopwatch { private: - StopwatchState state; + enum State { + STOPPED, + RUNNING, + PAUSED + }; + + Stopwatch::State state; millis_t accumulator; millis_t startTimestamp; millis_t stopTimestamp; From 3ebad4e020a4f49f422a41d5504aafc8b0fac772 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Br=C3=A1zio?= Date: Tue, 19 Jul 2016 14:31:09 +0100 Subject: [PATCH 2/2] Moves all global enums to a central file --- Marlin/Marlin.h | 31 +----- Marlin/MarlinSerial.cpp | 15 --- Marlin/Marlin_main.cpp | 28 ++---- Marlin/cardreader.h | 2 +- Marlin/endstops.h | 4 +- Marlin/enum.h | 190 +++++++++++++++++++++++++++++++++++++ Marlin/mesh_bed_leveling.h | 3 - Marlin/temperature.cpp | 19 ---- Marlin/ultralcd.cpp | 16 +--- Marlin/ultralcd.h | 10 -- 10 files changed, 206 insertions(+), 112 deletions(-) create mode 100644 Marlin/enum.h diff --git a/Marlin/Marlin.h b/Marlin/Marlin.h index a2143ca2b..c2c277ad9 100644 --- a/Marlin/Marlin.h +++ b/Marlin/Marlin.h @@ -50,6 +50,8 @@ #include "Arduino.h" +#include "enum.h" + typedef unsigned long millis_t; #ifdef USBCON @@ -230,20 +232,8 @@ void manage_inactivity(bool ignore_stepper_queue = false); * The axis order in all axis related arrays is X, Y, Z, E */ #define NUM_AXIS 4 - -/** - * Axis indices as enumerated constants - * - * A_AXIS and B_AXIS are used by COREXY printers - * X_HEAD and Y_HEAD is used for systems that don't have a 1:1 relationship between X_AXIS and X Head movement, like CoreXY bots. - */ -enum AxisEnum {NO_AXIS = -1, X_AXIS = 0, A_AXIS = 0, Y_AXIS = 1, B_AXIS = 1, Z_AXIS = 2, C_AXIS = 2, E_AXIS = 3, X_HEAD = 4, Y_HEAD = 5, Z_HEAD = 5}; - #define _AXIS(AXIS) AXIS ##_AXIS -typedef enum { LINEARUNIT_MM = 0, LINEARUNIT_INCH = 1 } LinearUnit; -typedef enum { TEMPUNIT_C = 0, TEMPUNIT_K = 1, TEMPUNIT_F = 2 } TempUnit; - void enable_all_steppers(); void disable_all_steppers(); @@ -259,18 +249,6 @@ void quickstop_stepper(); void handle_filament_runout(); #endif -/** - * Debug flags - not yet widely applied - */ -enum DebugFlags { - DEBUG_NONE = 0, - DEBUG_ECHO = _BV(0), ///< Echo commands in order as they are processed - DEBUG_INFO = _BV(1), ///< Print messages for code that has debug output - DEBUG_ERRORS = _BV(2), ///< Not implemented - DEBUG_DRYRUN = _BV(3), ///< Ignore temperature setting and E movement commands - DEBUG_COMMUNICATION = _BV(4), ///< Not implemented - DEBUG_LEVELING = _BV(5) ///< Print detailed output for homing and leveling -}; extern uint8_t marlin_debug_flags; #define DEBUGGING(F) (marlin_debug_flags & (DEBUG_## F)) @@ -380,11 +358,6 @@ float code_value_temp_diff(); #endif #if ENABLED(FILAMENT_CHANGE_FEATURE) - enum FilamentChangeMenuResponse { - FILAMENT_CHANGE_RESPONSE_WAIT_FOR, - FILAMENT_CHANGE_RESPONSE_EXTRUDE_MORE, - FILAMENT_CHANGE_RESPONSE_RESUME_PRINT - }; extern FilamentChangeMenuResponse filament_change_menu_response; #endif diff --git a/Marlin/MarlinSerial.cpp b/Marlin/MarlinSerial.cpp index d0921f470..d2f5623cb 100644 --- a/Marlin/MarlinSerial.cpp +++ b/Marlin/MarlinSerial.cpp @@ -455,21 +455,6 @@ MarlinSerial customizedSerial; FORCE_INLINE void emergency_parser(unsigned char c) { - enum e_parser_state { - state_RESET, - state_N, - state_M, - state_M1, - state_M10, - state_M108, - state_M11, - state_M112, - state_M4, - state_M41, - state_M410, - state_IGNORE // to '\n' - }; - static e_parser_state state = state_RESET; switch (state) { diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp index a4fbec095..df17ca6e6 100644 --- a/Marlin/Marlin_main.cpp +++ b/Marlin/Marlin_main.cpp @@ -535,17 +535,6 @@ static bool send_ok[BUFSIZE]; #endif #if ENABLED(HOST_KEEPALIVE_FEATURE) - - // States for managing Marlin and host communication - // Marlin sends messages if blocked or busy - enum MarlinBusyState { - NOT_BUSY, // Not in a handler - IN_HANDLER, // Processing a GCode - IN_PROCESS, // Known to be blocking command input (as in G29) - PAUSED_FOR_USER, // Blocking pending any input - PAUSED_FOR_INPUT // Blocking pending text input (concept) - }; - static MarlinBusyState busy_state = NOT_BUSY; static millis_t next_busy_signal_ms = 0; uint8_t host_keepalive_interval = DEFAULT_KEEPALIVE_INTERVAL; @@ -3213,9 +3202,6 @@ inline void gcode_G28() { #endif #if ENABLED(MESH_BED_LEVELING) - - enum MeshLevelingState { MeshReport, MeshStart, MeshNext, MeshSet, MeshSetZOffset, MeshReset }; - inline void _mbl_goto_xy(float x, float y) { float old_feedrate_mm_m = feedrate_mm_m; feedrate_mm_m = homing_feedrate_mm_m[X_AXIS]; @@ -6825,7 +6811,7 @@ inline void gcode_T(uint8_t tmp_extruder) { // <0 if the new nozzle is higher, >0 if lower. A bigger raise when lower. float z_diff = hotend_offset[Z_AXIS][active_extruder] - hotend_offset[Z_AXIS][tmp_extruder], z_raise = 0.3 + (z_diff > 0.0 ? z_diff : 0.0); - + // Always raise by some amount planner.buffer_line( current_position[X_AXIS], @@ -6836,10 +6822,10 @@ inline void gcode_T(uint8_t tmp_extruder) { active_extruder ); stepper.synchronize(); - + move_extruder_servo(active_extruder); delay(500); - + // Move back down, if needed if (z_raise != z_diff) { planner.buffer_line( @@ -6853,7 +6839,7 @@ inline void gcode_T(uint8_t tmp_extruder) { stepper.synchronize(); } #endif - + /** * Set current_position to the position of the new nozzle. * Offsets are based on linear distance, so we need to get @@ -6906,7 +6892,7 @@ inline void gcode_T(uint8_t tmp_extruder) { current_position[Z_AXIS] += offset_vec.z; #else // !AUTO_BED_LEVELING_FEATURE - + float xydiff[2] = { hotend_offset[X_AXIS][tmp_extruder] - hotend_offset[X_AXIS][active_extruder], hotend_offset[Y_AXIS][tmp_extruder] - hotend_offset[Y_AXIS][active_extruder] @@ -6930,7 +6916,7 @@ inline void gcode_T(uint8_t tmp_extruder) { } #endif // MESH_BED_LEVELING - + #endif // !AUTO_BED_LEVELING_FEATURE #if ENABLED(DEBUG_LEVELING_FEATURE) @@ -6993,7 +6979,7 @@ inline void gcode_T(uint8_t tmp_extruder) { SERIAL_ECHOLNPGM("<<< gcode_T"); } #endif - + SERIAL_ECHO_START; SERIAL_ECHOPGM(MSG_ACTIVE_EXTRUDER); SERIAL_PROTOCOLLN((int)active_extruder); diff --git a/Marlin/cardreader.h b/Marlin/cardreader.h index 78280fc8d..31b82386c 100644 --- a/Marlin/cardreader.h +++ b/Marlin/cardreader.h @@ -28,7 +28,7 @@ #define MAX_DIR_DEPTH 10 // Maximum folder depth #include "SdFile.h" -enum LsAction { LS_SerialPrint, LS_Count, LS_GetFilename }; +#include "enum.h" class CardReader { public: diff --git a/Marlin/endstops.h b/Marlin/endstops.h index e5d541cf1..22c2468b8 100644 --- a/Marlin/endstops.h +++ b/Marlin/endstops.h @@ -27,7 +27,7 @@ #ifndef ENDSTOPS_H #define ENDSTOPS_H -enum EndstopEnum {X_MIN = 0, Y_MIN = 1, Z_MIN = 2, Z_MIN_PROBE = 3, X_MAX = 4, Y_MAX = 5, Z_MAX = 6, Z2_MIN = 7, Z2_MAX = 8}; +#include "enum.h" class Endstops { @@ -42,7 +42,7 @@ class Endstops { static byte #endif current_endstop_bits, old_endstop_bits; - + Endstops() {}; /** diff --git a/Marlin/enum.h b/Marlin/enum.h new file mode 100644 index 000000000..fe369c23f --- /dev/null +++ b/Marlin/enum.h @@ -0,0 +1,190 @@ +/** + * Marlin 3D Printer Firmware + * Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin] + * + * Based on Sprinter and grbl. + * Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm + * + * This program 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. + * + * This program 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. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +#ifndef __ENUM_H__ +#define __ENUM_H__ + +/** + * Axis indices as enumerated constants + * + * Special axis: + * - A_AXIS and B_AXIS are used by COREXY printers + * - X_HEAD and Y_HEAD is used for systems that don't have a 1:1 relationship + * between X_AXIS and X Head movement, like CoreXY bots + */ +enum AxisEnum { + NO_AXIS = -1, + X_AXIS = 0, + A_AXIS = 0, + Y_AXIS = 1, + B_AXIS = 1, + Z_AXIS = 2, + C_AXIS = 2, + E_AXIS = 3, + X_HEAD = 4, + Y_HEAD = 5, + Z_HEAD = 5 +}; + +typedef enum { + LINEARUNIT_MM, + LINEARUNIT_INCH +} LinearUnit; + +typedef enum { + TEMPUNIT_C, + TEMPUNIT_K, + TEMPUNIT_F +} TempUnit; + +/** + * Debug flags + * Not yet widely applied + */ +enum DebugFlags { + DEBUG_NONE = 0, + DEBUG_ECHO = _BV(0), ///< Echo commands in order as they are processed + DEBUG_INFO = _BV(1), ///< Print messages for code that has debug output + DEBUG_ERRORS = _BV(2), ///< Not implemented + DEBUG_DRYRUN = _BV(3), ///< Ignore temperature setting and E movement commands + DEBUG_COMMUNICATION = _BV(4), ///< Not implemented + DEBUG_LEVELING = _BV(5) ///< Print detailed output for homing and leveling +}; + +enum EndstopEnum { + X_MIN, + Y_MIN, + Z_MIN, + Z_MIN_PROBE, + X_MAX, + Y_MAX, + Z_MAX, + Z2_MIN, + Z2_MAX +}; + +/** + * Temperature + * Stages in the ISR loop + */ +enum TempState { + PrepareTemp_0, + MeasureTemp_0, + PrepareTemp_BED, + MeasureTemp_BED, + PrepareTemp_1, + MeasureTemp_1, + PrepareTemp_2, + MeasureTemp_2, + PrepareTemp_3, + MeasureTemp_3, + Prepare_FILWIDTH, + Measure_FILWIDTH, + StartupDelay // Startup, delay initial temp reading a tiny bit so the hardware can settle +}; + +#if ENABLED(EMERGENCY_PARSER) + enum e_parser_state { + state_RESET, + state_N, + state_M, + state_M1, + state_M10, + state_M108, + state_M11, + state_M112, + state_M4, + state_M41, + state_M410, + state_IGNORE // to '\n' + }; +#endif + +#if ENABLED(FILAMENT_CHANGE_FEATURE) + enum FilamentChangeMenuResponse { + FILAMENT_CHANGE_RESPONSE_WAIT_FOR, + FILAMENT_CHANGE_RESPONSE_EXTRUDE_MORE, + FILAMENT_CHANGE_RESPONSE_RESUME_PRINT + }; + + #if ENABLED(ULTIPANEL) + enum FilamentChangeMessage { + FILAMENT_CHANGE_MESSAGE_INIT, + FILAMENT_CHANGE_MESSAGE_UNLOAD, + FILAMENT_CHANGE_MESSAGE_INSERT, + FILAMENT_CHANGE_MESSAGE_LOAD, + FILAMENT_CHANGE_MESSAGE_EXTRUDE, + FILAMENT_CHANGE_MESSAGE_OPTION, + FILAMENT_CHANGE_MESSAGE_RESUME, + FILAMENT_CHANGE_MESSAGE_STATUS + }; + #endif +#endif + +/** + * States for managing Marlin and host communication + * Marlin sends messages if blocked or busy + */ +#if ENABLED(HOST_KEEPALIVE_FEATURE) + enum MarlinBusyState { + NOT_BUSY, // Not in a handler + IN_HANDLER, // Processing a GCode + IN_PROCESS, // Known to be blocking command input (as in G29) + PAUSED_FOR_USER, // Blocking pending any input + PAUSED_FOR_INPUT // Blocking pending text input (concept) + }; +#endif + +#if ENABLED(MESH_BED_LEVELING) + enum MeshLevelingState { + MeshReport, + MeshStart, + MeshNext, + MeshSet, + MeshSetZOffset, + MeshReset + }; + + enum MBLStatus { + MBL_STATUS_NONE = 0, + MBL_STATUS_HAS_MESH_BIT = 0, + MBL_STATUS_ACTIVE_BIT = 1 + }; +#endif + +/** + * SD Card + */ +enum LsAction { LS_SerialPrint, LS_Count, LS_GetFilename }; + +/** + * Ultra LCD + */ +enum LCDViewAction { + LCDVIEW_NONE, + LCDVIEW_REDRAW_NOW, + LCDVIEW_CALL_REDRAW_NEXT, + LCDVIEW_CLEAR_CALL_REDRAW, + LCDVIEW_CALL_NO_REDRAW +}; + +#endif // __ENUM_H__ diff --git a/Marlin/mesh_bed_leveling.h b/Marlin/mesh_bed_leveling.h index 3aa2e4ace..eb668e1c8 100644 --- a/Marlin/mesh_bed_leveling.h +++ b/Marlin/mesh_bed_leveling.h @@ -23,9 +23,6 @@ #include "Marlin.h" #if ENABLED(MESH_BED_LEVELING) - - enum MBLStatus { MBL_STATUS_NONE = 0, MBL_STATUS_HAS_MESH_BIT = 0, MBL_STATUS_ACTIVE_BIT = 1 }; - #define MESH_X_DIST ((MESH_MAX_X - (MESH_MIN_X))/(MESH_NUM_X_POINTS - 1)) #define MESH_Y_DIST ((MESH_MAX_Y - (MESH_MIN_Y))/(MESH_NUM_Y_POINTS - 1)) diff --git a/Marlin/temperature.cpp b/Marlin/temperature.cpp index beb4f63e6..db2805285 100644 --- a/Marlin/temperature.cpp +++ b/Marlin/temperature.cpp @@ -1342,25 +1342,6 @@ void Temperature::disable_all_heaters() { #endif //HEATER_0_USES_MAX6675 -/** - * Stages in the ISR loop - */ -enum TempState { - PrepareTemp_0, - MeasureTemp_0, - PrepareTemp_BED, - MeasureTemp_BED, - PrepareTemp_1, - MeasureTemp_1, - PrepareTemp_2, - MeasureTemp_2, - PrepareTemp_3, - MeasureTemp_3, - Prepare_FILWIDTH, - Measure_FILWIDTH, - StartupDelay // Startup, delay initial temp reading a tiny bit so the hardware can settle -}; - /** * Get raw temperatures */ diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp index f96d74c91..fbb50c362 100755 --- a/Marlin/ultralcd.cpp +++ b/Marlin/ultralcd.cpp @@ -54,14 +54,6 @@ static void lcd_status_screen(); millis_t next_lcd_update_ms; -enum LCDViewAction { - LCDVIEW_NONE, - LCDVIEW_REDRAW_NOW, - LCDVIEW_CALL_REDRAW_NEXT, - LCDVIEW_CLEAR_CALL_REDRAW, - LCDVIEW_CALL_NO_REDRAW -}; - uint8_t lcdDrawUpdate = LCDVIEW_CLEAR_CALL_REDRAW; // Set when the LCD needs to draw, decrements after every draw. Set to 2 in LCD routines so the LCD gets at least 1 full redraw (first redraw is partial) #if ENABLED(ULTIPANEL) @@ -133,7 +125,7 @@ uint8_t lcdDrawUpdate = LCDVIEW_CLEAR_CALL_REDRAW; // Set when the LCD needs to static void lcd_filament_change_load_message(); static void lcd_filament_change_extrude_message(); static void lcd_filament_change_resume_message(); - #endif + #endif #if HAS_LCD_CONTRAST static void lcd_set_contrast(); @@ -301,7 +293,7 @@ uint8_t lcdDrawUpdate = LCDVIEW_CLEAR_CALL_REDRAW; // Set when the LCD needs to * Scroll as-needed to keep the selected line in view. * * At this point _thisItemNr equals the total number of items. - * + * */ // Simple-scroll by using encoderLine as encoderTopLine @@ -2207,7 +2199,7 @@ void kill_screen(const char* lcd_msg) { #endif END_SCREEN(); } - + void lcd_filament_change_show_message(FilamentChangeMessage message) { switch (message) { case FILAMENT_CHANGE_MESSAGE_INIT: @@ -2507,7 +2499,7 @@ int lcd_strlen_P(const char* s) { int j = 0; while (pgm_read_byte(s)) { #ifdef MAPPER_NON - j++; + j++; #else if ((pgm_read_byte(s) & 0xc0) != 0x80) j++; #endif diff --git a/Marlin/ultralcd.h b/Marlin/ultralcd.h index 7a0080698..ccb6f504d 100644 --- a/Marlin/ultralcd.h +++ b/Marlin/ultralcd.h @@ -73,16 +73,6 @@ void lcd_ignore_click(bool b=true); #if ENABLED(FILAMENT_CHANGE_FEATURE) - enum FilamentChangeMessage { - FILAMENT_CHANGE_MESSAGE_INIT, - FILAMENT_CHANGE_MESSAGE_UNLOAD, - FILAMENT_CHANGE_MESSAGE_INSERT, - FILAMENT_CHANGE_MESSAGE_LOAD, - FILAMENT_CHANGE_MESSAGE_EXTRUDE, - FILAMENT_CHANGE_MESSAGE_OPTION, - FILAMENT_CHANGE_MESSAGE_RESUME, - FILAMENT_CHANGE_MESSAGE_STATUS - }; void lcd_filament_change_show_message(FilamentChangeMessage message); #endif // FILAMENT_CHANGE_FEATURE