Я использую 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);