Merge remote-tracking branch 'upstream/edge' into upstream-master
[clinton/Smoothieware.git] / src / modules / utils / panel / screens / ExtruderScreen.cpp
index de299fe..5b5cf58 100644 (file)
@@ -25,7 +25,6 @@ using namespace std;
 
 ExtruderScreen::ExtruderScreen()
 {
-    this->command= nullptr;
 }
 
 void ExtruderScreen::on_enter()
@@ -59,26 +58,34 @@ void ExtruderScreen::clicked_menu_entry(uint16_t line)
 {
     switch ( line ) {
         case 0: THEPANEL->enter_screen(this->parent); return;
-        case 1: command = "G91\nG1 E5 F100\nG90"; break;
-        case 2: command = "G91\nG1 E-5 F100\nG90"; break;
-        case 3: setupConfigSettings(); // lazy load
-                break;
+        case 1: send_command("M120\nG91\nG1 E5 F100\nM121"); break;
+        case 2: send_command("M120\nG91\nG1 E-5 F100\nM121"); break;
+        case 3: setupConfigSettings(); break; // lazy load
     }
 }
 
-// queuing commands needs to be done from main loop
-void ExtruderScreen::on_main_loop()
-{
-    if (this->command == nullptr) return;
-    send_command(this->command);
-    this->command= nullptr;
-}
-
 void ExtruderScreen::setupConfigSettings()
 {
     auto mvs= new ModifyValuesScreen(true);  // self delete on exit
     mvs->set_parent(this);
 
+    mvs->addMenuItem("E steps/mm",
+        // gets steps/mm for currently active extruder
+        []() -> float { float *rd; if(PublicData::get_value( extruder_checksum, (void **)&rd )) return *rd; else return 0.0F; },
+        [this](float v) { send_gcode("M92", 'E', v); },
+        0.1F,
+        1.0F
+        );
+
+    mvs->addMenuItem("Filament diameter",
+        // gets filament diameter for currently active extruder
+        []() -> float { float *rd; if(PublicData::get_value( extruder_checksum, (void **)&rd )) return *(rd+1); else return 0.0F; },
+        [this](float v) { send_gcode("M200", 'D', v); },
+        0.01F,
+        0.0F,
+        4.0F
+        );
+
     // flow rate
     mvs->addMenuItem("Flow rate", // menu name
         []() -> float { float *rd; if(PublicData::get_value( extruder_checksum, (void **)&rd )) return *(rd+2)*100.0F; else return 100.0F; }, // getter as fraction