Merge pull request #1307 from wolfmanjm/upstreamedge
[clinton/Smoothieware.git] / src / libs / StepperMotor.cpp
index 236ce25..0638e59 100644 (file)
@@ -15,7 +15,9 @@
 
 StepperMotor::StepperMotor(Pin &step, Pin &dir, Pin &en) : step_pin(step), dir_pin(dir), en_pin(en)
 {
-    set_high_on_debug(en.port_number, en.pin);
+    if(en.connected()) {
+        set_high_on_debug(en.port_number, en.pin);
+    }
 
     steps_per_mm         = 1.0F;
     max_rate             = 50.0F;
@@ -23,12 +25,14 @@ StepperMotor::StepperMotor(Pin &step, Pin &dir, Pin &en) : step_pin(step), dir_p
     last_milestone_steps = 0;
     last_milestone_mm    = 0.0F;
     current_position_steps= 0;
-    enable(false);
     moving= false;
     acceleration= NAN;
     selected= true;
+    extruder= false;
 
-    this->set_direction(false);
+    enable(false);
+    unstep(); // initialize step pin
+    set_direction(false); // initialize dir pin
 
     this->register_for_event(ON_HALT);
     this->register_for_event(ON_ENABLE);
@@ -50,7 +54,15 @@ void StepperMotor::on_halt(void *argument)
 
 void StepperMotor::on_enable(void *argument)
 {
-    enable(argument != nullptr);
+    // argument is a uin32_t where bit0 is on or off, and bit 1:X, 2:Y, 3:Z, 4:A, 5:B, 6:C etc
+    // for now if bit0 is 1 we turn all on, if 0 we turn all off otherwise we turn selected axis off
+    uint32_t bm= (uint32_t)argument;
+    if(bm == 0x01) {
+        enable(true);
+
+    }else if(bm == 0 || ((bm&0x01) == 0 && ((bm&(0x02<<motor_id)) != 0)) ) {
+        enable(false);
+    }
 }
 
 void StepperMotor::change_steps_per_mm(float new_steps)