Skip to content

Commit 2713a28

Browse files
committed
Implemented board list with discoveries
1 parent 898eb48 commit 2713a28

File tree

3 files changed

+31
-71
lines changed

3 files changed

+31
-71
lines changed

arduino/discovery/discoverymanager/discoverymanager.go

Lines changed: 25 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -43,16 +43,22 @@ func (dm *DiscoveryManager) Add(disc *discovery.PluggableDiscovery) error {
4343
return nil
4444
}
4545

46-
// StartAll the discoveries for this DiscoveryManager,
46+
// RunAll the discoveries for this DiscoveryManager,
4747
// returns the first error it meets or nil
48-
func (dm *DiscoveryManager) StartAll() error {
48+
func (dm *DiscoveryManager) RunAll() error {
4949
for _, d := range dm.discoveries {
50-
err := d.Start()
51-
if err != nil {
50+
if err := d.Run(); err != nil {
5251
return err
5352
}
54-
err = d.StartSync()
55-
if err != nil {
53+
}
54+
return nil
55+
}
56+
57+
// StartAll the discoveries for this DiscoveryManager,
58+
// returns the first error it meets or nil
59+
func (dm *DiscoveryManager) StartAll() error {
60+
for _, d := range dm.discoveries {
61+
if err := d.Start(); err != nil {
5662
return err
5763
}
5864
}
@@ -71,29 +77,20 @@ func (dm *DiscoveryManager) StopAll() error {
7177
return nil
7278
}
7379

74-
// ListPorts return the current list of ports detected from all discoveries
75-
func (dm *DiscoveryManager) ListPorts() []*discovery.Port {
76-
// c := make(chan []*discovery.Port, len(dm.discoveries))
77-
78-
// var wg sync.WaitGroup
79-
// for _, d := range dm.discoveries {
80-
// wg.Add(1)
81-
// d := d
82-
// go func() {
83-
// c <- d.ListSync()
84-
// wg.Done()
85-
// }()
86-
// }
87-
// wg.Wait()
88-
// // Close the channel only after all the goroutines are finished
89-
// close(c)
90-
91-
// ports := []*discovery.Port{}
92-
// for p := range c {
93-
// ports = append(ports, p...)
94-
// }
80+
func (dm *DiscoveryManager) List() []*discovery.Port {
81+
res := []*discovery.Port{}
82+
for _, disc := range dm.discoveries {
83+
l, err := disc.List()
84+
if err != nil {
85+
continue
86+
}
87+
res = append(res, l...)
88+
}
89+
return res
90+
}
9591

96-
// return ports
92+
// ListPorts return the current list of ports detected from all discoveries
93+
func (dm *DiscoveryManager) ListSync() []*discovery.Port {
9794
res := []*discovery.Port{}
9895
for _, disc := range dm.discoveries {
9996
res = append(res, disc.ListSync()...)

commands/board/list.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -193,10 +193,13 @@ func List(instanceID int32) (r []*rpc.DetectedPort, e error) {
193193
return nil, errors.New("invalid instance")
194194
}
195195

196-
ports, err := commands.ListBoards(pm)
197-
if err != nil {
198-
return nil, errors.Wrap(err, "error getting port list from serial-discovery")
196+
if err := pm.DiscoveryManager().RunAll(); err != nil {
197+
return nil, err
198+
}
199+
if err := pm.DiscoveryManager().StartAll(); err != nil {
200+
return nil, err
199201
}
202+
ports := pm.DiscoveryManager().List()
200203

201204
retVal := []*rpc.DetectedPort{}
202205
for _, port := range ports {

commands/bundled_tools_serial_discovery.go

Lines changed: 0 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ package commands
1717

1818
import (
1919
"fmt"
20-
"sync"
2120

2221
"github.com/arduino/arduino-cli/arduino/cores"
2322
"github.com/arduino/arduino-cli/arduino/cores/packagemanager"
@@ -102,45 +101,6 @@ var (
102101
}
103102
)
104103

105-
var listBoardMutex sync.Mutex
106-
107-
// ListBoards foo
108-
func ListBoards(pm *packagemanager.PackageManager) ([]*discovery.Port, error) {
109-
// ensure the connection to the discoverer is unique to avoid messing up
110-
// the messages exchanged
111-
listBoardMutex.Lock()
112-
defer listBoardMutex.Unlock()
113-
114-
// get the bundled tool
115-
t := getBuiltinSerialDiscoveryTool(pm)
116-
117-
// determine if it's installed
118-
if !t.IsInstalled() {
119-
return nil, fmt.Errorf("missing serial-discovery tool")
120-
}
121-
122-
disc, err := discovery.New("serial-discovery", t.InstallDir.Join(t.Tool.Name).String())
123-
if err != nil {
124-
return nil, err
125-
}
126-
defer disc.Quit()
127-
128-
if err = disc.Run(); err != nil {
129-
return nil, fmt.Errorf("starting discovery: %v", err)
130-
}
131-
132-
if err = disc.Start(); err != nil {
133-
return nil, fmt.Errorf("starting discovery: %v", err)
134-
}
135-
136-
res, err := disc.List()
137-
if err != nil {
138-
return nil, fmt.Errorf("getting port list from discovery: %v", err)
139-
}
140-
141-
return res, nil
142-
}
143-
144104
// WatchListBoards returns a channel that receives events from the bundled discovery tool
145105
func WatchListBoards(pm *packagemanager.PackageManager) (<-chan *discovery.Event, error) {
146106
t := getBuiltinSerialDiscoveryTool(pm)

0 commit comments

Comments
 (0)