Teacup_Firmware/config_wrapper.h

150 lines
4.6 KiB
C

/**
Some stuff common to all config.h files. Put it here to allow files like
board.*.config.h or printer.*.h to be moved to about everywhere in the
file system. Else we'd have to enforce the Configtool user to put these
files where we need them.
*/
#include "arduino.h"
#ifndef DEFINE_HEATER_ACTUAL
#define DEFINE_HEATER_ACTUAL(...)
#endif
// Heater definition helpers. This collection of macros turns any DEFINE_HEATER(...) macro
// expansion into a DEFINE_HEATER_ACTUAL(a,b,c,d), i.e. a macro with four arguments. Currently
// we expand 3 to 6 arguments, but we ignore the 6th arg in this code. This allows
// us to use this "old" code with some "newer" configs which come at us from the future, so long
// as the newer configs add parameters at the end of the list rather than in the middle.
// From http://stackoverflow.com/questions/11761703/overloading-macro-on-number-of-arguments
#define GET_MACRO(_1, _2, _3, _4, _5, _6, NAME, ...) NAME
#define DEFINE_HEATER(...) GET_MACRO(__VA_ARGS__, DHTR_6, DHTR_5, DHTR_4, DHTR_3)(__VA_ARGS__)
#define DHTR_3(name, pin, pwm) DEFINE_HEATER_ACTUAL(name, pin, 0, pwm, 100)
#define DHTR_4(name, pin, invert, pwm) DEFINE_HEATER_ACTUAL(name, pin, invert, pwm, 100)
#define DHTR_5(name, pin, invert, pwm, max_pwm) DEFINE_HEATER_ACTUAL(name, pin, invert, pwm, max_pwm)
#define DHTR_6(name, pin, invert, pwm, max_pwm, arg6) DEFINE_HEATER_ACTUAL(name, pin, invert, pwm, max_pwm)
/**
This wrapper config header is used to allow makefiles and test scripts to
replace or augment the user's 'config.h' file in a controlled manner. A
makefile may add CFLAGS+=-DUSER_CONFIG=alternate_config.h to cause Teacup
to build with a different config header.
*/
#ifndef USER_CONFIG
#define USER_CONFIG "config.h"
#endif
#include USER_CONFIG
#include "simulator.h"
/**
Give users a hint in case they obviously forgot to read instructions.
*/
#ifndef STEPS_PER_M_X
#error config.h missing. Please follow instructions at \
reprap.org/wiki/Teacup_Firmware#Simple_Installation
#endif
/**
Additional tests to protect against misconfiguration.
*/
#ifdef USB_SERIAL
#undef BAUD
#endif
/**
Check wether we need SPI.
*/
#if (defined SD_CARD_SELECT_PIN || defined TEMP_MAX6675 || \
defined TEMP_MC3008) && ! defined SIMULATOR
#define SPI
#endif
/**
Check wether we need I2C.
*/
#ifdef DISPLAY_BUS_I2C
#define I2C
#endif
/**
ACCELERATION_TEMPORAL doesn't support lookahead, yet.
*/
#if defined ACCELERATION_TEMPORAL && defined LOOKAHEAD
#warning Acceleration temporal doesnt support lookahead, yet. \
Lookahead disabled.
#undef LOOKAHEAD
#endif
/**
For ACCELERATION_REPRAP or no acceleration at all, lookahead makes no sense.
Explicitely disable it to deal with misconfigurations.
*/
#if ! defined ACCELERATION_RAMPING && ! defined ACCELERATION_TEMPORAL
#undef LOOKAHEAD
#endif
/**
LOOKAHEAD won't work if Z-jerk is zero and bed leveling is active
because most moves will have Z-steps and lookahead will be skipped.
*/
#if defined BED_LEVELING && defined LOOKAHEAD && MAX_JERK_Z==0
#warning When bed-leveling is activated, lookahead will be ineffective \
because MAX_JERK_Z is zero.
#endif
/**
Silently discard EECONFIG on ARM. Silently to not disturb regression tests.
TODO:
- EECONFIG is currently misplaced as a printer property. Move EECONFIG to
the board configuration or drop it entirely in favour of PID settings in
Configtool.
- Remove this silent discard in favour of the #error in heater-arm.c.
*/
#if defined __ARMEL__ && defined EECONFIG
#undef EECONFIG
#endif
/**
Silently discard BANG_BANG on ARM. Silently to not disturb regression tests.
TODO:
- BANG_BANG is currently misplaced as a printer property. Move BANG_BANG to
the board configuration.
- Remove this silent discard in favour of the #error in heater-arm.c.
*/
#if defined __ARMEL__ && defined BANG_BANG
#undef BANG_BANG
#endif
/**
* TEMP_EWMA changed from float 0.0 - 1.0 to integer 1000
* Some people could accidentally change the 1.0 to 1 which will have effect
* in very slow temperature readings. Let's force any value <= 1.0 to 1000
* and give them a warning.
*/
#if TEMP_EWMA < 2
#undef TEMP_EWMA
#define TEMP_EWMA 1000
#warning TEMP_EWMA scaling changed! Take a look in your printer.xxx.h.
#endif
/**
* With GCC major >= 5 we can calculate constant sqrt expressions
* lower versions, e.g. in the Arduino IDE, need for this a
* __builtin_ function.
*
* "warning: initializer element is not a constant expression"
*
* Someone may extend this later also for sin/cos.
*/
#if (__GNUC__ <= 4)
#define sqrt __builtin_sqrt
#endif