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 }
void tg_print_initializing_message(void) { cmd_add_token("fv"); cmd_add_token("fb"); cmd_add_string("msg", INIT_CONFIGURATION_MESSAGE); // see settings.h & sub-headers cmd_print_list(TG_INITIALIZING, TEXT_MULTILINE_FORMATTED); }
void tg_print_system_ready_message(void) { cmd_add_token("fv"); cmd_add_token("fb"); cmd_add_string("msg", "SYSTEM READY"); cmd_print_list(TG_OK, TEXT_MULTILINE_FORMATTED); }
void tg_print_loading_configs_message(void) { cmd_add_token("fv"); cmd_add_token("fb"); cmd_add_string("msg", "Loading configs from EEPROM"); cmd_print_list(TG_INITIALIZING, TEXT_MULTILINE_FORMATTED); }
void js_json_parser(char *str) { // cmd_reset_list(); // get a fresh cmdObj list uint8_t status = _json_parser_kernal(str); cmd_print_list(status, TEXT_NO_PRINT, JSON_RESPONSE_FORMAT); rpt_request_status_report(SR_IMMEDIATE_REQUEST); // generate incremental status report to show any changes }
stat_t rpt_status_report_callback() // called by controller dispatcher { if ((cfg.status_report_verbosity == SR_OFF) || (cm.status_report_request != SR_IMMEDIATE_REQUEST)) { return (STAT_NOOP); } if (cfg.status_report_verbosity == SR_FILTERED) { if (rpt_populate_filtered_status_report() == true) { cmd_print_list(STAT_OK, TEXT_INLINE_PAIRS, JSON_OBJECT_FORMAT); } } else { rpt_populate_unfiltered_status_report(); cmd_print_list(STAT_OK, TEXT_INLINE_PAIRS, JSON_OBJECT_FORMAT); } // cm.status_report_counter = (cfg.status_report_interval / RTC_PERIOD); // reset minimum interval cm.status_report_request = SR_NO_REQUEST; return (STAT_OK); }
/**************************************************************************** * cmd_text_parser() - update a config setting from a text block (text mode) * _text_parser() - helper for above * * Use cases handled: * - $xfr=1200 set a parameter * - $xfr display a parameter * - $x display a group * - ? generate a status report (multiline format) */ uint8_t cmd_text_parser(char *str) { // return (SC_OK); // There is no text parser in this code - just JSON //} cmdObj_t *cmd = cmd_reset_list(); // returns first object in the body uint8_t status = SC_OK; // single-unit parser processing ritorno(_text_parser(str, cmd)); // decode the request or return if error if ((cmd->type == TYPE_PARENT) || (cmd->type == TYPE_NULL)) { if (cmd_get(cmd) == SC_COMPLETE) { // populate value, group values, or run uber-group displays return (SC_OK); // return for uber-group displays so they don't print twice } } else { // process SET and RUN commands status = cmd_set(cmd); // set single value cmd_persist(cmd); } cmd_print_list(status, TEXT_MULTILINE_FORMATTED, JSON_RESPONSE_FORMAT); // print the results return (status); return (SC_OK); }
void tg_print_message(char *msg) { cmd_add_string("msg", msg); cmd_print_list(TG_OK, TEXT_INLINE_VALUES); }
/* * rpt_run_text_status_report() - generate a text mode status report in multiline format * rpt_request_status_report() - request a status report to run after minimum interval * rpt_force_status_report() - request a status report to run at the next main loop opporunity * rpt_status_report_rtc_callback() - real-time clock downcount for minimum reporting interval * rpt_status_report_callback() - main loop callback to send a report if one is ready * * Status reports can be request from a number of sources including: * - direct request from command line in the form of ? or {"sr:""} * - timed requests during machining cycle * - filtered request after each Gcode block * * Status reports are generally returned with minimal delay (from the controller callback), * but will not be provided more frequently than the status report interval */ void rpt_run_text_status_report() { rpt_populate_unfiltered_status_report(); cmd_print_list(STAT_OK, TEXT_MULTILINE_FORMATTED, JSON_RESPONSE_FORMAT); }