static int arduino_open(PROGRAMMER * pgm, char * port) { strcpy(pgm->port, port); if (serial_open(port, pgm->baudrate? pgm->baudrate: 115200, &pgm->fd)==-1) { return -1; } /* Clear DTR and RTS to unload the RESET capacitor * (for example in Arduino) */ serial_set_dtr_rts(&pgm->fd, 0); usleep(50*1000); /* Set DTR and RTS back to high */ serial_set_dtr_rts(&pgm->fd, 1); usleep(50*1000); /* * drain any extraneous input */ stk500_drain(pgm, 0); if (stk500_getsync(pgm) < 0) return -1; return 0; }
static int arduino_open(PROGRAMMER * pgm, char * port) { union pinfo pinfo; strcpy(pgm->port, port); pinfo.baud = pgm->baudrate? pgm->baudrate: 115200; if (serial_open(port, pinfo, &pgm->fd)==-1) { return -1; } #ifdef CUSTOMER_REST_PIN gpio_export(pgm->reset_pin); gpio_set_dir(pgm->reset_pin, OUT); gpio_set_value(pgm->reset_pin,LOW); usleep(250*1000); gpio_set_value(pgm->reset_pin,HIGH); usleep(50*1000); #else /* Clear DTR and RTS to unload the RESET capacitor * (for example in Arduino) */ serial_set_dtr_rts(&pgm->fd, 0); usleep(250*1000); /* Set DTR and RTS back to high */ serial_set_dtr_rts(&pgm->fd, 1); usleep(50*1000); #endif /* * drain any extraneous input */ stk500_drain(pgm, 0); if (stk500_getsync(pgm) < 0) return -1; return 0; }
static int wiring_open(PROGRAMMER * pgm, char * port) { int timetosnooze; void *mycookie = STK500V2PDATA(pgm)->chained_pdata; union pinfo pinfo; strcpy(pgm->port, port); pinfo.baud = pgm->baudrate ? pgm->baudrate: 115200; serial_open(port, pinfo, &pgm->fd); /* If we have a snoozetime, then we wait and do NOT toggle DTR/RTS */ if (WIRINGPDATA(mycookie)->snoozetime > 0) { timetosnooze = WIRINGPDATA(mycookie)->snoozetime; avrdude_message(MSG_NOTICE2, "%s: wiring_open(): snoozing for %d ms\n", progname, timetosnooze); while (timetosnooze--) usleep(1000); avrdude_message(MSG_NOTICE2, "%s: wiring_open(): done snoozing\n", progname); } else { /* Perform Wiring programming mode RESET. */ /* This effectively *releases* both DTR and RTS. */ /* i.e. both DTR and RTS rise to a HIGH logic level */ /* since they are active LOW signals. */ avrdude_message(MSG_NOTICE2, "%s: wiring_open(): releasing DTR/RTS\n", progname); serial_set_dtr_rts(&pgm->fd, 0); usleep(50*1000); /* After releasing for 50 milliseconds, DTR and RTS */ /* are asserted (i.e. logic LOW) again. */ avrdude_message(MSG_NOTICE2, "%s: wiring_open(): asserting DTR/RTS\n", progname); serial_set_dtr_rts(&pgm->fd, 1); usleep(50*1000); } /* drain any extraneous input */ stk500v2_drain(pgm, 0); if (stk500v2_getsync(pgm) < 0) return -1; return 0; }
static void arduino_close(PROGRAMMER * pgm) { #ifdef CUSTOMER_REST_PIN gpio_set_value(pgm->reset_pin,LOW); gpio_unexport(pgm->reset_pin); #else serial_set_dtr_rts(&pgm->fd, 0); #endif serial_close(&pgm->fd); pgm->fd.ifd = -1; }
static void arduino_close(PROGRAMMER * pgm) { serial_set_dtr_rts(&pgm->fd, 0); serial_close(&pgm->fd); pgm->fd.ifd = -1; }