From 7c95c4eaecdcfa2a68db616a8ac339179cbd0bb3 Mon Sep 17 00:00:00 2001 From: jachwe Date: Sat, 9 Apr 2016 18:15:17 +0200 Subject: [PATCH] added driver for artnet (enttec ode) (#13) --- drivers/artnet.js | 70 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 drivers/artnet.js diff --git a/drivers/artnet.js b/drivers/artnet.js new file mode 100644 index 0000000..c76c51d --- /dev/null +++ b/drivers/artnet.js @@ -0,0 +1,70 @@ +"use strict" + +const dgram = require('dgram'); + +const ARTNET = { + PORT : 6454, + HOST : "127.0.0.1" +} + +function EnttecODE(device_id, cb) { + var self = this + + self.header = new Buffer([65, 114, 116, 45, 78, 101, 116, 0, 0, 80, 0, 14]); + self.sequence = self.physical = new Buffer([0]); + self.length = new Buffer([0x02,0x00]); + + cb = cb || function() {} + this.universe = new Buffer(512) + this.universe.fill(0) + + self.sleepTime = 24 + self.timeout + + self.dev = dgram.createSocket('udp4'); + self.start(); + + // self.dev.bind(6454, function() { + + // }); +} + +EnttecODE.prototype.send_universe = function() { + + var pkg = Buffer.concat([this.header, this.sequence, this.physical,this.length,this.universe]); + + this.dev.send(pkg, 0, pkg.length, ARTNET.PORT, ARTNET.HOST, function() { + // Package Sent + }); +} + +EnttecODE.prototype.start = function() { + this.timeout = setInterval(this.send_universe.bind(this), this.sleepTime) +} + +EnttecODE.prototype.stop = function() { + clearInterval(this.timeout) +} + +EnttecODE.prototype.close = function(cb) { + this.stop() + this.dev.close(cb) +} + +EnttecODE.prototype.update = function(u) { + for (var c in u) { + this.universe[c] = u[c] + } +} + +EnttecODE.prototype.updateAll = function(v) { + for (var i = 0; i < 512; i++) { + this.universe[i] = v + } +} + +EnttecODE.prototype.get = function(c) { + return this.universe[c] +} + +module.exports = EnttecODE