Example #1
0
int do_op(PROGRAMMER * pgm, struct avrpart * p, AVRUPD * upd, int nowrite,
          int verify)
{
  struct avrpart * v;
  AVRMEM * mem = NULL;
  int size, vsize;
  int rc;

  /* NEW */
  if(strcmp(upd->memtype, "flash") == 0) {
		mem = p->flashmem;
  } else if(strcmp(upd->memtype, "lfuse") == 0) {
		mem = p->lfusemem;
  } else if(strcmp(upd->memtype, "hfuse") == 0) {
		mem = p->hfusemem;
  }

  if (mem == NULL) {
    logprintf(LOG_ERR, "\"%s\" memory type not defined for part \"%s\"", upd->memtype, p->desc);
    return -1;
  }

  if (upd->op == DEVICE_READ) {
    /*
     * read out the specified device memory and write it to a file
     */

    report_progress(0,1,"Reading");
    rc = avr_read(pgm, p, upd->memtype, 0);
    if (rc < 0) {
      logprintf(LOG_ERR, "failed to read all of %s memory, rc=%d", mem->desc, rc);
      return -1;
    }
    report_progress(1,1,NULL);
    size = rc;

      logprintf(LOG_INFO,
            "writing output file \"%s\"",
            strcmp(upd->filename, "-")==0 ? "<stdout>" : upd->filename);

    rc = fileio(FIO_WRITE, upd->filename, upd->format, p, upd->memtype, size);
    if (rc < 0) {
      logprintf(LOG_ERR, "write to file '%s' failed", upd->filename);
      return -1;
    }
  }
  else if (upd->op == DEVICE_WRITE) {
    /*
     * write the selected device memory using data from a file; first
     * read the data from the specified file
     */

 	 logprintf(LOG_INFO,
            "reading input file \"%s\"",
            strcmp(upd->filename, "-")==0 ? "<stdin>" : upd->filename);

    rc = fileio(FIO_READ, upd->filename, upd->format, p, upd->memtype, -1);
    if (rc < 0) {
      logprintf(LOG_INFO, "write to file '%s' failed", upd->filename);
      return -1;
    }
    size = rc;

    /*
     * write the buffer contents to the selected memory type
     */
      logprintf(LOG_INFO, "writing %s (%d bytes)", mem->desc, size);

    if (!nowrite) {
      report_progress(0,1,"Writing");
      rc = avr_write(pgm, p, upd->memtype, size);
      report_progress(1,1,NULL);
    }
    else {
      /*
       * test mode, don't actually write to the chip, output the buffer
       * to stdout in intel hex instead
       */
      rc = fileio(FIO_WRITE, "-", FMT_IHEX, p, upd->memtype, size);
    }

    if (rc < 0) {
      logprintf(LOG_ERR, "failed to write %s memory, rc=%d", mem->desc, rc);
      return -1;
    }

    vsize = rc;

	logprintf(LOG_INFO, "%d bytes of %s written", vsize, mem->desc);

  }
  else if (upd->op == DEVICE_VERIFY) {
    /*
     * verify that the in memory file (p->mem[AVR_M_FLASH|AVR_M_EEPROM])
     * is the same as what is on the chip
     */
    v = avr_dup_part(p);

      logprintf(LOG_INFO, "verifying %s memory against %s:", mem->desc, upd->filename);
      logprintf(LOG_INFO, "load data %s data from input file %s:", mem->desc, upd->filename);

    rc = fileio(FIO_READ, upd->filename, upd->format, p, upd->memtype, -1);
    if (rc < 0) {
      logprintf(LOG_ERR, "read from file '%s' failed", upd->filename);
      return -1;
    }
    size = rc;

      logprintf(LOG_INFO, "input file %s contains %d bytes", upd->filename, size);

    report_progress (0,1,"Reading");
    rc = avr_read(pgm, v, upd->memtype, size);
    if (rc < 0) {
      logprintf(LOG_ERR, "failed to read all of %s memory, rc=%d", mem->desc, rc);
      return -1;
    }
    report_progress (1,1,NULL);

      logprintf(LOG_INFO, "verifying ...");

    rc = avr_verify(p, v, upd->memtype, size);
    if (rc < 0) {
      logprintf(LOG_ERR, "verification error; content mismatch");
      return -1;
    }

      logprintf(LOG_INFO, "%d bytes of %s verified", rc, mem->desc);

	FREE(v->sigmem->buf);
	FREE(v->sigmem);
	FREE(v->flashmem->buf);
	FREE(v->flashmem);
	FREE(v->hfusemem->buf);
	FREE(v->hfusemem);
	FREE(v->lfusemem->buf);
	FREE(v->lfusemem);
	FREE(v);
  }
  else {
    logprintf(LOG_ERR, "invalid update operation (%d) requested", upd->op);
    return -1;
  }

  return 0;
}
Example #2
0
void arg3(char file[], char file_name[], int start_range)
{
	fileio(file, file_name, start_range);
}
Example #3
0
int do_op(PROGRAMMER * pgm, struct avrpart * p, UPDATE * upd, enum updateflags flags)
{
  struct avrpart * v;
  AVRMEM * mem;
  int size, vsize;
  int rc;

  mem = avr_locate_mem(p, upd->memtype);
  if (mem == NULL) {
    fprintf(stderr, "\"%s\" memory type not defined for part \"%s\"\n",
            upd->memtype, p->desc);
    return -1;
  }

  if (upd->op == DEVICE_READ) {
    /*
     * read out the specified device memory and write it to a file
     */
    if (quell_progress < 2) {
      fprintf(stderr, "%s: reading %s memory:\n",
            progname, mem->desc);
	  }
    report_progress(0,1,"Reading");
    rc = avr_read(pgm, p, upd->memtype, 0);
    if (rc < 0) {
      fprintf(stderr, "%s: failed to read all of %s memory, rc=%d\n",
              progname, mem->desc, rc);
      return -1;
    }
    report_progress(1,1,NULL);
    size = rc;

    if (quell_progress < 2) {
      fprintf(stderr,
            "%s: writing output file \"%s\"\n",
            progname,
            strcmp(upd->filename, "-")==0 ? "<stdout>" : upd->filename);
    }
    rc = fileio(FIO_WRITE, upd->filename, upd->format, p, upd->memtype, size);
    if (rc < 0) {
      fprintf(stderr, "%s: write to file '%s' failed\n",
              progname, upd->filename);
      return -1;
    }
  }
  else if (upd->op == DEVICE_WRITE) {
    /*
     * write the selected device memory using data from a file; first
     * read the data from the specified file
     */
    if (quell_progress < 2) {
      fprintf(stderr,
            "%s: reading input file \"%s\"\n",
            progname,
            strcmp(upd->filename, "-")==0 ? "<stdin>" : upd->filename);
    }
    rc = fileio(FIO_READ, upd->filename, upd->format, p, upd->memtype, -1);
    if (rc < 0) {
      fprintf(stderr, "%s: read from file '%s' failed\n",
              progname, upd->filename);
      return -1;
    }
    size = rc;

    /*
     * write the buffer contents to the selected memory type
     */
    if (quell_progress < 2) {
      fprintf(stderr, "%s: writing %s (%d bytes):\n",
            progname, mem->desc, size);
	  }

    if (!(flags & UF_NOWRITE)) {
      report_progress(0,1,"Writing");
      rc = avr_write(pgm, p, upd->memtype, size, (flags & UF_AUTO_ERASE) != 0);
      report_progress(1,1,NULL);
    }
    else {
      /*
       * test mode, don't actually write to the chip, output the buffer
       * to stdout in intel hex instead
       */
      rc = fileio(FIO_WRITE, "-", FMT_IHEX, p, upd->memtype, size);
    }

    if (rc < 0) {
      fprintf(stderr, "%s: failed to write %s memory, rc=%d\n",
              progname, mem->desc, rc);
      return -1;
    }

    vsize = rc;

    if (quell_progress < 2) {
      fprintf(stderr, "%s: %d bytes of %s written\n", progname,
            vsize, mem->desc);
    }

  }
  else if (upd->op == DEVICE_VERIFY) {
    /*
     * verify that the in memory file (p->mem[AVR_M_FLASH|AVR_M_EEPROM])
     * is the same as what is on the chip
     */
    pgm->vfy_led(pgm, ON);

    if (quell_progress < 2) {
      fprintf(stderr, "%s: verifying %s memory against %s:\n",
            progname, mem->desc, upd->filename);

      fprintf(stderr, "%s: load data %s data from input file %s:\n",
            progname, mem->desc, upd->filename);
    }

    rc = fileio(FIO_READ, upd->filename, upd->format, p, upd->memtype, -1);
    if (rc < 0) {
      fprintf(stderr, "%s: read from file '%s' failed\n",
              progname, upd->filename);
      return -1;
    }
    v = avr_dup_part(p);
    size = rc;
    if (quell_progress < 2) {
      fprintf(stderr, "%s: input file %s contains %d bytes\n",
            progname, upd->filename, size);
      fprintf(stderr, "%s: reading on-chip %s data:\n",
            progname, mem->desc);
    }

    report_progress (0,1,"Reading");
    rc = avr_read(pgm, p, upd->memtype, v);
    if (rc < 0) {
      fprintf(stderr, "%s: failed to read all of %s memory, rc=%d\n",
              progname, mem->desc, rc);
      pgm->err_led(pgm, ON);
      return -1;
    }
    report_progress (1,1,NULL);



    if (quell_progress < 2) {
      fprintf(stderr, "%s: verifying ...\n", progname);
    }
    rc = avr_verify(p, v, upd->memtype, size);
    if (rc < 0) {
      fprintf(stderr, "%s: verification error; content mismatch\n",
              progname);
      pgm->err_led(pgm, ON);
      return -1;
    }

    if (quell_progress < 2) {
      fprintf(stderr, "%s: %d bytes of %s verified\n",
              progname, rc, mem->desc);
    }

    pgm->vfy_led(pgm, OFF);
  }
  else {
    fprintf(stderr, "%s: invalid update operation (%d) requested\n",
            progname, upd->op);
    return -1;
  }

  return 0;
}
Example #4
0
void arg2(char file[], char file_name[])
{
	fileio(file, file_name, 1);
}