// Tonokip RepRap firmware rewrite based off of Hydra-mmm firmware. // Licence: GPL #include #include "fastio.h" extern "C" void __cxa_pure_virtual(); void __cxa_pure_virtual(){}; void get_command(); void process_commands(); void manage_inactivity(byte debug); void manage_heater(); int temp2analogu(int celsius, const short table[][2], int numtemps); float analog2tempu(int raw, const short table[][2], int numtemps); #ifdef HEATER_USES_THERMISTOR #define HEATERSOURCE 1 #endif #ifdef BED_USES_THERMISTOR #define BEDSOURCE 1 #endif #define temp2analogh( c ) temp2analogu((c),temptable,NUMTEMPS) #define analog2temp( c ) analog2tempu((c),temptable,NUMTEMPS) #if X_ENABLE_PIN > -1 #define enable_x() WRITE(X_ENABLE_PIN, X_ENABLE_ON) #define disable_x() WRITE(X_ENABLE_PIN,!X_ENABLE_ON) #else #define enable_x() ; #define disable_x() ; #endif #if Y_ENABLE_PIN > -1 #define enable_y() WRITE(Y_ENABLE_PIN, Y_ENABLE_ON) #define disable_y() WRITE(Y_ENABLE_PIN,!Y_ENABLE_ON) #else #define enable_y() ; #define disable_y() ; #endif #if Z_ENABLE_PIN > -1 #define enable_z() WRITE(Z_ENABLE_PIN, Z_ENABLE_ON) #define disable_z() WRITE(Z_ENABLE_PIN,!Z_ENABLE_ON) #else #define enable_z() ; #define disable_z() ; #endif #if E_ENABLE_PIN > -1 #define enable_e() WRITE(E_ENABLE_PIN, E_ENABLE_ON) #define disable_e() WRITE(E_ENABLE_PIN,!E_ENABLE_ON) #else #define enable_e() ; #define disable_e() ; #endif #define X_AXIS 0 #define Y_AXIS 1 #define Z_AXIS 2 #define E_AXIS 3 void FlushSerialRequestResend(); void ClearToSend(); void get_coordinates(); void prepare_move(); void linear_move(unsigned long steps_remaining[]); void do_step(int axis); void kill(byte debug); // This struct is used when buffering the setup for each linear movement "nominal" values are as specified in // the source g-code and may never actually be reached if acceleration management is active. typedef struct { // Fields used by the bresenham algorithm for tracing the line long steps_x, steps_y, steps_z, steps_e; // Step count along each axis long step_event_count; // The number of step events required to complete this block volatile long accelerate_until; // The index of the step event on which to stop acceleration volatile long decelerate_after; // The index of the step event on which to start decelerating volatile long acceleration_rate; // The acceleration rate used for acceleration calculation unsigned char direction_bits; // The direction bit set for this block (refers to *_DIRECTION_BIT in config.h) long advance_rate; volatile long initial_advance; volatile long final_advance; float advance; // Fields used by the motion planner to manage acceleration float speed_x, speed_y, speed_z, speed_e; // Nominal mm/minute for each axis float nominal_speed; // The nominal speed for this block in mm/min float millimeters; // The total travel of this block in mm float entry_speed; float acceleration; // acceleration mm/sec^2 // Settings for the trapezoid generator long nominal_rate; // The nominal step rate for this block in step_events/sec volatile long initial_rate; // The jerk-adjusted step rate at start of block volatile long final_rate; // The minimal rate at exit long acceleration_st; // acceleration steps/sec^2 volatile char busy; } block_t; void check_axes_activity(); void plan_init(); void st_init(); void tp_init(); void plan_buffer_line(float x, float y, float z, float e, float feed_rate); void plan_set_position(float x, float y, float z, float e); void st_wake_up(); void st_synchronize();