|
|
@ -1,9 +1,10 @@
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Marlin 3D Printer Firmware
|
|
|
|
* Marlin 3D Printer Firmware
|
|
|
|
* Copyright (C) 2016, 2017 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
|
|
|
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* Based on Sprinter and grbl.
|
|
|
|
* Copyright (C) 2016 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
|
|
|
* Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm
|
|
|
|
* Copyright (c) 2016 Bob Cousins bobcousins42@googlemail.com
|
|
|
|
|
|
|
|
* Copyright (c) 2015-2016 Nico Tonnhofer wurstnase.reprap@gmail.com
|
|
|
|
|
|
|
|
* Copyright (c) 2016 Victor Perez victor_pv@hotmail.com
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* This program is free software: you can redistribute it and/or modify
|
|
|
|
* This program is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
@ -98,8 +99,8 @@ bool PersistentStore::access_finish() {
|
|
|
|
// FR_INVALID_PARAMETER /* (19) Given parameter is invalid */
|
|
|
|
// FR_INVALID_PARAMETER /* (19) Given parameter is invalid */
|
|
|
|
// } FRESULT;
|
|
|
|
// } FRESULT;
|
|
|
|
|
|
|
|
|
|
|
|
bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) {
|
|
|
|
bool PersistentStore::write_data(int &pos, const uint8_t *value, const size_t size, uint16_t *crc) {
|
|
|
|
if(!eeprom_file_open) return true;
|
|
|
|
if (!eeprom_file_open) return true;
|
|
|
|
FRESULT s;
|
|
|
|
FRESULT s;
|
|
|
|
UINT bytes_written = 0;
|
|
|
|
UINT bytes_written = 0;
|
|
|
|
|
|
|
|
|
|
|
@ -113,7 +114,7 @@ bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, ui
|
|
|
|
return s;
|
|
|
|
return s;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
s = f_write(&eeprom_file, (void *)value, size, &bytes_written);
|
|
|
|
s = f_write(&eeprom_file, (void*)value, size, &bytes_written);
|
|
|
|
if (s) {
|
|
|
|
if (s) {
|
|
|
|
SERIAL_PROTOCOLPAIR(" write_data(", pos); // This extra chit-chat goes away soon. But it is helpful
|
|
|
|
SERIAL_PROTOCOLPAIR(" write_data(", pos); // This extra chit-chat goes away soon. But it is helpful
|
|
|
|
SERIAL_PROTOCOLPAIR(",", (int)value); // right now to see errors that are happening in the
|
|
|
|
SERIAL_PROTOCOLPAIR(",", (int)value); // right now to see errors that are happening in the
|
|
|
@ -129,57 +130,51 @@ bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, ui
|
|
|
|
return (bytes_written != size); // return true for any error
|
|
|
|
return (bytes_written != size); // return true for any error
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool PersistentStore::read_data(int &pos, uint8_t* value, size_t size, uint16_t *crc, const bool writing/*=true*/) {
|
|
|
|
bool PersistentStore::read_data(int &pos, uint8_t* value, const size_t size, uint16_t *crc, const bool writing/*=true*/) {
|
|
|
|
if(!eeprom_file_open) return true;
|
|
|
|
if (!eeprom_file_open) return true;
|
|
|
|
UINT bytes_read = 0;
|
|
|
|
UINT bytes_read = 0;
|
|
|
|
FRESULT s;
|
|
|
|
FRESULT s;
|
|
|
|
s = f_lseek(&eeprom_file, pos);
|
|
|
|
s = f_lseek(&eeprom_file, pos);
|
|
|
|
|
|
|
|
|
|
|
|
if (s) {
|
|
|
|
if (s) {
|
|
|
|
SERIAL_PROTOCOLPAIR(" read_data(", pos); // This extra chit-chat goes away soon. But it is helpful
|
|
|
|
SERIAL_PROTOCOLPAIR(" read_data(", pos); // This extra chit-chat goes away soon. But it is helpful
|
|
|
|
SERIAL_PROTOCOLPAIR(",", (int)value); // right now to see errors that are happening in the
|
|
|
|
SERIAL_PROTOCOLCHAR(',');
|
|
|
|
SERIAL_PROTOCOLPAIR(",", size); // read_data() and write_data() functions
|
|
|
|
SERIAL_PROTOCOL((int)value); // right now to see errors that are happening in the
|
|
|
|
|
|
|
|
SERIAL_PROTOCOLCHAR(',');
|
|
|
|
|
|
|
|
SERIAL_PROTOCOL(size); // read_data() and write_data() functions
|
|
|
|
SERIAL_PROTOCOLLNPGM("...)");
|
|
|
|
SERIAL_PROTOCOLLNPGM("...)");
|
|
|
|
SERIAL_PROTOCOLLNPAIR(" f_lseek()=", (int)s);
|
|
|
|
SERIAL_PROTOCOLLNPAIR(" f_lseek()=", (int)s);
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (writing) {
|
|
|
|
if (writing) {
|
|
|
|
s = f_read(&eeprom_file, (void *)value, size, &bytes_read);
|
|
|
|
s = f_read(&eeprom_file, (void*)value, size, &bytes_read);
|
|
|
|
crc16(crc, value, size);
|
|
|
|
crc16(crc, value, size);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
else {
|
|
|
|
uint8_t temp[size];
|
|
|
|
uint8_t temp[size];
|
|
|
|
s = f_read(&eeprom_file, (void *)temp, size, &bytes_read);
|
|
|
|
s = f_read(&eeprom_file, (void*)temp, size, &bytes_read);
|
|
|
|
crc16(crc, temp, size);
|
|
|
|
crc16(crc, temp, size);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (s) {
|
|
|
|
if (s) {
|
|
|
|
SERIAL_PROTOCOLPAIR(" read_data(", pos); // This extra chit-chat goes away soon. But it is helpful
|
|
|
|
SERIAL_PROTOCOLPAIR(" read_data(", pos); // This extra chit-chat goes away soon. But it is helpful
|
|
|
|
SERIAL_PROTOCOLPAIR(",", (int)value); // right now to see errors that are happening in the
|
|
|
|
SERIAL_PROTOCOLCHAR(',');
|
|
|
|
SERIAL_PROTOCOLPAIR(",", size); // read_data() and write_data() functions
|
|
|
|
SERIAL_PROTOCOL((int)value); // right now to see errors that are happening in the
|
|
|
|
|
|
|
|
SERIAL_PROTOCOLCHAR(',');
|
|
|
|
|
|
|
|
SERIAL_PROTOCOL(size); // read_data() and write_data() functions
|
|
|
|
SERIAL_PROTOCOLLNPGM("...)");
|
|
|
|
SERIAL_PROTOCOLLNPGM("...)");
|
|
|
|
SERIAL_PROTOCOLLNPAIR(" f_write()=", (int)s);
|
|
|
|
SERIAL_PROTOCOLLNPAIR(" f_write()=", (int)s);
|
|
|
|
SERIAL_PROTOCOLPAIR(" size=", size);
|
|
|
|
SERIAL_PROTOCOLPAIR(" size=", size);
|
|
|
|
SERIAL_PROTOCOLLNPAIR("\n bytes_read=", bytes_read);
|
|
|
|
SERIAL_PROTOCOLLNPAIR("\n bytes_read=", bytes_read);
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
pos = pos + size;
|
|
|
|
pos = pos + size;
|
|
|
|
return bytes_read != size; // return true for any error
|
|
|
|
return bytes_read != size; // return true for any error
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool PersistentStore::write_data(const int pos, uint8_t* value, size_t size) {
|
|
|
|
const size_t PersistentStore::capacity() { return 4096; } // 4KiB of Emulated EEPROM
|
|
|
|
int data_pos = pos;
|
|
|
|
|
|
|
|
uint16_t crc = 0;
|
|
|
|
|
|
|
|
return write_data(data_pos, value, size, &crc);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool PersistentStore::read_data(const int pos, uint8_t* value, size_t size) {
|
|
|
|
|
|
|
|
int data_pos = pos;
|
|
|
|
|
|
|
|
uint16_t crc = 0;
|
|
|
|
|
|
|
|
return read_data(data_pos, value, size, &crc);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const size_t PersistentStore::capacity() {
|
|
|
|
|
|
|
|
return 4096; //4KiB of Emulated EEPROM
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endif // EEPROM_SETTINGS
|
|
|
|
#endif // EEPROM_SETTINGS
|
|
|
|
#endif // TARGET_LPC1768
|
|
|
|
#endif // TARGET_LPC1768
|
|
|
|