An obsolete weakness occurs when someone uses deprecated or obsolete functions when building a system. As a programming language evolves, some functions occasionally become obsolete.
This C routine is considered obsolete.
avrdude-6.3/par.c
The highlighted line of code below is the trigger point of this particular Fedora 25 obsolete weakness.
static void par_powerdown(PROGRAMMER * pgm)
{
par_setmany(pgm, PPI_AVR_VCC, 0); /* power down */
}
static void par_disable(PROGRAMMER * pgm)
{
par_setmany(pgm, PPI_AVR_BUFF, 1); /* turn off */
}
static void par_enable(PROGRAMMER * pgm)
{
/*
* Prepare to start talking to the connected device - pull reset low
* first, delay a few milliseconds, then enable the buffer. This
* sequence allows the AVR to be reset before the buffer is enabled
* to avoid a short period of time where the AVR may be driving the
* programming lines at the same time the programmer tries to. Of
* course, if a buffer is being used, then the /RESET line from the
* programmer needs to be directly connected to the AVR /RESET line
* and not via the buffer chip.
*/
par_setpin(pgm, PIN_AVR_RESET, 0);
usleep(1);
/*
* enable the 74367 buffer, if connected; this signal is active low
*/
par_setmany(pgm, PPI_AVR_BUFF, 0);
}
static int par_open(PROGRAMMER * pgm, char * port)
{
int rc;
if (bitbang_check_prerequisites(pgm) < 0)
return -1;
ppi_open(port, &pgm->fd);
if (pgm->fd.ifd < 0) {
avrdude_message(MSG_INFO, "%s: failed to open parallel port \"%s\"\n\n",
progname, port);
return -1;
}
/*
* save pin values, so they can be restored when device is closed
*/
rc = ppi_getall(&pgm->fd, PPIDATA);