diff --git a/avrdude.conf.sample b/avrdude.conf.sample index 158d55bf..f232bbe2 100644 --- a/avrdude.conf.sample +++ b/avrdude.conf.sample @@ -172,8 +172,9 @@ # # Overall avrdude defaults # -default_parallel = "/dev/ppi0"; -default_serial = "/dev/cuaa0"; +default_parallel = "/dev/ppi0"; +default_serial = "/dev/cuaa0"; +default_programmer = "stk500"; # @@ -181,7 +182,7 @@ default_serial = "/dev/cuaa0"; # programmer - id = "bsd", "default"; + id = "bsd"; desc = "Brian Dean's Programmer"; type = par; vcc = 2, 3, 4, 5; diff --git a/config.c b/config.c index f66e9a8f..b0826587 100644 --- a/config.c +++ b/config.c @@ -30,6 +30,7 @@ #include "config.h" #include "config_gram.h" +char default_programmer[MAX_STR_CONST]; char default_parallel[PATH_MAX]; char default_serial[PATH_MAX]; diff --git a/config.h b/config.h index 3e34b0ae..627a3c2c 100644 --- a/config.h +++ b/config.h @@ -53,6 +53,7 @@ extern int lineno; extern char * infile; extern LISTID string_list; extern LISTID number_list; +extern char default_programmer[]; extern char default_parallel[]; extern char default_serial[]; diff --git a/config_gram.y b/config_gram.y index e06f3a1f..ef9471d6 100644 --- a/config_gram.y +++ b/config_gram.y @@ -68,6 +68,7 @@ static int parse_cmdbits(OPCODE * op); %token K_CHIP_ERASE_DELAY %token K_DEDICATED %token K_DEFAULT_PARALLEL +%token K_DEFAULT_PROGRAMMER %token K_DEFAULT_SERIAL %token K_DESC %token K_DEVICECODE @@ -131,6 +132,12 @@ def : part_def TKN_SEMI | + K_DEFAULT_PROGRAMMER TKN_EQUAL TKN_STRING TKN_SEMI { + strncpy(default_programmer, $3->value.string, MAX_STR_CONST); + default_programmer[MAX_STR_CONST-1] = 0; + free_token($3); + } | + K_DEFAULT_PARALLEL TKN_EQUAL TKN_STRING TKN_SEMI { strncpy(default_parallel, $3->value.string, PATH_MAX); default_parallel[PATH_MAX-1] = 0; diff --git a/lexer.l b/lexer.l index 26440d70..cd67d912 100644 --- a/lexer.l +++ b/lexer.l @@ -122,6 +122,7 @@ buff { yylval=NULL; return K_BUFF; } chip_erase_delay { yylval=NULL; return K_CHIP_ERASE_DELAY; } desc { yylval=NULL; return K_DESC; } default_parallel { yylval=NULL; return K_DEFAULT_PARALLEL; } +default_programmer { yylval=NULL; return K_DEFAULT_PROGRAMMER; } default_serial { yylval=NULL; return K_DEFAULT_SERIAL; } devicecode { yylval=NULL; return K_DEVICECODE; } eeprom { yylval=NULL; return K_EEPROM; } diff --git a/main.c b/main.c index 8355561e..dd106d5a 100644 --- a/main.c +++ b/main.c @@ -190,7 +190,7 @@ int read_config(char * file) -void pinconfig_display(char * p) +void programmer_display(char * p) { fprintf(stderr, "%sProgrammer Type: %s\n", p, pgm->type); @@ -210,7 +210,7 @@ void verify_pin_assigned(int pin, char * desc) -PROGRAMMER * locate_pinconfig(LISTID programmers, char * configid) +PROGRAMMER * locate_programmer(LISTID programmers, char * configid) { LNODEID ln1, ln2; PROGRAMMER * p = NULL; @@ -305,7 +305,7 @@ int main(int argc, char * argv []) int ppisetbits; /* bits to set in ppi data register at exit */ int ppiclrbits; /* bits to clear in ppi data register at exit */ char * exitspecs; /* exit specs string from command line */ - char * pinconfig; /* programmer id */ + char * programmer; /* programmer id */ char * partdesc; /* part id */ char configfile[PATH_MAX]; /* pin configuration file */ int cycles; /* erase-rewrite cycles */ @@ -341,7 +341,7 @@ int main(int argc, char * argv []) ppiclrbits = 0; exitspecs = NULL; pgm = NULL; - pinconfig = "avrdude"; /* compiled-in default */ + programmer = default_programmer; verbose = 0; do_cycles = 0; set_cycles = -1; @@ -352,25 +352,6 @@ int main(int argc, char * argv []) strcat(configfile, "/"); strcat(configfile, "avrdude.conf"); - /* - * initialize compiled-in default programmer - */ - compiled_in_pgm = pgm_new(); - pgm = compiled_in_pgm; - par_initpgm(pgm); - ladd(pgm->id, dup_string("avrdude")); - strcpy(pgm->desc, "avrdude compiled-in default"); - pgm->pinno[PPI_AVR_VCC] = 0x0f; /* ppi pins 2-5, data reg bits 0-3 */ - pgm->pinno[PPI_AVR_BUFF] = 0; - pgm->pinno[PIN_AVR_RESET] = 7; - pgm->pinno[PIN_AVR_SCK] = 8; - pgm->pinno[PIN_AVR_MOSI] = 9; - pgm->pinno[PIN_AVR_MISO] = 10; - pgm->pinno[PIN_LED_ERR] = 0; - pgm->pinno[PIN_LED_RDY] = 0; - pgm->pinno[PIN_LED_PGM] = 0; - pgm->pinno[PIN_LED_VFY] = 0; - len = strlen(progname) + 2; for (i=0; i<len; i++) progbuf[i] = ' '; @@ -391,13 +372,8 @@ int main(int argc, char * argv []) while ((ch = getopt(argc,argv,"?c:C:eE:f:Fi:m:no:p:P:tvVyY:")) != -1) { switch (ch) { - case 'c': /* pin configuration */ - pinconfig = optarg; - if (strcmp(pinconfig, "stk500") == 0) { - if (port == default_parallel) { - port = default_serial; - } - } + case 'c': /* programmer id */ + programmer = optarg; break; case 'C': /* pin configuration file */ @@ -544,26 +520,34 @@ int main(int argc, char * argv []) rc = read_config(configfile); if (rc) { - fprintf(stderr, "%s: error reading \"%s\" configuration from \"%s\"\n", - progname, pinconfig, configfile); + fprintf(stderr, "%s: error reading configuration file \"%s\"\n", + progname, configfile); exit(1); } - if (strcmp(pinconfig, "avrdude") == 0) { - pgm = locate_pinconfig(programmers, "default"); - if (pgm == NULL) { - /* no default config listed, use the compile-in default */ - pgm = compiled_in_pgm; - } + if (programmer[0] == 0) { + fprintf(stderr, + "\n%s: no programmer has been specified on the command line " + "or the config file\n", + progname); + fprintf(stderr, + "%sSpecify a programmer using the -c option and try again\n\n", + progbuf); + exit(1); } - else { - pgm = locate_pinconfig(programmers, pinconfig); - if (pgm == NULL) { - fprintf(stderr, - "%s: Can't find programmer id \"%s\"\n", - progname, pinconfig); - fprintf(stderr,"\n"); - exit(1); + + pgm = locate_programmer(programmers, programmer); + if (pgm == NULL) { + fprintf(stderr, + "%s: Can't find programmer id \"%s\"\n", + progname, programmer); + fprintf(stderr,"\n"); + exit(1); + } + + if (strcmp(programmer, "stk500") == 0) { + if (port == default_parallel) { + port = default_serial; } } @@ -627,8 +611,8 @@ int main(int argc, char * argv []) * open the programmer */ if (port[0] == 0) { - fprintf(stderr, "\n%s: no port has been specified on the command or the " - "config file\n", + fprintf(stderr, "\n%s: no port has been specified on the command line " + "or the config file\n", progname); fprintf(stderr, "%sSpecify a port using the -P option and try again\n\n", progbuf); @@ -637,6 +621,7 @@ int main(int argc, char * argv []) if (verbose) { fprintf(stderr, "%sUsing Port : %s\n", progbuf, port); + fprintf(stderr, "%sUsing Programmer : %s\n", progbuf, programmer); } pgm->open(pgm, port); @@ -644,7 +629,7 @@ int main(int argc, char * argv []) if (verbose) { avr_display(stderr, p, progbuf, verbose); fprintf(stderr, "\n"); - pinconfig_display(progbuf); + programmer_display(progbuf); } fprintf(stderr, "\n");