@@ -47,9 +47,6 @@ type serport struct {
4747
4848 isClosingDueToError bool
4949
50- // counter incremented on queue, decremented on write
51- itemsInBuffer int
52-
5350 // buffered channel containing up to 25600 outbound messages.
5451 sendBuffered chan string
5552
@@ -161,18 +158,29 @@ func (p *serport) reader(buftype string) {
161158 // Keep track of time difference between two consecutive read with n == 0 and err == nil
162159 // we get here if the port has been disconnected while open (cpu usage will jump to 100%)
163160 // let's close the port only if the events are extremely fast (<1ms)
164- if err == nil {
165- diff := time .Since (timeCheckOpen )
166- if diff .Nanoseconds () < 1000000 {
167- p .isClosingDueToError = true
168- break
169- }
170- timeCheckOpen = time .Now ()
161+ diff := time .Since (timeCheckOpen )
162+ if diff .Nanoseconds () < 1000000 {
163+ p .isClosingDueToError = true
164+ break
171165 }
166+ timeCheckOpen = time .Now ()
172167 }
173168 }
174169 if p .isClosingDueToError {
175- spCloseReal (p )
170+ p .Close ()
171+ }
172+ }
173+
174+ // Write data to the serial port.
175+ func (p * serport ) Write (data string , sendMode string ) {
176+ // if user sent in the commands as one text mode line
177+ switch sendMode {
178+ case "send" :
179+ p .sendBuffered <- data
180+ case "sendnobuf" :
181+ p .sendNoBuf <- []byte (data )
182+ case "sendraw" :
183+ p .sendRaw <- data
176184 }
177185}
178186
@@ -213,10 +221,6 @@ func (p *serport) writerNoBuf() {
213221 // if we get here, we were able to write successfully
214222 // to the serial port because it blocks until it can write
215223
216- // decrement counter
217- p .itemsInBuffer --
218- log .Printf ("itemsInBuffer:%v\n " , p .itemsInBuffer )
219-
220224 // FINALLY, OF ALL THE CODE IN THIS PROJECT
221225 // WE TRULY/FINALLY GET TO WRITE TO THE SERIAL PORT!
222226 n2 , err := p .portIo .Write (data )
@@ -343,13 +347,8 @@ func spHandlerOpen(portname string, baud int, buftype string) {
343347 serialPorts .List ()
344348}
345349
346- func spHandlerClose (p * serport ) {
350+ func (p * serport ) Close ( ) {
347351 p .isClosing = true
348- h .broadcastSys <- []byte ("Closing serial port " + p .portConf .Name )
349- spCloseReal (p )
350- }
351-
352- func spCloseReal (p * serport ) {
353352 p .bufferwatcher .Close ()
354353 p .portIo .Close ()
355354 serialPorts .MarkPortAsClosed (p .portName )
0 commit comments