Firmware Capabilities Protocol

From RepRap
Revision as of 03:52, 27 April 2018 by Thinkyhead (talk | contribs) (Add Marlin's current suite of capabilities)
Jump to: navigation, search

Idea

While it is nice if a firmware supports some special features, it would be even better if hosts would detect that these are available so they start using them. Especially with the wild growth of firmware forks and versions, no host can know which variant can handle what. So at least for Repetier-Firmware we introduce with version 1.0 a new simple protocol to tell hosts what features are available, so they can activate them.

Protocol definition

To make it easy to detect, a standard M115 report gets now extended by one or more lines, each line telling what capability. These lines have the following format:

Cap:<NameOfCapability>:<0 or 1>

Notice: no spaces allowed, Name is upper case with underline to separate words. Lines MUST start with "Cap:" so it can be parsed very quickly by hosts.

The last value indicates if that capability is supported or not. The simple absence of a message is not enough since it would be possible, that the firmware simply does not report capabilities at all and host has to make assumptions like showing eeprom editor even with the risk that it is not available. Whereas a 0 value shows that a function is known, but the functionality is not implemented/active.

Knowing different developers will add other capabilities is no real problem as long as all names differ, so hosts can distinguish them by name. Hosts not understanding a name simply ignore them.

Currently-defined capabilities

Cap:EEPROM

The firmware is compiled with EEPROM support.

Cap:AUTOREPORT_TEMP

The firmware can automatically report temperatures. This feature must be enabled by M155 S[interval] so older hosts won't get redundant reports from M105 and this feature.

Cap:AUTOREPORT_SD_STATUS

The firmware will auto-report the SD Card status, using M27 S to enable and set the interval.

Cap:PROGRESS

The firmware supports the progress protocol:

  • M530 S<printing> L<layer> - Enables explicit printing mode (S1) or disables it (S0). L can set layer count.
  • M531 filename - Set the filename being printed.
  • M532 X<percent> L<curLayer> - Update current print state progress (X=0..100) and layer L.

This allows a host to enable a special information mode on LCD display, so users see progress in percent, model being printed, layer being printed, and total layer count. (Hosts can also use M117 to show time remaining on the LCD status line.)

This feature should only be enabled if a display is available to show it, otherwise the extra commands are useless.

Cap:PRINT_JOB

The firmware supports the Print Job Timer commands M75 Start, M76 Pause, and M77 Stop.

Cap:BUILD_PERCENT

The firmware supports setting the progress percentage with M73 P, required to show progress for host-based printing on the machine's display.

Cap:Z_PROBE

The firmware supports single point Z probing with G30.

Cap:AUTOLEVEL

The firmware supports auto-leveling with G29.

Cap:LEVELING_DATA

The firmware supports M420 V to report the stored leveling (mesh) data.

Cap:SOFTWARE_POWER

The firmware supports enabling/disabling power with M80 and M81.

Cap:TOGGLE_LIGHTS

The firmware supports turning the case lights on/off with M355 S1 and M355 S0. (May also support setting case light brightness with S values 2-255.)

Cap:CASE_LIGHT_BRIGHTNESS

The firmware supports setting the case light brightness with M355 S and values 2-255.

Cap:EMERGENCY_PARSER

The firmware supports immediate execution of commands M108, M112, and M410. With this capability M108 can be used to break out of M0/M1, M109, and M190.

Cap:SERIAL_XON_XOFF

The firmware supports serial XON/XOFF handshaking.

Cap:VOLUMETRIC

The firmware supports Volumetric Extrusion with M200 T D.

Cap:THERMAL_PROTECTION

The firmware has thermal protection enabled. Hosts can use this item to warn users of a potential fire hazard.