Commit Graph

7145 Commits

Author SHA1 Message Date
Alex Voinea 10ba758bf7
Fix menu encoder rotation 2023-04-06 21:35:30 +02:00
Alex Voinea 373fab883d Fix fsensor runout conditions
And also reorder autoload and runout conditions
2023-04-06 10:37:29 +02:00
D.R.racer dfe6ea6470 Fixup after rebase 2023-04-06 07:44:16 +02:00
D.R.racer c16db4e607 Remove lcd_encoder clamp check
as proposed by @leptun
2023-04-06 07:44:16 +02:00
Guðni Már Gilbert 6d2a66c1e8 match menu_goto's encoder type to lcd_encoder type
Change in memory:
Flash: -20 bytes
SRAM: 0 bytes
2023-04-06 07:44:16 +02:00
Guðni Már Gilbert 4ca7f8ce2d cleanup: drop lcd_encoder in _menu_edit_P
Taken from PR 3985 by adding currentValue infrastructure

Change in memory:
Flash: 0 bytes
SRAM: 0 bytes
2023-04-06 07:44:16 +02:00
Guðni Már Gilbert 062ea1cf25 optimisation: make lcd_encoder two bytes (int16_t)
lcd_encoder was int32_t (4 bytes) because of the menu code
when editing through the menus, the menus only accept
int16_t so it doesnt make sense to use int32_t.

Change in memory:
Flash: -892 bytes
SRAM: -2 bytes
2023-04-06 07:44:16 +02:00
Guðni Már Gilbert c754c8dd5f Remove menu code in favor of simplicity
This change needs to be approved of course due to it affecting UI

The affect UI is only one menu
lcd_settings_linearity_correction_menu

I doubt many users are using this menu except very advanced users.

I propose we delete the variant of menu_draw_P which was used for
uint8_t but renders them as floats.
Instead treat
uint8_t same as int16_t i.e. just render integers.

Keeping it simple :) Solve our fanSpeed problem.

Change in memory:
Flash: -140 bytes
SRAM: -2 bytes
2023-04-06 06:05:59 +02:00
Guðni Már Gilbert 876ea6c228 Change block buffer fan speed to one byte
It's only assigned to variables which are uint8_t

Change in memory:
Flash: -10 bytes
SRAM: -16 bytes
2023-04-06 06:05:59 +02:00
Guðni Már Gilbert 2ced00f21c Convert fanSpeed and saved_fan_speed to uint8_t
These variables only range from 0 to 255

For the menus we currently need to convert fanSpeed to int16_t.

Change in memory:
Flash: -160 bytes
SRAM: -2 bytes
2023-04-06 06:05:59 +02:00
Guðni Már Gilbert 76a8c80ef0 Fix issue with size being wrong at runtime
Change in memory:
Flash: +40 bytes
SRAM: 0 bytes
2023-04-05 17:52:48 +02:00
Guðni Már Gilbert 7ad137e570 Add preheat_cmd into PROGMEM
Change in memory:
Flash: -30 bytes
SRAM: 0 bytes
2023-04-05 17:52:48 +02:00
Guðni Már Gilbert 5ef00fb78a Reduce code size in first layer calibration
Pull out common enqueuing loop into one function

Change in memory:
Flash: -70 bytes
SRAM: 0 bytes
2023-04-05 17:52:48 +02:00
Guðni Már Gilbert 5b04812017 Eliminate subtraction in print time statistic
Change in memory:
Flash: -20 bytes
SRAM: 0 bytes
2023-04-05 11:16:54 +02:00
Guðni Már Gilbert ee39cb4e90 remove one global variable 2023-04-05 11:16:54 +02:00
Guðni Már Gilbert 768319f1e7 optimisation: cleanup print statistics
Change in memory:
Flash: -104 bytes
SRAM: 0 bytes
2023-04-05 11:16:54 +02:00
Guðni Már Gilbert b9717b03e7 Make bFilament variables static and move to top of file 2023-04-05 11:16:14 +02:00
Guðni Már Gilbert 68d902c4e1 Take FilamentAction as parameter
Change in memory:
Flash: -28 bytes
SRAM: 0 bytes
2023-04-05 11:16:14 +02:00
Guðni Már Gilbert 210bbe9764 Remove dead code 2023-04-05 11:16:14 +02:00
Guðni Már Gilbert 301b2e4384 Optimisation: Move filAutoLoad to ultralcd
We can reuse preheat_or_continue() function

Change in memory:
Flash: -22 bytes
SRAM: 0 bytes
2023-04-05 11:16:14 +02:00
Alex Voinea 1b9379b328 PSU_DELTA alternative 2023-04-05 11:12:17 +02:00
Guðni Már Gilbert ffc34edf4c Pull in changes from PR 4080
Additionally make lcd_encoder_bits static
since it's not used outside the ISR context
2023-04-05 10:30:59 +02:00
Guðni Már Gilbert a7e9ccfb57 Major refactoring
Fixes all the issues I've found so far.

Roughly 60B of flash saved. Need to double check that later.
2023-04-05 10:30:59 +02:00
Guðni Már Gilbert d89e6de040 Update lcd_encoder in lcd_update
This fixes the spurious feedback when rotating the knob
because lcd_update is called much often than the interval
at which the lcd rendering is updated

Change in memory
Flash: -88 bytes
SRAM: -9 bytes
2023-04-05 10:30:59 +02:00
Guðni Már Gilbert 67c206ea5c Remove menu_back_if_clicked_fb
Since feedback is always produced on knob click
we can use menu_back_if_clicked instead

Change in memory:
Flash: -18 bytes
SRAM: 0 bytes
2023-04-05 10:30:59 +02:00
Guðni Már Gilbert 0cac7612db optimisation: Always make sound when knob is clicked or rotated
This commit adds the ability for firmware to make sounds when the
knob is clicked or rotated, when LCD updates are disabled.

The improvement here is the sound is being made with one line of code
whether or not LCD updates are enabled or disabled.

Change in memory:
Flash: -24 bytes
SRAM: 0 bytes
2023-04-05 10:30:59 +02:00
Guðni Már Gilbert 7de725f840 G80: Change 'correction' data type to int8_t
Valid values range from -100 to 100. Storing this value as four bytes
(int32_t) is not efficient.

Instead we can store G80 user input temporarily as int32_t and check
if the value is within the allowed range. If it is, then we convert the
int32_t (4 bytes) to int8_t (1 byte).

Change in memory:
Flash: -78 bytes
SRAM: 0 bytes
2023-04-05 10:13:27 +02:00
Guðni Már Gilbert 956efde822 G80: Re-implement optimisation from user espr14
Original Pull Request:
https://github.com/prusa3d/Prusa-Firmware/pull/3061

Change in memory:
Flash: -292 bytes
SRAM: 0 bytes
2023-04-05 10:13:27 +02:00
D.R.racer 7f921b4071 Limit some of the float formatting to fit 30 bytes buffer in enquecommandf_P 2023-04-05 09:10:39 +02:00
Guðni Már Gilbert b9ce7637df Rename enquecommandf() into enquecommandf_P() 2023-04-05 09:10:39 +02:00
Guðni Már Gilbert 7e119f733f Implement variant of enquecommand which accepts format string
This eliminates many local buffers

Change in memory:
Flash: -450 bytes
SRAM: 0 bytes
2023-04-05 09:10:39 +02:00
3d-gussner 4cf46893fc Revert "Fix a few ambiguous overloaded calls"
This reverts commit b7c42e83cf.
2023-04-04 16:12:41 +02:00
Guðni Már Gilbert 46852e9941 M862: determine decimal through math rather than checking for null byte/pointer.
This way doesn't add any more flash memory.
Calculating the string length or checking for a null byte
will end up increasing flash consumption overall.
2023-04-04 15:22:21 +02:00
Guðni Már Gilbert 478627b6bc Simplify parsing M862
This gets rid of float conversion.
We just need to check the 6th character when M862 is detected. This
character gives us the digit after the dot.

Change in memory:
Flash: -20 bytes
SRAM: 0 bytes
2023-04-04 15:22:21 +02:00
Guðni Már Gilbert b9fecab239 Reduce calls to __divsf3 when calculating feedrate
For non-time critical code it is more effcient to call a function
rather inlining each division operation.

Change in memory:
Flash: -122 bytes
SRAM: 0 bytes
2023-04-04 15:16:56 +02:00
Guðni Már Gilbert 65750b9a4c accel is uint32_t, drop float in comparsion
Change in memory:
Flash: -24 bytes
SRAM: 0 bytes
2023-04-04 15:11:29 +02:00
Guðni Már Gilbert c0e21563e7 planner: optimise acceleration limits
Rename acceleration_st to acceleration_steps_per_s2 to be same as Marlin 2

Store the accelerator in local variable accel
while we are performing the limit checks.

When limit checks are done we can assign
the block it's acceleration. Especially
block->acceleration_steps_per_s2 is now only written to once, instead of direcly in the limit checks.

Change in memory:
Flash: -118 bytes
SRAM: 0 bytes
2023-04-04 15:11:29 +02:00
3d-gussner a1234b3670
Merge pull request #4122 from leptun/mmu2_fix_ptfe_check_distance
Fix MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH for MMU2
2023-04-04 15:04:58 +02:00
Guðni Már Gilbert b7c42e83cf Fix a few ambiguous overloaded calls
Noticed this when exploring another optimisation

By specification exactly which overloaded function to use
we save some memory

Seems to have something to do with doing arithmetic in the function argument

Change in memory:
Flash: -156 bytes
SRAM: 0 bytes
2023-04-04 15:03:48 +02:00
3d-gussner 3b049a1b91
Merge pull request #4111 from gudnimg/E-cool-gudni
Fix clicking noise during Toolchange when E-cool mode is enabled
2023-04-04 15:03:37 +02:00
3d-gussner eb3421f0f2
Merge pull request #4021 from gudnimg/cleanup_crashdet_detected
cleanup: remove unnecessary LCD update in `crashdet_detected()`
2023-04-04 14:58:30 +02:00
3d-gussner 91ad87b5a7
Merge pull request #4096 from gudnimg/msg-btn-more-translation
Remove `MSG_BTN_MORE` from translation list
2023-04-04 14:57:30 +02:00
Guðni Már Gilbert 3e4592b7fd Don't duplicate silent mode menu
Create a common function for the menu

This saves a lot of memory and 50 lines of code!

Change in memory:
Flash: -110 bytes
SRAM: 0 bytes
2023-04-04 14:47:45 +02:00
Alex Voinea ebf8b16df5
Fix MMU2_CHECK_FILAMENT_PRESENCE_EXTRUSION_LENGTH for MMU2 2023-04-02 11:35:17 +02:00
3d-gussner 26f547bb47
Merge pull request #4113 from gudnimg/G28W-opt
Re-use `G28 W` string from PROGMEM
2023-03-29 08:31:15 +02:00
Guðni Már Gilbert 5be4504fea Re-use G28 W string in PROGMEM
Change in memory:
Flash: -12 bytes
SRAM: 0 bytes
2023-03-27 18:14:28 +00:00
Guðni Már Gilbert 138654e207 Add comment
Note we cannot use too long extrusions
2023-03-26 09:16:07 +00:00
Guðni Már Gilbert 4342217159 Add comment about planner_aborted = false 2023-03-26 09:00:34 +00:00
Guðni Már Gilbert 6bdc3c5cfb Improve MMU toolchange when E-cool mode is enabled
Currently we are queuing many small 2 mm E-moves until the filament
sensor triggers. We do this because we never abort any queued moves,
so making small 2 mm moves ensures we do not move the E-motor more than
2 mm past the filament sensor.

Unfortunately, when E-cool mode is enabled, the E-motor will create
audible clicking sounds (similar one hears during jam or a loose grub
screw). A workaround for this is to queue one or more very long moves.
Where very long is something of the order of hundreds of millimeters. I
have it set to 350 mm but it's just a random constant really. Keep in
mind the firmware will block too large E-moves, if I recall correctly
it was anything above > 450 mm (see PREVENT_LENGTHY_EXTRUDE)

In order to use very long moves, we must somehow stop the E-motor from
moving once the filament sensor triggers. In other words, throw away
what's left of the current E-motor move. For this simple purpose we can
use planner_abort_hard() but we must set planner_aborted to false
afterwards because the code architecture does not allow the main loop()
to run until the Toolchange command is done processing.

Change in memory:
Flash: +18 bytes
SRAM: 0 bytes
2023-03-26 08:57:59 +00:00
3d-gussner 6dbf35f6e6
Merge pull request #4062 from gudnimg/cleanup_move_planned
remove duplicate function in planner
2023-03-24 14:06:19 +01:00