+static void *
+avr_run_thread(
+ void * ignore)
+{
+ while (1) {
+ avr_run(avr);
+ }
+ return NULL;
+}
+
+void
+reprap_init(
+ avr_t * avr,
+ reprap_p r)
+{
+ r->avr = avr;
+ uart_pty_init(avr, &r->uart_pty);
+ uart_pty_connect(&r->uart_pty, '0');
+
+ thermistor_init(avr, &r->therm_hotend, 0,
+ (short*)TERMISTOR_TABLE(TEMP_SENSOR_0),
+ sizeof(TERMISTOR_TABLE(TEMP_SENSOR_0)) / sizeof(short) / 2,
+ OVERSAMPLENR, 25.0f);
+ thermistor_init(avr, &r->therm_hotbed, 2,
+ (short*)TERMISTOR_TABLE(TEMP_SENSOR_BED),
+ sizeof(TERMISTOR_TABLE(TEMP_SENSOR_BED)) / sizeof(short) / 2,
+ OVERSAMPLENR, 30.0f);
+ thermistor_init(avr, &r->therm_spare, 1,
+ (short*)temptable_5, sizeof(temptable_5) / sizeof(short) / 2,
+ OVERSAMPLENR, 10.0f);
+
+ heatpot_init(avr, &r->hotend, "hotend", 28.0f);
+ heatpot_init(avr, &r->hotbed, "hotbed", 25.0f);
+
+ /* connect heatpot temp output to thermistors */
+ avr_connect_irq(r->hotend.irq + IRQ_HEATPOT_TEMP_OUT,
+ r->therm_hotend.irq + IRQ_TERM_TEMP_VALUE_IN);
+ avr_connect_irq(r->hotbed.irq + IRQ_HEATPOT_TEMP_OUT,
+ r->therm_hotbed.irq + IRQ_TERM_TEMP_VALUE_IN);
+
+ float axis_pp_per_mm[4] = DEFAULT_AXIS_STEPS_PER_UNIT; // from Marlin!
+ {
+ avr_irq_t * e = get_ardu_irq(avr, X_ENABLE_PIN, arduidiot_644);
+ avr_irq_t * s = get_ardu_irq(avr, X_STEP_PIN, arduidiot_644);
+ avr_irq_t * d = get_ardu_irq(avr, X_DIR_PIN, arduidiot_644);
+ avr_irq_t * m = get_ardu_irq(avr, X_MIN_PIN, arduidiot_644);
+
+ stepper_init(avr, &r->step_x, "X", axis_pp_per_mm[0], 100, 220, 0);
+ stepper_connect(&r->step_x, s, d, e, m, stepper_endstop_inverted);
+ }
+ {
+ avr_irq_t * e = get_ardu_irq(avr, Y_ENABLE_PIN, arduidiot_644);
+ avr_irq_t * s = get_ardu_irq(avr, Y_STEP_PIN, arduidiot_644);
+ avr_irq_t * d = get_ardu_irq(avr, Y_DIR_PIN, arduidiot_644);
+ avr_irq_t * m = get_ardu_irq(avr, Y_MIN_PIN, arduidiot_644);
+
+ stepper_init(avr, &r->step_y, "Y", axis_pp_per_mm[1], 100, 220, 0);
+ stepper_connect(&r->step_y, s, d, e, m, stepper_endstop_inverted);
+ }
+ {
+ avr_irq_t * e = get_ardu_irq(avr, Z_ENABLE_PIN, arduidiot_644);
+ avr_irq_t * s = get_ardu_irq(avr, Z_STEP_PIN, arduidiot_644);
+ avr_irq_t * d = get_ardu_irq(avr, Z_DIR_PIN, arduidiot_644);
+ avr_irq_t * m = get_ardu_irq(avr, Z_MIN_PIN, arduidiot_644);
+
+ stepper_init(avr, &r->step_z, "Z", axis_pp_per_mm[2], 20, 110, 0);
+ stepper_connect(&r->step_z, s, d, e, m, stepper_endstop_inverted);
+ }
+ {
+ avr_irq_t * e = get_ardu_irq(avr, E0_ENABLE_PIN, arduidiot_644);
+ avr_irq_t * s = get_ardu_irq(avr, E0_STEP_PIN, arduidiot_644);
+ avr_irq_t * d = get_ardu_irq(avr, E0_DIR_PIN, arduidiot_644);
+
+ stepper_init(avr, &r->step_e, "E", axis_pp_per_mm[3], 0, 0, 0);
+ stepper_connect(&r->step_e, s, d, e, NULL, 0);
+ }
+
+}