void backupEeprom()
{
  char filename[60];
  uint8_t buffer[1024];
  FIL file;

  lcd_clear();
  displayProgressBar(STR_WRITING);

  // reset unexpectedShutdown to prevent warning when user restores EEPROM backup
  g_eeGeneral.unexpectedShutdown = 0;
  eeDirty(EE_GENERAL);
  eeCheck(true);

  // create the directory if needed...
  DIR folder;
  FRESULT result = f_opendir(&folder, EEPROMS_PATH);
  if (result != FR_OK) {
    if (result == FR_NO_PATH)
      result = f_mkdir(EEPROMS_PATH);
    if (result != FR_OK) {
      POPUP_WARNING(SDCARD_ERROR(result));
      return;
    }
  }

  // prepare the filename...
  char * tmp = strAppend(filename, EEPROMS_PATH "/eeprom");
  tmp = strAppendDate(tmp, true);
  strAppend(tmp, EEPROM_EXT);

  // open the file for writing...
  f_open(&file, filename, FA_WRITE | FA_CREATE_ALWAYS);

  for (int i=0; i<EESIZE; i+=1024) {
    UINT count;
    eepromReadBlock(buffer, i, 1024);
    f_write(&file, buffer, 1024, &count);
    updateProgressBar(i, EESIZE);
    SIMU_SLEEP(100/*ms*/);
  }

  f_close(&file);

  //set back unexpectedShutdown
  g_eeGeneral.unexpectedShutdown = 1;
  eeDirty(EE_GENERAL);
  eeCheck(true);
}
Example #2
0
static void cmd_dump(BaseSequentialStream *chp, int argc, char *argv[])
{
    (void)argv;
    (void)argc;
    int i, j;
    msg_t status;

    /*
    for(i=0; i<=9; i++) {
        rx_data[i] = '0'+i;
    }
    rx_data[15] = 1;

    chprintf(chp, "Write page 0\r\n");
    status = eepromWritePage(rx_data, 0);
    if(status != RDY_OK) {
        chprintf(chp, "I2C write error %08x\r\n", i2c_errors);
        return;
    }

    rx_data[15] = 2;
    chprintf(chp, "Write page 8\r\n");
    status = eepromWritePage(rx_data, 8);
    if(status != RDY_OK) {
        chprintf(chp, "I2C write error %08x\r\n", i2c_errors);
        return;
    }
    */

    for(i=0; i<256; i++) { rx_data[i] = 0; }

    for(i=0; i<1024; i += 16) {
        chprintf(chp, "%04x: ", i);
        status = eepromReadBlock(rx_data, i, 16);
        if(status != RDY_OK) {
            chprintf(chp, "I2C read error %08x\r\n", i2c_errors);
            return;
        }
        for(j=0; j<16; j++) {
            chprintf(chp, "%02x ", rx_data[j]);
        }
        chprintf(chp, "\r\n");
    }
}