Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit cee40b3

Browse files
WIP, auto-select with hardwareId
1 parent 25b545d commit cee40b3

File tree

3 files changed

+61
-23
lines changed

3 files changed

+61
-23
lines changed

‎arduino-ide-extension/src/browser/boards/boards-service-provider.ts‎

Lines changed: 42 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -158,15 +158,9 @@ export class BoardsServiceProvider
158158
this.lastAvailablePortsOnUpload = undefined;
159159
}
160160

161-
private portToAutoSelectCanBeDerived(): boolean {
162-
return Boolean(
163-
this.lastBoardsConfigOnUpload && this.lastAvailablePortsOnUpload
164-
);
165-
}
166-
167161
attemptPostUploadAutoSelect(): void {
168162
setTimeout(() => {
169-
if (this.portToAutoSelectCanBeDerived()) {
163+
if (this.lastBoardsConfigOnUpload&&this.lastAvailablePortsOnUpload) {
170164
this.attemptAutoSelect({
171165
ports: this._availablePorts,
172166
boards: this._availableBoards,
@@ -185,12 +179,12 @@ export class BoardsServiceProvider
185179
private deriveBoardConfigToAutoSelect(
186180
newState: AttachedBoardsChangeEvent['newState']
187181
): void {
188-
if (!this.portToAutoSelectCanBeDerived()) {
182+
if (!this.lastBoardsConfigOnUpload||!this.lastAvailablePortsOnUpload) {
189183
this.boardConfigToAutoSelect = undefined;
190184
return;
191185
}
192186

193-
const oldPorts = this.lastAvailablePortsOnUpload!;
187+
const oldPorts = this.lastAvailablePortsOnUpload;
194188
const { ports: newPorts, boards: newBoards } = newState;
195189

196190
const appearedPorts =
@@ -205,20 +199,36 @@ export class BoardsServiceProvider
205199
Port.sameAs(board.port, port)
206200
);
207201

208-
const lastBoardsConfigOnUpload = this.lastBoardsConfigOnUpload!;
202+
const lastBoardsConfigOnUpload = this.lastBoardsConfigOnUpload;
209203

210-
if (
211-
boardOnAppearedPort &&
212-
lastBoardsConfigOnUpload.selectedBoard &&
213-
Board.sameAs(
204+
if (boardOnAppearedPort && lastBoardsConfigOnUpload.selectedBoard) {
205+
const boardIsSameHardware = Board.sameDistinctHardwareAs(
214206
boardOnAppearedPort,
215207
lastBoardsConfigOnUpload.selectedBoard
216-
)
217-
) {
208+
);
209+
210+
const boardIsSameFqbn = Board.sameAs(
211+
boardOnAppearedPort,
212+
lastBoardsConfigOnUpload.selectedBoard
213+
);
214+
215+
if (!boardIsSameHardware && !boardIsSameFqbn) return;
216+
217+
let boardToAutoSelect = boardOnAppearedPort;
218+
if (boardIsSameHardware && !boardIsSameFqbn) {
219+
const { name, fqbn } = lastBoardsConfigOnUpload.selectedBoard;
220+
221+
boardToAutoSelect = {
222+
...boardToAutoSelect,
223+
name,
224+
fqbn,
225+
};
226+
}
227+
218228
this.clearBoardDiscoverySnapshot();
219229

220230
this.boardConfigToAutoSelect = {
221-
selectedBoard: boardOnAppearedPort,
231+
selectedBoard: boardToAutoSelect,
222232
selectedPort: port,
223233
};
224234
return;
@@ -326,8 +336,10 @@ export class BoardsServiceProvider
326336
// it is just a FQBN, so we need to find the `selected` board among the `AvailableBoards`
327337
const selectedAvailableBoard = AvailableBoard.is(selectedBoard)
328338
? selectedBoard
329-
: this._availableBoards.find((availableBoard) =>
330-
Board.sameAs(availableBoard, selectedBoard)
339+
: this._availableBoards.find(
340+
(availableBoard) =>
341+
Board.sameDistinctHardwareAs(availableBoard, selectedBoard) ||
342+
Board.sameAs(availableBoard, selectedBoard)
331343
);
332344
if (
333345
selectedAvailableBoard &&
@@ -353,24 +365,33 @@ export class BoardsServiceProvider
353365

354366
protected tryReconnect(): boolean {
355367
if (this.latestValidBoardsConfig && !this.canUploadTo(this.boardsConfig)) {
368+
// ** Reconnect to a board unplugged from, and plugged back into the same port
356369
for (const board of this.availableBoards.filter(
357370
({ state }) => state !== AvailableBoard.State.incomplete
358371
)) {
359372
if (
360-
this.latestValidBoardsConfig.selectedBoard.fqbn === board.fqbn &&
361-
this.latestValidBoardsConfig.selectedBoard.name === board.name &&
373+
(Board.sameDistinctHardwareAs(
374+
this.latestValidBoardsConfig.selectedBoard,
375+
board
376+
) ||
377+
(this.latestValidBoardsConfig.selectedBoard.fqbn === board.fqbn &&
378+
this.latestValidBoardsConfig.selectedBoard.name ===
379+
board.name)) &&
362380
Port.sameAs(this.latestValidBoardsConfig.selectedPort, board.port)
363381
) {
364382
this.boardsConfig = this.latestValidBoardsConfig;
365383
return true;
366384
}
367385
}
386+
// **
368387

388+
// ** Reconnect to a board whose port changed due to an upload
369389
if (!this.boardConfigToAutoSelect) return false;
370390

371391
this.boardsConfig = this.boardConfigToAutoSelect;
372392
this.boardConfigToAutoSelect = undefined;
373393
return true;
394+
// **
374395
}
375396
return false;
376397
}

‎arduino-ide-extension/src/common/protocol/boards-service.ts‎

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,7 @@ export interface Port {
245245
readonly protocol: string;
246246
readonly protocolLabel: string;
247247
readonly properties?: Record<string, string>;
248+
readonly hardwareId?: string;
248249
}
249250
export namespace Port {
250251
export type Properties = Record<string, string>;
@@ -553,6 +554,22 @@ export namespace Board {
553554
return left.name === right.name && left.fqbn === right.fqbn;
554555
}
555556

557+
export function sameDistinctHardwareAs(
558+
left: Board,
559+
right: string | Board
560+
): boolean {
561+
if (Board.is(right) && left.port && right.port) {
562+
const { hardwareId: leftHardwareId } = left.port;
563+
const { hardwareId: rightHardwareId } = right.port;
564+
565+
if (leftHardwareId && rightHardwareId) {
566+
return leftHardwareId === rightHardwareId;
567+
}
568+
}
569+
570+
return false;
571+
}
572+
556573
export function sameAs(left: Board, right: string | Board): boolean {
557574
// How to associate a selected board with one of the available cores: https://typefox.slack.com/archives/CJJHJCJSJ/p1571142327059200
558575
// 1. How to use the FQBN if any and infer the package ID from it: https://typefox.slack.com/archives/CJJHJCJSJ/p1571147549069100

‎arduino-ide-extension/src/node/board-discovery.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -323,14 +323,14 @@ export class BoardDiscovery
323323
}
324324

325325
private fromRpcPort(rpcPort: RpcPort): Port {
326-
constport= {
326+
return {
327327
address: rpcPort.getAddress(),
328328
addressLabel: rpcPort.getLabel(),
329329
protocol: rpcPort.getProtocol(),
330330
protocolLabel: rpcPort.getProtocolLabel(),
331331
properties: Port.Properties.create(rpcPort.getPropertiesMap().toObject()),
332+
hardwareId: rpcPort.getHardwareId(), // method to be confirmed
332333
};
333-
return port;
334334
}
335335
}
336336

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /