Large LED matrixes (more than 512 DMX ch.)

Ask a generic question about the usage of QLC+, not related to a particular operating system
Post Reply
m.c.ALF
Posts: 7
Joined: Fri Jun 10, 2016 4:05 pm
Real Name: Alexey Nazarov

Hi everyone.

I will be really happy if someone tell me how to automatically add an RGB matrixes with more than 512 channels.
I have E131 controller with separate 16 SPI outputs. Total DMX channels - 16384 (32 DMX Universes).
I've made an LED screens of 220 pixels (ws2811) - 10 rows of 22 pixels each.
When I'm trying to automatically create an RGB matrix in QLC+, It creating 7 rows of 22 pixels from Universe 1 (from DMX ch.1 to ch.462) and another 3 rows at Universe 2 (from DMX ch.1 to ch.198).
But my LED screen goes from ch.1 Universe 1 up to ch 150 Universe 2. In this case I have to create first 7 rows of 22 pixels (462 DMX ch. at Universe 1). Then add another 16 pixels starts from DMX ch.463 to fill all 512 channels of Universe 1. Then add another 6 from DMX ch.1 Universe 2 to fill my 8th row of 22 pixels. And finally add 2 other rows of 22 pixels starting from DMX ch.19 Universe 2.
Its not difficult but I have few problems in this case.
1. The QLC+ can't put next added row exactly the same way I need after I add a new row to my current matrix. And I have to manually drag each pixel in right direction.
2. I can't build visualization in the Monitor because of the different pixels amount in different rows (I built one lane from two different rows - 16+3 pixels).

I don't know, may be I do something wrong. But is there any way to add this kind of matrixes automatically?

And another thing I want to ask. Is there any possibilities to make your own custom matrix patterns?

Also I found strange thing (looks like a bug) with some patterns.
I created 3 exactly the same screens of 22x10 pixels. Add three exactly the same Animations at the Virtual Console for these screens. The animation is - Vertical Fall.
When I turning on each of the animation separately, it works good. But if I turn on all three, they are going 3 times faster. What it might be?
OddSocks
Posts: 152
Joined: Tue Apr 14, 2015 11:33 am
Real Name: Tim Cullingworth

Hi,

I can answer some of these questions.

To create a matrix of continuous pixels I have found the best way to do this is to add the correct number pixels as generic RGB fixtures. Then select all of them and add them to a fixture group. It would be nice if it was posible to populate the matrix with indervidule pixels rather than fixtures of the same size as the rows, as well as being able to populate vertically as well as horisontaly.

Makeing your own custom patterns is posible and what you need to look at is the section on RGB scripts in the manual. The scripts are writen in Java, and once you get your head round them are quite easy to write.
OddSocks
Posts: 152
Joined: Tue Apr 14, 2015 11:33 am
Real Name: Tim Cullingworth

P.s. What controler are you using?
User avatar
mcallegari
Posts: 4720
Joined: Sun Apr 12, 2015 9:09 am
Location: Italy
Real Name: Massimo Callegari
Contact:

The scripts are writen in Java, and once you get your head round them are quite easy to write.
Javascript, kind of different :)

@m.c.ALF: did you consider using the RGB Panel functionality ? http://www.qlcplus.org/docs/addrgbpanel.html
m.c.ALF
Posts: 7
Joined: Fri Jun 10, 2016 4:05 pm
Real Name: Alexey Nazarov

OddSocks wrote:P.s. What controler are you using?
Im using AlphaPix16 controller by Holidaycoro.com
It can work over E131 or ArtNet and has additional separate 3 DMX outs. And Im running Ableton via IAC interface to control all functions via MIDI.
Last edited by m.c.ALF on Sun Dec 11, 2016 4:30 pm, edited 1 time in total.
m.c.ALF
Posts: 7
Joined: Fri Jun 10, 2016 4:05 pm
Real Name: Alexey Nazarov

mcallegari wrote:
The scripts are writen in Java, and once you get your head round them are quite easy to write.
Javascript, kind of different :)

@m.c.ALF: did you consider using the RGB Panel functionality ? http://www.qlcplus.org/docs/addrgbpanel.html
Yes. But i think it can't divide one row to the different universes
OddSocks
Posts: 152
Joined: Tue Apr 14, 2015 11:33 am
Real Name: Tim Cullingworth

The RGB Panel function is great but "QLC+ will create a fixture for each row of the panel." is the problem. A number of the pixel controllers will output more that 1 universe on each output, and rows don't always spilt at a universe boundary.

What would be nice is to have an option to fill the panel with single RGB pixel fixtures. I did look at the code a wile back and it didn't look to tricky but I know people are very busy.

If I were to write a wish list for the RGB Panel function I would also add an option to fill the panel vertically as well as horizontally, and possibly support for GRBW pixels as well ;)
janosvitok
Posts: 1325
Joined: Mon Apr 13, 2015 7:05 am
Location: Bratislava, Slovakia
Real Name: Jano Svitok
Contact:

OddSocks wrote:...possibly support for GRBW pixels
This one is easy: add new mode to:

https://github.com/mcallegari/qlcplus/b ... ure.h#L425
https://github.com/mcallegari/qlcplus/b ... e.cpp#L655
https://github.com/mcallegari/qlcplus/b ... e.cpp#L696
https://github.com/mcallegari/qlcplus/b ... e.cpp#L942
https://github.com/mcallegari/qlcplus/b ... el.cpp#L43
https://github.com/mcallegari/qlcplus/b ... l.cpp#L165

and possibly some tests (and maybe some other places :) )

Bonus points for refactoring (separate commit) code so that the list is only in one place (fixture.h/.cpp?)
MDAR
Posts: 21
Joined: Sat Jan 25, 2020 11:32 am
Real Name: Stuart Hanlon

janosvitok wrote: Mon Dec 12, 2016 11:44 am
OddSocks wrote:...possibly support for GRBW pixels
This one is easy: add new mode to:

https://github.com/mcallegari/qlcplus/b ... ure.h#L425
https://github.com/mcallegari/qlcplus/b ... e.cpp#L655
https://github.com/mcallegari/qlcplus/b ... e.cpp#L696
https://github.com/mcallegari/qlcplus/b ... e.cpp#L942
https://github.com/mcallegari/qlcplus/b ... el.cpp#L43
https://github.com/mcallegari/qlcplus/b ... l.cpp#L165

and possibly some tests (and maybe some other places :) )

Bonus points for refactoring (separate commit) code so that the list is only in one place (fixture.h/.cpp?)

Hi

I know this is old, but may I ask if it's possible to add GRBW to the RGB Panel options?

I've been able to add GRBW LED lamps as a single fixture, but that makes adding them to groups a little time consuming.
As I'm not a developer or even pretend to know the first this about coding, I am aware that I may just be adding to someone else's work load.

That said, I have taken a look at the files shown above and can see that is looks like they "just" need the different permutations of pixel orders adding.

If it helps, I think this is a fair list :-

6 Red Green Blue permutations
  • RGB
    RBG
    GRB
    GBR
    BRG
    BGR


12 x Red, Green, Blue & White permutations
  • RGBW
    RBGW
    GRBW
    GBRW
    BRGW
    BGRW
    WRGB
    WRBG
    WGRB
    WGBR
    WBRG
    WBGR
I'm happy to download the source code and try to add the data, but compiling the resulting code is way beyond my skills base.

Okay...

I've tried...

Does this look about right?

https://github.com/mcallegari/qlcplus/b ... l.cpp#L165

Code: Select all

Fixture::Components AddRGBPanel::components()
{
    if (m_compCombo->currentIndex() == 1)
        return Fixture::BGR;
    else if (m_compCombo->currentIndex() == 2)
        return Fixture::BRG;
    else if (m_compCombo->currentIndex() == 3)
        return Fixture::GBR;
    else if (m_compCombo->currentIndex() == 4)
        return Fixture::GRB;
    else if (m_compCombo->currentIndex() == 5)
        return Fixture::RBG;
    else if (m_compCombo->currentIndex() == 6)
        return Fixture::RGBW;
    else if (m_compCombo->currentIndex() == 7)
        return Fixture::GRBW;
    else if (m_compCombo->currentIndex() == 8)
        return Fixture::GBRW;
    else if (m_compCombo->currentIndex() == 9)
        return Fixture::BRGW;
    else if (m_compCombo->currentIndex() == 10)
        return Fixture::BGRW;
    else if (m_compCombo->currentIndex() == 11)
        return Fixture::WRGB;
    else if (m_compCombo->currentIndex() == 12)
        return Fixture::WRBG;
    else if (m_compCombo->currentIndex() == 13)
        return Fixture::WGRB;
    else if (m_compCombo->currentIndex() == 14)
        return Fixture::WGBR;
    else if (m_compCombo->currentIndex() == 15)
        return Fixture::WBRG;
    else if (m_compCombo->currentIndex() == 16)
        return Fixture::WBGR;

    return Fixture::RGB;
}

https://github.com/mcallegari/qlcplus/b ... el.cpp#L43

Code: Select all

AddRGBPanel::AddRGBPanel(QWidget *parent, const Doc *doc)
    : QDialog(parent)
    , m_doc(doc)
{
    setupUi(this);

    /* Fill universe combo with available universes */
    m_uniCombo->addItems(m_doc->inputOutputMap()->universeNames());

    m_compCombo->addItem("RGB");
    m_compCombo->addItem("BGR");
    m_compCombo->addItem("BRG");
    m_compCombo->addItem("GBR");
    m_compCombo->addItem("GRB");
    m_compCombo->addItem("RBG");
    m_compCombo->addItem("RBGW");
    m_compCombo->addItem("GRBW");
    m_compCombo->addItem("GBRW");
    m_compCombo->addItem("BRGW");
    m_compCombo->addItem("BGRW");
    m_compCombo->addItem("WRGB");
    m_compCombo->addItem("WRBG");
    m_compCombo->addItem("WGRB");
    m_compCombo->addItem("WGBR");
    m_compCombo->addItem("WBRG");
    m_compCombo->addItem("WBGR");

    checkAddressAvailability();

    connect(m_uniCombo, SIGNAL(currentIndexChanged(int)),
            this, SLOT(slotUniverseChanged()));
    connect(m_addressSpin, SIGNAL(valueChanged(int)),
            this, SLOT(slotAddressChanged()));
    connect(m_columnSpin, SIGNAL(valueChanged(int)),
            this, SLOT(slotSizeChanged(int)));
    connect(m_rowSpin, SIGNAL(valueChanged(int)),
            this, SLOT(slotSizeChanged(int)));
}
https://github.com/mcallegari/qlcplus/b ... ure.h#L425

Code: Select all

    /*********************************************************************
     * Generic RGB panel
     *********************************************************************/
public:
    enum Components {
        RGB = 0,
        BGR,
        BRG,
        GBR,
        GRB,
	RBG,
        RGBW,
	RBGW,
	GRBW,
	GBRW,
	BRGW,
	BGRW,
	WRGB,
	WRBG,
	WGRB,
	WGBR,
	WBRG,
	WBGR
    };

from https://github.com/mcallegari/qlcplus/b ... ixture.cpp

Code: Select all

/*********************************************************************
 * Generic RGB panel
 *********************************************************************/

QLCFixtureDef *Fixture::genericRGBPanelDef(int columns, Components components)
{
    QLCFixtureDef *def = new QLCFixtureDef();
    def->setManufacturer(KXMLFixtureGeneric);
    def->setModel(KXMLFixtureRGBPanel);
    def->setType(QLCFixtureDef::LEDBarPixels);
    def->setAuthor("QLC+");
    for (int i = 0; i < columns; i++)
    {
        QLCChannel* red = new QLCChannel();
        red->setName(QString("Red %1").arg(i + 1));
        red->setGroup(QLCChannel::Intensity);
        red->setColour(QLCChannel::Red);

        QLCChannel* green = new QLCChannel();
        green->setName(QString("Green %1").arg(i + 1));
        green->setGroup(QLCChannel::Intensity);
        green->setColour(QLCChannel::Green);

        QLCChannel* blue = new QLCChannel();
        blue->setName(QString("Blue %1").arg(i + 1));
        blue->setGroup(QLCChannel::Intensity);
        blue->setColour(QLCChannel::Blue);

        if (components == BGR)
        {
            def->addChannel(blue);
            def->addChannel(green);
            def->addChannel(red);
        }
        else if (components == BRG)
        {
            def->addChannel(blue);
            def->addChannel(red);
            def->addChannel(green);
        }
        else if (components == GBR)
        {
            def->addChannel(green);
            def->addChannel(blue);
            def->addChannel(red);
        }
        else if (components == GRB)
        {
            def->addChannel(green);
            def->addChannel(red);
            def->addChannel(blue);
        }
        else if (components == RBG)
        {
            def->addChannel(red);
            def->addChannel(blue);
            def->addChannel(green);
        }
        else if (components == RGBW)
        {
            QLCChannel* white = new QLCChannel();
            white->setName(QString("White %1").arg(i + 1));
            white->setGroup(QLCChannel::Intensity);
            white->setColour(QLCChannel::White);

            def->addChannel(red);
            def->addChannel(green);
            def->addChannel(blue);
            def->addChannel(white);
        }
		 else if (components == RBGW)
        {
            QLCChannel* white = new QLCChannel();
            white->setName(QString("White %1").arg(i + 1));
            white->setGroup(QLCChannel::Intensity);
            white->setColour(QLCChannel::White);

            def->addChannel(red);
            def->addChannel(blue);
            def->addChannel(green);
            def->addChannel(white);
        }
		
		 else if (components == GRBW)
        {
            QLCChannel* white = new QLCChannel();
            white->setName(QString("White %1").arg(i + 1));
            white->setGroup(QLCChannel::Intensity);
            white->setColour(QLCChannel::White);

            def->addChannel(green);
            def->addChannel(red);
            def->addChannel(blue);
            def->addChannel(white);
        }	
		 else if (components == GBRW)
        {
            QLCChannel* white = new QLCChannel();
            white->setName(QString("White %1").arg(i + 1));
            white->setGroup(QLCChannel::Intensity);
            white->setColour(QLCChannel::White);

            def->addChannel(green);
            def->addChannel(blue);
            def->addChannel(red);
            def->addChannel(white);
        }
		 else if (components == BRGW)
        {
            QLCChannel* white = new QLCChannel();
            white->setName(QString("White %1").arg(i + 1));
            white->setGroup(QLCChannel::Intensity);
            white->setColour(QLCChannel::White);

            def->addChannel(blue);
            def->addChannel(red);
            def->addChannel(green);
            def->addChannel(white);
        }		
		 else if (components == BGRW)
        {
            QLCChannel* white = new QLCChannel();
            white->setName(QString("White %1").arg(i + 1));
            white->setGroup(QLCChannel::Intensity);
            white->setColour(QLCChannel::White);

            def->addChannel(blue);
            def->addChannel(green);
            def->addChannel(red);
            def->addChannel(white);
        }
		 else if (components == WRGB)
        {
            QLCChannel* white = new QLCChannel();
            white->setName(QString("White %1").arg(i + 1));
            white->setGroup(QLCChannel::Intensity);
            white->setColour(QLCChannel::White);

            def->addChannel(white);
            def->addChannel(red);
            def->addChannel(green);
            def->addChannel(blue);

        }
		 else if (components == WRBG)
        {
            QLCChannel* white = new QLCChannel();
            white->setName(QString("White %1").arg(i + 1));
            white->setGroup(QLCChannel::Intensity);
            white->setColour(QLCChannel::White);

            def->addChannel(white);
            def->addChannel(red);
            def->addChannel(blue);
            def->addChannel(green);

        }
		
		 else if (components == WGRB)
        {
            QLCChannel* white = new QLCChannel();
            white->setName(QString("White %1").arg(i + 1));
            white->setGroup(QLCChannel::Intensity);
            white->setColour(QLCChannel::White);
			
            def->addChannel(white);
            def->addChannel(green);
            def->addChannel(red);
            def->addChannel(blue);

        }	
		 else if (components == WGBR)
        {
            QLCChannel* white = new QLCChannel();
            white->setName(QString("White %1").arg(i + 1));
            white->setGroup(QLCChannel::Intensity);
            white->setColour(QLCChannel::White);
			
            def->addChannel(white);
            def->addChannel(green);
            def->addChannel(blue);
            def->addChannel(red);

        }
		 else if (components == WBRG)
        {
            QLCChannel* white = new QLCChannel();
            white->setName(QString("White %1").arg(i + 1));
            white->setGroup(QLCChannel::Intensity);
            white->setColour(QLCChannel::White);
			
            def->addChannel(white);
            def->addChannel(blue);
            def->addChannel(red);
            def->addChannel(green);
        }		
		 else if (components == WBGR)
        {
            QLCChannel* white = new QLCChannel();
            white->setName(QString("White %1").arg(i + 1));
            white->setGroup(QLCChannel::Intensity);
            white->setColour(QLCChannel::White);
			
            def->addChannel(white);
            def->addChannel(blue);
            def->addChannel(green);
            def->addChannel(red);

        }
        else
        {
            def->addChannel(red);
            def->addChannel(green);
            def->addChannel(blue);
        }
    }

    return def;
}

QLCFixtureMode *Fixture::genericRGBPanelMode(QLCFixtureDef *def, Components components, quint32 width, quint32 height)
{
    Q_ASSERT(def != NULL);
    QLCFixtureMode *mode = new QLCFixtureMode(def);
    int compNum = 3;
    if (components == BGR)
        mode->setName("BGR");
    else if (components == BRG)
        mode->setName("BRG");
    else if (components == GBR)
        mode->setName("GBR");
    else if (components == GRB)
        mode->setName("GRB");
    else if (components == RBG)
        mode->setName("RBG");
    else if (components == RGBW)
    {
        mode->setName("RGBW");
        compNum = 4;
    }
		
	 else if (components == RBGW)
    {
        mode->setName("RBGW");
        compNum = 4;
    }
	 else if (components == GRBW)
    {
        mode->setName("GRBW");
        compNum = 4;
    }	
	 else if (components == GBRW)
    {
        mode->setName("GBRW");
        compNum = 4;
    }
	 else if (components == BRGW)
    {
        mode->setName("BRGW");
        compNum = 4;
    }
	 else if (components == BGRW)
    {
        mode->setName("BGRW");
        compNum = 4;
    }
	 else if (components == WRGB)
    {
        mode->setName("WRGB");
        compNum = 4;
    }
	 else if (components == WRBG)
    {
        mode->setName("WRBG");
        compNum = 4;
    }
	 else if (components == WGRB)
    {
        mode->setName("WGRB");
        compNum = 4;
    }
	 else if (components == WGBR)
    {
        mode->setName("WGBR");
        compNum = 4;
    }
	 else if (components == WBRG)
    {
        mode->setName("WBRG");
        compNum = 4;
    }
	 else if (components == WBGR)
    {
        mode->setName("WBGR");
        compNum = 4;
    }
	
    else
        mode->setName("RGB");

    QList<QLCChannel *>channels = def->channels();
    for (int i = 0; i < channels.count(); i++)
    {
        QLCChannel *ch = channels.at(i);
        mode->insertChannel(ch, i);
        if (i%compNum == 0)
        {
            QLCFixtureHead head;
            head.addChannel(i);
            head.addChannel(i+1);
            head.addChannel(i+2);
            if (components == RGBW)
                head.addChannel(i+3);
			if (components == RBGW)
                head.addChannel(i+3);
			if (components == GRBW)
                head.addChannel(i+3);
			if (components == GBRW)
                head.addChannel(i+3);
			if (components == GBRW)
                head.addChannel(i+3);
			if (components == BRGW)
                head.addChannel(i+3);
			if (components == BGRW)
                head.addChannel(i+3);
            if (components == WRGB)
                head.addChannel(i+3);
			if (components == WRBG)
                head.addChannel(i+3);
			if (components == WGRB)
                head.addChannel(i+3);
			if (components == WGBR)
                head.addChannel(i+3);
			if (components == WGBR)
                head.addChannel(i+3);
			if (components == WBRG)
                head.addChannel(i+3);
			if (components == WBGR)
                head.addChannel(i+3);
            mode->insertHead(-1, head);
        }
    }
	
    QLCPhysical physical;
    physical.setWidth(width);
    physical.setHeight(height);
    physical.setDepth(height);

    mode->setPhysical(physical);
    def->addMode(mode);

    return mode;
}
I can't find any other reference to RGB or RGBW, but as I say, my coding skills are Zero.


Also, it looks like the White part is ignored by colour pickers.

Meaning, White is created by all 3 RGB, rather than just the White chip.
Last edited by MDAR on Tue May 26, 2020 3:44 pm, edited 1 time in total.
MDAR
Posts: 21
Joined: Sat Jan 25, 2020 11:32 am
Real Name: Stuart Hanlon

I think I have learnt how to run the create-deb.sh file, which seems to run really well, until it hits a problem with the fixture.cpp file.

It looks like I need to declare the new Pixel permutations somewhere.

Can anyone suggest where I should look?

(I've scanned every file for any reference to RGBW, RGB or GRB, to give clues and I thought I had found them, but it looks like I'm missing something... not for the first time in my life)

This is the error message I get on an Odroid C2, 64 bit ARM, running DietPi (which I thing is Debian Buster) with all the extra build components loaded. (as I say, I thought it was doing REALLY well....)

Code: Select all

g++ -c -pipe -Werror -Wno-unused-local-typedefs -O2 -Wall -W -D_REENTRANT -fPIC -DQT_NO_DEBUG_OUTPUT -DHAS_FFTW3 -DQT_NO_DEBUG -DQT_MULTIMEDIA_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_SCRIPT_LIB -DQT_CORE_LIB -I. -I../audio/src -I../../plugins/interfaces -I../../hotplugmonitor/src -isystem /usr/include/aarch64-linux-gnu/qt5 -isystem /usr/include/aarch64-linux-gnu/qt5/QtMultimedia -isystem /usr/include/aarch64-linux-gnu/qt5/QtGui -isystem /usr/include/aarch64-linux-gnu/qt5/QtNetwork -isystem /usr/include/aarch64-linux-gnu/qt5/QtScript -isystem /usr/include/aarch64-linux-gnu/qt5/QtCore -I. -I/usr/lib/aarch64-linux-gnu/qt5/mkspecs/linux-g++ -o fixture.o fixture.cpp
fixture.cpp: In member function ‘QLCFixtureDef* Fixture::genericRGBPanelDef(int, Fixture::Components)’:
fixture.cpp:751:27: error: ‘RBGW’ was not declared in this scope
    else if (components == RBGW)
                           ^~~~
fixture.cpp:764:27: error: ‘GRBW’ was not declared in this scope
    else if (components == GRBW)
                           ^~~~
fixture.cpp:776:27: error: ‘GBRW’ was not declared in this scope
    else if (components == GBRW)
                           ^~~~
fixture.cpp:788:27: error: ‘BRGW’ was not declared in this scope
    else if (components == BRGW)
                           ^~~~
fixture.cpp:800:27: error: ‘BGRW’ was not declared in this scope
    else if (components == BGRW)
                           ^~~~
fixture.cpp:812:27: error: ‘WRGB’ was not declared in this scope
    else if (components == WRGB)
                           ^~~~
fixture.cpp:825:27: error: ‘WRBG’ was not declared in this scope
    else if (components == WRBG)
                           ^~~~
fixture.cpp:839:27: error: ‘WGRB’ was not declared in this scope
    else if (components == WGRB)
                           ^~~~
fixture.cpp:852:27: error: ‘WGBR’ was not declared in this scope
    else if (components == WGBR)
                           ^~~~
fixture.cpp:865:27: error: ‘WBRG’ was not declared in this scope
    else if (components == WBRG)
                           ^~~~
fixture.cpp:877:27: error: ‘WBGR’ was not declared in this scope
    else if (components == WBGR)
                           ^~~~
fixture.cpp: In member function ‘QLCFixtureMode* Fixture::genericRGBPanelMode(QLCFixtureDef*, Fixture::Components, quint32, quint32)’:
fixture.cpp:922:26: error: ‘RBGW’ was not declared in this scope
   else if (components == RBGW)
                          ^~~~
fixture.cpp:927:26: error: ‘GRBW’ was not declared in this scope
   else if (components == GRBW)
                          ^~~~
fixture.cpp:932:26: error: ‘GBRW’ was not declared in this scope
   else if (components == GBRW)
                          ^~~~
fixture.cpp:937:26: error: ‘BRGW’ was not declared in this scope
   else if (components == BRGW)
                          ^~~~
fixture.cpp:942:26: error: ‘BGRW’ was not declared in this scope
   else if (components == BGRW)
                          ^~~~
fixture.cpp:947:26: error: ‘WRGB’ was not declared in this scope
   else if (components == WRGB)
                          ^~~~
fixture.cpp:952:26: error: ‘WRBG’ was not declared in this scope
   else if (components == WRBG)
                          ^~~~
fixture.cpp:957:26: error: ‘WGRB’ was not declared in this scope
   else if (components == WGRB)
                          ^~~~
fixture.cpp:962:26: error: ‘WGBR’ was not declared in this scope
   else if (components == WGBR)
                          ^~~~
fixture.cpp:967:26: error: ‘WBRG’ was not declared in this scope
   else if (components == WBRG)
                          ^~~~
fixture.cpp:972:26: error: ‘WBGR’ was not declared in this scope
   else if (components == WBGR)
                          ^~~~
fixture.cpp:994:22: error: ‘RBGW’ was not declared in this scope
    if (components == RBGW)
                      ^~~~
fixture.cpp:996:22: error: ‘GRBW’ was not declared in this scope
    if (components == GRBW)
                      ^~~~
fixture.cpp:998:22: error: ‘GBRW’ was not declared in this scope
    if (components == GBRW)
                      ^~~~
fixture.cpp:1000:22: error: ‘GBRW’ was not declared in this scope
    if (components == GBRW)
                      ^~~~
fixture.cpp:1002:22: error: ‘BRGW’ was not declared in this scope
    if (components == BRGW)
                      ^~~~
fixture.cpp:1004:22: error: ‘BGRW’ was not declared in this scope
    if (components == BGRW)
                      ^~~~
fixture.cpp:1006:31: error: ‘WRGB’ was not declared in this scope
             if (components == WRGB)
                               ^~~~
fixture.cpp:1008:22: error: ‘WRBG’ was not declared in this scope
    if (components == WRBG)
                      ^~~~
fixture.cpp:1010:22: error: ‘WGRB’ was not declared in this scope
    if (components == WGRB)
                      ^~~~
fixture.cpp:1012:22: error: ‘WGBR’ was not declared in this scope
    if (components == WGBR)
                      ^~~~
fixture.cpp:1014:22: error: ‘WGBR’ was not declared in this scope
    if (components == WGBR)
                      ^~~~
fixture.cpp:1016:22: error: ‘WBRG’ was not declared in this scope
    if (components == WBRG)
                      ^~~~
fixture.cpp:1018:22: error: ‘WBGR’ was not declared in this scope
    if (components == WBGR)
                      ^~~~
Makefile:1571: recipe for target 'fixture.o' failed
make[3]: *** [fixture.o] Error 1
make[3]: Leaving directory '/opt/qlcplus/qlcplus-QLC-_4.12.1/engine/src'
Makefile:87: recipe for target 'sub-src-make_first-ordered' failed
make[2]: *** [sub-src-make_first-ordered] Error 2
make[2]: Leaving directory '/opt/qlcplus/qlcplus-QLC-_4.12.1/engine'
Makefile:93: recipe for target 'sub-engine-make_first-ordered' failed
make[1]: *** [sub-engine-make_first-ordered] Error 2
make[1]: Leaving directory '/opt/qlcplus/qlcplus-QLC-_4.12.1'
dh_auto_build: make -j1 returned exit code 2
debian/rules:8: recipe for target 'build' failed
make: *** [build] Error 25
dpkg-buildpackage: error: debian/rules build gave error exit status 2
User avatar
sandinak
Posts: 191
Joined: Mon Apr 03, 2017 5:40 pm
Location: Yorktown, VA
Real Name: Branson Matheson
Contact:

So I've done this as well .. I was gonna code it but this worked the easiest, the way I did it:
  • using QLC 4.12.2
  • I have 12 steps built for our touring show, each step is driven by ArtNET via Wifi on Raspi
  • I am driving all the LEDs via Fadecandy which supports 8 channels of 64 LEDs
  • logical config: ArtNet -> OLAd -> Fadecandy -> Strips
  • each step is 8x64 WS2812 RGB LED Strips
  • Each pair of strips is 128x3(RGB) = 384 DMX target setup as a single U
  • Each step is then 4 U, and all 12 Steps make 48 U
  • In QLC I setup each U as a matrix of 2x64 RGB .. and tie them together in a Fixture Group to form a step
  • Then I also tie the rows together (not steps .. can't to groups of groups .. darnit) to form various display sizes, but all of the steps makes 32x256 pixels
  • Then I can create RGB Matrix functions against the groups.
The big thing to remember here.. it's WAY easier to work with QLCs natural layouts than try to minimize use of DMX Universes or Addresses. In my case I have 48 U of 384 Addresses used .. and that makes for a cleaner layout/config than trying to fill everything by 512. If you wanna see it in action https://sandsite.org/downloads/evo-step-flag.mov .. and if you wanna see the file, right click and download: https://sandsite.org/downloads/Evo19-Full.qxw
mbobo10
Posts: 3
Joined: Sun Feb 11, 2024 12:26 am
Real Name:

MDAR wrote: Tue May 26, 2020 3:40 pm I think I have learnt how to run the create-deb.sh file, which seems to run really well, until it hits a problem with the fixture.cpp file.

It looks like I need to declare the new Pixel permutations somewhere.

Can anyone suggest where I should look?

(I've scanned every file for any reference to RGBW, RGB or GRB, to give clues and I thought I had found them, but it looks like I'm missing something... not for the first time in my life)

This is the error message I get on an Odroid C2, 64 bit ARM, running DietPi (which I thing is Debian Buster) with all the extra build components loaded. (as I say, I thought it was doing REALLY well....)

Code: Select all

g++ -c -pipe -Werror -Wno-unused-local-typedefs -O2 -Wall -W -D_REENTRANT -fPIC -DQT_NO_DEBUG_OUTPUT -DHAS_FFTW3 -DQT_NO_DEBUG -DQT_MULTIMEDIA_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_SCRIPT_LIB -DQT_CORE_LIB -I. -I../audio/src -I../../plugins/interfaces -I../../hotplugmonitor/src -isystem /usr/include/aarch64-linux-gnu/qt5 -isystem /usr/include/aarch64-linux-gnu/qt5/QtMultimedia -isystem /usr/include/aarch64-linux-gnu/qt5/QtGui -isystem /usr/include/aarch64-linux-gnu/qt5/QtNetwork -isystem /usr/include/aarch64-linux-gnu/qt5/QtScript -isystem /usr/include/aarch64-linux-gnu/qt5/QtCore -I. -I/usr/lib/aarch64-linux-gnu/qt5/mkspecs/linux-g++ -o fixture.o fixture.cpp
fixture.cpp: In member function ‘QLCFixtureDef* Fixture::genericRGBPanelDef(int, Fixture::Components)’:
fixture.cpp:751:27: error: ‘RBGW’ was not declared in this scope
    else if (components == RBGW)
                           ^~~~
fixture.cpp:764:27: error: ‘GRBW’ was not declared in this scope
    else if (components == GRBW)
                           ^~~~
fixture.cpp:776:27: error: ‘GBRW’ was not declared in this scope
    else if (components == GBRW)
                           ^~~~
fixture.cpp:788:27: error: ‘BRGW’ was not declared in this scope
    else if (components == BRGW)
                           ^~~~
fixture.cpp:800:27: error: ‘BGRW’ was not declared in this scope
    else if (components == BGRW)
                           ^~~~
fixture.cpp:812:27: error: ‘WRGB’ was not declared in this scope
    else if (components == WRGB)
                           ^~~~
fixture.cpp:825:27: error: ‘WRBG’ was not declared in this scope
    else if (components == WRBG)
                           ^~~~
fixture.cpp:839:27: error: ‘WGRB’ was not declared in this scope
    else if (components == WGRB)
                           ^~~~
fixture.cpp:852:27: error: ‘WGBR’ was not declared in this scope
    else if (components == WGBR)
                           ^~~~
fixture.cpp:865:27: error: ‘WBRG’ was not declared in this scope
    else if (components == WBRG)
                           ^~~~
fixture.cpp:877:27: error: ‘WBGR’ was not declared in this scope
    else if (components == WBGR)
                           ^~~~
fixture.cpp: In member function ‘QLCFixtureMode* Fixture::genericRGBPanelMode(QLCFixtureDef*, Fixture::Components, quint32, quint32)’:
fixture.cpp:922:26: error: ‘RBGW’ was not declared in this scope
   else if (components == RBGW)
                          ^~~~
fixture.cpp:927:26: error: ‘GRBW’ was not declared in this scope
   else if (components == GRBW)
                          ^~~~
fixture.cpp:932:26: error: ‘GBRW’ was not declared in this scope
   else if (components == GBRW)
                          ^~~~
fixture.cpp:937:26: error: ‘BRGW’ was not declared in this scope
   else if (components == BRGW)
                          ^~~~
fixture.cpp:942:26: error: ‘BGRW’ was not declared in this scope
   else if (components == BGRW)
                          ^~~~
fixture.cpp:947:26: error: ‘WRGB’ was not declared in this scope
   else if (components == WRGB)
                          ^~~~
fixture.cpp:952:26: error: ‘WRBG’ was not declared in this scope
   else if (components == WRBG)
                          ^~~~
fixture.cpp:957:26: error: ‘WGRB’ was not declared in this scope
   else if (components == WGRB)
                          ^~~~
fixture.cpp:962:26: error: ‘WGBR’ was not declared in this scope
   else if (components == WGBR)
                          ^~~~
fixture.cpp:967:26: error: ‘WBRG’ was not declared in this scope
   else if (components == WBRG)
                          ^~~~
fixture.cpp:972:26: error: ‘WBGR’ was not declared in this scope
   else if (components == WBGR)
                          ^~~~
fixture.cpp:994:22: error: ‘RBGW’ was not declared in this scope
    if (components == RBGW)
                      ^~~~
fixture.cpp:996:22: error: ‘GRBW’ was not declared in this scope
    if (components == GRBW)
                      ^~~~
fixture.cpp:998:22: error: ‘GBRW’ was not declared in this scope
    if (components == GBRW)
                      ^~~~
fixture.cpp:1000:22: error: ‘GBRW’ was not declared in this scope
    if (components == GBRW)
                      ^~~~
fixture.cpp:1002:22: error: ‘BRGW’ was not declared in this scope
    if (components == BRGW)
                      ^~~~
fixture.cpp:1004:22: error: ‘BGRW’ was not declared in this scope
    if (components == BGRW)
                      ^~~~
fixture.cpp:1006:31: error: ‘WRGB’ was not declared in this scope
             if (components == WRGB)
                               ^~~~
fixture.cpp:1008:22: error: ‘WRBG’ was not declared in this scope
    if (components == WRBG)
                      ^~~~
fixture.cpp:1010:22: error: ‘WGRB’ was not declared in this scope
    if (components == WGRB)
                      ^~~~
fixture.cpp:1012:22: error: ‘WGBR’ was not declared in this scope
    if (components == WGBR)
                      ^~~~
fixture.cpp:1014:22: error: ‘WGBR’ was not declared in this scope
    if (components == WGBR)
                      ^~~~
fixture.cpp:1016:22: error: ‘WBRG’ was not declared in this scope
    if (components == WBRG)
                      ^~~~
fixture.cpp:1018:22: error: ‘WBGR’ was not declared in this scope
    if (components == WBGR)
                      ^~~~
Makefile:1571: recipe for target 'fixture.o' failed
make[3]: *** [fixture.o] Error 1
make[3]: Leaving directory '/opt/qlcplus/qlcplus-QLC-_4.12.1/engine/src'
Makefile:87: recipe for target 'sub-src-make_first-ordered' failed
make[2]: *** [sub-src-make_first-ordered] Error 2
make[2]: Leaving directory '/opt/qlcplus/qlcplus-QLC-_4.12.1/engine'
Makefile:93: recipe for target 'sub-engine-make_first-ordered' failed
make[1]: *** [sub-engine-make_first-ordered] Error 2
make[1]: Leaving directory '/opt/qlcplus/qlcplus-QLC-_4.12.1'
dh_auto_build: make -j1 returned exit code 2
debian/rules:8: recipe for target 'build' failed
make: *** [build] Error 25
dpkg-buildpackage: error: debian/rules build gave error exit status 2

Hi,

I want to do exactly the same thing by having a GRBW mode. Have you found a solution ?
Post Reply