diff options
Diffstat (limited to 'Sprinter/Sprinter.h')
-rw-r--r-- | Sprinter/Sprinter.h | 134 |
1 files changed, 89 insertions, 45 deletions
diff --git a/Sprinter/Sprinter.h b/Sprinter/Sprinter.h index 2ac9163..9873843 100644 --- a/Sprinter/Sprinter.h +++ b/Sprinter/Sprinter.h @@ -1,53 +1,18 @@ // Tonokip RepRap firmware rewrite based off of Hydra-mmm firmware. // Licence: GPL -#include <WProgram.h> -#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 setup_acceleration(); - -void manage_heater(); - -#if defined HEATER_USES_THERMISTOR -#define temp2analogh( c ) temp2analog_thermistor(c,temptable,NUMTEMPS) -#define analog2temp( c ) analog2temp_thermistor(c,temptable,NUMTEMPS) -#elif defined HEATER_USES_AD595 -#define temp2analogh( c ) temp2analog_ad595(c) -#define analog2temp( c ) analog2temp_ad595(c) -#elif defined HEATER_USES_MAX6675 -#define temp2analogh( c ) temp2analog_max6675(c) -#define analog2temp( c ) analog2temp_max6675(c) -#endif -#if defined BED_USES_THERMISTOR -#define temp2analogBed( c ) temp2analog_thermistor((c),bedtemptable,BNUMTEMPS) -#define analog2tempBed( c ) analog2temp_thermistor((c),bedtemptable,BNUMTEMPS) -#elif defined BED_USES_AD595 -#define temp2analogBed( c ) temp2analog_ad595(c) -#define analog2tempBed( c ) analog2temp_ad595(c) -#elif defined BED_USES_MAX6675 -#define temp2analogBed( c ) temp2analog_max6675(c) -#define analog2tempBed( c ) analog2temp_max6675(c) +//Check Version of Arduino and then include the right libraries +#if defined(ARDUINO) && ARDUINO >= 100 + #include "Arduino.h" +#else + #include <WProgram.h> #endif -#if defined (HEATER_USES_THERMISTOR) || defined (BED_USES_THERMISTOR) -int temp2analog_thermistor(int celsius, const short table[][2], int numtemps); -int analog2temp_thermistor(int raw,const short table[][2], int numtemps); -#endif +#include "fastio.h" -#if defined (HEATER_USES_AD595) || defined (BED_USES_AD595) -int temp2analog_ad595(int celsius); -int analog2temp_ad595(int raw); -#endif +extern "C" void __cxa_pure_virtual(); -#if defined (HEATER_USES_MAX6675) || defined (BED_USES_MAX6675) -int temp2analog_max6675(int celsius); -int analog2temp_max6675(int raw); -#endif +#define FORCE_INLINE __attribute__((always_inline)) inline #if X_ENABLE_PIN > -1 #define enable_x() WRITE(X_ENABLE_PIN, X_ENABLE_ON) @@ -78,12 +43,91 @@ int analog2temp_max6675(int raw); #define disable_e() ; #endif +#define X_AXIS 0 +#define Y_AXIS 1 +#define Z_AXIS 2 +#define E_AXIS 3 + + +// 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 + + unsigned long step_event_count; // The number of step events required to complete this block + long accelerate_until; // The index of the step event on which to stop acceleration + long decelerate_after; // The index of the step event on which to start decelerating + 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) + + #ifdef ADVANCE + long advance_rate; + volatile long initial_advance; + volatile long final_advance; + float advance; + #endif + + // 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 entry_speed; // Entry speed at previous-current junction in mm/min + float max_entry_speed; // Maximum allowable junction entry speed in mm/min + float millimeters; // The total travel of this block in mm + float acceleration; // acceleration mm/sec^2 + unsigned char recalculate_flag; // Planner flag to recalculate trapezoids on entry junction + unsigned char nominal_length_flag; // Planner flag for nominal speed always reached + + + // Settings for the trapezoid generator + long nominal_rate; // The nominal step rate for this block in step_events/sec + long initial_rate; // The jerk-adjusted step rate at start of block + long final_rate; // The minimal rate at exit + long acceleration_st; // acceleration steps/sec^2 + volatile char busy; +} block_t; + + void FlushSerialRequestResend(); void ClearToSend(); +void showString (PGM_P s); + +void manage_inactivity(byte debug); + +void get_command(); void get_coordinates(); void prepare_move(); -void linear_move(unsigned long steps_remaining[]); -void do_step(int axis); +void prepare_arc_move(char isclockwise); +FORCE_INLINE void process_commands(); +#ifdef USE_ARC_FUNCTION + FORCE_INLINE void get_arc_coordinates(); +#endif + void kill(byte debug); +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(); +void st_set_position(const long &x, const long &y, const long &z, const long &e); + +void check_buffer_while_arc(); + +#ifdef SDSUPPORT +void print_disk_info(void); +#endif //SDSUPPORT + +#ifdef DEBUG +void log_message(char* message); +void log_bool(char* message, bool value); +void log_int(char* message, int value); +void log_long(char* message, long value); +void log_float(char* message, float value); +void log_uint(char* message, unsigned int value); +void log_ulong(char* message, unsigned long value); +#endif |