@@ -21,36 +21,28 @@ import (
21
21
"log"
22
22
"os"
23
23
"sort"
24
- "time"
25
24
26
25
"github.com/arduino/arduino-cli/arduino/discovery"
26
+ "github.com/arduino/arduino-cli/arduino/discovery/discoverymanager"
27
27
ui "github.com/gizak/termui/v3"
28
28
"github.com/gizak/termui/v3/widgets"
29
+ "github.com/sirupsen/logrus"
29
30
)
30
31
31
32
func main () {
32
- discoveries := [] * discovery. PluggableDiscovery {}
33
- discEvent := make ( chan * discovery. Event )
33
+ logrus . SetLevel ( logrus . ErrorLevel )
34
+ dm := discoverymanager . New ( )
34
35
for _ , discCmd := range os .Args [1 :] {
35
- disc := discovery .New ("" , discCmd )
36
- if err := disc .Run (); err != nil {
37
- log .Fatal ("Error starting discovery:" , err )
38
- }
39
- if err := disc .Start (); err != nil {
40
- log .Fatal ("Error starting discovery:" , err )
41
- }
42
- eventChan , err := disc .StartSync (10 )
43
- if err != nil {
44
- log .Fatal ("Error starting discovery:" , err )
45
- }
46
- go func () {
47
- for msg := range eventChan {
48
- discEvent <- msg
49
- }
50
- }()
51
- discoveries = append (discoveries , disc )
36
+ disc := discovery .New (discCmd , discCmd )
37
+ dm .Add (disc )
52
38
}
39
+ dm .Start ()
53
40
41
+ activePorts := map [string ]* discovery.Port {}
42
+ watcher , err := dm .Watch ()
43
+ if err != nil {
44
+ log .Fatalf ("failed to start discvoeries: %v" , err )
45
+ }
54
46
if err := ui .Init (); err != nil {
55
47
log .Fatalf ("failed to initialize termui: %v" , err )
56
48
}
@@ -66,15 +58,20 @@ func main() {
66
58
updateList := func () {
67
59
rows := []string {}
68
60
rows = append (rows , "Available ports list:" )
69
- for _ , disc := range discoveries {
70
- for i , port := range disc .ListCachedPorts () {
71
- rows = append (rows , fmt .Sprintf (" [%04d] Address: %s" , i , port .AddressLabel ))
72
- rows = append (rows , fmt .Sprintf (" Protocol: %s" , port .ProtocolLabel ))
73
- keys := port .Properties .Keys ()
74
- sort .Strings (keys )
75
- for _ , k := range keys {
76
- rows = append (rows , fmt .Sprintf (" %s=%s" , k , port .Properties .Get (k )))
77
- }
61
+
62
+ ids := sort.StringSlice {}
63
+ for id := range activePorts {
64
+ ids = append (ids , id )
65
+ }
66
+ ids .Sort ()
67
+ for _ , id := range ids {
68
+ port := activePorts [id ]
69
+ rows = append (rows , fmt .Sprintf ("> Address: %s" , port .AddressLabel ))
70
+ rows = append (rows , fmt .Sprintf (" Protocol: %s" , port .ProtocolLabel ))
71
+ keys := port .Properties .Keys ()
72
+ sort .Strings (keys )
73
+ for _ , k := range keys {
74
+ rows = append (rows , fmt .Sprintf (" %s=%s" , k , port .Properties .Get (k )))
78
75
}
79
76
}
80
77
l .Rows = rows
@@ -123,20 +120,16 @@ out:
123
120
previousKey = e .ID
124
121
}
125
122
126
- case <- discEvent :
123
+ case ev := <- watcher .Feed ():
124
+ if ev .Type == "add" {
125
+ activePorts [ev .Port .Address + "|" + ev .Port .Protocol ] = ev .Port
126
+ }
127
+ if ev .Type == "remove" {
128
+ delete (activePorts , ev .Port .Address + "|" + ev .Port .Protocol )
129
+ }
127
130
updateList ()
128
131
}
129
132
130
133
ui .Render (l )
131
134
}
132
-
133
- for _ , disc := range discoveries {
134
- disc .Quit ()
135
- fmt .Println ("Discovery QUITed" )
136
- for disc .State () == discovery .Alive {
137
- time .Sleep (time .Millisecond )
138
- }
139
- fmt .Println ("Discovery correctly terminated" )
140
- }
141
-
142
135
}
0 commit comments