diff --git a/ChangeLog b/ChangeLog index fe9e229616bef92935e3355df585735ae7834baa..b663b8f556ac49e2789711c6249cd8647171dee8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1971,4 +1971,4 @@ * arch/arm/src/lpc17xx/chip.h: Fix some chip memory configuration errors for the LPC1764, LPC1756, and LPC1754 (submitted by Li Zhuoy (Lzzy)) * arch/arm/src/lpc17xx/lpc17_can.h: Revised CAN driver submitted by - Li Zhuoy (Lzzy). + Li Zhuoy (Lzzy). The driver now supports both CAN1 and CAN2. diff --git a/configs/sim/nx/defconfig b/configs/sim/nx/defconfig index d4688ea498830ec7d06a3bcfe7e0cd4037f6e283..9859e74c5a928da6474c51febd606fb917ef2a43 100644 --- a/configs/sim/nx/defconfig +++ b/configs/sim/nx/defconfig @@ -524,6 +524,38 @@ CONFIG_EXAMPLES_NX_CLIENTPRIO=80 CONFIG_EXAMPLES_NX_SERVERPRIO=120 CONFIG_EXAMPLES_NX_NOTIFYSIGNO=4 +# +# Settings for examples/nxlines +# +# CONFIG_EXAMPLES_NXLINES_BUILTIN -- Build the NXLINES example as a "built-in" +# that can be executed from the NSH command line +# CONFIG_EXAMPLES_NXLINES_VPLANE -- The plane to select from the frame- +# buffer driver for use in the test. Default: 0 +# CONFIG_EXAMPLES_NXLINES_DEVNO - The LCD device to select from the LCD +# driver for use in the test: Default: 0 +# CONFIG_EXAMPLES_NXLINES_BGCOLOR -- The color of the background. Default +# depends on CONFIG_EXAMPLES_NXLINES_BPP. +# CONFIG_EXAMPLES_NXLINES_LINEWIDTH - Selects the width of the lines in +# pixels (default: 16) +# CONFIG_EXAMPLES_NXLINES_LINECOLOR -- The color of the lines drawn in the +# background window. Default depends on CONFIG_EXAMPLES_NXLINES_BPP. +# CONFIG_EXAMPLES_NXLINES_BPP -- Pixels per pixel to use. Valid options +# include 2, 4, 8, 16, 24, and 32. Default is 16. +# CONFIG_EXAMPLES_NXLINES_EXTERNINIT - The driver for the graphics device on +# this platform requires some unusual initialization. This is the +# for, for example, SPI LCD/OLED devices. If this configuration is +# selected, then the platform code must provide an LCD initialization +# function. +# +CONFIG_EXAMPLES_NXLINES_BUILTIN=n +CONFIG_EXAMPLES_NXLINES_VPLANE=0 +CONFIG_EXAMPLES_NXLINES_DEVNO=0 +#CONFIG_EXAMPLES_NXLINES_BGCOLOR= +CONFIG_EXAMPLES_NXLINES_LINEWIDTH=16 +#CONFIG_EXAMPLES_NXLINES_LINECOLOR= +CONFIG_EXAMPLES_NXLINES_BPP=CONFIG_SIM_FBBPP +CONFIG_EXAMPLES_NXLINES_EXTERNINIT=n + # # Settings for examples/mount CONFIG_EXAMPLES_MOUNT_DEVNAME="/dev/ram0" diff --git a/configs/stm3210e-eval/nsh2/defconfig b/configs/stm3210e-eval/nsh2/defconfig index 3d51891a5bf9b88397b6d84e9b24a9346d47f132..987127cfddeee03e33722763c966f2d418d73e7c 100644 --- a/configs/stm3210e-eval/nsh2/defconfig +++ b/configs/stm3210e-eval/nsh2/defconfig @@ -1132,6 +1132,38 @@ CONFIG_EXAMPLES_NXIMAGE_YSCALE1p5=y CONFIG_EXAMPLES_NXIMAGE_YSCALE2p0=n CONFIG_EXAMPLES_NXIMAGE_EXTERNINIT=n +# +# Settings for examples/nxlines +# +# CONFIG_EXAMPLES_NXLINES_BUILTIN -- Build the NXLINES example as a "built-in" +# that can be executed from the NSH command line +# CONFIG_EXAMPLES_NXLINES_VPLANE -- The plane to select from the frame- +# buffer driver for use in the test. Default: 0 +# CONFIG_EXAMPLES_NXLINES_DEVNO - The LCD device to select from the LCD +# driver for use in the test: Default: 0 +# CONFIG_EXAMPLES_NXLINES_BGCOLOR -- The color of the background. Default +# depends on CONFIG_EXAMPLES_NXLINES_BPP. +# CONFIG_EXAMPLES_NXLINES_LINEWIDTH - Selects the width of the lines in +# pixels (default: 16) +# CONFIG_EXAMPLES_NXLINES_LINECOLOR -- The color of the lines drawn in the +# background window. Default depends on CONFIG_EXAMPLES_NXLINES_BPP. +# CONFIG_EXAMPLES_NXLINES_BPP -- Pixels per pixel to use. Valid options +# include 2, 4, 8, 16, 24, and 32. Default is 16. +# CONFIG_EXAMPLES_NXLINES_EXTERNINIT - The driver for the graphics device on +# this platform requires some unusual initialization. This is the +# for, for example, SPI LCD/OLED devices. If this configuration is +# selected, then the platform code must provide an LCD initialization +# function. +# +CONFIG_EXAMPLES_NXLINES_BUILTIN=n +CONFIG_EXAMPLES_NXLINES_VPLANE=0 +CONFIG_EXAMPLES_NXLINES_DEVNO=0 +CONFIG_EXAMPLES_NXLINES_BGCOLOR=0x0320 +CONFIG_EXAMPLES_NXLINES_LINEWIDTH=16 +CONFIG_EXAMPLES_NXLINES_LINECOLOR=0xffe0 +CONFIG_EXAMPLES_NXLINES_BPP=16 +CONFIG_EXAMPLES_NXLINES_EXTERNINIT=n + # # Settings for examples/usbstorage # diff --git a/configs/stm3210e-eval/nx/defconfig b/configs/stm3210e-eval/nx/defconfig index 2a6c2846d53eebcf95ecd5a4725d4ca083a66d74..894f569f5ebe12826dfd24640197396172206f7c 100644 --- a/configs/stm3210e-eval/nx/defconfig +++ b/configs/stm3210e-eval/nx/defconfig @@ -1083,6 +1083,38 @@ CONFIG_EXAMPLES_NXIMAGE_YSCALE1p5=y CONFIG_EXAMPLES_NXIMAGE_YSCALE2p0=n CONFIG_EXAMPLES_NXIMAGE_EXTERNINIT=n +# +# Settings for examples/nxlines +# +# CONFIG_EXAMPLES_NXLINES_BUILTIN -- Build the NXLINES example as a "built-in" +# that can be executed from the NSH command line +# CONFIG_EXAMPLES_NXLINES_VPLANE -- The plane to select from the frame- +# buffer driver for use in the test. Default: 0 +# CONFIG_EXAMPLES_NXLINES_DEVNO - The LCD device to select from the LCD +# driver for use in the test: Default: 0 +# CONFIG_EXAMPLES_NXLINES_BGCOLOR -- The color of the background. Default +# depends on CONFIG_EXAMPLES_NXLINES_BPP. +# CONFIG_EXAMPLES_NXLINES_LINEWIDTH - Selects the width of the lines in +# pixels (default: 16) +# CONFIG_EXAMPLES_NXLINES_LINECOLOR -- The color of the lines drawn in the +# background window. Default depends on CONFIG_EXAMPLES_NXLINES_BPP. +# CONFIG_EXAMPLES_NXLINES_BPP -- Pixels per pixel to use. Valid options +# include 2, 4, 8, 16, 24, and 32. Default is 16. +# CONFIG_EXAMPLES_NXLINES_EXTERNINIT - The driver for the graphics device on +# this platform requires some unusual initialization. This is the +# for, for example, SPI LCD/OLED devices. If this configuration is +# selected, then the platform code must provide an LCD initialization +# function. +# +CONFIG_EXAMPLES_NXLINES_BUILTIN=n +CONFIG_EXAMPLES_NXLINES_VPLANE=0 +CONFIG_EXAMPLES_NXLINES_DEVNO=0 +CONFIG_EXAMPLES_NXLINES_BGCOLOR=0x0320 +CONFIG_EXAMPLES_NXLINES_LINEWIDTH=16 +CONFIG_EXAMPLES_NXLINES_LINECOLOR=0xffe0 +CONFIG_EXAMPLES_NXLINES_BPP=16 +CONFIG_EXAMPLES_NXLINES_EXTERNINIT=n + # # Stack and heap information # diff --git a/configs/stm3210e-eval/nxtext/defconfig b/configs/stm3210e-eval/nxtext/defconfig index ca75976562e0ad8e2fc53d567011268cbb09c27c..dc66b0fa8ba4bdce26f24c181732c0ba50d24a05 100644 --- a/configs/stm3210e-eval/nxtext/defconfig +++ b/configs/stm3210e-eval/nxtext/defconfig @@ -1110,7 +1110,7 @@ CONFIG_EXAMPLES_NXTEXT_NOTIFYSIGNO=4 # Settings for examples/nximage # # CONFIG_EXAMPLES_NXIMAGE_BUILTIN -- Build the NXIMAGE example as a "built-in" -# that can be executed from the NSH command line +# that can be executed from the NSH command line # CONFIG_EXAMPLES_NXIMAGE_VPLANE -- The plane to select from the frame- # buffer driver for use in the test. Default: 0 # CONFIG_EXAMPLES_NXIMAGE_DEVNO - The LCD device to select from the LCD @@ -1143,6 +1143,38 @@ CONFIG_EXAMPLES_NXIMAGE_YSCALE1p5=y CONFIG_EXAMPLES_NXIMAGE_YSCALE2p0=n CONFIG_EXAMPLES_NXIMAGE_EXTERNINIT=n +# +# Settings for examples/nxlines +# +# CONFIG_EXAMPLES_NXLINES_BUILTIN -- Build the NXLINES example as a "built-in" +# that can be executed from the NSH command line +# CONFIG_EXAMPLES_NXLINES_VPLANE -- The plane to select from the frame- +# buffer driver for use in the test. Default: 0 +# CONFIG_EXAMPLES_NXLINES_DEVNO - The LCD device to select from the LCD +# driver for use in the test: Default: 0 +# CONFIG_EXAMPLES_NXLINES_BGCOLOR -- The color of the background. Default +# depends on CONFIG_EXAMPLES_NXLINES_BPP. +# CONFIG_EXAMPLES_NXLINES_LINEWIDTH - Selects the width of the lines in +# pixels (default: 16) +# CONFIG_EXAMPLES_NXLINES_LINECOLOR -- The color of the lines drawn in the +# background window. Default depends on CONFIG_EXAMPLES_NXLINES_BPP. +# CONFIG_EXAMPLES_NXLINES_BPP -- Pixels per pixel to use. Valid options +# include 2, 4, 8, 16, 24, and 32. Default is 16. +# CONFIG_EXAMPLES_NXLINES_EXTERNINIT - The driver for the graphics device on +# this platform requires some unusual initialization. This is the +# for, for example, SPI LCD/OLED devices. If this configuration is +# selected, then the platform code must provide an LCD initialization +# function. +# +CONFIG_EXAMPLES_NXLINES_BUILTIN=n +CONFIG_EXAMPLES_NXLINES_VPLANE=0 +CONFIG_EXAMPLES_NXLINES_DEVNO=0 +CONFIG_EXAMPLES_NXLINES_BGCOLOR=0x0320 +CONFIG_EXAMPLES_NXLINES_LINEWIDTH=16 +CONFIG_EXAMPLES_NXLINES_LINECOLOR=0xffe0 +CONFIG_EXAMPLES_NXLINES_BPP=16 +CONFIG_EXAMPLES_NXLINES_EXTERNINIT=n + # # Stack and heap information # diff --git a/graphics/nxglib/fb/nxglib_filltrapezoid.c b/graphics/nxglib/fb/nxglib_filltrapezoid.c index 2f16b58edf33a5f06aeaac48bff828c5397fcae9..4f0c2f072cfbcb66867b363b469f211c84f46790 100644 --- a/graphics/nxglib/fb/nxglib_filltrapezoid.c +++ b/graphics/nxglib/fb/nxglib_filltrapezoid.c @@ -115,8 +115,8 @@ void NXGL_FUNCNAME(nxgl_filltrapezoid,NXGLIB_SUFFIX)( /* Get the top run position and the number of rows to draw */ - x1 = trap->top.x1; - x2 = trap->top.x2; + x1 = trap->top.x1; + x2 = trap->top.x2; /* Calculate the number of rows to render */ @@ -133,6 +133,15 @@ void NXGL_FUNCNAME(nxgl_filltrapezoid,NXGLIB_SUFFIX)( if (y1 < bounds->pt1.y) { + /* Is the entire trapezoid "above" the clipping window? */ + + if (y2 < bounds->pt1.y) + { + /* Yes.. then do nothing */ + + return; + } + /* Calculate the x values for the new top run */ int dy = bounds->pt1.y - y1; @@ -147,6 +156,15 @@ void NXGL_FUNCNAME(nxgl_filltrapezoid,NXGLIB_SUFFIX)( if (y2 > bounds->pt2.y) { + /* Is the entire trapezoid "below" the clipping window? */ + + if (y1 > bounds->pt2.y) + { + /* Yes.. then do nothing */ + + return; + } + /* Clip and re-calculate the number of rows to render */ y2 = bounds->pt2.y; diff --git a/graphics/nxglib/lcd/nxglib_filltrapezoid.c b/graphics/nxglib/lcd/nxglib_filltrapezoid.c index 0c86110885ed0549df7d8a4eaa12a648775a1402..970bbf829c2c0a4c72b3a277998a8b70e4751957 100644 --- a/graphics/nxglib/lcd/nxglib_filltrapezoid.c +++ b/graphics/nxglib/lcd/nxglib_filltrapezoid.c @@ -124,14 +124,23 @@ void NXGL_FUNCNAME(nxgl_filltrapezoid,NXGLIB_SUFFIX) /* Calculate the slope of the left and right side of the trapezoid */ - dy = boty - topy; - dx1dy = b16divi((botx1 - topx1), dy); - dx2dy = b16divi((botx2 - topx2), dy); + dy = boty - topy; + dx1dy = b16divi((botx1 - topx1), dy); + dx2dy = b16divi((botx2 - topx2), dy); /* Perform vertical clipping */ if (topy < bounds->pt1.y) { + /* Is the entire trapezoid "above" the clipping window? */ + + if (boty < bounds->pt1.y) + { + /* Yes.. then do nothing */ + + return; + } + /* Calculate the x values for the new top run */ dy = bounds->pt1.y - topy; @@ -145,6 +154,15 @@ void NXGL_FUNCNAME(nxgl_filltrapezoid,NXGLIB_SUFFIX) if (boty > bounds->pt2.y) { + /* Is the entire trapezoid "below" the clipping window? */ + + if (topy > bounds->pt2.y) + { + /* Yes.. then do nothing */ + + return; + } + /* Calculate the x values for the new bottom run */ dy = boty - bounds->pt2.y; diff --git a/graphics/nxglib/nxglib_runoffset.c b/graphics/nxglib/nxglib_runoffset.c index 31d0dd163e09b308100e3e3a67560497a01a103a..f66d73674169d0698d37bc03133f0ae991e1d8ed 100644 --- a/graphics/nxglib/nxglib_runoffset.c +++ b/graphics/nxglib/nxglib_runoffset.c @@ -70,7 +70,7 @@ * Name: nxgl_runoffset * * Description: - * Offset the run position by the specified dx, dy values. + * Offset the run position by the specified (integer) dx, dy values. * ****************************************************************************/ @@ -79,7 +79,7 @@ void nxgl_runoffset(FAR struct nxgl_run_s *dest, nxgl_coord_t dx, nxgl_coord_t dy) { b16_t b16dx = itob16(dx); - dest->x1 += b16dx; - dest->x2 += b16dx; - dest->y += dy; + dest->x1 = src->x1 + b16dx; + dest->x2 = src->x2 + b16dx; + dest->y = src->y + dy; } diff --git a/graphics/nxglib/nxglib_splitline.c b/graphics/nxglib/nxglib_splitline.c index 7be9cc115b0820affd5a40cf2cea934cfd5fe071..eb2906e3f5ffbf36c66e0a069fa9a3dc8199e87b 100644 --- a/graphics/nxglib/nxglib_splitline.c +++ b/graphics/nxglib/nxglib_splitline.c @@ -112,15 +112,16 @@ int nxgl_splitline(FAR struct nxgl_vector_s *vector, nxgl_coord_t linewidth) { struct nxgl_vector_s line; - struct nxgl_point_s pt; nxgl_coord_t iheight; nxgl_coord_t iwidth; + nxgl_coord_t iy; nxgl_coord_t triheight; - nxgl_coord_t adjwidth; - nxgl_coord_t xoffset; - nxgl_coord_t halfoffset; nxgl_coord_t halfheight; + b16_t adjwidth; + b16_t xoffset; + b16_t halfoffset; b16_t angle; + b16_t b16x; /* First, check the linewidth */ @@ -226,13 +227,17 @@ int nxgl_splitline(FAR struct nxgl_vector_s *vector, angle = b16atan2(itob16(iheight), itob16(iwidth)); triheight = b16toi(linewidth * b16cos(angle)); - adjwidth = b16toi(b16divb16(itob16(linewidth), b16sin(angle))); - xoffset = (linewidth * linewidth + (adjwidth >> 1)) / adjwidth; + adjwidth = b16divb16(itob16(linewidth), b16sin(angle)); + xoffset = itob16(linewidth * linewidth); + xoffset = b16divb16(xoffset, adjwidth); halfoffset = (xoffset >> 1); halfheight = (triheight >> 1); - /* Return the top triangle (if there is one) */ + /* Return the top triangle (if there is one). NOTE that the horizontal + * (z) positions are represented with 16 bits of fraction. The vertical + * (y) positions, on the other hand, are integer. + */ if (triheight > 0) { @@ -240,53 +245,53 @@ int nxgl_splitline(FAR struct nxgl_vector_s *vector, { /* Line is going "south east" */ - pt.x = line.pt1.x - halfoffset; - pt.y = line.pt1.y + halfheight; + b16x = itob16(line.pt1.x) - halfoffset; + iy = line.pt1.y + halfheight; - traps[0].top.x1 = pt.x + xoffset; + traps[0].top.x1 = b16x + xoffset; traps[0].top.x2 = traps[0].top.x1; - traps[0].top.y = pt.y - triheight + 1; - traps[0].bot.x1 = pt.x; - traps[0].bot.x2 = pt.x + adjwidth - 1; - traps[0].bot.y = pt.y; - - pt.x = line.pt2.x + halfoffset; - pt.y = line.pt2.y - halfheight; - - traps[2].top.x1 = pt.x - adjwidth + 1; - traps[2].top.x2 = pt.x; - traps[2].top.y = pt.y; - traps[2].bot.x1 = pt.x - xoffset; + traps[0].top.y = iy - triheight + 1; + traps[0].bot.x1 = b16x; + traps[0].bot.x2 = b16x + adjwidth - b16ONE; + traps[0].bot.y = iy; + + b16x = itob16(line.pt2.x) + halfoffset; + iy = itob16(line.pt2.y) - halfheight; + + traps[2].top.x1 = b16x - adjwidth + b16ONE; + traps[2].top.x2 = b16x; + traps[2].top.y = iy; + traps[2].bot.x1 = b16x - xoffset; traps[2].bot.x2 = traps[2].bot.x1; - traps[2].bot.y = pt.y + triheight - 1; + traps[2].bot.y = iy + triheight - 1; } else { /* Line is going "south west" */ - pt.x = line.pt1.x + halfoffset; - pt.y = line.pt1.y + halfheight; + b16x = itob16(line.pt1.x) + halfoffset; + iy = itob16(line.pt1.y) + halfheight; - traps[0].top.x1 = pt.x - xoffset; + traps[0].top.x1 = b16x - xoffset; traps[0].top.x2 = traps[0].top.x1; - traps[0].top.y = pt.y - triheight + 1; - traps[0].bot.x1 = pt.x - adjwidth + 1; - traps[0].bot.x2 = pt.x; - traps[0].bot.y = pt.y; - - pt.x = line.pt2.x - halfoffset; - pt.y = line.pt2.y - halfheight; - - traps[2].top.x1 = pt.x; - traps[2].top.x2 = pt.x + adjwidth - 1; - traps[2].top.y = pt.y; - traps[2].bot.x1 = pt.x + xoffset; + traps[0].top.y = iy - triheight + 1; + traps[0].bot.x1 = b16x - adjwidth + b16ONE; + traps[0].bot.x2 = b16x; + traps[0].bot.y = iy; + + b16x = itob16(line.pt2.x) - halfoffset; + iy = itob16(line.pt2.y) - halfheight; + + traps[2].top.x1 = b16x; + traps[2].top.x2 = b16x + adjwidth - b16ONE; + traps[2].top.y = iy; + traps[2].bot.x1 = b16x + xoffset; traps[2].bot.x2 = traps[2].bot.x1; - traps[2].bot.y = pt.y + triheight - 1; + traps[2].bot.y = iy + triheight - 1; } /* The center parallelogram is the horizontal edge of each triangle. - * Note the minor inefficency: that horizontal edge is drawn twice. + * Note the minor inefficency: that horizontal edges are drawn twice. */ traps[1].top.x1 = traps[0].bot.x1; @@ -304,11 +309,11 @@ int nxgl_splitline(FAR struct nxgl_vector_s *vector, * bottom. Just return the center parallelogram. */ - traps[1].top.x1 = line.pt1.x - halfoffset; + traps[1].top.x1 = itob16(line.pt1.x) - halfoffset; traps[1].top.x2 = traps[1].top.x1 + adjwidth - 1; traps[1].top.y = line.pt1.y; - traps[1].bot.x1 = line.pt2.x - halfoffset; + traps[1].bot.x1 = itob16(line.pt2.x) - halfoffset; traps[1].bot.x2 = traps[1].bot.x1 + adjwidth - 1; traps[1].bot.y = line.pt2.y; return 1;