diff --git a/src/flowcontrol/app.go b/src/flowcontrol/app.go index 6818d8d..ddf5802 100644 --- a/src/flowcontrol/app.go +++ b/src/flowcontrol/app.go @@ -13,8 +13,8 @@ import ( "time" "fmt" + "github.com/charlie-haley/flowcontrol/flwserial" "github.com/charlie-haley/flowcontrol/setup" - "github.com/tarm/serial" "github.com/wailsapp/wails" ) @@ -38,8 +38,8 @@ type wailsstruct struct { func (w *wailsstruct) WailsInit(runtime *wails.Runtime) error { w.runtime = runtime - c := &serial.Config{Name: "COM6", Baud: 9600} - s, err := serial.OpenPort(c) + + s, err := flwserial.GetValidPort() //Go Routine for fetching stats from the flowcontrol-monitor application go func() { for { diff --git a/src/flowcontrol/flwserial/flwserial_linux.go b/src/flowcontrol/flwserial/flwserial_linux.go new file mode 100644 index 0000000..6c2abee --- /dev/null +++ b/src/flowcontrol/flwserial/flwserial_linux.go @@ -0,0 +1,12 @@ +// +build linux + +package flwserial + + +import ( + "errors" +) + +func SetupCmd() { + return nil, errors.New("Not implemented") +} \ No newline at end of file diff --git a/src/flowcontrol/flwserial/flwserial_windows.go b/src/flowcontrol/flwserial/flwserial_windows.go new file mode 100644 index 0000000..823a4dc --- /dev/null +++ b/src/flowcontrol/flwserial/flwserial_windows.go @@ -0,0 +1,54 @@ +// +build windows + +package flwserial + +import ( + "golang.org/x/sys/windows/registry" + "github.com/tarm/serial" + "log" + "bufio" + "errors" +) + +func GetValidPort() (*serial.Port, error) { + //Find active serial ports from registry key + k, err := registry.OpenKey(registry.LOCAL_MACHINE, `HARDWARE\\DEVICEMAP\\SERIALCOMM`, registry.QUERY_VALUE) + if err != nil { + log.Fatal(err) + } + defer k.Close() + ki, err := k.Stat() + if err != nil { + log.Fatal(err) + } + r, err := k.ReadValueNames(int(ki.ValueCount)) + if err != nil { + log.Fatal(err) + } + kvalue := make([]string, ki.ValueCount) + for i, test := range r { + q, _, err := k.GetStringValue(test) + if err != nil { + log.Fatal(err) + } + kvalue[i] = q + } + var s *serial.Port + for _, element := range kvalue { + c := &serial.Config{Name: element, Baud: 9600} + s, err = serial.OpenPort(c) + if err != nil { + log.Print("Can't connect to port") + continue + } + scanner := bufio.NewScanner(s) + for scanner.Scan() { + text := scanner.Text() + //Rubbish way of checking if the device is correct + if text[0] == '{' { + return s, nil + } + } + } + return nil, errors.New("Error finding valid port") +} \ No newline at end of file diff --git a/src/flowcontrol/go.mod b/src/flowcontrol/go.mod index 5d5a115..8e2d92b 100644 --- a/src/flowcontrol/go.mod +++ b/src/flowcontrol/go.mod @@ -4,5 +4,6 @@ go 1.16 require ( github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07 - github.com/wailsapp/wails v1.16.0 + github.com/wailsapp/wails v1.16.3 + golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd ) diff --git a/src/flowcontrol/go.sum b/src/flowcontrol/go.sum index 2b7f608..cf62f27 100644 --- a/src/flowcontrol/go.sum +++ b/src/flowcontrol/go.sum @@ -59,8 +59,8 @@ github.com/syossan27/tebata v0.0.0-20180602121909-b283fe4bc5ba h1:2DHfQOxcpWdGf5 github.com/syossan27/tebata v0.0.0-20180602121909-b283fe4bc5ba/go.mod h1:iLnlXG2Pakcii2CU0cbY07DRCSvpWNa7nFxtevhOChk= github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07 h1:UyzmZLoiDWMRywV4DUYb9Fbt8uiOSooupjTq10vpvnU= github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= -github.com/wailsapp/wails v1.16.0 h1:zi5qaL+ezlf++EdGA0eyF/sofDYpoA2yKGlnFWinVyk= -github.com/wailsapp/wails v1.16.0/go.mod h1:aADbAvTzZrKGd4Td7d1l4Dp5Hx7lLJEvVH7guIHoDf8= +github.com/wailsapp/wails v1.16.3 h1:wuJJU9PnnrrDvhh+DTr1MfqUSR1PDR5H+RilM5Wwd7c= +github.com/wailsapp/wails v1.16.3/go.mod h1:aADbAvTzZrKGd4Td7d1l4Dp5Hx7lLJEvVH7guIHoDf8= golang.org/x/crypto v0.0.0-20190123085648-057139ce5d2b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=