ScreenBuffer when compiling patches

I’m trying to write a patch which makes use of the screen on the Magus, but it looks like whatever is compiling doesn’t have the proper configuration of #define’s for ScreenBuffer:

In file included from /tmp/owl/owl-src-V1XY4N/OscPatch.hpp:11:0, from /tmp/owl/owl-build-FfNoud/registerpatch.h:1, from ./Source/PatchProgram.cpp:14: ./LibSource/ScreenBuffer.h:24:2: error: #error “Invalid configuration” #error “Invalid configuration” ^~~~~ ./LibSource/ScreenBuffer.h:31:3: error: ‘Colour’ does not name a type; did you mean ‘floor’? Colour* pixels; ^~~~~~ floor ./LibSource/ScreenBuffer.h:49:3: error: ‘Colour’ does not name a type; did you mean ‘floor’? Colour* getBuffer(){ ^~~~~~ floor ./LibSource/ScreenBuffer.h:52:3: error: ‘Colour’ does not name a type; did you mean ‘floor’? Colour getPixel(unsigned int x, unsigned int y); ^~~~~~ floor ./LibSource/ScreenBuffer.h:53:49: error: ‘Colour’ has not been declared void setPixel(unsigned int x, unsigned int y, Colour c); ^~~~~~ ./LibSource/ScreenBuffer.h:55:13: error: ‘Colour’ has not been declared void fill(Colour c); ^~~~~~ ./LibSource/ScreenBuffer.h:69:57: error: ‘Colour’ has not been declared void drawLine(int fromX, int fromY, int toX, int toY, Colour c); ^~~~~~ ./LibSource/ScreenBuffer.h:70:51: error: ‘Colour’ has not been declared void drawVerticalLine(int x, int y, int length, Colour c); ^~~~~~ ./LibSource/ScreenBuffer.h:71:53: error: ‘Colour’ has not been declared void drawHorizontalLine(int x, int y, int length, Colour c); ^~~~~~ ./LibSource/ScreenBuffer.h:72:59: error: ‘Colour’ has not been declared void drawRectangle(int x, int y, int width, int height, Colour c); ^~~~~~ ./LibSource/ScreenBuffer.h:73:59: error: ‘Colour’ has not been declared void fillRectangle(int x, int y, int width, int height, Colour c); ^~~~~~ ./LibSource/ScreenBuffer.h:77:58: error: ‘Colour’ has not been declared void drawChar(uint16_t x, uint16_t y, unsigned char c, Colour fg, Colour bg, uint8_t size); ^~~~~~ ./LibSource/ScreenBuffer.h:77:69: error: ‘Colour’ has not been declared void drawChar(uint16_t x, uint16_t y, unsigned char c, Colour fg, Colour bg, uint8_t size); ^~~~~~ ./LibSource/ScreenBuffer.h:78:65: error: ‘Colour’ has not been declared void drawRotatedChar(uint16_t x, uint16_t y, unsigned char c, Colour fg, Colour bg, uint8_t size); ^~~~~~ ./LibSource/ScreenBuffer.h:78:76: error: ‘Colour’ has not been declared void drawRotatedChar(uint16_t x, uint16_t y, unsigned char c, Colour fg, Colour bg, uint8_t size); ^~~~~~ ./LibSource/ScreenBuffer.h:80:22: error: ‘Colour’ has not been declared void setTextColour(Colour c); ^~~~~~ ./LibSource/ScreenBuffer.h:81:22: error: ‘Colour’ has not been declared void setTextColour(Colour fg, Colour bg); ^~~~~~ ./LibSource/ScreenBuffer.h:81:33: error: ‘Colour’ has not been declared void setTextColour(Colour fg, Colour bg); ^~~~~~ ./LibSource/ScreenBuffer.h: In member function ‘void ScreenBuffer::setBuffer(uint8_t*)’: ./LibSource/ScreenBuffer.h:47:5: error: ‘pixels’ was not declared in this scope pixels = (Colour*)buffer; ^~~~~~ ./LibSource/ScreenBuffer.h:47:15: error: ‘Colour’ was not declared in this scope pixels = (Colour*)buffer; ^~~~~~ ./LibSource/ScreenBuffer.h:47:15: note: suggested alternative: ‘floor’ pixels = (Colour*)buffer; ^~~~~~ floor ./LibSource/ScreenBuffer.h:47:22: error: expected primary-expression before ‘)’ token pixels = (Colour*)buffer; ^ ./LibSource/ScreenBuffer.h: In member function ‘void ScreenBuffer::clear()’: ./LibSource/ScreenBuffer.h:59:10: error: ‘BLACK’ was not declared in this scope fill(BLACK); ^~~~~ ./LibSource/ScreenBuffer.h: In member function ‘void ScreenBuffer::clear(int, int, int, int)’: ./LibSource/ScreenBuffer.h:62:40: error: ‘BLACK’ was not declared in this scope fillRectangle(x, y, width, height, BLACK); ^~~~~ make[1]: *** [/tmp/owl/owl-build-FfNoud/PatchProgram.o] Error 1 make: *** [patch] Error 2 ERROR: Patch build failed.

Also, is there a way to build and deploy patches locally without going through the web portal?

I’m not sure what’s current state of web UI (always build patches locally), but I’m pretty sure that device-specific features were not supported there. And not every Rebeltech device has a screen, obviously.

This is the repo for building patches: GitHub - pingdynasty/OwlProgram: Dynamically loaded OWL program . Setting it up for Linux is not too hard, I think Readme goes into sufficient details. You’ll need to have working GCC Arm toolchain and build FirmwareSender program for uploading them.

The problem has been that we can’t compile both with and without screen support unless we use pre-processor defines, which have to be indicated to the build process. And the online compiler doesn’t support that. So atm you need to compile offline, as @antisvin says.
However I think it would be possible to change the way that screen support works so that the required code is only compiled in when needed. I will have a go at getting this to work.