in src/Models/AZ3166Device.ts [513:612]
private flushDeviceConfigUnixAndMac(configValue: string, option: ConfigDeviceOptions): Promise<boolean> {
return new Promise(
// eslint-disable-next-line no-async-promise-executor
async (resolve: (value: boolean) => void, reject: (value: Error) => void) => {
let comPort = "";
let command = "";
try {
// Choose COM port that AZ3166 is connected
comPort = await this.chooseCOM();
console.log(`Opening ${comPort}.`);
} catch (error) {
return reject(error);
}
if (option === ConfigDeviceOptions.ConnectionString) {
command = "set_az_iothub";
} else if (option === ConfigDeviceOptions.DPS) {
command = "set_az_iotdps";
} else {
command = "set_dps_uds";
}
let errorRejected = false;
let az3166: Board;
try {
az3166 = this.board;
} catch (error) {
return reject(error);
}
const port = new AZ3166Device.serialport(comPort, {
baudRate: az3166.defaultBaudRate,
dataBits: 8,
stopBits: 1,
xon: false,
xoff: false,
parity: "none"
});
const rejectIfError = (err: Error): boolean => {
if (errorRejected) return true;
if (err) {
errorRejected = true;
reject(err);
try {
port.close();
} catch (ignore) {
// ignore error if fail to close port.
}
}
return true;
};
const executeSetAzIoTHub = async (): Promise<void> => {
try {
const data = `${command} "${configValue}"\r\n`;
let restDataLength = data.length;
while (restDataLength > 0) {
const start = data.length - restDataLength;
const length = Math.min(100, restDataLength);
restDataLength -= length;
const dataChunk = data.substr(start, length);
await this.sendDataViaSerialPort(port, dataChunk);
await delay(1000);
}
port.close();
} catch (ignore) {
// Ignore error if fail to close port
}
if (errorRejected) {
return;
} else {
resolve(true);
}
};
// Configure serial port callbacks
port.on("open", async () => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
await vscode.window.showInformationMessage(
"Please hold down button A and then push and release the reset button to enter configuration mode. After enter configuration mode, click OK.",
"OK"
);
executeSetAzIoTHub()
.then(() => resolve(true))
.catch(error => reject(error));
});
// eslint-disable-next-line @typescript-eslint/no-explicit-any
port.on("error", (error: any) => {
if (errorRejected) return;
console.log(error);
rejectIfError(error);
});
}
);
}