dmx-flok/drivers/enttec-open-usb-dmx.js
2018-12-27 21:51:25 +00:00

75 lines
1.5 KiB
JavaScript

const SerialPort = require('serialport');
function EnttecOpenUsbDMX(deviceId, options) {
const self = this;
options = options || {};
this.universe = new Buffer(513);
this.universe.fill(0);
self.interval = 46;
this.dev = new SerialPort(deviceId, {
'baudRate': 250000,
'dataBits': 8,
'stopBits': 2,
'parity': 'none',
}, err => {
if (err) {
console.log(err);
return;
}
self.start();
});
}
EnttecOpenUsbDMX.prototype.sendUniverse = function () {
const self = this;
if (!this.dev.writable) {
return;
}
// toggle break
self.dev.set({brk: true, rts: true}, (err, r) => {
setTimeout(() => {
self.dev.set({brk: false, rts: true}, (err, r) => {
setTimeout(() => {
self.dev.write(Buffer.concat([Buffer([0]), self.universe.slice(1)]));
}, 1);
});
}, 1);
});
};
EnttecOpenUsbDMX.prototype.start = function () {
this.intervalhandle = setInterval(this.sendUniverse.bind(this), this.interval);
};
EnttecOpenUsbDMX.prototype.stop = function () {
clearInterval(this.intervalhandle);
};
EnttecOpenUsbDMX.prototype.close = function (cb) {
this.stop();
this.dev.close(cb);
};
EnttecOpenUsbDMX.prototype.update = function (u) {
for (const c in u) {
this.universe[c] = u[c];
}
};
EnttecOpenUsbDMX.prototype.updateAll = function (v) {
for (let i = 1; i <= 512; i++) {
this.universe[i] = v;
}
};
EnttecOpenUsbDMX.prototype.get = function (c) {
return this.universe[c];
};
module.exports = EnttecOpenUsbDMX;