diff --git a/README.md b/README.md index e5cccc6..d25cd81 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ or full ArtNet/DMX controllers. * Automatic discovery using `ArtPoll` / `ArtPollReply` * Low-level packet encoder/decoder which can be used as a binary protocol library without all other functionality. * Sending/receiving of DMX data (`ArtDmx`) +* Sending/receiving of ArtNet TimeCode data (`ArtTimeCode`) ## Usage Install Node ArtNet Protocol using NPM: @@ -32,11 +33,16 @@ controller.bind('0.0.0.0'); // Send DMX data (Sequence 0, Physical input port 0, Universe 0. controller.sendBroadcastPacket(new ArtDmx(0, 0, 0, [255, 0, 0])); -// Or if you want to receive DMX data +// Receive DMX data controller.on('dmx', (dmx) => { // dmx contains an ArtDmx object console.log(dmx.universe, dmx.data); }); + +// Receive timecode data +controller.on('timecode', (timecode) => { + console.log(`ArtNet TimeCode received (running @ ${timecode.framerate} fps): ${timecode.getTimeCodeString()}`); +}); ``` ## Reference diff --git a/dist/controller.d.ts b/dist/controller.d.ts index 5ffcab8..7f7511e 100644 --- a/dist/controller.d.ts +++ b/dist/controller.d.ts @@ -1,6 +1,6 @@ /// -import { ArtNetPacket } from './protocol'; -import EventEmitter = require('events'); +import { ArtNetPacket } from "./protocol"; +import EventEmitter = require("events"); export declare class ArtNetController extends EventEmitter { private readonly interfacePrefixes; private readonly isController; diff --git a/dist/controller.js b/dist/controller.js index f819056..ad10102 100644 --- a/dist/controller.js +++ b/dist/controller.js @@ -20,8 +20,8 @@ const PORT = 6454; class ArtNetController extends EventEmitter { constructor(isController = false) { super(); - this.nameShort = 'NodeArtNetProto'; - this.nameLong = 'https://github.com/jeffreykog/node-artnet-protocol'; + this.nameShort = "NodeArtNetProto"; + this.nameLong = "https://github.com/jeffreykog/node-artnet-protocol"; this.isController = isController; const interfaces = os.networkInterfaces(); const prefixes = {}; @@ -29,14 +29,14 @@ class ArtNetController extends EventEmitter { if (!addresses) { return; } - addresses.forEach(addressInfo => { + addresses.forEach((addressInfo) => { prefixes[addressInfo.cidr] = ip6addr.createCIDR(addressInfo.cidr); }); }); this.interfacePrefixes = prefixes; } bind(host) { - if (host === '0.0.0.0' || host === '::') { + if (host === "0.0.0.0" || host === "::") { host = undefined; } let prefixInfo = undefined; @@ -54,31 +54,37 @@ class ArtNetController extends EventEmitter { unicastAddress = host; } else { - throw Error('Bind host ' + host + ' does not match any network interface'); + throw Error("Bind host " + host + " does not match any network interface"); } } else { - broadcastAddress = '0.0.0.0'; + broadcastAddress = "0.0.0.0"; } if (broadcastAddress !== null) { console.log("Binding broadcast address " + broadcastAddress + ":6454"); this.broadcastAddress = broadcastAddress; - const socketBroadcast = dgram.createSocket({ type: 'udp4', reuseAddr: true }); - socketBroadcast.on('error', this.onSocketError); - socketBroadcast.on('message', (message, rinfo) => { - this.onSocketMessage('broadcast', message, rinfo); + const socketBroadcast = dgram.createSocket({ + type: "udp4", + reuseAddr: true, }); - socketBroadcast.on('listening', this.onSocketBroadcastListening.bind(this)); + socketBroadcast.on("error", this.onSocketError); + socketBroadcast.on("message", (message, rinfo) => { + this.onSocketMessage("broadcast", message, rinfo); + }); + socketBroadcast.on("listening", this.onSocketBroadcastListening.bind(this)); socketBroadcast.bind(PORT, broadcastAddress); this.socketBroadcast = socketBroadcast; } if (unicastAddress !== null) { console.log("Binding unicast address " + unicastAddress + ":6454"); this.unicastAddress = unicastAddress; - const socketUnicast = dgram.createSocket({ type: 'udp4', reuseAddr: true }); - socketUnicast.on('error', this.onSocketError); - socketUnicast.on('message', (message, rinfo) => { - this.onSocketMessage('unicast', message, rinfo); + const socketUnicast = dgram.createSocket({ + type: "udp4", + reuseAddr: true, + }); + socketUnicast.on("error", this.onSocketError); + socketUnicast.on("message", (message, rinfo) => { + this.onSocketMessage("unicast", message, rinfo); }); socketUnicast.bind(PORT, unicastAddress); this.socketUnicast = socketUnicast; @@ -111,8 +117,7 @@ class ArtNetController extends EventEmitter { ]); }); } - onSocketError(err) { - } + onSocketError(err) { } onSocketBroadcastListening() { if (this.socketBroadcast == null) { return; @@ -134,6 +139,9 @@ class ArtNetController extends EventEmitter { if (packet instanceof protocol_1.ArtDmx) { this.emit("dmx", packet); } + else if (packet instanceof protocol_1.ArtTimeCode) { + this.emit("timecode", packet); + } else if (packet instanceof protocol_1.ArtPoll) { this.sendArtPollReply(); } diff --git a/dist/controller.js.map b/dist/controller.js.map index dffefd4..5f0aa27 100644 --- a/dist/controller.js.map +++ b/dist/controller.js.map @@ -1 +1 @@ -{"version":3,"file":"controller.js","sourceRoot":"","sources":["../lib/controller.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"controller.js","sourceRoot":"","sources":["../lib/controller.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/protocol.d.ts b/dist/protocol.d.ts index 2217183..a80b192 100644 --- a/dist/protocol.d.ts +++ b/dist/protocol.d.ts @@ -112,6 +112,22 @@ export declare class ArtDmx extends ArtNetPacket { static decode(data: Buffer): ArtDmx; encode(): Buffer; } +export declare class ArtTimeCode extends ArtNetPacket { + opcode: number; + protocolVersion: number; + framerate: number; + stream: number; + frames: number; + seconds: number; + minutes: number; + hours: number; + constructor(hours: number, minutes: number, seconds: number, frames: number, framerate: number, stream?: number); + getTimeCodeString(): string; + static getType(framerate: number): number; + static getFramerate(type: number): number; + static decode(data: Buffer): ArtTimeCode; + encode(): Buffer; +} export declare class ArtSync extends ArtNetPacket { opcode: number; protocolVersion: number; diff --git a/dist/protocol.js b/dist/protocol.js index 7d29c83..8d65aa8 100644 --- a/dist/protocol.js +++ b/dist/protocol.js @@ -1,6 +1,6 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.decode = exports.ArtSync = exports.ArtDmx = exports.ArtPollReply = exports.ArtPoll = exports.ArtNetPacket = exports.OutputPortStatus = exports.InputPortStatus = exports.PortInfo = void 0; +exports.decode = exports.ArtSync = exports.ArtTimeCode = exports.ArtDmx = exports.ArtPollReply = exports.ArtPoll = exports.ArtNetPacket = exports.OutputPortStatus = exports.InputPortStatus = exports.PortInfo = void 0; const opcodes_1 = require("./opcodes"); const header = Buffer.from([65, 114, 116, 45, 78, 101, 116, 0]); class PortInfo { @@ -514,6 +514,80 @@ class ArtDmx extends ArtNetPacket { } } exports.ArtDmx = ArtDmx; +class ArtTimeCode extends ArtNetPacket { + constructor(hours, minutes, seconds, frames, framerate, stream = 0) { + super(); + this.opcode = opcodes_1.OP_TIME_CODE; + this.protocolVersion = 14; + this.stream = 0; + this.protocolVersion = 14; + this.framerate = framerate; + this.stream = stream; + this.frames = frames; + this.seconds = seconds; + this.minutes = minutes; + this.hours = hours; + } + getTimeCodeString() { + const tcFinalSeparator = this.framerate === 29.97 ? ';' : ':'; + return `${this.hours.toString().padStart(2, '0')}:${this.minutes.toString().padStart(2, '0')}:${this.seconds.toString().padStart(2, '0')}${tcFinalSeparator}${this.frames.toString().padStart(2, '0')}`; + } + static getType(framerate) { + switch (framerate) { + case 24: + return 0; + case 25: + return 1; + case 29.97: + return 2; + case 30: + return 3; + default: + return 0; + } + } + static getFramerate(type) { + switch (type) { + case 0: + return 24; + case 1: + return 25; + case 2: + return 29.97; + case 3: + return 30; + default: + return 24; + } + } + static decode(data) { + const version = data.readUInt16BE(0); + const stream = data.readUInt8(3); + const frames = data.readUInt8(4); + const seconds = data.readUInt8(5); + const minutes = data.readUInt8(6); + const hours = data.readUInt8(7); + const type = data.readUInt8(8); + const framerate = this.getFramerate(type); + const result = new ArtTimeCode(hours, minutes, seconds, frames, framerate, stream); + result.protocolVersion = version; + return result; + } + encode() { + const header = super.encode(); + const buffer = Buffer.alloc(9); + buffer.writeUInt16BE(this.protocolVersion, 0); + buffer.writeUInt8(0, 2); + buffer.writeUInt8(this.stream, 3); + buffer.writeUInt8(this.frames, 4); + buffer.writeUInt8(this.seconds, 5); + buffer.writeUInt8(this.minutes, 6); + buffer.writeUInt8(this.hours, 7); + buffer.writeUInt8(ArtTimeCode.getType(this.framerate), 8); + return Buffer.concat([header, buffer]); + } +} +exports.ArtTimeCode = ArtTimeCode; class ArtSync extends ArtNetPacket { constructor() { super(...arguments); @@ -554,6 +628,8 @@ function decode(msg) { return ArtDmx.decode(packetData); case opcodes_1.OP_SYNC: return ArtSync.decode(packetData); + case opcodes_1.OP_TIME_CODE: + return ArtTimeCode.decode(packetData); default: console.log("Unknown packet type:", opCode); return null; diff --git a/dist/protocol.js.map b/dist/protocol.js.map index dc98909..ce97dab 100644 --- a/dist/protocol.js.map +++ b/dist/protocol.js.map @@ -1 +1 @@ -{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../lib/protocol.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../lib/protocol.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/controller.ts b/lib/controller.ts index 31cc435..2d6decc 100644 --- a/lib/controller.ts +++ b/lib/controller.ts @@ -1,160 +1,200 @@ -import { RemoteInfo, Socket } from 'dgram'; +import { RemoteInfo, Socket } from "dgram"; import Timeout = NodeJS.Timeout; -import { ArtDmx, ArtNetPacket, ArtPoll, ArtPollReply, decode, PortInfo } from './protocol'; -import { DP_ALL, PROTOCOL_DMX512 } from './opcodes'; -import * as dgram from 'dgram'; -import * as ip6addr from 'ip6addr'; -import * as os from 'os'; -import EventEmitter = require('events'); +import { + ArtDmx, + ArtNetPacket, + ArtPoll, + ArtPollReply, + ArtTimeCode, + decode, + PortInfo, +} from "./protocol"; +import { DP_ALL, PROTOCOL_DMX512 } from "./opcodes"; +import * as dgram from "dgram"; +import * as ip6addr from "ip6addr"; +import * as os from "os"; +import EventEmitter = require("events"); const PORT = 6454; export class ArtNetController extends EventEmitter { - - private readonly interfacePrefixes: { [key: string]: ip6addr.CIDR }; - private readonly isController: boolean; - - private socketUnicast?: Socket; - private socketBroadcast?: Socket; - - private broadcastAddress?: string; - private unicastAddress?: string; - - private intervalArtPoll?: Timeout; - - public nameShort: string = 'NodeArtNetProto'; - public nameLong: string = 'https://github.com/jeffreykog/node-artnet-protocol'; - - constructor(isController: boolean = false) { - super(); - - this.isController = isController; - - const interfaces = os.networkInterfaces(); - const prefixes: { [key: string]: ip6addr.CIDR } = {}; - Object.entries(interfaces).forEach(([ifName, addresses]) => { - if (!addresses) { - return; - } - addresses.forEach(addressInfo => { - prefixes[addressInfo.cidr as string] = ip6addr.createCIDR(addressInfo.cidr as string); - }); - }); - this.interfacePrefixes = prefixes; + private readonly interfacePrefixes: { [key: string]: ip6addr.CIDR }; + private readonly isController: boolean; + + private socketUnicast?: Socket; + private socketBroadcast?: Socket; + + private broadcastAddress?: string; + private unicastAddress?: string; + + private intervalArtPoll?: Timeout; + + public nameShort: string = "NodeArtNetProto"; + public nameLong: string = + "https://github.com/jeffreykog/node-artnet-protocol"; + + constructor(isController: boolean = false) { + super(); + + this.isController = isController; + + const interfaces = os.networkInterfaces(); + const prefixes: { [key: string]: ip6addr.CIDR } = {}; + Object.entries(interfaces).forEach(([ifName, addresses]) => { + if (!addresses) { + return; + } + addresses.forEach((addressInfo) => { + prefixes[addressInfo.cidr as string] = ip6addr.createCIDR( + addressInfo.cidr as string + ); + }); + }); + this.interfacePrefixes = prefixes; + } + + public bind(host?: string) { + if (host === "0.0.0.0" || host === "::") { + host = undefined; } - - public bind(host?: string) { - if (host === '0.0.0.0' || host === '::') { - host = undefined; - } - let prefixInfo: ip6addr.CIDR | undefined = undefined; - let broadcastAddress: string | undefined = undefined; - let unicastAddress: string | undefined = undefined; - if (host != null) { - Object.keys(this.interfacePrefixes).forEach((cidr) => { - const prefix = this.interfacePrefixes[cidr]; - if (prefix.contains(host as string)) { - prefixInfo = prefix; - } - }); - if (prefixInfo) { - broadcastAddress = (prefixInfo as ip6addr.CIDR).broadcast().toString(); - unicastAddress = host; - } else { - throw Error('Bind host ' + host + ' does not match any network interface') - } - } else { - broadcastAddress = '0.0.0.0'; - } - - if (broadcastAddress !== null) { - console.log("Binding broadcast address " + broadcastAddress + ":6454"); - this.broadcastAddress = broadcastAddress; - const socketBroadcast = dgram.createSocket({type: 'udp4', reuseAddr: true}); - socketBroadcast.on('error', this.onSocketError); - socketBroadcast.on('message', (message, rinfo) => { - this.onSocketMessage('broadcast', message, rinfo); - }); - socketBroadcast.on('listening', this.onSocketBroadcastListening.bind(this)); - socketBroadcast.bind(PORT, broadcastAddress); - this.socketBroadcast = socketBroadcast; - } - if (unicastAddress !== null) { - console.log("Binding unicast address " + unicastAddress + ":6454"); - this.unicastAddress = unicastAddress; - const socketUnicast = dgram.createSocket({type: 'udp4', reuseAddr: true}); - socketUnicast.on('error', this.onSocketError); - socketUnicast.on('message', (message, rinfo) => { - this.onSocketMessage('unicast', message, rinfo); - }); - socketUnicast.bind(PORT, unicastAddress); - this.socketUnicast = socketUnicast; - } - - if (this.isController) { - this.intervalArtPoll = setInterval(this.artPollTimer.bind(this), 5000); - } - - // Send ArtPollReply message to interface on startup, announcing ShowMaster as a controller. - if (this.unicastAddress != null) { - this.sendArtPollReply(); + let prefixInfo: ip6addr.CIDR | undefined = undefined; + let broadcastAddress: string | undefined = undefined; + let unicastAddress: string | undefined = undefined; + if (host != null) { + Object.keys(this.interfacePrefixes).forEach((cidr) => { + const prefix = this.interfacePrefixes[cidr]; + if (prefix.contains(host as string)) { + prefixInfo = prefix; } + }); + if (prefixInfo) { + broadcastAddress = (prefixInfo as ip6addr.CIDR).broadcast().toString(); + unicastAddress = host; + } else { + throw Error( + "Bind host " + host + " does not match any network interface" + ); + } + } else { + broadcastAddress = "0.0.0.0"; } - public sendBroadcastPacket(packet: ArtNetPacket) { - if (this.socketBroadcast == null) { - return; - } - const buffer = packet.encode(); - this.socketBroadcast.send(buffer, 0, buffer.length, PORT, this.broadcastAddress); + if (broadcastAddress !== null) { + console.log("Binding broadcast address " + broadcastAddress + ":6454"); + this.broadcastAddress = broadcastAddress; + const socketBroadcast = dgram.createSocket({ + type: "udp4", + reuseAddr: true, + }); + socketBroadcast.on("error", this.onSocketError); + socketBroadcast.on("message", (message, rinfo) => { + this.onSocketMessage("broadcast", message, rinfo); + }); + socketBroadcast.on( + "listening", + this.onSocketBroadcastListening.bind(this) + ); + socketBroadcast.bind(PORT, broadcastAddress); + this.socketBroadcast = socketBroadcast; } - - private artPollTimer() { - this.sendBroadcastPacket(new ArtPoll(true, true, true, false, DP_ALL)); + if (unicastAddress !== null) { + console.log("Binding unicast address " + unicastAddress + ":6454"); + this.unicastAddress = unicastAddress; + const socketUnicast = dgram.createSocket({ + type: "udp4", + reuseAddr: true, + }); + socketUnicast.on("error", this.onSocketError); + socketUnicast.on("message", (message, rinfo) => { + this.onSocketMessage("unicast", message, rinfo); + }); + socketUnicast.bind(PORT, unicastAddress); + this.socketUnicast = socketUnicast; } - public async close() { - if (this.intervalArtPoll) { - clearInterval(this.intervalArtPoll); - } - await Promise.all([ - new Promise((resolve) => this.socketBroadcast?.close(() => resolve(undefined))), - new Promise((resolve) => this.socketUnicast?.close(() => resolve(undefined))), - ]); + if (this.isController) { + this.intervalArtPoll = setInterval(this.artPollTimer.bind(this), 5000); } - private onSocketError(err: Error) { - + // Send ArtPollReply message to interface on startup, announcing ShowMaster as a controller. + if (this.unicastAddress != null) { + this.sendArtPollReply(); } + } - private onSocketBroadcastListening() { - if (this.socketBroadcast == null) { - return; - } - this.socketBroadcast.setBroadcast(true); + public sendBroadcastPacket(packet: ArtNetPacket) { + if (this.socketBroadcast == null) { + return; } - - private sendArtPollReply() { - const packet = new ArtPollReply(this.unicastAddress!, PORT, 0, 0, 0, 0xffff, 0, 1); - packet.nameShort = this.nameShort; - packet.nameLong = this.nameLong; - packet.portInfo[0] = new PortInfo(false, true, PROTOCOL_DMX512); - this.sendBroadcastPacket(packet); + const buffer = packet.encode(); + this.socketBroadcast.send( + buffer, + 0, + buffer.length, + PORT, + this.broadcastAddress + ); + } + + private artPollTimer() { + this.sendBroadcastPacket(new ArtPoll(true, true, true, false, DP_ALL)); + } + + public async close() { + if (this.intervalArtPoll) { + clearInterval(this.intervalArtPoll); + } + await Promise.all([ + new Promise((resolve) => + this.socketBroadcast?.close(() => resolve(undefined)) + ), + new Promise((resolve) => + this.socketUnicast?.close(() => resolve(undefined)) + ), + ]); + } + + private onSocketError(err: Error) {} + + private onSocketBroadcastListening() { + if (this.socketBroadcast == null) { + return; + } + this.socketBroadcast.setBroadcast(true); + } + + private sendArtPollReply() { + const packet = new ArtPollReply( + this.unicastAddress!, + PORT, + 0, + 0, + 0, + 0xffff, + 0, + 1 + ); + packet.nameShort = this.nameShort; + packet.nameLong = this.nameLong; + packet.portInfo[0] = new PortInfo(false, true, PROTOCOL_DMX512); + this.sendBroadcastPacket(packet); + } + + private onSocketMessage(socketType: string, msg: Buffer, rinfo: RemoteInfo) { + const packet = decode(msg); + if (!packet) { + return; } - private onSocketMessage(socketType: string, msg: Buffer, rinfo: RemoteInfo) { - const packet = decode(msg); - if (!packet) { - return; - } - - if (packet instanceof ArtDmx) { - this.emit("dmx", packet); - } else if (packet instanceof ArtPoll) { - this.sendArtPollReply(); - } else if (packet instanceof ArtPollReply) { - } else { - console.log(packet.toString()); - } + if (packet instanceof ArtDmx) { + this.emit("dmx", packet); + } else if (packet instanceof ArtTimeCode) { + this.emit("timecode", packet); + } else if (packet instanceof ArtPoll) { + this.sendArtPollReply(); + } else if (packet instanceof ArtPollReply) { + } else { + console.log(packet.toString()); } + } } diff --git a/lib/protocol.ts b/lib/protocol.ts index 5021aed..81e97a8 100644 --- a/lib/protocol.ts +++ b/lib/protocol.ts @@ -4,6 +4,7 @@ import { OP_OUTPUT, OP_POLL, OP_POLL_REPLY, OP_SYNC, + OP_TIME_CODE, PAPA_UNUSED, PROTOCOL_DMX512, STYLE_NODE } from './opcodes'; @@ -607,6 +608,89 @@ export class ArtDmx extends ArtNetPacket { return Buffer.concat([header, buffer]); } } +export class ArtTimeCode extends ArtNetPacket { + opcode = OP_TIME_CODE; + protocolVersion = 14; + framerate: number; + stream: number = 0; + frames: number; + seconds: number; + minutes: number; + hours: number; + + constructor(hours: number,minutes: number,seconds: number,frames: number,framerate: number, stream: number = 0) { + super(); + this.protocolVersion = 14; + this.framerate = framerate; + this.stream = stream; + this.frames = frames; + this.seconds = seconds; + this.minutes = minutes; + this.hours = hours; + } + + getTimeCodeString(): string { + const tcFinalSeparator = this.framerate === 29.97 ? ';' : ':'; + return `${this.hours.toString().padStart(2, '0')}:${this.minutes.toString().padStart(2, '0')}:${this.seconds.toString().padStart(2, '0')}${tcFinalSeparator}${this.frames.toString().padStart(2, '0')}`; + } + + static getType(framerate: number): number { + //get type from framerate + switch (framerate) { + case 24: + return 0; + case 25: + return 1; + case 29.97: + return 2; + case 30: + return 3; + default: + return 0; + } + } + static getFramerate(type: number): number { + switch (type) { + case 0: + return 24; + case 1: + return 25; + case 2: + return 29.97; + case 3: + return 30; + default: + return 24; + } + } + + static decode(data: Buffer) { + const version = data.readUInt16BE(0); + const stream = data.readUInt8(3); + const frames = data.readUInt8(4); + const seconds = data.readUInt8(5); + const minutes = data.readUInt8(6); + const hours = data.readUInt8(7); + const type = data.readUInt8(8); + const framerate = this.getFramerate(type); + const result = new ArtTimeCode(hours, minutes, seconds, frames, framerate, stream); + result.protocolVersion = version; + return result; + } + encode() { + const header = super.encode(); + const buffer = Buffer.alloc(9); + buffer.writeUInt16BE(this.protocolVersion, 0); + buffer.writeUInt8(0, 2); //filler + buffer.writeUInt8(this.stream, 3); + buffer.writeUInt8(this.frames, 4); + buffer.writeUInt8(this.seconds, 5); + buffer.writeUInt8(this.minutes, 6); + buffer.writeUInt8(this.hours, 7); + buffer.writeUInt8(ArtTimeCode.getType(this.framerate), 8); + return Buffer.concat([header, buffer]); + } +} export class ArtSync extends ArtNetPacket { @@ -653,8 +737,11 @@ export function decode(msg: Buffer): ArtNetPacket | null { case OP_SYNC: return ArtSync.decode(packetData); + case OP_TIME_CODE: + return ArtTimeCode.decode(packetData); + default: console.log("Unknown packet type:", opCode); return null; } -} +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 559c91f..0c05b18 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,19 +1,19 @@ { "name": "artnet-protocol", - "version": "0.1.0", + "version": "0.2.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "artnet-protocol", - "version": "0.1.0", - "license": "ISC", + "version": "0.2.1", + "license": "MIT", "dependencies": { "ip6addr": "^0.2.3" }, "devDependencies": { "@types/ip6addr": "^0.2.2", - "@types/node": "^15.6.1", + "@types/node": "^15.14.9", "typescript": "^4.3.2" } }, @@ -24,9 +24,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "15.12.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.1.tgz", - "integrity": "sha512-zyxJM8I1c9q5sRMtVF+zdd13Jt6RU4r4qfhTd7lQubyThvLfx6yYekWSQjGCGV2Tkecgxnlpl/DNlb6Hg+dmEw==", + "version": "15.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.9.tgz", + "integrity": "sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A==", "dev": true }, "node_modules/assert-plus": { @@ -113,9 +113,9 @@ "dev": true }, "@types/node": { - "version": "15.12.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.1.tgz", - "integrity": "sha512-zyxJM8I1c9q5sRMtVF+zdd13Jt6RU4r4qfhTd7lQubyThvLfx6yYekWSQjGCGV2Tkecgxnlpl/DNlb6Hg+dmEw==", + "version": "15.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.14.9.tgz", + "integrity": "sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A==", "dev": true }, "assert-plus": { diff --git a/package.json b/package.json index bbaf7df..eef50e2 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,8 @@ "main": "./dist/index.js", "types": "./dist/index.d.js", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "test": "echo \"Error: no test specified\" && exit 1", + "build": "tsc" }, "repository": { "type": "git", @@ -26,7 +27,7 @@ }, "devDependencies": { "@types/ip6addr": "^0.2.2", - "@types/node": "^15.6.1", + "@types/node": "^15.14.9", "typescript": "^4.3.2" } }