Edit: Il semble que serialport accepte une parser
en option, qui prend une EventEmitter
et un tampon brut:
var myParser = function(emitter, buffer) {
// Inspect buffer, emit on emitter:
if(buffer.toString("utf8", 0, 3) === "foo")
emitter.emit("foo", buffer);
else
emitter.emit("data", buffer);
};
var serialport = new SerialPort("/dev/foo", { parser: myParser });
serialport.on("foo", function(data) {
// Do stuff
});
Mise à jour: De toute évidence, vous aurez besoin de tamponner le les données qui entrent, le massent d'une manière ou d'une autre, mais vous seul savez à quelles données vous attendre. Vous pouvez jeter un oeil à serialport's readline parser en introduction. Sans le tester, je pense que c'est le meilleur moyen, mais je laisse ma solution initiale ci-dessous.
Vous pouvez le faire avec un proxy:
var events = require('events');
var util = require('util');
var SerialProxy = function(serialport){
events.EventEmitter.call(this);
var self = this;
serialport.on("data", function(data) {
// Inspect data to see which event to emit
// data is a Buffer object
var prefix = data.toString("utf8", 0, 3);
if(prefix === "foo")
self.emit("foo", data.toString("utf8", 3));
else if(prefix === "bar")
self.emit("bar", data.toString("utf8", 3));
else
self.emit("data", data.toString("utf8"));
});
};
util.inherits(SerialProxy, events.EventEmitter);
Utilisation:
var serialProxy = new SerialProxy(serialport);
serialProxy.on("foo", function(data) {
// ...
});
serialProxy.on("bar", function(data) {
// ...
});
serialProxy.on("data", function(data) {
// ...
});
aucun problème. La seule modification requise consistait à convertir les données en chaîne comme suit: data = data.toString(); puis continuer avec le reste de .... var prefix = data.substring (0, 3); if (prefix === "") etc – htown0724082
Très bien - J'ai effectivement fait cela avec l'analyseur (la solution de rechange après ma première mise à jour, je recommande réellement de cette façon), mais je vais mettre à jour l'autre solution en conséquence. Note: S'il y a beaucoup de données, vous pouvez opérer directement sur 'Buffer' en utilisant' buffer.toString ('utf8', 0, 3) 'par exemple. Voir [docs buffer node.js] (http://nodejs.org/docs/latest/api/buffers.html). –
Intéressant, avez-vous testé votre solution mise à jour? options.parser (me, buffer) ^ TypeError: La propriété 'analyseur' de l'objet #