Merge branch 'MK3' into MK3_ShellSort

This commit is contained in:
Alex Voinea 2020-01-07 14:18:31 +02:00
commit 1ba89b9689
No known key found for this signature in database
GPG Key ID: F5034E7CFCF2F973
30 changed files with 435 additions and 65 deletions

31
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@ -0,0 +1,31 @@
---
name: Bug report
about: Create a report to help us improve
title: "[BUG]<Enter comprehensive title>"
labels: bug
assignees: ''
---
Please, before you create a new bug report, please make sure you searched in open and closed issues and couldn't find anything that matches.
**Printer type** - [e.g. MK3S, MK3, MK2.5S, MK2.5, MK2S, MK2]
**Printer firmware version**- [e.g. 3.8.1, 3.8.1-RC1, ...]
**MMU Upgrade** - [e.g. MMU2S, MMU2, MMU1]
**MMU upgrade firmware version [e.g. 1.0.6, 1.0.6-RC2, ...]
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Please describe steps to reproduce the behavior.
**Expected behavior**
A clear and concise description of what you expected to happen.
**G-code**
Please attach a G-code. This will make it easier for us to replicate the error.
**Video**
Please attach a video. It usually helps to solve the problem.

20
.github/ISSUE_TEMPLATE/enhancement.md vendored Normal file
View File

@ -0,0 +1,20 @@
---
name: Enhancement
about: Suggest an idea for this project
title: " [ENHANCEMENT]<Enter comprehensive title>"
labels: enhancement
assignees: ''
---
Please, before you create a new feature request, please make sure you searched in open and closed issues and couldn't find anything that matches.
Enter what type of printer or upgrade the enhancement applies to.
**Printer type** - [e.g. MK3S, MK3, MK2.5S, MK2.5, MK2S, MK2]
**MMU Upgrade** - [e.g. MMU2S, MMU2, MMU1]
**Is your enhancement related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.

View File

@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea for this project
title: "[FEATURE REQUEST]<Enter comprehensive title>"
labels: feature request
assignees: ''
---
Please, before you create a new feature request, please make sure you searched in open and closed issues and couldn't find anything that matches.
If it makes sense, enter what type of printer or upgrade the feature request applies to.
**Printer type** - [e.g. MK3S, MK3, MK2.5S, MK2.5, MK2S, MK2]
**MMU Upgrade** - [e.g. MMU2S, MMU2, MMU1]
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.

12
.github/ISSUE_TEMPLATE/question.md vendored Normal file
View File

@ -0,0 +1,12 @@
---
name: Question
about: What do you want to know?
title: "[QUESTION]<Enter comprehensive title>"
labels: question
assignees: ''
---
Please, before you create a new question, please make sure you searched in open and closed issues and couldn't find anything that matches.
**What is your question?**

View File

@ -63,6 +63,7 @@
#include "menu.h"
#include "ultralcd.h"
#include "backlight.h"
#include "planner.h"
#include "stepper.h"
@ -999,10 +1000,6 @@ void setup()
ultralcd_init();
#if (LCD_BL_PIN != -1) && defined (LCD_BL_PIN)
analogWrite(LCD_BL_PIN, 255); //set full brightnes
#endif //(LCD_BL_PIN != -1) && defined (LCD_BL_PIN)
spi_init();
lcd_splash();
@ -2824,7 +2821,10 @@ bool gcode_M45(bool onlyZ, int8_t verbosity_level)
#ifdef TMC2130
FORCE_HIGH_POWER_START;
#endif // TMC2130
// Only Z calibration?
FORCE_BL_ON_START;
// Only Z calibration?
if (!onlyZ)
{
setTargetBed(0);
@ -3012,6 +3012,9 @@ bool gcode_M45(bool onlyZ, int8_t verbosity_level)
#ifdef TMC2130
FORCE_HIGH_POWER_END;
#endif // TMC2130
FORCE_BL_ON_END;
return final_result;
}
@ -5944,7 +5947,7 @@ Sigma_Exit:
//! ### M112 - Emergency stop
// -----------------------------------------
case 112:
kill(_n(""), 3);
kill(MSG_M112_KILL, 3);
break;
//! ### M140 - Set bed temperature
@ -6207,7 +6210,6 @@ Sigma_Exit:
LCD_MESSAGERPGM(_T(WELCOME_MSG));
lcd_update(0);
break;
#endif
//! ### M81 - Turn off Power Supply
// --------------------------------------
@ -6231,6 +6233,7 @@ Sigma_Exit:
LCD_MESSAGERPGM(CAT4(CUSTOM_MENDEL_NAME,PSTR(" "),MSG_OFF,PSTR(".")));
lcd_update(0);
break;
#endif
//! ### M82 - Set E axis to absolute mode
// ---------------------------------------
@ -7271,7 +7274,7 @@ Sigma_Exit:
//! ### M603 - Stop print
// -------------------------------
case 603: {
Stop();
lcd_print_stop();
}
break;
@ -8415,8 +8418,6 @@ void prepare_move()
plan_buffer_line(destination[X_AXIS], destination[Y_AXIS], destination[Z_AXIS], destination[E_AXIS], feedrate*feedmultiply*(1./(60.f*100.f)), active_extruder);
#endif
}
if (waiting_inside_plan_buffer_line_print_aborted)
return;
set_current_to_destination();
}
@ -8626,7 +8627,7 @@ if(0)
if( (_millis() - previous_millis_cmd) > max_inactive_time )
if(max_inactive_time)
kill(_n(""), 4);
kill(_n("Inactivity Shutdown"), 4);
if(stepper_inactive_time) {
if( (_millis() - previous_millis_cmd) > stepper_inactive_time )
{
@ -8667,7 +8668,7 @@ if(0)
// ----------------------------------------------------------------
if ( killCount >= KILL_DELAY)
{
kill("", 5);
kill(NULL, 5);
}
#endif
@ -8745,6 +8746,16 @@ void kill(const char *full_screen_message, unsigned char id)
} // Wait for reset
}
// Stop: Emergency stop used by overtemp functions which allows recovery
//
// In addition to stopping the print, this prevents subsequent G[0-3] commands to be
// processed via USB (using "Stopped") until the print is resumed via M999 or
// manually started from scratch with the LCD.
//
// Note that the current instruction is completely discarded, so resuming from Stop()
// will introduce either over/under extrusion on the current segment, and will not
// survive a power panic. Switching Stop() to use the pause machinery instead (with
// the addition of disabling the headers) could allow true recovery in the future.
void Stop()
{
disable_heater();
@ -9555,9 +9566,11 @@ float temp_compensation_pinda_thermistor_offset(float temperature_pinda)
void long_pause() //long pause print
{
st_synchronize();
start_pause_print = _millis();
// Stop heaters
setAllTargetHotends(0);
//retract
current_position[E_AXIS] -= default_retraction;
plan_buffer_line_curposXYZE(400, active_extruder);
@ -9572,8 +9585,7 @@ void long_pause() //long pause print
current_position[Y_AXIS] = Y_PAUSE_POS;
plan_buffer_line_curposXYZE(50, active_extruder);
// Turn off the hotends and print fan
setAllTargetHotends(0);
// Turn off the print fan
fanSpeed = 0;
}
@ -9595,6 +9607,11 @@ void uvlo_()
unsigned long time_start = _millis();
bool sd_print = card.sdprinting;
// Conserve power as soon as possible.
#ifdef LCD_BL_PIN
backlightMode = BACKLIGHT_MODE_DIM;
backlightLevel_LOW = 0;
backlight_update();
#endif //LCD_BL_PIN
disable_x();
disable_y();
@ -10220,7 +10237,9 @@ void stop_and_save_print_to_ram(float z_move, float e_move)
sei();
if ((z_move != 0) || (e_move != 0)) { // extruder or z move
#if 1
// Rather than calling plan_buffer_line directly, push the move into the command queue,
// Rather than calling plan_buffer_line directly, push the move into the command queue so that
// the caller can continue processing. This is used during powerpanic to save the state as we
// move away from the print.
char buf[48];
// First unretract (relative extrusion)
@ -10249,6 +10268,7 @@ void stop_and_save_print_to_ram(float z_move, float e_move)
memcpy(current_position, saved_pos, sizeof(saved_pos));
memcpy(destination, current_position, sizeof(destination));
#endif
waiting_inside_plan_buffer_line_print_aborted = true; //unroll the stack
}
}

View File

@ -319,6 +319,22 @@ bool Sd2Card::init(uint8_t sckRateID, uint8_t chipSelectPin) {
goto fail;
}
}
// send 0xFF until 0xFF received to give card some clock cycles
t0 = (uint16_t)_millis();
SERIAL_ECHOLNRPGM(PSTR("Sending 0xFF"));
spiSend(0XFF);
while ((status_ = spiRec()) != 0xFF)
{
spiSend(0XFF);
if (((uint16_t)_millis() - t0) > SD_CARD_ERROR_FF_TIMEOUT)
{
error(SD_CARD_ERROR_CMD8);
SERIAL_ECHOLNRPGM(PSTR("No 0xFF received"));
goto fail;
}
}
// check SD version
if ((cardCommand(CMD8, 0x1AA) & R1_ILLEGAL_COMMAND)) {
type(SD_CARD_TYPE_SD1);

View File

@ -105,6 +105,8 @@ uint8_t const SD_CARD_ERROR_SCK_RATE = 0X18;
uint8_t const SD_CARD_ERROR_INIT_NOT_CALLED = 0X19;
/** crc check error */
uint8_t const SD_CARD_ERROR_CRC = 0X20;
/** no response to sent 0xFF */
uint8_t const SD_CARD_ERROR_FF_TIMEOUT = 0X21;
/** Toshiba FlashAir: iSDIO */
uint8_t const SD_CARD_ERROR_CMD48 = 0x80;

120
Firmware/backlight.cpp Normal file
View File

@ -0,0 +1,120 @@
//backlight.cpp
#include "backlight.h"
#include <avr/eeprom.h>
#include <Arduino.h>
#include "eeprom.h"
#include "Marlin.h"
#include "pins.h"
#include "fastio.h"
#include "Timer.h"
#ifdef LCD_BL_PIN
#define BL_FLASH_DELAY_MS 25
bool backlightSupport = 0; //only if it's true will any of the settings be visible to the user
int16_t backlightLevel_HIGH = 0;
int16_t backlightLevel_LOW = 0;
uint8_t backlightMode = BACKLIGHT_MODE_BRIGHT;
int16_t backlightTimer_period = 10;
LongTimer backlightTimer;
static void backlightTimer_reset() //used for resetting the timer and waking the display. Triggered on user interactions.
{
if (!backlightSupport) return;
backlightTimer.start();
backlight_update();
}
void force_bl_on(bool section_start)
{
if (section_start)
{
backlightMode = BACKLIGHT_MODE_BRIGHT;
if (backlightLevel_HIGH < 30) backlightLevel_HIGH = 30;
}
else
{
backlightMode = eeprom_read_byte((uint8_t *)EEPROM_BACKLIGHT_MODE);
backlightLevel_HIGH = eeprom_read_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL_HIGH);
}
backlight_update();
}
void backlight_wake(const uint8_t flashNo)
{
if (!backlightSupport) return;
if (flashNo)
{
uint8_t backlightMode_bck = backlightMode;
for (uint8_t i = 0; i < (((backlightMode_bck == BACKLIGHT_MODE_AUTO) && !backlightTimer.running()) + (flashNo * 2)); i++)
{
backlightMode = !backlightMode; //toggles between BACKLIGHT_MODE_BRIGHT and BACKLIGHT_MODE_DIM
backlight_update();
_delay(BL_FLASH_DELAY_MS);
}
backlightMode = backlightMode_bck;
}
backlightTimer_reset();
}
void backlight_save() //saves all backlight data to eeprom.
{
eeprom_update_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL_HIGH, (uint8_t)backlightLevel_HIGH);
eeprom_update_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL_LOW, (uint8_t)backlightLevel_LOW);
eeprom_update_byte((uint8_t *)EEPROM_BACKLIGHT_MODE, backlightMode);
eeprom_update_word((uint16_t *)EEPROM_BACKLIGHT_TIMEOUT, backlightTimer_period);
}
void backlight_update()
{
if (!backlightSupport) return;
if (backlightMode == BACKLIGHT_MODE_AUTO)
{
if (backlightTimer.expired((uint32_t)backlightTimer_period * 1000ul)) analogWrite(LCD_BL_PIN, backlightLevel_LOW);
else if (backlightTimer.running()) analogWrite(LCD_BL_PIN, backlightLevel_HIGH);
else {/*do nothing*/;} //display is dimmed.
}
else if (backlightMode == BACKLIGHT_MODE_DIM) analogWrite(LCD_BL_PIN, backlightLevel_LOW);
else analogWrite(LCD_BL_PIN, backlightLevel_HIGH);
}
void backlight_init()
{
//check for backlight support on lcd
SET_INPUT(LCD_BL_PIN);
WRITE(LCD_BL_PIN,HIGH);
_delay(10);
backlightSupport = !READ(LCD_BL_PIN);
if (!backlightSupport) return;
//initialize backlight
backlightMode = eeprom_read_byte((uint8_t *)EEPROM_BACKLIGHT_MODE);
if (backlightMode == 0xFF) //set default values
{
backlightMode = BACKLIGHT_MODE_AUTO;
backlightLevel_HIGH = 130;
backlightLevel_LOW = 50;
backlightTimer_period = 10; //in seconds
backlight_save();
}
backlightLevel_HIGH = eeprom_read_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL_HIGH);
backlightLevel_LOW = eeprom_read_byte((uint8_t *)EEPROM_BACKLIGHT_LEVEL_LOW);
backlightTimer_period = eeprom_read_word((uint16_t *)EEPROM_BACKLIGHT_TIMEOUT);
SET_OUTPUT(LCD_BL_PIN);
backlightTimer_reset();
}
#else //LCD_BL_PIN
void force_bl_on(__attribute__((unused)) bool section_start) {}
void backlight_update() {}
void backlight_init() {}
void backlight_save() {}
void backlight_wake(__attribute__((unused)) const uint8_t flashNo) {}
#endif //LCD_BL_PIN

32
Firmware/backlight.h Normal file
View File

@ -0,0 +1,32 @@
//backlight.h
#ifndef _BACKLIGHT_H
#define _BACKLIGHT_H
#include <inttypes.h>
#include "Marlin.h"
#include "pins.h"
enum Backlight_Mode
{
BACKLIGHT_MODE_DIM = 0,
BACKLIGHT_MODE_BRIGHT = 1,
BACKLIGHT_MODE_AUTO = 2,
};
extern int16_t backlightLevel_HIGH;
extern int16_t backlightLevel_LOW;
extern uint8_t backlightMode;
extern bool backlightSupport;
extern int16_t backlightTimer_period;
#define FORCE_BL_ON_START force_bl_on(true)
#define FORCE_BL_ON_END force_bl_on(false)
extern void force_bl_on(bool section_start);
extern void backlight_update();
extern void backlight_init();
extern void backlight_save();
extern void backlight_wake(const uint8_t flashNo = 0);
#endif //_BACKLIGHT_H

View File

@ -359,10 +359,10 @@ void CardReader::openFile(const char* name,bool read, bool replace_current/*=tru
{
if((int)file_subcall_ctr>(int)SD_PROCEDURE_DEPTH-1)
{
SERIAL_ERROR_START;
SERIAL_ERRORPGM("trying to call sub-gcode files with too many levels. MAX level is:");
SERIAL_ERRORLN(SD_PROCEDURE_DEPTH);
kill("", 1);
// SERIAL_ERROR_START;
// SERIAL_ERRORPGM("trying to call sub-gcode files with too many levels. MAX level is:");
// SERIAL_ERRORLN(SD_PROCEDURE_DEPTH);
kill(_n("trying to call sub-gcode files with too many levels."), 1);
return;
}

View File

@ -500,7 +500,7 @@ void get_command()
//If command was e-stop process now
if(strcmp(cmdbuffer+bufindw+CMDHDRSIZE, "M112") == 0)
kill("", 2);
kill(MSG_M112_KILL, 2);
// Store the current line into buffer, move to the next line.
// Store type of entry

View File

@ -207,8 +207,14 @@ static Sheets * const EEPROM_Sheets_base = (Sheets*)(EEPROM_SHEETS_BASE);
#define EEPROM_UVLO_SAVED_TARGET (EEPROM_FSENSOR_ACTION_NA - 4*4) // 4 x float for saved target for all axes
#define EEPROM_UVLO_FEEDMULTIPLY (EEPROM_UVLO_SAVED_TARGET - 2) // uint16_t for feedmultiply
#define EEPROM_BACKLIGHT_LEVEL_HIGH (EEPROM_UVLO_FEEDMULTIPLY-1) // uint8
#define EEPROM_BACKLIGHT_LEVEL_LOW (EEPROM_BACKLIGHT_LEVEL_HIGH-1) // uint8
#define EEPROM_BACKLIGHT_MODE (EEPROM_BACKLIGHT_LEVEL_LOW-1) // uint8
#define EEPROM_BACKLIGHT_TIMEOUT (EEPROM_BACKLIGHT_MODE-2) // uint16
//This is supposed to point to last item to allow EEPROM overrun check. Please update when adding new items.
#define EEPROM_LAST_ITEM EEPROM_UVLO_FEEDMULTIPLY
#define EEPROM_LAST_ITEM EEPROM_BACKLIGHT_TIMEOUT
// !!!!!
// !!!!! this is end of EEPROM section ... all updates MUST BE inserted before this mark !!!!!
// !!!!!

View File

@ -17,10 +17,10 @@ uint8_t lang_selected = 0;
#if (LANG_MODE == 0) //primary language only
uint8_t lang_select(uint8_t lang) { return 0; }
uint8_t lang_select(__attribute__((unused)) uint8_t lang) { return 0; }
uint8_t lang_get_count() { return 1; }
uint16_t lang_get_code(uint8_t lang) { return LANG_CODE_EN; }
const char* lang_get_name_by_code(uint16_t code) { return _n("English"); }
uint16_t lang_get_code(__attribute__((unused)) uint8_t lang) { return LANG_CODE_EN; }
const char* lang_get_name_by_code(__attribute__((unused)) uint16_t code) { return _n("English"); }
void lang_reset(void) { }
uint8_t lang_is_selected(void) { return 1; }

View File

@ -131,6 +131,13 @@ const char MSG_MAGNETS_COMP[] PROGMEM_I1 = ISTR("Magnets comp."); ////
const char MSG_FS_ACTION[] PROGMEM_I1 = ISTR("FS Action"); ////
const char MSG_FS_CONTINUE[] PROGMEM_I1 = ISTR("Cont."); ////
const char MSG_FS_PAUSE[] PROGMEM_I1 = ISTR("Pause"); ////
const char MSG_BRIGHTNESS[] PROGMEM_I1 = ISTR("Brightness"); ////
const char MSG_BL_HIGH[] PROGMEM_I1 = ISTR("Level Bright"); ////
const char MSG_BL_LOW[] PROGMEM_I1 = ISTR("Level Dimmed"); ////
const char MSG_TIMEOUT[] PROGMEM_I1 = ISTR("Timeout"); ////
const char MSG_BRIGHT[] PROGMEM_I1 = ISTR("Bright"); ////
const char MSG_DIM[] PROGMEM_I1 = ISTR("Dim"); ////
const char MSG_AUTO[] PROGMEM_I1 = ISTR("Auto"); ////
//not internationalized messages
const char MSG_SD_WORKDIR_FAIL[] PROGMEM_N1 = "workDir open failed"; ////
@ -160,3 +167,4 @@ const char MSG_OCTOPRINT_RESUMED[] PROGMEM_N1 = "// action:resumed"; ////
const char MSG_OCTOPRINT_CANCEL[] PROGMEM_N1 = "// action:cancel"; ////
const char MSG_FANCHECK_EXTRUDER[] PROGMEM_N1 = "Err: EXTR. FAN ERROR"; ////c=20
const char MSG_FANCHECK_PRINT[] PROGMEM_N1 = "Err: PRINT FAN ERROR"; ////c=20
const char MSG_M112_KILL[] PROGMEM_N1 = "M112 called. Emergency Stop."; ////c=20

View File

@ -131,6 +131,13 @@ extern const char MSG_MAGNETS_COMP[];
extern const char MSG_FS_ACTION[];
extern const char MSG_FS_CONTINUE[];
extern const char MSG_FS_PAUSE[];
extern const char MSG_BRIGHTNESS[];
extern const char MSG_BL_HIGH[];
extern const char MSG_BL_LOW[];
extern const char MSG_TIMEOUT[];
extern const char MSG_BRIGHT[];
extern const char MSG_DIM[];
extern const char MSG_AUTO[];
//not internationalized messages
extern const char MSG_BROWNOUT_RESET[];
@ -161,6 +168,7 @@ extern const char MSG_OCTOPRINT_RESUMED[];
extern const char MSG_OCTOPRINT_CANCEL[];
extern const char MSG_FANCHECK_EXTRUDER[];
extern const char MSG_FANCHECK_PRINT[];
extern const char MSG_M112_KILL[];
#if defined(__cplusplus)
}

View File

@ -1578,18 +1578,7 @@ void mmu_continue_loading(bool blocking)
break;
case Ls::Unload:
stop_and_save_print_to_ram(0, 0);
//lift z
current_position[Z_AXIS] += Z_PAUSE_LIFT;
if (current_position[Z_AXIS] > Z_MAX_POS) current_position[Z_AXIS] = Z_MAX_POS;
plan_buffer_line_curposXYZE(15, active_extruder);
st_synchronize();
//Move XY to side
current_position[X_AXIS] = X_PAUSE_POS;
current_position[Y_AXIS] = Y_PAUSE_POS;
plan_buffer_line_curposXYZE(50, active_extruder);
st_synchronize();
long_pause();
mmu_command(MmuCmd::U0);
manage_response(false, true, MMU_UNLOAD_MOVE);

View File

@ -258,11 +258,11 @@ void optiboot_w25x20cl_enter()
uint32_t addr = (((uint32_t)rampz) << 16) | address;
// During a single bootloader run, only erase a 64kB block once.
// An 8bit bitmask 'pages_erased' covers 512kB of FLASH memory.
if (address == 0 && (pages_erased & (1 << addr)) == 0) {
if ((address == 0) && (pages_erased & (1 << (addr >> 16))) == 0) {
w25x20cl_wait_busy();
w25x20cl_enable_wr();
w25x20cl_block64_erase(addr);
pages_erased |= (1 << addr);
pages_erased |= (1 << (addr >> 16));
}
w25x20cl_wait_busy();
w25x20cl_enable_wr();

View File

@ -100,7 +100,7 @@
//#define KILL_PIN 32
//#define LCD_BL_PIN 5 //backlight control pin
#define LCD_BL_PIN 5 //backlight control pin
#define BEEPER 84 // Beeper on AUX-4
#define LCD_PINS_RS 82
#define LCD_PINS_ENABLE 61 // !!! changed from 18 (EINY03)

View File

@ -5,6 +5,7 @@
//#include <inttypes.h>
//#include <avr/eeprom.h>
//#include "eeprom.h"
#include "backlight.h"
//eSOUND_MODE eSoundMode=e_SOUND_MODE_LOUD;
@ -63,6 +64,7 @@ Sound_SaveMode();
//if critical is true then silend and once mode is ignored
void Sound_MakeCustom(uint16_t ms,uint16_t tone_,bool critical){
backlight_wake();
if (!critical){
if (eSoundMode != e_SOUND_MODE_SILENT){
if(!tone_){
@ -135,6 +137,7 @@ switch(eSoundMode)
static void Sound_DoSound_Blind_Alert(void)
{
backlight_wake(1);
uint8_t nI;
for(nI=0; nI<20; nI++)
@ -148,6 +151,7 @@ static void Sound_DoSound_Blind_Alert(void)
static void Sound_DoSound_Encoder_Move(void)
{
backlight_wake();
uint8_t nI;
for(nI=0;nI<5;nI++)
@ -161,6 +165,7 @@ uint8_t nI;
static void Sound_DoSound_Echo(void)
{
backlight_wake();
uint8_t nI;
for(nI=0;nI<10;nI++)
@ -174,6 +179,7 @@ for(nI=0;nI<10;nI++)
static void Sound_DoSound_Prompt(void)
{
backlight_wake(2);
WRITE(BEEPER,HIGH);
_delay_ms(500);
WRITE(BEEPER,LOW);
@ -181,6 +187,7 @@ WRITE(BEEPER,LOW);
static void Sound_DoSound_Alert(bool bOnce)
{
backlight_wake();
uint8_t nI,nMax;
nMax=bOnce?1:3;

View File

@ -879,7 +879,7 @@ static float analog2temp(int raw, uint8_t e) {
SERIAL_ERROR_START;
SERIAL_ERROR((int)e);
SERIAL_ERRORLNPGM(" - Invalid extruder number !");
kill(PSTR(""), 6);
kill(NULL, 6);
return 0.0;
}
#ifdef HEATER_0_USES_MAX6675

View File

@ -807,15 +807,15 @@ void tmc2130_goto_step(uint8_t axis, uint8_t step, uint8_t dir, uint16_t delay_u
{
dir = tmc2130_get_inv(axis)?0:1;
int steps = (int)step - (int)(mscnt >> shift);
if (steps < 0)
{
dir ^= 1;
steps = -steps;
}
if (steps > static_cast<int>(cnt / 2))
{
dir ^= 1;
steps = cnt - steps;
steps = cnt - steps; // This can create a negative step value
}
if (steps < 0)
{
dir ^= 1;
steps = -steps;
}
cnt = steps;
}

View File

@ -19,6 +19,8 @@
#include "lcd.h"
#include "menu.h"
#include "backlight.h"
#include "util.h"
#include "mesh_bed_leveling.h"
#include "mesh_bed_calibration.h"
@ -56,6 +58,7 @@ char longFilenameOLD[LONG_FILENAME_LENGTH];
static void lcd_sd_updir();
static void lcd_mesh_bed_leveling_settings();
static void lcd_backlight_menu();
int8_t ReInitLCD = 0;
@ -112,7 +115,9 @@ static const char* lcd_display_message_fullscreen_nonBlocking_P(const char *msg,
/* Different menus */
static void lcd_status_screen();
#if (LANG_MODE != 0)
static void lcd_language_menu();
#endif
static void lcd_main_menu();
static void lcd_tune_menu();
//static void lcd_move_menu();
@ -1100,6 +1105,7 @@ void lcd_commands()
lcd_setstatuspgm(_i("Print paused"));////MSG_PRINT_PAUSED c=20 r=1
lcd_commands_type = LcdCommands::Idle;
lcd_commands_step = 0;
long_pause();
}
}
@ -1656,9 +1662,8 @@ void lcd_return_to_status()
//! @brief Pause print, disable nozzle heater, move to park position
void lcd_pause_print()
{
lcd_return_to_status();
stop_and_save_print_to_ram(0.0,0.0);
long_pause();
lcd_return_to_status();
isPrintPaused = true;
if (LcdCommands::Idle == lcd_commands_type)
{
@ -2282,6 +2287,9 @@ static void lcd_support_menu()
void lcd_set_fan_check() {
fans_check_enabled = !fans_check_enabled;
eeprom_update_byte((unsigned char *)EEPROM_FAN_CHECK_ENABLED, fans_check_enabled);
#ifdef FANCHECK
if (fans_check_enabled == false) fan_check_error = EFCE_OK; //reset error if fanCheck is disabled during error. Allows resuming print.
#endif //FANCHECK
}
#ifdef MMU_HAS_CUTTER
@ -4919,6 +4927,7 @@ void lcd_wizard() {
}
}
#if (LANG_MODE != 0)
void lcd_language()
{
lcd_update_enable(true);
@ -4938,6 +4947,7 @@ void lcd_language()
else
lang_select(LANG_ID_PRI);
}
#endif
static void wait_preheat()
{
@ -5046,8 +5056,10 @@ void lcd_wizard(WizState state)
// Make sure EEPROM_WIZARD_ACTIVE is true if entering using different entry point
// other than WizState::Run - it is useful for debugging wizard.
if (state != S::Run) eeprom_update_byte((uint8_t*)EEPROM_WIZARD_ACTIVE, 1);
while (!end) {
FORCE_BL_ON_START;
while (!end) {
printf_P(PSTR("Wizard state: %d\n"), state);
switch (state) {
case S::Run: //Run wizard?
@ -5183,7 +5195,9 @@ void lcd_wizard(WizState state)
default: break;
}
}
FORCE_BL_ON_END;
printf_P(_N("Wizard end state: %d\n"), state);
switch (state) { //final message
case S::Restore: //printer was already calibrated
@ -5820,6 +5834,13 @@ static void lcd_settings_menu()
SETTINGS_SD;
SETTINGS_SOUND;
#ifdef LCD_BL_PIN
if (backlightSupport)
{
MENU_ITEM_SUBMENU_P(_T(MSG_BRIGHTNESS), lcd_backlight_menu);
}
#endif //LCD_BL_PIN
if (farm_mode)
{
MENU_ITEM_SUBMENU_P(PSTR("Farm number"), lcd_farm_no);
@ -6695,6 +6716,7 @@ static void lcd_test_menu()
static bool fan_error_selftest()
{
#ifdef FANCHECK
if (!fans_check_enabled) return 0;
fanSpeed = 255;
#ifdef FAN_SOFT_PWM
@ -6725,9 +6747,8 @@ static bool fan_error_selftest()
return 1;
}
#endif
#endif //FANCHECK
return 0;
#endif //FANCHECK
}
//! @brief Resume paused print
@ -6742,10 +6763,10 @@ void lcd_resume_print()
if (fan_error_selftest()) return; //abort if error persists
isPrintPaused = false;
restore_print_from_ram_and_continue(0.0);
pause_time += (_millis() - start_pause_print); //accumulate time when print is paused for correct statistics calculation
refresh_cmd_timeout();
isPrintPaused = false;
SERIAL_PROTOCOLLNRPGM(MSG_OCTOPRINT_RESUMED); //resume octoprint
}
@ -6897,7 +6918,7 @@ static void lcd_main_menu()
{
MENU_ITEM_FUNCTION_P(_i("Pause print"), lcd_pause_print);////MSG_PAUSE_PRINT
}
else
else if(isPrintPaused)
{
#ifdef FANCHECK
if((fan_check_error == EFCE_FIXED) || (fan_check_error == EFCE_OK))
@ -7149,6 +7170,12 @@ static void lcd_tune_menu()
#endif //TMC2130
SETTINGS_MMU_MODE;
SETTINGS_SOUND;
#ifdef LCD_BL_PIN
if (backlightSupport)
{
MENU_ITEM_SUBMENU_P(_T(MSG_BRIGHTNESS), lcd_backlight_menu);
}
#endif //LCD_BL_PIN
MENU_END();
}
@ -7198,6 +7225,36 @@ static void lcd_mesh_bed_leveling_settings()
//SETTINGS_MBL_MODE;
}
#ifdef LCD_BL_PIN
static void backlight_mode_toggle()
{
switch (backlightMode)
{
case BACKLIGHT_MODE_BRIGHT: backlightMode = BACKLIGHT_MODE_DIM; break;
case BACKLIGHT_MODE_DIM: backlightMode = BACKLIGHT_MODE_AUTO; break;
case BACKLIGHT_MODE_AUTO: backlightMode = BACKLIGHT_MODE_BRIGHT; break;
default: backlightMode = BACKLIGHT_MODE_BRIGHT; break;
}
backlight_save();
}
static void lcd_backlight_menu()
{
MENU_BEGIN();
ON_MENU_LEAVE(
backlight_save();
);
MENU_ITEM_BACK_P(_T(MSG_BACK));
MENU_ITEM_EDIT_int3_P(_T(MSG_BL_HIGH), &backlightLevel_HIGH, backlightLevel_LOW, 255);
MENU_ITEM_EDIT_int3_P(_T(MSG_BL_LOW), &backlightLevel_LOW, 0, backlightLevel_HIGH);
MENU_ITEM_TOGGLE_P(_T(MSG_MODE), ((backlightMode==BACKLIGHT_MODE_BRIGHT) ? _T(MSG_BRIGHT) : ((backlightMode==BACKLIGHT_MODE_DIM) ? _T(MSG_DIM) : _T(MSG_AUTO))), backlight_mode_toggle);
MENU_ITEM_EDIT_int3_P(_T(MSG_TIMEOUT), &backlightTimer_period, 1, 999);
MENU_END();
}
#endif //LCD_BL_PIN
static void lcd_control_temperature_menu()
{
#ifdef PIDTEMP
@ -7485,6 +7542,10 @@ bool lcd_selftest()
#if !IR_SENSOR_ANALOG
_delay(2000);
#endif //!IR_SENSOR_ANALOG
FORCE_BL_ON_START;
_delay(2000);
KEEPALIVE_STATE(IN_HANDLER);
#if IR_SENSOR_ANALOG
bool bAction;
@ -7717,7 +7778,10 @@ bool lcd_selftest()
#ifdef TMC2130
FORCE_HIGH_POWER_END;
#endif // TMC2130
KEEPALIVE_STATE(NOT_BUSY);
FORCE_BL_ON_END;
KEEPALIVE_STATE(NOT_BUSY);
return(_result);
}
@ -8126,7 +8190,9 @@ static bool lcd_selfcheck_check_heater(bool _isbed)
static void lcd_selftest_error(TestError testError, const char *_error_1, const char *_error_2)
{
lcd_beeper_quick_feedback();
FORCE_BL_ON_END;
target_temperature[0] = 0;
target_temperature_bed = 0;
manage_heater();
@ -8725,6 +8791,7 @@ void ultralcd_init()
else lcd_autoDeplete = autoDepleteRaw;
}
backlight_init();
lcd_init();
lcd_refresh();
lcd_longpress_func = menu_lcd_longpress_func;
@ -8871,6 +8938,7 @@ uint8_t get_message_level()
void menu_lcd_longpress_func(void)
{
backlight_wake();
if (homing_flag || mesh_bed_leveling_flag || menu_menu == lcd_babystep_z || menu_menu == lcd_move_z)
{
// disable longpress during re-entry, while homing or calibration
@ -8952,6 +9020,7 @@ void menu_lcd_lcdupdate_func(void)
lcd_draw_update = 2;
lcd_oldcardstatus = IS_SD_INSERTED;
lcd_refresh(); // to maybe revive the LCD if static electricity killed it.
backlight_wake();
if (lcd_oldcardstatus)
{
card.initsd();
@ -8969,6 +9038,7 @@ void menu_lcd_lcdupdate_func(void)
}
}
#endif//CARDINSERTED
backlight_update();
if (lcd_next_update_millis < _millis())
{
if (abs(lcd_encoder_diff) >= ENCODER_PULSES_PER_STEP)
@ -8979,9 +9049,14 @@ void menu_lcd_lcdupdate_func(void)
Sound_MakeSound(e_SOUND_TYPE_EncoderMove);
lcd_encoder_diff = 0;
lcd_timeoutToStatus.start();
backlight_wake();
}
if (LCD_CLICKED) lcd_timeoutToStatus.start();
if (LCD_CLICKED)
{
lcd_timeoutToStatus.start();
backlight_wake();
}
(*menu_menu)();

View File

@ -6,6 +6,7 @@
#include "conv2str.h"
#include "menu.h"
#include "mesh_bed_calibration.h"
#include "config.h"
#include "config.h"
@ -217,7 +218,9 @@ void display_loading();
void lcd_set_degree();
#if (LANG_MODE != 0)
void lcd_language();
#endif
void lcd_wizard();
bool lcd_autoDepleteEnabled();

View File

@ -178,6 +178,7 @@ Example:
# 4. Documentation
run [doxygen](http://www.doxygen.nl/) in Firmware folder
or visit https://prusa3d.github.io/Prusa-Firmware-Doc for doxygen generated output
# 5. FAQ
Q:I built firmware using Arduino and I see "?" instead of numbers in printer user interface.

View File

@ -1188,7 +1188,7 @@
#
"The printer will start printing a zig-zag line. Rotate the knob until you reach the optimal height. Check the pictures in the handbook (Calibration chapter)."
"\x00"
"Tiskarna zacne tisknout lomenou caru. Otacenim tlacitka nastavte optimalni vysku. Postupujte podle obrazku v handbooku (kapitola Kalibrace)."
#
"Y-correct:"

View File

@ -1188,7 +1188,7 @@
#
"The printer will start printing a zig-zag line. Rotate the knob until you reach the optimal height. Check the pictures in the handbook (Calibration chapter)."
"\x00"
"Der Drucker beginnt mit dem Drucken einer Zickzacklinie. Drehen Sie den Knopf, bis Sie die optimale Hoehe erreicht haben. Ueberpruefen Sie die Bilder im Handbuch (Kapitel Kalibrierung)."
#
"Y-correct:"

View File

@ -1188,7 +1188,7 @@
#
"The printer will start printing a zig-zag line. Rotate the knob until you reach the optimal height. Check the pictures in the handbook (Calibration chapter)."
"\x00"
"La impresora comenzara a imprimir una linea en zig-zag. Gira el dial hasta que la linea alcance la altura optima. Mira las fotos del manual (Capitulo de calibracion)."
#
"Y-correct:"

View File

@ -1185,7 +1185,7 @@
#
"The printer will start printing a zig-zag line. Rotate the knob until you reach the optimal height. Check the pictures in the handbook (Calibration chapter)."
"\x00"
"L'imprimante commencera a imprimer une ligne en zig-zag. Tournez le bouton jusqu'a atteindre la hauteur optimale. Consultez les photos dans le manuel (chapitre Calibration)."
#
"Y-correct:"

View File

@ -1187,7 +1187,7 @@
#
"The printer will start printing a zig-zag line. Rotate the knob until you reach the optimal height. Check the pictures in the handbook (Calibration chapter)."
"\x00"
"La stampante iniziera a stampare una linea a zig-zag. Gira la manopola fino a che non hai raggiungo l'altezza ottimale. Verifica con le immagini nel manuale (capitolo sulla calibrazione):"
#
"Y-correct:"

View File

@ -1187,7 +1187,7 @@
#
"The printer will start printing a zig-zag line. Rotate the knob until you reach the optimal height. Check the pictures in the handbook (Calibration chapter)."
"\x00"
"Drukarka zacznie drukowanie linii w ksztalcie zygzaka. Ustaw optymalna wysokosc obracajac pokretlo. Porownaj z ilustracjami w Podreczniku (rozdzial Kalibracja)."
#
"Y-correct:"