X-Git-Url: https://git.hcoop.net/clinton/Smoothieware.git/blobdiff_plain/c2f7c261c2c077f8e7af91b02c43dd48835a4d1f..HEAD:/src/modules/tools/toolmanager/ToolManager.cpp diff --git a/src/modules/tools/toolmanager/ToolManager.cpp b/src/modules/tools/toolmanager/ToolManager.cpp index 229e4f5e..72e4985d 100644 --- a/src/modules/tools/toolmanager/ToolManager.cpp +++ b/src/modules/tools/toolmanager/ToolManager.cpp @@ -7,9 +7,6 @@ #include "libs/Module.h" #include "libs/Kernel.h" -#include -using namespace std; -#include #include "ToolManager.h" #include "Tool.h" #include "PublicDataRequest.h" @@ -26,6 +23,8 @@ using namespace std; #include "libs/StreamOutput.h" #include "FileStream.h" +#include + ToolManager::ToolManager() { active_tool = 0; @@ -44,8 +43,11 @@ void ToolManager::on_gcode_received(void *argument) { Gcode *gcode = static_cast(argument); - if( gcode->has_letter('T') ) { + if( gcode->has_letter('T') && !gcode->has_m) { int new_tool = gcode->get_value('T'); + char buff[32]; // should be big enough for any status + int n = snprintf(buff, sizeof(buff), "T%d,T%d switching ", this->active_tool, new_tool); + gcode->txt_after_ok.append(buff, n); if(new_tool >= (int)this->tools.size() || new_tool < 0) { // invalid tool char buf[32]; // should be big enough for any status @@ -55,15 +57,15 @@ void ToolManager::on_gcode_received(void *argument) } else { if(new_tool != this->active_tool) { // We must wait for an empty queue before we can disable the current extruder - THEKERNEL->conveyor->wait_for_empty_queue(); - this->tools[active_tool]->disable(); + THEKERNEL->conveyor->wait_for_idle(); + this->tools[active_tool]->deselect(); this->active_tool = new_tool; this->current_tool_name = this->tools[active_tool]->get_name(); - this->tools[active_tool]->enable(); + this->tools[active_tool]->select(); //send new_tool_offsets to robot const float *new_tool_offset = tools[new_tool]->get_offset(); - THEKERNEL->robot->setToolOffset(new_tool_offset); + THEROBOT->setToolOffset(new_tool_offset); } } } @@ -74,23 +76,29 @@ void ToolManager::on_get_public_data(void* argument) PublicDataRequest* pdr = static_cast(argument); if(!pdr->starts_with(tool_manager_checksum)) return; - if(!pdr->second_element_is(is_active_tool_checksum)) return; - - // check that we control the given tool - bool managed = false; - for(auto t : tools) { - uint16_t n = t->get_name(); - if(pdr->third_element_is(n)) { - managed = true; - break; + + if(pdr->second_element_is(is_active_tool_checksum)) { + + // check that we control the given tool + bool managed = false; + for(auto t : tools) { + uint16_t n = t->get_name(); + if(pdr->third_element_is(n)) { + managed = true; + break; + } } - } - // we are not managing this tool so do not answer - if(!managed) return; + // we are not managing this tool so do not answer + if(!managed) return; - pdr->set_data_ptr(&this->current_tool_name); - pdr->set_taken(); + pdr->set_data_ptr(&this->current_tool_name); + pdr->set_taken(); + + }else if(pdr->second_element_is(get_active_tool_checksum)) { + pdr->set_data_ptr(&this->active_tool); + pdr->set_taken(); + } } void ToolManager::on_set_public_data(void* argument) @@ -109,13 +117,13 @@ void ToolManager::on_set_public_data(void* argument) void ToolManager::add_tool(Tool* tool_to_add) { if(this->tools.size() == 0) { - tool_to_add->enable(); + tool_to_add->select(); this->current_tool_name = tool_to_add->get_name(); //send new_tool_offsets to robot const float *new_tool_offset = tool_to_add->get_offset(); - THEKERNEL->robot->setToolOffset(new_tool_offset); + THEROBOT->setToolOffset(new_tool_offset); } else { - tool_to_add->disable(); + tool_to_add->deselect(); } this->tools.push_back( tool_to_add ); }