stty/stty.go
2025-05-08 20:42:53 +03:00

50 lines
962 B
Go

package stty
import (
"errors"
"fmt"
"os"
"os/exec"
"golang.org/x/sys/unix"
"golang.org/x/term"
)
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{errors.Join(ERR_STTY_MISSING(),err)}
}
cmd = &real{}
}
func ValidateTtyFile(filepath string) error {
file, err := os.Open(filepath)
if err != nil {
return errors.Join(ERR_CANNOT_OPEN_FILE(), fmt.Errorf(err.Error()))
}
defer file.Close()
err = unix.Access(filepath, unix.W_OK)
if err != nil {
return errors.Join(ERR_NO_WRITE_ACCESS(), err)
}
if term.IsTerminal(int(file.Fd())) {
return nil
}
return ERR_NOT_TTY()
}