Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions protocol.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
//var logger = require('winston');
var logger = require('./logger'); // Importa el logger configurado

var SerialPort = require('serialport');
var config = require('./config');
var SerialPort = require('serialport'); //Para producion
//var SerialPort = require('./simulacion/fakeSerialAdapter'); //Para testear en consola llamando simultaneamente node protocol.js y node simulacion/simulacion.js



// Internal Dependencies
var config = require('./config');
var token = require('./constants');
var codec = require('./codec');
var app = require('./app');
Expand Down
14 changes: 14 additions & 0 deletions simulacion/fakeSerialAdapter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
const createVirtualSerialPair = require('./virtualLink');

const pair = createVirtualSerialPair();

class SerialPortWrapper {

constructor() {
return pair.portA; // protocol.js usa este
}
}

// exportamos también el otro extremo
module.exports = SerialPortWrapper;
module.exports.simulatorPort = pair.portB;
66 changes: 66 additions & 0 deletions simulacion/fakeSerialPort.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@

const token = require('../constants');
const EventEmitter = require('events');
class FakeSerialPort extends EventEmitter{

constructor(name) {
super();
this.name = name;
this.peer = null;
this.handlers = {};
this.options = { baudRate : 9600, dataBits : 8, parity : 'none', stopBits : 1 };
setTimeout(() => this.emit('open'), 100);
}

on(event, cb) {
this.handlers[event] = cb;
}
connect(peer) {
this.peer = peer;
}
emit(event, data) {
if (this.handlers[event]) {
this.handlers[event](data);
}
}

write(data) {
console.log("[APP] WRITE ->", JSON.stringify(data));

// 👇 SIMULACIÓN DEL EQUIPO
simulateAnalyzerResponse.call(this, data);
}
}

function simulateAnalyzerResponse(data) {

// ENQ recibido → responder ACK
if (data === token.ENQ) {

console.log("🧪 ANALYZER <- ENQ");
console.log("🧪 ANALYZER -> ACK");

setTimeout(() => {
this.emit('data', token.ACK);
}, 500);
}

// Mensaje ASTM recibido → ACK
else if (data.startsWith(token.STX)) {

console.log("🧪 ANALYZER <- ASTM MESSAGE");

setTimeout(() => {
this.emit('data', token.ACK);
}, 500);
}

// Fin transmisión
else if (data === token.EOT) {

console.log("🧪 ANALYZER <- EOT");
}
}


module.exports = FakeSerialPort;
50 changes: 50 additions & 0 deletions simulacion/simulator.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
const SerialAdapter = require('./fakeSerialAdapter');
const port = SerialAdapter.simulatorPort;

const token = {
ENQ: String.fromCharCode(5),
ACK: String.fromCharCode(6),
EOT: String.fromCharCode(4),
STX: String.fromCharCode(2)
};

port.on('open', () => {
console.log("SIMULADOR CONECTADO");
});

port.on('data', buffer => {

const data = buffer.toString('ascii');

console.log("HOST → EQUIPO:", JSON.stringify(data));

//-----------------------------------
// RESPUESTAS ASTM DEL EQUIPO
//-----------------------------------

// 1️⃣ Host quiere iniciar sesión
if (data === token.ENQ) {
console.log("EQUIPO → ACK");

setTimeout(() => {
port.write(token.ACK);
}, 200); // pequeño delay realista
return;
}

// 2️⃣ Host envía mensaje ASTM
if (data.startsWith(token.STX)) {
console.log("EQUIPO → ACK (mensaje recibido)");

setTimeout(() => {
port.write(token.ACK);
}, 150);
return;
}

// 3️⃣ Fin transmisión
if (data === token.EOT) {
console.log("EQUIPO → sesión finalizada");
return;
}
});
14 changes: 14 additions & 0 deletions simulacion/virtualLink.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
const FakeSerialPort = require('./fakeSerialPort');

function createVirtualSerialPair() {

const portA = new FakeSerialPort("APP");
const portB = new FakeSerialPort("SIMULATOR");

portA.connect(portB);
portB.connect(portA);

return { portA, portB };
}

module.exports = createVirtualSerialPair;