自动化测试
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

130 lines
2.2 KiB

package serial
import (
"time"
"go.bug.st/serial"
)
type Mode serial.Mode
type Uart struct {
Port string `json:"port"`
Baud int `json:"baud"`
Check serial.Parity `json:"check"`
Data int `json:"data"`
Stop serial.StopBits `json:"stop"`
}
const (
PARATY_NONE = serial.NoParity
PARATY_ODD = serial.OddParity
PARATY_EVEN = serial.EvenParity
PARATY_MARK = serial.MarkParity
PARATY_SPACE = serial.SpaceParity
STOP_1 = serial.OneStopBit
STOP_15 = serial.OnePointFiveStopBits
STOP_2 = serial.TwoStopBits
)
var ModeDef = &serial.Mode{
BaudRate: 115200,
DataBits: 8,
Parity: PARATY_NONE,
StopBits: STOP_1,
}
func GetComList() []string {
list, err := serial.GetPortsList()
if err != nil {
return list
}
return list
}
type SerialPort struct {
p serial.Port
flag bool
}
func OpenSerial(com string, conf *serial.Mode) (SerialPort, error) {
var p serial.Port
var err error
s := SerialPort{}
s.flag = false
index := 5 //重复打开串口5次
p, err = serial.Open(com, conf)
// 打开串口失败,重新打开
if err != nil {
for i := 0; i < index; i++ {
time.Sleep(time.Millisecond)
p, err = serial.Open(com, conf)
if err == nil {
s.flag = true
break
} else {
}
}
} else {
s.flag = true
}
if !s.flag {
return s, err
}
p.SetReadTimeout(time.Millisecond * 100)
s.p = p
return s, nil
}
func CheckCom(com string) bool {
s, _ := OpenSerial(com, ModeDef)
if s.flag {
return true
} else {
return false
}
}
func (s *SerialPort) GetFlag() bool {
return s.flag
}
func (s *SerialPort) SetFlag(flag bool) {
s.flag = flag
}
func (s *SerialPort) ReadString() string {
var buf = make([]byte, 1024)
n, err := s.p.Read(buf)
if err != nil {
return ""
}
str := string(buf[0:n])
return str
}
func (s *SerialPort) WriteString(str string) bool {
_, err := s.p.Write([]byte(str))
if err != nil {
return false
}
return true
}
func (s *SerialPort) Close() bool {
if err := s.p.Close(); err != nil {
return false
}
return true
}
func (s *SerialPort) ResetReadBuff() bool {
if err := s.p.ResetOutputBuffer(); err != nil {
return false
} else {
return true
}
}
// func (s *SerialPort) SetTimeOut(tim int){
// s.p.SetReadTimeout(time)
// }