darknighte Posted August 23, 2018 Report Posted August 23, 2018 TLDR; How do I specify GDISP_HARDWARE_STREAM_WRITE configuration for the RA8875 display, but not the pixmap display? ------------------------------- I have GDISP working with a RA8875 that is connected via SPI. However, I am running into issues trying to enable pixmap support. In particular, I'd like to draw to the pixmap display and then transfer the entire screen for enhanced performance when needed. So, after enabling pixmap support in my gfxconf.h, I get the following errors: ugfx/src/gdisp/gdisp.c: In function 'gdispGStreamColor': ugfx/src/gdisp/gdisp.c:824:6: error: 'GDisplay {aka struct GDisplay}' has no member named 'linebuf' g->linebuf[g->p.cx++] = color; ^~ ugfx/src/gdisp/gdisp.c:826:6: error: 'sx1' undeclared (first use in this function) sx1 = g->p.x1; ^~~ ugfx/src/gdisp/gdisp.c:826:6: note: each undeclared identifier is reported only once for each function it appears in ugfx/src/gdisp/gdisp.c:827:6: error: 'sy1' undeclared (first use in this function); did you mean 'sx1'? sy1 = g->p.y1; ^~~ sx1 ugfx/src/gdisp/gdisp.c:830:26: error: 'GDisplay {aka struct GDisplay}' has no member named 'linebuf' g->p.ptr = (void *)g->linebuf; ^~ ugfx/src/gdisp/gdisp.c:845:27: error: 'GDisplay {aka struct GDisplay}' has no member named 'linebuf' g->p.ptr = (void *)g->linebuf; ^~ ugfx/src/gdisp/gdisp.c: In function 'gdispGStreamStop': ugfx/src/gdisp/gdisp.c:945:26: error: 'GDisplay {aka struct GDisplay}' has no member named 'linebuf' g->p.ptr = (void *)g->linebuf; ^~ Looking in gdisp.c, I see: void gdispGStreamColor(GDisplay *g, color_t color) { #if !GDISP_HARDWARE_STREAM_WRITE && GDISP_LINEBUF_SIZE != 0 && GDISP_HARDWARE_BITFILLS coord_t sx1, sy1; #endif This leads me to believe that I need to specify the GDISP_HARDWARE_STREAM_WRITE configuration for the RA8875 display only, but I'm not sure how. For reference, I am building with Cmake and manually including files that I need. (So, not the same as the single include issue here: For reference, here's my gxfconf.h (with all commented out lines removed for brevity) : #ifndef _GFXCONF_H #define _GFXCONF_H #define GDISP_SCREEN_WIDTH 800 #define GDISP_SCREEN_HEIGHT 480 #define GDISP_INITIAL_CONTRAST 100 #define GDISP_INITIAL_BACKLIGHT 100 #define GFX_USE_OS_FREERTOS TRUE #define GFX_COMPILER GFX_COMPILER_GCC #define GFX_CPU GFX_CPU_CORTEX_M4_FP #define GFX_CPU_ENDIAN GFX_CPU_ENDIAN_LITTLE #define GFX_OS_NO_INIT TRUE #define GFX_OS_INIT_NO_WARNING TRUE #define GFX_USE_GDISP TRUE #define GDISP_NEED_MULTITHREAD TRUE #define GDISP_NEED_STREAMING TRUE #define GDISP_NEED_PIXMAP TRUE #define GDISP_STARTUP_COLOR Black #define GDISP_NEED_STARTUP_LOGO FALSE #define GDISP_DRIVER_LIST GDISPVMT_RA8875, GDISPVMT_PIXMAP #define GDISP_HARDWARE_CLEARS TRUE #define GDISP_HARDWARE_FILLS TRUE #define GDISP_PIXELFORMAT GDISP_PIXELFORMAT_RGB565 #endif /* _GFXCONF_H */
inmarket Posted August 24, 2018 Report Posted August 24, 2018 With pixmap you don't need to include it in your driver list (or even add the driver list config) as pixmap is handled differently to all other drivers. You should also not include the following in your gfxconf.h: The GDISP_SCREEN_xxx or GDISP_INITIAL_xxx variables. These should be in your RA8875 board file as they are display specific. The GDISP_HARDWARE_xxx variables as they are already appropriately defined in the respective display config file and are modified and played with by the multi-display handling code.
darknighte Posted August 24, 2018 Author Report Posted August 24, 2018 (edited) Thanks for the response. I'm not sure that it directly addresses the compilation errors though. In any case, I relocated the GDISP_SCREEN_xxx to the board header and the GDISP_HARDWARE_xxx #defines to the gdisp_lld_config.h. Also, I tried alternately dropping the PIXMAP from the DRIVER_LIST and removing DRIVER_LIST entirely. Unfortunately, the error remains the same. What else would you suggest? Build env: I'm using the ARMGCC toolchain and building against the 2.8 release tag in git. For reference, here's my updated and stripped down gfxconf.h #ifndef _GFXCONF_H #define _GFXCONF_H #define GFX_USE_OS_FREERTOS TRUE #define GFX_COMPILER GFX_COMPILER_GCC #define GFX_CPU GFX_CPU_CORTEX_M4_FP #define GFX_CPU_ENDIAN GFX_CPU_ENDIAN_LITTLE #define GFX_OS_NO_INIT TRUE #define GFX_OS_INIT_NO_WARNING TRUE #define GFX_USE_GDISP TRUE #define GDISP_NEED_MULTITHREAD TRUE #define GDISP_NEED_STREAMING TRUE #define GDISP_NEED_PIXMAP TRUE #define GDISP_STARTUP_COLOR Black #define GDISP_NEED_STARTUP_LOGO FALSE #endif /* _GFXCONF_H */ . Edited August 24, 2018 by darknighte
inmarket Posted August 24, 2018 Report Posted August 24, 2018 Ahh. GDISP_NEED_STREAMING is completely different to GDISP_HARDWARE_STREAM_WRITE. The first is whether the streaming API is enabled in GDISP, the second tells GDISP whether a specific display hardware requires a streamed write methodology. The two are completely different things and are completely independent of each other. My guess is that you have been playing with the GDISP_HARDWARE_xxx definitions. Please restore these to the defaults and then try a make clean before compiling again.
darknighte Posted August 27, 2018 Author Report Posted August 27, 2018 On 24/08/2018 at 18:32, inmarket said: GDISP_NEED_STREAMING is completely different to GDISP_HARDWARE_STREAM_WRITE. The first is whether the streaming API is enabled in GDISP, the second tells GDISP whether a specific display hardware requires a streamed write methodology. The two are completely different things and are completely independent of each other. Thanks for the clarification. On 24/08/2018 at 18:32, inmarket said: My guess is that you have been playing with the GDISP_HARDWARE_xxx definitions. Please restore these to the defaults and then try a make clean before compiling again. Unfortunately, disabling those options does not fix the issue. When I set GDISP_NEED_PIXMAP to TRUE, I get the same compilation issues. It looks like the conditional compile #ifdefs guarding the linbuf in the struct GDisplay found in gdisp_driver.h at line #376 and around the sx1/sy1 variables in gdisp.c::gdispGStreamColor() at line #796, are creating the issue. Removing the conditional compilation in those two places compiles, but I'm not sure if that's the best approach. Anyone have any advice on the best way to proceed here?
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now