Extruder reports position on M114 too
authorMichael Moon <triffid.hunter@gmail.com>
Sun, 30 Dec 2012 12:48:10 +0000 (23:48 +1100)
committerMichael Moon <triffid.hunter@gmail.com>
Wed, 2 Jan 2013 00:50:20 +0000 (11:50 +1100)
src/modules/robot/Robot.cpp
src/modules/tools/extruder/Extruder.cpp
src/modules/tools/extruder/Extruder.h

index 21fdf18..a2348c1 100644 (file)
@@ -142,12 +142,13 @@ void Robot::execute_gcode(Gcode* gcode){
                 gcode->stream->printf("X:%g Y:%g Z:%g ", steps[0], steps[1], steps[2]);
                 gcode->add_nl = true;
                 return;
-            case 114: gcode->stream->printf("C: X:%1.3f Y:%1.3f Z:%1.3f\n",
+            case 114: gcode->stream->printf("C: X:%1.3f Y:%1.3f Z:%1.3f ",
                                                  this->current_position[0],
                                                  this->current_position[1],
                                                  this->current_position[2]);
-                   return;
-       }
+                gcode->add_nl = true;
+                return;
+        }
    }
     if( this->motion_mode < 0)
         return;
index 622aa78..5d08078 100644 (file)
@@ -16,8 +16,6 @@
 * or the head moves, and the extruder moves plastic at a speed proportional to the movement of the head ( FOLLOW mode here ).
 */
 
-// extruder_acceleration_checksum
-
 Extruder::Extruder() {
     this->absolute_mode = true;
     this->step_counter = 0;
@@ -39,6 +37,7 @@ void Extruder::on_module_loaded() {
     // We work on the same Block as Stepper, so we need to know when it gets a new one and drops one
     this->register_for_event(ON_BLOCK_BEGIN);
     this->register_for_event(ON_BLOCK_END);
+    this->register_for_event(ON_GCODE_RECEIVED);
     this->register_for_event(ON_GCODE_EXECUTE);
     this->register_for_event(ON_PLAY);
     this->register_for_event(ON_PAUSE);
@@ -90,7 +89,18 @@ void Extruder::on_play(void* argument){
     this->stepper_motor->unpause();
 }
 
-
+void Extruder::on_gcode_received(void *argument)
+{
+    Gcode *gcode = static_cast<Gcode*>(argument);
+    if (gcode->has_m)
+    {
+        if (gcode->m == 114)
+        {
+            gcode->stream->printf("E:%4.1f ", this->current_position);
+            gcode->add_nl = true;
+        }
+    }
+}
 
 // Compute extrusion speed based on parameters and gcode distance of travel
 void Extruder::on_gcode_execute(void* argument){
index 3261a1f..023a48c 100644 (file)
@@ -34,6 +34,7 @@ class Extruder : public Module{
         Extruder();
         void on_module_loaded();
         void on_config_reload(void* argument);
+        void on_gcode_received(void*);
         void on_gcode_execute(void* argument);
         void on_block_begin(void* argument);
         void on_block_end(void* argument);