etri-smartfarm-poc-controll.../cli.go

104 lines
1.7 KiB
Go
Raw Normal View History

2021-12-10 01:14:34 +00:00
package manager
import (
"bufio"
"context"
"encoding/json"
"fmt"
"log"
"time"
"git.godopu.net/lab/etri-smartfarm-poc-controller-serial/puserial"
"github.com/jacobsa/go-serial/serial"
"github.com/rjeczalik/notify"
)
var ctx context.Context
var cancel context.CancelFunc
var ch_discover chan notify.EventInfo
var _managerObj *_manager
func init() {
ctx, cancel = context.WithCancel(context.Background())
ch_discover = make(chan notify.EventInfo)
_managerObj = &_manager{
devices: map[string]*_device{},
SyncListener: nil,
RecvListener: nil,
}
}
func Close() {
cancel()
}
func register(iface string) {
fmt.Println("Handle] ", iface)
// change permission
err := ChangePermission(iface)
if err != nil {
panic(err)
}
// Set up options.
options := serial.OpenOptions{
PortName: iface,
BaudRate: 9600,
DataBits: 8,
StopBits: 1,
MinimumReadSize: 16,
}
// Open the port.
port, err := serial.Open(options)
if err != nil {
log.Fatalf("serial.Open: %v", err)
}
// Make sure to close it later.
defer port.Close()
reader := bufio.NewReader(port)
dev := &_device{}
for {
b, _, _ := reader.ReadLine()
err := json.Unmarshal(b, &dev)
if err != nil {
continue
}
fmt.Println(dev)
port.Write([]byte{200})
time.Sleep(time.Second)
break
}
// var data string
}
func Run() error {
iface, err := puserial.InitDevice()
if err != nil {
if err.Error() != "USB Not found" {
return err
}
} else {
// _managerObj.onAdd(iface)
register(iface)
}
go puserial.WatchNewDevice(ctx, ch_discover)
for {
e, ok := <-ch_discover
if !ok {
log.Println("manager exit")
return nil
}
register(e.Path())
}
}