Skip to content

Commit

Permalink
Support for 1-byte rgb preview
Browse files Browse the repository at this point in the history
app.js: 1 byte rgb support

LedModFixture.preview: add 1-byte rgb checkbox
  • Loading branch information
ewoudwijma committed Jun 28, 2024
1 parent c7c7186 commit fc996c9
Show file tree
Hide file tree
Showing 6 changed files with 1,298 additions and 1,270 deletions.
19 changes: 14 additions & 5 deletions data/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -270,17 +270,26 @@ function preview3D(canvasNode, buffer) {
//light up the cube
let headerBytes = 4;
var i = 0;
let rgb1B = jsonValues.pview.nrOfLeds == buffer.length - headerBytes; //1-byte rgb
// console.log(jsonValues.pview.nrOfLeds, buffer.length);
if (jsonValues.pview.outputs) {
// console.log("preview3D jsonValues", jsonValues.pview);
for (var output of jsonValues.pview.outputs) {
if (output.leds) {
for (var led of output.leds) {
if (i < scene.children.length) {
// scene.children[i].visible = buffer[headerBytes + i*3] + buffer[headerBytes + i*3 + 1] + buffer[headerBytes + i*3 + 2] > 10; //do not show blacks
// if (scene.children[i].visible) {
scene.children[i].material.color = new THREE.Color(`${buffer[headerBytes + i*3]/255}`, `${buffer[headerBytes + i*3 + 1]/255}`, `${buffer[headerBytes + i*3 + 2]/255}`);
// scene.children[i].geometry.setAtttribute("radius", buffer[4] / 30);
// }
if (rgb1B) {
let bte = buffer[headerBytes + i];
//decode rgb from 8 bits: 3 for red, 3 for green, 2 for blue
scene.children[i].material.color = new THREE.Color(`${((bte & 0xE0) >> 5)*32/256}`, `${((bte & 0x1C) >> 2)*32/256}`, `${(bte & 0x03)*64/256}`);
}
else {
// scene.children[i].visible = buffer[headerBytes + i*3] + buffer[headerBytes + i*3 + 1] + buffer[headerBytes + i*3 + 2] > 10; //do not show blacks
// if (scene.children[i].visible) {
scene.children[i].material.color = new THREE.Color(`${buffer[headerBytes + i*3]/255}`, `${buffer[headerBytes + i*3 + 1]/255}`, `${buffer[headerBytes + i*3 + 2]/255}`);
// scene.children[i].geometry.setAtttribute("radius", buffer[4] / 30);
// }
}
}
i++;
}
Expand Down
2 changes: 1 addition & 1 deletion src/App/LedFixture.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
void Fixture::projectAndMap() {
char fileName[32] = "";

if (files->seqNrToName(fileName, fixtureNr)) { // get the fixture.json
if (files->seqNrToName(fileName, fixtureNr, "F_")) { // get the fixture.json
StarJson starJson(fileName); //open fileName for deserialize

// reset leds
Expand Down
23 changes: 18 additions & 5 deletions src/App/LedModFixture.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ class LedModFixture:public SysModule {

uint8_t viewRotation = 0;
uint8_t bri = 10;
bool rgb1B = true;

LedModFixture() :SysModule("Fixture") {};

Expand Down Expand Up @@ -96,12 +97,17 @@ class LedModFixture:public SysModule {
// send leds preview to clients
for (size_t i = 0; i < eff->fixture.nrOfLeds; i++)
{
buffer[headerBytes + i*3] = eff->fixture.ledsP[i].red;
buffer[headerBytes + i*3+1] = eff->fixture.ledsP[i].green;
buffer[headerBytes + i*3+2] = eff->fixture.ledsP[i].blue;
if (rgb1B) {
//encode rgb in 8 bits: 3 for red, 3 for green, 2 for blue
buffer[headerBytes + i] = (eff->fixture.ledsP[i].red & 0xE0) | ((eff->fixture.ledsP[i].green & 0xE0)>>3) | (eff->fixture.ledsP[i].blue >> 6);
}
else {
buffer[headerBytes + i*3] = eff->fixture.ledsP[i].red;
buffer[headerBytes + i*3+1] = eff->fixture.ledsP[i].green;
buffer[headerBytes + i*3+2] = eff->fixture.ledsP[i].blue;
}
}

}, headerBytes + eff->fixture.nrOfLeds * 3, true);
}, headerBytes + eff->fixture.nrOfLeds * (rgb1B?1:3), true);
return true;
}
default: return false;
Expand All @@ -123,6 +129,13 @@ class LedModFixture:public SysModule {
default: return false;
}});

ui->initCheckBox(currentVar, "rgb1B", &rgb1B, false, [](JsonObject var, unsigned8 rowNr, unsigned8 funType) { switch (funType) { //varFun
case onUI:
ui->setLabel(var, "1-byte RGB");
return true;
default: return false;
}});

currentVar = ui->initSelect(parentVar, "fixture", &eff->fixture.fixtureNr, false ,[](JsonObject var, unsigned8 rowNr, unsigned8 funType) { switch (funType) { //varFun
case onUI: {
// ui->setComment(var, "Fixture to display effect on");
Expand Down
22 changes: 12 additions & 10 deletions src/Sys/SysModFiles.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -185,25 +185,27 @@ void SysModFiles::dirToJson(JsonArray array, bool nameOnly, const char * filter)
root.close();
}

bool SysModFiles::seqNrToName(char * fileName, size_t seqNr) {
bool SysModFiles::seqNrToName(char * fileName, size_t seqNr, const char * filter) {

File root = LittleFS.open("/");
File file = root.openNextFile();

size_t counter = 0;
while (file) {
if (counter == seqNr) {
// ppf("seqNrToName: %d %s %d\n", seqNr, file.name(), file.size());
root.close();
strncat(fileName, "/", 31); //add root prefix, fileName is 32 bytes but sizeof doesn't know so cheating
strncat(fileName, file.name(), 31);
file.close();
return true;
}
if (filter == nullptr || strstr(file.name(), filter) != nullptr) {
if (counter == seqNr) {
// ppf("seqNrToName: %d %s %d\n", seqNr, file.name(), file.size());
root.close();
strncat(fileName, "/", 31); //add root prefix, fileName is 32 bytes but sizeof doesn't know so cheating
strncat(fileName, file.name(), 31);
file.close();
return true;
}

counter++;
}
file.close();
file = root.openNextFile();
counter++;
}

root.close();
Expand Down
2 changes: 1 addition & 1 deletion src/Sys/SysModFiles.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ class SysModFiles: public SysModule {
void dirToJson(JsonArray array, bool nameOnly = false, const char * filter = nullptr);

//get back the name of a file based on the sequence
bool seqNrToName(char * fileName, size_t seqNr);
bool seqNrToName(char * fileName, size_t seqNr, const char * filter = nullptr);

//reads file and load it in json
//name is copied from WLED but better to call it readJsonFrom file
Expand Down
Loading

0 comments on commit fc996c9

Please sign in to comment.