Skip to content

Commit

Permalink
Disable DTR clearing on 1200-bps touch (only on Windows) (arduino#2234)
Browse files Browse the repository at this point in the history
The reason why it was originally introduced:
arduino/Arduino@a6909bd

Why we are removing it now?
* Windows does preserve the state of the RTS/DTR bits on successive
  opening of the serial port.
* The serial library used in the Arduino IDE 1.8.x has a bug when trying
  to set DTR=false, on successive opening of the port the DTR line is
  set back high by the USB serial driver. This works differently from
  the serial library we use in the Arduino CLI, that sets DTR=false for
  good and this change is preserved on the successive opening of the
  port.
* Having the serial port left in a state with DTR=false may cause
  problems to tools uploading later.

It may probably completely removed, but for now, to reduce the testing
surface, it will be disabled only for Windows.
  • Loading branch information
cmaglie committed Jun 30, 2023
1 parent b47d883 commit fe6d749
Showing 1 changed file with 10 additions and 4 deletions.
14 changes: 10 additions & 4 deletions arduino/serialutils/serialutils.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ package serialutils

import (
"fmt"
"runtime"
"strings"
"time"

Expand All @@ -37,10 +38,15 @@ func TouchSerialPortAt1200bps(port string) error {
return errors.WithMessage(err, tr("opening port at 1200bps"))
}

// Set DTR to false
if err = p.SetDTR(false); err != nil {
p.Close()
return errors.WithMessage(err, tr("setting DTR to OFF"))
if runtime.GOOS != "windows" {
// This is not required on Windows
// TODO: Investigate if it can be removed for other OS too

// Set DTR to false
if err = p.SetDTR(false); err != nil {
p.Close()
return errors.WithMessage(err, tr("setting DTR to OFF"))
}
}

// Close serial port
Expand Down

0 comments on commit fe6d749

Please sign in to comment.