private flushDeviceConfigUnixAndMac()

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);
        });
      }
    );
  }