46 lines
990 B
Go
46 lines
990 B
Go
package stty
|
|
|
|
import(
|
|
"os/exec"
|
|
"fmt"
|
|
)
|
|
|
|
type real struct {
|
|
}
|
|
|
|
func (r *real) SetBaudRate(portPath string, baudrate int) error {
|
|
setBaudRateCMD := exec.Command("stty", "-F", portPath, fmt.Sprint(baudrate))
|
|
_, err := setBaudRateCMD.Output()
|
|
return errStack(ERR_SET_BAUDRATE_FAILED(), err)
|
|
}
|
|
|
|
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 errStack(ERR_CHECK_BAUDRATE_FAILED(), err)
|
|
}
|
|
|
|
if newBaudRate == baudrate {
|
|
return nil
|
|
}
|
|
return ERR_BAUDRATE_NOT_SUPPORTED()
|
|
}
|