Skip to content

Commit

Permalink
Merge remote-tracking branch 'btt_main/master' into fresh
Browse files Browse the repository at this point in the history
  • Loading branch information
Allted committed Sep 22, 2022
2 parents 0ebea81 + 573978b commit f950a86
Show file tree
Hide file tree
Showing 63 changed files with 323 additions and 314 deletions.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file modified Copy to SD Card root directory to update/BIQU_TFT28_V1.0.27.x.bin
Binary file not shown.
Binary file not shown.
Binary file modified Copy to SD Card root directory to update/BIQU_TFT35_V1.0.27.x.bin
Binary file not shown.
Binary file modified Copy to SD Card root directory to update/BIQU_TFT35_V1.1.27.x.bin
Binary file not shown.
Binary file modified Copy to SD Card root directory to update/BIQU_TFT35_V1.2.27.x.bin
Binary file not shown.
Binary file not shown.
Binary file modified Copy to SD Card root directory to update/MKS_TFT28_V3.0.27.x.bin
Binary file not shown.
Binary file modified Copy to SD Card root directory to update/MKS_TFT28_V4.0.27.x.bin
Binary file not shown.
Binary file modified Copy to SD Card root directory to update/MKS_TFT32_V1.3.27.x.bin
Binary file not shown.
Binary file modified Copy to SD Card root directory to update/MKS_TFT32_V1.4.27.x.bin
Binary file not shown.
Binary file modified Copy to SD Card root directory to update/MKS_TFT35_V1_0.27.x.bin
Binary file not shown.
16 changes: 8 additions & 8 deletions Copy to SD Card root directory to update/config.ini
Original file line number Diff line number Diff line change
Expand Up @@ -286,9 +286,9 @@ notification_m117:0
# on the estimate the slicer has done (see notes below).
#
# NOTES:
# - Time mode needs info from the slicer such as the elapsed time or the remaining time ("M73 Rxx").
# If no "M73 Rxx" is present in the G-code file then it needs the slicer includes the time related
# info as comments and "file_comment_parsing" to be enabled.
# - Time mode needs info from the G-code file such as the elapsed time or the remaining time. This info
# can be supplied as "M73 Rxx" G-code or as comment. Both must be generated by the slicer. If comment
# is used than "file_comment_parsing" has to be enabled for it to take effect.
# If that info is missing (comment or "M73 Rxx"), the progress source defaults to option 0 (file mode).
# - If "M73 Pxx" is present in the G-code file then file or time based progress modes will be overriden
# by that.
Expand All @@ -300,9 +300,9 @@ prog_source:1
# This sets the default display type for print progress numeric display. It can be changed during
# print by pressing the hourglass icon. At each click it will alter between the 3 variants.
#
# NOTE: It needs info from the slicer such as the elapsed time or the remaining time ("M73 Rxx").
# If no "M73 Rxx" is present in the G-code file then it needs the slicer includes the time related
# info as comments and "file_comment_parsing" to be enabled.
# NOTE: It needs info from the G-code file such as the elapsed time or the remaining time. This info can
# be supplied as "M73 Rxx" G-code or as comment. Both must be generated by the slicer. If comment
# is used than "file_comment_parsing" has to be enabled for it to take effect.
# If that info is missing (comment or "M73 Rxx"), the display defaults to option 0 (percentage &
# elapsed time).
#
Expand All @@ -322,8 +322,8 @@ prog_disp_type:2
# Separators can be " ", ":", "_" or "=".
# - If the total number of layers exceeds 999, this information will not be displayed because
# there is not enough space for both current and total layer number to be shown.
# - To enable this feature on PrusaSlicer, the following comment lines must be added in
# Printer Settings -> Custom G-code section:
# - If PrusaSlicer is used, to enable the layer number display, the following comment lines must
# be added in Printer Settings -> Custom G-code section:
# - In After layer change G-code section:
# ";LAYER:[layer_num]"
# - In Start G-code section:
Expand Down
16 changes: 8 additions & 8 deletions Copy to SD Card root directory to update/config_rrf.ini
Original file line number Diff line number Diff line change
Expand Up @@ -258,9 +258,9 @@ notification_m117:0
# on the estimate the slicer has done (see notes below).
#
# NOTES:
# - Time mode needs info from the slicer such as the elapsed time or the remaining time ("M73 Rxx").
# If no "M73 Rxx" is present in the G-code file then it needs the slicer includes the time related
# info as comments and "file_comment_parsing" to be enabled.
# - Time mode needs info from the G-code file such as the elapsed time or the remaining time. This info
# can be supplied as "M73 Rxx" G-code or as comment. Both must be generated by the slicer. If comment
# is used than "file_comment_parsing" has to be enabled for it to take effect.
# If that info is missing (comment or "M73 Rxx"), the progress source defaults to option 0 (file mode).
# - If "M73 Pxx" is present in the G-code file then file or time based progress modes will be overriden
# by that.
Expand All @@ -272,9 +272,9 @@ prog_source:1
# This sets the default display type for print progress numeric display. It can be changed during
# print by pressing the hourglass icon. At each click it will alter between the 3 variants.
#
# NOTE: It needs info from the slicer such as the elapsed time or the remaining time ("M73 Rxx").
# If no "M73 Rxx" is present in the G-code file then it needs the slicer includes the time related
# info as comments and "file_comment_parsing" to be enabled.
# NOTE: It needs info from the G-code file such as the elapsed time or the remaining time. This info can
# be supplied as "M73 Rxx" G-code or as comment. Both must be generated by the slicer. If comment
# is used than "file_comment_parsing" has to be enabled for it to take effect.
# If that info is missing (comment or "M73 Rxx"), the display defaults to option 0 (percentage &
# elapsed time).
#
Expand All @@ -294,8 +294,8 @@ prog_disp_type:2
# Separators can be " ", ":", "_" or "=".
# - If the total number of layers exceeds 999, this information will not be displayed because
# there is not enough space for both current and total layer number to be shown.
# - To enable this feature on PrusaSlicer, the following comment lines must be added in
# Printer Settings -> Custom G-code section:
# - If PrusaSlicer is used, to enable the layer number display, the following comment lines must
# be added in Printer Settings -> Custom G-code section:
# - In After layer change G-code section:
# ";LAYER:[layer_num]"
# - In Start G-code section:
Expand Down
3 changes: 1 addition & 2 deletions TFT/src/User/API/AddonHardware.c
Original file line number Diff line number Diff line change
Expand Up @@ -239,8 +239,7 @@ void FIL_FE_CheckRunout(void)
if (printPause(true, PAUSE_NORMAL) && !getRunoutAlarm()) // If not printing, printPause() function will always fail
{ // so no useless error message is displayed
setRunoutAlarmTrue();
setDialogText(LABEL_WARNING, LABEL_FILAMENT_RUNOUT, LABEL_CONFIRM, LABEL_NULL);
showDialog(DIALOG_TYPE_ALERT, setRunoutAlarmFalse, NULL, NULL);
popupDialog(DIALOG_TYPE_ALERT, LABEL_WARNING, LABEL_FILAMENT_RUNOUT, LABEL_CONFIRM, LABEL_NULL, setRunoutAlarmFalse, NULL, NULL);
}

if ((OS_GetTimeMs() > nextReminderTime) && (getRunoutAlarm() == true))
Expand Down
16 changes: 8 additions & 8 deletions TFT/src/User/API/MachineParameters.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@ const uint8_t parameterElementCount[PARAMETERS_COUNT] = {
3, // Delta Endstop Adjustments
(AXIS_INDEX_COUNT - 2), // Probe offset (X, Y, Z)
2, // Linear Advance (E0, E1)
STEPPER_INDEX_COUNT, // Current (X, X2, Y, Y2, Z, Z2, Z3, Z4, E0, E1)
STEPPER_INDEX_COUNT, // Stepper Motor Current (X, X2, Y, Y2, Z, Z2, Z3, Z4, E0, E1)
STEPPER_INDEX_COUNT, // TMC Hybrid Threshold Speed (X, X2, Y, Y2, Z, Z2, Z3, Z4, E0, E1)
(STEPPER_INDEX_COUNT - 2), // bump Sensitivity (X, X2, Y, Y2, Z, Z2, Z3, Z4)
(STEPPER_INDEX_COUNT - 2), // TMC Bump Sensitivity (X, X2, Y, Y2, Z, Z2, Z3, Z4)
1 // MBL offset
};

Expand All @@ -55,9 +55,9 @@ const char * const parameterCode[PARAMETERS_COUNT] = {
"M666", // Delta Endstop Adjustments
"M851", // Probe offset
"M900", // Linear Advance
"M906", // Current
"M906", // Stepper Motor Current
"M913", // TMC Hybrid Threshold Speed
"M914", // bump Sensitivity
"M914", // TMC Bump Sensitivity
"G29", // MBL offset
};

Expand All @@ -84,9 +84,9 @@ const char * const parameterCmd[PARAMETERS_COUNT][MAX_ELEMENT_COUNT] = {
{"X%.4f\n", "Y%.4f\n", "Z%.4f\n", NULL, NULL, NULL, NULL, NULL, NULL, NULL}, // Delta Endstop Adjustments (Ex, Ey, Ez)
{"X%.2f\n", "Y%.2f\n", "Z%.2f\n", NULL, NULL, NULL, NULL, NULL, NULL, NULL}, // Probe offset (X, Y, Z)
{"T0 K%.2f\n", "T1 K%.2f\n", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}, // Linear Advance (E0, E1)
{"I1 X%.0f\n", "I2 X%.0f\n", "I1 Y%.0f\n", "I2 Y%.0f\n", "I1 Z%.0f\n", "I2 Z%.0f\n", "I3 Z%.0f\n", "I4 Z%.0f\n" "T0 E%.0f\n", "T1 E%.0f\n"}, // Current (X, X2, Y, Y2, Z, Z2, Z3, Z4, E0, E1)
{"I0 X%.0f\n", "I1 X%.0f\n", "I0 Y%.0f\n", "I1 Y%.0f\n", "I0 Z%.0f\n", "I1 Z%.0f\n", "I2 Z%.0f\n", "I3 Z%.0f\n" "T0 E%.0f\n", "T1 E%.0f\n"}, // Stepper Motor Current (X, X2, Y, Y2, Z, Z2, Z3, Z4, E0, E1)
{"I1 X%.0f\n", "I2 X%.0f\n", "I1 Y%.0f\n", "I2 Y%.0f\n", "I1 Z%.0f\n", "I2 Z%.0f\n", "I3 Z%.0f\n", "I4 Z%.0f\n" "T0 E%.0f\n", "T1 E%.0f\n"}, // TMC Hybrid Threshold Speed (X, X2, Y, Y2, Z, Z2, Z3, Z4, E0, E1)
{"I1 X%.0f\n", "I2 X%.0f\n", "I1 Y%.0f\n", "I2 Y%.0f\n", "I1 Z%.0f\n", "I2 Z%.0f\n", "I3 Z%.0f\n", "I4 Z%.0f\n", NULL, NULL}, // bump Sensitivity (X, X2, Y, Y2, Z, Z2, Z3, Z4)
{"I1 X%.0f\n", "I2 X%.0f\n", "I1 Y%.0f\n", "I2 Y%.0f\n", "I1 Z%.0f\n", "I2 Z%.0f\n", "I3 Z%.0f\n", "I4 Z%.0f\n", NULL, NULL}, // TMC Bump Sensitivity (X, X2, Y, Y2, Z, Z2, Z3, Z4)
{"S4 Z%.2f\nG29 S0\n", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}, // MBL offset
};

Expand Down Expand Up @@ -114,11 +114,11 @@ const VAL_TYPE parameterValType[PARAMETERS_COUNT][MAX_ELEMENT_COUNT] = {
{VAL_TYPE_NEG_FLOAT, VAL_TYPE_NEG_FLOAT, VAL_TYPE_NEG_FLOAT}, // Delta Endstop Adjustments (Ex, Ey, Ez)
{VAL_TYPE_NEG_FLOAT, VAL_TYPE_NEG_FLOAT, VAL_TYPE_NEG_FLOAT}, // Probe offset (X, Y, Z)
{VAL_TYPE_FLOAT, VAL_TYPE_FLOAT}, // Linear Advance (E0, E1)
{VAL_TYPE_INT, VAL_TYPE_INT, VAL_TYPE_INT, VAL_TYPE_INT, VAL_TYPE_INT, // Current (X, X2, Y, Y2, Z, Z2, Z3, Z4, E0, E1)
{VAL_TYPE_INT, VAL_TYPE_INT, VAL_TYPE_INT, VAL_TYPE_INT, VAL_TYPE_INT, // Stepper Motor Current (X, X2, Y, Y2, Z, Z2, Z3, Z4, E0, E1)
VAL_TYPE_INT, VAL_TYPE_INT, VAL_TYPE_INT, VAL_TYPE_INT, VAL_TYPE_INT,},
{VAL_TYPE_INT, VAL_TYPE_INT, VAL_TYPE_INT, VAL_TYPE_INT, VAL_TYPE_INT, // TMC Hybrid Threshold Speed (X, X2, Y, Y2, Z, Z2, Z3, Z4, E0, E1)
VAL_TYPE_INT, VAL_TYPE_INT, VAL_TYPE_INT, VAL_TYPE_INT, VAL_TYPE_INT,},
{VAL_TYPE_NEG_INT, VAL_TYPE_NEG_INT, VAL_TYPE_NEG_INT, VAL_TYPE_NEG_INT, VAL_TYPE_NEG_INT, // bump Sensitivity (X, X2, Y, Y2, Z, Z2, Z3, Z4)
{VAL_TYPE_NEG_INT, VAL_TYPE_NEG_INT, VAL_TYPE_NEG_INT, VAL_TYPE_NEG_INT, VAL_TYPE_NEG_INT, // TMC Bump Sensitivity (X, X2, Y, Y2, Z, Z2, Z3, Z4)
VAL_TYPE_NEG_INT, VAL_TYPE_NEG_INT, VAL_TYPE_NEG_INT,},
{VAL_TYPE_NEG_FLOAT}, // MBL offset
};
Expand Down
31 changes: 8 additions & 23 deletions TFT/src/User/API/Printing.c
Original file line number Diff line number Diff line change
Expand Up @@ -255,8 +255,7 @@ void shutdownStart(void)
mustStoreCmd(fanCmd[i], infoSettings.fan_max[i]);
}

setDialogText(LABEL_SHUT_DOWN, (uint8_t *)tempstr, LABEL_FORCE_SHUT_DOWN, LABEL_CANCEL);
showDialog(DIALOG_TYPE_INFO, shutdown, NULL, shutdownLoop);
popupDialog(DIALOG_TYPE_INFO, LABEL_SHUT_DOWN, (uint8_t *)tempstr, LABEL_FORCE_SHUT_DOWN, LABEL_CANCEL, shutdown, NULL, shutdownLoop);
}

void initPrintSummary(void)
Expand Down Expand Up @@ -401,6 +400,8 @@ bool printRemoteStart(const char * filename)

bool printStart(void)
{
bool printRestore = false;

// always clean infoPrinting first and then set the needed attributes
clearInfoPrint();

Expand Down Expand Up @@ -433,7 +434,10 @@ bool printStart(void)
powerFailedInitData();

if (powerFailedCreate(infoFile.path)) // if PLR feature is enabled, open a new PLR file
{
printRestore = true;
powerFailedlSeek(&infoPrinting.file); // seek on PLR file
}
}

break;
Expand All @@ -453,7 +457,7 @@ bool printStart(void)
// we assume infoPrinting is clean, so we need to set only the needed attributes
infoPrinting.printing = true;

if (GET_BIT(infoSettings.send_gcodes, SEND_GCODES_START_PRINT))
if (!printRestore && GET_BIT(infoSettings.send_gcodes, SEND_GCODES_START_PRINT)) // PLR continue printing, CAN NOT use start gcode
sendPrintCodes(0);

if (infoFile.source == FS_ONBOARD_MEDIA)
Expand Down Expand Up @@ -542,12 +546,7 @@ void printAbort(void)
request_M0(); // M524 is not supported in RepRap firmware
}

setDialogText(LABEL_SCREEN_INFO, LABEL_BUSY, LABEL_NULL, LABEL_NULL);
showDialog(DIALOG_TYPE_INFO, NULL, NULL, NULL);

// let setPrintPause() (that will be called in parseAck.c by parsing ACK message for M524, M25 or M27)
// notify the print as aborted/completed (infoHost.status set to "HOST_STATUS_IDLE") instead of paused
infoHost.status = HOST_STATUS_STOPPING;
popupSplash(DIALOG_TYPE_INFO, LABEL_SCREEN_INFO, LABEL_BUSY);

// wait until infoHost.status is set to "HOST_STATUS_IDLE" by setPrintPause()
loopProcessToCondition(&isHostPrinting);
Expand Down Expand Up @@ -734,15 +733,6 @@ void setPrintPause(HOST_STATUS hostStatus, PAUSE_TYPE pauseType)
infoPrinting.pauseType = pauseType;
}

// in case host is not printing, print was completed or printAbort() is aborting the print,
// nothing to do (infoHost.status must be set to "HOST_STATUS_IDLE" in case it is
// "HOST_STATUS_STOPPING" just to finalize the print abort)
if (infoHost.status <= HOST_STATUS_STOPPING)
{
infoHost.status = HOST_STATUS_IDLE; // wakeup printAbort() if waiting for print completion
return;
}

// in case of printing from Marlin Mode (infoPrinting.printing set to "false") or printing from remote host
// (e.g. OctoPrint) or infoSettings.m27_active set to "false", infoHost.status is always forced to
// "HOST_STATUS_PAUSED" because no other notification will be received
Expand All @@ -757,11 +747,6 @@ void setPrintResume(HOST_STATUS hostStatus)
// no need to check it is printing when setting the value to "false"
infoPrinting.paused = false;

// in case host is not printing, print was completed or printAbort() is aborting the print,
// nothing to do (infoHost.status must never be changed)
if (infoHost.status <= HOST_STATUS_STOPPING)
return;

// in case of printing from Marlin Mode (infoPrinting.printing set to "false") or printing from remote host
// (e.g. OctoPrint) or infoSettings.m27_active set to "false", infoHost.status is always forced to
// "HOST_STATUS_PRINTING" because no other notification will be received
Expand Down
58 changes: 40 additions & 18 deletions TFT/src/User/API/interfaceCmd.c
Original file line number Diff line number Diff line change
Expand Up @@ -985,7 +985,7 @@ void sendQueueCmd(void)
case 201: // M201 max acceleration (units/s2)
case 203: // M203 max feedrate (units/s)
{
uint8_t param = P_STEPS_PER_MM;
PARAMETER_NAME param = P_STEPS_PER_MM;

if (cmd_value() == 201) param = P_MAX_ACCELERATION; // P_MAX_ACCELERATION
if (cmd_value() == 203) param = P_MAX_FEED_RATE; // P_MAX_FEED_RATE
Expand Down Expand Up @@ -1018,7 +1018,7 @@ void sendQueueCmd(void)
case 218: // M218 hotend offset
case 851: // M851 probe offset
{
uint8_t param = P_HOME_OFFSET;
PARAMETER_NAME param = P_HOME_OFFSET;

if (cmd_value() == 218) param = P_HOTEND_OFFSET; // P_HOTEND_OFFSET
if (cmd_value() == 851) param = P_PROBE_OFFSET; // P_PROBE_OFFSET
Expand All @@ -1032,7 +1032,7 @@ void sendQueueCmd(void)
case 207: // M207 FW retraction
case 208: // M208 FW recover
{
uint8_t param = P_FWRETRACT;
PARAMETER_NAME param = P_FWRETRACT;

if (cmd_value() == 208) param = P_FWRECOVER; // P_FWRECOVER

Expand Down Expand Up @@ -1088,18 +1088,15 @@ void sendQueueCmd(void)
#endif

case 301: // Hotend PID
{
if (cmd_seen('P')) setParameter(P_HOTEND_PID, 0, cmd_float());
if (cmd_seen('I')) setParameter(P_HOTEND_PID, 1, cmd_float());
if (cmd_seen('D')) setParameter(P_HOTEND_PID, 2, cmd_float());
break;
}

case 304: // Bed PID
{
if (cmd_seen('P')) setParameter(P_BED_PID, 0, cmd_float());
if (cmd_seen('I')) setParameter(P_BED_PID, 1, cmd_float());
if (cmd_seen('D')) setParameter(P_BED_PID, 2, cmd_float());
PARAMETER_NAME param = P_HOTEND_PID;

if (cmd_value() == 304) param = P_BED_PID; // P_BED_PID

if (cmd_seen('P')) setParameter(param, 0, cmd_float());
if (cmd_seen('I')) setParameter(param, 1, cmd_float());
if (cmd_seen('D')) setParameter(param, 2, cmd_float());
break;
}

Expand Down Expand Up @@ -1139,14 +1136,24 @@ void sendQueueCmd(void)
case 569: // M569 TMC stepping mode
{
uint8_t k = (cmd_seen('S')) ? cmd_value() : 0;
uint8_t i = (cmd_seen('I')) ? cmd_value() : 0;
int8_t i = (cmd_seen('I')) ? cmd_value() : 0;

// if index is missing or set to -1 (meaning all indexes) then it must be converted to 0
// to make sure array index is never negative
if (i < 0)
i = 0;

if (cmd_seen('X')) setParameter(P_STEALTH_CHOP, STEPPER_INDEX_X + i, k);
if (cmd_seen('Y')) setParameter(P_STEALTH_CHOP, STEPPER_INDEX_Y + i, k);
if (cmd_seen('Z')) setParameter(P_STEALTH_CHOP, STEPPER_INDEX_Z + i, k);

i = (cmd_seen('T')) ? cmd_value() : 0;

// if index is missing or set to -1 (meaning all indexes) then it must be converted to 0
// to make sure array index is never negative
if (i < 0)
i = 0;

if (cmd_seen('E')) setParameter(P_STEALTH_CHOP, STEPPER_INDEX_E0 + i, k);
break;
}
Expand All @@ -1171,7 +1178,7 @@ void sendQueueCmd(void)
case 665: // Delta configuration / Delta tower angle
case 666: // Delta endstop adjustments
{
uint8_t param = P_DELTA_TOWER_ANGLE;
PARAMETER_NAME param = P_DELTA_TOWER_ANGLE;

if (cmd_value() == 666) param = P_DELTA_ENDSTOP; // P_DELTA_ENDSTOP

Expand Down Expand Up @@ -1210,14 +1217,24 @@ void sendQueueCmd(void)
case 913: // M913 TMC hybrid threshold speed
case 914: // M914 TMC bump sensitivity
{
uint8_t param = P_CURRENT;
PARAMETER_NAME param = P_CURRENT;

if (cmd_value() == 913) param = P_HYBRID_THRESHOLD; // P_HYBRID_THRESHOLD
if (cmd_value() == 914) param = P_BUMPSENSITIVITY; // P_BUMPSENSITIVITY

uint8_t i = (cmd_seen('I')) ? cmd_value() : 0;
int8_t i = (cmd_seen('I')) ? cmd_value() : 0;

if (i > 0) // "X1"->0, "X2"->1, "Y1"->0, "Y2"->1, "Z1"->0, "Z2"->1, "Z3"->2, "Z4"->3
// if index is missing or set to -1 (meaning all indexes) then it must be converted to 0
// to make sure array index is never negative
if (i < 0)
i = 0;

// for M913 and M914, provided index is:
// 1->"X1", 2->"X2", 1->"Y1", 2->"Y2", 1->"Z1", 2->"Z2", 3->"Z3", 4->"Z4"
// and it must be converted to:
// 0->"X1", 1->"X2", 0->"Y1", 1->"Y2", 0->"Z1", 1->"Z2", 2->"Z3", 3->"Z4"
// to make sure array index is properly accessed
if (param > P_CURRENT && i > 0)
i--;

if (cmd_seen('X')) setParameter(param, STEPPER_INDEX_X + i, cmd_value());
Expand All @@ -1228,6 +1245,11 @@ void sendQueueCmd(void)
{
i = (cmd_seen('T')) ? cmd_value() : 0;

// if index is missing or set to -1 (meaning all indexes) then it must be converted to 0
// to make sure array index is never negative
if (i < 0)
i = 0;

if (cmd_seen('E')) setParameter(param, STEPPER_INDEX_E0 + i, cmd_value());
}
break;
Expand Down
Loading

0 comments on commit f950a86

Please sign in to comment.