static int par_open(PROGRAMMER * pgm, char * port) { int rc; bitbang_check_prerequisites(pgm); ppi_open(port, &pgm->fd); if (pgm->fd.ifd < 0) { fprintf(stderr, "%s: failed to open parallel port \"%s\"\n\n", progname, port); exit(1); } /* * save pin values, so they can be restored when device is closed */ rc = ppi_getall(&pgm->fd, PPIDATA); if (rc < 0) { fprintf(stderr, "%s: error reading status of ppi data port\n", progname); return -1; } pgm->ppidata = rc; rc = ppi_getall(&pgm->fd, PPICTRL); if (rc < 0) { fprintf(stderr, "%s: error reading status of ppi ctrl port\n", progname); return -1; } pgm->ppictrl = rc; return 0; }
static int linuxgpio_open(PROGRAMMER *pgm, char *port) { int r, i, pin; if (bitbang_check_prerequisites(pgm) < 0) return -1; for (i=0; i<N_GPIO; i++) linuxgpio_fds[i] = -1; //Avrdude assumes that if a pin number is 0 it means not used/available //this causes a problem because 0 is a valid GPIO number in Linux sysfs. //To avoid annoying off by one pin numbering we assume SCK, MOSI, MISO //and RESET pins are always defined in avrdude.conf, even as 0. If they're //not programming will not work anyway. The drawbacks of this approach are //that unwanted toggling of GPIO0 can occur and that other optional pins //mostry LED status, can't be set to GPIO0. It can be fixed when a better //solution exists. for (i=2; i<N_PINS; i++) { if ( (pgm->pinno[i] & PIN_MASK) != 0 || i == PIN_AVR_RESET || i == PIN_AVR_SCK || i == PIN_AVR_MOSI || i == PIN_AVR_MISO ) { pin = pgm->pinno[i] & PIN_MASK; if ((r=linuxgpio_export(pin)) < 0) { avrdude_message(MSG_INFO, "Can't export GPIO %d, already exported/busy?: %s", pin, strerror(errno)); return r; } if (i == PIN_AVR_MISO) r=linuxgpio_dir_in(pin); else r=linuxgpio_dir_out(pin); if (r < 0) return r; if ((linuxgpio_fds[pin]=linuxgpio_openfd(pin)) < 0) return linuxgpio_fds[pin]; } } return(0); }
static int gpio_open(PROGRAMMER *pgm, char *port) { int i = 0; bitbang_check_prerequisites(pgm); for(i=0;i<N_PINS;i++) { if(pgm->pinno[i] != 0) { if(i == PIN_AVR_MISO) { gpio_fds[pgm->pinno[i]] = PINMODE_INPUT; pinMode(pgm->pinno[i], PINMODE_INPUT); } else { gpio_fds[pgm->pinno[i]] = PINMODE_OUTPUT;; pinMode(pgm->pinno[i], PINMODE_OUTPUT); } } } return(0); }
static int gpio_open(PROGRAMMER *pgm, char *port) { int r,i; char filepath[60]; bitbang_check_prerequisites(pgm); for (i=0; i<N_GPIO; i++) gpio_fds[i]=-1; for (i=0; i<N_PINS; i++) { if (pgm->pinno[i] != 0) { if ((r=gpio_export(pgm->pinno[i])) < 0) return r; if (i == PIN_AVR_MISO) r=gpio_dir_in(pgm->pinno[i]); else r=gpio_dir_out(pgm->pinno[i]); if (r < 0) return r; if ((r=snprintf(filepath, sizeof(filepath), "/sys/class/gpio/gpio%d/value", pgm->pinno[i]))<0) return r; if ((gpio_fds[pgm->pinno[i]]=open(filepath, O_RDWR))<0) return gpio_fds[pgm->pinno[i]]; } } return(0); }
static int serbb_open(PROGRAMMER *pgm, char *port) { DCB dcb; LPVOID lpMsgBuf; HANDLE hComPort = INVALID_HANDLE_VALUE; bitbang_check_prerequisites(pgm); hComPort = CreateFile(port, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hComPort == INVALID_HANDLE_VALUE) { 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: ser_open(): can't open device \"%s\": %s\n", progname, port, (char*)lpMsgBuf); LocalFree(lpMsgBuf); return -1; } if (!SetupComm(hComPort, W32SERBUFSIZE, W32SERBUFSIZE)) { CloseHandle(hComPort); fprintf(stderr, "%s: ser_open(): can't set buffers for \"%s\"\n", progname, port); return -1; } ZeroMemory(&dcb, sizeof(DCB)); dcb.DCBlength = sizeof(DCB); dcb.BaudRate = CBR_9600; dcb.fBinary = 1; dcb.fDtrControl = DTR_CONTROL_DISABLE; dcb.fRtsControl = RTS_CONTROL_DISABLE; dcb.ByteSize = 8; dcb.Parity = NOPARITY; dcb.StopBits = ONESTOPBIT; if (!SetCommState(hComPort, &dcb)) { CloseHandle(hComPort); fprintf(stderr, "%s: ser_open(): can't set com-state for \"%s\"\n", progname, port); return -1; } if (verbose > 2) fprintf(stderr, "%s: ser_open(): opened comm port \"%s\", handle 0x%x\n", progname, port, (int)hComPort); pgm->fd.pfd = (void *)hComPort; dtr = rts = txd = 0; return 0; }