When a SD file is selected to print
save the DOS 8.3 extension into EEPROM.
After a power outage, the correct file extension is then
selected instead of always assuming it's ".gco"
This allows users to recover ".g" files.
Change in memory:
Flash: +104 bytes
SRAM: 0 bytes
There is no need to read one byte at a time. We can simply
read the whole block in one go. This saves some flash memory.
Change in memory:
Flash: -18 bytes
SRAM: 0 bytes
We can just read the whole EEPROM block since short filenames
are always null terminated. strcat_P will then apply the file extension
at the correct position.
Change in memory:
Flash: -24 bytes
SRAM: 0 bytes
If the saved printing type was USB, then EEPROM_FILENAME
does not contain anything. The firmware should also
not be trying to open a file on a SD card which is maybe
not even mounted.
Change in memory:
Flash: +12 bytes
SRAM: 0 bytes
There is no need to restrict how often the message is rendered.
It was being restricted to render every 1 second. We don't do
this for most of the static menus. So I propose this 1 second period
be removed.
Tested on MK3S+
Change in memory:
Flash: -168 bytes
SRAM: -8 bytes
My plan is to re-use this function in M79
in a later commit. The firmware doesn't
have a dedicated parser like Marlin 2.1
so this is my attempt to not duplicate the parsing of a quoted string in G-codes
Change in memory (MK3S+ Multilang):
Flash: -50 bytes
SRAM: 0 bytes
The idea is to have the host ping the printer periodically with a M79 to
enable certain features/UI. Using the usb_timer is not a good solution
for this as it depends on seeing a 'G' character
The LCD code, or whatever code is implementing the new functionality
will need to include host.h and check whether M79_timer_get_status()
returns 0 (timer not running) or 1 (timer is running).
I created a new file for the code host.cpp which we can use to expand
host related functionality and not clutter Marlin_main.cpp further.
Change in memory:
Flash: +104 bytes
SRAM: +5 bytes
Setting this state notifies PrusaLink/PrusaConnect
that the printer is waiting for user input (attention).
Change in memory:
Flash: +12 bytes
SRAM: 0 bytes
power_on should not be modifying
EEPROM_MMU_ENABLED. The code is never
executed unless it's already been set.
Only disable EEPROM_MMU_ENABLED through Buttons::DisableMMU
Change in memory:
Flash: -18 bytes
SRAM: 0 bytes
Using uint16_t instead of uint32_t reduces code size
and probably is quicker to execute
OCR4C register is 2 bytes on ATmega2560
It's 1 byte on ATmega32u4 and ATmega16u4
Change in memory:
Flash: -80 bytes
SRAM: 0 bytes
On my end, the default length for the abbreviated commit hash is 9 characters.
This won't fit into uint32_t (4 bytes).
Instead change FW_COMMIT_HASH into a string
and create preprocessor symbol for the string length
such that it's known at compile time.
If the string should be longer or shorter
then only FW_COMMIT_HASH_LENGTH needs to be configured on the CMake side
While waiting for the nozzle to reach a certain temperature, a fan error
should disable the hotend heater. If printing, it will simply pause the print.
Previously the printer would wait for the nozzle to heat up before pausing the print
and turning off the hotend heater.
We rely on LcdCommands::LongPause and must return to the top level loop to process it.
Waiting in the while loop e.g. in M190 does not make sense.
lcd_calibration_menu: Remove redundant if (!isPrintPaused). The menu
is never called unless this condition is true.
eeprom_switch_to_next_sheet: Don't show this menu if the printer
is busy doing work!
Do not allow these menus to run while a print is paused or
when we're recovering a print:
- Preload to MMU
- Load to Nozzle
- Unload filament
- Eject from MMU
- Cut filament
- Autoload filament
- Settings
- Calibration
There is a bug where if the printer is recovering a print, it run a
blocking loop to restore the extruder and bed temperatures.
But if a Fan error is triggered in this loop, then the user can't
abort the print via LCD.
If the fan error resolves on its own the 'Resume print' menu will
appear in a few seconds. But if not, then the user can't resume the print
(which is normal). But with the bug above the user can't abort the print either!
The problem is essentially isPrintPaused variable is cleared too early.
We should wait until the print is completely restored first.
Steps to reproduce:
1. Start a print
2. Pause the print
3. Wait for extruder temperature to fall at lest 180°C
4. Click 'Resume' print
5. While heating, stop the hotend fan and wait for a few seconds until an error is raised
6. Observe issue => 'Stop print' menu item is gone!
PFW-1542
The status line code is not nice, but we need to work around it
so the status line rendering works correctly
This commit mostly reapplies the code
from 3.13.2
Also fixes compiler warnings
There is no problem with opening the menu during first layer
calibration. Removing this condition simplifies the code a little bit.
Change in memory:
Flash: -8 bytes
SRAM: 0 bytes
Drop the ALPHA/BETA/custom version handling. Set the version string and
firmware date based on the current tree description which has all the
required details.
Allow to override the repository information via cmake.
Use a truncated commit hash to set the internal commit number for
compatibility.
Rebase and fix issues
This fixes the undefined _T(label) reference, at the expense of a few
extra bytes.
I would argue this is worth the cost for the ability to check
translation references for the future. The warning happens because
`lang-check` cannot check a reference which is not _directly_ a catalog
entry.
We could introduce a method to suppress this warning (either a new macro
or some ///IGNORE comment), but that would mean that the additional
translation check is completely bypassed, defeating the purpose.
We can't clear eFilamentAction in every case in mFilamentItem()
mFilamentItem() can trigger a call to M701 and M702 e.g. for Autoloading
and eFilamentAction must be cleared by the gcode to prevent
the user from triggering another Autoload (which will crashe the FW)
The same applies to submenus. Now the MMU submenus clear eFilamentAction
only when the action is done.
For MMU Unload Filament item, eFilamentAction is only cleared after
the unload_filament() call is done running. This fixes an issue where
the menu item can be selected again while the first unload is still
running.
The if statement is checked in lcd_sdcard_menu()
so checking it again these functions is
redundant since it's always going to be true.
Tested on MK3S+
Change in memory:
Flash: -22 bytes
SRAM: 0 bytes
Previously these preprocessor macros were always being inlined.
By making these into a function we can control the inlining
more directly.
The number of points on the mesh is also now constant. This means
'n' can now be float at compile time. This removes one uint8_t to float
conversion.
Change in memory:
Flash: -208 bytes
SRAM: 0 bytes
If for some reason a user added a extrusion move in the firmware. Prevent FINDA runout
from triggering.
Change in memory:
Flash: +16 bytes
SRAM: 0 bytes
temp_compensation_start() is only called when
PINDA_THERMISTOR is not defined.
Additionally make sure the retraction or unretraction cannot happen
twice in case MBL fails.
For MK3S users with MMU this extrusion move could
cause a FINDA runout event.
Change in memory:
Flash: -130 bytes
SRAM: 0 bytes
An example is when Unloading filament with MMU.
After the unload completes successfully, some menu items disappeared.
Because mFilamentBack() was not called
Change in memory:
Flash: -56 bytes
SRAM: 0 bytes
Kudos to @3d-gussner for finding the issue
Steps to reproduce:
1. reset printer
2. select Load filament
3. go back to main
4. LCD menu is very limited
5. To get all menus back select 6. Preheat
7. back to main
This commit is my proposed fix.
When eFilamentAction is equal to
FilamentAction::Load we must reset it to FilamentAction::None
when the Back button in Load Filament is selected
Change in memory:
Flash: -26 bytes
SRAM: 0 bytes
- Rename "Idler" to "Sensitivity"
- Implement ReadRegisterInner() as a way to read register in blocking contexts such as manage_response()
This allows us to show the current EEPROM value on the printer's LCD
Add a 'Tune' option to HOMING_IDLER_FAILED error
This will open a menu which allows
the user to change the stallguard threshold
from the MMU error screen
Change in memory:
Flash: +334 bytes
SRAM: +1 byte
I noticed this is how the order is in 3.13.0 and before.
I want to keep it exactly the same.
This somehow saves 2 bytes of flash. Probably compiler magic.
Change in memory:
Flash: -2 bytes
SRAM: 0 bytes
If vSense changes at runtime due to Run current
being changed. Then we must always shift the Hold current
correctly. Whether the vSense is changing 1 -> 0 or 0 ->1
Change in memory (with TMC2130_SERVICE_CODES_M910_M918):
Flash: +76 bytes
SRAM: 0 bytes
The firmware will ensure that the Hold current can never
exceed the Run current. In this scenario we must update
the global current array so that M913 reflects the register settings.
Added a echo to serial when this truncation happens
Change in memory:
Flash: +54 bytes
SRAM: 0 bytes
After dece5d268f, running the thermal
model itself switches the printer to "active", preventing a calibration
run from the LCD to start.
Explicitly allow LcdCommands::ThermalModel in this case.
Allow the LCD menu update function to preset an initial value during the
first encoder increase from the minimal (usually zero) value.
This is useful to jump to a more sensible initial value when turning on
an heater which is currently disabled. The user is still allowed to
decrease the value after the jump, so there's no functional restriction.
If no power panic occurred during M600 we should
clear isPartialBackupAvailable to let the power panic
code know to not use the partial backup. We want the
partial backup ONLY when the extruder is parked after a print is saved.
Change in memory:
Flash: +4 bytes
SRAM: 0 bytes
Proposal to fix some of the issues with the initial implementation
it is safer to use the status line code to print the message so
there aren't any conflicts in the LCD cursor position.
Allow inserting a byte into any position in the LCD status message
Also, add a variable to control from which index in the array
should the message start printing. This is very useful for progress
bars and messages which continually update. I think we can save some
memory by applying this to Mesh Bed Leveling later.
Change in memory:
Flash: +106 bytes
SRAM: +1 byte