diff --git a/controllers/advatek.xcontroller b/controllers/advatek.xcontroller index 11adf5c019..8c0f2264e9 100644 --- a/controllers/advatek.xcontroller +++ b/controllers/advatek.xcontroller @@ -41,7 +41,7 @@ 96 - 4 + 8 1 512 3060 @@ -115,7 +115,7 @@ 96 - 16 + 32 4 512 3060 diff --git a/xLights/controllers/Pixlite16.cpp b/xLights/controllers/Pixlite16.cpp index 99a7433016..f0a1e9ee98 100644 --- a/xLights/controllers/Pixlite16.cpp +++ b/xLights/controllers/Pixlite16.cpp @@ -889,6 +889,28 @@ bool Pixlite16::SetOutputs(ModelManager* allmodels, OutputManager* outputManager logger_base.debug(check); + // Handle varying maximum pixels based on expansion mode + int maxPixels = 0; + if (_config._numOutputs == 4 || _config._numOutputs == 8) { + // 4 board + if (cud.GetMaxPixelPort() > 4) { + maxPixels = 510; + } + else { + maxPixels = 1020; + } + } + else if (_config._numOutputs == 16 || _config._numOutputs == 32) + { + // 16 board + if (cud.GetMaxPixelPort() > 16) { + maxPixels = 510; + } + else { + maxPixels = 1020; + } + } + std::list outputs = controller->GetOutputs(); if (success && cud.GetMaxPixelPort() > 0) { for (int pp = 1; pp <= rules->GetMaxPixelPort(); pp++) { @@ -899,6 +921,11 @@ bool Pixlite16::SetOutputs(ModelManager* allmodels, OutputManager* outputManager UDControllerPort* port = cud.GetControllerPixelPort(pp); + if (port->Pixels() > maxPixels) { + check += wxString::Format("ERR: String port %d has more pixels than this controller supports (%d when maximum is %d).\n", pp, port->Pixels(), maxPixels); + success = false; + } + // update the data _config._currentDriver = DecodeStringPortProtocol(port->GetProtocol());