diff --git a/dist/lib/light.js b/dist/lib/light.js index ca1b6ef..f7f2d27 100644 --- a/dist/lib/light.js +++ b/dist/lib/light.js @@ -516,21 +516,28 @@ export class Light { throw new Error("UDP not supported in browser"); // Generate the header let tokenArray = this.token.getTokenDecoded(); - let udpHeader = Buffer.alloc(tokenArray.length + 4); - udpHeader.writeUInt8(0x03); // the version number - udpHeader.fill(tokenArray, 1); // the actual token, 8 bytes - udpHeader.writeUInt8(0x00, tokenArray.length + 1); // zero blanking - udpHeader.writeUInt8(0x00, tokenArray.length + 2); // zero blanking - udpHeader.writeUInt8(0x00, tokenArray.length + 3); // number of packets (currently only 1 as i only hav 250 leds) - // Generate the body - const data = Buffer.alloc(udpHeader.length + frame.getNLeds() * 3); - data.fill(udpHeader); - data.fill(frame.toOctet(), udpHeader.length); - this.udpClient.send(data, 7777, this.ipaddr, (error) => { - if (error) { - console.warn(error); - } - }); + let rawFrame = frame.toOctet(); + let packetId = 0; + do { + let framePart = rawFrame.slice(0, 900); + rawFrame = rawFrame.slice(900); + let udpHeader = Buffer.alloc(tokenArray.length + 4); + udpHeader.writeUInt8(0x03); // the version number + udpHeader.fill(tokenArray, 1); // the actual token, 8 bytes + udpHeader.writeUInt8(0x00, tokenArray.length + 1); // zero blanking + udpHeader.writeUInt8(0x00, tokenArray.length + 2); // zero blanking + udpHeader.writeUInt8(packetId, tokenArray.length + 3); + // Generate the body + const data = Buffer.alloc(udpHeader.length + framePart.length); + data.fill(udpHeader); + data.fill(framePart, udpHeader.length); + this.udpClient.send(data, 7777, this.ipaddr, (error) => { + if (error) { + console.warn(error); + } + }); + packetId++; + } while (rawFrame.length > 0); }); } /** diff --git a/src/lib/light.ts b/src/lib/light.ts index 28a7931..e6e4b46 100644 --- a/src/lib/light.ts +++ b/src/lib/light.ts @@ -503,23 +503,31 @@ export class Light { // Generate the header let tokenArray = this.token.getTokenDecoded(); - let udpHeader = Buffer.alloc(tokenArray.length + 4); - - udpHeader.writeUInt8(0x03); // the version number - udpHeader.fill(tokenArray, 1); // the actual token, 8 bytes - udpHeader.writeUInt8(0x00, tokenArray.length + 1); // zero blanking - udpHeader.writeUInt8(0x00, tokenArray.length + 2); // zero blanking - udpHeader.writeUInt8(0x00, tokenArray.length + 3); // number of packets (currently only 1 as i only hav 250 leds) - - // Generate the body - const data = Buffer.alloc(udpHeader.length + frame.getNLeds() * 3); - data.fill(udpHeader); - data.fill(frame.toOctet(), udpHeader.length); - this.udpClient.send(data, 7777, this.ipaddr, (error: any) => { - if (error) { - console.warn(error); - } - }); + + let rawFrame = frame.toOctet(); + let packetId = 0; + do { + let framePart = rawFrame.slice(0, 900); + rawFrame = rawFrame.slice(900); + + let udpHeader = Buffer.alloc(tokenArray.length + 4); + udpHeader.writeUInt8(0x03); // the version number + udpHeader.fill(tokenArray, 1); // the actual token, 8 bytes + udpHeader.writeUInt8(0x00, tokenArray.length + 1); // zero blanking + udpHeader.writeUInt8(0x00, tokenArray.length + 2); // zero blanking + udpHeader.writeUInt8(packetId, tokenArray.length + 3); + + // Generate the body + const data = Buffer.alloc(udpHeader.length + framePart.length); + data.fill(udpHeader); + data.fill(framePart, udpHeader.length); + this.udpClient.send(data, 7777, this.ipaddr, (error: any) => { + if (error) { + console.warn(error); + } + }); + packetId++; + } while (rawFrame.length > 0); } /** * Get a list of movies