diff --git a/nuttx/ChangeLog b/nuttx/ChangeLog index f363cb126..966efa8fa 100644 --- a/nuttx/ChangeLog +++ b/nuttx/ChangeLog @@ -1185,3 +1185,7 @@ * examples/nsh/nsh_telnetd.c - Fix compilation errors that happen when both DHCPC and TELNETD are enabled in the Nuttshell. + * graphics/nxglib/fb/nxglib_moverectangle.c - Fix a logic error + that caused an uninitialized variable warning. I still don't + have a test to prove that the changes are correct. + diff --git a/nuttx/Documentation/NuttX.html b/nuttx/Documentation/NuttX.html index 879237f53..9efbe55ec 100644 --- a/nuttx/Documentation/NuttX.html +++ b/nuttx/Documentation/NuttX.html @@ -8,7 +8,7 @@

NuttX RTOS

-

Last Updated: August 5, 2010

+

Last Updated: August 7, 2010

@@ -1858,7 +1858,9 @@ nuttx-5.9 2010-xx-xx Gregory Nutt <spudmonkey@racsa.co.cr> * examples/nsh/nsh_telnetd.c - Fix compilation errors that happen when both DHCPC and TELNETD are enabled in the Nuttshell. - + * graphics/nxglib/fb/nxglib_moverectangle.c - Fix a logic error + that caused an uninitialized variable warning. I still don't + have a test to prove that the changes are correct. pascal-2.1 2010-xx-xx Gregory Nutt <spudmonkey@racsa.co.cr> diff --git a/nuttx/Documentation/NuttXLinks.html b/nuttx/Documentation/NuttXLinks.html index 77e96bcac..972ae8b0e 100755 --- a/nuttx/Documentation/NuttXLinks.html +++ b/nuttx/Documentation/NuttXLinks.html @@ -25,8 +25,8 @@
  • Downloads
  • Toolchains
  • Browse CVS
  • -
  • Free Ports
  • gmane
  • +
  • Free Ports
  • @@ -58,9 +58,9 @@   - + - \ No newline at end of file + diff --git a/nuttx/TODO b/nuttx/TODO index b97b65cab..598a4ae3f 100644 --- a/nuttx/TODO +++ b/nuttx/TODO @@ -12,7 +12,7 @@ NuttX TODO List (Last updated August 7, 2010) (1) USB (drivers/usbdev) (5) Libraries (lib/) (12) File system/Generic drivers (fs/, drivers/) - (3) Graphics subystem (graphics/) + (2) Graphics subystem (graphics/) (1) Pascal add-on (pcode/) (1) Documentation (Documentation/) (6) Build system / Toolchains @@ -465,15 +465,6 @@ o Graphics subystem (graphics/) Status: Open Priority: Low (unless you need the p13201 then it is certainly higher). - Description: When building for a framebuffer driver, there are warnings that a - symbol is used before being initialized in graphics/nxglib/ in all - of the auto-generated files named nxglib_moverectangle_*bpp.c. This - looks like a real error and must be fixed. I don't think that the - moverectangle logic is currently being used in any of the examples, - so this should not be a big problem. - Status: Open - Priority: Medium-to-High - o Pascal Add-On (pcode/) ^^^^^^^^^^^^^^^^^^^^^^ diff --git a/nuttx/graphics/nxglib/fb/nxglib_moverectangle.c b/nuttx/graphics/nxglib/fb/nxglib_moverectangle.c index 4b426a10b..9f804c044 100644 --- a/nuttx/graphics/nxglib/fb/nxglib_moverectangle.c +++ b/nuttx/graphics/nxglib/fb/nxglib_moverectangle.c @@ -174,44 +174,71 @@ void NXGL_FUNCNAME(nxgl_moverectangle,NXGLIB_SUFFIX) # endif #endif - /* Case 1: The destination position (offset) is above the displayed - * position (rect) + /* sline = address of the first pixel in the top row of the source in + * framebuffer memory */ - if (offset->y < rect->pt1.y) - { - /* Copy the rectangle from top down. */ + sline = pinfo->fbmem + rect->pt1.y * stride + NXGL_SCALEX(rect->pt1.x); - sline = pinfo->fbmem + rect->pt1.y * stride + NXGL_SCALEX(rect->pt1.x); - dline = (FAR uint8_t*)sline - offset->y * stride - NXGL_SCALEX(offset->x); + /* dline = address of the first pixel in the top row of the destination + * in framebuffer memory. We get dline by subtract the offset from the + * source position. + */ + + dline = (FAR uint8_t*)sline - offset->y * stride - NXGL_SCALEX(offset->x); + + /* Case 1: Is the destination position above the displayed position? + * If the Y offset is negative, then the destination is offset to a + * postion below (or to the right) in the source in framebuffer memory. + */ + + if (offset->y < 0) + { + /* Yes.. Copy the rectangle from top down (i.e., adding the stride + * to move to the next, lower row) */ while (rows--) { + /* Copy the row */ + #if NXGLIB_BITSPERPIXEL < 8 nxgl_lowresmemcpy(dline, sline, width, leadmask, tailmask); #else NXGL_MEMCPY(dline, sline, width); #endif + /* Point to the next source/dest row below the current one */ + dline += stride; sline += stride; } } - /* Case 2: The destination position (offset) is below the displayed - * position (rect) + /* Case 2: No.. the destination position is above (or to the left of) + * the displayed source position */ else { - /* Copy the rectangle from the bottom up */ + /* Adjust sline and dline to point to the bottom row (+1) of the + * source and destination rectangles in framebuffer memory. + */ - sline = pinfo->fbmem + rect->pt2.y * stride + NXGL_SCALEX(rect->pt1.x); - dline = (FAR uint8_t*)sline - offset->y * stride - NXGL_SCALEX(offset->x); + unsigned int hoffset = rows * stride; + sline += hoffset; + dline += hoffset; + + /* Copy the rectangle from the bottom up (i.e., subtracting stride + * to re-position to the previous, higher row) */ while (rows--) { + /* Point to the next source/dest row above the current one */ + dline -= stride; sline -= stride; + + /* Copy the row */ + #if NXGLIB_BITSPERPIXEL < 8 nxgl_lowresmemcpy(dline, sline, width, leadmask, tailmask); #else