stty/stty.go
2025-05-05 00:00:56 +03:00

47 lines
918 B
Go

package stty
import (
"os"
"golang.org/x/sys/unix"
"golang.org/x/term"
"os/exec"
)
type stty interface{
SetBaudRate(portPath string, baudrate int) error
CheckBaudRate(portPath string) (baudrate int, err error)
TestBaudRate(portPath string, baudrate int) error
}
var cmd stty
func CMD() stty {
return cmd
}
func init() {
checkSttyCMD := exec.Command("stty", "--version")
sttyOutput, err := checkSttyCMD.Output()
if err != nil || len(sttyOutput) == 0 {
cmd = &dummy{errStack(ERR_STTY_MISSING(),err)}
}
cmd = &real{}
}
func ValidateTtyFile(filepath string) error {
file, err := os.Open(filepath)
if err != nil {
return errStack(ERR_CANNOT_OPEN_FILE(), err)
}
defer file.Close()
err = unix.Access(filepath, unix.W_OK)
if err != nil {
return errStack(ERR_NO_WRITE_ACCESS(), err)
}
if term.IsTerminal(int(file.Fd())) {
return nil
}
return ERR_NOT_TTY()
}