47 lines
918 B
Go
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()
|
|
}
|