Added support for sending breaks

This commit is contained in:
Jaime
2022-05-04 12:03:56 +02:00
committed by Cristian Maglie
parent f85edb454b
commit 75542ba31a
7 changed files with 30 additions and 0 deletions

View File

@@ -48,6 +48,9 @@ type Port interface {
// Close the serial port // Close the serial port
Close() error Close() error
// Break sends a break for a determined time
Break(time.Duration) error
} }
// NoTimeout should be used as a parameter to SetReadTimeout to disable timeout. // NoTimeout should be used as a parameter to SetReadTimeout to disable timeout.

View File

@@ -14,6 +14,8 @@ const regexFilter = "^(cu|tty)\\..*"
const ioctlTcgetattr = unix.TIOCGETA const ioctlTcgetattr = unix.TIOCGETA
const ioctlTcsetattr = unix.TIOCSETA const ioctlTcsetattr = unix.TIOCSETA
const ioctlTcflsh = unix.TIOCFLUSH const ioctlTcflsh = unix.TIOCFLUSH
const ioctlTioccbrk = unix.TIOCCBRK
const ioctlTiocsbrk = unix.TIOCSBRK
func setTermSettingsBaudrate(speed int, settings *unix.Termios) (error, bool) { func setTermSettingsBaudrate(speed int, settings *unix.Termios) (error, bool) {
baudrate, ok := baudrateMap[speed] baudrate, ok := baudrateMap[speed]

View File

@@ -56,6 +56,8 @@ const tcCRTSCTS uint32 = tcCCTS_OFLOW
const ioctlTcgetattr = unix.TIOCGETA const ioctlTcgetattr = unix.TIOCGETA
const ioctlTcsetattr = unix.TIOCSETA const ioctlTcsetattr = unix.TIOCSETA
const ioctlTcflsh = unix.TIOCFLUSH const ioctlTcflsh = unix.TIOCFLUSH
const ioctlTioccbrk = unix.TIOCCBRK
const ioctlTiocsbrk = unix.TIOCSBRK
func toTermiosSpeedType(speed uint32) uint32 { func toTermiosSpeedType(speed uint32) uint32 {
return speed return speed

View File

@@ -63,6 +63,8 @@ const tcCRTSCTS uint32 = unix.CRTSCTS
const ioctlTcgetattr = unix.TCGETS const ioctlTcgetattr = unix.TCGETS
const ioctlTcsetattr = unix.TCSETS const ioctlTcsetattr = unix.TCSETS
const ioctlTcflsh = unix.TCFLSH const ioctlTcflsh = unix.TCFLSH
const ioctlTioccbrk = unix.TIOCCBRK
const ioctlTiocsbrk = unix.TIOCSBRK
func toTermiosSpeedType(speed uint32) uint32 { func toTermiosSpeedType(speed uint32) uint32 {
return speed return speed

View File

@@ -56,6 +56,8 @@ const tcCRTSCTS uint32 = tcCCTS_OFLOW
const ioctlTcgetattr = unix.TIOCGETA const ioctlTcgetattr = unix.TIOCGETA
const ioctlTcsetattr = unix.TIOCSETA const ioctlTcsetattr = unix.TIOCSETA
const ioctlTcflsh = unix.TIOCFLUSH const ioctlTcflsh = unix.TIOCFLUSH
const ioctlTioccbrk = unix.TIOCCBRK
const ioctlTiocsbrk = unix.TIOCSBRK
func toTermiosSpeedType(speed uint32) int32 { func toTermiosSpeedType(speed uint32) int32 {
return int32(speed) return int32(speed)

View File

@@ -4,6 +4,7 @@
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
// //
//go:build linux || darwin || freebsd || openbsd
// +build linux darwin freebsd openbsd // +build linux darwin freebsd openbsd
package serial package serial
@@ -117,6 +118,20 @@ func (port *unixPort) Write(p []byte) (n int, err error) {
return return
} }
func (port *unixPort) Break(t time.Duration) error {
if err := unix.IoctlSetInt(port.handle, ioctlTiocsbrk, 0); err != nil {
return err
}
time.Sleep(t)
if err := unix.IoctlSetInt(port.handle, ioctlTioccbrk, 0); err != nil {
return err
}
return nil
}
func (port *unixPort) SetMode(mode *Mode) error { func (port *unixPort) SetMode(mode *Mode) error {
settings, err := port.getTermSettings() settings, err := port.getTermSettings()
if err != nil { if err != nil {

View File

@@ -381,6 +381,10 @@ func (port *windowsPort) SetReadTimeout(timeout time.Duration) error {
return nil return nil
} }
func (port *windowsPort) Break(d time.Duration) error {
return &PortError{code: FunctionNotImplemented}
}
func createOverlappedEvent() (*syscall.Overlapped, error) { func createOverlappedEvent() (*syscall.Overlapped, error) {
h, err := createEvent(nil, true, false, nil) h, err := createEvent(nil, true, false, nil)
return &syscall.Overlapped{HEvent: h}, err return &syscall.Overlapped{HEvent: h}, err