diff --git a/serial.go b/serial.go index f576c60a..96778734 100755 --- a/serial.go +++ b/serial.go @@ -239,6 +239,35 @@ 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() + port := sp.getPortByName(portname) + if port != nil { + port.IsOpen = true + } +} + +// MarkPortAsClosed marks a port as no more opened by the user +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() }