|  | @@ -18,69 +18,16 @@
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  M500_conf cs;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -//! @brief Write data to EEPROM
 | 
	
		
			
				|  |  | -//! @param pos destination in EEPROM, 0 is start
 | 
	
		
			
				|  |  | -//! @param value value to be written
 | 
	
		
			
				|  |  | -//! @param size size of type pointed by value
 | 
	
		
			
				|  |  | -//! @param name name of variable written, used only for debug input if DEBUG_EEPROM_WRITE defined
 | 
	
		
			
				|  |  | -//! @retval true success
 | 
	
		
			
				|  |  | -//! @retval false failed
 | 
	
		
			
				|  |  | -#ifdef DEBUG_EEPROM_WRITE
 | 
	
		
			
				|  |  | -static bool EEPROM_writeData(uint8_t* pos, uint8_t* value, uint8_t size, const char* name)
 | 
	
		
			
				|  |  | -#else //DEBUG_EEPROM_WRITE
 | 
	
		
			
				|  |  | -static bool EEPROM_writeData(uint8_t* pos, uint8_t* value, uint8_t size, const char*)
 | 
	
		
			
				|  |  | -#endif //DEBUG_EEPROM_WRITE
 | 
	
		
			
				|  |  | -{
 | 
	
		
			
				|  |  | -#ifdef DEBUG_EEPROM_WRITE
 | 
	
		
			
				|  |  | -	printf_P(PSTR("EEPROM_WRITE_VAR addr=0x%04x size=0x%02x name=%s\n"), pos, size, name);
 | 
	
		
			
				|  |  | -#endif //DEBUG_EEPROM_WRITE
 | 
	
		
			
				|  |  | -  while (size--)
 | 
	
		
			
				|  |  | -  {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        eeprom_update_byte(pos, *value);
 | 
	
		
			
				|  |  | -        if (eeprom_read_byte(pos) != *value) {
 | 
	
		
			
				|  |  | -            SERIAL_ECHOLNPGM("EEPROM Error");
 | 
	
		
			
				|  |  | -            return false;
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    pos++;
 | 
	
		
			
				|  |  | -    value++;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -    return true;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -#ifdef DEBUG_EEPROM_READ
 | 
	
		
			
				|  |  | -static void EEPROM_readData(uint8_t* pos, uint8_t* value, uint8_t size, const char* name)
 | 
	
		
			
				|  |  | -#else //DEBUG_EEPROM_READ
 | 
	
		
			
				|  |  | -static void EEPROM_readData(uint8_t* pos, uint8_t* value, uint8_t size, const char*)
 | 
	
		
			
				|  |  | -#endif //DEBUG_EEPROM_READ
 | 
	
		
			
				|  |  | -{
 | 
	
		
			
				|  |  | -#ifdef DEBUG_EEPROM_READ
 | 
	
		
			
				|  |  | -	printf_P(PSTR("EEPROM_READ_VAR addr=0x%04x size=0x%02x name=%s\n"), pos, size, name);
 | 
	
		
			
				|  |  | -#endif //DEBUG_EEPROM_READ
 | 
	
		
			
				|  |  | -    while(size--)
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        *value = eeprom_read_byte(pos);
 | 
	
		
			
				|  |  | -        pos++;
 | 
	
		
			
				|  |  | -        value++;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  #define EEPROM_VERSION "V2"
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #ifdef EEPROM_SETTINGS
 | 
	
		
			
				|  |  |  void Config_StoreSettings()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -  strcpy(cs.version,"000"); //!< invalidate data first @TODO use erase to save one erase cycle
 | 
	
		
			
				|  |  | -  
 | 
	
		
			
				|  |  | -  if (EEPROM_writeData(reinterpret_cast<uint8_t*>(EEPROM_M500_base),reinterpret_cast<uint8_t*>(&cs),sizeof(cs),0), "cs, invalid version")
 | 
	
		
			
				|  |  | -  {
 | 
	
		
			
				|  |  | +  strcpy(cs.version, EEPROM_VERSION);
 | 
	
		
			
				|  |  | +  eeprom_update_block(reinterpret_cast<uint8_t*>(&cs), reinterpret_cast<uint8_t*>(EEPROM_M500_base), sizeof(cs));
 | 
	
		
			
				|  |  |  #ifdef TEMP_MODEL
 | 
	
		
			
				|  |  | -      temp_model_save_settings();
 | 
	
		
			
				|  |  | +  temp_model_save_settings();
 | 
	
		
			
				|  |  |  #endif
 | 
	
		
			
				|  |  | -      strcpy(cs.version,EEPROM_VERSION); //!< validate data if write succeed
 | 
	
		
			
				|  |  | -      EEPROM_writeData(reinterpret_cast<uint8_t*>(EEPROM_M500_base->version), reinterpret_cast<uint8_t*>(cs.version), sizeof(cs.version), "cs.version valid");
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    SERIAL_ECHO_START;
 | 
	
		
			
				|  |  |    SERIAL_ECHOLNPGM("Settings Stored");
 | 
	
	
		
			
				|  | @@ -269,12 +216,11 @@ bool Config_RetrieveSettings()
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |    bool previous_settings_retrieved = true;
 | 
	
		
			
				|  |  |      char ver[4]=EEPROM_VERSION;
 | 
	
		
			
				|  |  | -    EEPROM_readData(reinterpret_cast<uint8_t*>(EEPROM_M500_base->version), reinterpret_cast<uint8_t*>(cs.version), sizeof(cs.version), "cs.version"); //read stored version
 | 
	
		
			
				|  |  | +    eeprom_read_block(reinterpret_cast<uint8_t*>(cs.version), reinterpret_cast<uint8_t*>(EEPROM_M500_base->version), sizeof(cs.version));
 | 
	
		
			
				|  |  |      //  SERIAL_ECHOLN("Version: [" << ver << "] Stored version: [" << cs.version << "]");
 | 
	
		
			
				|  |  |      if (strncmp(ver,cs.version,3) == 0)  // version number match
 | 
	
		
			
				|  |  |      {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        EEPROM_readData(reinterpret_cast<uint8_t*>(EEPROM_M500_base), reinterpret_cast<uint8_t*>(&cs), sizeof(cs), "cs");
 | 
	
		
			
				|  |  | +        eeprom_read_block(reinterpret_cast<uint8_t*>(&cs), reinterpret_cast<uint8_t*>(EEPROM_M500_base), sizeof(cs));
 | 
	
		
			
				|  |  |          calculate_extruder_multipliers();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      //if max_feedrate_silent and max_acceleration_units_per_sq_second_silent were never stored to eeprom, use default values:
 |