diff options
-rw-r--r-- | NxWidgets/UnitTests/nxwm/main.cxx | 363 | ||||
-rw-r--r-- | NxWidgets/nxwm/include/cnxconsole.hxx | 12 | ||||
-rw-r--r-- | NxWidgets/nxwm/src/ccalibration.cxx | 3 | ||||
-rw-r--r-- | NxWidgets/nxwm/src/ctaskbar.cxx | 6 | ||||
-rw-r--r-- | nuttx/ChangeLog | 2 | ||||
-rw-r--r-- | nuttx/configs/sim/nxwm/defconfig | 2 | ||||
-rw-r--r-- | nuttx/configs/stm3240g-eval/nsh/defconfig | 2 | ||||
-rw-r--r-- | nuttx/configs/stm3240g-eval/nxwm/defconfig | 4 | ||||
-rw-r--r-- | nuttx/graphics/nxbe/nxbe_filltrapezoid.c | 8 | ||||
-rw-r--r-- | nuttx/graphics/nxglib/fb/nxglib_filltrapezoid.c | 16 | ||||
-rw-r--r-- | nuttx/graphics/nxglib/nxglib_bitblit.h | 36 | ||||
-rw-r--r-- | nuttx/graphics/nxglib/nxglib_nullrect.c | 4 | ||||
-rw-r--r-- | nuttx/graphics/nxmu/nx_filltrapezoid.c | 19 |
13 files changed, 287 insertions, 190 deletions
diff --git a/NxWidgets/UnitTests/nxwm/main.cxx b/NxWidgets/UnitTests/nxwm/main.cxx index e7a16727d..7cdc778e0 100644 --- a/NxWidgets/UnitTests/nxwm/main.cxx +++ b/NxWidgets/UnitTests/nxwm/main.cxx @@ -78,14 +78,16 @@ struct SNxWmTest { - NxWM::CTaskbar *taskbar; // The task bar - NxWM::CStartWindow *startwindow; // The start window + NxWM::CTaskbar *taskbar; // The task bar + NxWM::CStartWindow *startwindow; // The start window #ifdef CONFIG_NXWM_TOUCHSCREEN - NxWM::CTouchscreen *touchscreen; // The touchscreen + NxWM::CTouchscreen *touchscreen; // The touchscreen + NxWM::CCalibration *calibration; // The touchscreen calibration application + struct NxWM::SCalibrationData data; // Calibration data #endif - unsigned int mmInitial; // Initial memory usage - unsigned int mmStep; // Memory Usage at beginning of test step - unsigned int mmSubStep; // Memory Usage at beginning of test sub-step + unsigned int mmInitial; // Initial memory usage + unsigned int mmStep; // Memory Usage at beginning of test step + unsigned int mmSubStep; // Memory Usage at beginning of test sub-step }; ///////////////////////////////////////////////////////////////////////////// @@ -201,7 +203,7 @@ static void initMemoryUsage(void) // Name: cleanup ///////////////////////////////////////////////////////////////////////////// -static void test_cleanup(void) +static void testCleanUpAndExit(int exitCode) { #ifdef CONFIG_NXWM_TOUCHSCREEN if (g_nxwmtest.touchscreen) @@ -224,55 +226,18 @@ static void test_cleanup(void) { delete g_nxwmtest.startwindow; } -} -///////////////////////////////////////////////////////////////////////////// -// Public Functions -///////////////////////////////////////////////////////////////////////////// + // And exit -///////////////////////////////////////////////////////////////////////////// -// Name: showTestStepMemory -///////////////////////////////////////////////////////////////////////////// -// Called by ad hoc instrumentation in the NxWM/NxWidgets code - -#ifdef CONFIG_HAVE_FILENAME -void _showTestStepMemory(FAR const char *file, int line, FAR const char *msg) -{ - updateMemoryUsage(&g_nxwmtest.mmSubStep, file, line, msg); + exit(exitCode); } -#else -void showTestStepMemory(FAR const char *msg) -{ - updateMemoryUsage(&g_nxwmtest.mmSubStep, msg); -} -#endif ///////////////////////////////////////////////////////////////////////////// -// user_start/nxwm_main +// Name: createTaskbar ///////////////////////////////////////////////////////////////////////////// -int MAIN_NAME(int argc, char *argv[]) +static bool createTaskbar(void) { - // Call all C++ static constructors - -#if defined(CONFIG_HAVE_CXX) && defined(CONFIG_HAVE_CXXINITIALIZE) - up_cxxinitialize(); -#endif - - // Initialize memory monitor logic - - initMemoryUsage(); - - // Initialize the NSH library - - printf(MAIN_STRING "Initialize the NSH library\n"); - if (!NxWM::nshlibInitialize()) - { - printf(MAIN_STRING "ERROR: Failed to initialize the NSH library\n"); - return EXIT_FAILURE; - } - showTestCaseMemory("After initializing the NSH library"); - // Create an instance of the Task Bar. // // The general sequence for initializing the task bar is: @@ -289,7 +254,7 @@ int MAIN_NAME(int argc, char *argv[]) if (!g_nxwmtest.taskbar) { printf(MAIN_STRING "ERROR: Failed to instantiate CTaskbar\n"); - return EXIT_FAILURE; + return false; } showTestCaseMemory("After create taskbar"); @@ -299,8 +264,7 @@ int MAIN_NAME(int argc, char *argv[]) if (!g_nxwmtest.taskbar->connect()) { printf(MAIN_STRING "ERROR: Failed to connect the CTaskbar instance to the NX server\n"); - test_cleanup(); - return EXIT_FAILURE; + return false; } showTestCaseMemory("After connecting to the server"); @@ -314,11 +278,19 @@ int MAIN_NAME(int argc, char *argv[]) if (!g_nxwmtest.taskbar->initWindowManager()) { printf(MAIN_STRING "ERROR: Failed to intialize the CTaskbar instance\n"); - test_cleanup(); - return EXIT_FAILURE; + return false; } - showTestCaseMemory("After initializing window manager"); + showTestCaseMemory("After initializing window manager"); + return true; +} + +///////////////////////////////////////////////////////////////////////////// +// Name: createStartWindow +///////////////////////////////////////////////////////////////////////////// + +static bool createStartWindow(void) +{ // Create the start window. The general sequence for setting up the start window is: // // 1. Call CTaskBar::openApplicationWindow to create a window for the start window, @@ -333,8 +305,7 @@ int MAIN_NAME(int argc, char *argv[]) if (!window) { printf(MAIN_STRING "ERROR: Failed to create CApplicationWindow for the start window\n"); - test_cleanup(); - return EXIT_FAILURE; + return false; } showTestCaseMemory("After creating start window application window"); @@ -343,8 +314,7 @@ int MAIN_NAME(int argc, char *argv[]) { printf(MAIN_STRING "ERROR: Failed to open the CApplicationWindow \n"); delete window; - test_cleanup(); - return EXIT_FAILURE; + return false; } showTestCaseMemory("After initializing the start window application window"); @@ -354,30 +324,49 @@ int MAIN_NAME(int argc, char *argv[]) { printf(MAIN_STRING "ERROR: Failed to instantiate CStartWindow\n"); delete window; - test_cleanup(); - return EXIT_FAILURE; + return false; + } + + // Call CTaskBar::startApplication to start the Calibration application (minimized) + + printf(MAIN_STRING "Start the start window application\n"); + if (!g_nxwmtest.taskbar->startApplication(g_nxwmtest.startwindow, true)) + { + printf(MAIN_STRING "ERROR: Failed to start the start window application\n"); + return false; } + showTestCaseMemory("After starting the start window application"); + showTestCaseMemory("After create the start window application"); + return true; +} - // Perform touchscreen calibration +///////////////////////////////////////////////////////////////////////////// +// Name: startWindowManager +///////////////////////////////////////////////////////////////////////////// -#ifdef CONFIG_NXWM_TOUCHSCREEN - // Start the window manager before adding applications +static bool startWindowManager(void) +{ + // Start the window manager printf(MAIN_STRING "Start the window manager\n"); if (!g_nxwmtest.taskbar->startWindowManager()) { printf(MAIN_STRING "ERROR: Failed to start the window manager\n"); - test_cleanup(); - return EXIT_FAILURE; + return false; } - showTestCaseMemory("After starting the window manager"); - // Perform touchscreen calibration + showTestCaseMemory("After starting the window manager"); + return true; +} - NxWM::CCalibration *calibration = (NxWM::CCalibration *)0; // Avoid compiler complaint - NxWM::CFullScreenWindow *fullscreen = (NxWM::CFullScreenWindow *)0; // Avoid compiler complaint +///////////////////////////////////////////////////////////////////////////// +// Name: createTouchScreen +///////////////////////////////////////////////////////////////////////////// +#ifdef CONFIG_NXWM_TOUCHSCREEN +static bool createTouchScreen(void) +{ // Create the touchscreen device printf(MAIN_STRING "Creating CTouchscreen\n"); @@ -385,7 +374,7 @@ int MAIN_NAME(int argc, char *argv[]) if (!g_nxwmtest.touchscreen) { printf(MAIN_STRING "ERROR: Failed to create CTouchscreen\n"); - goto nocalibration; + return false; } printf(MAIN_STRING "Initialize the CTouchscreen\n"); @@ -393,10 +382,21 @@ int MAIN_NAME(int argc, char *argv[]) { printf(MAIN_STRING "ERROR: Failed to open the CTouchscreen \n"); delete g_nxwmtest.touchscreen; - goto nocalibration; + return false; } + showTestCaseMemory("After initializing CTouchscreen"); + return true; +} +#endif + +///////////////////////////////////////////////////////////////////////////// +// Name: createCalibration +///////////////////////////////////////////////////////////////////////////// +#ifdef CONFIG_NXWM_TOUCHSCREEN +static bool createCalibration(void) +{ // 1. Call CTaskBar::FullScreenWindow to create a window for the application, // 2. Instantiate the application, providing the window to the application's // constructor, @@ -405,75 +405,99 @@ int MAIN_NAME(int argc, char *argv[]) // 4. Call CTaskBar::startApplication start the application and bring its window to // the top. - printf(MAIN_STRING "Opening the calibrationapplication window\n"); - fullscreen = g_nxwmtest.taskbar->openFullScreenWindow(); - if (!fullscreen) + printf(MAIN_STRING "Opening the calibration application window\n"); + NxWM::CFullScreenWindow *window = g_nxwmtest.taskbar->openFullScreenWindow(); + if (!window) { printf(MAIN_STRING "ERROR: Failed to create CFullScreenWindow for the calibration window\n"); - goto nocalibration; + return false; } showTestCaseMemory("After creating calibration full screen window"); printf(MAIN_STRING "Initialize the CFullScreenWindow\n"); - if (!fullscreen->open()) + if (!window->open()) { printf(MAIN_STRING "ERROR: Failed to open the CFullScreenWindow \n"); - delete fullscreen; - goto nocalibration; + delete window; + return false; } showTestCaseMemory("After initializing the calibration full screen window"); printf(MAIN_STRING "Creating the CCalibration application\n"); - calibration = new NxWM::CCalibration(fullscreen, g_nxwmtest.touchscreen); - if (!calibration) + g_nxwmtest.calibration = new NxWM::CCalibration(window, g_nxwmtest.touchscreen); + if (!g_nxwmtest.calibration) { printf(MAIN_STRING "ERROR: Failed to instantiate CCalibration\n"); - delete fullscreen; - goto nocalibration; + delete window; + return false; } showTestCaseMemory("After creating the CCalibration application"); printf(MAIN_STRING "Adding the CCalibration application to the start window\n"); - if (!g_nxwmtest.startwindow->addApplication(calibration)) + if (!g_nxwmtest.startwindow->addApplication(g_nxwmtest.calibration)) { printf(MAIN_STRING "ERROR: Failed to add CCalibration to the start window\n"); - delete calibration; - goto nocalibration; + delete g_nxwmtest.calibration; + return false; } + showTestCaseMemory("After adding the CCalibration application"); + return true; +} +#endif + +///////////////////////////////////////////////////////////////////////////// +// Name: runCalibration +///////////////////////////////////////////////////////////////////////////// +#ifdef CONFIG_NXWM_TOUCHSCREEN +static bool runCalibration(void) +{ // Call CTaskBar::startApplication to start the Calibration application - printf(MAIN_STRING "Start the start window application\n"); - if (!g_nxwmtest.taskbar->startApplication(calibration, false)) + printf(MAIN_STRING "Start the calibration application\n"); + if (!g_nxwmtest.taskbar->startApplication(g_nxwmtest.calibration, false)) { printf(MAIN_STRING "ERROR: Failed to start the calibration application\n"); - goto nocalibration; + return false; } showTestCaseMemory("After starting the start window application"); // Wait for calibration data printf(MAIN_STRING "Get calibration data\n"); - struct NxWM::SCalibrationData data; - if (!calibration->waitCalibrationData(data)) + if (!g_nxwmtest.calibration->waitCalibrationData(g_nxwmtest.data)) { printf(MAIN_STRING "ERROR: Failed to get calibration data\n"); + return false; + } + + printf(MAIN_STRING "Stop the calibration application\n"); + if (!g_nxwmtest.taskbar->stopApplication(g_nxwmtest.calibration)) + { + printf(MAIN_STRING "ERROR: Failed to stop the calibration application\n"); + return false; } -nocalibration: + showTestCaseMemory("After stopping the calibration application"); + return true; +} #endif - // Add the NxConsole application to the start window +///////////////////////////////////////////////////////////////////////////// +// Name: createNxConsole +///////////////////////////////////////////////////////////////////////////// - NxWM::CNxConsole *console = (NxWM::CNxConsole *)0; // Avoid compiler complaint +static bool createNxConsole(void) +{ + // Add the NxConsole application to the start window printf(MAIN_STRING "Opening the NxConsole application window\n"); - window = g_nxwmtest.taskbar->openApplicationWindow(); + NxWM::CApplicationWindow *window = g_nxwmtest.taskbar->openApplicationWindow(); if (!window) { printf(MAIN_STRING "ERROR: Failed to create CApplicationWindow for the NxConsole\n"); - goto noconsole; + return false; } showTestCaseMemory("After creating the NxConsole application window"); @@ -482,17 +506,17 @@ nocalibration: { printf(MAIN_STRING "ERROR: Failed to open the CApplicationWindow \n"); delete window; - goto noconsole; + return false; } showTestCaseMemory("After initializing the NxConsole application window"); printf(MAIN_STRING "Creating the NxConsole application\n"); - console = new NxWM::CNxConsole(g_nxwmtest.taskbar, window); + NxWM::CNxConsole *console = new NxWM::CNxConsole(g_nxwmtest.taskbar, window); if (!console) { printf(MAIN_STRING "ERROR: Failed to instantiate CNxConsole\n"); delete window; - goto noconsole; + return false; } showTestCaseMemory("After creating the NxConsole application"); @@ -500,81 +524,130 @@ nocalibration: if (!g_nxwmtest.startwindow->addApplication(console)) { printf(MAIN_STRING "ERROR: Failed to add CNxConsole to the start window\n"); - delete window; + delete console; + return false; } + showTestCaseMemory("After adding the NxConsole application"); + return true; +} + +///////////////////////////////////////////////////////////////////////////// +// Public Functions +///////////////////////////////////////////////////////////////////////////// + +///////////////////////////////////////////////////////////////////////////// +// Name: showTestStepMemory +///////////////////////////////////////////////////////////////////////////// +// Called by ad hoc instrumentation in the NxWM/NxWidgets code + +#ifdef CONFIG_HAVE_FILENAME +void _showTestStepMemory(FAR const char *file, int line, FAR const char *msg) +{ + updateMemoryUsage(&g_nxwmtest.mmSubStep, file, line, msg); +} +#else +void showTestStepMemory(FAR const char *msg) +{ + updateMemoryUsage(&g_nxwmtest.mmSubStep, msg); +} +#endif + +///////////////////////////////////////////////////////////////////////////// +// user_start/nxwm_main +///////////////////////////////////////////////////////////////////////////// -noconsole: +int MAIN_NAME(int argc, char *argv[]) +{ + // Call all C++ static constructors - // Add the calculator application to the start window +#if defined(CONFIG_HAVE_CXX) && defined(CONFIG_HAVE_CXXINITIALIZE) + up_cxxinitialize(); +#endif -#if 0 - NxWM::CCalculator *calculator = (NxWM::CCalculator *)0; // Avoid compiler complaint + // Initialize memory monitor logic - printf(MAIN_STRING "Opening the calculator application window\n"); - window = g_nxwmtest.taskbar->openApplicationWindow(); - if (!window) + initMemoryUsage(); + + // Initialize the NSH library + + printf(MAIN_STRING "Initialize the NSH library\n"); + if (!NxWM::nshlibInitialize()) { - printf(MAIN_STRING "ERROR: Failed to create CApplicationWindow for the calculator\n"); - goto nocalculator; + printf(MAIN_STRING "ERROR: Failed to initialize the NSH library\n"); + return EXIT_FAILURE; } - showTestCaseMemory("After creating the calculator application window"); + showTestCaseMemory("After initializing the NSH library"); - printf(MAIN_STRING "Initialize the CApplicationWindow\n"); - if (!window->open()) + // Create the task bar. + + if (!createTaskbar()) { - printf(MAIN_STRING "ERROR: Failed to open the CApplicationWindow \n"); - delete window; - test_cleanup(); - return EXIT_FAILURE; + printf(MAIN_STRING "Failed to create the task bar\n"); + testCleanUpAndExit(EXIT_FAILURE); } - showTestCaseMemory("After creating the initializing application window"); - printf(MAIN_STRING "Creating the calculator application\n"); - calculator = new NxWM::CCalculator(g_nxwmtest.taskbar, window); - if (!calculator) + // Create the start window. + + if (!createStartWindow()) { - printf(MAIN_STRING "ERROR: Failed to instantiate calculator\n"); - delete window; - goto nocalculator; + printf(MAIN_STRING "Failed to create the start window\n"); + testCleanUpAndExit(EXIT_FAILURE); } - showTestCaseMemory("After creating the calculator application"); - printf(MAIN_STRING "Adding the calculator application to the start window\n"); - if (!g_nxwmtest.startwindow->addApplication(calculator)) + // Create the touchscreen device + +#ifdef CONFIG_NXWM_TOUCHSCREEN + if (!createTouchScreen()) { - printf(MAIN_STRING "ERROR: Failed to add calculator to the start window\n"); - delete window; + printf(MAIN_STRING "Failed to create the start window\n"); + testCleanUpAndExit(EXIT_FAILURE); + } +#endif + + // Perform touchscreen calibration + +#ifdef CONFIG_NXWM_TOUCHSCREEN + // Create the touchscreen device + + if (!createTouchScreen()) + { + printf(MAIN_STRING "Failed to create the touchscreen\n"); + testCleanUpAndExit(EXIT_FAILURE); + } + + // Create the calibration application + + if (!createCalibration()) + { + printf(MAIN_STRING "Failed to create the calibration application\n"); + testCleanUpAndExit(EXIT_FAILURE); } - showTestCaseMemory("After adding the calculator application"); -nocalculator: + // Run the touchscreen calibration application + + if (!runCalibration()) + { + printf(MAIN_STRING "Touchscreen Calibration failed\n"); + testCleanUpAndExit(EXIT_FAILURE); + } #endif - // Call CTaskBar::startApplication to start the start window application. The initial - // state of the start window is minimized. + // Add the NxConsole application to the start window - printf(MAIN_STRING "Start the start window application\n"); - if (!g_nxwmtest.taskbar->startApplication(g_nxwmtest.startwindow, true)) + if (!createNxConsole()) { - printf(MAIN_STRING "ERROR: Failed to start the start window application\n"); - test_cleanup(); - return EXIT_FAILURE; + printf(MAIN_STRING "Failed to create the NxConsole application\n"); + testCleanUpAndExit(EXIT_FAILURE); } - showTestCaseMemory("After starting the start window application"); // Call CTaskBar::startWindowManager to start the display with applications in place. -#ifndef CONFIG_NXWM_TOUCHSCREEN - printf(MAIN_STRING "Start the window manager\n"); - if (!g_nxwmtest.taskbar->startWindowManager()) + if (!startWindowManager()) { - printf(MAIN_STRING "ERROR: Failed to start the window manager\n"); - test_cleanup(); - return EXIT_FAILURE; + printf(MAIN_STRING "Failed to start the window manager\n"); + testCleanUpAndExit(EXIT_FAILURE); } - showTestCaseMemory("After starting the window manager"); -#endif // Wait a little bit for the display to stabilize. The simulation pressing of // the 'start window' icon in the task bar diff --git a/NxWidgets/nxwm/include/cnxconsole.hxx b/NxWidgets/nxwm/include/cnxconsole.hxx index 7682e6620..1c7aab193 100644 --- a/NxWidgets/nxwm/include/cnxconsole.hxx +++ b/NxWidgets/nxwm/include/cnxconsole.hxx @@ -102,12 +102,6 @@ namespace NxWM void close(void); - /** - * CNxConsole destructor - */ - - ~CNxConsole(void); - public: /** * CNxConsole constructor @@ -121,6 +115,12 @@ namespace NxWM CNxConsole(CTaskbar *taskbar, CApplicationWindow *window); /** + * CNxConsole destructor + */ + + ~CNxConsole(void); + + /** * Each implementation of IApplication must provide a method to recover * the contained CApplicationWindow instance. */ diff --git a/NxWidgets/nxwm/src/ccalibration.cxx b/NxWidgets/nxwm/src/ccalibration.cxx index e218b5f1e..6e66f3028 100644 --- a/NxWidgets/nxwm/src/ccalibration.cxx +++ b/NxWidgets/nxwm/src/ccalibration.cxx @@ -177,6 +177,9 @@ bool CCalibration::run(void) void CCalibration::stop(void) { + // The main thread is stuck waiting for the next touchscreen input... + // So this is probably just a waste of good FLASH space. + m_stop = true; } diff --git a/NxWidgets/nxwm/src/ctaskbar.cxx b/NxWidgets/nxwm/src/ctaskbar.cxx index 34bf53d1a..9edb3fff5 100644 --- a/NxWidgets/nxwm/src/ctaskbar.cxx +++ b/NxWidgets/nxwm/src/ctaskbar.cxx @@ -886,6 +886,12 @@ bool CTaskbar::redrawTaskbarWindow(void) return false; } + // Raise the task bar to the top of the display. This is only necessary + // after stopping a full screen application. Other applications do not + // overlap the task bar and, hence, do not interfere. + + m_taskbar->raise(); + // Fill the entire window with the background color port->drawFilledRect(0, 0, windowSize.w, windowSize.h, diff --git a/nuttx/ChangeLog b/nuttx/ChangeLog index 4f2e737a5..3d1324759 100644 --- a/nuttx/ChangeLog +++ b/nuttx/ChangeLog @@ -2724,5 +2724,7 @@ the STMPE11 I/O expander on the STM3240G-EVAL board. Verfied that the STM3240G-EVAL touchscreen is now fully functional. * include/cxx/cfcntl: Added std:: header file. + * graphics/nxbe/nxbe_filltrapezoid.c and graphics/nxglib/fb/nxglib_filltrapezoid.c: + Fix several errors in the trapezoid fill logic. diff --git a/nuttx/configs/sim/nxwm/defconfig b/nuttx/configs/sim/nxwm/defconfig index 01b152122..75afe862a 100644 --- a/nuttx/configs/sim/nxwm/defconfig +++ b/nuttx/configs/sim/nxwm/defconfig @@ -316,7 +316,7 @@ CONFIG_STDIO_BUFFER_SIZE=256 CONFIG_STDIO_LINEBUFFER=y CONFIG_NUNGET_CHARS=2 CONFIG_PREALLOC_MQ_MSGS=32 -CONFIG_MQ_MAXMSGSIZE=32 +CONFIG_MQ_MAXMSGSIZE=48 CONFIG_MAX_WDOGPARMS=4 CONFIG_PREALLOC_WDOGS=32 CONFIG_PREALLOC_TIMERS=8 diff --git a/nuttx/configs/stm3240g-eval/nsh/defconfig b/nuttx/configs/stm3240g-eval/nsh/defconfig index 9aa23b036..5f8945075 100644 --- a/nuttx/configs/stm3240g-eval/nsh/defconfig +++ b/nuttx/configs/stm3240g-eval/nsh/defconfig @@ -1323,7 +1323,7 @@ CONFIG_LCD_RPORTRAIT=y # STM3240G-EVAL specific LCD settings # CONFIG_STM32_ILI9320_DISABLE=n -CONFIG_STM32_ILI9325_DISABLE=y +CONFIG_STM32_ILI9325_DISABLE=n # # Settings for examples/uip diff --git a/nuttx/configs/stm3240g-eval/nxwm/defconfig b/nuttx/configs/stm3240g-eval/nxwm/defconfig index c3d2062e7..10ffa0879 100644 --- a/nuttx/configs/stm3240g-eval/nxwm/defconfig +++ b/nuttx/configs/stm3240g-eval/nxwm/defconfig @@ -709,7 +709,7 @@ CONFIG_STDIO_BUFFER_SIZE=64 CONFIG_STDIO_LINEBUFFER=y CONFIG_NUNGET_CHARS=2 CONFIG_PREALLOC_MQ_MSGS=8 -CONFIG_MQ_MAXMSGSIZE=32 +CONFIG_MQ_MAXMSGSIZE=48 CONFIG_MAX_WDOGPARMS=2 CONFIG_PREALLOC_WDOGS=8 CONFIG_PREALLOC_TIMERS=4 @@ -1347,7 +1347,7 @@ CONFIG_LCD_RPORTRAIT=n # STM3240G-EVAL specific LCD settings # CONFIG_STM32_ILI9320_DISABLE=n -CONFIG_STM32_ILI9325_DISABLE=y +CONFIG_STM32_ILI9325_DISABLE=n # # Settings for examples/uip diff --git a/nuttx/graphics/nxbe/nxbe_filltrapezoid.c b/nuttx/graphics/nxbe/nxbe_filltrapezoid.c index c3c95d22b..68dad838c 100644 --- a/nuttx/graphics/nxbe/nxbe_filltrapezoid.c +++ b/nuttx/graphics/nxbe/nxbe_filltrapezoid.c @@ -1,8 +1,8 @@ /**************************************************************************** * graphics/nxbe/nxbe_filltrapezoid.c * - * Copyright (C) 2008-2009 Gregory Nutt. All rights reserved. - * Author: Gregory Nutt <spudmonkey@racsa.co.cr> + * Copyright (C) 2008-2009, 2012 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt <gnutt@nuttx.org> * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -140,7 +140,7 @@ void nxbe_filltrapezoid(FAR struct nxbe_window_s *wnd, /* Clip to any user specified clipping window */ - if (clip && !nxgl_nullrect(clip)) + if (clip) { struct nxgl_rect_s tmp; nxgl_rectoffset(&tmp, clip, wnd->bounds.pt1.x, wnd->bounds.pt1.y); @@ -157,8 +157,6 @@ void nxbe_filltrapezoid(FAR struct nxbe_window_s *wnd, info.cops.visible = nxbe_clipfilltrapezoid; info.cops.obscured = nxbe_clipnull; - nxgl_trapcopy(&info.trap, trap); - /* Then process each color plane */ #if CONFIG_NX_NPLANES > 1 diff --git a/nuttx/graphics/nxglib/fb/nxglib_filltrapezoid.c b/nuttx/graphics/nxglib/fb/nxglib_filltrapezoid.c index ddaa0f9bf..64554fae1 100644 --- a/nuttx/graphics/nxglib/fb/nxglib_filltrapezoid.c +++ b/nuttx/graphics/nxglib/fb/nxglib_filltrapezoid.c @@ -93,6 +93,7 @@ void NXGL_FUNCNAME(nxgl_filltrapezoid,NXGLIB_SUFFIX)( { unsigned int stride; unsigned int width; + FAR uint8_t *dest; FAR uint8_t *line; int nrows; b16_t x1; @@ -103,7 +104,6 @@ void NXGL_FUNCNAME(nxgl_filltrapezoid,NXGLIB_SUFFIX)( b16_t dx2dy; #if NXGLIB_BITSPERPIXEL < 8 - FAR uint8_t *dest; uint8_t mpixel = NXGL_MULTIPIXEL(color); uint8_t mask; int lnlen; @@ -191,11 +191,10 @@ void NXGL_FUNCNAME(nxgl_filltrapezoid,NXGLIB_SUFFIX)( ngl_swap(dx1dy, dx2dy, tmp); } - /* Convert the positions to integer and get the run width */ + /* Convert the positions to integer */ - ix1 = b16toi(x1); - ix2 = b16toi(x2); - width = ix2 - ix1 + 1; + ix1 = b16toi(x1); + ix2 = b16toi(x2); /* Handle some corner cases where we draw nothing. Otherwise, we will * always draw at least one pixel. @@ -211,6 +210,10 @@ void NXGL_FUNCNAME(nxgl_filltrapezoid,NXGLIB_SUFFIX)( ix1 = ngl_clipl(ix1, bounds->pt1.x); ix2 = ngl_clipr(ix2, bounds->pt2.x); + /* Get the run length for the clipped row */ + + width = ix2 - ix1 + 1; + #if NXGLIB_BITSPERPIXEL < 8 /* Handle masking of the fractional initial byte */ @@ -253,7 +256,8 @@ void NXGL_FUNCNAME(nxgl_filltrapezoid,NXGLIB_SUFFIX)( #else /* Then draw the run from (line + ix1) to (line + ix2) */ - NXGL_MEMSET(line + NXGL_SCALEX(ix1), (NXGL_PIXEL_T)color, width); + dest = line + NXGL_SCALEX(ix1); + NXGL_MEMSET(dest, (NXGL_PIXEL_T)color, width); #endif } diff --git a/nuttx/graphics/nxglib/nxglib_bitblit.h b/nuttx/graphics/nxglib/nxglib_bitblit.h index a272b284c..a737a0647 100644 --- a/nuttx/graphics/nxglib/nxglib_bitblit.h +++ b/nuttx/graphics/nxglib/nxglib_bitblit.h @@ -111,17 +111,17 @@ # define NXGL_MEMSET(dest,value,width) \ { \ - FAR uint8_t *_ptr = (FAR uint8_t*)dest; \ + FAR uint8_t *_ptr = (FAR uint8_t*)(dest); \ int _nby = NXGL_SCALEX(width); \ while (_nby--) \ { \ - *_ptr++ = value; \ + *_ptr++ = (value); \ } \ } # define NXGL_MEMCPY(dest,src,width) \ { \ - FAR uint8_t *_dptr = (FAR uint8_t*)dest; \ - FAR uint8_t *_sptr = (FAR uint8_t*)src; \ + FAR uint8_t *_dptr = (FAR uint8_t*)(dest); \ + FAR uint8_t *_sptr = (FAR uint8_t*)(src); \ int _nby = NXGL_SCALEX(width); \ while (_nby--) \ { \ @@ -132,20 +132,20 @@ #elif NXGLIB_BITSPERPIXEL == 24 # define NXGL_MEMSET(dest,value,width) \ { \ - FAR uint8_t *_ptr = (FAR uint8_t*)dest; \ - nxgl_coord_t _npix = width; \ + FAR uint8_t *_ptr = (FAR uint8_t*)(dest); \ + nxgl_coord_t _npix = (width); \ while (_npix--) \ { \ - *_ptr++ = value; \ - *_ptr++ = value >> 8; \ - *_ptr++ = value >> 16; \ + *_ptr++ = (value); \ + *_ptr++ = (value) >> 8; \ + *_ptr++ = (value) >> 16; \ } \ } # define NXGL_MEMCPY(dest,src,width) \ { \ - FAR uint8_t *_dptr = (FAR uint8_t*)dest; \ - FAR uint8_t *_sptr = (FAR uint8_t*)src; \ - nxgl_coord_t _npix = width; \ + FAR uint8_t *_dptr = (FAR uint8_t*)(dest); \ + FAR uint8_t *_sptr = (FAR uint8_t*)(src); \ + nxgl_coord_t _npix = (width); \ while (_npix--) \ { \ *_dptr++ = *_sptr++; \ @@ -156,18 +156,18 @@ #else # define NXGL_MEMSET(dest,value,width) \ { \ - FAR NXGL_PIXEL_T *_ptr = (FAR NXGL_PIXEL_T*)dest; \ - nxgl_coord_t _npix = width; \ + FAR NXGL_PIXEL_T *_ptr = (FAR NXGL_PIXEL_T*)(dest); \ + nxgl_coord_t _npix = (width); \ while (_npix--) \ { \ - *_ptr++ = value; \ + *_ptr++ = (value); \ } \ } # define NXGL_MEMCPY(dest,src,width) \ { \ - FAR NXGL_PIXEL_T *_dptr = (FAR NXGL_PIXEL_T*)dest; \ - FAR NXGL_PIXEL_T *_sptr = (FAR NXGL_PIXEL_T*)src; \ - nxgl_coord_t _npix = width; \ + FAR NXGL_PIXEL_T *_dptr = (FAR NXGL_PIXEL_T*)(dest); \ + FAR NXGL_PIXEL_T *_sptr = (FAR NXGL_PIXEL_T*)(src); \ + nxgl_coord_t _npix = (width); \ while (_npix--) \ { \ *_dptr++ = *_sptr++; \ diff --git a/nuttx/graphics/nxglib/nxglib_nullrect.c b/nuttx/graphics/nxglib/nxglib_nullrect.c index 3e3355a45..26fc9e8d7 100644 --- a/nuttx/graphics/nxglib/nxglib_nullrect.c +++ b/nuttx/graphics/nxglib/nxglib_nullrect.c @@ -1,8 +1,8 @@ /**************************************************************************** * graphics/nxglib/nxsglib_nullrect.c * - * Copyright (C) 2008-2011 Gregory Nutt. All rights reserved. - * Author: Gregory Nutt <spudmonkey@racsa.co.cr> + * Copyright (C) 2008-2012 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt <gnutt@nuttx.org> * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions diff --git a/nuttx/graphics/nxmu/nx_filltrapezoid.c b/nuttx/graphics/nxmu/nx_filltrapezoid.c index 8708225d3..f0a55fc62 100644 --- a/nuttx/graphics/nxmu/nx_filltrapezoid.c +++ b/nuttx/graphics/nxmu/nx_filltrapezoid.c @@ -1,8 +1,8 @@ /**************************************************************************** * graphics/nxmu/nx_filltrapezoid.c * - * Copyright (C) 2008-2009, 2011 Gregory Nutt. All rights reserved. - * Author: Gregory Nutt <spudmonkey@racsa.co.cr> + * Copyright (C) 2008-2009, 2011-2012 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt <gnutt@nuttx.org> * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -98,6 +98,8 @@ int nx_filltrapezoid(NXWINDOW hwnd, FAR const struct nxgl_rect_s *clip, int ret; int i; + /* Some debug-only sanity checks */ + #ifdef CONFIG_DEBUG if (!wnd || !wnd->conn || !trap || !color) { @@ -111,22 +113,31 @@ int nx_filltrapezoid(NXWINDOW hwnd, FAR const struct nxgl_rect_s *clip, outmsg.msgid = NX_SVRMSG_FILLTRAP; outmsg.wnd = wnd; + /* If no clipping window was provided, then use the size of the entire window */ + if (clip) { nxgl_rectcopy(&outmsg.clip, clip); } else { - memset(&outmsg.clip, 0, sizeof(struct nxgl_rect_s)); + nxgl_rectcopy(&outmsg.clip, &wnd->bounds); } + + /* Copy the trapezod and the color into the message */ + nxgl_trapcopy(&outmsg.trap, trap); +#if CONFIG_NX_NPLANES > 1 for (i = 0; i < CONFIG_NX_NPLANES; i++) +#else + i = 0; +#endif { outmsg.color[i] = color[i]; } - /* Forward the fill command to the server */ + /* Forward the trapezoid fill command to the server */ ret = mq_send(wnd->conn->cwrmq, &outmsg, sizeof(struct nxsvrmsg_filltrapezoid_s), NX_SVRMSG_PRIO); |