76 lines
1.1 KiB
Go
76 lines
1.1 KiB
Go
package manager
|
|
|
|
import (
|
|
"bufio"
|
|
"encoding/json"
|
|
"log"
|
|
|
|
"github.com/jacobsa/go-serial/serial"
|
|
)
|
|
|
|
type _manager struct {
|
|
devices map[string]*_device
|
|
SyncListener EventHandler
|
|
RecvListener EventHandler
|
|
}
|
|
|
|
func (m *_manager) onAdd(iface string) {
|
|
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.
|
|
go func() {
|
|
port, err := serial.Open(options)
|
|
if err != nil {
|
|
log.Fatalf("serial.Open: %v", err)
|
|
}
|
|
|
|
reader := bufio.NewReader(port)
|
|
|
|
for {
|
|
port.Write([]byte("Introduce\n"))
|
|
|
|
b, _, err := reader.ReadLine()
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
var obj map[string]interface{}
|
|
err = json.Unmarshal(b, &obj)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
|
|
uuid, ok := obj["uuid"]
|
|
if ok {
|
|
m.devices[iface] = &_device{
|
|
UUID: uuid.(string),
|
|
IfaceName: iface,
|
|
Iface: port,
|
|
}
|
|
break
|
|
}
|
|
}
|
|
}()
|
|
|
|
}
|
|
|
|
func (m *_manager) onSync(e Event) {
|
|
|
|
}
|
|
|
|
func (m *_manager) onRecv(e Event) {
|
|
|
|
}
|