#define SOLO 1
#define FOLLOW 2
-#define PI 3.14159265358979f
+#define PI 3.14159265358979F
#define max(a,b) (((a) > (b)) ? (a) : (b))
if(!pdr->starts_with(extruder_checksum)) return;
if(this->enabled) {
- static float return_data;
- return_data= this->steps_per_millimeter;
- pdr->set_data_ptr(&return_data);
+ // Note this is allowing both step/mm and filament diameter to be exposed via public data
+ pdr->set_data_ptr(&this->steps_per_millimeter_setting);
pdr->set_taken();
}
}
this->update_steps_per_millimeter();
}
gcode->mark_as_taken();
+
} else if (gcode->m == 500 || gcode->m == 503) { // M500 saves some volatile settings to config override file, M503 just prints the settings
if( this->single_config ) {
- gcode->stream->printf(";E Steps per mm:\nM92 E%1.4f\n", this->steps_per_millimeter);
+ gcode->stream->printf(";E Steps per mm:\nM92 E%1.4f\n", this->steps_per_millimeter_setting);
gcode->stream->printf(";E Filament diameter:\nM200 D%1.4f\n", this->filament_diameter);
} else {
- gcode->stream->printf(";E Steps per mm:\nM92 E%1.4f P%d\n", this->steps_per_millimeter, this->identifier);
+ gcode->stream->printf(";E Steps per mm:\nM92 E%1.4f P%d\n", this->steps_per_millimeter_setting, this->identifier);
gcode->stream->printf(";E Filament diameter:\nM200 D%1.4f P%d\n", this->filament_diameter, this->identifier);
}
gcode->mark_as_taken();
float current_position; // Current point ( in mm ) for the current move, incremented every time a move is executed
float unstepped_distance; // overflow buffer for requested moves that are less than 1 step
Block* current_block; // Current block we are stepping, same as Stepper's one
+
float steps_per_millimeter; // Steps to travel one millimeter
- float steps_per_millimeter_setting; // original steps to travel one millimeter as set in config, saved while in volumetric mode
- float filament_diameter; // filament diameter
+
+ // kept together so they can be passed as public data
+ struct {
+ float steps_per_millimeter_setting; // original steps to travel one millimeter as set in config, saved while in volumetric mode
+ float filament_diameter; // filament diameter
+ };
+
float feed_rate; //
float acceleration; //
float max_speed;
float travel_ratio;
float travel_distance;
- char mode; // extruder motion mode, OFF, SOLO, or FOLLOW
- bool absolute_mode; // absolute/relative coordinate mode switch
- bool paused;
- bool single_config;
+ char mode; // extruder motion mode, OFF, SOLO, or FOLLOW
+ struct {
+ bool absolute_mode:1; // absolute/relative coordinate mode switch
+ bool paused:1;
+ bool single_config:1;
+ };
StepperMotor* stepper_motor;
mvs->addMenuItem("E steps/mm",
// gets steps/mm for currently active extruder
- []() -> float { void *rd; THEKERNEL->public_data->get_value( extruder_checksum, &rd ); return rd==nullptr ? 0.0F : *((float*)rd); },
+ []() -> float { float *rd; if(THEKERNEL->public_data->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(THEKERNEL->public_data->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
+ );
+
mvs->addMenuItem("Z Home Ofs",
[]() -> float { void *rd; THEKERNEL->public_data->get_value( endstops_checksum, home_offset_checksum, &rd ); return rd==nullptr ? 0.0F : ((float*)rd)[2]; },
[this](float v) { send_gcode("M206", 'Z', v); },