Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
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;
}
Ejemplo n.º 3
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;
}
Ejemplo n.º 4
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;
}
Ejemplo n.º 5
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;
}