From 9f10d3c198cf1627e5ed67fdef3740926632a38d Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Tue, 16 Apr 2024 17:04:08 +0200 Subject: [PATCH 1/2] Restore functionality of 'is_open' field in portlist --- serial.go | 27 +++++++++++++++++++++++++++ serialport.go | 4 ++++ 2 files changed, 31 insertions(+) diff --git a/serial.go b/serial.go index f576c60a..22502763 100755 --- a/serial.go +++ b/serial.go @@ -239,6 +239,33 @@ func (sp *SerialPortList) remove(removedPort *discovery.Port) { }) } +func (sp *SerialPortList) MarkPortAsOpened(portname string) { + sp.portsLock.Lock() + defer sp.portsLock.Unlock() + port := sp.getPortByName(portname) + if port != nil { + port.IsOpen = true + } +} + +func (sp *SerialPortList) MarkPortAsClosed(portname string) { + sp.portsLock.Lock() + defer sp.portsLock.Unlock() + port := sp.getPortByName(portname) + if port != nil { + port.IsOpen = false + } +} + +func (sp *SerialPortList) getPortByName(portname string) *SpPortItem { + for _, port := range sp.Ports { + if port.Name == portname { + return port + } + } + return nil +} + func spErr(err string) { //log.Println("Sending err back: ", err) //h.broadcastSys <- []byte(err) diff --git a/serialport.go b/serialport.go index 084d7c9a..43c810ff 100755 --- a/serialport.go +++ b/serialport.go @@ -39,6 +39,7 @@ type serport struct { // The serial port connection. portConf *SerialConfig portIo io.ReadWriteCloser + portName string // Keep track of whether we're being actively closed // just so we don't show scary error messages @@ -305,6 +306,7 @@ func spHandlerOpen(portname string, baud int, buftype string) { sendRaw: make(chan string), portConf: conf, portIo: sp, + portName: portname, BufferType: buftype} var bw Bufferflow @@ -326,6 +328,7 @@ func spHandlerOpen(portname string, baud int, buftype string) { sh.Register(p) defer sh.Unregister(p) + serialPorts.MarkPortAsOpened(portname) serialPorts.List() // this is internally buffered thread to not send to serial port if blocked @@ -349,5 +352,6 @@ func spHandlerClose(p *serport) { func spCloseReal(p *serport) { p.bufferwatcher.Close() p.portIo.Close() + serialPorts.MarkPortAsClosed(p.portName) serialPorts.List() } From ff59a8bf182f0e5e180bbd00c79d821f9159b75e Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Tue, 16 Apr 2024 17:07:01 +0200 Subject: [PATCH 2/2] Added comments --- serial.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/serial.go b/serial.go index 22502763..96778734 100755 --- a/serial.go +++ b/serial.go @@ -239,6 +239,7 @@ func (sp *SerialPortList) remove(removedPort *discovery.Port) { }) } +// MarkPortAsOpened marks a port as opened by the user func (sp *SerialPortList) MarkPortAsOpened(portname string) { sp.portsLock.Lock() defer sp.portsLock.Unlock() @@ -248,6 +249,7 @@ func (sp *SerialPortList) MarkPortAsOpened(portname string) { } } +// MarkPortAsClosed marks a port as no more opened by the user func (sp *SerialPortList) MarkPortAsClosed(portname string) { sp.portsLock.Lock() defer sp.portsLock.Unlock()