diff --git a/.gitignore b/.gitignore index cfdef68..6568e15 100644 --- a/.gitignore +++ b/.gitignore @@ -10,5 +10,6 @@ lib-cov pids logs results +.DS_Store node_modules diff --git a/dmx.js b/dmx.js index 7ba4b0e..235549f 100644 --- a/dmx.js +++ b/dmx.js @@ -7,8 +7,9 @@ function DMX() { this.universes = {} this.drivers = {} - this.registerDriver('null', require('./drivers/null')) - this.registerDriver('enttec-usb-dmx-pro', require('./drivers/enttec-usb-dmx-pro')) + this.registerDriver('null', require('./drivers/null')) + this.registerDriver('enttec-usb-dmx-pro', require('./drivers/enttec-usb-dmx-pro')) + this.registerDriver('enttec-open-usb-dmx', require('./drivers/enttec-open-usb-dmx')) } util.inherits(DMX, EventEmitter) diff --git a/drivers/enttec-open-usb-dmx.js b/drivers/enttec-open-usb-dmx.js new file mode 100644 index 0000000..dd482c0 --- /dev/null +++ b/drivers/enttec-open-usb-dmx.js @@ -0,0 +1,60 @@ +"use strict" + +var FTDI = require('ftdi') + +var ENTTEC_PRO_DMX_STARTCODE = 0x00 + , ENTTEC_PRO_START_OF_MSG = 0x7e + , ENTTEC_PRO_END_OF_MSG = 0xe7 + , ENTTEC_PRO_SEND_DMX_RQ = 0x06 + ; + +function EnttecOpenUsbDMX(device_id, cb) { + var self = this + cb = cb || function() {} + this.universe = new Buffer(512) + this.universe.fill(0) + + this.dev = new FTDI.FtdiDevice(device_id) + this.dev.open({ + 'baudrate': 115200, + 'databits': 8, + 'stopbits': 2, + 'parity': 'none' + }, function(err) { + cb(err, device_id) + if(!err) { + self.send_universe() + } + }) +} + +EnttecOpenUsbDMX.prototype.send_universe = function() { + var hdr = Buffer([ + ENTTEC_PRO_START_OF_MSG, + ENTTEC_PRO_SEND_DMX_RQ, + // (this.universe.length + 1) & 0xff, + ((this.universe.length + 1) >> 0) & 0xff, + ((this.universe.length + 1) >> 8) & 0xff, + ENTTEC_PRO_DMX_STARTCODE + ]) + + var msg = Buffer.concat([ + hdr, + this.universe, + Buffer([ENTTEC_PRO_END_OF_MSG]) + ]) + this.dev.write(msg) +} + +EnttecOpenUsbDMX.prototype.update = function(u) { + for(var c in u) { + this.universe[c] = u[c] + } + this.send_universe() +} + +EnttecOpenUsbDMX.prototype.get = function(c) { + return this.universe[c] +} + +module.exports = EnttecOpenUsbDMX \ No newline at end of file