Merge pull request #4474 from 3d-gussner/M709_v2

Add en- and disable MMU to M709
This commit is contained in:
Guðni Már Gilbert 2023-11-12 09:35:43 +00:00 committed by GitHub
commit 53d7943a2c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 54 additions and 4 deletions

View File

@ -1125,6 +1125,7 @@ void setup()
if (eeprom_init_default_byte((uint8_t *)EEPROM_MMU_ENABLED, 0)) {
MMU2::mmu2.Start();
}
MMU2::mmu2.Status();
SpoolJoin::spooljoin.initSpoolJoinStatus();
//SERIAL_ECHOPAIR("Active sheet before:", static_cast<unsigned long int>(eeprom_read_byte(&(EEPROM_Sheets_base->active_sheet))));
@ -8581,14 +8582,17 @@ Sigma_Exit:
} break;
/*!
### M709 - MMU reset <a href="https://reprap.org/wiki/G-code#M709:_MMU_reset">M709: MMU reset</a>
The MK3S cannot not power off the MMU, for that reason the functionality is not supported.
### M709 - MMU power & reset <a href="https://reprap.org/wiki/G-code#M709:_MMU_power_&_reset">M709: MMU power & reset</a>
The MK3S cannot not power off the MMU, but we can en- and disable the MMU.
The new state of the MMU is stored in printer's EEPROM - i.e. if you disable the MMU via M709, it will not be activated after the printer resets.
#### Usage
M709 [ X ]
M709 [ S | X ]
#### Parameters
- `X` - Reset MMU (0:soft reset | 1:hardware reset)
- `X` - Reset MMU (0:soft reset | 1:hardware reset | 42: erase MMU eeprom)
- `S` - En-/disable the MMU (0:off | 1:on)
#### Example
@ -8596,9 +8600,32 @@ Sigma_Exit:
M709 X1 - toggle the MMU's reset pin (hardware reset)
M709 X42 - erase MMU EEPROM
M709 S1 - enable MMU
M709 S0 - disable MMU
M709 - Serial message if en- or disabled
*/
case 709:
{
if (code_seen('S'))
{
switch (code_value_uint8())
{
case 0:
eeprom_update_byte((uint8_t *)EEPROM_MMU_ENABLED, false);
MMU2::mmu2.Stop();
break;
case 1:
eeprom_update_byte((uint8_t *)EEPROM_MMU_ENABLED, true);
MMU2::mmu2.Start();
break;
default:
break;
}
}
if (MMU2::mmu2.Enabled() && code_seen('X'))
{
switch (code_value_uint8())
@ -8609,10 +8636,14 @@ Sigma_Exit:
case 1:
MMU2::mmu2.Reset(MMU2::MMU2::ResetPin);
break;
case 42:
MMU2::mmu2.Reset(MMU2::MMU2::EraseEEPROM);
break;
default:
break;
}
}
MMU2::mmu2.Status();
}
break;

View File

@ -12,6 +12,9 @@
#include "strlen_cx.h"
#include "SpoolJoin.h"
#include "messages.h"
#include "language.h"
#ifdef __AVR__
// As of FW 3.12 we only support building the FW with only one extruder, all the multi-extruder infrastructure will be removed.
// Saves at least 800B of code size
@ -52,6 +55,17 @@ MMU2::MMU2()
, tmcFailures(0) {
}
void MMU2::Status() {
// Useful information to see during bootup and change state
SERIAL_ECHOPGM("MMU is ");
uint8_t status = eeprom_init_default_byte((uint8_t*)EEPROM_MMU_ENABLED, 0);
if (status == 1) {
SERIAL_ECHOLNRPGM(_O(MSG_ON));
} else {
SERIAL_ECHOLNRPGM(_O(MSG_OFF));
}
}
void MMU2::Start() {
mmu2Serial.begin(MMU_BAUD);

View File

@ -39,6 +39,9 @@ public:
/// Stops the protocol logic, closes the UART, powers OFF the MMU
void Stop();
/// Serial output of MMU state
void Status();
inline xState State() const { return state; }
inline bool Enabled() const { return State() == xState::Active; }

View File

@ -347,6 +347,7 @@ void TryLoadUnloadReporter::DumpToSerial(){
/// Disables MMU in EEPROM
void DisableMMUInSettings() {
eeprom_update_byte((uint8_t *)EEPROM_MMU_ENABLED, false);
mmu2.Status();
}
void IncrementLoadFails(){

View File

@ -4093,6 +4093,7 @@ static void mmu_enable_switch()
}
eeprom_toggle((uint8_t *)EEPROM_MMU_ENABLED);
MMU2::mmu2.Status();
}
static void SETTINGS_SILENT_MODE()