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

50 lines
1 KiB
Go

package stty
import (
"errors"
"fmt"
"os/exec"
)
type real struct {
}
func (r *real) SetBaudRate(portPath string, baudrate int) error {
setBaudRateCMD := exec.Command("stty", "-F", portPath, fmt.Sprint(baudrate))
_, err := setBaudRateCMD.Output()
if err != nil {
return errors.Join(ERR_SET_BAUDRATE_FAILED(), err)
}
return nil
}
func (r *real) CheckBaudRate(portPath string) (baudrate int, err error) {
checkBaudRateCMD := exec.Command("stty", "-F", portPath, "speed")
sttyOutput, err := checkBaudRateCMD.Output()
if err != nil {
return 0, err
}
_, err = fmt.Sscan(string(sttyOutput), &baudrate)
if err != nil {
return 0, err
}
return baudrate, nil
}
func (r *real) TestBaudRate(portPath string, baudrate int) error {
err := r.SetBaudRate(portPath, baudrate)
if err != nil {
return err
}
newBaudRate, err := r.CheckBaudRate(portPath)
if err != nil {
return errors.Join(ERR_CHECK_BAUDRATE_FAILED(), err)
}
if newBaudRate == baudrate {
return nil
}
return ERR_BAUDRATE_NOT_SUPPORTED()
}