Skip to content

Commit 8982631

Browse files
author
Akos Kitta
committed
chore(cli): update CLI to 0.35.0-rc.3
- Adjust board discovery to new gRPC API. From now on, it's a client read stream, not a duplex. - Allow `.cxx` and `.cc` file extensions. (Closes #2265) Signed-off-by: Akos Kitta <[email protected]>
1 parent 346c8aa commit 8982631

28 files changed

+2254
-2560
lines changed

arduino-ide-extension/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@
169169
],
170170
"arduino": {
171171
"arduino-cli": {
172-
"version": "0.34.0"
172+
"version": "0.35.0-rc.3"
173173
},
174174
"arduino-fwuploader": {
175175
"version": "2.4.1"

arduino-ide-extension/src/browser/boards/boards-data-store.ts

+25-3
Original file line numberDiff line numberDiff line change
@@ -99,10 +99,16 @@ export class BoardsDataStore implements FrontendApplicationContribution {
9999
return BoardsDataStore.Data.EMPTY;
100100
}
101101

102+
const { programmers, defaultProgrammerId, configOptions } = boardDetails;
103+
const selectedProgrammer = findDefaultProgrammer(
104+
programmers,
105+
defaultProgrammerId
106+
);
102107
data = {
103-
configOptions: boardDetails.configOptions,
104-
programmers: boardDetails.programmers,
105-
selectedProgrammer: boardDetails.programmers.find((p) => p.default),
108+
configOptions,
109+
programmers,
110+
selectedProgrammer,
111+
defaultProgrammerId,
106112
};
107113
await this.storageService.setData(key, data);
108114
return data;
@@ -210,11 +216,13 @@ export namespace BoardsDataStore {
210216
readonly configOptions: ConfigOption[];
211217
readonly programmers: Programmer[];
212218
readonly selectedProgrammer?: Programmer;
219+
readonly defaultProgrammerId: string | undefined;
213220
}
214221
export namespace Data {
215222
export const EMPTY: Data = {
216223
configOptions: [],
217224
programmers: [],
225+
defaultProgrammerId: undefined,
218226
};
219227
export function is(arg: unknown): arg is Data {
220228
return (
@@ -236,3 +244,17 @@ export function isEmptyData(data: BoardsDataStore.Data): boolean {
236244
Boolean(!data.selectedProgrammer)
237245
);
238246
}
247+
248+
export function findDefaultProgrammer(
249+
programmers: readonly Programmer[],
250+
defaultProgrammerId: string | undefined | BoardsDataStore.Data
251+
): Programmer | undefined {
252+
if (!defaultProgrammerId) {
253+
return undefined;
254+
}
255+
const id =
256+
typeof defaultProgrammerId === 'string'
257+
? defaultProgrammerId
258+
: defaultProgrammerId.defaultProgrammerId;
259+
return programmers.find((p) => p.id === id);
260+
}

arduino-ide-extension/src/browser/contributions/auto-select-programmer.ts

+7-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,11 @@ import {
55
Programmer,
66
isBoardIdentifierChangeEvent,
77
} from '../../common/protocol';
8-
import { BoardsDataStore, isEmptyData } from '../boards/boards-data-store';
8+
import {
9+
BoardsDataStore,
10+
findDefaultProgrammer,
11+
isEmptyData,
12+
} from '../boards/boards-data-store';
913
import { BoardsServiceProvider } from '../boards/boards-service-provider';
1014
import { Contribution } from './contribution';
1115

@@ -75,7 +79,7 @@ export async function ensureProgrammerIsSelected(
7579
);
7680
return true;
7781
}
78-
let programmer = data.programmers.find((p) => p.default);
82+
let programmer = findDefaultProgrammer(data.programmers, data);
7983
if (programmer) {
8084
// select the programmer if the default info is available
8185
const result = await selectProgrammer({
@@ -97,7 +101,7 @@ export async function ensureProgrammerIsSelected(
97101
console.debug(`Skipping. ${fqbn} does not have programmers.`);
98102
return false;
99103
}
100-
programmer = reloadedData.programmers.find((p) => p.default);
104+
programmer = findDefaultProgrammer(reloadedData.programmers, reloadedData);
101105
if (!programmer) {
102106
console.debug(
103107
`Skipping. Could not find a default programmer for ${fqbn}. Programmers were: `

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

+2-4
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,7 @@ export interface BoardDetails {
334334
readonly VID: string;
335335
readonly PID: string;
336336
readonly buildProperties: string[];
337+
readonly defaultProgrammerId: string | undefined;
337338
}
338339

339340
export interface Tool {
@@ -406,7 +407,6 @@ export interface Programmer {
406407
readonly name: string;
407408
readonly platform: string;
408409
readonly id: string;
409-
readonly default?: boolean;
410410
}
411411
export namespace Programmer {
412412
export function equals(
@@ -435,9 +435,7 @@ export function isProgrammer(arg: unknown): arg is Programmer {
435435
(<Programmer>arg).name !== undefined &&
436436
typeof (<Programmer>arg).name === 'string' &&
437437
(<Programmer>arg).platform !== undefined &&
438-
typeof (<Programmer>arg).platform === 'string' &&
439-
((<Programmer>arg).default === undefined ||
440-
typeof (<Programmer>arg).default === 'boolean')
438+
typeof (<Programmer>arg).platform === 'string'
441439
);
442440
}
443441

arduino-ide-extension/src/common/protocol/sketches-service.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ export namespace Sketch {
308308
export namespace Extensions {
309309
export const DEFAULT = '.ino';
310310
export const MAIN = [DEFAULT, '.pde'];
311-
export const SOURCE = ['.c', '.cpp', '.S'];
311+
export const SOURCE = ['.c', '.cpp', '.S', '.cxx', '.cc'];
312312
export const CODE_FILES = [
313313
...MAIN,
314314
...SOURCE,

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

+10-32
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { ClientDuplexStream } from '@grpc/grpc-js';
1+
import type { ClientReadableStream } from '@grpc/grpc-js';
22
import {
33
Disposable,
44
DisposableCollection,
@@ -30,9 +30,9 @@ import type { Port as RpcPort } from './cli-protocol/cc/arduino/cli/commands/v1/
3030
import { CoreClientAware } from './core-client-provider';
3131
import { ServiceError } from './service-error';
3232

33-
type Duplex = ClientDuplexStream<BoardListWatchRequest, BoardListWatchResponse>;
33+
type Stream = ClientReadableStream<BoardListWatchResponse>;
3434
interface StreamWrapper extends Disposable {
35-
readonly stream: Duplex;
35+
readonly stream: Stream;
3636
readonly uuid: string; // For logging only
3737
}
3838

@@ -121,34 +121,15 @@ export class BoardDiscovery
121121
return Disposable.create(() => clearTimeout(timer));
122122
}
123123

124-
private async requestStartWatch(
125-
req: BoardListWatchRequest,
126-
duplex: Duplex
127-
): Promise<void> {
128-
return new Promise<void>((resolve, reject) => {
129-
if (
130-
!duplex.write(req, (err: Error | undefined) => {
131-
if (err) {
132-
reject(err);
133-
return;
134-
}
135-
})
136-
) {
137-
duplex.once('drain', resolve);
138-
} else {
139-
process.nextTick(resolve);
140-
}
141-
});
142-
}
143-
144124
private async createWrapper(
145-
client: ArduinoCoreServiceClient
125+
client: ArduinoCoreServiceClient,
126+
req: BoardListWatchRequest
146127
): Promise<StreamWrapper> {
147128
if (this.wrapper) {
148129
throw new Error(`Duplex was already set.`);
149130
}
150131
const stream = client
151-
.boardListWatch()
132+
.boardListWatch(req)
152133
.on('end', () => {
153134
this.logger.info('received end');
154135
this.onStreamDidEndEmitter.fire();
@@ -202,14 +183,11 @@ export class BoardDiscovery
202183
this.watching = new Deferred();
203184
this.logger.info('start new deferred');
204185
const { client, instance } = await this.coreClient;
205-
const wrapper = await this.createWrapper(client);
206-
wrapper.stream.on('data', (resp) => this.onBoardListWatchResponse(resp));
207-
this.logger.info('start request start watch');
208-
await this.requestStartWatch(
209-
new BoardListWatchRequest().setInstance(instance),
210-
wrapper.stream
186+
const wrapper = await this.createWrapper(
187+
client,
188+
new BoardListWatchRequest().setInstance(instance)
211189
);
212-
this.logger.info('start requested start watch');
190+
wrapper.stream.on('data', (resp) => this.onBoardListWatchResponse(resp));
213191
this.watching.resolve();
214192
this.logger.info('start resolved watching');
215193
}

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

+4
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ export class BoardsServiceImpl
146146
platform: p.getPlatform(),
147147
}
148148
);
149+
const defaultProgrammerId = detailsResp.getDefaultProgrammerId();
149150

150151
let VID = 'N/A';
151152
let PID = 'N/A';
@@ -168,6 +169,9 @@ export class BoardsServiceImpl
168169
VID,
169170
PID,
170171
buildProperties,
172+
defaultProgrammerId: defaultProgrammerId
173+
? defaultProgrammerId
174+
: undefined,
171175
};
172176
}
173177

arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/board_pb.d.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,8 @@ export class BoardDetailsResponse extends jspb.Message {
8484
getBuildPropertiesList(): Array<string>;
8585
setBuildPropertiesList(value: Array<string>): BoardDetailsResponse;
8686
addBuildProperties(value: string, index?: number): string;
87+
getDefaultProgrammerId(): string;
88+
setDefaultProgrammerId(value: string): BoardDetailsResponse;
8789

8890
serializeBinary(): Uint8Array;
8991
toObject(includeInstance?: boolean): BoardDetailsResponse.AsObject;
@@ -112,6 +114,7 @@ export namespace BoardDetailsResponse {
112114
debuggingSupported: boolean,
113115
identificationPropertiesList: Array<BoardIdentificationProperties.AsObject>,
114116
buildPropertiesList: Array<string>,
117+
defaultProgrammerId: string,
115118
}
116119
}
117120

@@ -488,8 +491,6 @@ export class BoardListWatchRequest extends jspb.Message {
488491
clearInstance(): void;
489492
getInstance(): cc_arduino_cli_commands_v1_common_pb.Instance | undefined;
490493
setInstance(value?: cc_arduino_cli_commands_v1_common_pb.Instance): BoardListWatchRequest;
491-
getInterrupt(): boolean;
492-
setInterrupt(value: boolean): BoardListWatchRequest;
493494

494495
serializeBinary(): Uint8Array;
495496
toObject(includeInstance?: boolean): BoardListWatchRequest.AsObject;
@@ -504,7 +505,6 @@ export class BoardListWatchRequest extends jspb.Message {
504505
export namespace BoardListWatchRequest {
505506
export type AsObject = {
506507
instance?: cc_arduino_cli_commands_v1_common_pb.Instance.AsObject,
507-
interrupt: boolean,
508508
}
509509
}
510510

arduino-ide-extension/src/node/cli-protocol/cc/arduino/cli/commands/v1/board_pb.js

+32-32
Original file line numberDiff line numberDiff line change
@@ -733,7 +733,8 @@ proto.cc.arduino.cli.commands.v1.BoardDetailsResponse.toObject = function(includ
733733
debuggingSupported: jspb.Message.getBooleanFieldWithDefault(msg, 14, false),
734734
identificationPropertiesList: jspb.Message.toObjectList(msg.getIdentificationPropertiesList(),
735735
proto.cc.arduino.cli.commands.v1.BoardIdentificationProperties.toObject, includeInstance),
736-
buildPropertiesList: (f = jspb.Message.getRepeatedField(msg, 16)) == null ? undefined : f
736+
buildPropertiesList: (f = jspb.Message.getRepeatedField(msg, 16)) == null ? undefined : f,
737+
defaultProgrammerId: jspb.Message.getFieldWithDefault(msg, 17, "")
737738
};
738739

739740
if (includeInstance) {
@@ -836,6 +837,10 @@ proto.cc.arduino.cli.commands.v1.BoardDetailsResponse.deserializeBinaryFromReade
836837
var value = /** @type {string} */ (reader.readString());
837838
msg.addBuildProperties(value);
838839
break;
840+
case 17:
841+
var value = /** @type {string} */ (reader.readString());
842+
msg.setDefaultProgrammerId(value);
843+
break;
839844
default:
840845
reader.skipField();
841846
break;
@@ -976,6 +981,13 @@ proto.cc.arduino.cli.commands.v1.BoardDetailsResponse.serializeBinaryToWriter =
976981
f
977982
);
978983
}
984+
f = message.getDefaultProgrammerId();
985+
if (f.length > 0) {
986+
writer.writeString(
987+
17,
988+
f
989+
);
990+
}
979991
};
980992

981993

@@ -1386,6 +1398,24 @@ proto.cc.arduino.cli.commands.v1.BoardDetailsResponse.prototype.clearBuildProper
13861398
};
13871399

13881400

1401+
/**
1402+
* optional string default_programmer_id = 17;
1403+
* @return {string}
1404+
*/
1405+
proto.cc.arduino.cli.commands.v1.BoardDetailsResponse.prototype.getDefaultProgrammerId = function() {
1406+
return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 17, ""));
1407+
};
1408+
1409+
1410+
/**
1411+
* @param {string} value
1412+
* @return {!proto.cc.arduino.cli.commands.v1.BoardDetailsResponse} returns this
1413+
*/
1414+
proto.cc.arduino.cli.commands.v1.BoardDetailsResponse.prototype.setDefaultProgrammerId = function(value) {
1415+
return jspb.Message.setProto3StringField(this, 17, value);
1416+
};
1417+
1418+
13891419

13901420

13911421

@@ -4181,8 +4211,7 @@ proto.cc.arduino.cli.commands.v1.BoardListWatchRequest.prototype.toObject = func
41814211
*/
41824212
proto.cc.arduino.cli.commands.v1.BoardListWatchRequest.toObject = function(includeInstance, msg) {
41834213
var f, obj = {
4184-
instance: (f = msg.getInstance()) && cc_arduino_cli_commands_v1_common_pb.Instance.toObject(includeInstance, f),
4185-
interrupt: jspb.Message.getBooleanFieldWithDefault(msg, 2, false)
4214+
instance: (f = msg.getInstance()) && cc_arduino_cli_commands_v1_common_pb.Instance.toObject(includeInstance, f)
41864215
};
41874216

41884217
if (includeInstance) {
@@ -4224,10 +4253,6 @@ proto.cc.arduino.cli.commands.v1.BoardListWatchRequest.deserializeBinaryFromRead
42244253
reader.readMessage(value,cc_arduino_cli_commands_v1_common_pb.Instance.deserializeBinaryFromReader);
42254254
msg.setInstance(value);
42264255
break;
4227-
case 2:
4228-
var value = /** @type {boolean} */ (reader.readBool());
4229-
msg.setInterrupt(value);
4230-
break;
42314256
default:
42324257
reader.skipField();
42334258
break;
@@ -4265,13 +4290,6 @@ proto.cc.arduino.cli.commands.v1.BoardListWatchRequest.serializeBinaryToWriter =
42654290
cc_arduino_cli_commands_v1_common_pb.Instance.serializeBinaryToWriter
42664291
);
42674292
}
4268-
f = message.getInterrupt();
4269-
if (f) {
4270-
writer.writeBool(
4271-
2,
4272-
f
4273-
);
4274-
}
42754293
};
42764294

42774295

@@ -4312,24 +4330,6 @@ proto.cc.arduino.cli.commands.v1.BoardListWatchRequest.prototype.hasInstance = f
43124330
};
43134331

43144332

4315-
/**
4316-
* optional bool interrupt = 2;
4317-
* @return {boolean}
4318-
*/
4319-
proto.cc.arduino.cli.commands.v1.BoardListWatchRequest.prototype.getInterrupt = function() {
4320-
return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 2, false));
4321-
};
4322-
4323-
4324-
/**
4325-
* @param {boolean} value
4326-
* @return {!proto.cc.arduino.cli.commands.v1.BoardListWatchRequest} returns this
4327-
*/
4328-
proto.cc.arduino.cli.commands.v1.BoardListWatchRequest.prototype.setInterrupt = function(value) {
4329-
return jspb.Message.setProto3BooleanField(this, 2, value);
4330-
};
4331-
4332-
43334333

43344334

43354335

0 commit comments

Comments
 (0)