Files
MyOwnEtherCATDevice/Utils/EEPROM_generator/src/backup.js
2024-11-20 11:18:13 +01:00

127 lines
3.2 KiB
JavaScript

/**
* SOES EEPROM generator
* Project backup save and restore
* This tool serves as:
- EtherCAT Slave Information XML + EEPROM binary generator
- SOES code generator
* Victor Sluiter 2013-2018
* Kuba Buda 2020-2021
*/
'use strict'
// ####################### Backup serialization + deserialization ####################### //
function isValidBackup(backup) {
if (!backup || !backup.form || !backup.od ) {
if (!confirm('Backup is incomplete or invalid, proceed anyway?')) {
return false;
}
}
return true;
}
function prepareBackupObject(form) {
const formValues = {};
if (form) {
Object.entries(form).forEach(formEntry => {
const formControl = formEntry[1]; // entry[0] is form control order number
if(isBackedUp(formControl) && formControl.value) {
formValues[formControl.name] = formControl.value;
};
});
}
const backup = {
form: formValues,
od: getObjDict(),
dc: _dc,
};
return backup;
}
function isBackedUp(formControl) {
return formControl.type != "button";
}
function loadBackup(backupObject, form) {
if (backupObject.od) {
setObjDictSection(sdo, backupObject.od.sdo);
setObjDictSection(txpdo, backupObject.od.txpdo);
setObjDictSection(rxpdo, backupObject.od.rxpdo);
}
if (backupObject.dc) {
_dc = backupObject.dc;
}
setFormValues(form, backupObject);
}
function setFormValues(form, backupObject) {
if (form) {
Object.entries(form).forEach(formEntry => {
const formControl = formEntry[1]; // entry[0] is index
const formControlValue = backupObject.form[formControl.name];
if (isBackedUp(formControl) && formControlValue) {
setFormControlValue(formControl, formControlValue);
};
});
}
}
function setFormControlValue(formControl, formControlValue) {
if (formControl.name.startsWith('CoeDetailsEnable')) {
if (formControlValue == true) {
formControl.checked = true;
} else {
}
} else {
formControl.value = formControlValue;
}
}
function prepareBackupFileContent(form) {
var backupObject = prepareBackupObject(form);
var backupFileContent = JSON.stringify(backupObject, null, 2); // pretty print
return backupFileContent;
}
// ####################### Backup using JSON file from filesystem ####################### //
// Localstorage limit is usually 5MB, super large object dictionaries on older browsers might be problematic
function downloadBackupFile(form) {
const backupFileContent = prepareBackupFileContent(form); // pretty print
downloadFile(backupFileContent, 'esi.json', 'text/json');
}
function restoreBackup(fileContent, form) {
var backup = JSON.parse(fileContent);
if (isValidBackup(backup)) {
loadBackup(backup, form);
reloadOD_Sections();
reloadSyncModes()
}
}
// ####################### Backup using browser localstorage ####################### //
/** persist OD and settings changes over page reload */
function saveLocalBackup(form) {
localStorage.etherCATeepromGeneratorBackup = prepareBackupFileContent(form);
}
function tryRestoreLocalBackup(form) {
if (localStorage.etherCATeepromGeneratorBackup) {
restoreBackup(localStorage.etherCATeepromGeneratorBackup, form);
}
}
function resetLocalBackup() {
if (localStorage.etherCATeepromGeneratorBackup) {
delete localStorage.etherCATeepromGeneratorBackup;
}
}