Revert LongTimers to uint32_t in mmu.cpp to fix issues with MMU2 fw 1.0.6
This commit is contained in:
parent
fdadc9314e
commit
6db58f09d0
@ -76,9 +76,12 @@ int16_t mmu_version = -1;
|
|||||||
|
|
||||||
int16_t mmu_buildnr = -1;
|
int16_t mmu_buildnr = -1;
|
||||||
|
|
||||||
LongTimer mmu_last_request;
|
uint32_t mmu_last_request;
|
||||||
LongTimer mmu_last_response;
|
uint32_t mmu_last_response;
|
||||||
LongTimer mmu_last_finda_response;
|
uint32_t mmu_last_finda_response;
|
||||||
|
//LongTimer mmu_last_request;
|
||||||
|
//LongTimer mmu_last_response;
|
||||||
|
//LongTimer mmu_last_finda_response;
|
||||||
|
|
||||||
MmuCmd mmu_last_cmd = MmuCmd::None;
|
MmuCmd mmu_last_cmd = MmuCmd::None;
|
||||||
uint16_t mmu_power_failures = 0;
|
uint16_t mmu_power_failures = 0;
|
||||||
@ -114,7 +117,8 @@ int mmu_puts_P(const char* str)
|
|||||||
{
|
{
|
||||||
mmu_clr_rx_buf(); //clear rx buffer
|
mmu_clr_rx_buf(); //clear rx buffer
|
||||||
int r = fputs_P(str, uart2io); //send command
|
int r = fputs_P(str, uart2io); //send command
|
||||||
mmu_last_request.start();
|
mmu_last_request = _millis();
|
||||||
|
//mmu_last_request.start();
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -126,7 +130,8 @@ int mmu_printf_P(const char* format, ...)
|
|||||||
mmu_clr_rx_buf(); //clear rx buffer
|
mmu_clr_rx_buf(); //clear rx buffer
|
||||||
int r = vfprintf_P(uart2io, format, args); //send command
|
int r = vfprintf_P(uart2io, format, args); //send command
|
||||||
va_end(args);
|
va_end(args);
|
||||||
mmu_last_request.start();
|
mmu_last_request = _millis();
|
||||||
|
//mmu_last_request.start();
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -134,7 +139,8 @@ int mmu_printf_P(const char* format, ...)
|
|||||||
int8_t mmu_rx_ok(void)
|
int8_t mmu_rx_ok(void)
|
||||||
{
|
{
|
||||||
int8_t res = uart2_rx_str_P(PSTR("ok\n"));
|
int8_t res = uart2_rx_str_P(PSTR("ok\n"));
|
||||||
if (res == 1) mmu_last_response.start();
|
if (res == 1) mmu_last_response = _millis();
|
||||||
|
//if (res == 1) mmu_last_response.start();
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -142,7 +148,8 @@ int8_t mmu_rx_ok(void)
|
|||||||
int8_t mmu_rx_start(void)
|
int8_t mmu_rx_start(void)
|
||||||
{
|
{
|
||||||
int8_t res = uart2_rx_str_P(PSTR("start\n"));
|
int8_t res = uart2_rx_str_P(PSTR("start\n"));
|
||||||
if (res == 1) mmu_last_response.start();
|
if (res == 1) mmu_last_response = _millis();
|
||||||
|
//if (res == 1) mmu_last_response.start();
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -201,12 +208,12 @@ static bool activate_stealth_mode()
|
|||||||
void mmu_loop(void)
|
void mmu_loop(void)
|
||||||
{
|
{
|
||||||
static uint8_t mmu_attempt_nr = 0;
|
static uint8_t mmu_attempt_nr = 0;
|
||||||
// printf_P(PSTR("MMU loop, state=%d\n"), mmu_state);
|
// printf_P(PSTR("MMU loop, state=%d\n"), (int)mmu_state);
|
||||||
switch (mmu_state)
|
switch (mmu_state)
|
||||||
{
|
{
|
||||||
case S::Disabled:
|
case S::Disabled: //state 0
|
||||||
return;
|
return;
|
||||||
case S::Init:
|
case S::Init: //state 1
|
||||||
if (mmu_rx_start() > 0)
|
if (mmu_rx_start() > 0)
|
||||||
{
|
{
|
||||||
DEBUG_PUTS_P(PSTR("MMU => 'start'"));
|
DEBUG_PUTS_P(PSTR("MMU => 'start'"));
|
||||||
@ -220,7 +227,7 @@ void mmu_loop(void)
|
|||||||
mmu_state = S::Disabled;
|
mmu_state = S::Disabled;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
case S::GetVersion:
|
case S::GetVersion: //state 2
|
||||||
if (mmu_rx_ok() > 0)
|
if (mmu_rx_ok() > 0)
|
||||||
{
|
{
|
||||||
fscanf_P(uart2io, PSTR("%u"), &mmu_version); //scan version from buffer
|
fscanf_P(uart2io, PSTR("%u"), &mmu_version); //scan version from buffer
|
||||||
@ -230,7 +237,7 @@ void mmu_loop(void)
|
|||||||
mmu_state = S::GetBuildNr;
|
mmu_state = S::GetBuildNr;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
case S::GetBuildNr:
|
case S::GetBuildNr: //state 3
|
||||||
if (mmu_rx_ok() > 0)
|
if (mmu_rx_ok() > 0)
|
||||||
{
|
{
|
||||||
fscanf_P(uart2io, PSTR("%u"), &mmu_buildnr); //scan buildnr from buffer
|
fscanf_P(uart2io, PSTR("%u"), &mmu_buildnr); //scan buildnr from buffer
|
||||||
@ -254,7 +261,7 @@ void mmu_loop(void)
|
|||||||
|
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
case S::WaitStealthMode:
|
case S::WaitStealthMode: //state 4
|
||||||
if (mmu_rx_ok() > 0)
|
if (mmu_rx_ok() > 0)
|
||||||
{
|
{
|
||||||
FDEBUG_PUTS_P(PSTR("MMU <= 'P0'"));
|
FDEBUG_PUTS_P(PSTR("MMU <= 'P0'"));
|
||||||
@ -262,11 +269,12 @@ void mmu_loop(void)
|
|||||||
mmu_state = S::GetFindaInit;
|
mmu_state = S::GetFindaInit;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
case S::GetFindaInit:
|
case S::GetFindaInit: //state 5
|
||||||
if (mmu_rx_ok() > 0)
|
if (mmu_rx_ok() > 0)
|
||||||
{
|
{
|
||||||
fscanf_P(uart2io, PSTR("%hhu"), &mmu_finda); //scan finda from buffer. MUST BE %hhu!!!
|
fscanf_P(uart2io, PSTR("%hhu"), &mmu_finda); //scan finda from buffer. MUST BE %hhu!!!
|
||||||
mmu_last_finda_response.start();
|
mmu_last_finda_response = _millis();
|
||||||
|
//mmu_last_finda_response.start();
|
||||||
FDEBUG_PRINTF_P(PSTR("MMU => '%dok'\n"), mmu_finda);
|
FDEBUG_PRINTF_P(PSTR("MMU => '%dok'\n"), mmu_finda);
|
||||||
puts_P(PSTR("MMU - ENABLED"));
|
puts_P(PSTR("MMU - ENABLED"));
|
||||||
mmu_enabled = true;
|
mmu_enabled = true;
|
||||||
@ -276,7 +284,7 @@ void mmu_loop(void)
|
|||||||
mmu_state = S::Idle;
|
mmu_state = S::Idle;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
case S::Idle:
|
case S::Idle: //state 6
|
||||||
if (mmu_cmd != MmuCmd::None) //command request ?
|
if (mmu_cmd != MmuCmd::None) //command request ?
|
||||||
{
|
{
|
||||||
if ((mmu_cmd >= MmuCmd::T0) && (mmu_cmd <= MmuCmd::T4))
|
if ((mmu_cmd >= MmuCmd::T0) && (mmu_cmd <= MmuCmd::T4))
|
||||||
@ -351,7 +359,8 @@ void mmu_loop(void)
|
|||||||
mmu_printf_P(PSTR("M%d\n"), SilentModeMenu_MMU);
|
mmu_printf_P(PSTR("M%d\n"), SilentModeMenu_MMU);
|
||||||
mmu_state = S::SwitchMode;
|
mmu_state = S::SwitchMode;
|
||||||
}
|
}
|
||||||
else if (mmu_last_response.expired(300)) //request every 300ms
|
else if ((mmu_last_response + 300) < _millis()) //request every 300ms
|
||||||
|
//else if (mmu_last_response.expired(300)) //request every 300ms
|
||||||
{
|
{
|
||||||
#ifndef IR_SENSOR
|
#ifndef IR_SENSOR
|
||||||
if(check_for_ir_sensor()) ir_sensor_detected = true;
|
if(check_for_ir_sensor()) ir_sensor_detected = true;
|
||||||
@ -360,8 +369,11 @@ void mmu_loop(void)
|
|||||||
mmu_puts_P(PSTR("P0\n")); //send 'read finda' request
|
mmu_puts_P(PSTR("P0\n")); //send 'read finda' request
|
||||||
mmu_state = S::GetFinda;
|
mmu_state = S::GetFinda;
|
||||||
}
|
}
|
||||||
|
//printf_P(PSTR("MMU loop, state %d\n"), (int)mmu_state);
|
||||||
|
//printf_P(PSTR("mmu_last_response %lu\n"), mmu_last_response.elapsed());
|
||||||
|
//printf_P(PSTR("mmu_last_finda_response %lu\n"), mmu_last_finda_response.elapsed());
|
||||||
return;
|
return;
|
||||||
case S::GetFinda: //response to command P0
|
case S::GetFinda: //response to command P0 state 7
|
||||||
if (mmu_idl_sens)
|
if (mmu_idl_sens)
|
||||||
{
|
{
|
||||||
if (READ(IR_SENSOR_PIN) == 0 && mmu_loading_flag)
|
if (READ(IR_SENSOR_PIN) == 0 && mmu_loading_flag)
|
||||||
@ -379,7 +391,8 @@ void mmu_loop(void)
|
|||||||
if (mmu_rx_ok() > 0)
|
if (mmu_rx_ok() > 0)
|
||||||
{
|
{
|
||||||
fscanf_P(uart2io, PSTR("%hhu"), &mmu_finda); //scan finda from buffer. MUST BE %hhu!!!
|
fscanf_P(uart2io, PSTR("%hhu"), &mmu_finda); //scan finda from buffer. MUST BE %hhu!!!
|
||||||
mmu_last_finda_response.start();
|
mmu_last_finda_response = _millis();
|
||||||
|
//mmu_last_finda_response.start();
|
||||||
FDEBUG_PRINTF_P(PSTR("MMU => '%dok'\n"), mmu_finda);
|
FDEBUG_PRINTF_P(PSTR("MMU => '%dok'\n"), mmu_finda);
|
||||||
//printf_P(PSTR("Eact: %d\n"), int(e_active()));
|
//printf_P(PSTR("Eact: %d\n"), int(e_active()));
|
||||||
if (!mmu_finda && CHECK_FSENSOR && fsensor_enabled) {
|
if (!mmu_finda && CHECK_FSENSOR && fsensor_enabled) {
|
||||||
@ -399,12 +412,13 @@ void mmu_loop(void)
|
|||||||
if (mmu_cmd == MmuCmd::None)
|
if (mmu_cmd == MmuCmd::None)
|
||||||
mmu_ready = true;
|
mmu_ready = true;
|
||||||
}
|
}
|
||||||
else if (mmu_last_request.expired(MMU_P0_TIMEOUT))
|
else if ((mmu_last_request + MMU_P0_TIMEOUT) < _millis())
|
||||||
|
//else if (mmu_last_request.expired(MMU_P0_TIMEOUT))
|
||||||
{ //resend request after timeout (30s)
|
{ //resend request after timeout (30s)
|
||||||
mmu_state = S::Idle;
|
mmu_state = S::Idle;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
case S::WaitCmd: //response to mmu commands
|
case S::WaitCmd: //response to mmu commands state 8
|
||||||
if (mmu_idl_sens)
|
if (mmu_idl_sens)
|
||||||
{
|
{
|
||||||
if (READ(IR_SENSOR_PIN) == 0 && mmu_loading_flag)
|
if (READ(IR_SENSOR_PIN) == 0 && mmu_loading_flag)
|
||||||
@ -425,7 +439,8 @@ void mmu_loop(void)
|
|||||||
mmu_ready = true;
|
mmu_ready = true;
|
||||||
mmu_state = S::Idle;
|
mmu_state = S::Idle;
|
||||||
}
|
}
|
||||||
else if (mmu_last_request.expired(MMU_CMD_TIMEOUT))
|
else if ((mmu_last_request + MMU_CMD_TIMEOUT) < _millis())
|
||||||
|
//else if (mmu_last_request.expired(MMU_CMD_TIMEOUT))
|
||||||
{ //resend request after timeout (5 min)
|
{ //resend request after timeout (5 min)
|
||||||
if (mmu_last_cmd != MmuCmd::None)
|
if (mmu_last_cmd != MmuCmd::None)
|
||||||
{
|
{
|
||||||
@ -444,7 +459,7 @@ void mmu_loop(void)
|
|||||||
mmu_state = S::Idle;
|
mmu_state = S::Idle;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
case S::Pause:
|
case S::Pause: //state 9
|
||||||
if (mmu_rx_ok() > 0)
|
if (mmu_rx_ok() > 0)
|
||||||
{
|
{
|
||||||
DEBUG_PRINTF_P(PSTR("MMU => 'ok', resume print\n"));
|
DEBUG_PRINTF_P(PSTR("MMU => 'ok', resume print\n"));
|
||||||
@ -459,7 +474,7 @@ void mmu_loop(void)
|
|||||||
mmu_state = S::Idle;
|
mmu_state = S::Idle;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
case S::GetDrvError:
|
case S::GetDrvError: //state 10
|
||||||
if (mmu_rx_ok() > 0)
|
if (mmu_rx_ok() > 0)
|
||||||
{
|
{
|
||||||
fscanf_P(uart2io, PSTR("%d"), &mmu_power_failures); //scan power failures
|
fscanf_P(uart2io, PSTR("%d"), &mmu_power_failures); //scan power failures
|
||||||
@ -468,19 +483,21 @@ void mmu_loop(void)
|
|||||||
mmu_ready = true;
|
mmu_ready = true;
|
||||||
mmu_state = S::Idle;
|
mmu_state = S::Idle;
|
||||||
}
|
}
|
||||||
else if (mmu_last_request.expired(MMU_CMD_TIMEOUT))
|
else if ((mmu_last_request + MMU_CMD_TIMEOUT) < _millis())
|
||||||
|
//else if (mmu_last_request.expired(MMU_CMD_TIMEOUT))
|
||||||
{ //timeout 45 s
|
{ //timeout 45 s
|
||||||
mmu_state = S::Idle;
|
mmu_state = S::Idle;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
case S::SwitchMode:
|
case S::SwitchMode: //state 11
|
||||||
if (mmu_rx_ok() > 0)
|
if (mmu_rx_ok() > 0)
|
||||||
{
|
{
|
||||||
DEBUG_PRINTF_P(PSTR("MMU => 'ok'\n"));
|
DEBUG_PRINTF_P(PSTR("MMU => 'ok'\n"));
|
||||||
eeprom_update_byte((uint8_t*)EEPROM_MMU_STEALTH, SilentModeMenu_MMU);
|
eeprom_update_byte((uint8_t*)EEPROM_MMU_STEALTH, SilentModeMenu_MMU);
|
||||||
mmu_state = S::Idle;
|
mmu_state = S::Idle;
|
||||||
}
|
}
|
||||||
else if (mmu_last_request.expired(MMU_CMD_TIMEOUT))
|
else if ((mmu_last_request + MMU_CMD_TIMEOUT) < _millis())
|
||||||
|
//else if (mmu_last_request.expired(MMU_CMD_TIMEOUT))
|
||||||
{ //timeout 45 s
|
{ //timeout 45 s
|
||||||
mmu_state = S::Idle;
|
mmu_state = S::Idle;
|
||||||
}
|
}
|
||||||
@ -724,6 +741,7 @@ void manage_response(bool move_axes, bool turn_off_nozzle, uint8_t move)
|
|||||||
screen++;
|
screen++;
|
||||||
}
|
}
|
||||||
else { //screen 1
|
else { //screen 1
|
||||||
|
//printf_P(PSTR("active ex: %d deg: %d turn_off_nozzle: %d\n"),active_extruder ,degTargetHotend(active_extruder), (int)turn_off_nozzle);
|
||||||
if((degTargetHotend(active_extruder) == 0) && turn_off_nozzle) lcd_display_message_fullscreen_P(_i("Press the knob to resume nozzle temperature."));////MSG_RESUME_NOZZLE_TEMP c=20 r=4
|
if((degTargetHotend(active_extruder) == 0) && turn_off_nozzle) lcd_display_message_fullscreen_P(_i("Press the knob to resume nozzle temperature."));////MSG_RESUME_NOZZLE_TEMP c=20 r=4
|
||||||
else lcd_display_message_fullscreen_P(_i("Fix the issue and then press button on MMU unit."));////MSG_MMU_FIX_ISSUE c=20 r=4
|
else lcd_display_message_fullscreen_P(_i("Fix the issue and then press button on MMU unit."));////MSG_MMU_FIX_ISSUE c=20 r=4
|
||||||
screen=0;
|
screen=0;
|
||||||
|
@ -15,7 +15,8 @@ extern uint8_t mmu_extruder;
|
|||||||
extern uint8_t tmp_extruder;
|
extern uint8_t tmp_extruder;
|
||||||
|
|
||||||
extern int8_t mmu_finda;
|
extern int8_t mmu_finda;
|
||||||
extern LongTimer mmu_last_finda_response;
|
extern uint32_t mmu_last_finda_response;
|
||||||
|
//extern LongTimer mmu_last_finda_response;
|
||||||
extern bool ir_sensor_detected;
|
extern bool ir_sensor_detected;
|
||||||
|
|
||||||
extern int16_t mmu_version;
|
extern int16_t mmu_version;
|
||||||
|
@ -3520,7 +3520,8 @@ static void lcd_show_sensors_state()
|
|||||||
uint8_t idler_state = STATE_NA;
|
uint8_t idler_state = STATE_NA;
|
||||||
|
|
||||||
pinda_state = READ(Z_MIN_PIN);
|
pinda_state = READ(Z_MIN_PIN);
|
||||||
if (mmu_enabled && !mmu_last_finda_response.expired(1000))
|
if (mmu_enabled && ((_millis() - mmu_last_finda_response) < 1000ul))
|
||||||
|
//if (mmu_enabled && !mmu_last_finda_response.expired(1000))
|
||||||
{
|
{
|
||||||
finda_state = mmu_finda;
|
finda_state = mmu_finda;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user