From 3ae3bf5d33cc3c6a3d250cc19a3de0b9e22fadae Mon Sep 17 00:00:00 2001
From: Scott Lahteine <github@thinkyhead.com>
Date: Tue, 9 Jul 2019 21:26:35 -0500
Subject: [PATCH] Get E2END from pins, fix Linux buffer

---
 Marlin/src/HAL/HAL_DUE/persistent_store_eeprom.cpp     | 2 +-
 Marlin/src/HAL/HAL_LINUX/include/Arduino.h             | 2 --
 Marlin/src/HAL/HAL_LINUX/persistent_store_impl.cpp     | 7 ++++---
 Marlin/src/HAL/HAL_STM32F1/persistent_store_sdcard.cpp | 2 +-
 Marlin/src/HAL/HAL_STM32F4/EEPROM_Emul/eeprom_emul.h   | 4 ++--
 Marlin/src/pins/pins_ARMED.h                           | 3 +--
 Marlin/src/pins/pins_BLACK_STM32F407VE.h               | 2 +-
 Marlin/src/pins/pins_GTM32_PRO_VB.h                    | 4 ++--
 Marlin/src/pins/pins_JGAURORA_A5S_A1.h                 | 8 ++++----
 Marlin/src/pins/pins_RADDS.h                           | 3 +--
 Marlin/src/pins/pins_RAMPS_LINUX.h                     | 2 ++
 Marlin/src/pins/pins_RUMBA32.h                         | 3 +--
 Marlin/src/pins/pins_STM32F4.h                         | 2 +-
 13 files changed, 21 insertions(+), 23 deletions(-)

diff --git a/Marlin/src/HAL/HAL_DUE/persistent_store_eeprom.cpp b/Marlin/src/HAL/HAL_DUE/persistent_store_eeprom.cpp
index 4814620b9e..b465fcfa75 100644
--- a/Marlin/src/HAL/HAL_DUE/persistent_store_eeprom.cpp
+++ b/Marlin/src/HAL/HAL_DUE/persistent_store_eeprom.cpp
@@ -29,7 +29,7 @@
 #include "../../inc/MarlinConfig.h"
 #include "../shared/persistent_store_api.h"
 
-#if NONE(I2C_EEPROM, SPI_EEPROM)
+#if !defined(E2END) && NONE(I2C_EEPROM, SPI_EEPROM)
   #define E2END 0xFFF // Default to Flash emulated EEPROM size (EepromEmulation_Due.cpp)
 #endif
 
diff --git a/Marlin/src/HAL/HAL_LINUX/include/Arduino.h b/Marlin/src/HAL/HAL_LINUX/include/Arduino.h
index f73a9c9161..0d29df466e 100644
--- a/Marlin/src/HAL/HAL_LINUX/include/Arduino.h
+++ b/Marlin/src/HAL/HAL_LINUX/include/Arduino.h
@@ -43,8 +43,6 @@
 #define FALLING      0x03
 #define RISING       0x04
 
-#define E2END 0xFFF // EEPROM end address
-
 typedef uint8_t byte;
 #define PROGMEM
 #define PSTR(v) (v)
diff --git a/Marlin/src/HAL/HAL_LINUX/persistent_store_impl.cpp b/Marlin/src/HAL/HAL_LINUX/persistent_store_impl.cpp
index aba664d9f9..7bf00c0610 100644
--- a/Marlin/src/HAL/HAL_LINUX/persistent_store_impl.cpp
+++ b/Marlin/src/HAL/HAL_LINUX/persistent_store_impl.cpp
@@ -29,7 +29,8 @@
 #include "../shared/persistent_store_api.h"
 #include <stdio.h>
 
-uint8_t buffer[E2END];
+#define LINUX_EEPROM_SIZE (E2END + 1)
+uint8_t buffer[LINUX_EEPROM_SIZE];
 char filename[] = "eeprom.dat";
 
 bool PersistentStore::access_start() {
@@ -40,8 +41,8 @@ bool PersistentStore::access_start() {
   fseek(eeprom_file, 0L, SEEK_END);
   std::size_t file_size = ftell(eeprom_file);
 
-  if (file_size < E2END) {
-    memset(buffer + file_size, eeprom_erase_value, E2END - file_size);
+  if (file_size < LINUX_EEPROM_SIZE) {
+    memset(buffer + file_size, eeprom_erase_value, LINUX_EEPROM_SIZE - file_size);
   }
   else {
     fseek(eeprom_file, 0L, SEEK_SET);
diff --git a/Marlin/src/HAL/HAL_STM32F1/persistent_store_sdcard.cpp b/Marlin/src/HAL/HAL_STM32F1/persistent_store_sdcard.cpp
index 3244093577..454dccfae3 100644
--- a/Marlin/src/HAL/HAL_STM32F1/persistent_store_sdcard.cpp
+++ b/Marlin/src/HAL/HAL_STM32F1/persistent_store_sdcard.cpp
@@ -33,7 +33,7 @@
 #include "../shared/persistent_store_api.h"
 
 #ifndef E2END
-  #define E2END 4095
+  #define E2END 0xFFF // 4KB
 #endif
 #define HAL_STM32F1_EEPROM_SIZE (E2END + 1)
 
diff --git a/Marlin/src/HAL/HAL_STM32F4/EEPROM_Emul/eeprom_emul.h b/Marlin/src/HAL/HAL_STM32F4/EEPROM_Emul/eeprom_emul.h
index fe0da6387b..835c94de90 100644
--- a/Marlin/src/HAL/HAL_STM32F4/EEPROM_Emul/eeprom_emul.h
+++ b/Marlin/src/HAL/HAL_STM32F4/EEPROM_Emul/eeprom_emul.h
@@ -71,11 +71,11 @@
 
 /* Pages 0 and 1 base and end addresses */
 #define PAGE0_BASE_ADDRESS    ((uint32_t)(EEPROM_START_ADDRESS + 0x0000))
-#define PAGE0_END_ADDRESS     ((uint32_t)(EEPROM_START_ADDRESS + (PAGE_SIZE - 1)))
+#define PAGE0_END_ADDRESS     ((uint32_t)(EEPROM_START_ADDRESS + PAGE_SIZE - 1))
 #define PAGE0_ID               FLASH_SECTOR_1
 
 #define PAGE1_BASE_ADDRESS    ((uint32_t)(EEPROM_START_ADDRESS + 0x4000))
-#define PAGE1_END_ADDRESS     ((uint32_t)(EEPROM_START_ADDRESS + (2 * PAGE_SIZE - 1)))
+#define PAGE1_END_ADDRESS     ((uint32_t)(EEPROM_START_ADDRESS + 2 * (PAGE_SIZE) - 1))
 #define PAGE1_ID               FLASH_SECTOR_2
 
 /* Used Flash pages for EEPROM emulation */
diff --git a/Marlin/src/pins/pins_ARMED.h b/Marlin/src/pins/pins_ARMED.h
index 5f2a5df047..099b48368d 100644
--- a/Marlin/src/pins/pins_ARMED.h
+++ b/Marlin/src/pins/pins_ARMED.h
@@ -32,8 +32,7 @@
 
 #define I2C_EEPROM
 
-#undef E2END
-#define E2END 0xFFF // EEPROM end address (4kB)
+#define E2END 0xFFF // 4KB
 
 #if HOTENDS > 2 || E_STEPPERS > 2
   #error "Arm'ed supports up to 2 hotends / E-steppers."
diff --git a/Marlin/src/pins/pins_BLACK_STM32F407VE.h b/Marlin/src/pins/pins_BLACK_STM32F407VE.h
index bcc6b56ce6..6f4ab56a6c 100644
--- a/Marlin/src/pins/pins_BLACK_STM32F407VE.h
+++ b/Marlin/src/pins/pins_BLACK_STM32F407VE.h
@@ -40,7 +40,7 @@
 #define DEFAULT_MACHINE_NAME "STM32F407VET6"
 
 //#define I2C_EEPROM
-//#define E2END 0x1FFF // EEPROM end address (8kB)
+//#define E2END 0x1FFF // 8KB
 #define SRAM_EEPROM_EMULATION
 
 #if HOTENDS > 2 || E_STEPPERS > 2
diff --git a/Marlin/src/pins/pins_GTM32_PRO_VB.h b/Marlin/src/pins/pins_GTM32_PRO_VB.h
index 4b195bf3d9..1a641ca3ba 100644
--- a/Marlin/src/pins/pins_GTM32_PRO_VB.h
+++ b/Marlin/src/pins/pins_GTM32_PRO_VB.h
@@ -53,7 +53,7 @@
 
 // Enable EEPROM Emulation for this board as it doesn't have EEPROM
 #define FLASH_EEPROM_EMULATION
-#define E2END 0xFFF // EEPROM end address (4kB)
+#define E2END 0xFFF // 4KB
 
 //
 // Limit Switches
@@ -224,7 +224,7 @@
 #endif
 
 #define SDSS               SS_PIN
- 
+
 //
 // ESP WiFi can be soldered to J9 connector which is wired to USART2.
 // Must define WIFISUPPORT in Configuration.h for the printer.
diff --git a/Marlin/src/pins/pins_JGAURORA_A5S_A1.h b/Marlin/src/pins/pins_JGAURORA_A5S_A1.h
index 4802bb1c0f..f68e8dc514 100644
--- a/Marlin/src/pins/pins_JGAURORA_A5S_A1.h
+++ b/Marlin/src/pins/pins_JGAURORA_A5S_A1.h
@@ -41,14 +41,14 @@
 
 //#define MCU_STM32F103ZE // not yet required
 
-// // I2C EEPROM with 64K of space - AT24C64
-// #define I2C_EEPROM
-// #define E2END 0x7FFF
+// #define I2C_EEPROM   // AT24C64
+// #define E2END 0x7FFF // 64KB
 
 // Enable EEPROM Emulation for this board
 
 //#define FLASH_EEPROM_EMULATION 1
-//#define E2END  0xFFF //((uint32)(EEPROM_START_ADDRESS + EEPROM_PAGE_SIZE + EEPROM_PAGE_SIZE)) // not 0xFFF
+//#define E2END 0xFFF // 4KB
+//#define E2END uint32(EEPROM_START_ADDRESS + (EEPROM_PAGE_SIZE * 2) - 1)
 //#define EEPROM_CHITCHAT
 //#define DEBUG_EEPROM_READWRITE
 
diff --git a/Marlin/src/pins/pins_RADDS.h b/Marlin/src/pins/pins_RADDS.h
index 66b06c2c43..52c6388268 100644
--- a/Marlin/src/pins/pins_RADDS.h
+++ b/Marlin/src/pins/pins_RADDS.h
@@ -201,9 +201,8 @@
   #define FIL_RUNOUT_PIN   39   // SERVO2_PIN
 #endif
 
-// I2C EEPROM with 8K of space
 #define I2C_EEPROM
-#define E2END 0x1FFF
+#define E2END 0x1FFF // 8KB
 
 //
 // LCD / Controller
diff --git a/Marlin/src/pins/pins_RAMPS_LINUX.h b/Marlin/src/pins/pins_RAMPS_LINUX.h
index 104f717d1e..3b0e5e2419 100644
--- a/Marlin/src/pins/pins_RAMPS_LINUX.h
+++ b/Marlin/src/pins/pins_RAMPS_LINUX.h
@@ -49,6 +49,8 @@
   #define BOARD_NAME "RAMPS 1.4"
 #endif
 
+#define E2END 0xFFF // 4KB
+
 #define IS_RAMPS_EFB
 
 //
diff --git a/Marlin/src/pins/pins_RUMBA32.h b/Marlin/src/pins/pins_RUMBA32.h
index 4a6f4795e7..4c5f4df39e 100644
--- a/Marlin/src/pins/pins_RUMBA32.h
+++ b/Marlin/src/pins/pins_RUMBA32.h
@@ -30,8 +30,7 @@
 #define DEFAULT_MACHINE_NAME BOARD_NAME
 
 //#define I2C_EEPROM
-
-#define E2END 0xFFF // EEPROM end address (4kB)
+#define E2END 0xFFF // 4KB
 
 #if HOTENDS > 3 || E_STEPPERS > 3
   #error "RUMBA32 supports up to 3 hotends / E-steppers."
diff --git a/Marlin/src/pins/pins_STM32F4.h b/Marlin/src/pins/pins_STM32F4.h
index 53bfd3de2c..20f98454da 100644
--- a/Marlin/src/pins/pins_STM32F4.h
+++ b/Marlin/src/pins/pins_STM32F4.h
@@ -30,7 +30,7 @@
 
 //#define I2C_EEPROM
 
-#define E2END 0xFFF // EEPROM end address (4kB)
+#define E2END 0xFFF // 4KB
 
 // Ignore temp readings during develpment.
 //#define BOGUS_TEMPERATURE_FAILSAFE_OVERRIDE