Prefix pin config entries in the config file with a "c:". Later, I

might make part descriptions read in this way and we can use a
different letter for those (p).  This will make the parsing easier to
distinguish between the entry types.


git-svn-id: svn://svn.savannah.nongnu.org/avrdude/trunk/avrdude@69 81a1dc3b-b13d-400b-aceb-764788c761c2
This commit is contained in:
Brian S. Dean 2001-09-20 03:19:31 +00:00
parent 0b7551c3df
commit 3cdf00c76c
3 changed files with 96 additions and 16 deletions

View File

@ -125,8 +125,11 @@ Atmel AVR serial program method.
.It Fl C Ar Config-File .It Fl C Ar Config-File
Use the specified config file to locate the desired pin configuration. Use the specified config file to locate the desired pin configuration.
Pin configurations are specified in the config file using a colon Pin configurations are specified in the config file using a colon
seperated field format. The configuration name is the first field, seperated field format. The configuration entry type is the first
the remaining fields are of the form: field and currently must be
.Ar c:
The configuration name is the second field, and the remaining fields
are of the form:
.Ar PIN=VALUE , .Ar PIN=VALUE ,
where where
.Ar PIN .Ar PIN
@ -135,8 +138,11 @@ can be
The value is the pin number of the PC parallel port assigned to that The value is the pin number of the PC parallel port assigned to that
function. The function. The
.Ar VCC .Ar VCC
pin can take multible values seperated by a comma. It's value(s) must pin can take on multiple values seperated by a comma (which are or'd
come from pins 2 through 9. The default configuration file is together to create a bit mask).
.Ar VCC
pin numbers must come from pins 2 through 9. The default
configuration file is
.Pa /usr/local/etc/avrprog.conf . .Pa /usr/local/etc/avrprog.conf .
.It Fl e .It Fl e
Causes a chip erase to be executed. This will reset the contents of the Causes a chip erase to be executed. This will reset the contents of the
@ -304,7 +310,10 @@ Give a short on-line summary of the available commands.
Leave terminal mode and thus Leave terminal mode and thus
.Nm avrprog . .Nm avrprog .
.El .El
.Ss Parallel port pin connections .Ss Default Parallel port pin connections
(these can be changed, see the
.Fl c
option)
.TS .TS
ll. ll.
\fBPin number\fP \fBFunction\fP \fBPin number\fP \fBFunction\fP
@ -325,6 +334,8 @@ ll.
.It Pa /dev/ppi0 .It Pa /dev/ppi0
default device to be used for communication with the programming default device to be used for communication with the programming
hardware hardware
.It Pa /usr/local/etc/avrprog.conf.sample
sample pin configuration file
.It Pa /usr/local/etc/avrprog.conf .It Pa /usr/local/etc/avrprog.conf
default pin configuration file default pin configuration file
.It Pa ~/.inputrc .It Pa ~/.inputrc

View File

@ -3,25 +3,25 @@
# Programmer Pin Configurations # Programmer Pin Configurations
# #
# The format of these entries is as follows: # The format of these entries is as follows:
# name:[desc=<description>:][[<pin>=<value>:]...] # c:<name>:[desc=<description>:][[<pin>=<value>:]...]
# #
# Example: for a programmer called PGM-1 that uses pin 2 and 3 for # Example: for a programmer called PGM-1 that uses pin 2 and 3 for
# power, pins 4, 5, and 6 for RESET, SCK, and MOSI, and pin 10 for # power, pins 4, 5, and 6 for RESET, SCK, and MOSI, and pin 10 for
# MISO, we could use the following entry: # MISO, we could use the following entry:
# #
# pgm-1 : desc=Programmer 1:vcc=2,3:reset=4:sck=5:mosi=6:miso=10 # c:pgm-1 : desc=Programmer 1:vcc=2,3:reset=4:sck=5:mosi=6:miso=10
# #
# Continuation lines are supported, use a backslash (\) as the last # Continuation lines are supported, use a backslash (\) as the last
# character of the line and the next line will included as part of the # character of the line and the next line will included as part of the
# configuration data. # configuration data.
# #
bsd : desc=Brian Dean's programmer:vcc=2,3,4,5:reset=7:sck=8:\ c:bsd : desc=Brian Dean's programmer:vcc=2,3,4,5:reset=7:sck=8:\
mosi=9:miso=10 mosi=9:miso=10
dt006 : desc=Dontronics DT006:reset=4:sck=5:mosi=2:miso=11 c:dt006 : desc=Dontronics DT006:reset=4:sck=5:mosi=2:miso=11
alf : desc=Tony Freibel's programmer:vcc=2,3,4,5:buff=6:\ c:alf : desc=Tony Freibel's programmer:vcc=2,3,4,5:buff=6:\
reset=7:sck=8:mosi=9:miso=10:errled=1:rdyled=14:pgmled=16:\ reset=7:sck=8:mosi=9:miso=10:errled=1:rdyled=14:pgmled=16:\
vfyled=17 vfyled=17

75
main.c
View File

@ -264,7 +264,6 @@ int print_module_versions ( FILE * outf, char * timestamp )
} }
#define MAX_LINE_LEN 1024 #define MAX_LINE_LEN 1024
#define MAX_PIN_NAME 64 #define MAX_PIN_NAME 64
@ -457,6 +456,7 @@ int read_config(char * infile, char * config, unsigned int * pinno,
lineno = 0; lineno = 0;
buf[0] = 0; buf[0] = 0;
cont = 0;
while (fgets(line, MAX_LINE_LEN, f) != NULL) { while (fgets(line, MAX_LINE_LEN, f) != NULL) {
lineno++; lineno++;
@ -464,6 +464,9 @@ int read_config(char * infile, char * config, unsigned int * pinno,
while (isspace(*p)) while (isspace(*p))
p++; p++;
/*
* skip empty lines and lines that start with '#'
*/
if ((*p == '#')||(*p == '\n')||(*p == 0)) if ((*p == '#')||(*p == '\n')||(*p == 0))
continue; continue;
@ -473,6 +476,37 @@ int read_config(char * infile, char * config, unsigned int * pinno,
len--; len--;
} }
/*
* we're only interested in pin configuration data which begin
* with "c:"
*/
if (((len < 3) || (p[0] != 'c')) && !cont)
continue;
/*
* skip over the "c:"
*/
if (!cont) {
p++;
while (*p && isspace(*p))
p++;
if (*p != ':') {
fprintf(stderr, "line %d:\n%s\n",
lineno, line);
for (i=0; i<(p-line); i++) {
fprintf(stderr, "-");
}
fprintf(stderr, "^\n");
fprintf(stderr, "error at column %d, line %d of %s: expecting ':'\n",
p-line+1, lineno, infile);
return -1;
}
p++;
len = strlen(p);
}
cont = 0; cont = 0;
if (p[len-1] == '\\') { if (p[len-1] == '\\') {
@ -547,12 +581,47 @@ int read_config(char * infile, char * config, unsigned int * pinno,
static char vccpins_buf[64];
char * vccpins_str(unsigned int pmask)
{
unsigned int mask;
int pin;
char b2[8];
char * b;
b = vccpins_buf;
b[0] = 0;
for (pin = 2, mask = 1; mask < 0x80; mask = mask << 1, pin++) {
if (pmask & mask) {
sprintf(b2, "%d", pin);
if (b[0] != 0)
strcat(b, ",");
strcat(b, b2);
}
}
return b;
}
void pinconfig_display(char * p, char * config, char * desc) void pinconfig_display(char * p, char * config, char * desc)
{ {
char vccpins[64];
if (pinno[PPI_AVR_VCC]) {
snprintf(vccpins, sizeof(vccpins), " = pins %s",
vccpins_str(pinno[PPI_AVR_VCC]));
}
else {
vccpins[0] = 0;
}
fprintf(stderr, "%sProgrammer Pin Configuration: %s (%s)\n", p, fprintf(stderr, "%sProgrammer Pin Configuration: %s (%s)\n", p,
config ? config : "DEFAULT", desc); config ? config : "DEFAULT", desc);
fprintf(stderr, fprintf(stderr,
"%s VCC = 0x%02x\n" "%s VCC = 0x%02x %s\n"
"%s BUFF = %d\n" "%s BUFF = %d\n"
"%s RESET = %d\n" "%s RESET = %d\n"
"%s SCK = %d\n" "%s SCK = %d\n"
@ -562,7 +631,7 @@ void pinconfig_display(char * p, char * config, char * desc)
"%s RDY LED = %d\n" "%s RDY LED = %d\n"
"%s PGM LED = %d\n" "%s PGM LED = %d\n"
"%s VFY LED = %d\n", "%s VFY LED = %d\n",
p, pinno[PPI_AVR_VCC], p, pinno[PPI_AVR_VCC], vccpins,
p, pinno[PIN_AVR_BUFF], p, pinno[PIN_AVR_BUFF],
p, pinno[PIN_AVR_RESET], p, pinno[PIN_AVR_RESET],
p, pinno[PIN_AVR_SCK], p, pinno[PIN_AVR_SCK],