Repetier-Firmware  0.91
src/ArduinoAVR/Repetier/Eeprom.h
Go to the documentation of this file.
00001 /*
00002     This file is part of Repetier-Firmware.
00003 
00004     Repetier-Firmware is free software: you can redistribute it and/or modify
00005     it under the terms of the GNU General Public License as published by
00006     the Free Software Foundation, either version 3 of the License, or
00007     (at your option) any later version.
00008 
00009     Repetier-Firmware is distributed in the hope that it will be useful,
00010     but WITHOUT ANY WARRANTY; without even the implied warranty of
00011     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012     GNU General Public License for more details.
00013 
00014     You should have received a copy of the GNU General Public License
00015     along with Repetier-Firmware.  If not, see <http://www.gnu.org/licenses/>.
00016 
00017 */
00018 
00019 #ifndef _EEPROM_H
00020 #define _EEPROM_H
00021 
00022 // Id to distinguish version changes
00023 #define EEPROM_PROTOCOL_VERSION 6
00024 
00029 #define EPR_MAGIC_BYTE              0
00030 #define EPR_ACCELERATION_TYPE       1
00031 #define EPR_XAXIS_STEPS_PER_MM      3
00032 #define EPR_YAXIS_STEPS_PER_MM      7
00033 #define EPR_ZAXIS_STEPS_PER_MM     11
00034 #define EPR_X_MAX_FEEDRATE         15
00035 #define EPR_Y_MAX_FEEDRATE         19
00036 #define EPR_Z_MAX_FEEDRATE         23
00037 #define EPR_X_HOMING_FEEDRATE      27
00038 #define EPR_Y_HOMING_FEEDRATE      31
00039 #define EPR_Z_HOMING_FEEDRATE      35
00040 #define EPR_MAX_JERK               39
00041 //#define EPR_OPS_MIN_DISTANCE       43
00042 #define EPR_MAX_ZJERK              47
00043 #define EPR_X_MAX_ACCEL            51
00044 #define EPR_Y_MAX_ACCEL            55
00045 #define EPR_Z_MAX_ACCEL            59
00046 #define EPR_X_MAX_TRAVEL_ACCEL     63
00047 #define EPR_Y_MAX_TRAVEL_ACCEL     67
00048 #define EPR_Z_MAX_TRAVEL_ACCEL     71
00049 #define EPR_BAUDRATE               75
00050 #define EPR_MAX_INACTIVE_TIME      79
00051 #define EPR_STEPPER_INACTIVE_TIME  83
00052 //#define EPR_OPS_RETRACT_DISTANCE   87
00053 //#define EPR_OPS_RETRACT_BACKLASH   91
00054 #define EPR_EXTRUDER_SPEED         95
00055 //#define EPR_OPS_MOVE_AFTER         99
00056 //#define EPR_OPS_MODE              103
00057 #define EPR_INTEGRITY_BYTE        104   // Here the xored sum over eeprom is stored
00058 #define EPR_VERSION               105   // Version id for updates in EEPROM storage
00059 #define EPR_BED_HEAT_MANAGER      106
00060 #define EPR_BED_DRIVE_MAX         107
00061 #define EPR_BED_PID_PGAIN         108
00062 #define EPR_BED_PID_IGAIN         112
00063 #define EPR_BED_PID_DGAIN         116
00064 #define EPR_BED_PID_MAX           120
00065 #define EPR_BED_DRIVE_MIN         124
00066 #define EPR_PRINTING_TIME         125  // Time in seconds printing
00067 #define EPR_PRINTING_DISTANCE     129  // Filament length printed
00068 #define EPR_X_HOME_OFFSET         133
00069 #define EPR_Y_HOME_OFFSET         137
00070 #define EPR_Z_HOME_OFFSET         141
00071 #define EPR_X_LENGTH              145
00072 #define EPR_Y_LENGTH              149
00073 #define EPR_Z_LENGTH              153
00074 #define EPR_BACKLASH_X            157
00075 #define EPR_BACKLASH_Y            161
00076 #define EPR_BACKLASH_Z            165
00077 
00078 #define EPR_Z_PROBE_X_OFFSET      800
00079 #define EPR_Z_PROBE_Y_OFFSET      804
00080 #define EPR_Z_PROBE_HEIGHT        808
00081 #define EPR_Z_PROBE_SPEED         812
00082 #define EPR_Z_PROBE_X1            816
00083 #define EPR_Z_PROBE_Y1            820
00084 #define EPR_Z_PROBE_X2            824
00085 #define EPR_Z_PROBE_Y2            828
00086 #define EPR_Z_PROBE_X3            832
00087 #define EPR_Z_PROBE_Y3            836
00088 #define EPR_Z_PROBE_XY_SPEED      840
00089 #define EPR_AUTOLEVEL_MATRIX      844
00090 #define EPR_AUTOLEVEL_ACTIVE      880
00091 #define EPR_DELTA_DIAGONAL_ROD_LENGTH 881
00092 #define EPR_DELTA_HORIZONTAL_RADIUS 885
00093 #define EPR_DELTA_SEGMENTS_PER_SECOND_PRINT 889
00094 #define EPR_DELTA_SEGMENTS_PER_SECOND_MOVE 891
00095 #define EPR_DELTA_TOWERX_OFFSET_STEPS 893
00096 #define EPR_DELTA_TOWERY_OFFSET_STEPS 895
00097 #define EPR_DELTA_TOWERZ_OFFSET_STEPS 897
00098 #define EPR_DELTA_ALPHA_A         901
00099 #define EPR_DELTA_ALPHA_B         905
00100 #define EPR_DELTA_ALPHA_C         909
00101 #define EPR_DELTA_RADIUS_CORR_A   913
00102 #define EPR_DELTA_RADIUS_CORR_B   917
00103 #define EPR_DELTA_RADIUS_CORR_C   921
00104 
00105 #define EEPROM_EXTRUDER_OFFSET 200
00106 // bytes per extruder needed, leave some space for future development
00107 #define EEPROM_EXTRUDER_LENGTH 100
00108 // Extruder positions relative to extruder start
00109 #define EPR_EXTRUDER_STEPS_PER_MM        0
00110 #define EPR_EXTRUDER_MAX_FEEDRATE        4
00111 // Feedrate from halted extruder in mm/s
00112 #define EPR_EXTRUDER_MAX_START_FEEDRATE  8
00113 // Acceleration in mm/s^2
00114 #define EPR_EXTRUDER_MAX_ACCELERATION   12
00115 #define EPR_EXTRUDER_HEAT_MANAGER       16
00116 #define EPR_EXTRUDER_DRIVE_MAX          17
00117 #define EPR_EXTRUDER_PID_PGAIN          18
00118 #define EPR_EXTRUDER_PID_IGAIN          22
00119 #define EPR_EXTRUDER_PID_DGAIN          26
00120 #define EPR_EXTRUDER_PID_MAX            30
00121 #define EPR_EXTRUDER_X_OFFSET           31
00122 #define EPR_EXTRUDER_Y_OFFSET           35
00123 #define EPR_EXTRUDER_WATCH_PERIOD       39
00124 #define EPR_EXTRUDER_ADVANCE_K          41
00125 #define EPR_EXTRUDER_DRIVE_MIN          45
00126 #define EPR_EXTRUDER_ADVANCE_L          46
00127 #define EPR_EXTRUDER_WAIT_RETRACT_TEMP 50
00128 #define EPR_EXTRUDER_WAIT_RETRACT_UNITS 52
00129 #define EPR_EXTRUDER_COOLER_SPEED       54
00130 
00131 class EEPROM
00132 {
00133 #if EEPROM_MODE!=0
00134     static uint8_t computeChecksum();
00135     static void writeExtruderPrefix(uint pos);
00136     static void writeFloat(uint pos,PGM_P text,uint8_t digits=3);
00137     static void writeLong(uint pos,PGM_P text);
00138     static void writeInt(uint pos,PGM_P text);
00139     static void writeByte(uint pos,PGM_P text);
00140 #endif
00141 public:
00142 
00143     static void init();
00144     static void initBaudrate();
00145     static void storeDataIntoEEPROM(uint8_t corrupted=0);
00146     static void readDataFromEEPROM();
00147     static void restoreEEPROMSettingsFromConfiguration();
00148     static void writeSettings();
00149     static void update(GCode *com);
00150     static void updatePrinterUsage();
00151 
00152     static inline float zProbeSpeed() {
00153 #if EEPROM_MODE!=0
00154         return HAL::eprGetFloat(EPR_Z_PROBE_SPEED);
00155 #else
00156         return Z_PROBE_SPEED;
00157 #endif
00158     }
00159     static inline float zProbeXYSpeed() {
00160 #if EEPROM_MODE!=0
00161         return HAL::eprGetFloat(EPR_Z_PROBE_XY_SPEED);
00162 #else
00163         return Z_PROBE_XY_SPEED;
00164 #endif
00165     }
00166     static inline float zProbeXOffset() {
00167 #if EEPROM_MODE!=0
00168         return HAL::eprGetFloat(EPR_Z_PROBE_X_OFFSET);
00169 #else
00170         return Z_PROBE_X_OFFSET;
00171 #endif
00172     }
00173     static inline float zProbeYOffset() {
00174 #if EEPROM_MODE!=0
00175         return HAL::eprGetFloat(EPR_Z_PROBE_Y_OFFSET);
00176 #else
00177         return Z_PROBE_Y_OFFSET;
00178 #endif
00179     }
00180     static inline float zProbeHeight() {
00181 #if EEPROM_MODE!=0
00182         return HAL::eprGetFloat(EPR_Z_PROBE_HEIGHT);
00183 #else
00184         return Z_PROBE_HEIGHT;
00185 #endif
00186     }
00187     static inline float zProbeX1() {
00188 #if EEPROM_MODE!=0
00189         return HAL::eprGetFloat(EPR_Z_PROBE_X1);
00190 #else
00191         return Z_PROBE_X1;
00192 #endif
00193     }
00194     static inline float zProbeY1() {
00195 #if EEPROM_MODE!=0
00196         return HAL::eprGetFloat(EPR_Z_PROBE_Y1);
00197 #else
00198         return Z_PROBE_Y1;
00199 #endif
00200     }
00201     static inline float zProbeX2() {
00202 #if EEPROM_MODE!=0
00203         return HAL::eprGetFloat(EPR_Z_PROBE_X2);
00204 #else
00205         return Z_PROBE_X2;
00206 #endif
00207     }
00208     static inline float zProbeY2() {
00209 #if EEPROM_MODE!=0
00210         return HAL::eprGetFloat(EPR_Z_PROBE_Y2);
00211 #else
00212         return Z_PROBE_Y2;
00213 #endif
00214     }
00215     static inline float zProbeX3() {
00216 #if EEPROM_MODE!=0
00217         return HAL::eprGetFloat(EPR_Z_PROBE_X3);
00218 #else
00219         return Z_PROBE_X3;
00220 #endif
00221     }
00222     static inline float zProbeY3() {
00223 #if EEPROM_MODE!=0
00224         return HAL::eprGetFloat(EPR_Z_PROBE_Y3);
00225 #else
00226         return Z_PROBE_Y3;
00227 #endif
00228     }
00229 #if NONLINEAR_SYSTEM
00230     static inline int16_t deltaSegmentsPerSecondMove() {
00231 #if EEPROM_MODE!=0
00232         return HAL::eprGetInt16(EPR_DELTA_SEGMENTS_PER_SECOND_MOVE);
00233 #else
00234         return DELTA_SEGMENTS_PER_SECOND_MOVE;
00235 #endif
00236     }
00237     static inline float deltaDiagonalRodLength() {
00238 #if EEPROM_MODE!=0
00239         return HAL::eprGetFloat(EPR_DELTA_DIAGONAL_ROD_LENGTH);
00240 #else
00241         return DELTA_DIAGONAL_ROD;
00242 #endif
00243     }
00244     static inline int16_t deltaSegmentsPerSecondPrint() {
00245 #if EEPROM_MODE!=0
00246         return HAL::eprGetInt16(EPR_DELTA_SEGMENTS_PER_SECOND_PRINT);
00247 #else
00248         return DELTA_SEGMENTS_PER_SECOND_PRINT;
00249 #endif
00250     }
00251 #endif
00252 #if DRIVE_SYSTEM==3
00253     static inline float deltaHorizontalRadius() {
00254 #if EEPROM_MODE!=0
00255         return HAL::eprGetFloat(EPR_DELTA_HORIZONTAL_RADIUS);
00256 #else
00257         return DELTA_RADIUS;
00258 #endif
00259     }
00260     static inline int16_t deltaTowerXOffsetSteps() {
00261 #if EEPROM_MODE!=0
00262         return HAL::eprGetInt16(EPR_DELTA_TOWERX_OFFSET_STEPS);
00263 #else
00264         return DELTA_X_ENDSTOP_OFFSET_STEPS;
00265 #endif
00266     }
00267     static inline int16_t deltaTowerYOffsetSteps() {
00268 #if EEPROM_MODE!=0
00269         return HAL::eprGetInt16(EPR_DELTA_TOWERY_OFFSET_STEPS);
00270 #else
00271         return DELTA_Y_ENDSTOP_OFFSET_STEPS;
00272 #endif
00273     }
00274     static inline int16_t deltaTowerZOffsetSteps() {
00275 #if EEPROM_MODE!=0
00276         return HAL::eprGetInt16(EPR_DELTA_TOWERZ_OFFSET_STEPS);
00277 #else
00278         return DELTA_Z_ENDSTOP_OFFSET_STEPS;
00279 #endif
00280     }
00281     static inline void setDeltaTowerXOffsetSteps(int16_t steps) {
00282 #if EEPROM_MODE!=0
00283         HAL::eprSetInt16(EPR_DELTA_TOWERX_OFFSET_STEPS,steps);
00284         uint8_t newcheck = computeChecksum();
00285         if(newcheck!=HAL::eprGetByte(EPR_INTEGRITY_BYTE))
00286             HAL::eprSetByte(EPR_INTEGRITY_BYTE,newcheck);
00287 #endif
00288     }
00289     static inline void setDeltaTowerYOffsetSteps(int16_t steps) {
00290 #if EEPROM_MODE!=0
00291         HAL::eprSetInt16(EPR_DELTA_TOWERY_OFFSET_STEPS,steps);
00292         uint8_t newcheck = computeChecksum();
00293         if(newcheck!=HAL::eprGetByte(EPR_INTEGRITY_BYTE))
00294             HAL::eprSetByte(EPR_INTEGRITY_BYTE,newcheck);
00295 #endif
00296     }
00297     static inline void setDeltaTowerZOffsetSteps(int16_t steps) {
00298 #if EEPROM_MODE!=0
00299         HAL::eprSetInt16(EPR_DELTA_TOWERZ_OFFSET_STEPS,steps);
00300         uint8_t newcheck = computeChecksum();
00301         if(newcheck!=HAL::eprGetByte(EPR_INTEGRITY_BYTE))
00302             HAL::eprSetByte(EPR_INTEGRITY_BYTE,newcheck);
00303 #endif
00304     }
00305     static inline float deltaAlphaA() {
00306 #if EEPROM_MODE!=0
00307         return HAL::eprGetFloat(EPR_DELTA_ALPHA_A);
00308 #else
00309         return DELTA_ALPHA_A;
00310 #endif
00311     }
00312     static inline float deltaAlphaB() {
00313 #if EEPROM_MODE!=0
00314         return HAL::eprGetFloat(EPR_DELTA_ALPHA_B);
00315 #else
00316         return DELTA_ALPHA_B;
00317 #endif
00318     }
00319     static inline float deltaAlphaC() {
00320 #if EEPROM_MODE!=0
00321         return HAL::eprGetFloat(EPR_DELTA_ALPHA_C);
00322 #else
00323         return DELTA_ALPHA_C;
00324 #endif
00325     }
00326     static inline float deltaRadiusCorrectionA() {
00327 #if EEPROM_MODE!=0
00328         return HAL::eprGetFloat(EPR_DELTA_RADIUS_CORR_A);
00329 #else
00330         return DELTA_RADIUS_CORRECTION_A;
00331 #endif
00332     }
00333     static inline float deltaRadiusCorrectionB() {
00334 #if EEPROM_MODE!=0
00335         return HAL::eprGetFloat(EPR_DELTA_RADIUS_CORR_B);
00336 #else
00337         return DELTA_RADIUS_CORRECTION_B;
00338 #endif
00339     }
00340     static inline float deltaRadiusCorrectionC() {
00341 #if EEPROM_MODE!=0
00342         return HAL::eprGetFloat(EPR_DELTA_RADIUS_CORR_C);
00343 #else
00344         return DELTA_RADIUS_CORRECTION_C;
00345 #endif
00346     }
00347 #endif
00348     static void initalizeUncached();
00349 };
00350 #endif
 All Data Structures Namespaces Files Functions Variables Typedefs Friends Defines