@@ -47,9 +47,6 @@ type serport struct {
47
47
48
48
isClosingDueToError bool
49
49
50
- // counter incremented on queue, decremented on write
51
- itemsInBuffer int
52
-
53
50
// buffered channel containing up to 25600 outbound messages.
54
51
sendBuffered chan string
55
52
@@ -161,18 +158,29 @@ func (p *serport) reader(buftype string) {
161
158
// Keep track of time difference between two consecutive read with n == 0 and err == nil
162
159
// we get here if the port has been disconnected while open (cpu usage will jump to 100%)
163
160
// 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
171
165
}
166
+ timeCheckOpen = time .Now ()
172
167
}
173
168
}
174
169
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
176
184
}
177
185
}
178
186
@@ -213,10 +221,6 @@ func (p *serport) writerNoBuf() {
213
221
// if we get here, we were able to write successfully
214
222
// to the serial port because it blocks until it can write
215
223
216
- // decrement counter
217
- p .itemsInBuffer --
218
- log .Printf ("itemsInBuffer:%v\n " , p .itemsInBuffer )
219
-
220
224
// FINALLY, OF ALL THE CODE IN THIS PROJECT
221
225
// WE TRULY/FINALLY GET TO WRITE TO THE SERIAL PORT!
222
226
n2 , err := p .portIo .Write (data )
@@ -343,13 +347,8 @@ func spHandlerOpen(portname string, baud int, buftype string) {
343
347
serialPorts .List ()
344
348
}
345
349
346
- func spHandlerClose (p * serport ) {
350
+ func (p * serport ) Close ( ) {
347
351
p .isClosing = true
348
- h .broadcastSys <- []byte ("Closing serial port " + p .portConf .Name )
349
- spCloseReal (p )
350
- }
351
-
352
- func spCloseReal (p * serport ) {
353
352
p .bufferwatcher .Close ()
354
353
p .portIo .Close ()
355
354
serialPorts .MarkPortAsClosed (p .portName )
0 commit comments