void sim_main(void) { sim_start(); if (insn_sample_first[sample_OFF] && !sim_sample_off(insn_sample_first[sample_OFF])) return; if (insn_sample_first[sample_WARM] && !sim_sample_warmup(insn_sample_first[sample_WARM])) return; if (insn_sample_first[sample_ON] && !sim_sample_on(insn_sample_first[sample_ON])) return; if (insn_sample[sample_OFF] || insn_sample[sample_WARM] || insn_sample[sample_ON]) { for (;;) { if (insn_sample[sample_OFF] && !sim_sample_off(insn_sample[sample_OFF])) return; if (insn_sample[sample_WARM] && !sim_sample_warmup(insn_sample[sample_WARM])) return; if (insn_sample[sample_ON] && !sim_sample_on(insn_sample[sample_ON])) return; } } /* simulate whatever is left */ sim_sample_on(0); }
int main (int argc, char** argv) { sim_start(argc, argv); #else int main (void) { #endif init(); // main loop for (;;) { // if queue is full, no point in reading chars- host will just have to wait if (queue_full() == 0) { if (serial_rxchars() != 0) { uint8_t c = serial_popchar(); gcode_parse_char(c); } #ifdef CANNED_CYCLE /** WARNING! This code works on a per-character basis. Any data received over serial WILL be randomly distributed through the canned gcode, and you'll have a big mess! The solution is to either store gcode parser state with each source, or only parse a line at a time. This will take extra ram, and may be out of scope for the Teacup project. If ever print-from-SD card is implemented, these changes may become necessary. */ static uint32_t canned_gcode_pos = 0; gcode_parse_char(pgm_read_byte(&(canned_gcode_P[canned_gcode_pos]))); canned_gcode_pos++; if (pgm_read_byte(&(canned_gcode_P[canned_gcode_pos])) == 0) canned_gcode_pos = 0; #endif /* CANNED_CYCLE */ } clock(); } }