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() }