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 }