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()) } }