Style police: white space only change; consistent indentation, wrap

long lines to < 80 columns.


git-svn-id: svn://svn.savannah.nongnu.org/avrdude/trunk/avrdude@447 81a1dc3b-b13d-400b-aceb-764788c761c2
This commit is contained in:
bdean 2005-02-10 16:34:55 +00:00
parent 5316702400
commit b5f3b84182
1 changed files with 199 additions and 184 deletions

309
main.c
View File

@ -94,32 +94,32 @@ int do_cycles; /* track erase-rewrite cycles */
*/ */
void usage(void) void usage(void)
{ {
fprintf(stderr, fprintf(stderr,
"Usage: %s [options]\n" "Usage: %s [options]\n"
"Options:\n" "Options:\n"
" -p <partno> Required. Specify AVR device.\n" " -p <partno> Required. Specify AVR device.\n"
" -C <config-file> Specify location of configuration file.\n" " -C <config-file> Specify location of configuration file.\n"
" -c <programmer> Specify programmer type.\n" " -c <programmer> Specify programmer type.\n"
" -D Disable auto erase for flash memory\n" " -D Disable auto erase for flash memory\n"
" -P <port> Specify connection port.\n" " -P <port> Specify connection port.\n"
" -F Override invalid signature check.\n" " -F Override invalid signature check.\n"
" -e Perform a chip erase.\n" " -e Perform a chip erase.\n"
" -U <memtype>:r|w|v:<filename>[:format]\n" " -U <memtype>:r|w|v:<filename>[:format]\n"
" Memory operation specification.\n" " Memory operation specification.\n"
" Multiple -U options are allowed, each request\n" " Multiple -U options are allowed, each request\n"
" is performed in the order specified.\n" " is performed in the order specified.\n"
" -n Do not write anything to the device.\n" " -n Do not write anything to the device.\n"
" -V Do not verify.\n" " -V Do not verify.\n"
" -u Disable safemode, you need this option if you\n" " -u Disable safemode, you need this option if you\n"
" want to change fuse bits. Otherwise they will be\n" " want to change fuse bits. Otherwise they will be\n"
" recovered if they change\n" " recovered if they change\n"
" -t Enter terminal mode.\n" " -t Enter terminal mode.\n"
" -E <exitspec>[,<exitspec>] List programmer exit specifications.\n" " -E <exitspec>[,<exitspec>] List programmer exit specifications.\n"
" -v Verbose output. -v -v for more.\n" " -v Verbose output. -v -v for more.\n"
" -q Quell progress output.\n" " -q Quell progress output.\n"
" -? Display this usage.\n" " -? Display this usage.\n"
"\navrdude project: <URL:http://savannah.nongnu.org/projects/avrdude>\n" "\navrdude project: <URL:http://savannah.nongnu.org/projects/avrdude>\n"
,progname); ,progname);
} }
@ -245,22 +245,25 @@ typedef void (*FP_UpdateProgress)(int percent, double etime, char *hdr);
static FP_UpdateProgress update_progress; static FP_UpdateProgress update_progress;
/* Report the progress of a read or write operation from/to the device. /*
* Report the progress of a read or write operation from/to the
The first call of report_progress() should look like this (for a write op): * device.
*
report_progress (0, 1, "Writing"); * The first call of report_progress() should look like this (for a write op):
*
Then hdr should be passed NULL on subsequent calls while the operation is * report_progress (0, 1, "Writing");
progressing. Once the operation is complete, a final call should be made as *
such to ensure proper termination of the progress report: * Then hdr should be passed NULL on subsequent calls while the
* operation is progressing. Once the operation is complete, a final
report_progress (1, 1, NULL); * call should be made as such to ensure proper termination of the
* progress report:
It would be nice if we could reduce the usage to one and only one call for *
each of start, during and end cases. As things stand now, that is not * report_progress (1, 1, NULL);
possible and makes maintenance a bit more work. */ *
* It would be nice if we could reduce the usage to one and only one
* call for each of start, during and end cases. As things stand now,
* that is not possible and makes maintenance a bit more work.
*/
void report_progress (int completed, int total, char *hdr) void report_progress (int completed, int total, char *hdr)
{ {
static int last = 0; static int last = 0;
@ -553,7 +556,7 @@ int do_op(PROGRAMMER * pgm, struct avrpart * p, UPDATE * upd, int nowrite,
} }
} }
else if (upd->op == DEVICE_WRITE) { else if (upd->op == DEVICE_WRITE) {
/* /*
* write the selected device memory using data from a file; first * write the selected device memory using data from a file; first
* read the data from the specified file * read the data from the specified file
*/ */
@ -590,7 +593,7 @@ int do_op(PROGRAMMER * pgm, struct avrpart * p, UPDATE * upd, int nowrite,
if (rc < 0) { if (rc < 0) {
fprintf(stderr, "%s: failed to write %s memory, rc=%d\n", fprintf(stderr, "%s: failed to write %s memory, rc=%d\n",
progname, upd->memtype, rc); progname, upd->memtype, rc);
return -1; return -1;
} }
@ -711,10 +714,10 @@ int main(int argc, char * argv [])
progname = rindex(argv[0],'/'); progname = rindex(argv[0],'/');
#if defined (WIN32NATIVE) #if defined (WIN32NATIVE)
/* take care of backslash as dir sep in W32 */ /* take care of backslash as dir sep in W32 */
if (!progname) progname = rindex(argv[0],'\\'); if (!progname) progname = rindex(argv[0],'\\');
#endif /* WIN32NATIVE */ #endif /* WIN32NATIVE */
if (progname) if (progname)
progname++; progname++;
@ -920,7 +923,7 @@ int main(int argc, char * argv [])
i.e. Programmers Notepad */ i.e. Programmers Notepad */
setvbuf( stderr, NULL, _IONBF, 0 ); setvbuf( stderr, NULL, _IONBF, 0 );
setvbuf( stdout, NULL, _IONBF, 0 ); setvbuf( stdout, NULL, _IONBF, 0 );
} }
} }
if (verbose) { if (verbose) {
@ -1162,8 +1165,8 @@ int main(int argc, char * argv [])
pgm->rdy_led(pgm, ON); pgm->rdy_led(pgm, ON);
fprintf(stderr, fprintf(stderr,
"%s: AVR device initialized and ready to accept instructions\n", "%s: AVR device initialized and ready to accept instructions\n",
progname); progname);
/* /*
* Let's read the signature bytes to make sure there is at least a * Let's read the signature bytes to make sure there is at least a
@ -1215,38 +1218,42 @@ int main(int argc, char * argv [])
unsigned char safemode_hfuse = 0xff; unsigned char safemode_hfuse = 0xff;
unsigned char safemode_efuse = 0xff; unsigned char safemode_efuse = 0xff;
if (safemode == 1) { if (safemode == 1) {
/* If safemode is enabled, go ahead and read the current low, high, and extended fuse bytes as needed */ /* If safemode is enabled, go ahead and read the current low, high,
and extended fuse bytes as needed */
fprintf(stderr, "\n"); fprintf(stderr, "\n");
if (safemode_readfuses (&safemode_lfuse, &safemode_hfuse, &safemode_efuse, pgm, p, verbose) != 0) { if (safemode_readfuses(&safemode_lfuse, &safemode_hfuse,
fprintf(stderr, "%s: safemode: To protect your AVR the programming will be aborted\n", progname); &safemode_efuse, pgm, p, verbose) != 0) {
exitrc = 1; fprintf(stderr, "%s: safemode: To protect your AVR the programming "
goto main_exit; "will be aborted\n",
} progname);
exitrc = 1;
goto main_exit;
}
fprintf(stderr, "\n"); fprintf(stderr, "\n");
//Save the fuses as default //Save the fuses as default
safemode_memfuses(1, &safemode_lfuse, &safemode_hfuse, &safemode_efuse); safemode_memfuses(1, &safemode_lfuse, &safemode_hfuse, &safemode_efuse);
/* Check if user is attempting to write fuse bytes */ /* Check if user is attempting to write fuse bytes */
AVRMEM * m; AVRMEM * m;
for (ln=lfirst(updates); ln; ln=lnext(ln)) { for (ln=lfirst(updates); ln; ln=lnext(ln)) {
upd = ldata(ln); upd = ldata(ln);
m = avr_locate_mem(p, upd->memtype); m = avr_locate_mem(p, upd->memtype);
if (m == NULL) if (m == NULL)
continue; continue;
if (((strcasecmp(m->desc, "lfuse") == 0) || if (((strcasecmp(m->desc, "lfuse") == 0) ||
(strcasecmp(m->desc, "hfuse") == 0) || (strcasecmp(m->desc, "hfuse") == 0) ||
(strcasecmp(m->desc, "efuse") == 0)) && (upd->op == DEVICE_WRITE)) { (strcasecmp(m->desc, "efuse") == 0)) && (upd->op == DEVICE_WRITE)) {
fprintf(stderr, fprintf(stderr,
"%s: NOTE: FUSE memory has been specified, and safemode is ON\n" "%s: NOTE: FUSE memory has been specified, and safemode is ON\n"
"%s: This will not allow you to change the fuse bits.\n" "%s: This will not allow you to change the fuse bits.\n"
"%s: To disable this feature, specify the -u option.\n", "%s: To disable this feature, specify the -u option.\n",
progname, progname, progname); progname, progname, progname);
} }
} }
@ -1278,11 +1285,11 @@ int main(int argc, char * argv [])
} }
} }
/* /*
* Display cycle count, if and only if it is not set later on. * Display cycle count, if and only if it is not set later on.
* *
* The cycle count will be displayed anytime it will be changed later. * The cycle count will be displayed anytime it will be changed later.
*/ */
if ((set_cycles == -1) && ((erase == 0) || (do_cycles == 0))) { if ((set_cycles == -1) && ((erase == 0) || (do_cycles == 0))) {
/* /*
* see if the cycle count in the last four bytes of eeprom seems * see if the cycle count in the last four bytes of eeprom seems
@ -1332,9 +1339,9 @@ int main(int argc, char * argv [])
/* Warn user if safemode is on */ /* Warn user if safemode is on */
if (safemode > 0) { if (safemode > 0) {
fprintf(stderr, "%s: safemode is enabled, you will NOT be " fprintf(stderr, "%s: safemode is enabled, you will NOT be "
"able to change the fuse bits. Use -u option to disable\n", "able to change the fuse bits. Use -u option to disable\n",
progname); progname);
} }
/* /*
* terminal mode * terminal mode
@ -1352,88 +1359,96 @@ int main(int argc, char * argv [])
} }
} }
/* Right before we exit programming mode, which will make the fuse bits active, /* Right before we exit programming mode, which will make the fuse
check to make sure they are still correct */ bits active, check to make sure they are still correct */
if (safemode == 1){ if (safemode == 1){
/* If safemode is enabled, go ahead and read the current low, high, and extended fuse bytes as needed */ /* If safemode is enabled, go ahead and read the current low,
unsigned char safemodeafter_lfuse = 0xff; * high, and extended fuse bytes as needed */
unsigned char safemodeafter_hfuse = 0xff; unsigned char safemodeafter_lfuse = 0xff;
unsigned char safemodeafter_efuse = 0xff; unsigned char safemodeafter_hfuse = 0xff;
unsigned char failures = 0; unsigned char safemodeafter_efuse = 0xff;
unsigned char failures = 0;
fprintf(stderr, "\n"); fprintf(stderr, "\n");
//Restore the default fuse values //Restore the default fuse values
safemode_memfuses(0, &safemode_lfuse, &safemode_hfuse, &safemode_efuse); safemode_memfuses(0, &safemode_lfuse, &safemode_hfuse, &safemode_efuse);
/* Try reading back fuses, make sure they are reliable to read back */ /* Try reading back fuses, make sure they are reliable to read back */
if (safemode_readfuses (&safemodeafter_lfuse, &safemodeafter_hfuse, &safemodeafter_efuse, pgm, p, verbose) != 0) { if (safemode_readfuses(&safemodeafter_lfuse, &safemodeafter_hfuse,
/* Uh-oh.. try once more to read back fuses */ &safemodeafter_efuse, pgm, p, verbose) != 0) {
if (safemode_readfuses (&safemodeafter_lfuse, &safemodeafter_hfuse, &safemodeafter_efuse, pgm, p, verbose) != 0) { /* Uh-oh.. try once more to read back fuses */
fprintf(stderr, "%s: safemode: Sorry, reading back fuses was unreliable. I have given up and exited programming mode\n", if (safemode_readfuses(&safemodeafter_lfuse, &safemodeafter_hfuse,
progname); &safemodeafter_efuse, pgm, p, verbose) != 0) {
exitrc = 1; fprintf(stderr,
goto main_exit; "%s: safemode: Sorry, reading back fuses was unreliable. "
} "I have given up and exited programming mode\n",
} progname);
exitrc = 1;
/* Now check what fuses are against what they should be */ goto main_exit;
if (safemodeafter_lfuse != safemode_lfuse) {
fprintf(stderr, "%s: safemode: lfuse changed! Read as %x, was %x\n", progname,
safemodeafter_lfuse, safemode_lfuse);
/* Enough chit-chat, time to program some fuses and check them */
if (safemode_writefuse (safemode_lfuse, "lfuse", pgm, p, 10, verbose) == 0) {
fprintf(stderr, "%s: safemode: and is now rescued\n", progname);
}
else {
fprintf(stderr, "%s: and COULD NOT be changed\n", progname);
failures++;
}
} }
}
/* Now check what fuses are against what they should be */ /* Now check what fuses are against what they should be */
if (safemodeafter_hfuse != safemode_hfuse) { if (safemodeafter_lfuse != safemode_lfuse) {
fprintf(stderr, "%s: safemode: hfuse changed! Read as %x, was %x\n", progname, fprintf(stderr, "%s: safemode: lfuse changed! Read as %x, was %x\n",
safemodeafter_hfuse, safemode_hfuse); progname, safemodeafter_lfuse, safemode_lfuse);
/* Enough chit-chat, time to program some fuses and check them */ /* Enough chit-chat, time to program some fuses and check them */
if (safemode_writefuse (safemode_hfuse, "hfuse", pgm, p, 10, verbose) == 0) { if (safemode_writefuse (safemode_lfuse, "lfuse", pgm, p,
fprintf(stderr, "%s: safemode: and is now rescued\n", progname); 10, verbose) == 0) {
} fprintf(stderr, "%s: safemode: and is now rescued\n", progname);
else { }
fprintf(stderr, "%s: and COULD NOT be changed\n", progname); else {
failures++; fprintf(stderr, "%s: and COULD NOT be changed\n", progname);
} failures++;
} }
}
/* Now check what fuses are against what they should be */ /* Now check what fuses are against what they should be */
if (safemodeafter_efuse != safemode_efuse) { if (safemodeafter_hfuse != safemode_hfuse) {
fprintf(stderr, "%s: safemode: efuse changed! Read as %x, was %x\n", progname, fprintf(stderr, "%s: safemode: hfuse changed! Read as %x, was %x\n",
safemodeafter_efuse, safemode_efuse); progname, safemodeafter_hfuse, safemode_hfuse);
/* Enough chit-chat, time to program some fuses and check them */ /* Enough chit-chat, time to program some fuses and check them */
if (safemode_writefuse (safemode_efuse, "efuse", pgm, p, 10, verbose) == 0) { if (safemode_writefuse(safemode_hfuse, "hfuse", pgm, p,
fprintf(stderr, "%s: safemode: and is now rescued\n", progname); 10, verbose) == 0) {
} fprintf(stderr, "%s: safemode: and is now rescued\n", progname);
else { }
fprintf(stderr, "%s: and COULD NOT be changed\n", progname); else {
failures++; fprintf(stderr, "%s: and COULD NOT be changed\n", progname);
} failures++;
} }
}
fprintf(stderr, "%s: safemode: ", progname); /* Now check what fuses are against what they should be */
if (failures == 0) { if (safemodeafter_efuse != safemode_efuse) {
fprintf(stderr, "Fuses OK\n"); fprintf(stderr, "%s: safemode: efuse changed! Read as %x, was %x\n",
} progname, safemodeafter_efuse, safemode_efuse);
else {
fprintf(stderr, "Fuses not recovered, sorry\n"); /* Enough chit-chat, time to program some fuses and check them */
} if (safemode_writefuse (safemode_efuse, "efuse", pgm, p,
10, verbose) == 0) {
fprintf(stderr, "%s: safemode: and is now rescued\n", progname);
}
else {
fprintf(stderr, "%s: and COULD NOT be changed\n", progname);
failures++;
}
}
fprintf(stderr, "%s: safemode: ", progname);
if (failures == 0) {
fprintf(stderr, "Fuses OK\n");
}
else {
fprintf(stderr, "Fuses not recovered, sorry\n");
}
} }
main_exit: main_exit:
/* /*
* program complete * program complete