Commit fe6d7499 authored by Cristian Maglie's avatar Cristian Maglie

Disable DTR clearing on 1200-bps touch (only on Windows) (#2234)

The reason why it was originally introduced:
https://github.com/arduino/Arduino/pull/2709/commits/a6909bdb49d99253b4e684365e72e5dce31a49a7

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.
parent b47d883d
...@@ -17,6 +17,7 @@ package serialutils ...@@ -17,6 +17,7 @@ package serialutils
import ( import (
"fmt" "fmt"
"runtime"
"strings" "strings"
"time" "time"
...@@ -37,10 +38,15 @@ func TouchSerialPortAt1200bps(port string) error { ...@@ -37,10 +38,15 @@ func TouchSerialPortAt1200bps(port string) error {
return errors.WithMessage(err, tr("opening port at 1200bps")) return errors.WithMessage(err, tr("opening port at 1200bps"))
} }
// Set DTR to false if runtime.GOOS != "windows" {
if err = p.SetDTR(false); err != nil { // This is not required on Windows
p.Close() // TODO: Investigate if it can be removed for other OS too
return errors.WithMessage(err, tr("setting DTR to OFF"))
// 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 // Close serial port
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment