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--; if (ppipins[pin].inverted) inverted = !inverted; if (inverted) { ppi_clr(&pgm->fd, ppipins[pin].reg, ppipins[pin].bit); if (pgm->ispdelay > 1) bitbang_delay(pgm->ispdelay); ppi_set(&pgm->fd, ppipins[pin].reg, ppipins[pin].bit); if (pgm->ispdelay > 1) bitbang_delay(pgm->ispdelay); } else { ppi_set(&pgm->fd, ppipins[pin].reg, ppipins[pin].bit); if (pgm->ispdelay > 1) bitbang_delay(pgm->ispdelay); ppi_clr(&pgm->fd, ppipins[pin].reg, ppipins[pin].bit); if (pgm->ispdelay > 1) bitbang_delay(pgm->ispdelay); } return 0; }
static int gpio_setpin(PROGRAMMER * pgm, int pin, int value) { int r; if (pin & PIN_INVERSE) { value = !value; pin &= PIN_MASK; } if ( gpio_fds[pin] < 0 ) return -1; if (value) r=write(gpio_fds[pin], "1", 1); else r=write(gpio_fds[pin], "0", 1); if (r!=1) return -1; if (pgm->ispdelay > 1) bitbang_delay(pgm->ispdelay); return 0; }
static int par_setpin(PROGRAMMER * pgm, int pin, int value) { int inverted; inverted = pin & PIN_INVERSE; pin &= PIN_MASK; if (pin < 1 || pin > 17) return -1; pin--; if (ppipins[pin].inverted) inverted = !inverted; if (inverted) value = !value; if (value) ppi_set(&pgm->fd, ppipins[pin].reg, ppipins[pin].bit); else ppi_clr(&pgm->fd, ppipins[pin].reg, ppipins[pin].bit); if (pgm->ispdelay > 1) bitbang_delay(pgm->ispdelay); return 0; }
static int gpio_setpin(PROGRAMMER * pgm, int pin, int value) { if(gpio_fds[pin] != PINMODE_OUTPUT) { return -1; } /* Small delay for too fast computers */ delayMicroseconds(1); if(value == 1) { digitalWrite(pin, HIGH); } else { digitalWrite(pin, LOW); } if(pgm->ispdelay > 1) { bitbang_delay(pgm->ispdelay); } return 0; }
static int serbb_setpin(PROGRAMMER * pgm, int pin, int value) { HANDLE hComPort = (HANDLE)pgm->fd.pfd; LPVOID lpMsgBuf; DWORD dwFunc; const char *name; if (pin & PIN_INVERSE) { value = !value; pin &= PIN_MASK; } if (pin < 1 || pin > DB9PINS) return -1; switch (pin) { case 3: /* txd */ dwFunc = value? SETBREAK: CLRBREAK; name = value? "SETBREAK": "CLRBREAK"; txd = value; break; case 4: /* dtr */ dwFunc = value? SETDTR: CLRDTR; name = value? "SETDTR": "CLRDTR"; dtr = value; break; case 7: /* rts */ dwFunc = value? SETRTS: CLRRTS; name = value? "SETRTS": "CLRRTS"; break; default: if (verbose) fprintf(stderr, "%s: serbb_setpin(): unknown pin %d\n", progname, pin + 1); return -1; } if (verbose > 4) fprintf(stderr, "%s: serbb_setpin(): EscapeCommFunction(%s)\n", progname, name); if (!EscapeCommFunction(hComPort, dwFunc)) { FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR) &lpMsgBuf, 0, NULL); fprintf(stderr, "%s: serbb_setpin(): SetCommState() failed: %s\n", progname, (char *)lpMsgBuf); CloseHandle(hComPort); LocalFree(lpMsgBuf); exit(1); } if (pgm->ispdelay > 1) bitbang_delay(pgm->ispdelay); return 0; }