Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env node
- const e131 = require('e131')
- const ws281x = require('rpi-ws281x-native')
- function throttled(delay, fn) {
- let lastCall = 0;
- return function (...args) {
- const now = (new Date).getTime();
- if (now - lastCall < delay) {
- return;
- }
- lastCall = now;
- return fn(...args);
- }
- }
- const NUM_LEDS = parseInt(process.argv[2], 10) || 171
- let pixelData = new Uint32Array(NUM_LEDS)
- ws281x.init(NUM_LEDS)
- // ---- trap the SIGINT and reset before exit
- process.on('SIGINT', function () {
- ws281x.reset()
- process.nextTick(function () { process.exit(0) })
- })
- const server = new e131.Server([1])
- server.on('listening', function () {
- console.log(`server listening on port ${this.port}, universes ${this.universes}`)
- })
- const render = (packet) => {
- //var sourceName = packet.getSourceName()
- //var sequenceNumber = packet.getSequenceNumber()
- //var universe = packet.getUniverse()
- //var slotsData = packet.getSlotsData()
- //console.log('source="%s", seq=%d, universe=%d, slots=%d', sourceName, sequenceNumber, universe, slotsData.length)
- //console.log('slots data = %s', slotsData.toString('hex'))
- const slotsData = packet.getSlotsData()
- let hex = slotsData.toString('hex').match(/.{1,6}/g)
- hex.forEach((h, i) => pixelData[i] = `0x${h}`)
- ws281x.render(pixelData)
- //let hex = slotsData.toString('hex').match(/.{1,6}/g)
- //hex.forEach((h, i) => pixelData[i] = `0x${h}`)
- //ws281x.render(pixelData)
- //console.log(pixelData)
- }
- const throttledRender = throttled(5, render)
- server.on('packet', throttledRender)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement