Как открыть последовательный порт, определенный пользователем (выпадающее меню)? - PullRequest
0 голосов
/ 18 января 2019

Я из встроенного фона и не имею общего представления об электроне и узле js. Я пытаюсь сделать простое демонстрационное приложение, которое может открыть выбранный пользователем последовательный порт. В части HTML у меня есть одна кнопка подключения, которая открывает порт, одно раскрывающееся меню для доступных COM-портов в окнах и одно раскрывающееся меню для разных скоростей.

Я могу получить выбранный пользователем порт и скорость передачи данных с помощью события «onChange» тега select. Проблема здесь в том, что для создания объекта serialport требуется порт. Как я могу переопределить тот же конструктор в Node js? Если я иду в неправильном направлении, можете ли вы предложить хороший стиль кодирования для этого кода?

Я пробовал жестко кодировать COM-порт, и это прекрасно работает. Я попытался переопределить объект serialport с новым портом, но он не открывает порт и не выдает никакой ошибки.

Вот мой код:

var serialport = require('serialport');
var SerialPort = serialport.SerialPort;
var portSelected, baudSelected;

var select = document.getElementById("comport-select");
select.options[select.options.length] = new Option("COM Port", "select-port-option")

serialport.list((err, ports) => {
  ports.forEach(function(port) {
    select.options[select.options.length] = new Option(port.comName, port.comName);
  })
  if (err) {
    document.getElementById('error').textContent = err.message
    return
  } else {
    document.getElementById('error').textContent = ''
  }

  if (ports.length === 0) {
    document.getElementById('error').textContent = 'No ports discovered'
  }
})

var port = new serialport('COM Port', { autoOpen: false, flowControl: false }) 
const Readline = serialport.parsers.Readline;   
const parser = new Readline();              
port.pipe(parser);

//Onchange event routine for COM port dropdown menu
function getPort()
{
  portSelected = document.getElementById("comport-select").value;
  console.log(portSelected);
}

//Onchange event routine for baudrate dropdown menu
function getBaud()
{
  baudSelected = Number(document.getElementById("baud-select").value);
  console.log(baudSelected);
  serialport.baudRate = baudSelected;
}

//Onclick event routine that configures and opens the port
function openPort() 
{
  console.log(baudSelected);
  port = serialport(portSelected, { autoOpen: false, flowControl: false });
  port.open(function (err) {
    if (err) {
      return console.log('Error opening port: ', err.message)
    }
  });
};

function onOpen()
{
  console.log('connection is opened');
}
parser.on('open', onOpen);

port.write('V');

function onData(data)
{
  console.log(data);
}

parser.on('data', onData);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...