loop_sdcard: Add loopable SD card file sections

To support continuous belt printing, add nestable repeat
loop support via an `[sdcard_loop]` module.

Supported G-Code:
  - SDCARD_LOOP_BEGIN COUNT=n  ; Loop for N times, or infinitely if N is 0
  - SDCARD_LOOP_END            ; End of loop
  - SDCARD_LOOP_DESIST         ; Complete all loops without iterating

Marlin M808 compatibility example in `config/sample-macros.cfg`:
  - M808 Ln        ; Loop for N times, or infinitely if N is 0
  - M808           ; End of loop
  - M808 K         ; Complete all loops without iterating

Added unit tests in test/klippy/sdcard_loop.test

See https://reprap.org/wiki/G-code#M808:_Set_or_Goto_Repeat_Marker

Signed-off-by: Jason S. McMullan <jason.mcmullan@gmail.com>
This commit is contained in:
Jason S. McMullan 2021-04-17 06:54:12 -04:00 committed by KevinOConnor
parent 4ea434796b
commit 913649de2e
8 changed files with 577 additions and 3 deletions

View file

@ -66,6 +66,13 @@ In addition, the following extended commands are availble when the
- Load a file and start SD print: `SDCARD_PRINT_FILE FILENAME=<filename>`
- Unload file and clear SD state: `SDCARD_RESET_FILE`
When the [sdcard_loop config section](Config_Reference.md#sdcard_loop) is
enabled, the following extended commands are available.
- Begin a looped section in the SD print: `SDCARD_LOOP_BEGIN COUNT=<count>`
- A count of 0 indicates that the section should be looped indefinately.
- End a looped section in the SD print: `SDCARD_LOOP_END`
- Complete existing loops without further iterations: `SDCARD_LOOP_DESIST`
## G-Code arcs
The following standard G-Code commands are available if a