#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <signal.h>
#include <ctype.h>
#include "hal.h"
#include "rtapi.h"
#include "rcs.hh"
#include "emc.hh"
#include "emc_nml.hh"
#include "emcglb.h"
#include "inifile.hh"
#include "initool.hh"
#include "nml_oi.hh"
#include "timer.hh"
#include "rcs_print.hh"
#include "tool_parse.h"
static RCS_CMD_CHANNEL *emcioCommandBuffer = 0;
static RCS_CMD_MSG *emcioCommand = 0;
static RCS_STAT_CHANNEL *emcioStatusBuffer = 0;
static EMC_IO_STAT emcioStatus;
static NML *emcErrorBuffer = 0;
static char *ttcomments[CANON_POCKETS_MAX];
static int random_toolchanger = 0;
struct iocontrol_str {
hal_bit_t *user_enable_out;
hal_bit_t *emc_enable_in;
hal_bit_t *user_request_enable;
hal_bit_t *coolant_mist;
hal_bit_t *coolant_flood;
hal_bit_t *lube;
hal_bit_t *lube_level;
hal_bit_t *tool_prepare;
hal_s32_t *tool_prep_pocket;
hal_s32_t tool_prep_index;
hal_s32_t *tool_prep_number;
hal_s32_t *tool_number;
hal_bit_t *tool_prepared;
hal_bit_t *tool_change;
hal_bit_t *tool_changed;
} * iocontrol_data;
static int comp_id;
static int emcIoNmlGet()
{
int retval = 0;
if (emcioCommandBuffer == 0) {
emcioCommandBuffer =
new RCS_CMD_CHANNEL(emcFormat, "toolCmd", "tool", emc_nmlfile);
if (!emcioCommandBuffer->valid()) {
rtapi_print_msg(RTAPI_MSG_ERR,
"emcToolCmd buffer not available\n");
delete emcioCommandBuffer;
emcioCommandBuffer = 0;
retval = -1;
} else {
emcioCommand = emcioCommandBuffer->get_address();
}
}
if (emcioStatusBuffer == 0) {
emcioStatusBuffer =
new RCS_STAT_CHANNEL(emcFormat, "toolSts", "tool",
emc_nmlfile);
if (!emcioStatusBuffer->valid()) {
rtapi_print_msg(RTAPI_MSG_ERR,
"toolSts buffer not available\n");
delete emcioStatusBuffer;
emcioStatusBuffer = 0;
retval = -1;
} else {
emcioStatus.heartbeat = 0;
emcioStatus.command_type = 0;
emcioStatus.echo_serial_number = 0;
emcioStatus.status = RCS_DONE;
emcioStatusBuffer->write(&emcioStatus);
}
}
if (emcErrorBuffer == 0) {
emcErrorBuffer =
new NML(nmlErrorFormat, "emcError", "tool", emc_nmlfile);
if (!emcErrorBuffer->valid()) {
rtapi_print_msg(RTAPI_MSG_ERR,
"emcError buffer not available\n");
delete emcErrorBuffer;
emcErrorBuffer = 0;
retval = -1;
}
}
return retval;
}
static int iniLoad(const char *filename)
{
IniFile inifile;
const char *inistring;
char version[LINELEN], machine[LINELEN];
if (inifile.Open(filename) == false) {
return -1;
}
if (NULL != (inistring = inifile.Find("DEBUG", "EMC"))) {
if (1 != sscanf(inistring, "%i", &emc_debug)) {
emc_debug = 0;
}
} else {
emc_debug = 0;
}
if (emc_debug & EMC_DEBUG_VERSIONS) {
if (NULL != (inistring = inifile.Find("VERSION", "EMC"))) {
if(sscanf(inistring, "$Revision: %s", version) != 1) {
strncpy(version, "unknown", LINELEN-1);
}
} else {
strncpy(version, "unknown", LINELEN-1);
}
if (NULL != (inistring = inifile.Find("MACHINE", "EMC"))) {
strncpy(machine, inistring, LINELEN-1);
} else {
strncpy(machine, "unknown", LINELEN-1);
}
rtapi_print("iocontrol: machine: '%s' version '%s'\n", machine, version);
}
if (NULL != (inistring = inifile.Find("NML_FILE", "EMC"))) {
strcpy(emc_nmlfile, inistring);
} else {
}
double temp;
temp = emc_io_cycle_time;
if (NULL != (inistring = inifile.Find("CYCLE_TIME", "EMCIO"))) {
if (1 == sscanf(inistring, "%lf", &emc_io_cycle_time)) {
} else {
emc_io_cycle_time = temp;
rtapi_print
("invalid [EMCIO] CYCLE_TIME in %s (%s); using default %f\n",
filename, inistring, emc_io_cycle_time);
}
} else {
rtapi_print
("[EMCIO] CYCLE_TIME not found in %s; using default %f\n",
filename, emc_io_cycle_time);
}
inifile.Find(&random_toolchanger, "RANDOM_TOOLCHANGER", "EMCIO");
inifile.Close();
return 0;
}
static int done = 0;
static void quit(int sig)
{
done = 1;
}
int iocontrol_hal_init(void)
{
int n = 0, retval;
comp_id = hal_init("iocontrol");
if (comp_id < 0) {
rtapi_print_msg(RTAPI_MSG_ERR,
"IOCONTROL: ERROR: hal_init() failed\n");
return -1;
}
iocontrol_data = (iocontrol_str *) hal_malloc(sizeof(iocontrol_str));
if (iocontrol_data == 0) {
rtapi_print_msg(RTAPI_MSG_ERR,
"IOCONTROL: ERROR: hal_malloc() failed\n");
hal_exit(comp_id);
return -1;
}
retval = hal_pin_bit_newf(HAL_OUT, &(iocontrol_data->user_enable_out), comp_id,
"iocontrol.%d.user-enable-out", n);
if (retval < 0) {
rtapi_print_msg(RTAPI_MSG_ERR,
"IOCONTROL: ERROR: iocontrol %d pin user-enable-out export failed with err=%i\n",
n, retval);
hal_exit(comp_id);
return -1;
}
retval = hal_pin_bit_newf(HAL_OUT, &(iocontrol_data->user_request_enable), comp_id,
"iocontrol.%d.user-request-enable", n);
if (retval < 0) {
rtapi_print_msg(RTAPI_MSG_ERR,
"IOCONTROL: ERROR: iocontrol %d pin user-request-enable export failed with err=%i\n",
n, retval);
hal_exit(comp_id);
return -1;
}
retval = hal_pin_bit_newf(HAL_OUT, &(iocontrol_data->coolant_flood), comp_id,
"iocontrol.%d.coolant-flood", n);
if (retval < 0) {
rtapi_print_msg(RTAPI_MSG_ERR,
"IOCONTROL: ERROR: iocontrol %d pin coolant-flood export failed with err=%i\n",
n, retval);
hal_exit(comp_id);
return -1;
}
retval = hal_pin_bit_newf(HAL_OUT, &(iocontrol_data->coolant_mist), comp_id,
"iocontrol.%d.coolant-mist", n);
if (retval < 0) {
rtapi_print_msg(RTAPI_MSG_ERR,
"IOCONTROL: ERROR: iocontrol %d pin coolant-mist export failed with err=%i\n",
n, retval);
hal_exit(comp_id);
return -1;
}
retval = hal_pin_bit_newf(HAL_OUT, &(iocontrol_data->lube), comp_id,
"iocontrol.%d.lube", n);
if (retval < 0) {
rtapi_print_msg(RTAPI_MSG_ERR,
"IOCONTROL: ERROR: iocontrol %d pin lube export failed with err=%i\n",
n, retval);
hal_exit(comp_id);
return -1;
}
retval = hal_pin_bit_newf(HAL_OUT, &(iocontrol_data->tool_prepare), comp_id,
"iocontrol.%d.tool-prepare", n);
if (retval < 0) {
rtapi_print_msg(RTAPI_MSG_ERR,
"IOCONTROL: ERROR: iocontrol %d pin tool-prepare export failed with err=%i\n",
n, retval);
hal_exit(comp_id);
return -1;
}
retval = hal_pin_s32_newf(HAL_OUT, &(iocontrol_data->tool_number), comp_id,
"iocontrol.%d.tool-number", n);
if (retval < 0) {
rtapi_print_msg(RTAPI_MSG_ERR,
"IOCONTROL: ERROR: iocontrol %d pin tool-number export failed with err=%i\n",
n, retval);
hal_exit(comp_id);
return -1;
}
retval = hal_pin_s32_newf(HAL_OUT, &(iocontrol_data->tool_prep_number), comp_id,
"iocontrol.%d.tool-prep-number", n);
if (retval < 0) {
rtapi_print_msg(RTAPI_MSG_ERR,
"IOCONTROL: ERROR: iocontrol %d pin tool-prep-number export failed with err=%i\n",
n, retval);
hal_exit(comp_id);
return -1;
}
retval = hal_param_s32_newf(HAL_RO, &(iocontrol_data->tool_prep_index), comp_id,
"iocontrol.%d.tool-prep-index", n);
if (retval < 0) {
rtapi_print_msg(RTAPI_MSG_ERR,
"IOCONTROL: ERROR: iocontrol %d param tool-prep-index export failed with err=%i\n",
n, retval);
hal_exit(comp_id);
return -1;
}
retval = hal_pin_s32_newf(HAL_OUT, &(iocontrol_data->tool_prep_pocket), comp_id,
"iocontrol.%d.tool-prep-pocket", n);
if (retval < 0) {
rtapi_print_msg(RTAPI_MSG_ERR,
"IOCONTROL: ERROR: iocontrol %d pin tool-prep-pocket export failed with err=%i\n",
n, retval);
hal_exit(comp_id);
return -1;
}
retval = hal_pin_bit_newf(HAL_IN, &(iocontrol_data->tool_prepared), comp_id,
"iocontrol.%d.tool-prepared", n);
if (retval < 0) {
rtapi_print_msg(RTAPI_MSG_ERR,
"IOCONTROL: ERROR: iocontrol %d pin tool-prepared export failed with err=%i\n",
n, retval);
hal_exit(comp_id);
return -1;
}
retval = hal_pin_bit_newf(HAL_OUT, &(iocontrol_data->tool_change), comp_id,
"iocontrol.%d.tool-change", n);
if (retval < 0) {
rtapi_print_msg(RTAPI_MSG_ERR,
"IOCONTROL: ERROR: iocontrol %d pin tool-change export failed with err=%i\n",
n, retval);
hal_exit(comp_id);
return -1;
}
retval = hal_pin_bit_newf(HAL_IN, &(iocontrol_data->tool_changed), comp_id,
"iocontrol.%d.tool-changed", n);
if (retval < 0) {
rtapi_print_msg(RTAPI_MSG_ERR,
"IOCONTROL: ERROR: iocontrol %d pin tool-changed export failed with err=%i\n",
n, retval);
hal_exit(comp_id);
return -1;
}
retval = hal_pin_bit_newf(HAL_IN, &(iocontrol_data->emc_enable_in), comp_id,
"iocontrol.%d.emc-enable-in", n);
if (retval < 0) {
rtapi_print_msg(RTAPI_MSG_ERR,
"IOCONTROL: ERROR: iocontrol %d pin emc-enable-in export failed with err=%i\n",
n, retval);
hal_exit(comp_id);
return -1;
}
retval = hal_pin_bit_newf(HAL_IN, &(iocontrol_data->lube_level), comp_id,
"iocontrol.%d.lube_level", n);
if (retval < 0) {
rtapi_print_msg(RTAPI_MSG_ERR,
"IOCONTROL: ERROR: iocontrol %d pin lube_level export failed with err=%i\n",
n, retval);
hal_exit(comp_id);
return -1;
}
hal_ready(comp_id);
return 0;
}
void hal_init_pins(void)
{
*(iocontrol_data->user_enable_out)=0;
*(iocontrol_data->user_request_enable)=0;
*(iocontrol_data->coolant_mist)=0;
*(iocontrol_data->coolant_flood)=0;
*(iocontrol_data->lube)=0;
*(iocontrol_data->tool_prepare)=0;
*(iocontrol_data->tool_prep_number)=0;
*(iocontrol_data->tool_prep_pocket)=0;
iocontrol_data->tool_prep_index=0;
*(iocontrol_data->tool_change)=0;
}
int read_hal_inputs(void)
{
int oldval, retval = 0;
oldval = emcioStatus.aux.estop;
if ( *(iocontrol_data->emc_enable_in)==0) emcioStatus.aux.estop = 1;
else
emcioStatus.aux.estop = 0;
if (oldval != emcioStatus.aux.estop) {
retval = 1;
}
oldval = emcioStatus.lube.level;
emcioStatus.lube.level = *(iocontrol_data->lube_level); if (oldval != emcioStatus.lube.level) {
retval = 1;
}
return retval;
}
void load_tool(int pocket) {
if(random_toolchanger) {
CANON_TOOL_TABLE temp;
char *comment_temp;
temp = emcioStatus.tool.toolTable[0];
emcioStatus.tool.toolTable[0] = emcioStatus.tool.toolTable[pocket];
emcioStatus.tool.toolTable[pocket] = temp;
comment_temp = ttcomments[0];
ttcomments[0] = ttcomments[pocket];
ttcomments[pocket] = comment_temp;
if (0 != saveToolTable(tool_table_file, emcioStatus.tool.toolTable, ttcomments, random_toolchanger))
emcioStatus.status = RCS_ERROR;
} else if(pocket == 0) {
emcioStatus.tool.toolTable[0].toolno = 0;
ZERO_EMC_POSE(emcioStatus.tool.toolTable[0].offset);
emcioStatus.tool.toolTable[0].diameter = 0.0;
emcioStatus.tool.toolTable[0].frontangle = 0.0;
emcioStatus.tool.toolTable[0].backangle = 0.0;
emcioStatus.tool.toolTable[0].orientation = 0;
} else {
emcioStatus.tool.toolTable[0] = emcioStatus.tool.toolTable[pocket];
}
}
void reload_tool_number(int toolno) {
if(random_toolchanger) return; for(int i=1; i<CANON_POCKETS_MAX; i++) {
if(emcioStatus.tool.toolTable[i].toolno == toolno) {
load_tool(i);
break;
}
}
}
int read_tool_inputs(void)
{
if (*iocontrol_data->tool_prepare && *iocontrol_data->tool_prepared) {
emcioStatus.tool.pocketPrepped = iocontrol_data->tool_prep_index; *(iocontrol_data->tool_prepare) = 0;
emcioStatus.status = RCS_DONE; return 10; }
if (*iocontrol_data->tool_change && *iocontrol_data->tool_changed) {
if(!random_toolchanger && emcioStatus.tool.pocketPrepped == 0) {
emcioStatus.tool.toolInSpindle = 0;
} else {
emcioStatus.tool.toolInSpindle = emcioStatus.tool.toolTable[emcioStatus.tool.pocketPrepped].toolno;
}
*(iocontrol_data->tool_number) = emcioStatus.tool.toolInSpindle; load_tool(emcioStatus.tool.pocketPrepped);
emcioStatus.tool.pocketPrepped = -1; *(iocontrol_data->tool_prep_number) = 0; *(iocontrol_data->tool_prep_pocket) = 0; iocontrol_data->tool_prep_index = 0; *(iocontrol_data->tool_change) = 0; emcioStatus.status = RCS_DONE; return 11; }
return 0;
}
static void do_hal_exit(void) {
hal_exit(comp_id);
}
int main(int argc, char *argv[])
{
int t, tool_status;
NMLTYPE type;
for (t = 1; t < argc; t++) {
if (!strcmp(argv[t], "-ini")) {
if (t == argc - 1) {
return -1;
} else {
if (strlen(argv[t+1]) >= LINELEN) {
rtapi_print_msg(RTAPI_MSG_ERR, "ini file name too long (max %d)\n", LINELEN);
rtapi_print_msg(RTAPI_MSG_ERR, " %s\n", argv[t+1]);
return -1;
}
strcpy(emc_inifile, argv[t + 1]);
t++;
}
continue;
}
}
signal(SIGINT, quit);
signal(SIGTERM, quit);
if (iocontrol_hal_init() != 0) {
rtapi_print_msg(RTAPI_MSG_ERR, "can't initialize the HAL\n");
return -1;
}
atexit(do_hal_exit);
if (0 != iniLoad(emc_inifile)) {
rtapi_print_msg(RTAPI_MSG_ERR, "can't open ini file %s\n",
emc_inifile);
return -1;
}
if (0 != emcIoNmlGet()) {
rtapi_print_msg(RTAPI_MSG_ERR,
"can't connect to NML buffers in %s\n",
emc_nmlfile);
return -1;
}
if (0 != iniTool(emc_inifile)) {
rcs_print_error("iniTool failed.\n");
return -1;
}
for(int i=0; i<CANON_POCKETS_MAX; i++) {
ttcomments[i] = (char *)malloc(CANON_TOOL_ENTRY_LEN);
}
if(!random_toolchanger) {
emcioStatus.tool.toolTable[0].toolno = -1;
ZERO_EMC_POSE(emcioStatus.tool.toolTable[0].offset);
emcioStatus.tool.toolTable[0].diameter = 0.0;
emcioStatus.tool.toolTable[0].frontangle = 0.0;
emcioStatus.tool.toolTable[0].backangle = 0.0;
emcioStatus.tool.toolTable[0].orientation = 0;
ttcomments[0][0] = '\0';
}
if (0 != loadToolTable(tool_table_file, emcioStatus.tool.toolTable,
ttcomments, random_toolchanger)) {
rcs_print_error("can't load tool table.\n");
}
done = 0;
emcioStatus.aux.estop = 1; emcioStatus.tool.pocketPrepped = -1;
if (random_toolchanger) {
emcioStatus.tool.toolInSpindle = emcioStatus.tool.toolTable[0].toolno;
} else {
emcioStatus.tool.toolInSpindle = 0;
}
emcioStatus.coolant.mist = 0;
emcioStatus.coolant.flood = 0;
emcioStatus.lube.on = 0;
emcioStatus.lube.level = 1;
*(iocontrol_data->tool_number) = emcioStatus.tool.toolInSpindle;
while (!done) {
if (read_hal_inputs() > 0) {
emcioStatus.command_type = EMC_IO_STAT_TYPE;
emcioStatus.echo_serial_number =
emcioCommand->serial_number+1; emcioStatus.heartbeat++;
emcioStatusBuffer->write(&emcioStatus);
}
;
if ( (tool_status = read_tool_inputs() ) > 0) { emcioStatus.command_type = EMC_IO_STAT_TYPE; emcioStatus.echo_serial_number =
emcioCommand->serial_number;
emcioStatus.heartbeat++;
emcioStatusBuffer->write(&emcioStatus);
}
if (-1 == emcioCommandBuffer->read()) {
esleep(emc_io_cycle_time);
continue;
}
if (0 == emcioCommand || 0 == emcioCommand->type || emcioCommand->serial_number == emcioStatus.echo_serial_number) {
esleep(emc_io_cycle_time);
continue;
}
type = emcioCommand->type;
emcioStatus.status = RCS_DONE;
switch (type) {
case 0:
break;
case EMC_IO_INIT_TYPE:
rtapi_print_msg(RTAPI_MSG_DBG, "EMC_IO_INIT\n");
hal_init_pins();
break;
case EMC_TOOL_INIT_TYPE:
rtapi_print_msg(RTAPI_MSG_DBG, "EMC_TOOL_INIT\n");
loadToolTable(tool_table_file, emcioStatus.tool.toolTable,
ttcomments, random_toolchanger);
reload_tool_number(emcioStatus.tool.toolInSpindle);
break;
case EMC_TOOL_HALT_TYPE:
rtapi_print_msg(RTAPI_MSG_DBG, "EMC_TOOL_HALT\n");
break;
case EMC_TOOL_ABORT_TYPE:
rtapi_print_msg(RTAPI_MSG_DBG, "EMC_TOOL_ABORT\n");
emcioStatus.coolant.mist = 0;
emcioStatus.coolant.flood = 0;
*(iocontrol_data->coolant_mist)=0;
*(iocontrol_data->coolant_flood)=0;
*(iocontrol_data->tool_change)=0;
*(iocontrol_data->tool_prepare)=0;
break;
case EMC_TOOL_PREPARE_TYPE:
{
signed int p = ((EMC_TOOL_PREPARE*)emcioCommand)->pocket;
int t = ((EMC_TOOL_PREPARE*)emcioCommand)->tool;
rtapi_print_msg(RTAPI_MSG_DBG, "EMC_TOOL_PREPARE tool=%d pocket=%d\n", t, p);
iocontrol_data->tool_prep_index = p;
*(iocontrol_data->tool_prep_pocket) = random_toolchanger? p: emcioStatus.tool.toolTable[p].pocketno;
if(!random_toolchanger && p == 0) { *(iocontrol_data->tool_prep_number) = 0;
*(iocontrol_data->tool_prep_pocket) = 0;
} else {
*(iocontrol_data->tool_prep_number) = emcioStatus.tool.toolTable[p].toolno;
}
if (random_toolchanger && p == 0) {
emcioStatus.tool.pocketPrepped = 0;
break;
}
*(iocontrol_data->tool_prepare) = 1;
if (tool_status != 10) emcioStatus.status = RCS_EXEC;
}
break;
case EMC_TOOL_LOAD_TYPE:
rtapi_print_msg(RTAPI_MSG_DBG, "EMC_TOOL_LOAD loaded=%d prepped=%d\n", emcioStatus.tool.toolInSpindle, emcioStatus.tool.pocketPrepped);
if (random_toolchanger && emcioStatus.tool.pocketPrepped == 0) {
break;
}
if (!random_toolchanger && emcioStatus.tool.pocketPrepped > 0 &&
emcioStatus.tool.toolInSpindle == emcioStatus.tool.toolTable[emcioStatus.tool.pocketPrepped].toolno) {
break;
}
if (emcioStatus.tool.pocketPrepped != -1) {
*(iocontrol_data->tool_change) = 1;
if (tool_status != 11)
emcioStatus.status = RCS_EXEC;
}
break;
case EMC_TOOL_UNLOAD_TYPE:
rtapi_print_msg(RTAPI_MSG_DBG, "EMC_TOOL_UNLOAD\n");
emcioStatus.tool.toolInSpindle = 0;
break;
case EMC_TOOL_LOAD_TOOL_TABLE_TYPE:
{
const char *filename =
((EMC_TOOL_LOAD_TOOL_TABLE *) emcioCommand)->file;
if(!strlen(filename)) filename = tool_table_file;
rtapi_print_msg(RTAPI_MSG_DBG, "EMC_TOOL_LOAD_TOOL_TABLE\n");
if (0 != loadToolTable(filename, emcioStatus.tool.toolTable,
ttcomments, random_toolchanger))
emcioStatus.status = RCS_ERROR;
else
reload_tool_number(emcioStatus.tool.toolInSpindle);
}
break;
case EMC_TOOL_SET_OFFSET_TYPE:
{
int p, t, o;
double d, f, b;
EmcPose offs;
p = ((EMC_TOOL_SET_OFFSET *) emcioCommand)->pocket;
t = ((EMC_TOOL_SET_OFFSET *) emcioCommand)->toolno;
offs = ((EMC_TOOL_SET_OFFSET *) emcioCommand)->offset;
d = ((EMC_TOOL_SET_OFFSET *) emcioCommand)->diameter;
f = ((EMC_TOOL_SET_OFFSET *) emcioCommand)->frontangle;
b = ((EMC_TOOL_SET_OFFSET *) emcioCommand)->backangle;
o = ((EMC_TOOL_SET_OFFSET *) emcioCommand)->orientation;
rtapi_print_msg(RTAPI_MSG_DBG,
"EMC_TOOL_SET_OFFSET pocket=%d toolno=%d zoffset=%lf, xoffset=%lf, diameter=%lf,"
" frontangle=%lf, backangle=%lf, orientation=%d\n",
p, t, offs.tran.z, offs.tran.x, d, f, b, o);
emcioStatus.tool.toolTable[p].toolno = t;
emcioStatus.tool.toolTable[p].offset = offs;
emcioStatus.tool.toolTable[p].diameter = d;
emcioStatus.tool.toolTable[p].frontangle = f;
emcioStatus.tool.toolTable[p].backangle = b;
emcioStatus.tool.toolTable[p].orientation = o;
if (emcioStatus.tool.toolInSpindle == t) {
emcioStatus.tool.toolTable[0] = emcioStatus.tool.toolTable[p];
}
}
if (0 != saveToolTable(tool_table_file, emcioStatus.tool.toolTable, ttcomments, random_toolchanger))
emcioStatus.status = RCS_ERROR;
break;
case EMC_TOOL_SET_NUMBER_TYPE:
{
int pocket_number;
pocket_number = ((EMC_TOOL_SET_NUMBER *) emcioCommand)->tool;
rtapi_print_msg(RTAPI_MSG_DBG, "EMC_TOOL_SET_NUMBER old_loaded_tool=%d new_pocket_number=%d new_tool=%d\n", emcioStatus.tool.toolInSpindle, pocket_number, emcioStatus.tool.toolTable[pocket_number].toolno);
load_tool(pocket_number);
emcioStatus.tool.toolInSpindle = emcioStatus.tool.toolTable[pocket_number].toolno;
*(iocontrol_data->tool_number) = emcioStatus.tool.toolInSpindle; }
break;
case EMC_COOLANT_MIST_ON_TYPE:
rtapi_print_msg(RTAPI_MSG_DBG, "EMC_COOLANT_MIST_ON\n");
emcioStatus.coolant.mist = 1;
*(iocontrol_data->coolant_mist) = 1;
break;
case EMC_COOLANT_MIST_OFF_TYPE:
rtapi_print_msg(RTAPI_MSG_DBG, "EMC_COOLANT_MIST_OFF\n");
emcioStatus.coolant.mist = 0;
*(iocontrol_data->coolant_mist) = 0;
break;
case EMC_COOLANT_FLOOD_ON_TYPE:
rtapi_print_msg(RTAPI_MSG_DBG, "EMC_COOLANT_FLOOD_ON\n");
emcioStatus.coolant.flood = 1;
*(iocontrol_data->coolant_flood) = 1;
break;
case EMC_COOLANT_FLOOD_OFF_TYPE:
rtapi_print_msg(RTAPI_MSG_DBG, "EMC_COOLANT_FLOOD_OFF\n");
emcioStatus.coolant.flood = 0;
*(iocontrol_data->coolant_flood) = 0;
break;
case EMC_AUX_ESTOP_ON_TYPE:
rtapi_print_msg(RTAPI_MSG_DBG, "EMC_AUX_ESTOP_ON\n");
*(iocontrol_data->user_enable_out) = 0; hal_init_pins(); break;
case EMC_AUX_ESTOP_OFF_TYPE:
rtapi_print_msg(RTAPI_MSG_DBG, "EMC_AUX_ESTOP_OFF\n");
*(iocontrol_data->user_enable_out) = 1;
*(iocontrol_data->user_request_enable) = 1;
break;
case EMC_AUX_ESTOP_RESET_TYPE:
rtapi_print_msg(RTAPI_MSG_DBG, "EMC_AUX_ESTOP_RESET\n");
break;
case EMC_LUBE_ON_TYPE:
rtapi_print_msg(RTAPI_MSG_DBG, "EMC_LUBE_ON\n");
emcioStatus.lube.on = 1;
*(iocontrol_data->lube) = 1;
break;
case EMC_LUBE_OFF_TYPE:
rtapi_print_msg(RTAPI_MSG_DBG, "EMC_LUBE_OFF\n");
emcioStatus.lube.on = 0;
*(iocontrol_data->lube) = 0;
break;
case EMC_SET_DEBUG_TYPE:
rtapi_print_msg(RTAPI_MSG_DBG, "EMC_SET_DEBUG\n");
emc_debug = ((EMC_SET_DEBUG *) emcioCommand)->debug;
break;
case EMC_TOOL_START_CHANGE_TYPE:
rtapi_print_msg(RTAPI_MSG_DBG, "EMC_TOOL_START_CHANGE\n");
break;
default:
rtapi_print("IO: unknown command %s\n", emcSymbolLookup(type));
break;
}
emcioStatus.command_type = type;
emcioStatus.echo_serial_number = emcioCommand->serial_number;
emcioStatus.heartbeat++;
emcioStatusBuffer->write(&emcioStatus);
esleep(emc_io_cycle_time);
*(iocontrol_data->user_request_enable) = 0;
}
if (emcErrorBuffer != 0) {
delete emcErrorBuffer;
emcErrorBuffer = 0;
}
if (emcioStatusBuffer != 0) {
delete emcioStatusBuffer;
emcioStatusBuffer = 0;
}
if (emcioCommandBuffer != 0) {
delete emcioCommandBuffer;
emcioCommandBuffer = 0;
}
for(int i=0; i<CANON_POCKETS_MAX; i++) {
free(ttcomments[i]);
}
return 0;
}