#include "ConfigurationStore.h"

extern void getDefaultSetting() {
  const int defaultTemp[PLASTIC_ID_TOTAL][2] = {DEFAULT_TEMP_PET, DEFAULT_TEMP_HDPE, DEFAULT_TEMP_V, DEFAULT_TEMP_LDPE, DEFAULT_TEMP_PP, DEFAULT_TEMP_PS, DEFAULT_TEMP_PLA};
  const double defaultKp[2] = DEFAULT_PID_KP;
  const double defaultKi[2] = DEFAULT_PID_KI;
  const double defaultKd[2] = DEFAULT_PID_KD;
    
  for (int i=0; i<PLASTIC_ID_TOTAL; i++) 
    for (int j=0; j<2; j++) 
      targetTempHeater[i][j]=defaultTemp[i][j];
      
  for (int i=0; i<2; i++) {
    PIDKp[i] = defaultKp[i];
    PIDKi[i] = defaultKi[i];
    PIDKd[i] = defaultKd[i];
    PIDHeater[i].SetTunings(PIDKp[i],PIDKi[i],PIDKd[i]);
  }
}

extern void writeEEPROMSetting() {
  int ptrEEP=0;
  EEPROM_writeAnything(ptrEEP,(byte) EEPROM_PASSWORD);
  for (int i=0; i<2; i++) {
    EEPROM_writeAnything(ptrEEP,PIDKp[i]);
    EEPROM_writeAnything(ptrEEP,PIDKi[i]);
    EEPROM_writeAnything(ptrEEP,PIDKd[i]);
  }
  for (int i=0; i<PLASTIC_ID_TOTAL; i++) 
    for (int j=0; j<2; j++) 
      EEPROM_writeAnything(ptrEEP,targetTempHeater[i][j]);
}

extern void readEEPROMSetting(bool defaultFactory) {
  int ptrEEP=0;
  byte availEEPROM=0;
  EEPROM_readAnything(ptrEEP,availEEPROM);

  if (availEEPROM==(byte)EEPROM_PASSWORD) {
    for (int i=0; i<2; i++) {
      EEPROM_readAnything(ptrEEP,PIDKp[i]);
      EEPROM_readAnything(ptrEEP,PIDKi[i]);
      EEPROM_readAnything(ptrEEP,PIDKd[i]);
      PIDHeater[i].SetTunings(PIDKp[i],PIDKi[i],PIDKd[i]);
    }
    for (int i=0; i<PLASTIC_ID_TOTAL; i++)
      for (int j=0; j<2; j++)
        EEPROM_readAnything(ptrEEP,targetTempHeater[i][j]);
  } else if (defaultFactory) {
    getDefaultSetting();
  }
}
