Skip to content

Commit ac3d1f9

Browse files
committed
Allow re-opening of already opened ports
1 parent 5bd8910 commit ac3d1f9

File tree

2 files changed

+13
-18
lines changed

2 files changed

+13
-18
lines changed

serial.go

+6-13
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ import (
3131

3232
type serialhub struct {
3333
// Opened serial ports.
34-
ports map[*serport]bool
34+
ports map[string]*serport
3535

3636
mu sync.Mutex
3737
}
@@ -60,15 +60,15 @@ type SpPortItem struct {
6060
var serialPorts SerialPortList
6161

6262
var sh = serialhub{
63-
ports: make(map[*serport]bool),
63+
ports: make(map[string]*serport),
6464
}
6565

6666
// Register serial ports from the connections.
6767
func (sh *serialhub) Register(port *serport) {
6868
sh.mu.Lock()
6969
//log.Print("Registering a port: ", p.portConf.Name)
7070
h.broadcastSys <- []byte("{\"Cmd\":\"Open\",\"Desc\":\"Got register/open on port.\",\"Port\":\"" + port.portConf.Name + "\",\"Baud\":" + strconv.Itoa(port.portConf.Baud) + ",\"BufferType\":\"" + port.BufferType + "\"}")
71-
sh.ports[port] = true
71+
sh.ports[port.portName] = port
7272
sh.mu.Unlock()
7373
}
7474

@@ -77,7 +77,7 @@ func (sh *serialhub) Unregister(port *serport) {
7777
sh.mu.Lock()
7878
//log.Print("Unregistering a port: ", p.portConf.Name)
7979
h.broadcastSys <- []byte("{\"Cmd\":\"Close\",\"Desc\":\"Got unregister/close on port.\",\"Port\":\"" + port.portConf.Name + "\",\"Baud\":" + strconv.Itoa(port.portConf.Baud) + "}")
80-
delete(sh.ports, port)
80+
delete(sh.ports, port.portName)
8181
close(port.sendBuffered)
8282
close(port.sendNoBuf)
8383
sh.mu.Unlock()
@@ -86,15 +86,8 @@ func (sh *serialhub) Unregister(port *serport) {
8686
func (sh *serialhub) FindPortByName(portname string) (*serport, bool) {
8787
sh.mu.Lock()
8888
defer sh.mu.Unlock()
89-
90-
for port := range sh.ports {
91-
if strings.EqualFold(port.portConf.Name, portname) {
92-
// we found our port
93-
//spHandlerClose(port)
94-
return port, true
95-
}
96-
}
97-
return nil, false
89+
port, ok := sh.ports[portname]
90+
return port, ok
9891
}
9992

10093
// List broadcasts a Json representation of the ports found

serialport.go

+7-5
Original file line numberDiff line numberDiff line change
@@ -300,11 +300,13 @@ func spHandlerOpen(portname string, baud int, buftype string) {
300300
sp, err := serial.Open(portname, mode)
301301
log.Print("Just tried to open port")
302302
if err != nil {
303-
//log.Fatal(err)
304-
log.Print("Error opening port " + err.Error())
305-
//h.broadcastSys <- []byte("Error opening port. " + err.Error())
306-
h.broadcastSys <- []byte("{\"Cmd\":\"OpenFail\",\"Desc\":\"Error opening port. " + err.Error() + "\",\"Port\":\"" + conf.Name + "\",\"Baud\":" + strconv.Itoa(conf.Baud) + "}")
307-
303+
if existingPort, ok := sh.FindPortByName(portname); ok {
304+
log.Print("Port already opened")
305+
h.broadcastSys <- []byte("{\"Cmd\":\"Open\",\"Desc\":\"Port already opened.\",\"Port\":\"" + existingPort.portConf.Name + "\",\"Baud\":" + strconv.Itoa(existingPort.portConf.Baud) + ",\"BufferType\":\"" + existingPort.BufferType + "\"}")
306+
} else {
307+
log.Print("Error opening port " + err.Error())
308+
h.broadcastSys <- []byte("{\"Cmd\":\"OpenFail\",\"Desc\":\"Error opening port. " + err.Error() + "\",\"Port\":\"" + conf.Name + "\",\"Baud\":" + strconv.Itoa(conf.Baud) + "}")
309+
}
308310
return
309311
}
310312
log.Print("Opened port successfully")

0 commit comments

Comments
 (0)