-//A GCode has been received
-void Robot::on_gcode_received(void * argument){
- Gcode* gcode = static_cast<Gcode*>(argument);
- gcode->call_on_gcode_execute_event_immediatly = false;
- gcode->on_gcode_execute_event_called = false;
- //If the queue is empty, execute immediatly, otherwise attach to the last added block
- if( this->kernel->player->queue.size() == 0 ){
- gcode->call_on_gcode_execute_event_immediatly = true;
- this->execute_gcode(gcode);
- if( gcode->on_gcode_execute_event_called == false ){
- //printf("GCODE A: %s \r\n", gcode->command.c_str() );
- this->kernel->call_event(ON_GCODE_EXECUTE, gcode );
- }
- }else{
- Block* block = this->kernel->player->queue.get_ref( this->kernel->player->queue.size() - 1 );
- this->execute_gcode(gcode);
- block->append_gcode(gcode);
- gcode->queued++;
+void Robot::on_get_public_data(void* argument){
+ PublicDataRequest* pdr = static_cast<PublicDataRequest*>(argument);
+
+ if(!pdr->starts_with(robot_checksum)) return;
+
+ if(pdr->second_element_is(speed_override_percent_checksum)) {
+ static double return_data= 100*60/seconds_per_minute;
+ pdr->set_data_ptr(&return_data);
+ pdr->set_taken();
+
+ }else if(pdr->second_element_is(current_position_checksum)) {
+ static double return_data[3];
+ return_data[0]= from_millimeters(this->current_position[0]);
+ return_data[1]= from_millimeters(this->current_position[1]);
+ return_data[2]= from_millimeters(this->current_position[2]);
+
+ pdr->set_data_ptr(&return_data);
+ pdr->set_taken();