canonmodule.cc
1 /* This is a component of LinuxCNC 2 * Copyright 2011, 2012 Jeff Epler <jepler@dsndata.com>, Michael Haberler 3 * <git@mah.priv.at>, Sebastian Kuzminsky <seb@highlab.com> 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; either version 2 of the License, or 8 * (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program; if not, write to the Free Software 17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 */ 19 #define BOOST_PYTHON_MAX_ARITY 13 20 #include <boost/python/def.hpp> 21 #include <boost/python/module.hpp> 22 #include <boost/python/scope.hpp> 23 #include <boost/python/enum.hpp> 24 25 namespace bp = boost::python; 26 27 #include "rs274ngc_interp.hh" 28 #include "interp_queue.hh" 29 30 static void wrap_canon_error(const char *s) 31 { 32 if ((s == NULL) || (strlen(s) == 0)) { 33 return; 34 } 35 CANON_ERROR("%s", s); 36 } 37 38 39 BOOST_PYTHON_MODULE(emccanon) { 40 using namespace boost::python; 41 scope().attr("__doc__") = 42 "Canon access & introspection\n" 43 ; 44 enum_<CANON_PLANE>("CANON_PLANE") 45 .value("CANON_PLANE_XY", CANON_PLANE_XY) 46 .value("CANON_PLANE_YZ", CANON_PLANE_YZ) 47 .value("CANON_PLANE_XZ", CANON_PLANE_XZ) 48 .value("CANON_PLANE_UV", CANON_PLANE_UV) 49 .value("CANON_PLANE_VW", CANON_PLANE_VW) 50 .value("CANON_PLANE_UW", CANON_PLANE_UW) 51 .export_values(); 52 53 enum_<CANON_UNITS>("CANON_UNITS") 54 .value("CANON_UNITS_INCHES", CANON_UNITS_INCHES) 55 .value("CANON_UNITS_MM", CANON_UNITS_MM) 56 .value("CANON_UNITS_CM", CANON_UNITS_CM) 57 .export_values(); 58 59 enum_<CANON_MOTION_MODE>("CANON_MOTION_MODE") 60 .value("CANON_EXACT_STOP", CANON_EXACT_STOP) 61 .value("CANON_EXACT_PATH", CANON_EXACT_PATH) 62 .value("CANON_CONTINUOUS", CANON_CONTINUOUS) 63 .export_values(); 64 65 enum_<CANON_SPEED_FEED_MODE>("CANON_FEED_SPEED_MODE") 66 .value("CANON_SYNCHED", CANON_SYNCHED) 67 .value("CANON_INDEPENDENT", CANON_INDEPENDENT) 68 .export_values(); 69 70 enum_<CANON_DIRECTION>("CANON_DIRECTION") 71 .value("CANON_STOPPED", CANON_STOPPED) 72 .value("CANON_CLOCKWISE", CANON_CLOCKWISE) 73 .value("CANON_COUNTERCLOCKWISE", CANON_COUNTERCLOCKWISE) 74 .export_values(); 75 76 enum_<CANON_FEED_REFERENCE>("CANON_FEED_REFERENCE") 77 .value("CANON_WORKPIECE", CANON_WORKPIECE) 78 .value("CANON_XYZ", CANON_XYZ) 79 .export_values(); 80 81 enum_<CANON_SIDE>("CANON_SIDE") 82 .value("CANON_SIDE_RIGHT", CANON_SIDE_RIGHT) 83 .value("CANON_SIDE_LEFT", CANON_SIDE_LEFT) 84 .value("CANON_SIDE_OFF", CANON_SIDE_OFF) 85 .export_values(); 86 87 enum_<CANON_AXIS>("CANON_AXIS") 88 .value("CANON_AXIS_X", CANON_AXIS_X) 89 .value("CANON_AXIS_Y", CANON_AXIS_Y) 90 .value("CANON_AXIS_Z", CANON_AXIS_Z) 91 .value("CANON_AXIS_A", CANON_AXIS_A) 92 .value("CANON_AXIS_B", CANON_AXIS_B) 93 .value("CANON_AXIS_C", CANON_AXIS_C) 94 .value("CANON_AXIS_U", CANON_AXIS_U) 95 .value("CANON_AXIS_V", CANON_AXIS_V) 96 .value("CANON_AXIS_W", CANON_AXIS_W) 97 .export_values(); 98 99 // scope().attr("") = ; 100 101 def("ARC_FEED",&ARC_FEED); 102 def("CANON_ERROR",&wrap_canon_error); 103 def("CHANGE_TOOL",&CHANGE_TOOL); 104 def("CHANGE_TOOL_NUMBER",&CHANGE_TOOL_NUMBER); 105 def("CLAMP_AXIS",&CLAMP_AXIS); 106 def("CLEAR_AUX_OUTPUT_BIT",&CLEAR_AUX_OUTPUT_BIT); 107 def("CLEAR_MOTION_OUTPUT_BIT",&CLEAR_MOTION_OUTPUT_BIT); 108 def("COMMENT",&COMMENT); 109 def("DISABLE_ADAPTIVE_FEED",&DISABLE_ADAPTIVE_FEED); 110 def("DISABLE_FEED_HOLD",&DISABLE_FEED_HOLD); 111 def("DISABLE_FEED_OVERRIDE",&DISABLE_FEED_OVERRIDE); 112 def("DISABLE_SPEED_OVERRIDE",&DISABLE_SPEED_OVERRIDE); 113 def("DWELL",&DWELL); 114 def("ENABLE_ADAPTIVE_FEED",&ENABLE_ADAPTIVE_FEED); 115 def("ENABLE_FEED_HOLD",&ENABLE_FEED_HOLD); 116 def("ENABLE_FEED_OVERRIDE",&ENABLE_FEED_OVERRIDE); 117 def("ENABLE_SPEED_OVERRIDE",&ENABLE_SPEED_OVERRIDE); 118 def("PLUGIN_CALL",&PLUGIN_CALL); 119 def("IO_PLUGIN_CALL",&IO_PLUGIN_CALL); 120 def("FINISH",&FINISH); 121 def("ON_RESET", &ON_RESET); 122 def("FLOOD_OFF",&FLOOD_OFF); 123 def("FLOOD_ON",&FLOOD_ON); 124 def("GET_BLOCK_DELETE",&GET_BLOCK_DELETE); 125 def("GET_EXTERNAL_ADAPTIVE_FEED_ENABLE",&GET_EXTERNAL_ADAPTIVE_FEED_ENABLE); 126 def("GET_EXTERNAL_ANALOG_INPUT",&GET_EXTERNAL_ANALOG_INPUT); 127 def("GET_EXTERNAL_ANGLE_UNITS",&GET_EXTERNAL_ANGLE_UNITS); 128 def("GET_EXTERNAL_AXIS_MASK",&GET_EXTERNAL_AXIS_MASK); 129 def("GET_EXTERNAL_DIGITAL_INPUT",&GET_EXTERNAL_DIGITAL_INPUT); 130 def("GET_EXTERNAL_FEED_HOLD_ENABLE",&GET_EXTERNAL_FEED_HOLD_ENABLE); 131 def("GET_EXTERNAL_FEED_OVERRIDE_ENABLE",&GET_EXTERNAL_FEED_OVERRIDE_ENABLE); 132 def("GET_EXTERNAL_FEED_RATE",&GET_EXTERNAL_FEED_RATE); 133 def("GET_EXTERNAL_FLOOD",&GET_EXTERNAL_FLOOD); 134 def("GET_EXTERNAL_LENGTH_UNITS",&GET_EXTERNAL_LENGTH_UNITS); 135 def("GET_EXTERNAL_MIST",&GET_EXTERNAL_MIST); 136 def("GET_EXTERNAL_MOTION_CONTROL_MODE",&GET_EXTERNAL_MOTION_CONTROL_MODE); 137 def("GET_EXTERNAL_MOTION_CONTROL_TOLERANCE",&GET_EXTERNAL_MOTION_CONTROL_TOLERANCE); 138 def("SET_PARAMETER_FILE_NAME",&SET_PARAMETER_FILE_NAME); 139 def("GET_EXTERNAL_PARAMETER_FILE_NAME",&GET_EXTERNAL_PARAMETER_FILE_NAME); 140 def("GET_EXTERNAL_PLANE",&GET_EXTERNAL_PLANE); 141 def("GET_EXTERNAL_POCKETS_MAX",&GET_EXTERNAL_POCKETS_MAX); 142 def("GET_EXTERNAL_POSITION_A",&GET_EXTERNAL_POSITION_A); 143 def("GET_EXTERNAL_POSITION_B",&GET_EXTERNAL_POSITION_B); 144 def("GET_EXTERNAL_POSITION_C",&GET_EXTERNAL_POSITION_C); 145 def("GET_EXTERNAL_POSITION_U",&GET_EXTERNAL_POSITION_U); 146 def("GET_EXTERNAL_POSITION_V",&GET_EXTERNAL_POSITION_V); 147 def("GET_EXTERNAL_POSITION_W",&GET_EXTERNAL_POSITION_W); 148 def("GET_EXTERNAL_POSITION_X",&GET_EXTERNAL_POSITION_X); 149 def("GET_EXTERNAL_POSITION_Y",&GET_EXTERNAL_POSITION_Y); 150 def("GET_EXTERNAL_POSITION_Z",&GET_EXTERNAL_POSITION_Z); 151 def("GET_EXTERNAL_PROBE_POSITION_A",&GET_EXTERNAL_PROBE_POSITION_A); 152 def("GET_EXTERNAL_PROBE_POSITION_B",&GET_EXTERNAL_PROBE_POSITION_B); 153 def("GET_EXTERNAL_PROBE_POSITION_C",&GET_EXTERNAL_PROBE_POSITION_C); 154 def("GET_EXTERNAL_PROBE_POSITION_U",&GET_EXTERNAL_PROBE_POSITION_U); 155 def("GET_EXTERNAL_PROBE_POSITION_V",&GET_EXTERNAL_PROBE_POSITION_V); 156 def("GET_EXTERNAL_PROBE_POSITION_W",&GET_EXTERNAL_PROBE_POSITION_W); 157 def("GET_EXTERNAL_PROBE_POSITION_X",&GET_EXTERNAL_PROBE_POSITION_X); 158 def("GET_EXTERNAL_PROBE_POSITION_Y",&GET_EXTERNAL_PROBE_POSITION_Y); 159 def("GET_EXTERNAL_PROBE_POSITION_Z",&GET_EXTERNAL_PROBE_POSITION_Z); 160 def("GET_EXTERNAL_PROBE_TRIPPED_VALUE",&GET_EXTERNAL_PROBE_TRIPPED_VALUE); 161 def("GET_EXTERNAL_PROBE_VALUE",&GET_EXTERNAL_PROBE_VALUE); 162 def("GET_EXTERNAL_QUEUE_EMPTY",&GET_EXTERNAL_QUEUE_EMPTY); 163 def("GET_EXTERNAL_SELECTED_TOOL_SLOT",&GET_EXTERNAL_SELECTED_TOOL_SLOT); 164 def("GET_EXTERNAL_SPEED",&GET_EXTERNAL_SPEED); 165 def("GET_EXTERNAL_SPINDLE",&GET_EXTERNAL_SPINDLE); 166 def("GET_EXTERNAL_SPINDLE_OVERRIDE_ENABLE",&GET_EXTERNAL_SPINDLE_OVERRIDE_ENABLE); 167 def("GET_EXTERNAL_TC_FAULT",&GET_EXTERNAL_TC_FAULT); 168 def("GET_EXTERNAL_TOOL_LENGTH_AOFFSET",&GET_EXTERNAL_TOOL_LENGTH_AOFFSET); 169 def("GET_EXTERNAL_TOOL_LENGTH_BOFFSET",&GET_EXTERNAL_TOOL_LENGTH_BOFFSET); 170 def("GET_EXTERNAL_TOOL_LENGTH_COFFSET",&GET_EXTERNAL_TOOL_LENGTH_COFFSET); 171 def("GET_EXTERNAL_TOOL_LENGTH_UOFFSET",&GET_EXTERNAL_TOOL_LENGTH_UOFFSET); 172 def("GET_EXTERNAL_TOOL_LENGTH_VOFFSET",&GET_EXTERNAL_TOOL_LENGTH_VOFFSET); 173 def("GET_EXTERNAL_TOOL_LENGTH_WOFFSET",&GET_EXTERNAL_TOOL_LENGTH_WOFFSET); 174 def("GET_EXTERNAL_TOOL_LENGTH_XOFFSET",&GET_EXTERNAL_TOOL_LENGTH_XOFFSET); 175 def("GET_EXTERNAL_TOOL_LENGTH_YOFFSET",&GET_EXTERNAL_TOOL_LENGTH_YOFFSET); 176 def("GET_EXTERNAL_TOOL_LENGTH_ZOFFSET",&GET_EXTERNAL_TOOL_LENGTH_ZOFFSET); 177 def("GET_EXTERNAL_TOOL_SLOT",&GET_EXTERNAL_TOOL_SLOT); 178 def("GET_EXTERNAL_TOOL_TABLE",&GET_EXTERNAL_TOOL_TABLE); 179 def("GET_EXTERNAL_TRAVERSE_RATE",&GET_EXTERNAL_TRAVERSE_RATE); 180 def("GET_OPTIONAL_PROGRAM_STOP",&GET_OPTIONAL_PROGRAM_STOP); 181 def("INIT_CANON",&INIT_CANON); 182 def("LOCK_ROTARY",&LOCK_ROTARY); 183 // def("LOCK_SPINDLE_Z",&LOCK_SPINDLE_Z); 184 def("LOGAPPEND",&LOGAPPEND); 185 def("LOGCLOSE",&LOGCLOSE); 186 def("LOG",&LOG); 187 def("LOGOPEN",&LOGOPEN); 188 def("MESSAGE",&MESSAGE); 189 def("MIST_OFF",&MIST_OFF); 190 def("MIST_ON",&MIST_ON); 191 // def("NURB_CONTROL_POINT",&NURB_CONTROL_POINT); 192 // def("NURB_FEED",&NURB_FEED); 193 // def("NURB_KNOT_VECTOR",&NURB_KNOT_VECTOR); 194 def("NURBS_FEED",&NURBS_FEED); 195 def("OPTIONAL_PROGRAM_STOP",&OPTIONAL_PROGRAM_STOP); 196 // def("ORIENT_SPINDLE",&ORIENT_SPINDLE); 197 def("PALLET_SHUTTLE",&PALLET_SHUTTLE); 198 def("PROGRAM_END",&PROGRAM_END); 199 def("PROGRAM_STOP",&PROGRAM_STOP); 200 def("RIGID_TAP",&RIGID_TAP); 201 def("SELECT_PLANE",&SELECT_PLANE); 202 def("SELECT_POCKET",&SELECT_POCKET); 203 def("SET_AUX_OUTPUT_BIT",&SET_AUX_OUTPUT_BIT); 204 def("SET_AUX_OUTPUT_VALUE",&SET_AUX_OUTPUT_VALUE); 205 def("SET_BLOCK_DELETE",&SET_BLOCK_DELETE); 206 def("SET_CUTTER_RADIUS_COMPENSATION",&SET_CUTTER_RADIUS_COMPENSATION); 207 def("SET_FEED_MODE",&SET_FEED_MODE); 208 def("SET_FEED_RATE",&SET_FEED_RATE); 209 // def("SET_FEED_REFERENCE",&SET_FEED_REFERENCE); 210 def("SET_G5X_OFFSET",&SET_G5X_OFFSET); 211 def("SET_G92_OFFSET",&SET_G92_OFFSET); 212 // def("SET_MOTION_CONTROL_MODE",&SET_MOTION_CONTROL_MODE); 213 def("SET_MOTION_OUTPUT_BIT",&SET_MOTION_OUTPUT_BIT); 214 def("SET_MOTION_OUTPUT_VALUE",&SET_MOTION_OUTPUT_VALUE); 215 def("SET_NAIVECAM_TOLERANCE",&SET_NAIVECAM_TOLERANCE); 216 def("SET_OPTIONAL_PROGRAM_STOP",&SET_OPTIONAL_PROGRAM_STOP); 217 def("SET_SPINDLE_MODE",&SET_SPINDLE_MODE); 218 def("SET_SPINDLE_SPEED",&SET_SPINDLE_SPEED); 219 def("SET_TOOL_TABLE_ENTRY",&SET_TOOL_TABLE_ENTRY); 220 def("SET_TRAVERSE_RATE",&SET_TRAVERSE_RATE); 221 def("SET_XY_ROTATION",&SET_XY_ROTATION); 222 def("SPINDLE_RETRACT",&SPINDLE_RETRACT); 223 def("SPINDLE_RETRACT_TRAVERSE",&SPINDLE_RETRACT_TRAVERSE); 224 def("START_CHANGE",&START_CHANGE); 225 def("START_CUTTER_RADIUS_COMPENSATION",&START_CUTTER_RADIUS_COMPENSATION); 226 def("START_SPEED_FEED_SYNCH",&START_SPEED_FEED_SYNCH); 227 def("START_SPINDLE_CLOCKWISE",&START_SPINDLE_CLOCKWISE); 228 def("START_SPINDLE_COUNTERCLOCKWISE",&START_SPINDLE_COUNTERCLOCKWISE); 229 def("STOP_CUTTER_RADIUS_COMPENSATION",&STOP_CUTTER_RADIUS_COMPENSATION); 230 def("STOP_SPEED_FEED_SYNCH",&STOP_SPEED_FEED_SYNCH); 231 def("STOP_SPINDLE_TURNING",&STOP_SPINDLE_TURNING); 232 // def("STOP",&STOP); 233 def("STRAIGHT_FEED",&STRAIGHT_FEED); 234 def("STRAIGHT_PROBE",&STRAIGHT_PROBE); 235 def("STRAIGHT_TRAVERSE",&STRAIGHT_TRAVERSE); 236 def("TURN_PROBE_OFF",&TURN_PROBE_OFF); 237 def("TURN_PROBE_ON",&TURN_PROBE_ON); 238 // def("UNCLAMP_AXIS",&UNCLAMP_AXIS); 239 def("UNLOCK_ROTARY",&UNLOCK_ROTARY); 240 def("USE_LENGTH_UNITS",&USE_LENGTH_UNITS); 241 def("USE_NO_SPINDLE_FORCE",&USE_NO_SPINDLE_FORCE); 242 // def("USER_DEFINED_FUNCTION_ADD",&USER_DEFINED_FUNCTION_ADD); 243 // def("USE_SPINDLE_FORCE",&USE_SPINDLE_FORCE); 244 def("USE_TOOL_LENGTH_OFFSET",&USE_TOOL_LENGTH_OFFSET); 245 def("WAIT",&WAIT); 246 247 // from interp_queue.cc 248 def("enqueue_SET_FEED_RATE", &enqueue_SET_FEED_RATE); 249 def("enqueue_SET_FEED_MODE", &enqueue_SET_FEED_MODE); 250 def("enqueue_DWELL", &enqueue_DWELL); 251 def("enqueue_MIST_ON", &enqueue_MIST_ON); 252 def("enqueue_MIST_OFF", &enqueue_MIST_OFF); 253 def("enqueue_FLOOD_ON", &enqueue_FLOOD_ON); 254 def("enqueue_FLOOD_OFF", &enqueue_FLOOD_OFF); 255 def("enqueue_START_SPINDLE_CLOCKWISE", &enqueue_START_SPINDLE_CLOCKWISE); 256 def("enqueue_START_SPINDLE_COUNTERCLOCKWISE", &enqueue_START_SPINDLE_COUNTERCLOCKWISE); 257 def("enqueue_STOP_SPINDLE_TURNING", &enqueue_STOP_SPINDLE_TURNING); 258 def("enqueue_SET_SPINDLE_MODE", &enqueue_SET_SPINDLE_MODE); 259 def("enqueue_SET_SPINDLE_SPEED", &enqueue_SET_SPINDLE_SPEED); 260 def("enqueue_COMMENT", &enqueue_COMMENT); 261 262 // these need a wrapping so _setup can be passed in - probably better as Interp methods 263 // def("enqueue_STRAIGHT_FEED", &enqueue_STRAIGHT_FEED); 264 // def("enqueue_STRAIGHT_TRAVERSE", &enqueue_STRAIGHT_TRAVERSE); 265 // def("enqueue_ARC_FEED", &enqueue_ARC_FEED); 266 // def("enqueue_M_USER_COMMAND ", &enqueue_M_USER_COMMAND); 267 // def("enqueue_START_CHANGE", & enqueue_START_CHANGE); 268 def("GET_EXTERNAL_OFFSET_APPLIED",&GET_EXTERNAL_OFFSET_APPLIED); 269 def("GET_EXTERNAL_OFFSETS",&GET_EXTERNAL_OFFSETS); 270 271 }