diff --git a/configs/sim/axis/db_demo/db_panel.xml b/configs/sim/axis/db_demo/db_panel.xml
index 5b8b4858090..b8f0c1d8122 100644
--- a/configs/sim/axis/db_demo/db_panel.xml
+++ b/configs/sim/axis/db_demo/db_panel.xml
@@ -15,19 +15,6 @@
"w"
-
-
- "tool-prep-index"
- "4d"
- "6"
- "black"
- "cyan"
-
-
- "tool-prep-number"
diff --git a/configs/sim/axis/db_demo/db_postgui.hal b/configs/sim/axis/db_demo/db_postgui.hal
index 1be46734cc2..f7754548391 100644
--- a/configs/sim/axis/db_demo/db_postgui.hal
+++ b/configs/sim/axis/db_demo/db_postgui.hal
@@ -50,9 +50,6 @@ net db:tool-changed => pyvcp.tool-changed
net db:tool-number <= iocontrol.0.tool-number
net db:tool-number => pyvcp.tool-number
-net db:tool-prep-index <= iocontrol.0.tool-prep-index
-net db:tool-prep-index => pyvcp.tool-prep-index
-
net db:tool-prep-number <= iocontrol.0.tool-prep-number
net db:tool-prep-number => pyvcp.tool-prep-number
diff --git a/docs/src/gcode/tool-compensation.adoc b/docs/src/gcode/tool-compensation.adoc
index 1a64946d36a..0a9d6a6d830 100644
--- a/docs/src/gcode/tool-compensation.adoc
+++ b/docs/src/gcode/tool-compensation.adoc
@@ -152,15 +152,12 @@ The HAL input pin, `iocontrol.0.tool-prepared`, must be set by external HAL logi
A G-code *M6* command asserts the HAL output pin `iocontrol.0.tool-change`.
The related HAL input pin, `iocontrol.0.tool-prepared`, must be set by external HAL logic to indicate completion of the tool change leading to a subsequent reset of the tool-change pin.
-Tooldata is accessed by an ordered index (idx) that depends on the type of toolchanger specified by `[EMCIO]RANDOM_TOOLCHANGER=`__type__.
-
-. For `RANDOM_TOOLCHANGER = 0`, (0 is default and specifies a non-random toolchanger) idx is a number indicating the sequence in which tooldata was loaded.
-. For `RANDOM_TOOLCHANGER = 1`, idx is the *current* pocket number for the tool number specified by the G-code select tool command *T__n__*.
+The type of toolchanger is specified by `[EMCIO]RANDOM_TOOLCHANGER=`__type__:
+0 (the default) for a non-random toolchanger, 1 for a random toolchanger.
The io program provides HAL output pins to facilitate toolchanger management:
. *iocontrol.0.tool-prep-number*
-. *iocontrol.0.tool-prep-index*
. *iocontrol.0.tool-prep-pocket*
. *iocontrol.0.tool-from-pocket*
@@ -169,11 +166,9 @@ The io program provides HAL output pins to facilitate toolchanger management:
. Tool number _n_==0 indicates no tool.
. The pocket number for a tool is set when tooldata is loaded/reloaded from its data source ([EMCIO]TOOL_TABLE or [EMCIO]DB_PROGRAM).
. At G-code *T__n__* (_n_ != 0) command:
-.. *iocontrol.0.tool-prep-index* = _idx_ (index based on tooldata load sequence)
.. *iocontrol.0.tool-prep-number* = _n_
.. *iocontrol.0.tool-prep-pocket* = the pocket number for _n_
. At G-code *T0* (_n_ == 0 remove) command:
-.. *iocontrol.0.tool-prep-index* = 0
.. *iocontrol.0.tool-prep-number* = 0
.. *iocontrol.0.tool-prep-pocket* = 0
. At M-code *M6* (following iocontrol.0.tool-changed pin 0-->1):
@@ -183,9 +178,8 @@ The io program provides HAL output pins to facilitate toolchanger management:
. Tool number _n_==0 is *not special*.
. Pocket number 0 is *special* as it indicates the *spindle*.
-. The *current* pocket number for tool _n_ is the tooldata index (_idx_) for tool _n_.
+. Tools move between pockets: the pocket number of tool _n_ is the pocket it is *currently* in.
. At G-code command *T__n__*:
-.. *iocontrol.0.tool-prep-index* = tooldata index (idx) for tool _n_
.. *iocontrol.0.tool-prep-number* = _n_
.. *iocontrol.0.tool-prep-pocket* = pocket number for tool _n_
. At M-code *M6* (following iocontrol.0.tool-changed pin 0-->1):
diff --git a/docs/src/getting-started/updating-linuxcnc.adoc b/docs/src/getting-started/updating-linuxcnc.adoc
index 819630d7da0..d0f8caa5ac8 100644
--- a/docs/src/getting-started/updating-linuxcnc.adoc
+++ b/docs/src/getting-started/updating-linuxcnc.adoc
@@ -254,6 +254,13 @@ between an integer source and the float pin, or a
link:../man/man9/conv_real_sint.9.html[conv_real_sint] component
between a float output and an integer input.
+The *iocontrol.0.tool-prep-index* pin has been removed. It carried the
+position of the prepared tool in LinuxCNC's internal copy of the tool
+table, which on a non-random toolchanger has no meaning outside
+LinuxCNC. Use *iocontrol.0.tool-prep-number* (the tool number) or
+*iocontrol.0.tool-prep-pocket* (its pocket) instead. A HAL file that
+still connects the pin fails to load.
+
== Preview renderer now requires OpenGL 3.3 core
diff --git a/docs/src/man/man1/io.1.adoc b/docs/src/man/man1/io.1.adoc
index fc279016f96..fcd2293fff5 100644
--- a/docs/src/man/man1/io.1.adoc
+++ b/docs/src/man/man1/io.1.adoc
@@ -55,13 +55,6 @@ unless an absolute path is specified.
FALSE when an internal E-stop condition exists.
*iocontrol.0.user-request-enable* (bool, out)::
TRUE when the user has requested that E-stop be cleared.
-*iocontrol.0.tool-prep-index* (sint, out)::
- IO's internal array index of the prepped tool requested by the most recent T-word.
- 0 if no tool is prepped. On Random toolchanger machines this is the tool's pocket number
- (i.e., the same as the tool-prep-pocket pin),
- on Non-random toolchanger machines this is a small integer corresponding to
- the tool's location in the internal representation of the tool table.
- This parameter returns to 0 after a successful tool change (M6).
== REPORTING BUGS
diff --git a/src/emc/task/taskclass.cc b/src/emc/task/taskclass.cc
index 25b29756958..6480698ab9f 100644
--- a/src/emc/task/taskclass.cc
+++ b/src/emc/task/taskclass.cc
@@ -56,7 +56,6 @@ int Task::iocontrol_hal_init(void)
CHK(hal_pin_new_bool(comp_id, HAL_OUT, &iocontrol_data->coolant_flood, 0, IOC0".coolant-flood"));
CHK(hal_pin_new_sint(comp_id, HAL_OUT, &iocontrol_data->tool_prep_pocket, 0, IOC0".tool-prep-pocket"));
CHK(hal_pin_new_sint(comp_id, HAL_OUT, &iocontrol_data->tool_from_pocket, 0, IOC0".tool-from-pocket"));
- CHK(hal_pin_new_sint(comp_id, HAL_OUT, &iocontrol_data->tool_prep_index, 0, IOC0".tool-prep-index"));
CHK(hal_pin_new_sint(comp_id, HAL_OUT, &iocontrol_data->tool_prep_number, 0, IOC0".tool-prep-number"));
CHK(hal_pin_new_sint(comp_id, HAL_OUT, &iocontrol_data->tool_number, 0, IOC0".tool-number"));
CHK(hal_pin_new_bool(comp_id, HAL_OUT, &iocontrol_data->tool_prepare, 0, IOC0".tool-prepare"));
@@ -90,7 +89,6 @@ void Task::hal_init_pins(void)
hal_set_sint(iocontrol_data->tool_prep_number, 0); /* output, pin that holds the tool number to be prepared, only valid when tool-prepare=TRUE */
hal_set_sint(iocontrol_data->tool_prep_pocket, 0); /* output, pin that holds the pocketno for the tool to be prepared, only valid when tool-prepare=TRUE */
hal_set_sint(iocontrol_data->tool_from_pocket, 0); /* output, always 0 at startup */
- hal_set_sint(iocontrol_data->tool_prep_index, 0); /* output, pin that holds the internal index (idx) of the tool to be prepared, for debug */
hal_set_bool(iocontrol_data->tool_change, 0); /* output, notifies a tool-change should happen (emc should be in the tool-change position) */
hal_set_sint(iocontrol_data->tool_number, emcioStatus.tool.toolInSpindle);
}
@@ -467,11 +465,11 @@ int Task::emcToolPrepare(int toolno)
}
rtapi_print_msg(RTAPI_MSG_DBG, "EMC_TOOL_PREPARE tool=%d idx=%d\n", toolno, idx);
- hal_set_sint(iocontrol_data->tool_prep_index, idx); // any type of changer
+ prep_index = idx; // any type of changer
// Note: some of the following logic could be simplified
// but is maintained to preserve runtests expectations
- // Set HAL pins for tool number, pocket, and index.
+ // Set HAL pins for tool number and pocket.
if (random_toolchanger) {
// RANDOM_TOOLCHANGER
hal_set_sint(iocontrol_data->tool_prep_number, tdata.toolno);
@@ -638,10 +636,7 @@ int Task::emcToolSetNumber(int number)//EMC_TOOL_SET_NUMBER
int Task::read_tool_inputs(void)
{
if (hal_get_bool(iocontrol_data->tool_prepare) && hal_get_bool(iocontrol_data->tool_prepared)) {
- // We get the clamped HAL value from tool_prep_index because it is
- // assigned elsewhere to int and would be truncated. The content
- // is a relative small index value anyway.
- emcioStatus.tool.pocketPrepped = hal_get_si32_clamped(iocontrol_data->tool_prep_index); //check if tool has been (idx) prepared
+ emcioStatus.tool.pocketPrepped = prep_index; //check if tool has been (idx) prepared
hal_set_bool(iocontrol_data->tool_prepare, 0);
emcioStatus.status = RCS_STATUS::DONE; // we finally finished to do tool-changing, signal task with RCS_DONE
return 10; //prepped finished
@@ -668,7 +663,7 @@ int Task::read_tool_inputs(void)
emcioStatus.tool.pocketPrepped = -1; //reset the tool preped number, -1 to permit tool 0 to be loaded
hal_set_sint(iocontrol_data->tool_prep_number, 0); //likewise in HAL
hal_set_sint(iocontrol_data->tool_prep_pocket, 0); //likewise in HAL
- hal_set_sint(iocontrol_data->tool_prep_index, 0); //likewise in HAL
+ prep_index = 0;
hal_set_bool(iocontrol_data->tool_change, 0); //also reset the tool change signal
emcioStatus.status = RCS_STATUS::DONE; // we finally finished to do tool-changing, signal task with RCS_DONE
return 11; //change finished
diff --git a/src/emc/task/taskclass.hh b/src/emc/task/taskclass.hh
index 1cf7b7f4f6e..1ea2c311dde 100644
--- a/src/emc/task/taskclass.hh
+++ b/src/emc/task/taskclass.hh
@@ -39,7 +39,6 @@ struct iocontrol_str {
hal_sint_t tool_prep_pocket; /* output, pin that holds the pocketno for the tool table entry matching the tool to
be prepared, only valid when tool-prepare=TRUE */
hal_sint_t tool_from_pocket; /* output, pin indicating pocket current load tool retrieved from*/
- hal_sint_t tool_prep_index; /* output, pin for internal index (idx) of prepped tool above */
hal_sint_t tool_prep_number; /* output, pin that holds the tool number to be prepared, only valid when tool-prepare=TRUE */
hal_sint_t tool_number; /* output, pin that holds the tool number currently in the spindle */
hal_bool_t tool_prepared; /* input, pin that notifies that the tool has been prepared */
@@ -90,6 +89,7 @@ public:
char db_program[LINELEN] {};
tooldb_t db_mode {tooldb_t::DB_NOTUSED};
int tool_status;
+ int prep_index {0}; // tooldata index of the tool being prepared
};
extern Task *task_methods;