Пример #1
0
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;
}
Пример #2
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;
}
Пример #3
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;
}
Пример #4
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;
}
Пример #5
0
static void arduino_close(PROGRAMMER * pgm)
{
  serial_set_dtr_rts(&pgm->fd, 0);
  serial_close(&pgm->fd);
  pgm->fd.ifd = -1;
}