ionic-native / serial serial.open () приводит к ошибке в Ionic 3 - PullRequest
0 голосов
/ 13 января 2019

У меня есть стандартный термопринтер, работающий по USB и Bluetooth. В настоящее время я создаю приложение, в котором пользователь может печатать через принтер в режиме Bluetooth или USB.

Режим Bluetooth работает нормально. У меня возникли проблемы при использовании этого плагина для печати через USB.

<1> Я не могу получить подключенный USB-устройство VID и PID любым способом. Возможно, что пользователь не будет использовать ту же модель, что и я, поскольку на рынке доступно множество моделей.

Если бы я смог получить результат сканирования подключенных USB-устройств, это было бы здорово (как я вижу из приложения Serial USB Terminal из магазина Play).

<2> У меня есть собственное устройство VID и PID. Но запрос разрешения и затем открытие порта, похоже, вызывает много проблем.

Ниже мой код:

    checkUSBConnectionStatus(){
    let drivers = [
      'CdcAcmSerialDriver', // crashed - array out of bound exception //insufficient number off endpoints(2)
      'Ch34xSerialDriver', // open serial error:  Failed send cmd [init #1]
      'Cp21xxSerialDriver', // open serial error:  Error setting baud rate.
      'FtdiSerialDriver', // open serial error:  Reset failed: result=-1
      'ProlificSerialDriver', //open serial error:  ControlTransfer with value 0x0 failed: -1
    ];
    this.serial.requestPermission({
      vid: '0471',
      pid: '0055',
      driver: 'FtdiSerialDriver' // or any other
    })
      .then(
        res => {
          console.log('request serial success: ',res);
          this.toastCtrl.show('request serial success: ' + res);
          this.openSerial();
        },
        error => {
          console.log('request serial error: ',error);
          this.toastCtrl.show('request serial error: ' + error);
        }
      );
  }

  openSerial(){
    this.serial.open({
      baudRate: 9600,
      dataBits: 8,
      stopBits: 1,
      parity: 0,
      dtr: false,
      rts: false,
      sleepOnPause: false
    })
      .then(
        res => {
          console.log('open serial success: ',res);
          this.toastCtrl.show('open serial success: ' + res);
          this.USBConnectionStatus = 'Connected';
        },
        error => {
          console.log('open serial error: ',error);
          this.toastCtrl.show('open serial error: ' + error);
          const alert = this.alertCtrl.create({
            title: 'Error!',
            subTitle: 'Error Accessing USB Port',
            buttons: ['Ok'],
            enableBackdropDismiss: true
          });
          alert.present();
        }
      )
  }

Часть запроса работает нормально, у меня возникли проблемы с открытием части.

Как видите, я пробовал все 5 доступных драйверов, так как не был в этом уверен. А также я отметил ошибку, брошенную для каждого из них в комментариях рядом с ними.

Также, кажется, есть необработанная ошибка, которая вызывает сбой моего приложения с первым драйвером. Где я предполагаю, что основной причиной является отсутствие необходимой конечной точки в моем принтере.

Кроме того, я попробовал все комбинации с DTR и RTS, которые были истинными и ложными, без разницы в результатах. И в соответствии с настройками DIP-переключателя моего принтера, скорость BAUD настроена на 9600.

Принтер работает нормально с моими окнами, а также с моим OTG-кабелем все в порядке, поскольку он поддерживает мой флэш-накопитель. И, конечно же, запрашивающая часть работает над этим плагином.

Может кто-нибудь разобраться в этом и помочь мне?

1 Ответ

0 голосов
/ 14 января 2019

Ну, я нашел решение моего второго вопроса. Плагин Cordova CORDOVAARDUINO использует старую библиотеку usb-serial-for-android. Мне нужно вручную добавить эту библиотеку в плагин Cordova, а затем отредактировать ее в соответствии с моими потребностями.

Для тех, кто сталкивается с той же проблемой, вы можете посмотреть на эту проблему на GitHub.

...