? block_delete.diff ? m48m49.diff ? hal/utils/comp.py Index: emc/canterp/canterp.cc =================================================================== RCS file: /cvs/emc2/src/emc/canterp/canterp.cc,v retrieving revision 1.13 diff -u -p -r1.13 canterp.cc --- emc/canterp/canterp.cc 9 Sep 2006 07:03:48 -0000 1.13 +++ emc/canterp/canterp.cc 24 Oct 2006 17:55:40 -0000 @@ -262,12 +262,18 @@ int emcTaskPlanSynch(void) return 0; } -int emcTaskPlanSetOptionalStop(char state) +int emcTaskPlanSetOptionalStop(ON_OFF state) { SET_OPTIONAL_PROGRAM_STOP(state); return 0; } +int emcTaskPlanSetBlockDelete(ON_OFF state) +{ + SET_BLOCK_DELETE(state); + return 0; +} + int emcTaskPlanExit(void) { return 0; Index: emc/nml_intf/canon.hh =================================================================== RCS file: /cvs/emc2/src/emc/nml_intf/canon.hh,v retrieving revision 1.14 diff -u -p -r1.14 canon.hh --- emc/nml_intf/canon.hh 8 Sep 2006 22:30:28 -0000 1.14 +++ emc/nml_intf/canon.hh 24 Oct 2006 17:55:41 -0000 @@ -60,6 +60,10 @@ #define CC #endif +typedef bool ON_OFF; +#define OFF 0 +#define ON 1 + typedef int CANON_PLANE; #define CANON_PLANE_XY 1 #define CANON_PLANE_YZ 2 @@ -545,6 +549,17 @@ extern void NURB_CONTROL_POINT(int i, do double w); extern void NURB_FEED(double sStart, double sEnd); + +/* Block delete */ +extern void SET_BLOCK_DELETE(ON_OFF enabled); +/* Command to set the internal reference of block delete. +The ON value for enabled will cause the interpreter to discard lines +that start with the "/" character. */ + +extern ON_OFF GET_BLOCK_DELETE(void); +/* Command to get the internal reference of optional block delete. */ + + /* Program Functions */ extern void OPTIONAL_PROGRAM_STOP(); /* If the machining center has an optional stop switch, and it is on @@ -555,15 +570,14 @@ switch, or commands are being executed w already (such as when the interpreter is being used with keyboard input), this command has no effect. */ -extern void SET_OPTIONAL_PROGRAM_STOP(char state); +extern void SET_OPTIONAL_PROGRAM_STOP(ON_OFF state); /* Command to set the internal reference of optional program stop. Any non-zero value for state will cause the execution to stop on optional stops. */ -extern char GET_OPTIONAL_PROGRAM_STOP(); +extern ON_OFF GET_OPTIONAL_PROGRAM_STOP(); /* Command to get the internal reference of optional program stop. */ - extern void PROGRAM_END(); /* If a program is being read, stop executing the program and be prepared to accept a new program or to be shut down. */ Index: emc/nml_intf/emc.cc =================================================================== RCS file: /cvs/emc2/src/emc/nml_intf/emc.cc,v retrieving revision 1.29 diff -u -p -r1.29 emc.cc --- emc/nml_intf/emc.cc 16 Oct 2006 22:23:06 -0000 1.29 +++ emc/nml_intf/emc.cc 24 Oct 2006 17:55:43 -0000 @@ -363,6 +363,12 @@ int emcFormat(NMLTYPE type, void *buffer case EMC_TASK_PLAN_SET_OPTIONAL_STOP_TYPE: ((EMC_TASK_PLAN_SET_OPTIONAL_STOP *) buffer)->update(cms); break; + case EMC_TASK_PLAN_SET_BLOCK_DELETE_TYPE: + ((EMC_TASK_PLAN_SET_BLOCK_DELETE *) buffer)->update(cms); + break; + case EMC_TASK_PLAN_OPTIONAL_STOP_TYPE: + ((EMC_TASK_PLAN_OPTIONAL_STOP *) buffer)->update(cms); + break; case EMC_TASK_SET_MODE_TYPE: ((EMC_TASK_SET_MODE *) buffer)->update(cms); break; @@ -719,6 +725,10 @@ const char *emc_symbol_lookup(long type) return "EMC_TASK_PLAN_SYNCH"; case EMC_TASK_PLAN_SET_OPTIONAL_STOP_TYPE: return "EMC_TASK_PLAN_SET_OPTIONAL_STOP"; + case EMC_TASK_PLAN_SET_BLOCK_DELETE_TYPE: + return "EMC_TASK_PLAN_SET_BLOCK_DELETE"; + case EMC_TASK_PLAN_OPTIONAL_STOP_TYPE: + return "EMC_TASK_PLAN_OPTIONAL_STOP"; case EMC_TASK_SET_MODE_TYPE: return "EMC_TASK_SET_MODE"; case EMC_TASK_SET_STATE_TYPE: @@ -2934,6 +2944,32 @@ void EMC_TASK_PLAN_SET_OPTIONAL_STOP::up EMC_TASK_CMD_MSG::update(cms); cms->update(state); + +} + +/* +* NML/CMS Update function for EMC_TASK_PLAN_SET_BLOCK_DELETE +* Automanually generated by Alex Joni. +* on Sun Oct 22 17:30:00 GMT+3 2006 +*/ +void EMC_TASK_PLAN_SET_BLOCK_DELETE::update(CMS * cms) +{ + + EMC_TASK_CMD_MSG::update(cms); + + cms->update(state); + +} + +/* +* NML/CMS Update function for EMC_TASK_PLAN_OPTIONAL_STOP +* Automanually generated by Alex Joni. +* on Sat Sep 24 20:25:27 GMT+3 2006 +*/ +void EMC_TASK_PLAN_OPTIONAL_STOP::update(CMS * cms) +{ + + EMC_TASK_CMD_MSG::update(cms); } Index: emc/nml_intf/emc.hh =================================================================== RCS file: /cvs/emc2/src/emc/nml_intf/emc.hh,v retrieving revision 1.42 diff -u -p -r1.42 emc.hh --- emc/nml_intf/emc.hh 16 Oct 2006 22:23:07 -0000 1.42 +++ emc/nml_intf/emc.hh 24 Oct 2006 17:55:46 -0000 @@ -158,6 +158,8 @@ #define EMC_TASK_PLAN_INIT_TYPE ((NMLTYPE) 515) #define EMC_TASK_PLAN_SYNCH_TYPE ((NMLTYPE) 516) #define EMC_TASK_PLAN_SET_OPTIONAL_STOP_TYPE ((NMLTYPE) 517) +#define EMC_TASK_PLAN_SET_BLOCK_DELETE_TYPE ((NMLTYPE) 518) +#define EMC_TASK_PLAN_OPTIONAL_STOP_TYPE ((NMLTYPE) 519) #define EMC_TASK_STAT_TYPE ((NMLTYPE) 599) @@ -472,7 +474,8 @@ extern int emcTaskPlanSetWait(); extern int emcTaskPlanIsWait(); extern int emcTaskPlanClearWait(); extern int emcTaskPlanSynch(); -extern int emcTaskPlanSetOptionalStop(char state); +extern int emcTaskPlanSetOptionalStop(ON_OFF state); +extern int emcTaskPlanSetBlockDelete(ON_OFF state); extern int emcTaskPlanExit(); extern int emcTaskPlanOpen(const char *file); extern int emcTaskPlanRead(); @@ -1939,7 +1942,30 @@ class EMC_TASK_PLAN_SET_OPTIONAL_STOP:pu // For internal NML/CMS use only. void update(CMS * cms); - char state; //state != 0, optional stop is on (e.g. we stop on any stops) + ON_OFF state; //state == ON, optional stop is on (e.g. we stop on any stops) +}; + +class EMC_TASK_PLAN_SET_BLOCK_DELETE:public EMC_TASK_CMD_MSG { + public: + EMC_TASK_PLAN_SET_BLOCK_DELETE():EMC_TASK_CMD_MSG(EMC_TASK_PLAN_SET_BLOCK_DELETE_TYPE, + sizeof(EMC_TASK_PLAN_SET_BLOCK_DELETE)) { + }; + + // For internal NML/CMS use only. + void update(CMS * cms); + + ON_OFF state; //state == ON, block delete is on, we ignore lines starting with "/" +}; + +class EMC_TASK_PLAN_OPTIONAL_STOP:public EMC_TASK_CMD_MSG { + public: + EMC_TASK_PLAN_OPTIONAL_STOP():EMC_TASK_CMD_MSG(EMC_TASK_PLAN_OPTIONAL_STOP_TYPE, + sizeof(EMC_TASK_PLAN_OPTIONAL_STOP)) { + }; + + // For internal NML/CMS use only. + void update(CMS * cms); + }; @@ -1971,7 +1997,8 @@ class EMC_TASK_STAT:public EMC_TASK_STAT int motionLine; // line motion is executing-- may lag int currentLine; // line currently executing int readLine; // line interpreter has read to - char optional_stop_state; // state of optional stop (!= 0 means we stop on M1) + ON_OFF optional_stop_state; // state of optional stop (== ON means we stop on M1) + ON_OFF block_delete_state; // state of block delete (== ON means we ignore lines starting with "/") char file[LINELEN]; char command[LINELEN]; EmcPose origin; // origin, in user units, currently active Index: emc/rs274ngc/gcodemodule.cc =================================================================== RCS file: /cvs/emc2/src/emc/rs274ngc/gcodemodule.cc,v retrieving revision 1.4 diff -u -p -r1.4 gcodemodule.cc --- emc/rs274ngc/gcodemodule.cc 3 Sep 2006 16:40:18 -0000 1.4 +++ emc/rs274ngc/gcodemodule.cc 24 Oct 2006 17:55:47 -0000 @@ -333,6 +333,7 @@ void PALLET_SHUTTLE() {} void CHANGE_TOOL(int tool) {} void SELECT_TOOL(int tool) {} void OPTIONAL_PROGRAM_STOP() {} +ON_OFF GET_BLOCK_DELETE() { return 0; } void DISABLE_FEED_OVERRIDE() {} void DISABLE_SPEED_OVERRIDE() {} void ENABLE_FEED_OVERRIDE() {} Index: emc/rs274ngc/interp_internal.hh =================================================================== RCS file: /cvs/emc2/src/emc/rs274ngc/interp_internal.hh,v retrieving revision 1.15 diff -u -p -r1.15 interp_internal.hh --- emc/rs274ngc/interp_internal.hh 31 Jul 2006 02:59:34 -0000 1.15 +++ emc/rs274ngc/interp_internal.hh 24 Oct 2006 17:55:47 -0000 @@ -206,7 +206,7 @@ typedef enum { R_PLANE, OLD_Z } RETRACT_MODE; -typedef int ON_OFF; +typedef bool ON_OFF; typedef struct block_struct { Index: emc/rs274ngc/interp_read.cc =================================================================== RCS file: /cvs/emc2/src/emc/rs274ngc/interp_read.cc,v retrieving revision 1.11 diff -u -p -r1.11 interp_read.cc --- emc/rs274ngc/interp_read.cc 3 Jul 2006 20:36:29 -0000 1.11 +++ emc/rs274ngc/interp_read.cc 24 Oct 2006 17:55:50 -0000 @@ -2546,7 +2546,11 @@ int Interp::read_text(const char *comman else *length = strlen(line); - return ((line[0] == '/') ? INTERP_EXECUTE_FINISH : INTERP_OK); + + if ((line[0] == '/') && (GET_BLOCK_DELETE() == ON)) + return INTERP_EXECUTE_FINISH; + else + return INTERP_OK; } /****************************************************************************/ Index: emc/task/emccanon.cc =================================================================== RCS file: /cvs/emc2/src/emc/task/emccanon.cc,v retrieving revision 1.70 diff -u -p -r1.70 emccanon.cc --- emc/task/emccanon.cc 17 Oct 2006 19:18:01 -0000 1.70 +++ emc/task/emccanon.cc 24 Oct 2006 17:55:53 -0000 @@ -134,8 +134,10 @@ static double spindleSpeed = 0.0; static int preppedTool = 0; /* optional program stop */ -static int optional_program_stop = 1; //set enabled by default (previous EMC behaviour) +static ON_OFF optional_program_stop = ON; //set enabled by default (previous EMC behaviour) +/* optional block delete */ +static ON_OFF block_delete = ON; //set enabled by default (previous EMC behaviour) /* Tool length offset is saved here */ static double currentXToolOffset = 0.0; @@ -1461,24 +1463,34 @@ void PROGRAM_STOP() interp_list.append(pauseMsg); } -void SET_OPTIONAL_PROGRAM_STOP(char state) +void SET_BLOCK_DELETE(ON_OFF state) { + block_delete = state; //state == ON, means we don't interpret lines starting with "/" +} - optional_program_stop = state; //state != 0, means we stop +ON_OFF GET_BLOCK_DELETE() +{ + return block_delete; //state == ON, means we don't interpret lines starting with "/" } -char GET_OPTIONAL_PROGRAM_STOP() + +void SET_OPTIONAL_PROGRAM_STOP(ON_OFF state) { + optional_program_stop = state; //state == ON, means we stop +} - return optional_program_stop; //state != 0, means we stop +ON_OFF GET_OPTIONAL_PROGRAM_STOP() +{ + return optional_program_stop; //state == ON, means we stop } void OPTIONAL_PROGRAM_STOP() { - if (optional_program_stop) { - flush_segments(); - PROGRAM_STOP(); - } + EMC_TASK_PLAN_OPTIONAL_STOP stopMsg; + + flush_segments(); + + interp_list.append(stopMsg); } void PROGRAM_END() Index: emc/task/emctask.cc =================================================================== RCS file: /cvs/emc2/src/emc/task/emctask.cc,v retrieving revision 1.19 diff -u -p -r1.19 emctask.cc --- emc/task/emctask.cc 8 Sep 2006 22:30:29 -0000 1.19 +++ emc/task/emctask.cc 24 Oct 2006 17:55:53 -0000 @@ -324,12 +324,17 @@ int emcTaskPlanClearWait() return 0; } -int emcTaskPlanSetOptionalStop(char state) +int emcTaskPlanSetOptionalStop(ON_OFF state) { SET_OPTIONAL_PROGRAM_STOP(state); return 0; } +int emcTaskPlanSetBlockDelete(ON_OFF state) +{ + SET_BLOCK_DELETE(state); + return 0; +} int emcTaskPlanSynch() { @@ -445,6 +450,9 @@ int emcTaskUpdate(EMC_TASK_STAT * stat) //update state of optional stop stat->optional_stop_state = GET_OPTIONAL_PROGRAM_STOP(); + //update state of block delete + stat->block_delete_state = GET_BLOCK_DELETE(); + stat->heartbeat++; return 0; Index: emc/task/emctaskmain.cc =================================================================== RCS file: /cvs/emc2/src/emc/task/emctaskmain.cc,v retrieving revision 1.74 diff -u -p -r1.74 emctaskmain.cc --- emc/task/emctaskmain.cc 16 Oct 2006 22:23:08 -0000 1.74 +++ emc/task/emctaskmain.cc 24 Oct 2006 17:55:56 -0000 @@ -343,6 +343,7 @@ static EMC_TASK_PLAN_RUN *run_msg; static EMC_TASK_PLAN_EXECUTE *execute_msg; static EMC_TASK_PLAN_OPEN *open_msg; static EMC_TASK_PLAN_SET_OPTIONAL_STOP *os_msg; +static EMC_TASK_PLAN_SET_BLOCK_DELETE *bd_msg; // commands we compose here static EMC_TASK_PLAN_RUN taskPlanRunCmd; // 16-Aug-1999 FMP @@ -541,6 +542,7 @@ static int emcTaskPlan(void) case EMC_TASK_PLAN_INIT_TYPE: case EMC_TASK_PLAN_OPEN_TYPE: case EMC_TASK_PLAN_SET_OPTIONAL_STOP_TYPE: + case EMC_TASK_PLAN_SET_BLOCK_DELETE_TYPE: case EMC_TASK_ABORT_TYPE: case EMC_TRAJ_CLEAR_PROBE_TRIPPED_FLAG_TYPE: case EMC_TRAJ_PROBE_TYPE: @@ -656,6 +658,8 @@ static int emcTaskPlan(void) case EMC_TASK_PLAN_INIT_TYPE: case EMC_TASK_PLAN_SYNCH_TYPE: case EMC_TASK_PLAN_SET_OPTIONAL_STOP_TYPE: + case EMC_TASK_PLAN_SET_BLOCK_DELETE_TYPE: + case EMC_TASK_PLAN_OPTIONAL_STOP_TYPE: case EMC_TRAJ_CLEAR_PROBE_TRIPPED_FLAG_TYPE: case EMC_TRAJ_PROBE_TYPE: case EMC_TRAJ_SET_TELEOP_ENABLE_TYPE: @@ -746,6 +750,8 @@ static int emcTaskPlan(void) case EMC_TASK_PLAN_PAUSE_TYPE: case EMC_TASK_PLAN_RESUME_TYPE: case EMC_TASK_PLAN_SET_OPTIONAL_STOP_TYPE: + case EMC_TASK_PLAN_SET_BLOCK_DELETE_TYPE: + case EMC_TASK_PLAN_OPTIONAL_STOP_TYPE: case EMC_TRAJ_CLEAR_PROBE_TRIPPED_FLAG_TYPE: case EMC_TRAJ_PROBE_TYPE: case EMC_SET_DEBUG_TYPE: @@ -820,6 +826,8 @@ static int emcTaskPlan(void) case EMC_TASK_PLAN_PAUSE_TYPE: case EMC_TASK_PLAN_RESUME_TYPE: case EMC_TASK_PLAN_SET_OPTIONAL_STOP_TYPE: + case EMC_TASK_PLAN_SET_BLOCK_DELETE_TYPE: + case EMC_TASK_PLAN_OPTIONAL_STOP_TYPE: case EMC_TASK_SET_MODE_TYPE: case EMC_TASK_SET_STATE_TYPE: case EMC_TASK_ABORT_TYPE: @@ -1020,6 +1028,8 @@ interpret_again: case EMC_TASK_PLAN_PAUSE_TYPE: case EMC_TASK_PLAN_RESUME_TYPE: case EMC_TASK_PLAN_SET_OPTIONAL_STOP_TYPE: + case EMC_TASK_PLAN_SET_BLOCK_DELETE_TYPE: + case EMC_TASK_PLAN_OPTIONAL_STOP_TYPE: case EMC_TRAJ_CLEAR_PROBE_TRIPPED_FLAG_TYPE: case EMC_TRAJ_PROBE_TYPE: case EMC_SET_DEBUG_TYPE: @@ -1079,6 +1089,8 @@ interpret_again: case EMC_TASK_PLAN_PAUSE_TYPE: case EMC_TASK_PLAN_RESUME_TYPE: case EMC_TASK_PLAN_SET_OPTIONAL_STOP_TYPE: + case EMC_TASK_PLAN_SET_BLOCK_DELETE_TYPE: + case EMC_TASK_PLAN_OPTIONAL_STOP_TYPE: case EMC_TASK_SET_MODE_TYPE: case EMC_TASK_SET_STATE_TYPE: case EMC_TASK_ABORT_TYPE: @@ -1183,7 +1195,9 @@ interpret_again: case EMC_TASK_PLAN_EXECUTE_TYPE: case EMC_TASK_PLAN_PAUSE_TYPE: case EMC_TASK_PLAN_SET_OPTIONAL_STOP_TYPE: + case EMC_TASK_PLAN_SET_BLOCK_DELETE_TYPE: case EMC_TASK_PLAN_RESUME_TYPE: + case EMC_TASK_PLAN_OPTIONAL_STOP_TYPE: case EMC_TASK_ABORT_TYPE: case EMC_TRAJ_CLEAR_PROBE_TRIPPED_FLAG_TYPE: case EMC_TRAJ_PROBE_TYPE: @@ -1300,6 +1314,7 @@ static int emcTaskCheckPreconditions(NML break; case EMC_TASK_PLAN_PAUSE_TYPE: + case EMC_TASK_PLAN_OPTIONAL_STOP_TYPE: /* pause on the interp list is queued, so wait until all are done */ return EMC_TASK_EXEC_WAITING_FOR_MOTION_AND_IO; break; @@ -1895,6 +1910,17 @@ static int emcTaskIssueCommand(NMLmsg * retval = 0; break; + case EMC_TASK_PLAN_OPTIONAL_STOP_TYPE: + if (GET_OPTIONAL_PROGRAM_STOP() == ON) { + emcTrajPause(); + if (emcStatus->task.interpState != EMC_TASK_INTERP_PAUSED) { + interpResumeState = emcStatus->task.interpState; + } + emcStatus->task.interpState = EMC_TASK_INTERP_PAUSED; + } + retval = 0; + break; + case EMC_TASK_PLAN_RESUME_TYPE: emcTrajResume(); emcStatus->task.interpState = @@ -1934,6 +1960,12 @@ static int emcTaskIssueCommand(NMLmsg * retval = 0; break; + case EMC_TASK_PLAN_SET_BLOCK_DELETE_TYPE: + bd_msg = (EMC_TASK_PLAN_SET_BLOCK_DELETE *) cmd; + emcTaskPlanSetBlockDelete(bd_msg->state); + retval = 0; + break; + default: // unrecognized command if (EMC_DEBUG & EMC_DEBUG_TASK_ISSUE) { @@ -2022,6 +2054,7 @@ static int emcTaskCheckPostconditions(NM case EMC_TASK_PLAN_INIT_TYPE: case EMC_TASK_PLAN_SYNCH_TYPE: case EMC_TASK_PLAN_EXECUTE_TYPE: + case EMC_TASK_PLAN_OPTIONAL_STOP_TYPE: return EMC_TASK_EXEC_DONE; break; Index: emc/usr_intf/emcsh.cc =================================================================== RCS file: /cvs/emc2/src/emc/usr_intf/emcsh.cc,v retrieving revision 1.21 diff -u -p -r1.21 emcsh.cc --- emc/usr_intf/emcsh.cc 7 Oct 2006 12:40:54 -0000 1.21 +++ emc/usr_intf/emcsh.cc 24 Oct 2006 17:56:00 -0000 @@ -1457,7 +1457,7 @@ static int sendProgramResume() return 0; } -static int sendSetOptionalStop(char state) +static int sendSetOptionalStop(ON_OFF state) { EMC_TASK_PLAN_SET_OPTIONAL_STOP emc_task_plan_set_optional_stop_msg; Index: emc/usr_intf/halui.cc =================================================================== RCS file: /cvs/emc2/src/emc/usr_intf/halui.cc,v retrieving revision 1.33 diff -u -p -r1.33 halui.cc --- emc/usr_intf/halui.cc 7 Oct 2006 12:40:55 -0000 1.33 +++ emc/usr_intf/halui.cc 24 Oct 2006 17:56:03 -0000 @@ -220,6 +220,9 @@ struct halui_str { hal_bit_t *program_os_on; //pin for setting optional stop on hal_bit_t *program_os_off; //pin for setting optional stop off hal_bit_t *program_os_is_on; //status pin that optional stop is on + hal_bit_t *program_bd_on; //pin for setting block delete on + hal_bit_t *program_bd_off; //pin for setting block delete off + hal_bit_t *program_bd_is_on; //status pin that block delete is on hal_s32_t *jog_wheel_counts; hal_u8_t *jog_wheel_axis; @@ -298,6 +301,8 @@ struct local_halui_str { hal_bit_t program_step; //pin for running one line of the program hal_bit_t program_os_on; //pin for setting optional stop on hal_bit_t program_os_off; //pin for setting optional stop off + hal_bit_t program_bd_on; //pin for setting block delete on + hal_bit_t program_bd_off; //pin for setting block delete off hal_s32_t jog_wheel_counts; hal_u8_t jog_wheel_axis; @@ -712,6 +717,8 @@ int halui_hal_init(void) if (retval != HAL_SUCCESS) return retval; retval = halui_export_pin_OUT_bit(&(halui_data->program_os_is_on), "halui.program.optional-stop.is-on"); if (retval != HAL_SUCCESS) return retval; + retval = halui_export_pin_OUT_bit(&(halui_data->program_bd_is_on), "halui.program.block-delete.is-on"); + if (retval != HAL_SUCCESS) return retval; retval = halui_export_pin_OUT_bit(&(halui_data->spindle_is_on), "halui.spindle.is-on"); if (retval != HAL_SUCCESS) return retval; retval = halui_export_pin_OUT_bit(&(halui_data->spindle_runs_forward), "halui.spindle.runs-forward"); @@ -802,6 +809,10 @@ int halui_hal_init(void) if (retval != HAL_SUCCESS) return retval; retval = halui_export_pin_IN_bit(&(halui_data->program_os_off), "halui.program.optional-stop.off"); if (retval != HAL_SUCCESS) return retval; + retval = halui_export_pin_IN_bit(&(halui_data->program_bd_on), "halui.program.block-delete.on"); + if (retval != HAL_SUCCESS) return retval; + retval = halui_export_pin_IN_bit(&(halui_data->program_bd_off), "halui.program.block-delete.off"); + if (retval != HAL_SUCCESS) return retval; retval = halui_export_pin_IN_s32(&(halui_data->jog_wheel_counts), "halui.jog-wheel.counts"); if (retval != HAL_SUCCESS) return retval; @@ -1126,7 +1137,7 @@ static int sendProgramPause() return 0; } -static int sendSetOptionalStop(char state) +static int sendSetOptionalStop(ON_OFF state) { EMC_TASK_PLAN_SET_OPTIONAL_STOP emc_task_plan_set_optional_stop_msg; @@ -1142,6 +1153,22 @@ static int sendSetOptionalStop(char stat return 0; } +static int sendSetBlockDelete(ON_OFF state) +{ + EMC_TASK_PLAN_SET_BLOCK_DELETE emc_task_plan_set_block_delete_msg; + + emc_task_plan_set_block_delete_msg.state = state; + emc_task_plan_set_block_delete_msg.serial_number = ++emcCommandSerialNumber; + emcCommandBuffer->write(emc_task_plan_set_block_delete_msg); + if (emcWaitType == EMC_WAIT_RECEIVED) { + return emcCommandWaitReceived(emcCommandSerialNumber); + } else if (emcWaitType == EMC_WAIT_DONE) { + return emcCommandWaitDone(emcCommandSerialNumber); + } + + return 0; +} + static int sendProgramResume() { @@ -1786,10 +1813,16 @@ static void check_hal_changes() sendProgramPause(); if (check_bit_changed(halui_data->program_os_on, &(old_halui_data.program_os_on)) != 0) - sendSetOptionalStop(1); + sendSetOptionalStop(ON); if (check_bit_changed(halui_data->program_os_off, &(old_halui_data.program_os_off)) != 0) - sendSetOptionalStop(0); + sendSetOptionalStop(OFF); + + if (check_bit_changed(halui_data->program_bd_on, &(old_halui_data.program_bd_on)) != 0) + sendSetBlockDelete(ON); + + if (check_bit_changed(halui_data->program_bd_off, &(old_halui_data.program_bd_off)) != 0) + sendSetBlockDelete(OFF); if (check_bit_changed(halui_data->program_resume, &(old_halui_data.program_resume)) != 0) sendProgramResume(); @@ -1985,6 +2018,7 @@ static void modify_hal_pins() emcStatus->task.interpState == EMC_TASK_INTERP_WAITING; *(halui_data->program_is_idle) = emcStatus->task.interpState == EMC_TASK_INTERP_IDLE; *(halui_data->program_os_is_on) = emcStatus->task.optional_stop_state; + *(halui_data->program_bd_is_on) = emcStatus->task.block_delete_state; *(halui_data->fo_value) = emcStatus->motion.traj.scale; //feedoverride from 0 to 1 for 100% *(halui_data->so_value) = emcStatus->motion.traj.spindle_scale; //spindle-speed-override from 0 to 1 for 100%