/ src / emc / rs274ngc / canonmodule.cc
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  }