Skip to content

Commit 2024b7f

Browse files
committed
Implement methods to get user fields for board/port combination
1 parent c6ea2ae commit 2024b7f

File tree

3 files changed

+65
-12
lines changed

3 files changed

+65
-12
lines changed

Diff for: arduino-ide-extension/src/browser/boards/boards-service-provider.ts

+23-11
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import {
1212
BoardsPackage,
1313
AttachedBoardsChangeEvent,
1414
BoardWithPackage,
15+
BoardUserField,
1516
} from '../../common/protocol';
1617
import { BoardsConfig } from './boards-config';
1718
import { naturalCompare } from '../../common/utils';
@@ -173,8 +174,8 @@ export class BoardsServiceProvider implements FrontendApplicationContribution {
173174
const selectedAvailableBoard = AvailableBoard.is(selectedBoard)
174175
? selectedBoard
175176
: this._availableBoards.find((availableBoard) =>
176-
Board.sameAs(availableBoard, selectedBoard)
177-
);
177+
Board.sameAs(availableBoard, selectedBoard)
178+
);
178179
if (
179180
selectedAvailableBoard &&
180181
selectedAvailableBoard.selected &&
@@ -264,6 +265,18 @@ export class BoardsServiceProvider implements FrontendApplicationContribution {
264265
return boards;
265266
}
266267

268+
async selectedBoardUserFields(): Promise<BoardUserField[]> {
269+
if (!this._boardsConfig.selectedBoard || !this._boardsConfig.selectedPort) {
270+
return [];
271+
}
272+
const fqbn = this._boardsConfig.selectedBoard.fqbn;
273+
if (!fqbn) {
274+
return [];
275+
}
276+
const protocol = this._boardsConfig.selectedPort.protocol;
277+
return await this.boardsService.getBoardUserFields({ fqbn, protocol });
278+
}
279+
267280
/**
268281
* `true` if the `config.selectedBoard` is defined; hence can compile against the board. Otherwise, `false`.
269282
*/
@@ -337,14 +350,14 @@ export class BoardsServiceProvider implements FrontendApplicationContribution {
337350
const timeoutTask =
338351
!!timeout && timeout > 0
339352
? new Promise<void>((_, reject) =>
340-
setTimeout(
341-
() => reject(new Error(`Timeout after ${timeout} ms.`)),
342-
timeout
343-
)
353+
setTimeout(
354+
() => reject(new Error(`Timeout after ${timeout} ms.`)),
355+
timeout
344356
)
357+
)
345358
: new Promise<void>(() => {
346-
/* never */
347-
});
359+
/* never */
360+
});
348361
const waitUntilTask = new Promise<void>((resolve) => {
349362
let candidate = find(what, this.availableBoards);
350363
if (candidate) {
@@ -478,9 +491,8 @@ export class BoardsServiceProvider implements FrontendApplicationContribution {
478491

479492
protected getLastSelectedBoardOnPortKey(port: Port | string): string {
480493
// TODO: we lose the port's `protocol` info (`serial`, `network`, etc.) here if the `port` is a `string`.
481-
return `last-selected-board-on-port:${
482-
typeof port === 'string' ? port : Port.toString(port)
483-
}`;
494+
return `last-selected-board-on-port:${typeof port === 'string' ? port : Port.toString(port)
495+
}`;
484496
}
485497

486498
protected async loadState(): Promise<void> {

Diff for: arduino-ide-extension/src/common/protocol/boards-service.ts

+10-1
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ export const BoardsServicePath = '/services/boards-service';
134134
export const BoardsService = Symbol('BoardsService');
135135
export interface BoardsService
136136
extends Installable<BoardsPackage>,
137-
Searchable<BoardsPackage> {
137+
Searchable<BoardsPackage> {
138138
/**
139139
* Deprecated. `getState` should be used to correctly map a board with a port.
140140
* @deprecated
@@ -152,6 +152,7 @@ export interface BoardsService
152152
fqbn: string;
153153
}): Promise<BoardsPackage | undefined>;
154154
searchBoards({ query }: { query?: string }): Promise<BoardWithPackage[]>;
155+
getBoardUserFields(options: { fqbn: string, protocol: string }): Promise<BoardUserField[]>;
155156
}
156157

157158
export interface Port {
@@ -342,6 +343,14 @@ export interface Board {
342343
readonly port?: Port;
343344
}
344345

346+
export interface BoardUserField {
347+
readonly toolId: string;
348+
readonly name: string;
349+
readonly label: string;
350+
readonly secret: boolean;
351+
value: string;
352+
}
353+
345354
export interface BoardWithPackage extends Board {
346355
readonly packageName: string;
347356
readonly packageId: string;

Diff for: arduino-ide-extension/src/node/boards-service-impl.ts

+32
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import {
1616
NotificationServiceServer,
1717
AvailablePorts,
1818
BoardWithPackage,
19+
BoardUserField,
1920
} from '../common/protocol';
2021
import {
2122
PlatformInstallRequest,
@@ -36,6 +37,8 @@ import {
3637
import {
3738
ListProgrammersAvailableForUploadRequest,
3839
ListProgrammersAvailableForUploadResponse,
40+
SupportedUserFieldsRequest,
41+
SupportedUserFieldsResponse,
3942
} from './cli-protocol/cc/arduino/cli/commands/v1/upload_pb';
4043
import { InstallWithProgress } from './grpc-installable';
4144

@@ -244,6 +247,35 @@ export class BoardsServiceImpl
244247
return boards;
245248
}
246249

250+
async getBoardUserFields(options: { fqbn: string, protocol: string }): Promise<BoardUserField[]> {
251+
await this.coreClientProvider.initialized;
252+
const coreClient = await this.coreClient();
253+
const { client, instance } = coreClient;
254+
255+
const supportedUserFieldsReq = new SupportedUserFieldsRequest();
256+
supportedUserFieldsReq.setInstance(instance);
257+
supportedUserFieldsReq.setFqbn(options.fqbn);
258+
supportedUserFieldsReq.setProtocol(options.protocol);
259+
260+
const supportedUserFieldsResp = await new Promise<SupportedUserFieldsResponse>(
261+
(resolve, reject) => {
262+
client.supportedUserFields(supportedUserFieldsReq, (err, resp) => {
263+
(!!err ? reject : resolve)(!!err ? err : resp)
264+
})
265+
}
266+
);
267+
return supportedUserFieldsResp.getUserFieldsList().map(e => {
268+
return {
269+
toolId: e.getToolId(),
270+
name: e.getName(),
271+
label: e.getLabel(),
272+
secret: e.getSecret(),
273+
value: "",
274+
};
275+
});
276+
}
277+
278+
247279
async search(options: { query?: string }): Promise<BoardsPackage[]> {
248280
await this.coreClientProvider.initialized;
249281
const coreClient = await this.coreClient();

0 commit comments

Comments
 (0)