static stat_t _homing_error_exit(int8_t axis) { // Generate the warning message. Since the error exit returns via the homing callback // - and not the main controller - it requires its own display processing cmd_reset_list(); if (axis == -2) { cmd_add_conditional_message((const char_t *)"*** WARNING *** Homing error: Specified axis(es) cannot be homed");; } else { char message[CMD_MESSAGE_LEN]; sprintf_P(message, PSTR("*** WARNING *** Homing error: %c axis settings misconfigured"), cm_get_axis_char(axis)); cmd_add_conditional_message((char_t *)message); } cmd_print_list(STAT_HOMING_CYCLE_FAILED, TEXT_INLINE_VALUES, JSON_RESPONSE_FORMAT); // clean up and exit mp_flush_planner(); // should be stopped, but in case of switch closure // don't use cm_request_queue_flush() here cm_set_coord_system(hm.saved_coord_system); // restore to work coordinate system cm_set_units_mode(hm.saved_units_mode); cm_set_distance_mode(hm.saved_distance_mode); cm_set_feed_rate(hm.saved_feed_rate); cm_set_motion_mode(MODEL, MOTION_MODE_CANCEL_MOTION_MODE); cm.cycle_state = CYCLE_OFF; cm_cycle_end(); return (STAT_HOMING_CYCLE_FAILED); // homing state remains HOMING_NOT_HOMED }
static stat_t _homing_axis_move(int8_t axis, float target, float velocity) { float vect[] = {0,0,0,0,0,0}; float flags[] = {false, false, false, false, false, false}; vect[axis] = target; flags[axis] = true; cm_set_feed_rate(velocity); mp_flush_planner(); // don't use cm_request_queue_flush() here cm_request_cycle_start(); ritorno(cm_straight_feed(vect, flags)); return (STAT_EAGAIN); }
static stat_t _homing_finalize_exit(int8_t axis) // third part of return to home { mp_flush_planner(); // should be stopped, but in case of switch closure. // don't use cm_request_queue_flush() here cm_set_coord_system(hm.saved_coord_system); // restore to work coordinate system cm_set_units_mode(hm.saved_units_mode); cm_set_distance_mode(hm.saved_distance_mode); cm_set_feed_rate(hm.saved_feed_rate); cm_set_motion_mode(MODEL, MOTION_MODE_CANCEL_MOTION_MODE); cm.cycle_state = CYCLE_OFF; // required cm_cycle_end(); return (STAT_OK); }
static stat_t _homing_finalize_exit(int8_t axis) // third part of return to home { mp_flush_planner(); // should be stopped, but in case of switch closure. // don't use cm_request_queue_flush() here cm_set_coord_system(hm.saved_coord_system); // restore to work coordinate system cm_set_units_mode(hm.saved_units_mode); cm_set_distance_mode(hm.saved_distance_mode); cm_set_feed_rate(hm.saved_feed_rate); cm_set_motion_mode(MODEL, MOTION_MODE_CANCEL_MOTION_MODE); cm.homing_state = HOMING_HOMED; cm.cycle_state = CYCLE_OFF; // required cm_cycle_end(); //+++++ DIAGNOSTIC +++++ // printf("Homed: posX: %6.3f, posY: %6.3f\n", (double)gm.position[AXIS_X], (double)gm.target[AXIS_Y]); return (STAT_OK); }
static void _probe_restore_settings() { mp_flush_planner(); // if (cm.hold_state == FEEDHOLD_HOLD); // cm_end_hold(); cm_end_hold(); // ends hold if on is in effect gpio_set_probing_mode(pb.probe_input, false); // restore axis jerk for (uint8_t axis=0; axis<AXES; axis++) { cm.a[axis].jerk_max = pb.saved_jerk[axis]; } // restore coordinate system and distance mode cm_set_coord_system(pb.saved_coord_system); cm_set_distance_mode(pb.saved_distance_mode); // update the model with actual position cm_set_motion_mode(MODEL, MOTION_MODE_CANCEL_MOTION_MODE); cm_canned_cycle_end(); }