Move 'core' files
This commit is contained in:
134
Marlin/src/core/boards.h
Normal file
134
Marlin/src/core/boards.h
Normal file
@ -0,0 +1,134 @@
|
||||
/**
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef BOARDS_H
|
||||
#define BOARDS_H
|
||||
|
||||
#define BOARD_UNKNOWN -1
|
||||
|
||||
#define BOARD_GEN7_CUSTOM 10 // Gen7 custom (Alfons3 Version) "https://github.com/Alfons3/Generation_7_Electronics"
|
||||
#define BOARD_GEN7_12 11 // Gen7 v1.1, v1.2
|
||||
#define BOARD_GEN7_13 12 // Gen7 v1.3
|
||||
#define BOARD_GEN7_14 13 // Gen7 v1.4
|
||||
#define BOARD_CNCONTROLS_11 111 // Cartesio CN Controls V11
|
||||
#define BOARD_CNCONTROLS_12 112 // Cartesio CN Controls V12
|
||||
#define BOARD_CHEAPTRONIC 2 // Cheaptronic v1.0
|
||||
#define BOARD_CHEAPTRONIC_V2 21 // Cheaptronic v2.0
|
||||
#define BOARD_SETHI 20 // Sethi 3D_1
|
||||
#define BOARD_MIGHTYBOARD_REVE 200 // Makerbot Mightyboard Revision E
|
||||
#define BOARD_RAMPS_OLD 3 // MEGA/RAMPS up to 1.2
|
||||
#define BOARD_RAMPS_13_EFB 33 // RAMPS 1.3 (Power outputs: Hotend, Fan, Bed)
|
||||
#define BOARD_RAMPS_13_EEB 34 // RAMPS 1.3 (Power outputs: Hotend0, Hotend1, Bed)
|
||||
#define BOARD_RAMPS_13_EFF 35 // RAMPS 1.3 (Power outputs: Hotend, Fan0, Fan1)
|
||||
#define BOARD_RAMPS_13_EEF 36 // RAMPS 1.3 (Power outputs: Hotend0, Hotend1, Fan)
|
||||
#define BOARD_RAMPS_13_SF 38 // RAMPS 1.3 (Power outputs: Spindle, Controller Fan)
|
||||
#define BOARD_FELIX2 37 // Felix 2.0+ Electronics Board (RAMPS like)
|
||||
#define BOARD_RIGIDBOARD 42 // Invent-A-Part RigidBoard
|
||||
#define BOARD_RIGIDBOARD_V2 52 // Invent-A-Part RigidBoard V2
|
||||
#define BOARD_RAMPS_14_EFB 43 // RAMPS 1.4 (Power outputs: Hotend, Fan, Bed)
|
||||
#define BOARD_RAMPS_14_EEB 44 // RAMPS 1.4 (Power outputs: Hotend0, Hotend1, Bed)
|
||||
#define BOARD_RAMPS_14_EFF 45 // RAMPS 1.4 (Power outputs: Hotend, Fan0, Fan1)
|
||||
#define BOARD_RAMPS_14_EEF 46 // RAMPS 1.4 (Power outputs: Hotend0, Hotend1, Fan)
|
||||
#define BOARD_RAMPS_14_SF 48 // RAMPS 1.4 (Power outputs: Spindle, Controller Fan)
|
||||
#define BOARD_GEN6 5 // Gen6
|
||||
#define BOARD_GEN6_DELUXE 51 // Gen6 deluxe
|
||||
#define BOARD_SANGUINOLOLU_11 6 // Sanguinololu < 1.2
|
||||
#define BOARD_SANGUINOLOLU_12 62 // Sanguinololu 1.2 and above
|
||||
#define BOARD_MELZI 63 // Melzi
|
||||
#define BOARD_MELZI_MAKR3D 66 // Melzi with ATmega1284 (MaKr3d version)
|
||||
#define BOARD_MELZI_CREALITY 89 // Melzi Creality3D board (for CR-10 etc)
|
||||
#define BOARD_STB_11 64 // STB V1.1
|
||||
#define BOARD_AZTEEG_X1 65 // Azteeg X1
|
||||
#define BOARD_AZTEEG_X3 67 // Azteeg X3
|
||||
#define BOARD_AZTEEG_X3_PRO 68 // Azteeg X3 Pro
|
||||
#define BOARD_ANET_10 69 // Anet 1.0 (Melzi clone)
|
||||
#define BOARD_ULTIMAKER 7 // Ultimaker
|
||||
#define BOARD_ULTIMAKER_OLD 71 // Ultimaker (Older electronics. Pre 1.5.4. This is rare)
|
||||
#define BOARD_ULTIMAIN_2 72 // Ultimainboard 2.x (Uses TEMP_SENSOR 20)
|
||||
#define BOARD_GT2560_REV_A 74 // Geeetech GT2560 Rev. A
|
||||
#define BOARD_GT2560_REV_A_PLUS 75 // Geeetech GT2560 Rev. A+ (with auto level probe)
|
||||
#define BOARD_3DRAG 77 // 3Drag Controller
|
||||
#define BOARD_K8200 78 // Velleman K8200 Controller (derived from 3Drag Controller)
|
||||
#define BOARD_K8400 79 // Velleman K8400 Controller (derived from 3Drag Controller)
|
||||
#define BOARD_TEENSYLU 8 // Teensylu
|
||||
#define BOARD_RUMBA 80 // Rumba
|
||||
#define BOARD_PRINTRBOARD 81 // Printrboard (AT90USB1286)
|
||||
#define BOARD_PRINTRBOARD_REVF 811 // Printrboard Revision F (AT90USB1286)
|
||||
#define BOARD_BRAINWAVE 82 // Brainwave (AT90USB646)
|
||||
#define BOARD_SAV_MKI 83 // SAV Mk-I (AT90USB1286)
|
||||
#define BOARD_TEENSY2 84 // Teensy++2.0 (AT90USB1286) - CLI compile: HARDWARE_MOTHERBOARD=84 make
|
||||
#define BOARD_TEENSY35_36 841 // Teensy3.5 and Teensy3.6
|
||||
#define BOARD_BRAINWAVE_PRO 85 // Brainwave Pro (AT90USB1286)
|
||||
#define BOARD_GEN3_PLUS 9 // Gen3+
|
||||
#define BOARD_GEN3_MONOLITHIC 22 // Gen3 Monolithic Electronics
|
||||
#define BOARD_MEGATRONICS 70 // Megatronics
|
||||
#define BOARD_MEGATRONICS_2 701 // Megatronics v2.0
|
||||
#define BOARD_MINITRONICS 702 // Minitronics v1.0/1.1
|
||||
#define BOARD_MEGATRONICS_3 703 // Megatronics v3.0
|
||||
#define BOARD_MEGATRONICS_31 704 // Megatronics v3.1
|
||||
#define BOARD_OMCA_A 90 // Alpha OMCA board
|
||||
#define BOARD_OMCA 91 // Final OMCA board
|
||||
#define BOARD_RAMBO 301 // Rambo
|
||||
#define BOARD_MINIRAMBO 302 // Mini-Rambo
|
||||
#define BOARD_SCOOVO_X9H 303 // abee Scoovo X9H
|
||||
#define BOARD_MEGACONTROLLER 310 // Mega controller
|
||||
#define BOARD_ELEFU_3 21 // Elefu Ra Board (v3)
|
||||
#define BOARD_5DPRINT 88 // 5DPrint D8 Driver Board
|
||||
#define BOARD_LEAPFROG 999 // Leapfrog
|
||||
#define BOARD_MKS_BASE 40 // MKS BASE 1.0
|
||||
#define BOARD_MKS_13 47 // MKS v1.3 or 1.4 (maybe higher)
|
||||
#define BOARD_SAINSMART_2IN1 49 // Sainsmart 2-in-1 board
|
||||
#define BOARD_BAM_DICE 401 // 2PrintBeta BAM&DICE with STK drivers
|
||||
#define BOARD_BAM_DICE_DUE 402 // 2PrintBeta BAM&DICE Due with STK drivers
|
||||
#define BOARD_BQ_ZUM_MEGA_3D 503 // bq ZUM Mega 3D
|
||||
#define BOARD_ZRIB_V20 504 // zrib V2.0 control board (Chinese knock off RAMPS replica)
|
||||
//ARM 32
|
||||
#define BOARD_DUE3DOM 1411 // DUE3DOM for Arduino DUE
|
||||
#define BOARD_DUE3DOM_MINI 1412 // DUE3DOM MINI for Arduino DUE
|
||||
#define BOARD_RADDS 1502 // RADDS
|
||||
#define BOARD_RAMPS_FD_V1 1503 // RAMPS-FD v1
|
||||
#define BOARD_RAMPS_FD_V2 1504 // RAMPS-FD v2
|
||||
#define BOARD_RAMPS_SMART_EFB 1523 // RAMPS-SMART (Power outputs: Hotend, Fan, Bed)
|
||||
#define BOARD_RAMPS_SMART_EEB 1524 // RAMPS-SMART (Power outputs: Hotend0, Hotend1, Bed)
|
||||
#define BOARD_RAMPS_SMART_EFF 1525 // RAMPS-SMART (Power outputs: Hotend, Fan0, Fan1)
|
||||
#define BOARD_RAMPS_SMART_EEF 1526 // RAMPS-SMART (Power outputs: Hotend0, Hotend1, Fan)
|
||||
#define BOARD_RAMPS_SMART_SF 1528 // RAMPS-SMART (Power outputs: Spindle, Controller Fan)
|
||||
#define BOARD_RAMPS_DUO_EFB 1533 // RAMPS Duo (Power outputs: Hotend, Fan, Bed)
|
||||
#define BOARD_RAMPS_DUO_EEB 1534 // RAMPS Duo (Power outputs: Hotend0, Hotend1, Bed)
|
||||
#define BOARD_RAMPS_DUO_EFF 1535 // RAMPS Duo (Power outputs: Hotend, Fan0, Fan1)
|
||||
#define BOARD_RAMPS_DUO_EEF 1536 // RAMPS Duo (Power outputs: Hotend0, Hotend1, Fan)
|
||||
#define BOARD_RAMPS_DUO_SF 1538 // RAMPS Duo (Power outputs: Spindle, Controller Fan)
|
||||
#define BOARD_RAMPS4DUE_EFB 1543 // RAMPS4DUE (Power outputs: Hotend, Fan, Bed)
|
||||
#define BOARD_RAMPS4DUE_EEB 1544 // RAMPS4DUE (Power outputs: Hotend0, Hotend1, Bed)
|
||||
#define BOARD_RAMPS4DUE_EFF 1545 // RAMPS4DUE (Power outputs: Hotend, Fan0, Fan1)
|
||||
#define BOARD_RAMPS4DUE_EEF 1546 // RAMPS4DUE (Power outputs: Hotend0, Hotend1, Fan)
|
||||
#define BOARD_RAMPS4DUE_SF 1548 // RAMPS4DUE (Power outputs: Spindle, Controller Fan)
|
||||
#define BOARD_ALLIGATOR 1602 // Alligator Board R2
|
||||
#define BOARD_RAMPS_14_RE_ARM_EFB 1743 // Re-ARM with RAMPS 1.4 (Power outputs: Hotend, Fan, Bed)
|
||||
#define BOARD_RAMPS_14_RE_ARM_EEB 1744 // Re-ARM with RAMPS 1.4 (Power outputs: Hotend0, Hotend1, Bed)
|
||||
#define BOARD_RAMPS_14_RE_ARM_EFF 1745 // Re-ARM with RAMPS 1.4 (Power outputs: Hotend, Fan0, Fan1)
|
||||
#define BOARD_RAMPS_14_RE_ARM_EEF 1746 // Re-ARM with RAMPS 1.4 (Power outputs: Hotend0, Hotend1, Fan)
|
||||
#define BOARD_RAMPS_14_RE_ARM_SF 1748 // Re-ARM with RAMPS 1.4 (Power outputs: Spindle, Controller Fan)
|
||||
|
||||
#define MB(board) (MOTHERBOARD==BOARD_##board)
|
||||
|
||||
#endif // __BOARDS_H
|
189
Marlin/src/core/enum.h
Normal file
189
Marlin/src/core/enum.h
Normal file
@ -0,0 +1,189 @@
|
||||
/**
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __ENUM_H__
|
||||
#define __ENUM_H__
|
||||
|
||||
#include "MarlinConfig.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 = 6,
|
||||
ALL_AXES = 100
|
||||
};
|
||||
|
||||
#define LOOP_S_LE_N(VAR, S, N) for (uint8_t VAR=S; VAR<=N; VAR++)
|
||||
#define LOOP_S_L_N(VAR, S, N) for (uint8_t VAR=S; VAR<N; VAR++)
|
||||
#define LOOP_LE_N(VAR, N) LOOP_S_LE_N(VAR, 0, N)
|
||||
#define LOOP_L_N(VAR, N) LOOP_S_L_N(VAR, 0, N)
|
||||
|
||||
#define LOOP_NA(VAR) LOOP_L_N(VAR, NUM_AXIS)
|
||||
#define LOOP_XYZ(VAR) LOOP_S_LE_N(VAR, X_AXIS, Z_AXIS)
|
||||
#define LOOP_XYZE(VAR) LOOP_S_LE_N(VAR, X_AXIS, E_AXIS)
|
||||
#define LOOP_XYZE_N(VAR) LOOP_S_L_N(VAR, X_AXIS, XYZE_N)
|
||||
|
||||
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
|
||||
DEBUG_MESH_ADJUST = _BV(6), ///< UBL bed leveling
|
||||
DEBUG_ALL = 0xFF
|
||||
};
|
||||
|
||||
enum EndstopEnum {
|
||||
X_MIN,
|
||||
Y_MIN,
|
||||
Z_MIN,
|
||||
Z_MIN_PROBE,
|
||||
X_MAX,
|
||||
Y_MAX,
|
||||
Z_MAX,
|
||||
Z2_MIN,
|
||||
Z2_MAX
|
||||
};
|
||||
|
||||
#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(ADVANCED_PAUSE_FEATURE)
|
||||
enum AdvancedPauseMenuResponse {
|
||||
ADVANCED_PAUSE_RESPONSE_WAIT_FOR,
|
||||
ADVANCED_PAUSE_RESPONSE_EXTRUDE_MORE,
|
||||
ADVANCED_PAUSE_RESPONSE_RESUME_PRINT
|
||||
};
|
||||
|
||||
#if ENABLED(ULTIPANEL)
|
||||
enum AdvancedPauseMessage {
|
||||
ADVANCED_PAUSE_MESSAGE_INIT,
|
||||
ADVANCED_PAUSE_MESSAGE_UNLOAD,
|
||||
ADVANCED_PAUSE_MESSAGE_INSERT,
|
||||
ADVANCED_PAUSE_MESSAGE_LOAD,
|
||||
ADVANCED_PAUSE_MESSAGE_EXTRUDE,
|
||||
ADVANCED_PAUSE_MESSAGE_OPTION,
|
||||
ADVANCED_PAUSE_MESSAGE_RESUME,
|
||||
ADVANCED_PAUSE_MESSAGE_STATUS,
|
||||
ADVANCED_PAUSE_MESSAGE_CLICK_TO_HEAT_NOZZLE,
|
||||
ADVANCED_PAUSE_MESSAGE_WAIT_FOR_NOZZLES_TO_HEAT
|
||||
};
|
||||
#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
|
||||
|
||||
/**
|
||||
* 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
|
||||
};
|
||||
|
||||
/**
|
||||
* Dual X Carriage modes. A Dual Nozzle can also do duplication.
|
||||
*/
|
||||
#if ENABLED(DUAL_X_CARRIAGE) || ENABLED(DUAL_NOZZLE_DUPLICATION_MODE)
|
||||
enum DualXMode {
|
||||
DXC_FULL_CONTROL_MODE, // DUAL_X_CARRIAGE only
|
||||
DXC_AUTO_PARK_MODE, // DUAL_X_CARRIAGE only
|
||||
DXC_DUPLICATION_MODE
|
||||
};
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Workspace planes only apply to G2/G3 moves
|
||||
* (and "canned cycles" - not a current feature)
|
||||
*/
|
||||
#if ENABLED(CNC_WORKSPACE_PLANES)
|
||||
enum WorkspacePlane { PLANE_XY, PLANE_ZX, PLANE_YZ };
|
||||
#endif
|
||||
|
||||
#endif // __ENUM_H__
|
315
Marlin/src/core/language.h
Normal file
315
Marlin/src/core/language.h
Normal file
@ -0,0 +1,315 @@
|
||||
/**
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef LANGUAGE_H
|
||||
#define LANGUAGE_H
|
||||
|
||||
#include "MarlinConfig.h"
|
||||
|
||||
#define _UxGT(a) a
|
||||
|
||||
// Define SIMULATE_ROMFONT to see what is seen on the character based display defined in Configuration.h
|
||||
//#define SIMULATE_ROMFONT
|
||||
|
||||
// Fallback if no language is set. DON'T CHANGE
|
||||
#ifndef LCD_LANGUAGE
|
||||
#define LCD_LANGUAGE en
|
||||
#endif
|
||||
|
||||
// For character-based LCD controllers (DISPLAY_CHARSET_HD44780)
|
||||
#define JAPANESE 1
|
||||
#define WESTERN 2
|
||||
#define CYRILLIC 3
|
||||
|
||||
// NOTE: IF YOU CHANGE LANGUAGE FILES OR MERGE A FILE WITH CHANGES
|
||||
//
|
||||
// ==> ALWAYS TRY TO COMPILE MARLIN WITH/WITHOUT "ULTIPANEL" / "ULTRALCD" / "SDSUPPORT" #define IN "Configuration.h"
|
||||
// ==> ALSO TRY ALL AVAILABLE LANGUAGE OPTIONS
|
||||
// See also https://github.com/MarlinFirmware/Marlin/wiki/LCD-Language
|
||||
|
||||
// Languages
|
||||
// an Aragonese
|
||||
// bg Bulgarian
|
||||
// ca Catalan
|
||||
// cn Chinese
|
||||
// cz Czech
|
||||
// cz_utf8 Czech (UTF8)
|
||||
// de German
|
||||
// el Greek
|
||||
// el-gr Greek (Greece)
|
||||
// en English
|
||||
// es Spanish
|
||||
// eu Basque-Euskera
|
||||
// fi Finnish
|
||||
// fr French
|
||||
// gl Galician
|
||||
// hr Croatian
|
||||
// it Italian
|
||||
// kana Japanese
|
||||
// kana_utf8 Japanese (UTF8)
|
||||
// nl Dutch
|
||||
// pl Polish
|
||||
// pt Portuguese
|
||||
// pt-br Portuguese (Brazilian)
|
||||
// pt-br_utf8 Portuguese (Brazilian) (UTF8)
|
||||
// pt_utf8 Portuguese (UTF8)
|
||||
// ru Russian
|
||||
// sk Slovak (UTF8)
|
||||
// tr Turkish
|
||||
// uk Ukrainian
|
||||
// zh_CN Chinese (Simplified)
|
||||
// zh_TW Chinese (Taiwan)
|
||||
|
||||
#ifdef DEFAULT_SOURCE_CODE_URL
|
||||
#undef SOURCE_CODE_URL
|
||||
#define SOURCE_CODE_URL DEFAULT_SOURCE_CODE_URL
|
||||
#endif
|
||||
|
||||
#ifdef CUSTOM_MACHINE_NAME
|
||||
#undef MACHINE_NAME
|
||||
#define MACHINE_NAME CUSTOM_MACHINE_NAME
|
||||
#else
|
||||
#ifdef DEFAULT_MACHINE_NAME
|
||||
#undef MACHINE_NAME
|
||||
#define MACHINE_NAME DEFAULT_MACHINE_NAME
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef MACHINE_UUID
|
||||
#define MACHINE_UUID DEFAULT_MACHINE_UUID
|
||||
#endif
|
||||
|
||||
#ifdef DEFAULT_WEBSITE_URL
|
||||
#undef WEBSITE_URL
|
||||
#define WEBSITE_URL DEFAULT_WEBSITE_URL
|
||||
#endif
|
||||
|
||||
// Common LCD messages
|
||||
|
||||
/* nothing here yet */
|
||||
|
||||
// Common serial messages
|
||||
#define MSG_MARLIN "Marlin"
|
||||
|
||||
// Serial Console Messages (do not translate those!)
|
||||
|
||||
#define MSG_ENQUEUEING "enqueueing \""
|
||||
#define MSG_POWERUP "PowerUp"
|
||||
#define MSG_EXTERNAL_RESET " External Reset"
|
||||
#define MSG_BROWNOUT_RESET " Brown out Reset"
|
||||
#define MSG_WATCHDOG_RESET " Watchdog Reset"
|
||||
#define MSG_SOFTWARE_RESET " Software Reset"
|
||||
#define MSG_AUTHOR " | Author: "
|
||||
#define MSG_CONFIGURATION_VER " Last Updated: "
|
||||
#define MSG_FREE_MEMORY " Free Memory: "
|
||||
#define MSG_PLANNER_BUFFER_BYTES " PlannerBufferBytes: "
|
||||
#define MSG_OK "ok"
|
||||
#define MSG_WAIT "wait"
|
||||
#define MSG_STATS "Stats: "
|
||||
#define MSG_FILE_SAVED "Done saving file."
|
||||
#define MSG_ERR_LINE_NO "Line Number is not Last Line Number+1, Last Line: "
|
||||
#define MSG_ERR_CHECKSUM_MISMATCH "checksum mismatch, Last Line: "
|
||||
#define MSG_ERR_NO_CHECKSUM "No Checksum with line number, Last Line: "
|
||||
#define MSG_ERR_NO_LINENUMBER_WITH_CHECKSUM "No Line Number with checksum, Last Line: "
|
||||
#define MSG_FILE_PRINTED "Done printing file"
|
||||
#define MSG_BEGIN_FILE_LIST "Begin file list"
|
||||
#define MSG_END_FILE_LIST "End file list"
|
||||
#define MSG_INVALID_EXTRUDER "Invalid extruder"
|
||||
#define MSG_INVALID_SOLENOID "Invalid solenoid"
|
||||
#define MSG_ERR_NO_THERMISTORS "No thermistors - no temperature"
|
||||
#define MSG_M115_REPORT "FIRMWARE_NAME:Marlin " DETAILED_BUILD_VERSION " SOURCE_CODE_URL:" SOURCE_CODE_URL " PROTOCOL_VERSION:" PROTOCOL_VERSION " MACHINE_TYPE:" MACHINE_NAME " EXTRUDER_COUNT:" STRINGIFY(EXTRUDERS) " UUID:" MACHINE_UUID
|
||||
#define MSG_COUNT_X " Count X:"
|
||||
#define MSG_COUNT_A " Count A:"
|
||||
#define MSG_ERR_KILLED "Printer halted. kill() called!"
|
||||
#define MSG_ERR_STOPPED "Printer stopped due to errors. Fix the error and use M999 to restart. (Temperature is reset. Set it after restarting)"
|
||||
#define MSG_BUSY_PROCESSING "busy: processing"
|
||||
#define MSG_BUSY_PAUSED_FOR_USER "busy: paused for user"
|
||||
#define MSG_BUSY_PAUSED_FOR_INPUT "busy: paused for input"
|
||||
#define MSG_RESEND "Resend: "
|
||||
#define MSG_UNKNOWN_COMMAND "Unknown command: \""
|
||||
#define MSG_ACTIVE_EXTRUDER "Active Extruder: "
|
||||
#define MSG_X_MIN "x_min: "
|
||||
#define MSG_X_MAX "x_max: "
|
||||
#define MSG_Y_MIN "y_min: "
|
||||
#define MSG_Y_MAX "y_max: "
|
||||
#define MSG_Z_MIN "z_min: "
|
||||
#define MSG_Z_MAX "z_max: "
|
||||
#define MSG_Z2_MIN "z2_min: "
|
||||
#define MSG_Z2_MAX "z2_max: "
|
||||
#define MSG_Z_PROBE "z_probe: "
|
||||
#define MSG_FILAMENT_RUNOUT_SENSOR "filament: "
|
||||
#define MSG_ERR_MATERIAL_INDEX "M145 S<index> out of range (0-1)"
|
||||
#define MSG_ERR_M355_NONE "No case light"
|
||||
#define MSG_ERR_M421_PARAMETERS "M421 incorrect parameter usage"
|
||||
#define MSG_ERR_BAD_PLANE_MODE "G5 requires XY plane mode"
|
||||
#define MSG_ERR_MESH_XY "Mesh point cannot be resolved"
|
||||
#define MSG_ERR_ARC_ARGS "G2/G3 bad parameters"
|
||||
#define MSG_ERR_PROTECTED_PIN "Protected Pin"
|
||||
#define MSG_ERR_M420_FAILED "Failed to enable Bed Leveling"
|
||||
#define MSG_ERR_M428_TOO_FAR "Too far from reference point"
|
||||
#define MSG_ERR_M303_DISABLED "PIDTEMP disabled"
|
||||
#define MSG_M119_REPORT "Reporting endstop status"
|
||||
#define MSG_ENDSTOP_HIT "TRIGGERED"
|
||||
#define MSG_ENDSTOP_OPEN "open"
|
||||
#define MSG_HOTEND_OFFSET "Hotend offsets:"
|
||||
#define MSG_DUPLICATION_MODE "Duplication mode: "
|
||||
#define MSG_SOFT_ENDSTOPS "Soft endstops: "
|
||||
#define MSG_SOFT_MIN " Min: "
|
||||
#define MSG_SOFT_MAX " Max: "
|
||||
|
||||
#define MSG_SD_CANT_OPEN_SUBDIR "Cannot open subdir "
|
||||
#define MSG_SD_INIT_FAIL "SD init fail"
|
||||
#define MSG_SD_VOL_INIT_FAIL "volume.init failed"
|
||||
#define MSG_SD_OPENROOT_FAIL "openRoot failed"
|
||||
#define MSG_SD_CARD_OK "SD card ok"
|
||||
#define MSG_SD_WORKDIR_FAIL "workDir open failed"
|
||||
#define MSG_SD_OPEN_FILE_FAIL "open failed, File: "
|
||||
#define MSG_SD_FILE_OPENED "File opened: "
|
||||
#define MSG_SD_SIZE " Size: "
|
||||
#define MSG_SD_FILE_SELECTED "File selected"
|
||||
#define MSG_SD_WRITE_TO_FILE "Writing to file: "
|
||||
#define MSG_SD_PRINTING_BYTE "SD printing byte "
|
||||
#define MSG_SD_NOT_PRINTING "Not SD printing"
|
||||
#define MSG_SD_ERR_WRITE_TO_FILE "error writing to file"
|
||||
#define MSG_SD_ERR_READ "SD read error"
|
||||
#define MSG_SD_CANT_ENTER_SUBDIR "Cannot enter subdir: "
|
||||
|
||||
#define MSG_STEPPER_TOO_HIGH "Steprate too high: "
|
||||
#define MSG_ENDSTOPS_HIT "endstops hit: "
|
||||
#define MSG_ERR_COLD_EXTRUDE_STOP " cold extrusion prevented"
|
||||
#define MSG_ERR_LONG_EXTRUDE_STOP " too long extrusion prevented"
|
||||
#define MSG_TOO_COLD_FOR_M600 "M600 Hotend too cold to change filament"
|
||||
#define MSG_BABYSTEPPING_X "Babystepping X"
|
||||
#define MSG_BABYSTEPPING_Y "Babystepping Y"
|
||||
#define MSG_BABYSTEPPING_Z "Babystepping Z"
|
||||
#define MSG_SERIAL_ERROR_MENU_STRUCTURE "Error in menu structure"
|
||||
|
||||
#define MSG_ERR_EEPROM_WRITE "Error writing to EEPROM!"
|
||||
|
||||
#define MSG_STOP_BLTOUCH "STOP called because of BLTouch error - restart with M999"
|
||||
#define MSG_STOP_UNHOMED "STOP called because of unhomed error - restart with M999"
|
||||
#define MSG_KILL_INACTIVE_TIME "KILL caused by too much inactive time - current command: "
|
||||
#define MSG_KILL_BUTTON "KILL caused by KILL button/pin"
|
||||
|
||||
// temperature.cpp strings
|
||||
#define MSG_PID_AUTOTUNE "PID Autotune"
|
||||
#define MSG_PID_AUTOTUNE_START MSG_PID_AUTOTUNE " start"
|
||||
#define MSG_PID_AUTOTUNE_FAILED MSG_PID_AUTOTUNE " failed!"
|
||||
#define MSG_PID_BAD_EXTRUDER_NUM MSG_PID_AUTOTUNE_FAILED " Bad extruder number"
|
||||
#define MSG_PID_TEMP_TOO_HIGH MSG_PID_AUTOTUNE_FAILED " Temperature too high"
|
||||
#define MSG_PID_TIMEOUT MSG_PID_AUTOTUNE_FAILED " timeout"
|
||||
#define MSG_BIAS " bias: "
|
||||
#define MSG_D " d: "
|
||||
#define MSG_T_MIN " min: "
|
||||
#define MSG_T_MAX " max: "
|
||||
#define MSG_KU " Ku: "
|
||||
#define MSG_TU " Tu: "
|
||||
#define MSG_CLASSIC_PID " Classic PID "
|
||||
#define MSG_KP " Kp: "
|
||||
#define MSG_KI " Ki: "
|
||||
#define MSG_KD " Kd: "
|
||||
#define MSG_B "B:"
|
||||
#define MSG_T "T:"
|
||||
#define MSG_AT " @:"
|
||||
#define MSG_PID_AUTOTUNE_FINISHED MSG_PID_AUTOTUNE " finished! Put the last Kp, Ki and Kd constants from below into Configuration.h"
|
||||
#define MSG_PID_DEBUG " PID_DEBUG "
|
||||
#define MSG_PID_DEBUG_INPUT ": Input "
|
||||
#define MSG_PID_DEBUG_OUTPUT " Output "
|
||||
#define MSG_PID_DEBUG_PTERM " pTerm "
|
||||
#define MSG_PID_DEBUG_ITERM " iTerm "
|
||||
#define MSG_PID_DEBUG_DTERM " dTerm "
|
||||
#define MSG_PID_DEBUG_CTERM " cTerm "
|
||||
#define MSG_INVALID_EXTRUDER_NUM " - Invalid extruder number !"
|
||||
|
||||
#define MSG_HEATER_BED "bed"
|
||||
#define MSG_STOPPED_HEATER ", system stopped! Heater_ID: "
|
||||
#define MSG_REDUNDANCY "Heater switched off. Temperature difference between temp sensors is too high !"
|
||||
#define MSG_T_HEATING_FAILED "Heating failed"
|
||||
#define MSG_T_THERMAL_RUNAWAY "Thermal Runaway"
|
||||
#define MSG_T_MAXTEMP "MAXTEMP triggered"
|
||||
#define MSG_T_MINTEMP "MINTEMP triggered"
|
||||
|
||||
// Debug
|
||||
#define MSG_DEBUG_PREFIX "DEBUG:"
|
||||
#define MSG_DEBUG_OFF "off"
|
||||
#define MSG_DEBUG_ECHO "ECHO"
|
||||
#define MSG_DEBUG_INFO "INFO"
|
||||
#define MSG_DEBUG_ERRORS "ERRORS"
|
||||
#define MSG_DEBUG_DRYRUN "DRYRUN"
|
||||
#define MSG_DEBUG_COMMUNICATION "COMMUNICATION"
|
||||
#define MSG_DEBUG_LEVELING "LEVELING"
|
||||
|
||||
// LCD Menu Messages
|
||||
|
||||
#define LANGUAGE_INCL_(M) STRINGIFY_(language_##M.h)
|
||||
#define LANGUAGE_INCL(M) LANGUAGE_INCL_(M)
|
||||
#define INCLUDE_LANGUAGE LANGUAGE_INCL(LCD_LANGUAGE)
|
||||
|
||||
// Never translate these strings
|
||||
#define MSG_X "X"
|
||||
#define MSG_Y "Y"
|
||||
#define MSG_Z "Z"
|
||||
#define MSG_E "E"
|
||||
#define MSG_H1 "1"
|
||||
#define MSG_H2 "2"
|
||||
#define MSG_H3 "3"
|
||||
#define MSG_H4 "4"
|
||||
#define MSG_H5 "5"
|
||||
#define MSG_N1 " 1"
|
||||
#define MSG_N2 " 2"
|
||||
#define MSG_N3 " 3"
|
||||
#define MSG_N4 " 4"
|
||||
#define MSG_N5 " 5"
|
||||
#define MSG_E1 "E1"
|
||||
#define MSG_E2 "E2"
|
||||
#define MSG_E3 "E3"
|
||||
#define MSG_E4 "E4"
|
||||
#define MSG_E5 "E5"
|
||||
#define MSG_MOVE_E1 "1"
|
||||
#define MSG_MOVE_E2 "2"
|
||||
#define MSG_MOVE_E3 "3"
|
||||
#define MSG_MOVE_E4 "4"
|
||||
#define MSG_MOVE_E5 "5"
|
||||
#define MSG_DIAM_E1 " 1"
|
||||
#define MSG_DIAM_E2 " 2"
|
||||
#define MSG_DIAM_E3 " 3"
|
||||
#define MSG_DIAM_E4 " 4"
|
||||
#define MSG_DIAM_E5 " 5"
|
||||
|
||||
#include INCLUDE_LANGUAGE
|
||||
|
||||
#if DISABLED(SIMULATE_ROMFONT) \
|
||||
&& DISABLED(DISPLAY_CHARSET_ISO10646_1) \
|
||||
&& DISABLED(DISPLAY_CHARSET_ISO10646_5) \
|
||||
&& DISABLED(DISPLAY_CHARSET_ISO10646_KANA) \
|
||||
&& DISABLED(DISPLAY_CHARSET_ISO10646_GREEK) \
|
||||
&& DISABLED(DISPLAY_CHARSET_ISO10646_CN) \
|
||||
&& DISABLED(DISPLAY_CHARSET_ISO10646_TR) \
|
||||
&& DISABLED(DISPLAY_CHARSET_ISO10646_PL) \
|
||||
&& DISABLED(DISPLAY_CHARSET_ISO10646_CZ) \
|
||||
&& DISABLED(DISPLAY_CHARSET_ISO10646_SK)
|
||||
#define DISPLAY_CHARSET_ISO10646_1 // use the better font on full graphic displays.
|
||||
#endif
|
||||
|
||||
#include "language_en.h"
|
||||
|
||||
#endif // __LANGUAGE_H
|
203
Marlin/src/core/macros.h
Normal file
203
Marlin/src/core/macros.h
Normal file
@ -0,0 +1,203 @@
|
||||
/**
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef MACROS_H
|
||||
#define MACROS_H
|
||||
|
||||
#define NUM_AXIS 4
|
||||
#define XYZE 4
|
||||
#define ABC 3
|
||||
#define XYZ 3
|
||||
|
||||
#define FORCE_INLINE __attribute__((always_inline)) inline
|
||||
#define _UNUSED __attribute__((unused))
|
||||
#define _O0 __attribute__((optimize("O0")))
|
||||
#define _Os __attribute__((optimize("Os")))
|
||||
#define _O1 __attribute__((optimize("O1")))
|
||||
#define _O2 __attribute__((optimize("O2")))
|
||||
#define _O3 __attribute__((optimize("O3")))
|
||||
|
||||
|
||||
// Clock speed factors
|
||||
#define CYCLES_PER_MICROSECOND (F_CPU / 1000000L) // 16 or 20
|
||||
#define INT0_PRESCALER 8
|
||||
|
||||
// Highly granular delays for step pulses, etc.
|
||||
#define DELAY_0_NOP NOOP
|
||||
#define DELAY_1_NOP __asm__("nop\n\t")
|
||||
#define DELAY_2_NOP DELAY_1_NOP; DELAY_1_NOP
|
||||
#define DELAY_3_NOP DELAY_1_NOP; DELAY_2_NOP
|
||||
#define DELAY_4_NOP DELAY_1_NOP; DELAY_3_NOP
|
||||
#define DELAY_5_NOP DELAY_1_NOP; DELAY_4_NOP
|
||||
|
||||
#define DELAY_NOPS(X) \
|
||||
switch (X) { \
|
||||
case 20: DELAY_1_NOP; case 19: DELAY_1_NOP; \
|
||||
case 18: DELAY_1_NOP; case 17: DELAY_1_NOP; \
|
||||
case 16: DELAY_1_NOP; case 15: DELAY_1_NOP; \
|
||||
case 14: DELAY_1_NOP; case 13: DELAY_1_NOP; \
|
||||
case 12: DELAY_1_NOP; case 11: DELAY_1_NOP; \
|
||||
case 10: DELAY_1_NOP; case 9: DELAY_1_NOP; \
|
||||
case 8: DELAY_1_NOP; case 7: DELAY_1_NOP; \
|
||||
case 6: DELAY_1_NOP; case 5: DELAY_1_NOP; \
|
||||
case 4: DELAY_1_NOP; case 3: DELAY_1_NOP; \
|
||||
case 2: DELAY_1_NOP; case 1: DELAY_1_NOP; \
|
||||
}
|
||||
|
||||
#define DELAY_10_NOP DELAY_5_NOP; DELAY_5_NOP
|
||||
#define DELAY_20_NOP DELAY_10_NOP; DELAY_10_NOP
|
||||
|
||||
#if CYCLES_PER_MICROSECOND == 16
|
||||
#define DELAY_1US DELAY_10_NOP; DELAY_5_NOP; DELAY_1_NOP
|
||||
#else
|
||||
#define DELAY_1US DELAY_20_NOP
|
||||
#endif
|
||||
#define DELAY_2US DELAY_1US; DELAY_1US
|
||||
#define DELAY_3US DELAY_1US; DELAY_2US
|
||||
#define DELAY_4US DELAY_1US; DELAY_3US
|
||||
#define DELAY_5US DELAY_1US; DELAY_4US
|
||||
#define DELAY_6US DELAY_1US; DELAY_5US
|
||||
#define DELAY_7US DELAY_1US; DELAY_6US
|
||||
#define DELAY_8US DELAY_1US; DELAY_7US
|
||||
#define DELAY_9US DELAY_1US; DELAY_8US
|
||||
#define DELAY_10US DELAY_1US; DELAY_9US
|
||||
|
||||
// Remove compiler warning on an unused variable
|
||||
#define UNUSED(x) (void) (x)
|
||||
|
||||
// Macros to make a string from a macro
|
||||
#define STRINGIFY_(M) #M
|
||||
#define STRINGIFY(M) STRINGIFY_(M)
|
||||
|
||||
// Macros for bit masks
|
||||
#define TEST(n,b) (((n)&_BV(b))!=0)
|
||||
#define SBI(n,b) (n |= _BV(b))
|
||||
#define CBI(n,b) (n &= ~_BV(b))
|
||||
#define SET_BIT(n,b,value) (n) ^= ((-value)^(n)) & (_BV(b))
|
||||
|
||||
// Macros for maths shortcuts
|
||||
#ifndef M_PI
|
||||
#define M_PI 3.14159265358979323846
|
||||
#endif
|
||||
#define RADIANS(d) ((d)*M_PI/180.0)
|
||||
#define DEGREES(r) ((r)*180.0/M_PI)
|
||||
#define HYPOT2(x,y) (sq(x)+sq(y))
|
||||
|
||||
#define SIGN(a) ((a>0)-(a<0))
|
||||
|
||||
// Macros to contrain values
|
||||
#define NOLESS(v,n) do{ if (v < n) v = n; }while(0)
|
||||
#define NOMORE(v,n) do{ if (v > n) v = n; }while(0)
|
||||
|
||||
// Macros to support option testing
|
||||
#define _CAT(a, ...) a ## __VA_ARGS__
|
||||
#define SWITCH_ENABLED_false 0
|
||||
#define SWITCH_ENABLED_true 1
|
||||
#define SWITCH_ENABLED_0 0
|
||||
#define SWITCH_ENABLED_1 1
|
||||
#define SWITCH_ENABLED_ 1
|
||||
#define ENABLED(b) _CAT(SWITCH_ENABLED_, b)
|
||||
#define DISABLED(b) (!_CAT(SWITCH_ENABLED_, b))
|
||||
|
||||
#define WITHIN(V,L,H) ((V) >= (L) && (V) <= (H))
|
||||
#define NUMERIC(a) WITHIN(a, '0', '9')
|
||||
#define DECIMAL(a) (NUMERIC(a) || a == '.')
|
||||
#define NUMERIC_SIGNED(a) (NUMERIC(a) || (a) == '-' || (a) == '+')
|
||||
#define DECIMAL_SIGNED(a) (DECIMAL(a) || (a) == '-' || (a) == '+')
|
||||
#define COUNT(a) (sizeof(a)/sizeof(*a))
|
||||
#define ZERO(a) memset(a,0,sizeof(a))
|
||||
#define COPY(a,b) memcpy(a,b,min(sizeof(a),sizeof(b)))
|
||||
|
||||
// Macros for initializing arrays
|
||||
#define ARRAY_6(v1, v2, v3, v4, v5, v6, ...) { v1, v2, v3, v4, v5, v6 }
|
||||
#define ARRAY_5(v1, v2, v3, v4, v5, ...) { v1, v2, v3, v4, v5 }
|
||||
#define ARRAY_4(v1, v2, v3, v4, ...) { v1, v2, v3, v4 }
|
||||
#define ARRAY_3(v1, v2, v3, ...) { v1, v2, v3 }
|
||||
#define ARRAY_2(v1, v2, ...) { v1, v2 }
|
||||
#define ARRAY_1(v1, ...) { v1 }
|
||||
|
||||
#define _ARRAY_N(N, ...) ARRAY_ ##N(__VA_ARGS__)
|
||||
#define ARRAY_N(N, ...) _ARRAY_N(N, __VA_ARGS__)
|
||||
|
||||
// Macros for adding
|
||||
#define INC_0 1
|
||||
#define INC_1 2
|
||||
#define INC_2 3
|
||||
#define INC_3 4
|
||||
#define INC_4 5
|
||||
#define INC_5 6
|
||||
#define INC_6 7
|
||||
#define INC_7 8
|
||||
#define INC_8 9
|
||||
#define INCREMENT_(n) INC_ ##n
|
||||
#define INCREMENT(n) INCREMENT_(n)
|
||||
|
||||
// Macros for subtracting
|
||||
#define DEC_1 0
|
||||
#define DEC_2 1
|
||||
#define DEC_3 2
|
||||
#define DEC_4 3
|
||||
#define DEC_5 4
|
||||
#define DEC_6 5
|
||||
#define DEC_7 6
|
||||
#define DEC_8 7
|
||||
#define DEC_9 8
|
||||
#define DECREMENT_(n) DEC_ ##n
|
||||
#define DECREMENT(n) DECREMENT_(n)
|
||||
|
||||
#define PIN_EXISTS(PN) (defined(PN ##_PIN) && PN ##_PIN >= 0)
|
||||
|
||||
#define PENDING(NOW,SOON) ((long)(NOW-(SOON))<0)
|
||||
#define ELAPSED(NOW,SOON) (!PENDING(NOW,SOON))
|
||||
|
||||
#define NOOP do{} while(0)
|
||||
|
||||
#define CEILING(x,y) (((x) + (y) - 1) / (y))
|
||||
|
||||
#define MIN3(a, b, c) min(min(a, b), c)
|
||||
#define MIN4(a, b, c, d) min(MIN3(a, b, c), d)
|
||||
#define MIN5(a, b, c, d, e) min(MIN4(a, b, c, d), e)
|
||||
#define MAX3(a, b, c) max(max(a, b), c)
|
||||
#define MAX4(a, b, c, d) max(MAX3(a, b, c), d)
|
||||
#define MAX5(a, b, c, d, e) max(MAX4(a, b, c, d), e)
|
||||
|
||||
#define UNEAR_ZERO(x) ((x) < 0.000001)
|
||||
#define NEAR_ZERO(x) WITHIN(x, -0.000001, 0.000001)
|
||||
#define NEAR(x,y) NEAR_ZERO((x)-(y))
|
||||
|
||||
#define RECIPROCAL(x) (NEAR_ZERO(x) ? 0.0 : 1.0 / (x))
|
||||
#define FIXFLOAT(f) (f + 0.00001)
|
||||
|
||||
//
|
||||
// Maths macros that can be overridden by HAL
|
||||
//
|
||||
#define ATAN2(y, x) atan2(y, x)
|
||||
#define FABS(x) fabs(x)
|
||||
#define POW(x, y) pow(x, y)
|
||||
#define SQRT(x) sqrt(x)
|
||||
#define CEIL(x) ceil(x)
|
||||
#define FLOOR(x) floor(x)
|
||||
#define LROUND(x) lround(x)
|
||||
#define FMOD(x, y) fmod(x, y)
|
||||
#define HYPOT(x,y) SQRT(HYPOT2(x,y))
|
||||
|
||||
#endif //__MACROS_H
|
36
Marlin/src/core/serial.cpp
Normal file
36
Marlin/src/core/serial.cpp
Normal file
@ -0,0 +1,36 @@
|
||||
/**
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "serial.h"
|
||||
|
||||
const char errormagic[] PROGMEM = "Error:";
|
||||
const char echomagic[] PROGMEM = "echo:";
|
||||
|
||||
void serial_echopair_P(const char* s_P, const char *v) { serialprintPGM(s_P); SERIAL_ECHO(v); }
|
||||
void serial_echopair_P(const char* s_P, char v) { serialprintPGM(s_P); SERIAL_CHAR(v); }
|
||||
void serial_echopair_P(const char* s_P, int v) { serialprintPGM(s_P); SERIAL_ECHO(v); }
|
||||
void serial_echopair_P(const char* s_P, long v) { serialprintPGM(s_P); SERIAL_ECHO(v); }
|
||||
void serial_echopair_P(const char* s_P, float v) { serialprintPGM(s_P); SERIAL_ECHO(v); }
|
||||
void serial_echopair_P(const char* s_P, double v) { serialprintPGM(s_P); SERIAL_ECHO(v); }
|
||||
void serial_echopair_P(const char* s_P, unsigned long v) { serialprintPGM(s_P); SERIAL_ECHO(v); }
|
||||
|
||||
void serial_spaces(uint8_t count) { count *= (PROPORTIONAL_FONT_RATIO); while (count--) MYSERIAL.write(' '); }
|
107
Marlin/src/core/serial.h
Normal file
107
Marlin/src/core/serial.h
Normal file
@ -0,0 +1,107 @@
|
||||
/**
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __SERIAL_H__
|
||||
#define __SERIAL_H__
|
||||
|
||||
#include "src/HAL/HAL.h"
|
||||
|
||||
//todo: HAL: breaks encapsulation
|
||||
// For AVR only, define a serial interface based on configuration
|
||||
#ifdef ARDUINO_ARCH_AVR
|
||||
#ifdef USBCON
|
||||
#include "HardwareSerial.h"
|
||||
#if ENABLED(BLUETOOTH)
|
||||
#define MYSERIAL bluetoothSerial
|
||||
#else
|
||||
#define MYSERIAL Serial
|
||||
#endif // BLUETOOTH
|
||||
#else
|
||||
#include "src/HAL/HAL_AVR/MarlinSerial.h"
|
||||
#define MYSERIAL customizedSerial
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include "MarlinConfig.h"
|
||||
|
||||
extern const char echomagic[] PROGMEM;
|
||||
extern const char errormagic[] PROGMEM;
|
||||
|
||||
#define SERIAL_CHAR(x) ((void)MYSERIAL.write(x))
|
||||
#define SERIAL_EOL() SERIAL_CHAR('\n')
|
||||
|
||||
#define SERIAL_PROTOCOLCHAR(x) SERIAL_CHAR(x)
|
||||
#define SERIAL_PROTOCOL(x) (MYSERIAL.print(x))
|
||||
#define SERIAL_PROTOCOL_F(x,y) (MYSERIAL.print(x,y))
|
||||
#define SERIAL_PROTOCOLPGM(x) (serialprintPGM(PSTR(x)))
|
||||
#define SERIAL_PROTOCOLLN(x) do{ MYSERIAL.print(x); SERIAL_EOL(); }while(0)
|
||||
#define SERIAL_PROTOCOLLNPGM(x) (serialprintPGM(PSTR(x "\n")))
|
||||
#define SERIAL_PROTOCOLPAIR(name, value) (serial_echopair_P(PSTR(name),(value)))
|
||||
#define SERIAL_PROTOCOLLNPAIR(name, value) do{ SERIAL_PROTOCOLPAIR(name, value); SERIAL_EOL(); }while(0)
|
||||
|
||||
#define SERIAL_ECHO_START() (serialprintPGM(echomagic))
|
||||
#define SERIAL_ECHO(x) SERIAL_PROTOCOL(x)
|
||||
#define SERIAL_ECHOPGM(x) SERIAL_PROTOCOLPGM(x)
|
||||
#define SERIAL_ECHOLN(x) SERIAL_PROTOCOLLN(x)
|
||||
#define SERIAL_ECHOLNPGM(x) SERIAL_PROTOCOLLNPGM(x)
|
||||
#define SERIAL_ECHOPAIR(name,value) SERIAL_PROTOCOLPAIR(name, value)
|
||||
#define SERIAL_ECHOLNPAIR(name, value) SERIAL_PROTOCOLLNPAIR(name, value)
|
||||
#define SERIAL_ECHO_F(x,y) SERIAL_PROTOCOL_F(x,y)
|
||||
|
||||
#define SERIAL_ERROR_START() (serialprintPGM(errormagic))
|
||||
#define SERIAL_ERROR(x) SERIAL_PROTOCOL(x)
|
||||
#define SERIAL_ERRORPGM(x) SERIAL_PROTOCOLPGM(x)
|
||||
#define SERIAL_ERRORLN(x) SERIAL_PROTOCOLLN(x)
|
||||
#define SERIAL_ERRORLNPGM(x) SERIAL_PROTOCOLLNPGM(x)
|
||||
|
||||
// These macros compensate for float imprecision
|
||||
#define SERIAL_PROTOCOLPAIR_F(name, value) SERIAL_PROTOCOLPAIR(name, FIXFLOAT(value))
|
||||
#define SERIAL_PROTOCOLLNPAIR_F(name, value) SERIAL_PROTOCOLLNPAIR(name, FIXFLOAT(value))
|
||||
#define SERIAL_ECHOPAIR_F(name,value) SERIAL_ECHOPAIR(name, FIXFLOAT(value))
|
||||
#define SERIAL_ECHOLNPAIR_F(name, value) SERIAL_ECHOLNPAIR(name, FIXFLOAT(value))
|
||||
|
||||
void serial_echopair_P(const char* s_P, const char *v);
|
||||
void serial_echopair_P(const char* s_P, char v);
|
||||
void serial_echopair_P(const char* s_P, int v);
|
||||
void serial_echopair_P(const char* s_P, long v);
|
||||
void serial_echopair_P(const char* s_P, float v);
|
||||
void serial_echopair_P(const char* s_P, double v);
|
||||
void serial_echopair_P(const char* s_P, unsigned int v);
|
||||
void serial_echopair_P(const char* s_P, unsigned long v);
|
||||
FORCE_INLINE void serial_echopair_P(const char* s_P, uint8_t v) { serial_echopair_P(s_P, (int)v); }
|
||||
FORCE_INLINE void serial_echopair_P(const char* s_P, uint16_t v) { serial_echopair_P(s_P, (int)v); }
|
||||
FORCE_INLINE void serial_echopair_P(const char* s_P, bool v) { serial_echopair_P(s_P, (int)v); }
|
||||
FORCE_INLINE void serial_echopair_P(const char* s_P, void *v) { serial_echopair_P(s_P, (unsigned long)v); }
|
||||
|
||||
void serial_spaces(uint8_t count);
|
||||
#define SERIAL_ECHO_SP(C) serial_spaces(C)
|
||||
#define SERIAL_ERROR_SP(C) serial_spaces(C)
|
||||
#define SERIAL_PROTOCOL_SP(C) serial_spaces(C)
|
||||
|
||||
//
|
||||
// Functions for serial printing from PROGMEM. (Saves loads of SRAM.)
|
||||
//
|
||||
FORCE_INLINE void serialprintPGM(const char* str) {
|
||||
while (char ch = pgm_read_byte(str++)) MYSERIAL.write(ch);
|
||||
}
|
||||
|
||||
#endif // __SERIAL_H__
|
28
Marlin/src/core/types.h
Normal file
28
Marlin/src/core/types.h
Normal file
@ -0,0 +1,28 @@
|
||||
/**
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __TYPES_H__
|
||||
#define __TYPES_H__
|
||||
|
||||
typedef unsigned long millis_t;
|
||||
|
||||
#endif
|
257
Marlin/src/core/utility.cpp
Normal file
257
Marlin/src/core/utility.cpp
Normal file
@ -0,0 +1,257 @@
|
||||
/**
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "Marlin.h"
|
||||
#include "utility.h"
|
||||
#include "temperature.h"
|
||||
|
||||
void safe_delay(millis_t ms) {
|
||||
while (ms > 50) {
|
||||
ms -= 50;
|
||||
delay(50);
|
||||
thermalManager.manage_heater();
|
||||
}
|
||||
delay(ms);
|
||||
thermalManager.manage_heater(); // This keeps us safe if too many small safe_delay() calls are made
|
||||
}
|
||||
|
||||
#if ENABLED(EEPROM_SETTINGS)
|
||||
|
||||
void crc16(uint16_t *crc, const void * const data, uint16_t cnt) {
|
||||
uint8_t *ptr = (uint8_t *)data;
|
||||
while (cnt--) {
|
||||
*crc = (uint16_t)(*crc ^ (uint16_t)(((uint16_t)*ptr++) << 8));
|
||||
for (uint8_t x = 0; x < 8; x++)
|
||||
*crc = (uint16_t)((*crc & 0x8000) ? ((uint16_t)(*crc << 1) ^ 0x1021) : (*crc << 1));
|
||||
}
|
||||
}
|
||||
|
||||
#endif // EEPROM_SETTINGS
|
||||
|
||||
#if ENABLED(ULTRA_LCD)
|
||||
|
||||
char conv[8] = { 0 };
|
||||
|
||||
#define DIGIT(n) ('0' + (n))
|
||||
#define DIGIMOD(n, f) DIGIT((n)/(f) % 10)
|
||||
#define RJDIGIT(n, f) ((n) >= (f) ? DIGIMOD(n, f) : ' ')
|
||||
#define MINUSOR(n, alt) (n >= 0 ? (alt) : (n = -n, '-'))
|
||||
|
||||
// Convert unsigned int to string 123 format
|
||||
char* i8tostr3(const uint8_t xx) {
|
||||
conv[4] = RJDIGIT(xx, 100);
|
||||
conv[5] = RJDIGIT(xx, 10);
|
||||
conv[6] = DIGIMOD(xx, 1);
|
||||
return &conv[4];
|
||||
}
|
||||
|
||||
// Convert signed int to rj string with 123 or -12 format
|
||||
char* itostr3(const int x) {
|
||||
int xx = x;
|
||||
conv[4] = MINUSOR(xx, RJDIGIT(xx, 100));
|
||||
conv[5] = RJDIGIT(xx, 10);
|
||||
conv[6] = DIGIMOD(xx, 1);
|
||||
return &conv[4];
|
||||
}
|
||||
|
||||
// Convert unsigned int to lj string with 123 format
|
||||
char* itostr3left(const int xx) {
|
||||
char *str = &conv[6];
|
||||
*str = DIGIMOD(xx, 1);
|
||||
if (xx >= 10) {
|
||||
*(--str) = DIGIMOD(xx, 10);
|
||||
if (xx >= 100)
|
||||
*(--str) = DIGIMOD(xx, 100);
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
// Convert signed int to rj string with 1234, _123, -123, _-12, or __-1 format
|
||||
char *itostr4sign(const int x) {
|
||||
const bool neg = x < 0;
|
||||
const int xx = neg ? -x : x;
|
||||
if (x >= 1000) {
|
||||
conv[3] = DIGIMOD(xx, 1000);
|
||||
conv[4] = DIGIMOD(xx, 100);
|
||||
conv[5] = DIGIMOD(xx, 10);
|
||||
}
|
||||
else {
|
||||
if (xx >= 100) {
|
||||
conv[3] = neg ? '-' : ' ';
|
||||
conv[4] = DIGIMOD(xx, 100);
|
||||
conv[5] = DIGIMOD(xx, 10);
|
||||
}
|
||||
else {
|
||||
conv[3] = ' ';
|
||||
conv[4] = ' ';
|
||||
if (xx >= 10) {
|
||||
conv[4] = neg ? '-' : ' ';
|
||||
conv[5] = DIGIMOD(xx, 10);
|
||||
}
|
||||
else {
|
||||
conv[5] = neg ? '-' : ' ';
|
||||
}
|
||||
}
|
||||
}
|
||||
conv[6] = DIGIMOD(xx, 1);
|
||||
return &conv[3];
|
||||
}
|
||||
|
||||
// Convert unsigned float to string with 1.23 format
|
||||
char* ftostr12ns(const float &x) {
|
||||
const long xx = (x < 0 ? -x : x) * 100;
|
||||
conv[3] = DIGIMOD(xx, 100);
|
||||
conv[4] = '.';
|
||||
conv[5] = DIGIMOD(xx, 10);
|
||||
conv[6] = DIGIMOD(xx, 1);
|
||||
return &conv[3];
|
||||
}
|
||||
|
||||
// Convert signed float to fixed-length string with 023.45 / -23.45 format
|
||||
char *ftostr32(const float &x) {
|
||||
long xx = x * 100;
|
||||
conv[1] = MINUSOR(xx, DIGIMOD(xx, 10000));
|
||||
conv[2] = DIGIMOD(xx, 1000);
|
||||
conv[3] = DIGIMOD(xx, 100);
|
||||
conv[4] = '.';
|
||||
conv[5] = DIGIMOD(xx, 10);
|
||||
conv[6] = DIGIMOD(xx, 1);
|
||||
return &conv[1];
|
||||
}
|
||||
|
||||
#if ENABLED(LCD_DECIMAL_SMALL_XY)
|
||||
|
||||
// Convert float to rj string with 1234, _123, -123, _-12, 12.3, _1.2, or -1.2 format
|
||||
char *ftostr4sign(const float &fx) {
|
||||
const int x = fx * 10;
|
||||
if (!WITHIN(x, -99, 999)) return itostr4sign((int)fx);
|
||||
const bool neg = x < 0;
|
||||
const int xx = neg ? -x : x;
|
||||
conv[3] = neg ? '-' : (xx >= 100 ? DIGIMOD(xx, 100) : ' ');
|
||||
conv[4] = DIGIMOD(xx, 10);
|
||||
conv[5] = '.';
|
||||
conv[6] = DIGIMOD(xx, 1);
|
||||
return &conv[3];
|
||||
}
|
||||
|
||||
#endif // LCD_DECIMAL_SMALL_XY
|
||||
|
||||
// Convert float to fixed-length string with +123.4 / -123.4 format
|
||||
char* ftostr41sign(const float &x) {
|
||||
int xx = x * 10;
|
||||
conv[1] = MINUSOR(xx, '+');
|
||||
conv[2] = DIGIMOD(xx, 1000);
|
||||
conv[3] = DIGIMOD(xx, 100);
|
||||
conv[4] = DIGIMOD(xx, 10);
|
||||
conv[5] = '.';
|
||||
conv[6] = DIGIMOD(xx, 1);
|
||||
return &conv[1];
|
||||
}
|
||||
|
||||
// Convert signed float to string (6 digit) with -1.234 / _0.000 / +1.234 format
|
||||
char* ftostr43sign(const float &x, char plus/*=' '*/) {
|
||||
long xx = x * 1000;
|
||||
conv[1] = xx ? MINUSOR(xx, plus) : ' ';
|
||||
conv[2] = DIGIMOD(xx, 1000);
|
||||
conv[3] = '.';
|
||||
conv[4] = DIGIMOD(xx, 100);
|
||||
conv[5] = DIGIMOD(xx, 10);
|
||||
conv[6] = DIGIMOD(xx, 1);
|
||||
return &conv[1];
|
||||
}
|
||||
|
||||
// Convert unsigned float to rj string with 12345 format
|
||||
char* ftostr5rj(const float &x) {
|
||||
const long xx = x < 0 ? -x : x;
|
||||
conv[2] = RJDIGIT(xx, 10000);
|
||||
conv[3] = RJDIGIT(xx, 1000);
|
||||
conv[4] = RJDIGIT(xx, 100);
|
||||
conv[5] = RJDIGIT(xx, 10);
|
||||
conv[6] = DIGIMOD(xx, 1);
|
||||
return &conv[2];
|
||||
}
|
||||
|
||||
// Convert signed float to string with +1234.5 format
|
||||
char* ftostr51sign(const float &x) {
|
||||
long xx = x * 10;
|
||||
conv[0] = MINUSOR(xx, '+');
|
||||
conv[1] = DIGIMOD(xx, 10000);
|
||||
conv[2] = DIGIMOD(xx, 1000);
|
||||
conv[3] = DIGIMOD(xx, 100);
|
||||
conv[4] = DIGIMOD(xx, 10);
|
||||
conv[5] = '.';
|
||||
conv[6] = DIGIMOD(xx, 1);
|
||||
return conv;
|
||||
}
|
||||
|
||||
// Convert signed float to string with +123.45 format
|
||||
char* ftostr52sign(const float &x) {
|
||||
long xx = x * 100;
|
||||
conv[0] = MINUSOR(xx, '+');
|
||||
conv[1] = DIGIMOD(xx, 10000);
|
||||
conv[2] = DIGIMOD(xx, 1000);
|
||||
conv[3] = DIGIMOD(xx, 100);
|
||||
conv[4] = '.';
|
||||
conv[5] = DIGIMOD(xx, 10);
|
||||
conv[6] = DIGIMOD(xx, 1);
|
||||
return conv;
|
||||
}
|
||||
|
||||
// Convert unsigned float to string with 1234.56 format omitting trailing zeros
|
||||
char* ftostr62rj(const float &x) {
|
||||
const long xx = (x < 0 ? -x : x) * 100;
|
||||
conv[0] = RJDIGIT(xx, 100000);
|
||||
conv[1] = RJDIGIT(xx, 10000);
|
||||
conv[2] = RJDIGIT(xx, 1000);
|
||||
conv[3] = DIGIMOD(xx, 100);
|
||||
conv[4] = '.';
|
||||
conv[5] = DIGIMOD(xx, 10);
|
||||
conv[6] = DIGIMOD(xx, 1);
|
||||
return conv;
|
||||
}
|
||||
|
||||
// Convert signed float to space-padded string with -_23.4_ format
|
||||
char* ftostr52sp(const float &x) {
|
||||
long xx = x * 100;
|
||||
uint8_t dig;
|
||||
conv[1] = MINUSOR(xx, RJDIGIT(xx, 10000));
|
||||
conv[2] = RJDIGIT(xx, 1000);
|
||||
conv[3] = DIGIMOD(xx, 100);
|
||||
|
||||
if ((dig = xx % 10)) { // second digit after decimal point?
|
||||
conv[4] = '.';
|
||||
conv[5] = DIGIMOD(xx, 10);
|
||||
conv[6] = DIGIT(dig);
|
||||
}
|
||||
else {
|
||||
if ((dig = (xx / 10) % 10)) { // first digit after decimal point?
|
||||
conv[4] = '.';
|
||||
conv[5] = DIGIT(dig);
|
||||
}
|
||||
else // nothing after decimal point
|
||||
conv[4] = conv[5] = ' ';
|
||||
conv[6] = ' ';
|
||||
}
|
||||
return &conv[1];
|
||||
}
|
||||
|
||||
#endif // ULTRA_LCD
|
86
Marlin/src/core/utility.h
Normal file
86
Marlin/src/core/utility.h
Normal file
@ -0,0 +1,86 @@
|
||||
/**
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __UTILITY_H__
|
||||
#define __UTILITY_H__
|
||||
|
||||
void safe_delay(millis_t ms);
|
||||
|
||||
#if ENABLED(EEPROM_SETTINGS)
|
||||
void crc16(uint16_t *crc, const void * const data, uint16_t cnt);
|
||||
#endif
|
||||
|
||||
#if ENABLED(ULTRA_LCD)
|
||||
|
||||
// Convert uint8_t to string with 123 format
|
||||
char* i8tostr3(const uint8_t x);
|
||||
|
||||
// Convert signed int to rj string with 123 or -12 format
|
||||
char* itostr3(const int x);
|
||||
|
||||
// Convert unsigned int to lj string with 123 format
|
||||
char* itostr3left(const int xx);
|
||||
|
||||
// Convert signed int to rj string with _123, -123, _-12, or __-1 format
|
||||
char *itostr4sign(const int x);
|
||||
|
||||
// Convert unsigned float to string with 1.23 format
|
||||
char* ftostr12ns(const float &x);
|
||||
|
||||
// Convert signed float to fixed-length string with 023.45 / -23.45 format
|
||||
char* ftostr32(const float &x);
|
||||
|
||||
// Convert float to fixed-length string with +123.4 / -123.4 format
|
||||
char* ftostr41sign(const float &x);
|
||||
|
||||
// Convert signed float to string (6 digit) with -1.234 / _0.000 / +1.234 format
|
||||
char* ftostr43sign(const float &x, char plus=' ');
|
||||
|
||||
// Convert unsigned float to rj string with 12345 format
|
||||
char* ftostr5rj(const float &x);
|
||||
|
||||
// Convert signed float to string with +1234.5 format
|
||||
char* ftostr51sign(const float &x);
|
||||
|
||||
// Convert signed float to space-padded string with -_23.4_ format
|
||||
char* ftostr52sp(const float &x);
|
||||
|
||||
// Convert signed float to string with +123.45 format
|
||||
char* ftostr52sign(const float &x);
|
||||
|
||||
// Convert unsigned float to string with 1234.56 format omitting trailing zeros
|
||||
char* ftostr62rj(const float &x);
|
||||
|
||||
// Convert float to rj string with 123 or -12 format
|
||||
FORCE_INLINE char *ftostr3(const float &x) { return itostr3((int)x); }
|
||||
|
||||
#if ENABLED(LCD_DECIMAL_SMALL_XY)
|
||||
// Convert float to rj string with 1234, _123, 12.3, _1.2, -123, _-12, or -1.2 format
|
||||
char *ftostr4sign(const float &fx);
|
||||
#else
|
||||
// Convert float to rj string with 1234, _123, -123, __12, _-12, ___1, or __-1 format
|
||||
FORCE_INLINE char *ftostr4sign(const float &x) { return itostr4sign((int)x); }
|
||||
#endif
|
||||
|
||||
#endif // ULTRA_LCD
|
||||
|
||||
#endif // __UTILITY_H__
|
Reference in New Issue
Block a user