#include "EndstopsPublicAccess.h"
#include "Configurator.h"
#include "SimpleShell.h"
+#include "TemperatureControlPublicAccess.h"
+
+#ifndef NO_TOOLS_LASER
+#include "Laser.h"
+#endif
#include "platform_memory.h"
#include <array>
#include <string>
+#define laser_checksum CHECKSUM("laser")
#define baud_rate_setting_checksum CHECKSUM("baud_rate")
#define uart0_checksum CHECKSUM("uart0")
str.append("<");
if(halted) {
- str.append("Alarm,");
+ str.append("Alarm");
} else if(homing) {
running = true;
- str.append("Home,");
+ str.append("Home");
} else if(feed_hold) {
- str.append("Hold,");
+ str.append("Hold");
} else if(this->conveyor->is_idle()) {
- str.append("Idle,");
+ str.append("Idle");
} else {
running = true;
- str.append("Run,");
+ str.append("Run");
}
if(running) {
char buf[128];
// machine position
- size_t n = snprintf(buf, sizeof(buf), "%1.4f,%1.4f,%1.4f,", robot->from_millimeters(mpos[0]), robot->from_millimeters(mpos[1]), robot->from_millimeters(mpos[2]));
- str.append("MPos:").append(buf, n);
+ size_t n = snprintf(buf, sizeof(buf), "%1.4f,%1.4f,%1.4f", robot->from_millimeters(mpos[0]), robot->from_millimeters(mpos[1]), robot->from_millimeters(mpos[2]));
+ if(n > sizeof(buf)) n= sizeof(buf);
+
+ str.append("|MPos:").append(buf, n);
#if MAX_ROBOT_ACTUATORS > 3
// deal with the ABC axis (E will be A)
for (int i = A_AXIS; i < robot->get_number_registered_motors(); ++i) {
// current actuator position
- n = snprintf(buf, sizeof(buf), "%1.4f,", robot->from_millimeters(robot->actuators[i]->get_current_position()));
+ n = snprintf(buf, sizeof(buf), ",%1.4f", robot->from_millimeters(robot->actuators[i]->get_current_position()));
+ if(n > sizeof(buf)) n= sizeof(buf);
str.append(buf, n);
}
#endif
// work space position
Robot::wcs_t pos = robot->mcs2wcs(mpos);
n = snprintf(buf, sizeof(buf), "%1.4f,%1.4f,%1.4f", robot->from_millimeters(std::get<X_AXIS>(pos)), robot->from_millimeters(std::get<Y_AXIS>(pos)), robot->from_millimeters(std::get<Z_AXIS>(pos)));
- str.append("WPos:").append(buf, n);
- str.append(">\r\n");
+ if(n > sizeof(buf)) n= sizeof(buf);
+
+ str.append("|WPos:").append(buf, n);
+ // current feedrate
+ float fr= robot->from_millimeters(conveyor->get_current_feedrate()*60.0F);
+ n = snprintf(buf, sizeof(buf), "|F:%1.4f", fr);
+ if(n > sizeof(buf)) n= sizeof(buf);
+ str.append(buf, n);
+ float sr= robot->get_s_value();
+ n = snprintf(buf, sizeof(buf), "|S:%1.4f", sr);
+ if(n > sizeof(buf)) n= sizeof(buf);
+ str.append(buf, n);
+
+ // current Laser power
+ #ifndef NO_TOOLS_LASER
+ Laser *plaser= nullptr;
+ if(PublicData::get_value(laser_checksum, (void *)&plaser) && plaser != nullptr) {
+ float lp= plaser->get_current_power();
+ n = snprintf(buf, sizeof(buf), "|L:%1.4f", lp);
+ if(n > sizeof(buf)) n= sizeof(buf);
+ str.append(buf, n);
+ }
+ #endif
} else {
// return the last milestone if idle
char buf[128];
// machine position
Robot::wcs_t mpos = robot->get_axis_position();
- size_t n = snprintf(buf, sizeof(buf), "%1.4f,%1.4f,%1.4f,", robot->from_millimeters(std::get<X_AXIS>(mpos)), robot->from_millimeters(std::get<Y_AXIS>(mpos)), robot->from_millimeters(std::get<Z_AXIS>(mpos)));
- str.append("MPos:").append(buf, n);
+ size_t n = snprintf(buf, sizeof(buf), "%1.4f,%1.4f,%1.4f", robot->from_millimeters(std::get<X_AXIS>(mpos)), robot->from_millimeters(std::get<Y_AXIS>(mpos)), robot->from_millimeters(std::get<Z_AXIS>(mpos)));
+ if(n > sizeof(buf)) n= sizeof(buf);
+
+ str.append("|MPos:").append(buf, n);
+
#if MAX_ROBOT_ACTUATORS > 3
// deal with the ABC axis (E will be A)
for (int i = A_AXIS; i < robot->get_number_registered_motors(); ++i) {
// current actuator position
- n = snprintf(buf, sizeof(buf), "%1.4f,", robot->from_millimeters(robot->actuators[i]->get_current_position()));
+ n = snprintf(buf, sizeof(buf), ",%1.4f", robot->from_millimeters(robot->actuators[i]->get_current_position()));
+ if(n > sizeof(buf)) n= sizeof(buf);
str.append(buf, n);
}
#endif
// work space position
Robot::wcs_t pos = robot->mcs2wcs(mpos);
n = snprintf(buf, sizeof(buf), "%1.4f,%1.4f,%1.4f", robot->from_millimeters(std::get<X_AXIS>(pos)), robot->from_millimeters(std::get<Y_AXIS>(pos)), robot->from_millimeters(std::get<Z_AXIS>(pos)));
- str.append("WPos:").append(buf, n);
- str.append(">\r\n");
+ if(n > sizeof(buf)) n= sizeof(buf);
+ str.append("|WPos:").append(buf, n);
+ float fr= robot->from_millimeters(robot->get_feed_rate());
+ n = snprintf(buf, sizeof(buf), "|F:%1.4f", fr);
+ if(n > sizeof(buf)) n= sizeof(buf);
+ str.append(buf, n);
}
+
+ // if not grbl mode get temperatures
+ if(!is_grbl_mode()) {
+ struct pad_temperature temp;
+ // scan all temperature controls
+ std::vector<struct pad_temperature> controllers;
+ bool ok = PublicData::get_value(temperature_control_checksum, poll_controls_checksum, &controllers);
+ if (ok) {
+ char buf[32];
+ for (auto &c : controllers) {
+ size_t n= snprintf(buf, sizeof(buf), "|%s:%1.1f,%1.1f", c.designator.c_str(), c.current_temperature, c.target_temperature);
+ if(n > sizeof(buf)) n= sizeof(buf);
+ str.append(buf, n);
+ }
+ }
+ }
+
+ str.append(">\n");
return str;
}
bool was_idle = true;
if(id_event == ON_HALT) {
this->halted = (argument == nullptr);
+ if(!this->halted && this->feed_hold) this->feed_hold= false; // also clear feed hold
was_idle = conveyor->is_idle(); // see if we were doing anything like printing
}