@@ -130,7 +130,7 @@ func identifyViaCloudAPI(ctx context.Context, props *properties.Map, settings *c
130130}
131131
132132var (
133- vidPidURL = "https://builder .arduino.cc/v3/ boards/byVidPid "
133+ vidPidURL = "https://api2 .arduino.cc/boards/v1/boards "
134134 validVidPid = regexp .MustCompile (`0[xX][a-fA-F\d]{4}` )
135135)
136136
@@ -169,7 +169,7 @@ func apiByVidPid(ctx context.Context, vid, pid string, settings *configuration.S
169169 return nil , errors .New (i18n .Tr ("Invalid pid value: '%s'" , pid ))
170170 }
171171
172- url := fmt .Sprintf ("%s/%s/ %s" , vidPidURL , vid , pid )
172+ url := fmt .Sprintf ("%s?vid-pid=%s- %s" , vidPidURL , vid , pid )
173173 req , _ := http .NewRequest ("GET" , url , nil )
174174 req .Header .Set ("Content-Type" , "application/json" )
175175
@@ -198,20 +198,23 @@ func apiByVidPid(ctx context.Context, vid, pid string, settings *configuration.S
198198 return nil , err
199199 }
200200
201- var dat map [string ]interface {}
201+ type boardsResponse struct {
202+ Items []struct {
203+ Name string `json:"name"`
204+ FQBN string `json:"fqbn"`
205+ } `json:"items"`
206+ }
207+ var dat boardsResponse
202208 if err := json .Unmarshal (resp , & dat ); err != nil {
203209 return nil , fmt .Errorf ("%s: %w" , i18n .Tr ("error processing response from server" ), err )
204210 }
205- name , nameFound := dat ["name" ].(string )
206- fqbn , fbqnFound := dat ["fqbn" ].(string )
207- if ! nameFound || ! fbqnFound {
208- return nil , errors .New (i18n .Tr ("wrong format in server response" ))
209- }
210211
211- return []* rpc.BoardListItem {
212- {
213- Name : name ,
214- Fqbn : fqbn ,
215- },
216- }, nil
212+ response := make ([]* rpc.BoardListItem , len (dat .Items ))
213+ for i , v := range dat .Items {
214+ if v .Name == "" || v .FQBN == "" {
215+ return nil , errors .New (i18n .Tr ("wrong format in server response" ))
216+ }
217+ response [i ] = & rpc.BoardListItem {Name : v .Name , Fqbn : v .FQBN }
218+ }
219+ return response , nil
217220}
0 commit comments