You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// discoverLoop periodically update the list of ports found
151
151
funcdiscoverLoop() {
152
-
SerialPorts.Mu.Lock()
153
-
SerialPorts.Network=false
154
-
SerialPorts.Ports=make([]SpPortItem, 0)
155
-
SerialPorts.Mu.Unlock()
156
-
NetworkPorts.Mu.Lock()
157
-
NetworkPorts.Network=true
158
-
NetworkPorts.Ports=make([]SpPortItem, 0)
159
-
NetworkPorts.Mu.Unlock()
152
+
serialPorts.Mu.Lock()
153
+
serialPorts.Network=false
154
+
serialPorts.Ports=make([]SpPortItem, 0)
155
+
serialPorts.Mu.Unlock()
156
+
networkPorts.Mu.Lock()
157
+
networkPorts.Network=true
158
+
networkPorts.Ports=make([]SpPortItem, 0)
159
+
networkPorts.Mu.Unlock()
160
160
161
161
gofunc() {
162
162
for {
163
163
if!upload.Busy {
164
-
spListDual(false)
164
+
updateSerialPortList()
165
165
}
166
166
time.Sleep(2*time.Second)
167
167
}
168
168
}()
169
169
gofunc() {
170
170
for {
171
-
spListDual(true)
171
+
updateNetworkPortList()
172
172
time.Sleep(2*time.Second)
173
173
}
174
174
}()
175
175
}
176
176
177
-
funcspListDual(networkbool) {
177
+
varserialEnumeratorLock sync.Mutex
178
178
179
-
// call our os specific implementation of getting the serial list
180
-
list, err:=GetList(network)
179
+
funcupdateSerialPortList() {
180
+
if!serialEnumeratorLock.TryLock() {
181
+
return
182
+
}
183
+
deferserialEnumeratorLock.Unlock()
184
+
ports, err:=enumerateSerialPorts()
185
+
iferr!=nil {
186
+
// TODO: report error?
181
187
182
-
//log.Println(list)
183
-
//log.Println(err)
188
+
// Empty port list if they can not be detected
189
+
ports= []OsSerialPort{}
190
+
}
191
+
list:=spListDual(ports)
192
+
serialPorts.Mu.Lock()
193
+
serialPorts.Ports=list
194
+
serialPorts.Mu.Unlock()
195
+
}
184
196
197
+
funcupdateNetworkPortList() {
198
+
ports, err:=enumerateNetworkPorts()
185
199
iferr!=nil {
186
-
// avoid reporting dummy data if an error occurred
187
-
return
188
-
}
200
+
// TODO: report error?
189
201
190
-
// do a quick loop to see if any of our open ports
191
-
// did not end up in the list port list. this can
192
-
// happen on windows in a fallback scenario where an
193
-
// open port can't be identified because it is locked,
194
-
// so just solve that by manually inserting
195
-
// if network {
196
-
// for port := range sh.ports {
197
-
198
-
// isFound := false
199
-
// for _, item := range list {
200
-
// if strings.ToLower(port.portConf.Name) == strings.ToLower(item.Name) {
201
-
// isFound = true
202
-
// }
203
-
// }
204
-
205
-
// if !isFound {
206
-
// // artificially push to front of port list
207
-
// log.Println(fmt.Sprintf("Did not find an open port in the serial port list. We are going to artificially push it onto the list. port:%v", port.portConf.Name))
0 commit comments