adam-gui/comms/comms.go

70 lines
1.4 KiB
Go
Raw Normal View History

2024-04-21 21:45:18 +02:00
package comms
import (
"adam-gui/config"
"adam-gui/utils"
"fmt"
"go.bug.st/serial"
"go.bug.st/serial/enumerator"
)
var BoardBlocked chan bool = make(chan bool, 10)
var SerialPortToUse string
func EnumSerialDevices() []*enumerator.PortDetails {
var err error
detectedPorts, err := enumerator.GetDetailedPortsList()
utils.CheckError(err)
return detectedPorts
}
func EstablishComms() serial.Port {
mode := &serial.Mode{
BaudRate: config.SerialPortBaudRate,
}
port, err := serial.Open(SerialPortToUse, mode)
utils.CheckError(err)
return port
}
func Measure(port serial.Port, verb string) string {
_, err := port.Write([]byte(verb + "\r\n"))
utils.CheckError(err)
buff := make([]byte, 100)
n := 0
for {
n, err = port.Read(buff)
utils.CheckError(err)
if n == 0 {
break
}
}
/*re := regexp.MustCompile("[0-9.-+]+")
fmt.Printf("println: %v\n", strings.Join(re.FindAllString("+4122000.kg", -1), ""))*/
return string(buff[:n-2]) // remove \r\n
}
func Tare(port serial.Port) {
_, err := port.Write([]byte("Z\r\n"))
utils.CheckError(err)
}
func Hold(port serial.Port) {
_, err := port.Write([]byte("H\r\n"))
utils.CheckError(err)
}
func SetDefaultSerialPort() bool {
found := false
serialDevices := EnumSerialDevices()
for _, port := range serialDevices {
fmt.Printf("%s %s\n", port.SerialNumber, port.Name)
if port.SerialNumber == config.DefaultPortSerialNumber {
SerialPortToUse = port.Name
found = true
}
}
return found
}