Add logic to handle inverted signals for parallel ports as well, using

a tilde in avrdude.conf.


git-svn-id: svn://svn.savannah.nongnu.org/avrdude/trunk/avrdude@577 81a1dc3b-b13d-400b-aceb-764788c761c2
This commit is contained in:
Joerg Wunsch 2006-04-13 20:10:55 +00:00
parent c6a31e68c6
commit 590424e9b9
1 changed files with 33 additions and 4 deletions

37
par.c
View File

@ -81,7 +81,9 @@ struct ppipins_t ppipins[] = {
static int par_setpin(PROGRAMMER * pgm, int pin, int value)
{
int inverted;
inverted = pin & PIN_INVERSE;
pin &= PIN_MASK;
if (pin < 1 || pin > 17)
@ -90,6 +92,9 @@ static int par_setpin(PROGRAMMER * pgm, int pin, int value)
pin--;
if (ppipins[pin].inverted)
inverted = !inverted;
if (inverted)
value = !value;
if (value)
@ -108,7 +113,9 @@ static int par_setpin(PROGRAMMER * pgm, int pin, int value)
static int par_getpin(PROGRAMMER * pgm, int pin)
{
int value;
int inverted;
inverted = pin & PIN_INVERSE;
pin &= PIN_MASK;
if (pin < 1 || pin > 17)
@ -122,6 +129,9 @@ static int par_getpin(PROGRAMMER * pgm, int pin)
value = 1;
if (ppipins[pin].inverted)
inverted = !inverted;
if (inverted)
value = !value;
return value;
@ -130,21 +140,40 @@ static int par_getpin(PROGRAMMER * pgm, int pin)
static int par_highpulsepin(PROGRAMMER * pgm, int pin)
{
int inverted;
inverted = pin & PIN_INVERSE;
pin &= PIN_MASK;
if (pin < 1 || pin > 17)
return -1;
pin--;
ppi_set(pgm->fd, ppipins[pin].reg, ppipins[pin].bit);
if (ppipins[pin].inverted)
inverted = !inverted;
if (inverted) {
ppi_clr(pgm->fd, ppipins[pin].reg, ppipins[pin].bit);
#if SLOW_TOGGLE
usleep(1000);
usleep(1000);
#endif
ppi_clr(pgm->fd, ppipins[pin].reg, ppipins[pin].bit);
ppi_set(pgm->fd, ppipins[pin].reg, ppipins[pin].bit);
#if SLOW_TOGGLE
usleep(1000);
usleep(1000);
#endif
} else {
ppi_set(pgm->fd, ppipins[pin].reg, ppipins[pin].bit);
#if SLOW_TOGGLE
usleep(1000);
#endif
ppi_clr(pgm->fd, ppipins[pin].reg, ppipins[pin].bit);
#if SLOW_TOGGLE
usleep(1000);
#endif
}
return 0;
}