xled-js
Version:
Library to control Twinkly LED lights
52 lines (51 loc) • 1.87 kB
JavaScript
export class Movie {
constructor(data) {
this.id = data.id || 0;
this.name = data.name || "xled-js effect";
this.unique_id = data.unique_id || generateUUID();
this.descriptor_type = data.descriptor_type || "rgb_raw";
this.leds_per_frame = data.leds_per_frame || 0;
this.frames_number = data.frames_number || 0;
this.fps = data.fps || 0;
this.frameData = data.frames || null;
if (this.frameData) {
this.frames_number = this.frameData.length;
this.leds_per_frame = this.frameData[0].getNLeds();
}
}
export() {
return {
// id: this.id,
name: this.name,
unique_id: this.unique_id,
descriptor_type: this.descriptor_type,
leds_per_frame: this.leds_per_frame,
frames_number: this.frames_number,
fps: this.fps,
};
}
toOctet() {
const frames = this.frameData;
this.frames_number = frames.length;
this.leds_per_frame = frames[0].getNLeds();
const output = new Uint8Array(this.frames_number * this.leds_per_frame * 3);
frames.forEach((frame, index) => {
if (frame.getNLeds() != this.leds_per_frame)
throw new Error("Frames must all be the same length");
// convert to octet
let octet = frame.toOctet();
// add octet to output
let offset = index * this.leds_per_frame * 3;
output.set(octet, offset);
});
// this.frameData = output;
return output.buffer;
}
}
function generateUUID() {
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) {
const r = (Math.random() * 16) | 0;
const v = c === "x" ? r : (r & 0x3) | 0x8;
return v.toString(16);
});
}