Серийный перевод Xmodem в node.js - PullRequest
0 голосов
/ 26 мая 2019

Я использую node.js (9.11.2) и хотел бы иметь возможность отправлять файлы с xmodem через последовательный порт. Документы для Xmodem https://exsilium.github.io/xmodem.js/ и серийный порт https://serialport.io/docs/api-serialport

Моя проблема заключается в получении входящих данных из последовательного порта в xmodem. Я написал простой тестовый код, но не могу обойти этот бит.

port.on('data', (data) => {
    // Write data from serial port to xmod
    server.write(data);
});

Я получаю сообщение об ошибке, что server.write не является функцией. Я могу сделать xmod.write (data), а затем из события sock.on sock.write (data), но проблема в его текущем состоянии, что данные будут записаны в последовательный порт. Я чувствую, что мне не хватает или я не смог понять ключевую часть здесь.

const fs = require('fs');
const SerialPort = require('serialport');
var xmodem = require('xmodem.js');
const Net = require('net');

const buf = fs.readFileSync('./sampletext.txt');

const port = new SerialPort("/dev/ttyUSB0", {
    autoOpen: true,
    baudRate: 38400,
    dataBits: 7,
    parity: "even",
    stopBits: 1,
    xon: false,
    xoff: false,
    rtscts: false
});

const server = Net.createServer((sock) => {

    sock.on('data', (data) => {     
      console.log('SERVER DATA: ' + data.toString());
      // Write data from xmod to serial port
      port.write(data);
    });

    sock.on('end', () => {
      console.log('client disconnected');
    });

  });

  server.on('error', (err) => {
    throw err;
  });

server.listen(1337, '127.0.0.1');

var xsoc = new Net.Socket();

xsoc.connect(1337, '127.0.0.1', () => {
    console.log('xsoc Connected');  
});

xsoc.on('data', (data) => {
    console.log('xsoc Received: ' + data);  
});

xsoc.on('close', () => {
    console.log('xsoc connection closed');
    server.close();
});

port.on('open', () => {
    console.log("Serial Port Opened");          
});

port.on('data', (data) => {
    // Write data from serial port to xmod
    server.write(data);
});

xmodem.on('ready', (count) => {
    console.log('Xmodem ready with ' + count + ' packets.'); 
    // Notify external device we want to use xmodem protocol
    port.write('XMODEM');   
});

xmodem.on('start', (mode) => {
  console.log('Xmodem started - Mode = ' + mode);
})

xmodem.on('stop', () => {
  xsoc.end();
});

setTimeout(() => {
  xmodem.send(xsoc, buf);  
}, 1000);
...