add delay_keep_alive without updating lcd

This commit is contained in:
NotaRobotexe 2019-06-25 14:30:11 +02:00
parent 24cec4091b
commit 4058cd144b
3 changed files with 35 additions and 15 deletions

View File

@ -407,6 +407,8 @@ extern void calculate_extruder_multipliers();
// Similar to the default Arduino delay function, // Similar to the default Arduino delay function,
// but it keeps the background tasks running. // but it keeps the background tasks running.
extern void delay_keep_alive(unsigned int ms); extern void delay_keep_alive(unsigned int ms);
// same but this need to be used when calling delay from lcd_update() else stack owerflow can occur
extern void delay_keep_alive_no_lcd_update(unsigned int ms);
extern void check_babystep(); extern void check_babystep();

View File

@ -8078,6 +8078,24 @@ void delay_keep_alive(unsigned int ms)
} }
} }
void delay_keep_alive_no_lcd_update(unsigned int ms)
{
for (;;) {
manage_heater();
// Manage inactivity, but don't disable steppers on timeout.
manage_inactivity(true);
if (ms == 0)
break;
else if (ms >= 50) {
_delay(50);
ms -= 50;
} else {
_delay(ms);
ms = 0;
}
}
}
static void wait_for_heater(long codenum, uint8_t extruder) { static void wait_for_heater(long codenum, uint8_t extruder) {
#ifdef TEMP_RESIDENCY_TIME #ifdef TEMP_RESIDENCY_TIME

View File

@ -66,12 +66,12 @@ void Sound_MakeCustom(uint16_t ms,uint16_t tone_,bool critical){
if (eSoundMode != e_SOUND_MODE_SILENT){ if (eSoundMode != e_SOUND_MODE_SILENT){
if(!tone_){ if(!tone_){
WRITE(BEEPER, HIGH); WRITE(BEEPER, HIGH);
delayMicroseconds(ms); delay_keep_alive_no_lcd_update(ms);
WRITE(BEEPER, LOW); WRITE(BEEPER, LOW);
} }
else{ else{
_tone(BEEPER, tone_); _tone(BEEPER, tone_);
delay_keep_alive(ms); delay_keep_alive_no_lcd_update(ms);
_noTone(BEEPER); _noTone(BEEPER);
} }
} }
@ -79,13 +79,13 @@ void Sound_MakeCustom(uint16_t ms,uint16_t tone_,bool critical){
else{ else{
if(!tone_){ if(!tone_){
WRITE(BEEPER, HIGH); WRITE(BEEPER, HIGH);
delayMicroseconds(ms); delay_keep_alive_no_lcd_update(ms);
WRITE(BEEPER, LOW); WRITE(BEEPER, LOW);
delayMicroseconds(100); delay_keep_alive_no_lcd_update(100);
} }
else{ else{
_tone(BEEPER, tone_); _tone(BEEPER, tone_);
delay_keep_alive(ms); delay_keep_alive_no_lcd_update(ms);
_noTone(BEEPER); _noTone(BEEPER);
} }
} }
@ -97,7 +97,7 @@ switch(eSoundMode)
{ {
case e_SOUND_MODE_LOUD: case e_SOUND_MODE_LOUD:
if(eSoundType==e_SOUND_TYPE_ButtonEcho) if(eSoundType==e_SOUND_TYPE_ButtonEcho)
Sound_DoSound_Echo(); delay_keep_alive_no_lcd_update();
if(eSoundType==e_SOUND_TYPE_StandardPrompt) if(eSoundType==e_SOUND_TYPE_StandardPrompt)
Sound_DoSound_Prompt(); Sound_DoSound_Prompt();
if(eSoundType==e_SOUND_TYPE_StandardAlert) if(eSoundType==e_SOUND_TYPE_StandardAlert)
@ -135,9 +135,9 @@ switch(eSoundMode)
static void Sound_DoSound_Blind_Alert(void) static void Sound_DoSound_Blind_Alert(void)
{ {
_tone(BEEPER,100); _tone(BEEPER,100);
delay_keep_alive(50); delay_keep_alive_no_lcd_update(50);
_noTone(BEEPER); _noTone(BEEPER);
delay_keep_alive(200); delay_keep_alive_no_lcd_update(200);
} }
static void Sound_DoSound_Encoder_Move(void) static void Sound_DoSound_Encoder_Move(void)
@ -147,9 +147,9 @@ uint8_t nI;
for(nI=0;nI<5;nI++) for(nI=0;nI<5;nI++)
{ {
WRITE(BEEPER,HIGH); WRITE(BEEPER,HIGH);
delayMicroseconds(75); delay_keep_alive_no_lcd_update(75);
WRITE(BEEPER,LOW); WRITE(BEEPER,LOW);
delayMicroseconds(75); delay_keep_alive_no_lcd_update(75);
} }
} }
@ -160,16 +160,16 @@ uint8_t nI;
for(nI=0;nI<10;nI++) for(nI=0;nI<10;nI++)
{ {
WRITE(BEEPER,HIGH); WRITE(BEEPER,HIGH);
delayMicroseconds(100); delay_keep_alive_no_lcd_update(100);
WRITE(BEEPER,LOW); WRITE(BEEPER,LOW);
delayMicroseconds(100); delay_keep_alive_no_lcd_update(100);
} }
} }
static void Sound_DoSound_Prompt(void) static void Sound_DoSound_Prompt(void)
{ {
WRITE(BEEPER,HIGH); WRITE(BEEPER,HIGH);
delay_keep_alive(500); delay_keep_alive_no_lcd_update(500);
WRITE(BEEPER,LOW); WRITE(BEEPER,LOW);
} }
@ -181,8 +181,8 @@ nMax=bOnce?1:3;
for(nI=0;nI<nMax;nI++) for(nI=0;nI<nMax;nI++)
{ {
WRITE(BEEPER,HIGH); WRITE(BEEPER,HIGH);
delay_keep_alive(200); delay_keep_alive_no_lcd_update(200);
WRITE(BEEPER,LOW); WRITE(BEEPER,LOW);
delay_keep_alive(500); delay_keep_alive_no_lcd_update(500);
} }
} }