Porting all files but ui.cpp
Porting all files but ui.cpp Compilation is ok but no test done yet - need ui.cpppull/8/head
rodzic
be7e334111
commit
b0fc75d824
|
@ -24,7 +24,9 @@
|
|||
const int sensitive_pins[] PROGMEM = SENSITIVE_PINS; // Sensitive pin list for M42
|
||||
int Commands::lowestRAMValue = MAX_RAM;
|
||||
int Commands::lowestRAMValueSend = MAX_RAM;
|
||||
|
||||
uint8_t Commands::delay_flag_change=0;
|
||||
uint8_t Commands::delay_flag_change2=0;
|
||||
uint8_t Commands::countersensor=0;
|
||||
void Commands::commandLoop()
|
||||
{
|
||||
while(true)
|
||||
|
@ -74,11 +76,57 @@ void Commands::checkForPeriodicalActions(bool allowNewMoves)
|
|||
writeMonitor();
|
||||
counter250ms = 5;
|
||||
}
|
||||
#if defined(TOP_SENSOR_PIN)
|
||||
if(EEPROM::btopsensor)
|
||||
{
|
||||
if(!READ(TOP_SENSOR_PIN))
|
||||
{
|
||||
countersensor++;
|
||||
if (countersensor>25)
|
||||
{
|
||||
playsound(1000,140);
|
||||
playsound(3000,240);
|
||||
UI_STATUS_UPD(UI_TEXT_TOP_COVER_OPEN);
|
||||
countersensor=0;
|
||||
}
|
||||
}
|
||||
else countersensor=0;
|
||||
}
|
||||
#endif
|
||||
if (Printer::isMenuMode(MENU_MODE_STOP_REQUESTED) && Printer::isMenuMode(MENU_MODE_STOP_DONE) )
|
||||
{
|
||||
if (delay_flag_change2>10)
|
||||
{
|
||||
Printer::setMenuMode(MENU_MODE_STOP_REQUESTED,false);
|
||||
UI_STATUS_UPD(UI_TEXT_IDLE);
|
||||
delay_flag_change2=0;
|
||||
}
|
||||
else delay_flag_change2++;
|
||||
}
|
||||
else delay_flag_change2=0;
|
||||
if ( Printer::isMenuMode(MENU_MODE_GCODE_PROCESSING))
|
||||
{
|
||||
delay_flag_change=0;
|
||||
Printer::setMenuMode(MENU_MODE_PRINTING,true);
|
||||
}
|
||||
if (!PrintLine::hasLines() && Printer::isMenuMode(MENU_MODE_PRINTING))
|
||||
{
|
||||
if (delay_flag_change>5)
|
||||
{
|
||||
Printer::setMenuMode(MENU_MODE_PRINTING,false);
|
||||
UI_STATUS_UPD(UI_TEXT_IDLE);
|
||||
delay_flag_change=0;
|
||||
}
|
||||
else delay_flag_change++;
|
||||
}
|
||||
else delay_flag_change=0;
|
||||
// If called from queueDelta etc. it is an error to start a new move since it
|
||||
// would invalidate old computation resulting in unpredicted behaviour.
|
||||
// lcd controller can start new moves, so we disallow it if called from within
|
||||
// a move command.
|
||||
UI_SLOW(allowNewMoves);
|
||||
//check if emergency stop button is pressed
|
||||
if(uid.lastButtonAction==UI_ACTION_OK_NEXT_BACK)Commands::emergencyStop();
|
||||
}
|
||||
|
||||
/** \brief Waits until movement cache is empty.
|
||||
|
@ -596,6 +644,7 @@ void Commands::processGCode(GCode *com)
|
|||
{
|
||||
GCode::readFromSerial();
|
||||
Commands::checkForPeriodicalActions(true);
|
||||
if (Printer::isMenuMode(MENU_MODE_STOP_REQUESTED))break;
|
||||
}
|
||||
break;
|
||||
case 20: // G20 Units to inches
|
||||
|
@ -617,20 +666,48 @@ void Commands::processGCode(GCode *com)
|
|||
#if FEATURE_Z_PROBE
|
||||
case 29: // G29 3 points, build average
|
||||
{
|
||||
float zMin_save=Printer::zMin ;
|
||||
if(!Printer::isHomed()) Printer::homeAxis(true,true,true);
|
||||
//to avoid hit on plates low, down bed a little
|
||||
if (Printer::currentPosition[Z_AXIS] < Printer::zMin+5) Printer::moveToReal(IGNORE_COORDINATE,IGNORE_COORDINATE,Printer::zMin+5,IGNORE_COORDINATE,Printer::homingFeedrate[Z_AXIS]);
|
||||
GCode::executeFString(Com::tZProbeStartScript);
|
||||
bool oldAutolevel = Printer::isAutolevelActive();
|
||||
Printer::setAutolevelActive(false);
|
||||
float sum = 0,last,oldFeedrate = Printer::feedrate;
|
||||
Printer::moveTo(EEPROM::zProbeX1(),EEPROM::zProbeY1(),IGNORE_COORDINATE,IGNORE_COORDINATE,EEPROM::zProbeXYSpeed());
|
||||
sum = Printer::runZProbe(true,false,Z_PROBE_REPETITIONS,false);
|
||||
if(sum<0) break;
|
||||
if(sum<0)
|
||||
{
|
||||
Printer::zMin = zMin_save;
|
||||
Printer::setAutolevelActive(true);
|
||||
if (Printer::realZPosition()<-200)Printer::homeAxis(false,false,true);
|
||||
//to avoid hit on plates, low down bed a little
|
||||
Printer::moveToReal(IGNORE_COORDINATE,IGNORE_COORDINATE,Printer::zMin+5,IGNORE_COORDINATE,Printer::homingFeedrate[Z_AXIS]);
|
||||
break;
|
||||
}
|
||||
Printer::moveTo(EEPROM::zProbeX2(),EEPROM::zProbeY2(),IGNORE_COORDINATE,IGNORE_COORDINATE,EEPROM::zProbeXYSpeed());
|
||||
last = Printer::runZProbe(false,false);
|
||||
if(last<0) break;
|
||||
if(last<0)
|
||||
{
|
||||
Printer::zMin = zMin_save;
|
||||
Printer::setAutolevelActive(true);
|
||||
if (Printer::realZPosition()<-200)Printer::homeAxis(false,false,true);
|
||||
//to avoid hit on plates, low down bed a little
|
||||
Printer::moveToReal(IGNORE_COORDINATE,IGNORE_COORDINATE,Printer::zMin+5,IGNORE_COORDINATE,Printer::homingFeedrate[Z_AXIS]);
|
||||
break;
|
||||
}
|
||||
sum+= last;
|
||||
Printer::moveTo(EEPROM::zProbeX3(),EEPROM::zProbeY3(),IGNORE_COORDINATE,IGNORE_COORDINATE,EEPROM::zProbeXYSpeed());
|
||||
last = Printer::runZProbe(false,true);
|
||||
if(last<0) break;
|
||||
if(last<0)
|
||||
{
|
||||
Printer::zMin = zMin_save;
|
||||
Printer::setAutolevelActive(true);
|
||||
if (Printer::realZPosition()<-200)Printer::homeAxis(false,false,true);
|
||||
//to avoid hit on plates, low down bed a little
|
||||
Printer::moveToReal(IGNORE_COORDINATE,IGNORE_COORDINATE,Printer::zMin+5,IGNORE_COORDINATE,Printer::homingFeedrate[Z_AXIS]);
|
||||
break;
|
||||
}
|
||||
sum+= last;
|
||||
sum *= 0.33333333333333;
|
||||
Com::printFLN(Com::tZProbeAverage,sum);
|
||||
|
@ -665,11 +742,18 @@ void Commands::processGCode(GCode *com)
|
|||
{
|
||||
uint8_t p = (com->hasP() ? (uint8_t)com->P : 3);
|
||||
bool oldAutolevel = Printer::isAutolevelActive();
|
||||
if(!Printer::isHomed()) Printer::homeAxis(true,true,true);
|
||||
//to avoid hit on plates, low down bed a little
|
||||
if (Printer::currentPosition[Z_AXIS] < Printer::zMin+5) Printer::moveToReal(IGNORE_COORDINATE,IGNORE_COORDINATE,Printer::zMin+5,IGNORE_COORDINATE,Printer::homingFeedrate[Z_AXIS]);
|
||||
Printer::setAutolevelActive(false);
|
||||
Printer::runZProbe(p & 1,p & 2);
|
||||
Printer::setAutolevelActive(oldAutolevel);
|
||||
Printer::updateCurrentPosition(p & 1);
|
||||
printCurrentPosition(PSTR("G30 "));
|
||||
if (Printer::realZPosition()<-200)Printer::homeAxis(false,false,true);
|
||||
//to avoid hit on plates
|
||||
Printer::moveToReal(IGNORE_COORDINATE,IGNORE_COORDINATE,Printer::zMin+5,IGNORE_COORDINATE,Printer::homingFeedrate[Z_AXIS]);
|
||||
|
||||
}
|
||||
break;
|
||||
case 31: // G31 display hall sensor output
|
||||
|
@ -680,6 +764,10 @@ void Commands::processGCode(GCode *com)
|
|||
#if FEATURE_AUTOLEVEL
|
||||
case 32: // G32 Auto-Bed leveling
|
||||
{
|
||||
float zMin_save=Printer::zMin;
|
||||
if(!Printer::isHomed()) Printer::homeAxis(true,true,true);
|
||||
//to avoid hit on plates, low down bed a little
|
||||
if (Printer::currentPosition[Z_AXIS] < Printer::zMin+5) Printer::moveToReal(IGNORE_COORDINATE,IGNORE_COORDINATE,Printer::zMin+5,IGNORE_COORDINATE,Printer::homingFeedrate[Z_AXIS]);
|
||||
GCode::executeFString(Com::tZProbeStartScript);
|
||||
//bool iterate = com->hasP() && com->P>0;
|
||||
Printer::coordinateOffset[X_AXIS] = Printer::coordinateOffset[Y_AXIS] = Printer::coordinateOffset[Z_AXIS] = 0;
|
||||
|
@ -687,13 +775,37 @@ void Commands::processGCode(GCode *com)
|
|||
float h1,h2,h3,hc,oldFeedrate = Printer::feedrate;
|
||||
Printer::moveTo(EEPROM::zProbeX1(),EEPROM::zProbeY1(),IGNORE_COORDINATE,IGNORE_COORDINATE,EEPROM::zProbeXYSpeed());
|
||||
h1 = Printer::runZProbe(true,false,Z_PROBE_REPETITIONS,false);
|
||||
if(h1 < 0) break;
|
||||
if(h1<0)
|
||||
{
|
||||
Printer::zMin = zMin_save;
|
||||
Printer::setAutolevelActive(true);
|
||||
if (Printer::realZPosition()<-200)Printer::homeAxis(false,false,true);
|
||||
//to avoid hit on plates, low down bed a little
|
||||
Printer::moveToReal(IGNORE_COORDINATE,IGNORE_COORDINATE,Printer::zMin+5,IGNORE_COORDINATE,Printer::homingFeedrate[Z_AXIS]);
|
||||
break;
|
||||
}
|
||||
Printer::moveTo(EEPROM::zProbeX2(),EEPROM::zProbeY2(),IGNORE_COORDINATE,IGNORE_COORDINATE,EEPROM::zProbeXYSpeed());
|
||||
h2 = Printer::runZProbe(false,false);
|
||||
if(h2 < 0) break;
|
||||
if(h2<0)
|
||||
{
|
||||
Printer::zMin = zMin_save;
|
||||
Printer::setAutolevelActive(true);
|
||||
if (Printer::realZPosition()<-200)Printer::homeAxis(false,false,true);
|
||||
//to avoid hit on plates, low down bed a little
|
||||
Printer::moveToReal(IGNORE_COORDINATE,IGNORE_COORDINATE,Printer::zMin+5,IGNORE_COORDINATE,Printer::homingFeedrate[Z_AXIS]);
|
||||
break;
|
||||
}
|
||||
Printer::moveTo(EEPROM::zProbeX3(),EEPROM::zProbeY3(),IGNORE_COORDINATE,IGNORE_COORDINATE,EEPROM::zProbeXYSpeed());
|
||||
h3 = Printer::runZProbe(false,true);
|
||||
if(h3 < 0) break;
|
||||
if(h3<0)
|
||||
{
|
||||
Printer::zMin = zMin_save;
|
||||
Printer::setAutolevelActive(true);
|
||||
if (Printer::realZPosition()<-200)Printer::homeAxis(false,false,true);
|
||||
//to avoid hit on plates, low down bed a little
|
||||
Printer::moveToReal(IGNORE_COORDINATE,IGNORE_COORDINATE,Printer::zMin+5,IGNORE_COORDINATE,Printer::homingFeedrate[Z_AXIS]);
|
||||
break;
|
||||
}
|
||||
Printer::buildTransformationMatrix(h1,h2,h3);
|
||||
//-(Rxx*Ryz*y-Rxz*Ryx*y+(Rxz*Ryy-Rxy*Ryz)*x)/(Rxy*Ryx-Rxx*Ryy)
|
||||
// z = z-deviation from origin due to bed transformation
|
||||
|
@ -1126,7 +1238,23 @@ void Commands::processMCode(GCode *com)
|
|||
Printer::enableZStepper();
|
||||
}
|
||||
break;
|
||||
#if ENABLE_CLEAN_NOZZLE
|
||||
case 100:
|
||||
Printer::cleanNozzle();
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if CASE_LIGHTS_PIN>=0
|
||||
case 101://light on
|
||||
#if UI_AUTOLIGHTOFF_AFTER!=0
|
||||
UIDisplay::ui_autolightoff_time=HAL::timeInMilliseconds()+EEPROM::timepowersaving;
|
||||
#endif
|
||||
WRITE(CASE_LIGHTS_PIN,1);
|
||||
break;
|
||||
case 102://light off
|
||||
WRITE(CASE_LIGHTS_PIN,0);
|
||||
break;
|
||||
#endif // CASE_LIGHTS_PIN
|
||||
case 104: // M104 temperature
|
||||
#if NUM_EXTRUDER > 0
|
||||
if(reportTempsensorError()) break;
|
||||
|
@ -1186,6 +1314,7 @@ void Commands::processMCode(GCode *com)
|
|||
printedTime = currentTime;
|
||||
}
|
||||
Commands::checkForPeriodicalActions(true);
|
||||
if (Printer::isMenuMode(MENU_MODE_STOP_REQUESTED))break;
|
||||
//gcode_read_serial();
|
||||
#if RETRACT_DURING_HEATUP
|
||||
if (actExtruder == Extruder::current && actExtruder->waitRetractUnits > 0 && !retracted && dirRising && actExtruder->tempControl.currentTemperatureC > actExtruder->waitRetractTemperature)
|
||||
|
@ -1236,6 +1365,7 @@ void Commands::processMCode(GCode *com)
|
|||
codenum = previousMillisCmd = HAL::timeInMilliseconds();
|
||||
}
|
||||
Commands::checkForPeriodicalActions(true);
|
||||
if (Printer::isMenuMode(MENU_MODE_STOP_REQUESTED))break;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
@ -1256,6 +1386,7 @@ void Commands::processMCode(GCode *com)
|
|||
codenum = HAL::timeInMilliseconds();
|
||||
}
|
||||
Commands::checkForPeriodicalActions(true);
|
||||
if (Printer::isMenuMode(MENU_MODE_STOP_REQUESTED))break;
|
||||
for(uint8_t h = 0; h < NUM_TEMPERATURE_LOOPS; h++)
|
||||
{
|
||||
TemperatureController *act = tempController[h];
|
||||
|
@ -1505,7 +1636,7 @@ void Commands::processMCode(GCode *com)
|
|||
Com::printInfoFLN(PSTR("Watchdog feature was not compiled into this version!"));
|
||||
#endif
|
||||
break;
|
||||
#if defined(BEEPER_PIN) && BEEPER_PIN>=0
|
||||
#if defined(BEEPER_PIN) && BEEPER_PIN>=0 && FEATURE_BEEPER
|
||||
case 300: // M300
|
||||
{
|
||||
int beepS = 1;
|
||||
|
@ -1711,6 +1842,27 @@ void Commands::executeGCode(GCode *com)
|
|||
}
|
||||
}
|
||||
}
|
||||
//periodical command from repetier should not be taken in account for wake up
|
||||
if(!((com->hasM() && com->M ==105) || Printer::isMenuMode(MENU_MODE_SD_PRINTING))) // Process M Code
|
||||
{
|
||||
Printer::setMenuMode(MENU_MODE_GCODE_PROCESSING,true);
|
||||
Printer::setMenuMode(MENU_MODE_PRINTING,true);
|
||||
#if UI_AUTOLIGHTOFF_AFTER!=0
|
||||
if (EEPROM::timepowersaving>0 && EEPROM::bkeeplighton )
|
||||
{
|
||||
UIDisplay::ui_autolightoff_time=HAL::timeInMilliseconds()+EEPROM::timepowersaving;
|
||||
#if CASE_LIGHTS_PIN > 0
|
||||
if (!(READ(CASE_LIGHTS_PIN)) && EEPROM::buselight)
|
||||
{
|
||||
TOGGLE(CASE_LIGHTS_PIN);
|
||||
}
|
||||
#endif
|
||||
#if defined(UI_BACKLIGHT_PIN)
|
||||
if (!(READ(UI_BACKLIGHT_PIN))) WRITE(UI_BACKLIGHT_PIN, HIGH);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
}
|
||||
if(com->hasG()) processGCode(com);
|
||||
else if(com->hasM()) processMCode(com);
|
||||
else if(com->hasT()) // Process T code
|
||||
|
@ -1726,6 +1878,33 @@ void Commands::executeGCode(GCode *com)
|
|||
com->printCommand();
|
||||
}
|
||||
}
|
||||
//if some extruder command and we are not in pause - check filament sensor
|
||||
if (com->hasE() && !Printer:: isMenuMode(MENU_MODE_SD_PAUSED))
|
||||
{
|
||||
if ((Extruder::current->id)==0)//check correct extruder sensor
|
||||
{
|
||||
#if defined(FIL_SENSOR1_PIN)
|
||||
if(EEPROM::busesensor && READ(FIL_SENSOR1_PIN))uid.executeAction(UI_ACTION_NO_FILAMENT,true);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
#if defined(FIL_SENSOR2_PIN)
|
||||
if(EEPROM::busesensor &&READ(FIL_SENSOR2_PIN))uid.executeAction(UI_ACTION_NO_FILAMENT,true);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
//periodical command from repetier should not be taken in account for wake up
|
||||
if(!((com->hasM() && com->M ==105) || Printer::isMenuMode(MENU_MODE_SD_PRINTING))) // Process M Code
|
||||
{
|
||||
#if UI_AUTOLIGHTOFF_AFTER!=0
|
||||
if (EEPROM::timepowersaving>0 && EEPROM::bkeeplighton )
|
||||
{//reset timer if any wait command was processing
|
||||
UIDisplay::ui_autolightoff_time=HAL::timeInMilliseconds()+EEPROM::timepowersaving;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
Printer::setMenuMode(MENU_MODE_GCODE_PROCESSING,false);
|
||||
}
|
||||
|
||||
void Commands::emergencyStop()
|
||||
|
|
|
@ -27,6 +27,9 @@
|
|||
class Commands
|
||||
{
|
||||
public:
|
||||
static uint8_t delay_flag_change;
|
||||
static uint8_t delay_flag_change2;
|
||||
static uint8_t countersensor;
|
||||
static void commandLoop();
|
||||
static void checkForPeriodicalActions(bool allowNewMoves);
|
||||
static void processArc(GCode *com);
|
||||
|
|
|
@ -126,7 +126,7 @@ is a full cartesian system where x, y and z moves are handled by separate motors
|
|||
Cases 1, 2, 8 and 9 cover all needed xy and xz H gantry systems. If you get results mirrored etc. you can swap motor connections for x and y.
|
||||
If a motor turns in the wrong direction change INVERT_X_DIR or INVERT_Y_DIR.
|
||||
*/
|
||||
#define DRIVE_SYSTEM 0
|
||||
#define DRIVE_SYSTEM CARTESIAN
|
||||
|
||||
// ##########################################################################################
|
||||
// ## Calibration ##
|
||||
|
|
|
@ -22,8 +22,35 @@
|
|||
*/
|
||||
|
||||
#include "Repetier.h"
|
||||
|
||||
|
||||
//internal usage of update value
|
||||
void EEPROM:: update(long P,uint8_t T,long S,float X)
|
||||
{
|
||||
#if EEPROM_MODE!=0
|
||||
if(T>=0 &&T<=3 && P>0 && P<=2048) //SDEEPROM_SIZE =2048 // Minimum size used by Eeprom.cpp
|
||||
switch(T)
|
||||
{
|
||||
case EPR_TYPE_BYTE:
|
||||
HAL::eprSetByte(P,(uint8_t)S);
|
||||
break;
|
||||
case EPR_TYPE_INT:
|
||||
HAL::eprSetInt16(P,(int)S);
|
||||
break;
|
||||
case EPR_TYPE_LONG:
|
||||
HAL::eprSetInt32(P,(int32_t)S);
|
||||
break;
|
||||
case EPR_TYPE_FLOAT:
|
||||
HAL::eprSetFloat(P,X);
|
||||
break;
|
||||
}
|
||||
uint8_t newcheck = computeChecksum();
|
||||
if(newcheck != HAL::eprGetByte(EPR_INTEGRITY_BYTE))
|
||||
HAL::eprSetByte(EPR_INTEGRITY_BYTE,newcheck);
|
||||
readDataFromEEPROM();
|
||||
Extruder::selectExtruderById(Extruder::current->id);
|
||||
#else
|
||||
Com::printErrorF(Com::tNoEEPROMSupport);
|
||||
#endif
|
||||
}
|
||||
void EEPROM::update(GCode *com)
|
||||
{
|
||||
#if EEPROM_MODE != 0
|
||||
|
@ -57,6 +84,19 @@ void EEPROM::restoreEEPROMSettingsFromConfiguration()
|
|||
#if EEPROM_MODE != 0
|
||||
baudrate = BAUDRATE;
|
||||
maxInactiveTime = MAX_INACTIVE_TIME*1000L;
|
||||
EEPROM::buselight = bool(CASE_LIGHT_DEFAULT_ON);
|
||||
EEPROM::bkeeplighton = bool(CASE_KEEP_LIGHT_DEFAULT_ON);
|
||||
UIDisplay::display_mode=CASE_DISPLAY_MODE_DEFAULT;
|
||||
HAL::enablesound = bool(CASE_SOUND_DEFAULT_ON);
|
||||
EEPROM::busesensor = bool(CASE_FILAMENT_SENSOR_DEFAULT_ON);
|
||||
EEPROM::btopsensor = bool(CASE_TOP_SENSOR_DEFAULT_ON);
|
||||
EEPROM::ftemp_ext_pla=UI_SET_PRESET_EXTRUDER_TEMP_PLA;
|
||||
EEPROM::ftemp_ext_abs=UI_SET_PRESET_EXTRUDER_TEMP_ABS;
|
||||
EEPROM::ftemp_bed_pla=UI_SET_PRESET_HEATED_BED_TEMP_PLA;
|
||||
EEPROM::ftemp_bed_abs=UI_SET_PRESET_HEATED_BED_TEMP_ABS;
|
||||
#if CASE_LIGHTS_PIN>=0
|
||||
WRITE(CASE_LIGHTS_PIN, byte(EEPROM::buselight));
|
||||
#endif // CASE_LIGHTS_PIN
|
||||
stepperInactiveTime = STEPPER_INACTIVE_TIME*1000L;
|
||||
Printer::axisStepsPerMM[X_AXIS] = XAXIS_STEPS_PER_MM;
|
||||
Printer::axisStepsPerMM[Y_AXIS] = YAXIS_STEPS_PER_MM;
|
||||
|
@ -301,6 +341,21 @@ void EEPROM::restoreEEPROMSettingsFromConfiguration()
|
|||
|
||||
}
|
||||
|
||||
bool EEPROM::buselight=false;
|
||||
bool EEPROM::busesensor=false;
|
||||
bool EEPROM::btopsensor=false;
|
||||
bool EEPROM::bkeeplighton=true;
|
||||
float EEPROM::ftemp_ext_pla=UI_SET_PRESET_EXTRUDER_TEMP_PLA;
|
||||
float EEPROM::ftemp_ext_abs=UI_SET_PRESET_EXTRUDER_TEMP_ABS;
|
||||
float EEPROM::ftemp_bed_pla=UI_SET_PRESET_HEATED_BED_TEMP_PLA;
|
||||
float EEPROM::ftemp_bed_abs=UI_SET_PRESET_HEATED_BED_TEMP_ABS;
|
||||
|
||||
#if UI_AUTOLIGHTOFF_AFTER !=0
|
||||
millis_t EEPROM::timepowersaving=1000 * 60 * 30; //30 min
|
||||
#else
|
||||
millis_t EEPROM::timepowersaving=0;
|
||||
#endif
|
||||
|
||||
void EEPROM::storeDataIntoEEPROM(uint8_t corrupted)
|
||||
{
|
||||
#if EEPROM_MODE != 0
|
||||
|
@ -356,9 +411,38 @@ void EEPROM::storeDataIntoEEPROM(uint8_t corrupted)
|
|||
HAL::eprSetFloat(EPR_X_LENGTH,Printer::xLength);
|
||||
HAL::eprSetFloat(EPR_Y_LENGTH,Printer::yLength);
|
||||
HAL::eprSetFloat(EPR_Z_LENGTH,Printer::zLength);
|
||||
|
||||
#if NONLINEAR_SYSTEM
|
||||
HAL::eprSetFloat(EPR_DELTA_HORIZONTAL_RADIUS, Printer::radius0);
|
||||
#endif
|
||||
HAL::eprSetByte(EPR_LIGHT_ON,EEPROM::buselight);
|
||||
HAL::eprSetByte(EPR_KEEP_LIGHT_ON,EEPROM::bkeeplighton);
|
||||
|
||||
HAL::eprSetByte(EPR_DISPLAY_MODE,UIDisplay::display_mode);
|
||||
#if defined(FIL_SENSOR1_PIN)
|
||||
HAL::eprSetByte(EPR_FIL_SENSOR_ON,EEPROM::busesensor);
|
||||
#endif
|
||||
#if defined(TOP_SENSOR_PIN)
|
||||
HAL::eprSetByte(EPR_TOP_SENSOR_ON,EEPROM::btopsensor);
|
||||
#endif
|
||||
#if FEATURE_BEEPER
|
||||
HAL::eprSetByte(EPR_SOUND_ON,HAL::enablesound);
|
||||
#endif
|
||||
#if UI_AUTOLIGHTOFF_AFTER !=0
|
||||
HAL::eprSetInt32(EPR_POWERSAVE_AFTER_TIME,EEPROM::timepowersaving);
|
||||
#endif
|
||||
HAL::eprSetFloat(EPR_MANUAL_LEVEL_X1, MANUAL_LEVEL_X1);
|
||||
HAL::eprSetFloat(EPR_MANUAL_LEVEL_Y1, MANUAL_LEVEL_Y1);
|
||||
HAL::eprSetFloat(EPR_MANUAL_LEVEL_X2, MANUAL_LEVEL_X2);
|
||||
HAL::eprSetFloat(EPR_MANUAL_LEVEL_Y2, MANUAL_LEVEL_Y2);
|
||||
HAL::eprSetFloat(EPR_MANUAL_LEVEL_X3, MANUAL_LEVEL_X3);
|
||||
HAL::eprSetFloat(EPR_MANUAL_LEVEL_Y3, MANUAL_LEVEL_Y3);
|
||||
HAL::eprSetFloat(EPR_MANUAL_LEVEL_X4, MANUAL_LEVEL_X4);
|
||||
HAL::eprSetFloat(EPR_MANUAL_LEVEL_Y4, MANUAL_LEVEL_Y4);
|
||||
HAL::eprSetFloat(EPR_TEMP_BED_PLA, EEPROM::ftemp_bed_pla);
|
||||
HAL::eprSetFloat(EPR_TEMP_BED_ABS, EEPROM::ftemp_bed_abs);
|
||||
HAL::eprSetFloat(EPR_TEMP_EXT_PLA, EEPROM::ftemp_ext_pla);
|
||||
HAL::eprSetFloat(EPR_TEMP_EXT_ABS, EEPROM::ftemp_ext_abs);
|
||||
#if ENABLE_BACKLASH_COMPENSATION
|
||||
HAL::eprSetFloat(EPR_BACKLASH_X,Printer::backlashX);
|
||||
HAL::eprSetFloat(EPR_BACKLASH_Y,Printer::backlashY);
|
||||
|
@ -445,6 +529,18 @@ void EEPROM::initalizeUncached()
|
|||
HAL::eprSetFloat(EPR_Z_PROBE_Y2,Z_PROBE_Y2);
|
||||
HAL::eprSetFloat(EPR_Z_PROBE_X3,Z_PROBE_X3);
|
||||
HAL::eprSetFloat(EPR_Z_PROBE_Y3,Z_PROBE_Y3);
|
||||
HAL::eprSetFloat(EPR_MANUAL_LEVEL_X1, MANUAL_LEVEL_X1);
|
||||
HAL::eprSetFloat(EPR_MANUAL_LEVEL_Y1, MANUAL_LEVEL_Y1);
|
||||
HAL::eprSetFloat(EPR_MANUAL_LEVEL_X2, MANUAL_LEVEL_X2);
|
||||
HAL::eprSetFloat(EPR_MANUAL_LEVEL_Y2, MANUAL_LEVEL_Y2);
|
||||
HAL::eprSetFloat(EPR_MANUAL_LEVEL_X3, MANUAL_LEVEL_X3);
|
||||
HAL::eprSetFloat(EPR_MANUAL_LEVEL_Y3, MANUAL_LEVEL_Y3);
|
||||
HAL::eprSetFloat(EPR_MANUAL_LEVEL_X4, MANUAL_LEVEL_X4);
|
||||
HAL::eprSetFloat(EPR_MANUAL_LEVEL_Y4, MANUAL_LEVEL_Y4);
|
||||
HAL::eprSetFloat(EPR_TEMP_BED_PLA, EEPROM::ftemp_bed_pla);
|
||||
HAL::eprSetFloat(EPR_TEMP_BED_ABS, EEPROM::ftemp_bed_abs);
|
||||
HAL::eprSetFloat(EPR_TEMP_EXT_PLA, EEPROM::ftemp_ext_pla);
|
||||
HAL::eprSetFloat(EPR_TEMP_EXT_ABS, EEPROM::ftemp_ext_abs);
|
||||
HAL::eprSetFloat(EPR_AXISCOMP_TANXY,AXISCOMP_TANXY);
|
||||
HAL::eprSetFloat(EPR_AXISCOMP_TANYZ,AXISCOMP_TANYZ);
|
||||
HAL::eprSetFloat(EPR_AXISCOMP_TANXZ,AXISCOMP_TANXZ);
|
||||
|
@ -522,6 +618,32 @@ void EEPROM::readDataFromEEPROM()
|
|||
#if NONLINEAR_SYSTEM
|
||||
Printer::radius0 = HAL::eprGetFloat(EPR_DELTA_HORIZONTAL_RADIUS);
|
||||
#endif
|
||||
EEPROM::buselight=HAL::eprGetByte(EPR_LIGHT_ON);
|
||||
EEPROM::bkeeplighton=HAL::eprGetByte(EPR_KEEP_LIGHT_ON);
|
||||
UIDisplay::display_mode=HAL::eprGetByte(EPR_DISPLAY_MODE);
|
||||
//need to be sure a valid value is set
|
||||
if(!((UIDisplay::display_mode==ADVANCED_MODE)||(UIDisplay::display_mode==EASY_MODE)))UIDisplay::display_mode=ADVANCED_MODE;
|
||||
#if CASE_LIGHTS_PIN>=0
|
||||
WRITE(CASE_LIGHTS_PIN, byte(EEPROM::buselight));
|
||||
#endif // CASE_LIGHTS_PIN
|
||||
#if defined(FIL_SENSOR1_PIN)
|
||||
EEPROM::busesensor=HAL::eprGetByte(EPR_FIL_SENSOR_ON);
|
||||
#endif
|
||||
#if defined(TOP_SENSOR_PIN)
|
||||
EEPROM::btopsensor=HAL::eprGetByte(EPR_TOP_SENSOR_ON);
|
||||
#endif
|
||||
#if FEATURE_BEEPER
|
||||
HAL::enablesound=HAL::eprGetByte(EPR_SOUND_ON);
|
||||
#endif
|
||||
#if UI_AUTOLIGHTOFF_AFTER >0
|
||||
EEPROM::timepowersaving = HAL::eprGetInt32(EPR_POWERSAVE_AFTER_TIME);
|
||||
//new value do reset time
|
||||
UIDisplay::ui_autolightoff_time=HAL::timeInMilliseconds()+EEPROM::timepowersaving;
|
||||
#endif
|
||||
EEPROM::ftemp_ext_pla= HAL::eprGetFloat(EPR_TEMP_EXT_PLA);
|
||||
EEPROM::ftemp_ext_abs= HAL::eprGetFloat(EPR_TEMP_EXT_ABS);
|
||||
EEPROM::ftemp_bed_pla= HAL::eprGetFloat(EPR_TEMP_BED_PLA);
|
||||
EEPROM::ftemp_bed_abs= HAL::eprGetFloat(EPR_TEMP_BED_ABS);
|
||||
#if ENABLE_BACKLASH_COMPENSATION
|
||||
Printer::backlashX = HAL::eprGetFloat(EPR_BACKLASH_X);
|
||||
Printer::backlashY = HAL::eprGetFloat(EPR_BACKLASH_Y);
|
||||
|
@ -608,6 +730,14 @@ void EEPROM::readDataFromEEPROM()
|
|||
HAL::eprSetFloat(EPR_Z_PROBE_Y2,Z_PROBE_Y2);
|
||||
HAL::eprSetFloat(EPR_Z_PROBE_X3,Z_PROBE_X3);
|
||||
HAL::eprSetFloat(EPR_Z_PROBE_Y3,Z_PROBE_Y3);
|
||||
HAL::eprSetFloat(EPR_MANUAL_LEVEL_X1, MANUAL_LEVEL_X1);
|
||||
HAL::eprSetFloat(EPR_MANUAL_LEVEL_Y1, MANUAL_LEVEL_Y1);
|
||||
HAL::eprSetFloat(EPR_MANUAL_LEVEL_X2, MANUAL_LEVEL_X2);
|
||||
HAL::eprSetFloat(EPR_MANUAL_LEVEL_Y2, MANUAL_LEVEL_Y2);
|
||||
HAL::eprSetFloat(EPR_MANUAL_LEVEL_X3, MANUAL_LEVEL_X3);
|
||||
HAL::eprSetFloat(EPR_MANUAL_LEVEL_Y3, MANUAL_LEVEL_Y3);
|
||||
HAL::eprSetFloat(EPR_MANUAL_LEVEL_X4, MANUAL_LEVEL_X4);
|
||||
HAL::eprSetFloat(EPR_MANUAL_LEVEL_Y4, MANUAL_LEVEL_Y4);
|
||||
}
|
||||
if(version<4)
|
||||
{
|
||||
|
@ -788,6 +918,25 @@ void EEPROM::writeSettings()
|
|||
writeFloat(EPR_X_LENGTH,Com::tEPRXMaxLength);
|
||||
writeFloat(EPR_Y_LENGTH,Com::tEPRYMaxLength);
|
||||
writeFloat(EPR_Z_LENGTH,Com::tEPRZMaxLength);
|
||||
writeByte(EPR_LIGHT_ON,Com::tLightOn);
|
||||
writeByte(EPR_KEEP_LIGHT_ON,Com::tKeepLightOn);
|
||||
#if defined(FIL_SENSOR1_PIN)
|
||||
writeByte(EPR_FIL_SENSOR_ON,Com::tSensorOn);
|
||||
#endif
|
||||
#if defined(TOP_SENSOR_PIN)
|
||||
writeByte(EPR_TOP_SENSOR_ON,Com::tTopsensorOn);
|
||||
#endif
|
||||
#if FEATURE_BEEPER
|
||||
writeByte(EPR_SOUND_ON,Com::tSoundOn);
|
||||
#endif
|
||||
#if UI_AUTOLIGHTOFF_AFTER !=0
|
||||
writeLong(EPR_POWERSAVE_AFTER_TIME,Com::tPowerSave);
|
||||
#endif
|
||||
writeFloat(EPR_TEMP_EXT_PLA,Com::tTempExtPLA);
|
||||
writeFloat(EPR_TEMP_EXT_ABS,Com::tTempExtABS);
|
||||
writeFloat(EPR_TEMP_BED_PLA,Com::tTempBedPLA);
|
||||
writeFloat(EPR_TEMP_BED_ABS,Com::tTempBedABS);
|
||||
writeByte(EPR_DISPLAY_MODE,Com::tDisplayMode);
|
||||
#if ENABLE_BACKLASH_COMPENSATION
|
||||
writeFloat(EPR_BACKLASH_X,Com::tEPRXBacklash);
|
||||
writeFloat(EPR_BACKLASH_Y,Com::tEPRYBacklash);
|
||||
|
@ -830,6 +979,14 @@ void EEPROM::writeSettings()
|
|||
writeFloat(EPR_Z_MAX_TRAVEL_ACCEL,Com::tEPRZTravelAcceleration);
|
||||
#endif
|
||||
#endif
|
||||
writeFloat(EPR_MANUAL_LEVEL_X1, Com::tManualProbeX1);
|
||||
writeFloat(EPR_MANUAL_LEVEL_Y1, Com::tManualProbeY1);
|
||||
writeFloat(EPR_MANUAL_LEVEL_X2, Com::tManualProbeX2);
|
||||
writeFloat(EPR_MANUAL_LEVEL_Y2, Com::tManualProbeY2);
|
||||
writeFloat(EPR_MANUAL_LEVEL_X3, Com::tManualProbeX3);
|
||||
writeFloat(EPR_MANUAL_LEVEL_Y3, Com::tManualProbeY3);
|
||||
writeFloat(EPR_MANUAL_LEVEL_X4, Com::tManualProbeX4);
|
||||
writeFloat(EPR_MANUAL_LEVEL_Y4, Com::tManualProbeY4);
|
||||
#if FEATURE_Z_PROBE
|
||||
writeFloat(EPR_Z_PROBE_HEIGHT,Com::tZProbeHeight);
|
||||
writeFloat(EPR_Z_PROBE_BED_DISTANCE,Com::tZProbeBedDitance);
|
||||
|
|
|
@ -105,12 +105,31 @@ have problems with other modules using the eeprom */
|
|||
#define EPR_DELTA_DIAGONAL_CORRECTION_A 933
|
||||
#define EPR_DELTA_DIAGONAL_CORRECTION_B 937
|
||||
#define EPR_DELTA_DIAGONAL_CORRECTION_C 941
|
||||
#define EPR_TOUCHSCREEN 946 // - 975 = 30 byte for touchscreen calibration data
|
||||
#define EPR_LIGHT_ON 946
|
||||
#define EPR_SOUND_ON 947
|
||||
#define EPR_POWERSAVE_AFTER_TIME 948
|
||||
#define EPR_DISPLAY_MODE 952
|
||||
#define EPR_FIL_SENSOR_ON 953
|
||||
#define EPR_KEEP_LIGHT_ON 954
|
||||
#define EPR_MANUAL_LEVEL_X1 955
|
||||
#define EPR_MANUAL_LEVEL_Y1 959
|
||||
#define EPR_MANUAL_LEVEL_X2 963
|
||||
#define EPR_MANUAL_LEVEL_Y2 971
|
||||
#define EPR_MANUAL_LEVEL_X3 975
|
||||
#define EPR_MANUAL_LEVEL_Y3 979
|
||||
#define EPR_MANUAL_LEVEL_X4 983
|
||||
#define EPR_MANUAL_LEVEL_Y4 987
|
||||
#define EPR_TEMP_EXT_PLA 991
|
||||
#define EPR_TEMP_EXT_ABS 995
|
||||
#define EPR_TEMP_BED_PLA 999
|
||||
#define EPR_TEMP_BED_ABS 1003
|
||||
#define EPR_TOP_SENSOR_ON 1007
|
||||
#define EPR_TOUCHSCREEN 1008 // - 1027 = 30 byte for touchscreen calibration data
|
||||
|
||||
// Axis compensation
|
||||
#define EPR_AXISCOMP_TANXY 976
|
||||
#define EPR_AXISCOMP_TANYZ 980
|
||||
#define EPR_AXISCOMP_TANXZ 984
|
||||
#define EPR_AXISCOMP_TANXY 1028
|
||||
#define EPR_AXISCOMP_TANYZ 1032
|
||||
#define EPR_AXISCOMP_TANXZ 1036
|
||||
|
||||
#if EEPROM_MODE != 0
|
||||
#define EEPROM_FLOAT(x) HAL::eprGetFloat(EPR_##x)
|
||||
|
@ -150,6 +169,12 @@ have problems with other modules using the eeprom */
|
|||
#define Z_PROBE_BED_DISTANCE 10.0
|
||||
#endif
|
||||
|
||||
#define EPR_TYPE_BYTE 0
|
||||
#define EPR_TYPE_INT 1
|
||||
#define EPR_TYPE_LONG 2
|
||||
#define EPR_TYPE_FLOAT 3
|
||||
|
||||
|
||||
class EEPROM
|
||||
{
|
||||
#if EEPROM_MODE != 0
|
||||
|
@ -166,11 +191,21 @@ public:
|
|||
|
||||
static void init();
|
||||
static void initBaudrate();
|
||||
static bool buselight;
|
||||
static bool busesensor;
|
||||
static bool btopsensor;
|
||||
static bool bkeeplighton;
|
||||
static float ftemp_ext_pla;
|
||||
static float ftemp_ext_abs;
|
||||
static float ftemp_bed_pla;
|
||||
static float ftemp_bed_abs;
|
||||
static millis_t timepowersaving;
|
||||
static void storeDataIntoEEPROM(uint8_t corrupted=0);
|
||||
static void readDataFromEEPROM();
|
||||
static void restoreEEPROMSettingsFromConfiguration();
|
||||
static void writeSettings();
|
||||
static void update(GCode *com);
|
||||
static void update(long P,uint8_t T,long S,float X);
|
||||
static void updatePrinterUsage();
|
||||
|
||||
static inline float zProbeSpeed() {
|
||||
|
@ -257,6 +292,69 @@ public:
|
|||
return Z_PROBE_BED_DISTANCE;
|
||||
#endif
|
||||
}
|
||||
static inline float ManualProbeX1() {
|
||||
#if EEPROM_MODE!=0
|
||||
return HAL::eprGetFloat(EPR_MANUAL_LEVEL_X1);
|
||||
#else
|
||||
return MANUAL_LEVEL_X1;
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline float ManualProbeY1() {
|
||||
#if EEPROM_MODE!=0
|
||||
return HAL::eprGetFloat(EPR_MANUAL_LEVEL_Y1);
|
||||
#else
|
||||
return MANUAL_LEVEL_Y1;
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline float ManualProbeX2() {
|
||||
#if EEPROM_MODE!=0
|
||||
return HAL::eprGetFloat(EPR_MANUAL_LEVEL_X2);
|
||||
#else
|
||||
return MANUAL_LEVEL_X2;
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline float ManualProbeY2() {
|
||||
#if EEPROM_MODE!=0
|
||||
return HAL::eprGetFloat(EPR_MANUAL_LEVEL_Y2);
|
||||
#else
|
||||
return MANUAL_LEVEL_Y2;
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline float ManualProbeX3() {
|
||||
#if EEPROM_MODE!=0
|
||||
return HAL::eprGetFloat(EPR_MANUAL_LEVEL_X3);
|
||||
#else
|
||||
return MANUAL_LEVEL_X3;
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline float ManualProbeY3() {
|
||||
#if EEPROM_MODE!=0
|
||||
return HAL::eprGetFloat(EPR_MANUAL_LEVEL_Y3);
|
||||
#else
|
||||
return MANUAL_LEVEL_Y3;
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline float ManualProbeX4() {
|
||||
#if EEPROM_MODE!=0
|
||||
return HAL::eprGetFloat(EPR_MANUAL_LEVEL_X4);
|
||||
#else
|
||||
return MANUAL_LEVEL_X4;
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline float ManualProbeY4() {
|
||||
#if EEPROM_MODE!=0
|
||||
return HAL::eprGetFloat(EPR_MANUAL_LEVEL_Y4);
|
||||
#else
|
||||
return MANUAL_LEVEL_Y4;
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline float axisCompTanXY() {
|
||||
#if EEPROM_MODE != 0
|
||||
|
|
|
@ -67,6 +67,10 @@ short temptable_generic3[GENERIC_THERM_NUM_ENTRIES][2];
|
|||
Is called every 100ms.
|
||||
*/
|
||||
static uint8_t extruderTempErrors = 0;
|
||||
#if WARMUP_BED_ON_INIT
|
||||
static bool warmbed = false;
|
||||
static int warmbed_try = 0;
|
||||
#endif
|
||||
|
||||
void Extruder::manageTemperatures()
|
||||
{
|
||||
|
@ -103,7 +107,33 @@ void Extruder::manageTemperatures()
|
|||
else
|
||||
extruder[controller].coolerPWM = extruder[controller].coolerSpeed;
|
||||
}
|
||||
|
||||
#if WARMUP_BED_ON_INIT
|
||||
if ( controller==NUM_TEMPERATURE_LOOPS-1 && !warmbed) //this is bed and no warm up has been done
|
||||
{
|
||||
if (heatedBedController.currentTemperatureC < MIN_DEFECT_TEMPERATURE) //we are low
|
||||
{
|
||||
if (warmbed_try>100) //10x100ms
|
||||
{
|
||||
warmbed=true; //do not try anymore
|
||||
Extruder::setHeatedBedTemperature(0);//cut heat
|
||||
}
|
||||
else
|
||||
{
|
||||
warmbed_try++; //new try
|
||||
Extruder::setHeatedBedTemperature(40); //heat bed until 40 degres
|
||||
//raise heating tick
|
||||
playsound(100,10);
|
||||
UI_STATUS_UPD("PreHeat Bed");
|
||||
}
|
||||
}
|
||||
else
|
||||
{ //no issue so stop / cancel preheat
|
||||
warmbed=true; //do not try anymore
|
||||
Extruder::setHeatedBedTemperature(0);//cut heat
|
||||
}
|
||||
}
|
||||
else
|
||||
#endif
|
||||
// Check for obvious sensor errors
|
||||
if(!Printer::isAnyTempsensorDefect() && (act->currentTemperatureC < MIN_DEFECT_TEMPERATURE || act->currentTemperatureC > MAX_DEFECT_TEMPERATURE)) // no temp sensor or short in sensor, disable heater
|
||||
{
|
||||
|
@ -401,7 +431,7 @@ void TemperatureController::updateTempControlVars()
|
|||
|
||||
This function changes and initalizes a new extruder. This is also called, after the eeprom values are changed.
|
||||
*/
|
||||
void Extruder::selectExtruderById(uint8_t extruderId)
|
||||
void Extruder::selectExtruderById(uint8_t extruderId, bool changepos)
|
||||
{
|
||||
#if MIXING_EXTRUDER
|
||||
if(extruderId >= VIRTUAL_EXTRUDER)
|
||||
|
@ -458,7 +488,7 @@ void Extruder::selectExtruderById(uint8_t extruderId)
|
|||
float oldfeedrate = Printer::feedrate;
|
||||
Printer::offsetX = -Extruder::current->xOffset * Printer::invAxisStepsPerMM[X_AXIS];
|
||||
Printer::offsetY = -Extruder::current->yOffset * Printer::invAxisStepsPerMM[Y_AXIS];
|
||||
if(Printer::isHomed())
|
||||
if(Printer::isHomed() && changepos)
|
||||
Printer::moveToReal(cx, cy, cz, IGNORE_COORDINATE, Printer::homingFeedrate[X_AXIS]);
|
||||
Printer::feedrate = oldfeedrate;
|
||||
Printer::updateCurrentPosition();
|
||||
|
@ -484,6 +514,8 @@ void Extruder::setTemperatureForExtruder(float temperatureInCelsius,uint8_t extr
|
|||
if(temperatureInCelsius > MAXTEMP) temperatureInCelsius = MAXTEMP;
|
||||
#endif
|
||||
if(temperatureInCelsius < 0) temperatureInCelsius = 0;
|
||||
//cannot heat during timer but can cooldown
|
||||
if ((temperatureInCelsius > 0) && (Extruder::disableheat_time >HAL::timeInMilliseconds() )) return;
|
||||
TemperatureController *tc = tempController[extr];
|
||||
if(tc->sensorType == 0) temperatureInCelsius = 0;
|
||||
//if(temperatureInCelsius==tc->targetTemperatureC) return;
|
||||
|
@ -533,6 +565,8 @@ void Extruder::setHeatedBedTemperature(float temperatureInCelsius,bool beep)
|
|||
#if HAVE_HEATED_BED
|
||||
if(temperatureInCelsius>HEATED_BED_MAX_TEMP) temperatureInCelsius = HEATED_BED_MAX_TEMP;
|
||||
if(temperatureInCelsius<0) temperatureInCelsius = 0;
|
||||
//cannot heat during timer but can cooldown
|
||||
if ((temperatureInCelsius > 0) && (Extruder::disableheat_time >HAL::timeInMilliseconds() )) return;
|
||||
if(heatedBedController.targetTemperatureC==temperatureInCelsius) return; // don't flood log with messages if killed
|
||||
heatedBedController.setTargetTemperature(temperatureInCelsius);
|
||||
if(beep && temperatureInCelsius>30) heatedBedController.setAlarm(true);
|
||||
|
@ -1435,7 +1469,7 @@ const char ext4_deselect_cmd[] PROGMEM = EXT4_DESELECT_COMMANDS;
|
|||
const char ext5_select_cmd[] PROGMEM = EXT5_SELECT_COMMANDS;
|
||||
const char ext5_deselect_cmd[] PROGMEM = EXT5_DESELECT_COMMANDS;
|
||||
#endif
|
||||
|
||||
millis_t Extruder::disableheat_time =0;
|
||||
Extruder extruder[NUM_EXTRUDER] =
|
||||
{
|
||||
#if NUM_EXTRUDER>0
|
||||
|
|
|
@ -365,11 +365,12 @@ class Extruder // Size: 12*1 Byte+12*4 Byte+4*2Byte = 68 Byte
|
|||
static void manageTemperatures();
|
||||
static void disableCurrentExtruderMotor();
|
||||
static void disableAllExtruderMotors();
|
||||
static void selectExtruderById(uint8_t extruderId);
|
||||
static void selectExtruderById(uint8_t extruderId, bool changepos=true);
|
||||
static void disableAllHeater();
|
||||
static void initExtruder();
|
||||
static void initHeatedBed();
|
||||
static void setHeatedBedTemperature(float temp_celsius,bool beep = false);
|
||||
static millis_t disableheat_time;
|
||||
static float getHeatedBedTemperature();
|
||||
static void setTemperatureForExtruder(float temp_celsius,uint8_t extr,bool beep = false);
|
||||
};
|
||||
|
|
|
@ -55,6 +55,7 @@ long Printer::destinationSteps[E_AXIS_ARRAY];
|
|||
float Printer::coordinateOffset[Z_AXIS_ARRAY] = {0,0,0};
|
||||
uint8_t Printer::flag0 = 0;
|
||||
uint8_t Printer::flag1 = 0;
|
||||
uint8_t Printer::flaghome = 0;
|
||||
uint8_t Printer::debugLevel = 6; ///< Bitfield defining debug output. 1 = echo, 2 = info, 4 = error, 8 = dry run., 16 = Only communication, 32 = No moves
|
||||
uint8_t Printer::stepsPerTimerCall = 1;
|
||||
uint8_t Printer::menuMode = 0;
|
||||
|
@ -157,6 +158,86 @@ int8_t Printer::motorYorZ;
|
|||
int debugWaitLoop = 0;
|
||||
#endif
|
||||
|
||||
#if ENABLE_CLEAN_NOZZLE
|
||||
void Printer::cleanNozzle(bool restoreposition)
|
||||
{
|
||||
//we save current configuration and position
|
||||
uint8_t tmp_extruderid=Extruder::current->id;
|
||||
float tmp_x = currentPosition[X_AXIS];
|
||||
float tmp_y = currentPosition[Y_AXIS];
|
||||
float tmp_z = currentPosition[Z_AXIS];
|
||||
|
||||
//ensure homing is done and select E0
|
||||
if(!Printer::isHomed()) Printer::homeAxis(true,true,true);
|
||||
else
|
||||
{//put proper position in case position has been manualy changed no need to home Z as cannot be manualy changed and in case of something on plate it could be catastrophic
|
||||
Printer::homeAxis(true,true,false);
|
||||
}
|
||||
|
||||
UI_STATUS_UPD_RAM(UI_TEXT_CLEANING_NOZZLE);
|
||||
#if DAVINCI ==1
|
||||
//first step noze
|
||||
moveToReal(xMin+CLEAN_X-ENDSTOP_X_BACK_ON_HOME,yMin,IGNORE_COORDINATE,IGNORE_COORDINATE,homingFeedrate[0]);
|
||||
//second step noze
|
||||
moveToReal(xMin-ENDSTOP_X_BACK_ON_HOME,yMin,IGNORE_COORDINATE,IGNORE_COORDINATE,homingFeedrate[0]);
|
||||
//third step noze
|
||||
moveToReal(xMin+CLEAN_X-ENDSTOP_X_BACK_ON_HOME,yMin,IGNORE_COORDINATE,IGNORE_COORDINATE,homingFeedrate[0]);
|
||||
//fourth step noze
|
||||
moveToReal(xMin-ENDSTOP_X_BACK_ON_HOME,yMin,IGNORE_COORDINATE,IGNORE_COORDINATE,homingFeedrate[0]);
|
||||
//fifth step noze
|
||||
moveToReal(xMin+CLEAN_X-ENDSTOP_X_BACK_ON_HOME,yMin,IGNORE_COORDINATE,IGNORE_COORDINATE,homingFeedrate[0]);
|
||||
//sixth step noze
|
||||
moveToReal(xMin-ENDSTOP_X_BACK_ON_HOME,yMin,IGNORE_COORDINATE,IGNORE_COORDINATE,homingFeedrate[0]);
|
||||
//first step Z probe
|
||||
moveToReal(xMin,yMin + CLEAN_Y-ENDSTOP_Y_BACK_ON_HOME,IGNORE_COORDINATE,IGNORE_COORDINATE,homingFeedrate[0]);
|
||||
//second step Z probe
|
||||
moveToReal(xMin,yMin-ENDSTOP_Y_BACK_ON_HOME,IGNORE_COORDINATE,IGNORE_COORDINATE,homingFeedrate[0]);
|
||||
//third step Z probe
|
||||
moveToReal(xMin,yMin+CLEAN_Y-ENDSTOP_Y_BACK_ON_HOME,IGNORE_COORDINATE,IGNORE_COORDINATE,homingFeedrate[0]);
|
||||
//fourth step Z probe
|
||||
moveToReal(xMin,yMin-ENDSTOP_Y_BACK_ON_HOME,IGNORE_COORDINATE,IGNORE_COORDINATE,homingFeedrate[0]);
|
||||
//fifth step Z probe
|
||||
moveToReal(xMin,yMin+CLEAN_Y-ENDSTOP_Y_BACK_ON_HOME,IGNORE_COORDINATE,IGNORE_COORDINATE,homingFeedrate[0]);
|
||||
//sixth step Z probe
|
||||
moveToReal(xMin,yMin-ENDSTOP_Y_BACK_ON_HOME,IGNORE_COORDINATE,IGNORE_COORDINATE,homingFeedrate[0]);
|
||||
#else
|
||||
// move Z to zMin + 15 if under this position to be sure nozzle do not touch metal holder
|
||||
if (currentPosition[Z_AXIS] < zMin+15) moveToReal(IGNORE_COORDINATE,IGNORE_COORDINATE,zMin+15,IGNORE_COORDINATE,homingFeedrate[0]);
|
||||
Commands::waitUntilEndOfAllMoves();
|
||||
//first step
|
||||
moveToReal(xMin + CLEAN_X-ENDSTOP_X_BACK_ON_HOME,yMin + CLEAN_Y-ENDSTOP_Y_BACK_ON_HOME,IGNORE_COORDINATE,IGNORE_COORDINATE,homingFeedrate[0]);
|
||||
//second step
|
||||
moveToReal(xMin-ENDSTOP_X_BACK_ON_HOME,yMin-ENDSTOP_Y_BACK_ON_HOME,IGNORE_COORDINATE,IGNORE_COORDINATE,homingFeedrate[0]);
|
||||
//third step
|
||||
moveToReal(xMin+CLEAN_X-ENDSTOP_X_BACK_ON_HOME,yMin+CLEAN_Y-ENDSTOP_Y_BACK_ON_HOME,IGNORE_COORDINATE,IGNORE_COORDINATE,homingFeedrate[0]);
|
||||
//fourth step
|
||||
moveToReal(xMin-ENDSTOP_X_BACK_ON_HOME,yMin-ENDSTOP_Y_BACK_ON_HOME,IGNORE_COORDINATE,IGNORE_COORDINATE,homingFeedrate[0]);
|
||||
//move out to be sure first drop go to purge box
|
||||
moveToReal(xLength-2,yMin+CLEAN_Y-ENDSTOP_Y_BACK_ON_HOME,IGNORE_COORDINATE,IGNORE_COORDINATE,homingFeedrate[0]);
|
||||
moveToReal(xLength-2,yMin-ENDSTOP_Y_BACK_ON_HOME,IGNORE_COORDINATE,IGNORE_COORDINATE,homingFeedrate[0]);
|
||||
Commands::waitUntilEndOfAllMoves();
|
||||
//first step
|
||||
moveToReal(xLength-20,IGNORE_COORDINATE,IGNORE_COORDINATE,IGNORE_COORDINATE,homingFeedrate[0]);
|
||||
//second step
|
||||
moveToReal(xLength,IGNORE_COORDINATE,IGNORE_COORDINATE,IGNORE_COORDINATE,homingFeedrate[0]);
|
||||
//third step
|
||||
moveToReal(xLength-20,IGNORE_COORDINATE,IGNORE_COORDINATE,IGNORE_COORDINATE,homingFeedrate[0]);
|
||||
//fourth step
|
||||
moveToReal(xLength,IGNORE_COORDINATE,IGNORE_COORDINATE,IGNORE_COORDINATE,homingFeedrate[0]);
|
||||
|
||||
Commands::waitUntilEndOfAllMoves();
|
||||
//back to original position and original extruder
|
||||
//X,Y first then Z
|
||||
if (restoreposition)
|
||||
{
|
||||
moveToReal(tmp_x,tmp_y,IGNORE_COORDINATE,IGNORE_COORDINATE,homingFeedrate[0]);
|
||||
moveToReal(IGNORE_COORDINATE,IGNORE_COORDINATE,tmp_z,IGNORE_COORDINATE,homingFeedrate[0]);
|
||||
Commands::waitUntilEndOfAllMoves();
|
||||
Extruder::selectExtruderById(tmp_extruderid);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#if !NONLINEAR_SYSTEM
|
||||
|
@ -777,7 +858,7 @@ SET_INPUT(FIL_SENSOR2_PIN);
|
|||
#endif
|
||||
#if CASE_LIGHTS_PIN>=0
|
||||
SET_OUTPUT(CASE_LIGHTS_PIN);
|
||||
WRITE(CASE_LIGHTS_PIN, CASE_LIGHT_DEFAULT_ON);
|
||||
WRITE(CASE_LIGHTS_PIN, EEPROM::buselight);
|
||||
#endif // CASE_LIGHTS_PIN
|
||||
#if GANTRY
|
||||
Printer::motorX = 0;
|
||||
|
@ -834,7 +915,7 @@ SET_INPUT(FIL_SENSOR2_PIN);
|
|||
EEPROM::initBaudrate();
|
||||
HAL::serialSetBaudrate(baudrate);
|
||||
Com::printFLN(Com::tStart);
|
||||
UI_INITIALIZE;
|
||||
//UI_INITIALIZE;
|
||||
HAL::showStartReason();
|
||||
Extruder::initExtruder();
|
||||
#if SDSUPPORT
|
||||
|
@ -855,7 +936,7 @@ SET_INPUT(FIL_SENSOR2_PIN);
|
|||
Commands::checkFreeMemory();
|
||||
Commands::writeLowestFreeRAM();
|
||||
HAL::setupTimer();
|
||||
|
||||
UI_INITIALIZE;
|
||||
#if NONLINEAR_SYSTEM
|
||||
transformCartesianStepsToDeltaSteps(Printer::currentPositionSteps, Printer::currentDeltaPositionSteps);
|
||||
|
||||
|
@ -942,6 +1023,7 @@ void Printer::deltaMoveToTopEndstops(float feedrate)
|
|||
}
|
||||
void Printer::homeXAxis()
|
||||
{
|
||||
setHomedX(true);
|
||||
destinationSteps[X_AXIS] = 0;
|
||||
if (!PrintLine::queueDeltaMove(true,false,false)) {
|
||||
Com::printWarningFLN(PSTR("homeXAxis / queueDeltaMove returns error"));
|
||||
|
@ -949,6 +1031,7 @@ void Printer::homeXAxis()
|
|||
}
|
||||
void Printer::homeYAxis()
|
||||
{
|
||||
setHomedY(true);
|
||||
Printer::destinationSteps[Y_AXIS] = 0;
|
||||
if (!PrintLine::queueDeltaMove(true,false,false)) {
|
||||
Com::printWarningFLN(PSTR("homeYAxis / queueDeltaMove returns error"));
|
||||
|
@ -956,6 +1039,7 @@ void Printer::homeYAxis()
|
|||
}
|
||||
void Printer::homeZAxis() // Delta z homing
|
||||
{
|
||||
setHomedZ(true);
|
||||
SHOT("homeZAxis ");
|
||||
deltaMoveToTopEndstops(Printer::homingFeedrate[Z_AXIS]);
|
||||
PrintLine::moveRelativeDistanceInSteps(0,0,2*axisStepsPerMM[Z_AXIS]*-ENDSTOP_Z_BACK_MOVE,0,Printer::homingFeedrate[Z_AXIS]/ENDSTOP_X_RETEST_REDUCTION_FACTOR, true, false);
|
||||
|
@ -1006,6 +1090,7 @@ void Printer::homeZAxis() // Delta z homing
|
|||
// This home axis is for delta
|
||||
void Printer::homeAxis(bool xaxis,bool yaxis,bool zaxis) // Delta homing code
|
||||
{
|
||||
setHomed(true)
|
||||
SHOT("homeAxis ");
|
||||
bool autoLevel = isAutolevelActive();
|
||||
setAutolevelActive(false);
|
||||
|
@ -1047,6 +1132,7 @@ void Printer::homeAxis(bool xaxis,bool yaxis,bool zaxis) // Delta homing code
|
|||
void Printer::homeXAxis()
|
||||
{
|
||||
long steps;
|
||||
setHomedX(true);
|
||||
if ((MIN_HARDWARE_ENDSTOP_X && X_MIN_PIN > -1 && X_HOME_DIR==-1 && MIN_HARDWARE_ENDSTOP_Y && Y_MIN_PIN > -1 && Y_HOME_DIR==-1) ||
|
||||
(MAX_HARDWARE_ENDSTOP_X && X_MAX_PIN > -1 && X_HOME_DIR==1 && MAX_HARDWARE_ENDSTOP_Y && Y_MAX_PIN > -1 && Y_HOME_DIR==1))
|
||||
{
|
||||
|
@ -1094,11 +1180,14 @@ void Printer::homeXAxis()
|
|||
void Printer::homeYAxis()
|
||||
{
|
||||
// Dummy function x and y homing must occur together
|
||||
setHomedY(true);
|
||||
}
|
||||
#else // cartesian printer
|
||||
void Printer::homeXAxis()
|
||||
{
|
||||
long steps;
|
||||
setHomedX(true);
|
||||
Extruder::selectExtruderById(0,false);
|
||||
if ((MIN_HARDWARE_ENDSTOP_X && X_MIN_PIN > -1 && X_HOME_DIR==-1) || (MAX_HARDWARE_ENDSTOP_X && X_MAX_PIN > -1 && X_HOME_DIR==1))
|
||||
{
|
||||
long offX = 0;
|
||||
|
@ -1131,6 +1220,8 @@ void Printer::homeXAxis()
|
|||
void Printer::homeYAxis()
|
||||
{
|
||||
long steps;
|
||||
setHomedY(true);
|
||||
Extruder::selectExtruderById(0,false);
|
||||
if ((MIN_HARDWARE_ENDSTOP_Y && Y_MIN_PIN > -1 && Y_HOME_DIR==-1) || (MAX_HARDWARE_ENDSTOP_Y && Y_MAX_PIN > -1 && Y_HOME_DIR==1))
|
||||
{
|
||||
long offY = 0;
|
||||
|
@ -1165,6 +1256,7 @@ void Printer::homeYAxis()
|
|||
void Printer::homeZAxis() // cartesian homing
|
||||
{
|
||||
long steps;
|
||||
setHomedZ(true);
|
||||
if ((MIN_HARDWARE_ENDSTOP_Z && Z_MIN_PIN > -1 && Z_HOME_DIR==-1) || (MAX_HARDWARE_ENDSTOP_Z && Z_MAX_PIN > -1 && Z_HOME_DIR==1))
|
||||
{
|
||||
UI_STATUS_UPD(UI_TEXT_HOME_Z);
|
||||
|
|
|
@ -48,6 +48,10 @@ union floatLong
|
|||
#define PRINTER_FLAG1_POWER_ON 64
|
||||
#define PRINTER_FLAG1_ALLOW_COLD_EXTRUSION 128
|
||||
|
||||
#define PRINTER_FLAG_HOME_X 1
|
||||
#define PRINTER_FLAG_HOME_Y 2
|
||||
#define PRINTER_FLAG_HOME_Z 4
|
||||
|
||||
// define an integer number of steps more than large enough to get to endstop from anywhere
|
||||
#define HOME_DISTANCE_STEPS (Printer::zMaxSteps-Printer::zMinSteps+1000)
|
||||
#define HOME_DISTANCE_MM (HOME_DISTANCE_STEPS * invAxisStepsPerMM[Z_AXIS])
|
||||
|
@ -87,7 +91,7 @@ public:
|
|||
static uint8_t unitIsInches;
|
||||
|
||||
static uint8_t debugLevel;
|
||||
static uint8_t flag0,flag1; // 1 = stepper disabled, 2 = use external extruder interrupt, 4 = temp Sensor defect, 8 = homed
|
||||
static uint8_t flag0,flag1,flaghome; // 1 = stepper disabled, 2 = use external extruder interrupt, 4 = temp Sensor defect, 8 = homed
|
||||
static uint8_t stepsPerTimerCall;
|
||||
static uint32_t interval; ///< Last step duration in ticks.
|
||||
static uint32_t timer; ///< used for acceleration/deceleration timing
|
||||
|
@ -373,8 +377,38 @@ public:
|
|||
}
|
||||
static inline uint8_t isHomed()
|
||||
{
|
||||
return flag1 & PRINTER_FLAG1_HOMED;
|
||||
return flaghome & (PRINTER_FLAG_HOME_X|PRINTER_FLAG_HOME_Y|PRINTER_FLAG_HOME_Z);
|
||||
}
|
||||
|
||||
static inline uint8_t isXHomed()
|
||||
{
|
||||
return flaghome & PRINTER_FLAG_HOME_X;
|
||||
}
|
||||
|
||||
static inline uint8_t isYHomed()
|
||||
{
|
||||
return flaghome & PRINTER_FLAG_HOME_Y;
|
||||
}
|
||||
static inline uint8_t isZHomed()
|
||||
{
|
||||
return flaghome & PRINTER_FLAG_HOME_Z;
|
||||
}
|
||||
|
||||
static inline void setHomedX(uint8_t b)
|
||||
{
|
||||
flaghome = (b ? flaghome | PRINTER_FLAG_HOME_X : flag1 & ~PRINTER_FLAG_HOME_X);
|
||||
}
|
||||
|
||||
static inline void setHomedY(uint8_t b)
|
||||
{
|
||||
flaghome = (b ? flaghome | PRINTER_FLAG_HOME_Y : flag1 & ~PRINTER_FLAG_HOME_Y);
|
||||
}
|
||||
|
||||
static inline void setHomedZ(uint8_t b)
|
||||
{
|
||||
flaghome = (b ? flaghome | PRINTER_FLAG_HOME_Z : flag1 & ~PRINTER_FLAG_HOME_Z);
|
||||
}
|
||||
//this function just mention a home command has been sent not home is fully done, can be only X homed
|
||||
static inline void setHomed(uint8_t b)
|
||||
{
|
||||
flag1 = (b ? flag1 | PRINTER_FLAG1_HOMED : flag1 & ~PRINTER_FLAG1_HOMED);
|
||||
|
@ -722,6 +756,9 @@ public:
|
|||
static uint8_t moveTo(float x,float y,float z,float e,float f);
|
||||
static uint8_t moveToReal(float x,float y,float z,float e,float f);
|
||||
static void homeAxis(bool xaxis,bool yaxis,bool zaxis); /// Home axis
|
||||
#if ENABLE_CLEAN_NOZZLE
|
||||
static void cleanNozzle(bool restoreposition=true);
|
||||
#endif
|
||||
static void setOrigin(float xOff,float yOff,float zOff);
|
||||
static bool isPositionAllowed(float x,float y,float z);
|
||||
static inline int getFanSpeed()
|
||||
|
|
|
@ -85,6 +85,9 @@ Custom M Codes
|
|||
- M85 - Set inactivity shutdown timer with parameter S<seconds>. To disable set zero (default)
|
||||
- M92 - Set axisStepsPerMM - same syntax as G92
|
||||
- M99 S<delayInSec> X0 Y0 Z0 - Disable motors for S seconds (default 10) for given axis.
|
||||
- M100 clean nozzle
|
||||
- M101 turn light on (no eeprom saving) and reset autoturn off time if activated
|
||||
- M102 turn light off (no eeprom saving)
|
||||
- M104 S<temp> T<extruder> P1 F1 - Set temperature without wait. P1 = wait for moves to finish, F1 = beep when temp. reached first time
|
||||
- M105 X0 - Get temperatures. If X0 is added, the raw analog values are also written.
|
||||
- M112 - Emergency kill
|
||||
|
|
|
@ -174,7 +174,9 @@ void SDCard::pausePrint(bool intern)
|
|||
#if DRIVE_SYSTEM == DELTA
|
||||
Printer::moveToReal(0, 0.9 * EEPROM::deltaMaxRadius(), IGNORE_COORDINATE, IGNORE_COORDINATE, Printer::maxFeedrate[X_AXIS]);
|
||||
#else
|
||||
Printer::moveToReal(Printer::xMin, Printer::yMin + Printer::yLength, IGNORE_COORDINATE, IGNORE_COORDINATE, Printer::maxFeedrate[X_AXIS]);
|
||||
if (Printer::lastCmdPos[Z_AXIS]+10<Printer::zMin+Printer::zLength)
|
||||
Printer::moveToReal(IGNORE_COORDINATE,IGNORE_COORDINATE,Printer::lastCmdPos[Z_AXIS]+10,IGNORE_COORDINATE,Printer::homingFeedrate[Z_AXIS]);
|
||||
Printer::moveToReal(Printer::xMin,Printer::yMin + Printer::yLength,IGNORE_COORDINATE,IGNORE_COORDINATE,Printer::homingFeedrate[X_AXIS]);
|
||||
#endif
|
||||
Printer::lastCmdPos[X_AXIS] = Printer::currentPosition[X_AXIS];
|
||||
Printer::lastCmdPos[Y_AXIS] = Printer::currentPosition[Y_AXIS];
|
||||
|
|
|
@ -150,6 +150,8 @@ void PrintLine::moveRelativeDistanceInStepsReal(int32_t x,int32_t y,int32_t z,in
|
|||
*/
|
||||
void PrintLine::queueCartesianMove(uint8_t check_endstops,uint8_t pathOptimize)
|
||||
{
|
||||
Printer::setMenuMode(MENU_MODE_PRINTING,true);
|
||||
if (Printer::isMenuMode(MENU_MODE_STOP_REQUESTED))return;
|
||||
Printer::unsetAllSteppersDisabled();
|
||||
waitForXFreeLines(1);
|
||||
uint8_t newPath = insertWaitMovesIfNeeded(pathOptimize, 0);
|
||||
|
@ -1881,7 +1883,7 @@ int32_t PrintLine::bresenhamStep() // Version for delta printer
|
|||
if(Printer::isZProbingActive() && Printer::stepsRemainingAtZHit >= 0)
|
||||
{
|
||||
removeCurrentLineForbidInterrupt();
|
||||
if(linesCount == 0) UI_STATUS(UI_TEXT_IDLE);
|
||||
// if(linesCount == 0) UI_STATUS(UI_TEXT_IDLE);
|
||||
return 1000;
|
||||
}
|
||||
#endif
|
||||
|
@ -2218,7 +2220,7 @@ int32_t PrintLine::bresenhamStep() // Version for delta printer
|
|||
//deltaSegmentCount -= cur->numDeltaSegments; // should always be zero
|
||||
removeCurrentLineForbidInterrupt();
|
||||
Printer::disableAllowedStepper();
|
||||
if(linesCount == 0) UI_STATUS(UI_TEXT_IDLE);
|
||||
//if(linesCount == 0) UI_STATUS(UI_TEXT_IDLE);
|
||||
interval = Printer::interval = interval >> 1; // 50% of time to next call to do cur=0
|
||||
DEBUG_MEMORY;
|
||||
} // Do even
|
||||
|
@ -2243,6 +2245,11 @@ int lastblk=-1;
|
|||
int32_t cur_errupd;
|
||||
int32_t PrintLine::bresenhamStep() // version for cartesian printer
|
||||
{
|
||||
if (Printer::isMenuMode(MENU_MODE_STOP_REQUESTED))
|
||||
{
|
||||
while(linesCount)removeCurrentLineForbidInterrupt();
|
||||
return 100;
|
||||
}
|
||||
#if CPU_ARCH==ARCH_ARM
|
||||
if(!PrintLine::nlFlag)
|
||||
#else
|
||||
|
@ -2534,7 +2541,7 @@ int32_t PrintLine::bresenhamStep() // version for cartesian printer
|
|||
#endif
|
||||
removeCurrentLineForbidInterrupt();
|
||||
Printer::disableAllowedStepper();
|
||||
if(linesCount == 0) UI_STATUS(UI_TEXT_IDLE);
|
||||
// if(linesCount == 0) UI_STATUS(UI_TEXT_IDLE);
|
||||
interval = Printer::interval = interval >> 1; // 50% of time to next call to do cur=0
|
||||
DEBUG_MEMORY;
|
||||
} // Do even
|
||||
|
|
|
@ -437,7 +437,7 @@ public:
|
|||
{
|
||||
linesCount = 0;
|
||||
linesPos = linesWritePos;
|
||||
Printer::setMenuMode(MENU_MODE_PRINTING,false);
|
||||
//Printer::setMenuMode(MENU_MODE_PRINTING,false);
|
||||
}
|
||||
// Only called from bresenham -> inside interrupt handle
|
||||
inline void updateAdvanceSteps(speed_t v,uint8_t max_loops,bool accelerate)
|
||||
|
@ -646,9 +646,9 @@ public:
|
|||
nlFlag = false;
|
||||
#endif
|
||||
HAL::forbidInterrupts();
|
||||
--linesCount;
|
||||
if(!linesCount)
|
||||
Printer::setMenuMode(MENU_MODE_PRINTING,false);
|
||||
if (linesCount>0) --linesCount;
|
||||
// if(!linesCount)
|
||||
// Printer::setMenuMode(MENU_MODE_PRINTING,false);
|
||||
}
|
||||
static inline void pushLine()
|
||||
{
|
||||
|
|
|
@ -311,6 +311,8 @@ STEPPER_CURRENT_CONTROL
|
|||
|
||||
#if NUM_EXTRUDER==1
|
||||
#define E1_PINS
|
||||
#define HEATER_2_PIN -1
|
||||
#define TEMP_2_PIN -1
|
||||
#endif
|
||||
|
||||
#if NUM_EXTRUDER<3
|
||||
|
|
|
@ -28,8 +28,7 @@ extern const int8_t encoder_table[16] PROGMEM ;
|
|||
#include <inttypes.h>
|
||||
#include <ctype.h>
|
||||
|
||||
|
||||
|
||||
char uipagedialog[4][MAX_COLS+1];
|
||||
|
||||
#if BEEPER_TYPE==2 && defined(UI_HAS_I2C_KEYS) && UI_I2C_KEY_ADDRESS!=BEEPER_ADDRESS
|
||||
#error Beeper address and i2c key address must be identical
|
||||
|
@ -47,6 +46,11 @@ bool benable_autoreturn=true;
|
|||
#if FEATURE_BEEPER
|
||||
bool enablesound = true;
|
||||
#endif
|
||||
|
||||
#if UI_AUTOLIGHTOFF_AFTER!=0
|
||||
millis_t UIDisplay::ui_autolightoff_time=-1;
|
||||
#endif
|
||||
|
||||
uint8_t UIDisplay::display_mode=ADVANCED_MODE;
|
||||
|
||||
void playsound(int tone,int duration)
|
||||
|
@ -230,52 +234,52 @@ const long baudrates[] PROGMEM = {9600,14400,19200,28800,38400,56000,57600,76800
|
|||
460800,500000,921600,1000000,1500000,0
|
||||
};
|
||||
|
||||
#define LCD_ENTRYMODE 0x04 /**< Set entrymode */
|
||||
#define LCD_ENTRYMODE 0x04 /**< Set entrymode */
|
||||
|
||||
/** @name GENERAL COMMANDS */
|
||||
/*@{*/
|
||||
#define LCD_CLEAR 0x01 /**< Clear screen */
|
||||
#define LCD_HOME 0x02 /**< Cursor move to first digit */
|
||||
#define LCD_CLEAR 0x01 /**< Clear screen */
|
||||
#define LCD_HOME 0x02 /**< Cursor move to first digit */
|
||||
/*@}*/
|
||||
|
||||
/** @name ENTRYMODES */
|
||||
/*@{*/
|
||||
#define LCD_ENTRYMODE 0x04 /**< Set entrymode */
|
||||
#define LCD_INCREASE LCD_ENTRYMODE | 0x02 /**< Set cursor move direction -- Increase */
|
||||
#define LCD_DECREASE LCD_ENTRYMODE | 0x00 /**< Set cursor move direction -- Decrease */
|
||||
#define LCD_DISPLAYSHIFTON LCD_ENTRYMODE | 0x01 /**< Display is shifted */
|
||||
#define LCD_DISPLAYSHIFTOFF LCD_ENTRYMODE | 0x00 /**< Display is not shifted */
|
||||
#define LCD_ENTRYMODE 0x04 /**< Set entrymode */
|
||||
#define LCD_INCREASE LCD_ENTRYMODE | 0x02 /**< Set cursor move direction -- Increase */
|
||||
#define LCD_DECREASE LCD_ENTRYMODE | 0x00 /**< Set cursor move direction -- Decrease */
|
||||
#define LCD_DISPLAYSHIFTON LCD_ENTRYMODE | 0x01 /**< Display is shifted */
|
||||
#define LCD_DISPLAYSHIFTOFF LCD_ENTRYMODE | 0x00 /**< Display is not shifted */
|
||||
/*@}*/
|
||||
|
||||
/** @name DISPLAYMODES */
|
||||
/*@{*/
|
||||
#define LCD_DISPLAYMODE 0x08 /**< Set displaymode */
|
||||
#define LCD_DISPLAYON LCD_DISPLAYMODE | 0x04 /**< Display on */
|
||||
#define LCD_DISPLAYOFF LCD_DISPLAYMODE | 0x00 /**< Display off */
|
||||
#define LCD_CURSORON LCD_DISPLAYMODE | 0x02 /**< Cursor on */
|
||||
#define LCD_CURSOROFF LCD_DISPLAYMODE | 0x00 /**< Cursor off */
|
||||
#define LCD_BLINKINGON LCD_DISPLAYMODE | 0x01 /**< Blinking on */
|
||||
#define LCD_BLINKINGOFF LCD_DISPLAYMODE | 0x00 /**< Blinking off */
|
||||
#define LCD_DISPLAYMODE 0x08 /**< Set displaymode */
|
||||
#define LCD_DISPLAYON LCD_DISPLAYMODE | 0x04 /**< Display on */
|
||||
#define LCD_DISPLAYOFF LCD_DISPLAYMODE | 0x00 /**< Display off */
|
||||
#define LCD_CURSORON LCD_DISPLAYMODE | 0x02 /**< Cursor on */
|
||||
#define LCD_CURSOROFF LCD_DISPLAYMODE | 0x00 /**< Cursor off */
|
||||
#define LCD_BLINKINGON LCD_DISPLAYMODE | 0x01 /**< Blinking on */
|
||||
#define LCD_BLINKINGOFF LCD_DISPLAYMODE | 0x00 /**< Blinking off */
|
||||
/*@}*/
|
||||
|
||||
/** @name SHIFTMODES */
|
||||
/*@{*/
|
||||
#define LCD_SHIFTMODE 0x10 /**< Set shiftmode */
|
||||
#define LCD_DISPLAYSHIFT LCD_SHIFTMODE | 0x08 /**< Display shift */
|
||||
#define LCD_CURSORMOVE LCD_SHIFTMODE | 0x00 /**< Cursor move */
|
||||
#define LCD_RIGHT LCD_SHIFTMODE | 0x04 /**< Right shift */
|
||||
#define LCD_LEFT LCD_SHIFTMODE | 0x00 /**< Left shift */
|
||||
#define LCD_SHIFTMODE 0x10 /**< Set shiftmode */
|
||||
#define LCD_DISPLAYSHIFT LCD_SHIFTMODE | 0x08 /**< Display shift */
|
||||
#define LCD_CURSORMOVE LCD_SHIFTMODE | 0x00 /**< Cursor move */
|
||||
#define LCD_RIGHT LCD_SHIFTMODE | 0x04 /**< Right shift */
|
||||
#define LCD_LEFT LCD_SHIFTMODE | 0x00 /**< Left shift */
|
||||
/*@}*/
|
||||
|
||||
/** @name DISPLAY_CONFIGURATION */
|
||||
/*@{*/
|
||||
#define LCD_CONFIGURATION 0x20 /**< Set function */
|
||||
#define LCD_8BIT LCD_CONFIGURATION | 0x10 /**< 8 bits interface */
|
||||
#define LCD_4BIT LCD_CONFIGURATION | 0x00 /**< 4 bits interface */
|
||||
#define LCD_2LINE LCD_CONFIGURATION | 0x08 /**< 2 line display */
|
||||
#define LCD_1LINE LCD_CONFIGURATION | 0x00 /**< 1 line display */
|
||||
#define LCD_5X10 LCD_CONFIGURATION | 0x04 /**< 5 X 10 dots */
|
||||
#define LCD_5X7 LCD_CONFIGURATION | 0x00 /**< 5 X 7 dots */
|
||||
#define LCD_CONFIGURATION 0x20 /**< Set function */
|
||||
#define LCD_8BIT LCD_CONFIGURATION | 0x10 /**< 8 bits interface */
|
||||
#define LCD_4BIT LCD_CONFIGURATION | 0x00 /**< 4 bits interface */
|
||||
#define LCD_2LINE LCD_CONFIGURATION | 0x08 /**< 2 line display */
|
||||
#define LCD_1LINE LCD_CONFIGURATION | 0x00 /**< 1 line display */
|
||||
#define LCD_5X10 LCD_CONFIGURATION | 0x04 /**< 5 X 10 dots */
|
||||
#define LCD_5X7 LCD_CONFIGURATION | 0x00 /**< 5 X 7 dots */
|
||||
|
||||
#define LCD_SETCGRAMADDR 0x40
|
||||
|
||||
|
@ -381,10 +385,10 @@ void initializeLCD()
|
|||
HAL::delayMicroseconds(180);
|
||||
// finally, set # lines, font size, etc.
|
||||
lcdCommand(LCD_4BIT | LCD_2LINE | LCD_5X7);
|
||||
lcdCommand(LCD_CLEAR); //- Clear Screen
|
||||
lcdCommand(LCD_CLEAR); //- Clear Screen
|
||||
HAL::delayMilliseconds(2); // clear is slow operation
|
||||
lcdCommand(LCD_INCREASE | LCD_DISPLAYSHIFTOFF); //- Entrymode (Display Shift: off, Increment Address Counter)
|
||||
lcdCommand(LCD_DISPLAYON | LCD_CURSOROFF | LCD_BLINKINGOFF); //- Display on
|
||||
lcdCommand(LCD_INCREASE | LCD_DISPLAYSHIFTOFF); //- Entrymode (Display Shift: off, Increment Address Counter)
|
||||
lcdCommand(LCD_DISPLAYON | LCD_CURSOROFF | LCD_BLINKINGOFF); //- Display on
|
||||
uid.lastSwitch = uid.lastRefresh = HAL::timeInMilliseconds();
|
||||
uid.createChar(1,character_back);
|
||||
uid.createChar(2,character_degree);
|
||||
|
@ -405,10 +409,10 @@ void lcdWriteNibble(uint8_t value)
|
|||
WRITE(UI_DISPLAY_D6_PIN,value & 4);
|
||||
WRITE(UI_DISPLAY_D7_PIN,value & 8);
|
||||
WRITE(UI_DISPLAY_ENABLE_PIN, HIGH);// enable pulse must be >450ns
|
||||
DELAY1MICROSECOND;
|
||||
DELAY1MICROSECOND;
|
||||
|
||||
WRITE(UI_DISPLAY_ENABLE_PIN, LOW);
|
||||
DELAY1MICROSECOND;
|
||||
DELAY1MICROSECOND;
|
||||
|
||||
}
|
||||
void lcdWriteByte(uint8_t c,uint8_t rs)
|
||||
|
@ -426,16 +430,16 @@ void lcdWriteByte(uint8_t c,uint8_t rs)
|
|||
do
|
||||
{
|
||||
WRITE(UI_DISPLAY_ENABLE_PIN, HIGH);
|
||||
DELAY1MICROSECOND;
|
||||
DELAY1MICROSECOND;
|
||||
busy = READ(UI_DISPLAY_D7_PIN);
|
||||
WRITE(UI_DISPLAY_ENABLE_PIN, LOW);
|
||||
DELAY1MICROSECOND;
|
||||
DELAY1MICROSECOND;
|
||||
|
||||
WRITE(UI_DISPLAY_ENABLE_PIN, HIGH);
|
||||
DELAY1MICROSECOND;
|
||||
DELAY1MICROSECOND;
|
||||
|
||||
WRITE(UI_DISPLAY_ENABLE_PIN, LOW);
|
||||
DELAY1MICROSECOND;
|
||||
DELAY1MICROSECOND;
|
||||
|
||||
}
|
||||
while (busy);
|
||||
|
@ -452,20 +456,20 @@ void lcdWriteByte(uint8_t c,uint8_t rs)
|
|||
WRITE(UI_DISPLAY_D6_PIN, c & 0x40);
|
||||
WRITE(UI_DISPLAY_D7_PIN, c & 0x80);
|
||||
WRITE(UI_DISPLAY_ENABLE_PIN, HIGH); // enable pulse must be >450ns
|
||||
DELAY1MICROSECOND;
|
||||
DELAY1MICROSECOND;
|
||||
|
||||
WRITE(UI_DISPLAY_ENABLE_PIN, LOW);
|
||||
DELAY1MICROSECOND;
|
||||
DELAY1MICROSECOND;
|
||||
|
||||
WRITE(UI_DISPLAY_D4_PIN, c & 0x01);
|
||||
WRITE(UI_DISPLAY_D5_PIN, c & 0x02);
|
||||
WRITE(UI_DISPLAY_D6_PIN, c & 0x04);
|
||||
WRITE(UI_DISPLAY_D7_PIN, c & 0x08);
|
||||
WRITE(UI_DISPLAY_ENABLE_PIN, HIGH); // enable pulse must be >450ns
|
||||
DELAY1MICROSECOND;
|
||||
DELAY1MICROSECOND;
|
||||
|
||||
WRITE(UI_DISPLAY_ENABLE_PIN, LOW);
|
||||
DELAY1MICROSECOND;
|
||||
DELAY1MICROSECOND;
|
||||
|
||||
}
|
||||
void initializeLCD()
|
||||
|
@ -514,10 +518,10 @@ void initializeLCD()
|
|||
// finally, set # lines, font size, etc.
|
||||
lcdCommand(LCD_4BIT | LCD_2LINE | LCD_5X7);
|
||||
|
||||
lcdCommand(LCD_CLEAR); //- Clear Screen
|
||||
lcdCommand(LCD_CLEAR); //- Clear Screen
|
||||
HAL::delayMilliseconds(2); // clear is slow operation
|
||||
lcdCommand(LCD_INCREASE | LCD_DISPLAYSHIFTOFF); //- Entrymode (Display Shift: off, Increment Address Counter)
|
||||
lcdCommand(LCD_DISPLAYON | LCD_CURSOROFF | LCD_BLINKINGOFF); //- Display on
|
||||
lcdCommand(LCD_INCREASE | LCD_DISPLAYSHIFTOFF); //- Entrymode (Display Shift: off, Increment Address Counter)
|
||||
lcdCommand(LCD_DISPLAYON | LCD_CURSOROFF | LCD_BLINKINGOFF); //- Display on
|
||||
uid.lastSwitch = uid.lastRefresh = HAL::timeInMilliseconds();
|
||||
uid.createChar(1,character_back);
|
||||
uid.createChar(2,character_degree);
|
||||
|
@ -527,7 +531,7 @@ void initializeLCD()
|
|||
uid.createChar(6,character_folder);
|
||||
//uid.createChar(7,character_ready);
|
||||
uid.createChar(7,character_bed);
|
||||
|
||||
|
||||
#if defined(UI_BACKLIGHT_PIN)
|
||||
SET_OUTPUT(UI_BACKLIGHT_PIN);
|
||||
WRITE(UI_BACKLIGHT_PIN, HIGH);
|
||||
|
@ -1502,8 +1506,8 @@ void UIDisplay::updateSDFileCount()
|
|||
if (folderLevel>=SD_MAX_FOLDER_DEPTH && DIR_IS_SUBDIR(p) && !(p->name[0]=='.' && p->name[1]=='.'))
|
||||
continue;
|
||||
#if HIDE_BINARY_ON_SD
|
||||
//hide unwished files
|
||||
if (!SDCard::showFilename(p,tempLongFilename))continue;
|
||||
//hide unwished files
|
||||
if (!SDCard::showFilename(p,tempLongFilename))continue;
|
||||
#endif
|
||||
nFilesOnCard++;
|
||||
if (nFilesOnCard > 5000) // Arbitrary maximum, limited only by how long someone would scroll
|
||||
|
@ -1526,7 +1530,7 @@ void getSDFilenameAt(uint16_t filePos,char *filename)
|
|||
if(uid.folderLevel>=SD_MAX_FOLDER_DEPTH && DIR_IS_SUBDIR(p) && !(p->name[0]=='.' && p->name[1]=='.')) continue;
|
||||
#if HIDE_BINARY_ON_SD
|
||||
//hide unwished files
|
||||
if (!SDCard::showFilename(p,tempLongFilename))continue;
|
||||
if (!SDCard::showFilename(p,tempLongFilename))continue;
|
||||
#endif
|
||||
if (filePos--)
|
||||
continue;
|
||||
|
@ -1596,8 +1600,8 @@ void sdrefresh(uint16_t &r,char cache[UI_ROWS][MAX_COLS+1])
|
|||
if(uid.folderLevel >= SD_MAX_FOLDER_DEPTH && DIR_IS_SUBDIR(p) && !(p->name[0]=='.' && p->name[1]=='.'))
|
||||
continue;
|
||||
#if HIDE_BINARY_ON_SD
|
||||
//hide unwished files
|
||||
if (!SDCard::showFilename(p,tempLongFilename))continue;
|
||||
//hide unwished files
|
||||
if (!SDCard::showFilename(p,tempLongFilename))continue;
|
||||
#endif
|
||||
if(skip>0)
|
||||
{
|
||||
|
@ -2923,9 +2927,9 @@ bool UIDisplay::executeAction(int action, bool allowMoves)
|
|||
case UI_ACTION_MENU_ZPOSFAST:
|
||||
pushMenu(&ui_menu_zpos_fast,false);
|
||||
break;
|
||||
case UI_ACTION_MENU_QUICKSETTINGS:
|
||||
pushMenu(&ui_menu_quick,false);
|
||||
break;
|
||||
//case UI_ACTION_MENU_QUICKSETTINGS:
|
||||
//pushMenu(&ui_menu_quick,false);
|
||||
// break;
|
||||
case UI_ACTION_MENU_EXTRUDER:
|
||||
pushMenu(&ui_menu_extruder,false);
|
||||
break;
|
||||
|
|
|
@ -294,6 +294,7 @@ typedef struct {
|
|||
unsigned int action; // must be int so it gets 32 bit on arm!
|
||||
uint8_t filter; // allows dynamic menu filtering based on Printer::menuMode bits set.
|
||||
uint8_t nofilter; // Hide if one of these bits are set
|
||||
uint8_t display_mode; // Easy or advanced or both or none
|
||||
bool showEntry() const;
|
||||
} const UIMenuEntry;
|
||||
|
||||
|
@ -301,7 +302,9 @@ typedef struct UIMenu_struct {
|
|||
// 0 = info page
|
||||
// 1 = file selector
|
||||
// 2 = submenu
|
||||
// 3 = modififaction menu
|
||||
// 3 = action menu
|
||||
// 4 = modification menu
|
||||
// 5 =Special menu with status
|
||||
uint8_t menuType;
|
||||
int id; // Type of modification
|
||||
int numEntries;
|
||||
|
@ -381,52 +384,53 @@ extern const int8_t encoder_table[16] PROGMEM ;
|
|||
|
||||
#define UI_STRING(name,text) const char PROGMEM name[] = text
|
||||
|
||||
#define UI_PAGE6(name,row1,row2,row3,row4,row5,row6) UI_STRING(name ## _1txt,row1);UI_STRING(name ## _2txt,row2);UI_STRING(name ## _3txt,row3);UI_STRING(name ## _4txt,row4);UI_STRING(name ## _5txt,row5);UI_STRING(name ## _6txt,row6);\
|
||||
UIMenuEntry name ## _1 PROGMEM ={name ## _1txt,0,0,0,0};\
|
||||
UIMenuEntry name ## _2 PROGMEM ={name ## _2txt,0,0,0,0};\
|
||||
UIMenuEntry name ## _3 PROGMEM ={name ## _3txt,0,0,0,0};\
|
||||
UIMenuEntry name ## _4 PROGMEM ={name ## _4txt,0,0,0,0};\
|
||||
UIMenuEntry name ## _5 PROGMEM ={name ## _5txt,0,0,0,0};\
|
||||
UIMenuEntry name ## _6 PROGMEM ={name ## _6txt,0,0,0,0};\
|
||||
#define UI_PAGE6(name,row1,row2,row3,row4,row5,row6,dmode) UI_STRING(name ## _1txt,row1);UI_STRING(name ## _2txt,row2);UI_STRING(name ## _3txt,row3);UI_STRING(name ## _4txt,row4);UI_STRING(name ## _5txt,row5);UI_STRING(name ## _6txt,row6);\
|
||||
UIMenuEntry name ## _1 PROGMEM ={name ## _1txt,UI_MENU_TYPE_INFO,0,0,0,dmode};\
|
||||
UIMenuEntry name ## _2 PROGMEM ={name ## _2txt,UI_MENU_TYPE_INFO,0,0,0,dmode};\
|
||||
UIMenuEntry name ## _3 PROGMEM ={name ## _3txt,UI_MENU_TYPE_INFO,0,0,0,dmode};\
|
||||
UIMenuEntry name ## _4 PROGMEM ={name ## _4txt,UI_MENU_TYPE_INFO,0,0,0,dmode};\
|
||||
UIMenuEntry name ## _5 PROGMEM ={name ## _5txt,UI_MENU_TYPE_INFO,0,0,0,dmode};\
|
||||
UIMenuEntry name ## _6 PROGMEM ={name ## _6txt,UI_MENU_TYPE_INFO,0,0,0,dmode};\
|
||||
const UIMenuEntry * const name ## _entries [] PROGMEM = {&name ## _1,&name ## _2,&name ## _3,&name ## _4,&name ## _5,&name ## _6};\
|
||||
const UIMenu name PROGMEM = {0,0,6,name ## _entries};
|
||||
#define UI_PAGE4(name,row1,row2,row3,row4) UI_STRING(name ## _1txt,row1);UI_STRING(name ## _2txt,row2);UI_STRING(name ## _3txt,row3);UI_STRING(name ## _4txt,row4);\
|
||||
UIMenuEntry name ## _1 PROGMEM ={name ## _1txt,0,0,0,0};\
|
||||
UIMenuEntry name ## _2 PROGMEM ={name ## _2txt,0,0,0,0};\
|
||||
UIMenuEntry name ## _3 PROGMEM ={name ## _3txt,0,0,0,0};\
|
||||
UIMenuEntry name ## _4 PROGMEM ={name ## _4txt,0,0,0,0};\
|
||||
#define UI_PAGE4(name,row1,row2,row3,row4,dmode) UI_STRING(name ## _1txt,row1);UI_STRING(name ## _2txt,row2);UI_STRING(name ## _3txt,row3);UI_STRING(name ## _4txt,row4);\
|
||||
UIMenuEntry name ## _1 PROGMEM ={name ## _1txt,UI_MENU_TYPE_INFO,0,0,0,dmode};\
|
||||
UIMenuEntry name ## _2 PROGMEM ={name ## _2txt,UI_MENU_TYPE_INFO,0,0,0,dmode};\
|
||||
UIMenuEntry name ## _3 PROGMEM ={name ## _3txt,UI_MENU_TYPE_INFO,0,0,0,dmode};\
|
||||
UIMenuEntry name ## _4 PROGMEM ={name ## _4txt,UI_MENU_TYPE_INFO,0,0,0,dmode};\
|
||||
const UIMenuEntry * const name ## _entries [] PROGMEM = {&name ## _1,&name ## _2,&name ## _3,&name ## _4};\
|
||||
const UIMenu name PROGMEM = {0,0,4,name ## _entries};
|
||||
#define UI_PAGE2(name,row1,row2) UI_STRING(name ## _1txt,row1);UI_STRING(name ## _2txt,row2);\
|
||||
UIMenuEntry name ## _1 PROGMEM ={name ## _1txt,0,0,0,0};\
|
||||
UIMenuEntry name ## _2 PROGMEM ={name ## _2txt,0,0,0,0};\
|
||||
#define UI_PAGE2(name,row1,row2,dmode) UI_STRING(name ## _1txt,row1);UI_STRING(name ## _2txt,row2);\
|
||||
UIMenuEntry name ## _1 PROGMEM ={name ## _1txt,UI_MENU_TYPE_INFO,0,0,0,dmode};\
|
||||
UIMenuEntry name ## _2 PROGMEM ={name ## _2txt,UI_MENU_TYPE_INFO,0,0,0,dmode};\
|
||||
const UIMenuEntry * const name ## _entries[] PROGMEM = {&name ## _1,&name ## _2};\
|
||||
const UIMenu name PROGMEM = {0,0,2,name ## _entries};
|
||||
#define UI_MENU_ACTION4C(name,action,rows) UI_MENU_ACTION4(name,action,rows)
|
||||
#define UI_MENU_ACTION2C(name,action,rows) UI_MENU_ACTION2(name,action,rows)
|
||||
#define UI_MENU_ACTION4(name,action,row1,row2,row3,row4) UI_STRING(name ## _1txt,row1);UI_STRING(name ## _2txt,row2);UI_STRING(name ## _3txt,row3);UI_STRING(name ## _4txt,row4);\
|
||||
UIMenuEntry name ## _1 PROGMEM ={name ## _1txt,0,0,0,0};\
|
||||
UIMenuEntry name ## _2 PROGMEM ={name ## _2txt,0,0,0,0};\
|
||||
UIMenuEntry name ## _3 PROGMEM ={name ## _3txt,0,0,0,0};\
|
||||
UIMenuEntry name ## _4 PROGMEM ={name ## _4txt,0,0,0,0};\
|
||||
#define UI_MENU_ACTION4C(name,action,rows,dmode) UI_MENU_ACTION4(name,action,rows,dmode)
|
||||
#define UI_MENU_ACTION2C(name,action,rows,dmode) UI_MENU_ACTION2(name,action,rows,dmode)
|
||||
#define UI_MENU_ACTION4(name,action,row1,row2,row3,row4,dmode) UI_STRING(name ## _1txt,row1);UI_STRING(name ## _2txt,row2);UI_STRING(name ## _3txt,row3);UI_STRING(name ## _4txt,row4);\
|
||||
UIMenuEntry name ## _1 PROGMEM ={name ## _1txt,UI_MENU_TYPE_INFO,0,0,0,dmode};\
|
||||
UIMenuEntry name ## _2 PROGMEM ={name ## _2txt,UI_MENU_TYPE_INFO,0,0,0,dmode};\
|
||||
UIMenuEntry name ## _3 PROGMEM ={name ## _3txt,UI_MENU_TYPE_INFO,0,0,0,dmode};\
|
||||
UIMenuEntry name ## _4 PROGMEM ={name ## _4txt,UI_MENU_TYPE_INFO,0,0,0,dmode};\
|
||||
const UIMenuEntry * const name ## _entries[] PROGMEM = {&name ## _1,&name ## _2,&name ## _3,&name ## _4};\
|
||||
const UIMenu name PROGMEM = {3,action,4,name ## _entries};
|
||||
#define UI_MENU_ACTION2(name,action,row1,row2) UI_STRING(name ## _1txt,row1);UI_STRING(name ## _2txt,row2);\
|
||||
UIMenuEntry name ## _1 PROGMEM ={name ## _1txt,0,0,0,0};\
|
||||
UIMenuEntry name ## _2 PROGMEM ={name ## _2txt,0,0,0,0};\
|
||||
#define UI_MENU_ACTION2(name,action,row1,row2,dmode) UI_STRING(name ## _1txt,row1);UI_STRING(name ## _2txt,row2);\
|
||||
UIMenuEntry name ## _1 PROGMEM ={name ## _1txt,UI_MENU_TYPE_INFO,0,0,0,dmode};\
|
||||
UIMenuEntry name ## _2 PROGMEM ={name ## _2txt,UI_MENU_TYPE_INFO,0,0,0,dmode};\
|
||||
const UIMenuEntry * const name ## _entries[] PROGMEM = {&name ## _1,&name ## _2};\
|
||||
const UIMenu name PROGMEM = {3,action,2,name ## _entries};
|
||||
#define UI_MENU_HEADLINE(name,text) UI_STRING(name ## _txt,text);UIMenuEntry name PROGMEM = {name ## _txt,1,0,0,0};
|
||||
#define UI_MENU_CHANGEACTION(name,row,action) UI_STRING(name ## _txt,row);UIMenuEntry name PROGMEM = {name ## _txt,4,action,0,0};
|
||||
#define UI_MENU_ACTIONCOMMAND(name,row,action) UI_STRING(name ## _txt,row);UIMenuEntry name PROGMEM = {name ## _txt,3,action,0,0};
|
||||
#define UI_MENU_ACTIONSELECTOR(name,row,entries) UI_STRING(name ## _txt,row);UIMenuEntry name PROGMEM = {name ## _txt,2,(unsigned int)&entries,0,0};
|
||||
#define UI_MENU_SUBMENU(name,row,entries) UI_STRING(name ## _txt,row);UIMenuEntry name PROGMEM = {name ## _txt,2,(unsigned int)&entries,0,0};
|
||||
#define UI_MENU_CHANGEACTION_FILTER(name,row,action,filter,nofilter) UI_STRING(name ## _txt,row);UIMenuEntry name PROGMEM = {name ## _txt,4,action,filter,nofilter};
|
||||
#define UI_MENU_ACTIONCOMMAND_FILTER(name,row,action,filter,nofilter) UI_STRING(name ## _txt,row);UIMenuEntry name PROGMEM = {name ## _txt,3,action,filter,nofilter};
|
||||
#define UI_MENU_ACTIONSELECTOR_FILTER(name,row,entries,filter,nofilter) UI_STRING(name ## _txt,row);UIMenuEntry name PROGMEM = {name ## _txt,2,(unsigned int)&entries,filter,nofilter};
|
||||
#define UI_MENU_SUBMENU_FILTER(name,row,entries,filter,nofilter) UI_STRING(name ## _txt,row);UIMenuEntry name PROGMEM = {name ## _txt,2,(unsigned int)&entries,filter,nofilter};
|
||||
#define UI_MENU(name,items,itemsCnt) const UIMenuEntry * const name ## _entries[] PROGMEM = items;const UIMenu name PROGMEM = {2,0,itemsCnt,name ## _entries};
|
||||
#define UI_MENU_FILESELECT(name,items,itemsCnt) const UIMenuEntry * const name ## _entries[] PROGMEM = items;const UIMenu name PROGMEM = {1,0,itemsCnt,name ## _entries};
|
||||
#define UI_MENU_HEADLINE(name,text,dmode) UI_STRING(name ## _txt,text);UIMenuEntry name PROGMEM = {name ## _txt,UI_MENU_TYPE_INFO,0,0,0,dmode};
|
||||
#define UI_MENU_CHANGEACTION(name,row,action,dmode) UI_STRING(name ## _txt,row);UIMenuEntry name PROGMEM = {name ## _txt,UI_MENU_TYPE_MODIFICATION_MENU,action,0,0,dmode};
|
||||
#define UI_MENU_ACTIONCOMMAND(name,row,action,dmode) UI_STRING(name ## _txt,row);UIMenuEntry name PROGMEM = {name ## _txt,UI_MENU_TYPE_ACTION_MENU,action,0,0,dmode};
|
||||
#define UI_MENU_ACTIONSELECTOR(name,row,entries,dmode) UI_STRING(name ## _txt,row);UIMenuEntry name PROGMEM = {name ## _txt,UI_MENU_TYPE_SUBMENU,(unsigned int)&entries,0,0,dmode};
|
||||
#define UI_MENU_SUBMENU(name,row,entries,dmode) UI_STRING(name ## _txt,row);UIMenuEntry name PROGMEM = {name ## _txt,UI_MENU_TYPE_SUBMENU,(unsigned int)&entries,0,0,dmode};
|
||||
#define UI_MENU_CHANGEACTION_FILTER(name,row,action,filter,nofilter,dmode) UI_STRING(name ## _txt,row);UIMenuEntry name PROGMEM = {name ## _txt,UI_MENU_TYPE_MODIFICATION_MENU,action,filter,nofilter,dmode};
|
||||
#define UI_MENU_ACTIONCOMMAND_FILTER(name,row,action,filter,nofilter,dmode) UI_STRING(name ## _txt,row);UIMenuEntry name PROGMEM = {name ## _txt,UI_MENU_TYPE_ACTION_MENU,action,filter,nofilter,dmode};
|
||||
#define UI_MENU_ACTIONSELECTOR_FILTER(name,row,entries,filter,nofilter,dmode) UI_STRING(name ## _txt,row);UIMenuEntry name PROGMEM = {name ## _txt,UI_MENU_TYPE_SUBMENU,(unsigned int)&entries,filter,nofilter,dmode};
|
||||
#define UI_MENU_SUBMENU_FILTER(name,row,entries,filter,nofilter,dmode) UI_STRING(name ## _txt,row);UIMenuEntry name PROGMEM = {name ## _txt,UI_MENU_TYPE_SUBMENU,(unsigned int)&entries,filter,nofilter,dmode};
|
||||
#define UI_MENU(name,items,itemsCnt) const UIMenuEntry * const name ## _entries[] PROGMEM = items;const UIMenu name PROGMEM = {UI_MENU_TYPE_SUBMENU,0,itemsCnt,name ## _entries}
|
||||
#define UI_MENU_WITH_STATUS(name,items,itemsCnt) const UIMenuEntry * const name ## _entries[] PROGMEM = items;const UIMenu name PROGMEM = {UI_MENU_TYPE_MENU_WITH_STATUS,0,itemsCnt,name ## _entries}
|
||||
#define UI_MENU_FILESELECT(name,items,itemsCnt) const UIMenuEntry * const name ## _entries[] PROGMEM = items;const UIMenu name PROGMEM = {UI_MENU_TYPE_FILE_SELECTOR,0,itemsCnt,name ## _entries}
|
||||
|
||||
#if FEATURE_CONTROLLER == CONTROLLER_SMARTRAMPS || FEATURE_CONTROLLER == CONTROLLER_GADGETS3D_SHIELD || FEATURE_CONTROLLER == CONTROLLER_REPRAPDISCOUNT_GLCD
|
||||
#undef SDCARDDETECT
|
||||
|
@ -459,72 +463,7 @@ extern const int8_t encoder_table[16] PROGMEM ;
|
|||
#define UI_FLAG_SLOW_ACTION_RUNNING 4
|
||||
#define UI_FLAG_KEY_TEST_RUNNING 8
|
||||
|
||||
class UIDisplay {
|
||||
public:
|
||||
static uint8_t display_mode;
|
||||
volatile uint8_t flags; // 1 = fast key action, 2 = slow key action, 4 = slow action running, 8 = key test running
|
||||
uint8_t col; // current col for buffer prefill
|
||||
uint8_t menuLevel; // current menu level, 0 = info, 1 = group, 2 = groupdata select, 3 = value change
|
||||
uint16_t menuPos[UI_MENU_MAXLEVEL]; // Positions in menu
|
||||
const UIMenu *menu[UI_MENU_MAXLEVEL]; // Menus active
|
||||
uint16_t menuTop[UI_MENU_MAXLEVEL]; // Top row in menu
|
||||
int8_t shift; // Display shift for scrolling text
|
||||
int pageDelay; // Counter. If 0 page is refreshed if menuLevel is 0.
|
||||
void *errorMsg;
|
||||
uint16_t activeAction; // action for ok/next/previous
|
||||
uint16_t lastAction;
|
||||
uint16_t delayedAction;
|
||||
millis_t lastSwitch; // Last time display switched pages
|
||||
millis_t lastRefresh;
|
||||
uint16_t lastButtonAction;
|
||||
millis_t lastButtonStart;
|
||||
millis_t nextRepeat; // Time of next autorepeat
|
||||
millis_t lastNextPrev; // for increasing speed settings
|
||||
float lastNextAccumul; // Accumulated value
|
||||
unsigned int outputMask; // Output mask for backlight, leds etc.
|
||||
int repeatDuration; // Time beween to actions if autorepeat is enabled
|
||||
int8_t oldMenuLevel;
|
||||
uint8_t encoderStartScreen;
|
||||
char printCols[MAX_COLS+1];
|
||||
void addInt(int value,uint8_t digits,char fillChar=' '); // Print int into printCols
|
||||
void addLong(long value,char digits);
|
||||
inline void addLong(long value) {addLong(value, -11);};
|
||||
void addFloat(float number, char fixdigits,uint8_t digits);
|
||||
inline void addFloat(float number) {addFloat(number, -9,2);};
|
||||
void addStringP(PGM_P text);
|
||||
void addChar(const char c);
|
||||
void addGCode(GCode *code);
|
||||
bool okAction(bool allowMoves);
|
||||
bool nextPreviousAction(int8_t next, bool allowMoves);
|
||||
char statusMsg[21];
|
||||
int8_t encoderPos;
|
||||
int8_t encoderLast;
|
||||
UIDisplay();
|
||||
void createChar(uint8_t location, const uint8_t charmap[]);
|
||||
void initialize(); // Initialize display and keys
|
||||
void waitForKey();
|
||||
void printRow(uint8_t r, char *txt, char *txt2, uint8_t changeAtCol); // Print row on display
|
||||
void printRowP(uint8_t r,PGM_P txt);
|
||||
void parse(const char *txt,bool ram); /// Parse output and write to printCols;
|
||||
void refreshPage();
|
||||
bool executeAction(int action, bool allowMoves);
|
||||
void finishAction(int action);
|
||||
void slowAction(bool allowMoves);
|
||||
void fastAction();
|
||||
void mediumAction();
|
||||
void pushMenu(const UIMenu *men, bool refresh);
|
||||
void adjustMenuPos();
|
||||
void setStatusP(PGM_P txt, bool error = false);
|
||||
void setStatus(const char *txt, bool error = false);
|
||||
inline void setOutputMaskBits(unsigned int bits) {outputMask |= bits;}
|
||||
inline void unsetOutputMaskBits(unsigned int bits) {outputMask &= ~bits;}
|
||||
void updateSDFileCount();
|
||||
void goDir(char *name);
|
||||
bool isDirname(char *name);
|
||||
char cwd[SD_MAX_FOLDER_DEPTH*LONG_FILENAME_LENGTH+2];
|
||||
uint8_t folderLevel;
|
||||
};
|
||||
extern UIDisplay uid;
|
||||
|
||||
|
||||
|
||||
#if FEATURE_CONTROLLER == UICONFIG_CONTROLLER
|
||||
|
@ -1334,7 +1273,7 @@ void ui_check_slow_keys(int &action) {}
|
|||
#include "uilang.h"
|
||||
#endif
|
||||
|
||||
#define UI_VERSION_STRING "Repetier " REPETIER_VERSION
|
||||
#define UI_VERSION_STRING "Repetier " REPETIER_VERSION "Mod"
|
||||
|
||||
#ifdef UI_HAS_I2C_KEYS
|
||||
#define COMPILE_I2C_DRIVER
|
||||
|
@ -1396,8 +1335,77 @@ void ui_check_slow_keys(int &action) {}
|
|||
#define BEEP_LONG beep(BEEPER_LONG_SEQUENCE);
|
||||
#endif
|
||||
|
||||
|
||||
class UIDisplay {
|
||||
public:
|
||||
#if UI_AUTOLIGHTOFF_AFTER!=0
|
||||
static millis_t ui_autolightoff_time;
|
||||
#endif
|
||||
static uint8_t display_mode;
|
||||
volatile uint8_t flags; // 1 = fast key action, 2 = slow key action, 4 = slow action running, 8 = key test running
|
||||
uint8_t col; // current col for buffer prefill
|
||||
uint8_t menuLevel; // current menu level, 0 = info, 1 = group, 2 = groupdata select, 3 = value change
|
||||
uint16_t menuPos[UI_MENU_MAXLEVEL]; // Positions in menu
|
||||
const UIMenu *menu[UI_MENU_MAXLEVEL]; // Menus active
|
||||
uint16_t menuTop[UI_MENU_MAXLEVEL]; // Top row in menu
|
||||
int8_t shift; // Display shift for scrolling text
|
||||
int pageDelay; // Counter. If 0 page is refreshed if menuLevel is 0.
|
||||
void *errorMsg;
|
||||
uint16_t activeAction; // action for ok/next/previous
|
||||
uint16_t lastAction;
|
||||
uint16_t delayedAction;
|
||||
millis_t lastSwitch; // Last time display switched pages
|
||||
millis_t lastRefresh;
|
||||
uint16_t lastButtonAction;
|
||||
millis_t lastButtonStart;
|
||||
millis_t nextRepeat; // Time of next autorepeat
|
||||
millis_t lastNextPrev; // for increasing speed settings
|
||||
float lastNextAccumul; // Accumulated value
|
||||
unsigned int outputMask; // Output mask for backlight, leds etc.
|
||||
int repeatDuration; // Time beween to actions if autorepeat is enabled
|
||||
int8_t oldMenuLevel;
|
||||
uint8_t encoderStartScreen;
|
||||
char printCols[MAX_COLS+1];
|
||||
void addInt(int value,uint8_t digits,char fillChar=' '); // Print int into printCols
|
||||
void addLong(long value,char digits);
|
||||
inline void addLong(long value) {addLong(value, -11);};
|
||||
void addFloat(float number, char fixdigits,uint8_t digits);
|
||||
inline void addFloat(float number) {addFloat(number, -9,2);};
|
||||
void addStringP(PGM_P text);
|
||||
void addChar(const char c);
|
||||
void addGCode(GCode *code);
|
||||
bool okAction(bool allowMoves);
|
||||
bool nextPreviousAction(int8_t next, bool allowMoves);
|
||||
char statusMsg[21];
|
||||
int8_t encoderPos;
|
||||
int8_t encoderLast;
|
||||
UIDisplay();
|
||||
void createChar(uint8_t location, const uint8_t charmap[]);
|
||||
void initialize(); // Initialize display and keys
|
||||
void waitForKey();
|
||||
void printRow(uint8_t r, char *txt, char *txt2, uint8_t changeAtCol); // Print row on display
|
||||
void printRowP(uint8_t r,PGM_P txt);
|
||||
void parse(const char *txt,bool ram); /// Parse output and write to printCols;
|
||||
void refreshPage();
|
||||
bool executeAction(int action, bool allowMoves);
|
||||
void finishAction(int action);
|
||||
void slowAction(bool allowMoves);
|
||||
void fastAction();
|
||||
void mediumAction();
|
||||
bool confirmationDialog(char * title,char * line1,char * line2,int type=UI_CONFIRMATION_TYPE_YES_NO, bool defaultresponse=false);
|
||||
void pushMenu(const UIMenu *men, bool refresh);
|
||||
void adjustMenuPos();
|
||||
void setStatusP(PGM_P txt, bool error = false);
|
||||
void setStatus(const char *txt, bool error = false);
|
||||
inline void setOutputMaskBits(unsigned int bits) {outputMask |= bits;}
|
||||
inline void unsetOutputMaskBits(unsigned int bits) {outputMask &= ~bits;}
|
||||
void updateSDFileCount();
|
||||
void goDir(char *name);
|
||||
bool isDirname(char *name);
|
||||
char cwd[SD_MAX_FOLDER_DEPTH*LONG_FILENAME_LENGTH+2];
|
||||
uint8_t folderLevel;
|
||||
};
|
||||
extern UIDisplay uid;
|
||||
extern void beep(uint8_t duration,uint8_t count);
|
||||
|
||||
extern void playsound(int tone,int duration);
|
||||
#endif
|
||||
|
||||
|
|
Plik diff jest za duży
Load Diff
Ładowanie…
Reference in New Issue