diff --git a/examples/ft80x/ft80x.h b/examples/ft80x/ft80x.h index 83e9e1274..0da2e464d 100644 --- a/examples/ft80x/ft80x.h +++ b/examples/ft80x/ft80x.h @@ -152,6 +152,7 @@ int ft80x_prim_rectangles(int fd, FAR struct ft80x_dlbuffer_s *buffer); /* Co-processor display examples */ int ft80x_coproc_progressbar(int fd, FAR struct ft80x_dlbuffer_s *buffer); +int ft80x_coproc_scrollbar(int fd, FAR struct ft80x_dlbuffer_s *buffer); #undef EXTERN #ifdef __cplusplus diff --git a/examples/ft80x/ft80x_coprocessor.c b/examples/ft80x/ft80x_coprocessor.c index 71dd2dab8..1ebc16df0 100644 --- a/examples/ft80x/ft80x_coprocessor.c +++ b/examples/ft80x/ft80x_coprocessor.c @@ -363,7 +363,373 @@ int ft80x_coproc_progressbar(int fd, FAR struct ft80x_dlbuffer_s *buffer) ft80x_err("ERROR: ft80x_dl_data failed: %d\n", ret); return ret; } - /* And terminate the display list */ + + /* Finally, terminate the display list */ + + ret = ft80x_dl_end(fd, buffer); + if (ret < 0) + { + ft80x_err("ERROR: ft80x_dl_end failed: %d\n", ret); + } + + return ret; +} + +/**************************************************************************** + * Name: ft80x_coproc_progressbar + * + * Description: + * Demonstrate the progress bar command + * + ****************************************************************************/ + +int ft80x_coproc_scrollbar(int fd, FAR struct ft80x_dlbuffer_s *buffer) +{ + int16_t xoffset; + int16_t yoffset; + int16_t xdist = FT80X_DISPLAY_WIDTH / 12; + int16_t ydist = FT80X_DISPLAY_WIDTH / 12; + int16_t wsz; + int ret; + + /* Formatted output chunks */ + + union + { + struct + { + struct ft80x_cmd32_s clearrgb; + struct ft80x_cmd32_s clear; + struct ft80x_cmd32_s colorrgb; + } a; + struct + { + struct ft80x_cmd_fgcolor_s fgcolor; + struct ft80x_cmd_bgcolor_s bgcolor; + struct ft80x_cmd_scrollbar_s scrollbar; + struct ft80x_cmd32_s colora; + struct ft80x_cmd_text_s text; + } b; + struct + { + struct ft80x_cmd_fgcolor_s fgcolor; + struct ft80x_cmd_bgcolor_s bgcolor; + struct ft80x_cmd_scrollbar_s scrollbar; + struct ft80x_cmd32_s colora; + } c; + struct + { + struct ft80x_cmd_fgcolor_s fgcolor; + struct ft80x_cmd_bgcolor_s bgcolor; + struct ft80x_cmd_scrollbar_s scrollbar; + } d; + struct + { + struct ft80x_cmd_bgcolor_s bgcolor; + struct ft80x_cmd_scrollbar_s scrollbar; + struct ft80x_cmd32_s colora; + } e; + struct + { + struct ft80x_cmd_bgcolor_s bgcolor; + struct ft80x_cmd_scrollbar_s scrollbar; + } f; + } cmds; + + /* Create the hardware display list */ + + ret = ft80x_dl_start(fd, buffer, true); + if (ret < 0) + { + ft80x_err("ERROR: ft80x_dl_start failed: %d\n", ret); + return ret; + } + + cmds.a.clearrgb.cmd = FT80X_CLEAR_COLOR_RGB(64, 64, 64); + cmds.a.clear.cmd = FT80X_CLEAR(1 ,1, 1); + cmds.a.colorrgb.cmd = FT80X_COLOR_RGB(0xff, 0xff, 0xff); + + /* Copy the commands into the display list */ + + ret = ft80x_dl_data(fd, buffer, &cmds.a, sizeof(cmds.a)); + if (ret < 0) + { + ft80x_err("ERROR: ft80x_dl_data failed: %d\n", ret); + return ret; + } + + /* Draw scroll bar with flat effect */ + + cmds.b.fgcolor.cmd = FT80X_CMD_FGCOLOR; + cmds.b.fgcolor.c = 0xffff00; + + cmds.b.bgcolor.cmd = FT80X_CMD_BGCOLOR; + cmds.b.bgcolor.c = 0x404080; + + cmds.b.scrollbar.cmd = FT80X_CMD_SCROLLBAR; + cmds.b.scrollbar.x = 20; + cmds.b.scrollbar.y = 10; + cmds.b.scrollbar.w = 120; + cmds.b.scrollbar.h = 8; + cmds.b.scrollbar.options = FT80X_OPT_FLAT; + cmds.b.scrollbar.val = 20; + cmds.b.scrollbar.size = 30; + cmds.b.scrollbar.range = 100; + + cmds.b.colora.cmd = FT80X_COLOR_A(255); + + cmds.b.text.cmd = FT80X_CMD_TEXT; /* Text */ + cmds.b.text.x = 20; + cmds.b.text.y = 40; + cmds.b.text.font = 26; + cmds.b.text.options = 0; + + ret = ft80x_dl_data(fd, buffer, &cmds.b, sizeof(cmds.b)); + if (ret < 0) + { + ft80x_err("ERROR: ft80x_dl_data failed: %d\n", ret); + return ret; + } + + ret = ft80x_dl_string(fd, buffer, "Flat effect"); + if (ret < 0) + { + ft80x_err("ERROR: ft80x_dl_string failed: %d\n", ret); + return ret; + } + + /* Draw scroll bar with 3d effect */ + + cmds.b.fgcolor.cmd = FT80X_CMD_FGCOLOR; + cmds.b.fgcolor.c = 0x00ff00; + + cmds.b.bgcolor.cmd = FT80X_CMD_BGCOLOR; + cmds.b.bgcolor.c = 0x800000; + + cmds.b.scrollbar.cmd = FT80X_CMD_SCROLLBAR; + cmds.b.scrollbar.x = 180; + cmds.b.scrollbar.y = 10; + cmds.b.scrollbar.w = 120; + cmds.b.scrollbar.h = 8; + cmds.b.scrollbar.options = 0; + cmds.b.scrollbar.val = 20; + cmds.b.scrollbar.size = 30; + cmds.b.scrollbar.range = 100; + + cmds.b.colora.cmd = FT80X_COLOR_A(255); + + cmds.b.text.cmd = FT80X_CMD_TEXT; /* Text */ + cmds.b.text.x = 180; + cmds.b.text.y = 40; + cmds.b.text.font = 26; + cmds.b.text.options = 0; + + ret = ft80x_dl_data(fd, buffer, &cmds.b, sizeof(cmds.b)); + if (ret < 0) + { + ft80x_err("ERROR: ft80x_dl_data failed: %d\n", ret); + return ret; + } + + ret = ft80x_dl_string(fd, buffer, "3D effect"); + if (ret < 0) + { + ft80x_err("ERROR: ft80x_dl_string failed: %d\n", ret); + return ret; + } + + /* Draw horizontal scroll bars */ + + xoffset = 20; + yoffset = 120; + wsz = FT80X_DISPLAY_WIDTH / 2 - 40; + + cmds.d.fgcolor.cmd = FT80X_CMD_FGCOLOR; + cmds.d.fgcolor.c = 0x00a000; + + cmds.d.bgcolor.cmd = FT80X_CMD_BGCOLOR; + cmds.d.bgcolor.c = 0x800000; + + cmds.d.scrollbar.cmd = FT80X_CMD_SCROLLBAR; + cmds.d.scrollbar.x = xoffset; + cmds.d.scrollbar.y = yoffset; + cmds.d.scrollbar.w = wsz; + cmds.d.scrollbar.h = 8; + cmds.d.scrollbar.options = 0; + cmds.d.scrollbar.val = 10; + cmds.d.scrollbar.size = 30; + cmds.d.scrollbar.range = 100; + + ret = ft80x_dl_data(fd, buffer, &cmds.d, sizeof(cmds.d)); + if (ret < 0) + { + ft80x_err("ERROR: ft80x_dl_data failed: %d\n", ret); + return ret; + } + + yoffset += ydist; + + cmds.c.bgcolor.cmd = FT80X_CMD_BGCOLOR; + cmds.c.bgcolor.c = 0x000080; + + cmds.c.scrollbar.cmd = FT80X_CMD_SCROLLBAR; + cmds.c.scrollbar.x = xoffset; + cmds.c.scrollbar.y = yoffset; + cmds.c.scrollbar.w = wsz; + cmds.c.scrollbar.h = 8; + cmds.c.scrollbar.options = 0; + cmds.c.scrollbar.val = 30; + cmds.c.scrollbar.size = 30; + cmds.c.scrollbar.range = 100; + + cmds.c.colora.cmd = FT80X_COLOR_A(255); + + ret = ft80x_dl_data(fd, buffer, &cmds.c, sizeof(cmds.c)); + if (ret < 0) + { + ft80x_err("ERROR: ft80x_dl_data failed: %d\n", ret); + return ret; + } + + yoffset += ydist; + + cmds.f.bgcolor.cmd = FT80X_CMD_BGCOLOR; + cmds.f.bgcolor.c = 0xffff00; + + cmds.f.scrollbar.cmd = FT80X_CMD_SCROLLBAR; + cmds.f.scrollbar.x = xoffset; + cmds.f.scrollbar.y = yoffset; + cmds.f.scrollbar.w = wsz; + cmds.f.scrollbar.h = 8; + cmds.f.scrollbar.options = 0; + cmds.f.scrollbar.val = 50; + cmds.f.scrollbar.size = 30; + cmds.f.scrollbar.range = 100; + + ret = ft80x_dl_data(fd, buffer, &cmds.f, sizeof(cmds.f)); + if (ret < 0) + { + ft80x_err("ERROR: ft80x_dl_data failed: %d\n", ret); + return ret; + } + + yoffset += ydist; + + cmds.f.bgcolor.cmd = FT80X_CMD_BGCOLOR; + cmds.f.bgcolor.c = 0x808080; + + cmds.f.scrollbar.cmd = FT80X_CMD_SCROLLBAR; + cmds.f.scrollbar.x = xoffset; + cmds.f.scrollbar.y = yoffset; + cmds.f.scrollbar.w = wsz; + cmds.f.scrollbar.h = 8; + cmds.f.scrollbar.options = 0; + cmds.f.scrollbar.val = 70; + cmds.f.scrollbar.size = 30; + cmds.f.scrollbar.range = 100; + + ret = ft80x_dl_data(fd, buffer, &cmds.f, sizeof(cmds.f)); + if (ret < 0) + { + ft80x_err("ERROR: ft80x_dl_data failed: %d\n", ret); + return ret; + } + + /* Draw vertical scroll bars */ + + xoffset = FT80X_DISPLAY_WIDTH / 2 + 40; + yoffset = 80; + wsz = FT80X_DISPLAY_HEIGHT - 100; + + cmds.f.bgcolor.cmd = FT80X_CMD_BGCOLOR; + cmds.f.bgcolor.c = 0x800000; + + cmds.f.scrollbar.cmd = FT80X_CMD_SCROLLBAR; + cmds.f.scrollbar.x = xoffset; + cmds.f.scrollbar.y = yoffset; + cmds.f.scrollbar.w = 8; + cmds.f.scrollbar.h = wsz; + cmds.f.scrollbar.options = 0; + cmds.f.scrollbar.val = 10; + cmds.f.scrollbar.size = 30; + cmds.f.scrollbar.range = 100; + + ret = ft80x_dl_data(fd, buffer, &cmds.f, sizeof(cmds.f)); + if (ret < 0) + { + ft80x_err("ERROR: ft80x_dl_data failed: %d\n", ret); + return ret; + } + + xoffset += xdist; + + cmds.e.bgcolor.cmd = FT80X_CMD_BGCOLOR; + cmds.e.bgcolor.c = 0x000080; + + cmds.e.scrollbar.cmd = FT80X_CMD_SCROLLBAR; + cmds.e.scrollbar.x = xoffset; + cmds.e.scrollbar.y = yoffset; + cmds.e.scrollbar.w = 8; + cmds.e.scrollbar.h = wsz; + cmds.e.scrollbar.options = 0; + cmds.e.scrollbar.val = 30; + cmds.e.scrollbar.size = 30; + cmds.e.scrollbar.range = 100; + + cmds.e.colora.cmd = FT80X_COLOR_A(255); + + ret = ft80x_dl_data(fd, buffer, &cmds.e, sizeof(cmds.e)); + if (ret < 0) + { + ft80x_err("ERROR: ft80x_dl_data failed: %d\n", ret); + return ret; + } + + xoffset += xdist; + + cmds.f.bgcolor.cmd = FT80X_CMD_BGCOLOR; + cmds.f.bgcolor.c = 0xffff00; + + cmds.f.scrollbar.cmd = FT80X_CMD_SCROLLBAR; + cmds.f.scrollbar.x = xoffset; + cmds.f.scrollbar.y = yoffset; + cmds.f.scrollbar.w = 8; + cmds.f.scrollbar.h = wsz; + cmds.f.scrollbar.options = 0; + cmds.f.scrollbar.val = 50; + cmds.f.scrollbar.size = 30; + cmds.f.scrollbar.range = 100; + + ret = ft80x_dl_data(fd, buffer, &cmds.f, sizeof(cmds.f)); + if (ret < 0) + { + ft80x_err("ERROR: ft80x_dl_data failed: %d\n", ret); + return ret; + } + + xoffset += xdist; + + cmds.f.bgcolor.cmd = FT80X_CMD_BGCOLOR; + cmds.f.bgcolor.c = 0x808080; + + cmds.f.scrollbar.cmd = FT80X_CMD_SCROLLBAR; + cmds.f.scrollbar.x = xoffset; + cmds.f.scrollbar.y = yoffset; + cmds.f.scrollbar.w = 8; + cmds.f.scrollbar.h = wsz; + cmds.f.scrollbar.options = 0; + cmds.f.scrollbar.val = 70; + cmds.f.scrollbar.size = 30; + cmds.f.scrollbar.range = 100; + + ret = ft80x_dl_data(fd, buffer, &cmds.f, sizeof(cmds.f)); + if (ret < 0) + { + ft80x_err("ERROR: ft80x_dl_data failed: %d\n", ret); + return ret; + } + + /* Finally, terminate the display list */ ret = ft80x_dl_end(fd, buffer); if (ret < 0) diff --git a/examples/ft80x/ft80x_main.c b/examples/ft80x/ft80x_main.c index 40cf2383e..9b35df646 100644 --- a/examples/ft80x/ft80x_main.c +++ b/examples/ft80x/ft80x_main.c @@ -102,32 +102,33 @@ static const struct ft80x_exampleinfo_s g_primitives[] = * here co-processor command are exercised and these with only a few of the * possible options. * - * FUNCTION CoProc CMD USED DESCRIPTION - * ----------------------- --------------- ---------------------------------- - * --None-- CMD_TEXT Draw text - * --None-- CMD_BUTTON Draw a button - * --None-- CMD_CLOCK Draw an analog clock - * --None-- CMD_GAUGE Draw a gauge - * --None-- CMD_KEYS Draw a row of keys + * FUNCTION CoProc CMD USED DESCRIPTION + * ------------------------ --------------- ---------------------------------- + * --None-- CMD_TEXT Draw text + * --None-- CMD_BUTTON Draw a button + * --None-- CMD_CLOCK Draw an analog clock + * --None-- CMD_GAUGE Draw a gauge + * --None-- CMD_KEYS Draw a row of keys * ft80x_coproc_progressbar CMD_PROGRESS Draw a progress bar - * --None-- CMD_SCROLLBAR Draw a scroll bar - * --None-- CMD_SLIDER Draw a slider - * --None-- CMD_DIAL Draw a rotary dial control - * --None-- CMD_TOGGLE Draw a toggle switch - * --None-- CMD_NUMBER Draw a decimal number - * --None-- CMD_CALIBRATE Execute the touch screen - calibration routine - * --None-- CMD_SPINNER Start an animated spinner - * --None-- CMD_SCREENSAVER Start an animated screensaver - * --None-- CMD_SKETCH Start a continuous sketch update - * --None-- CMD_SNAPSHOT Take a snapshot of the current - screen - * --None-- CMD_LOGO Play device log animation + * ft80x_coproc_scrollbar CMD_SCROLLBAR Draw a scroll bar + * --None-- CMD_SLIDER Draw a slider + * --None-- CMD_DIAL Draw a rotary dial control + * --None-- CMD_TOGGLE Draw a toggle switch + * --None-- CMD_NUMBER Draw a decimal number + * --None-- CMD_CALIBRATE Execute the touch screen + calibration routine + * --None-- CMD_SPINNER Start an animated spinner + * --None-- CMD_SCREENSAVER Start an animated screensaver + * --None-- CMD_SKETCH Start a continuous sketch update + * --None-- CMD_SNAPSHOT Take a snapshot of the current + screen + * --None-- CMD_LOGO Play device log animation */ static const struct ft80x_exampleinfo_s g_coproc[] = { - { "Progress Bar", ft80x_coproc_progressbar } + { "Progress Bar", ft80x_coproc_progressbar }, + { "Scroll Bar", ft80x_coproc_scrollbar } }; #define NCOPROC (sizeof(g_primitives) / sizeof(ft80x_example_t)) @@ -209,6 +210,8 @@ static int ft80x_example(int fd, FAR struct ft80x_dlbuffer_s *buffer, { int ret; + ft80x_info("Example %s\n", example->name); + /* Show the name of the example */ ret = ft80x_showname(fd, buffer, example->name); @@ -277,6 +280,8 @@ int ft80x_main(int argc, char *argv[]) /* Perform tests on a few of the FT80x primitive functions */ + ft80x_info("FT80x Primitive Functions\n"); + for (i = 0; i < NPRIMITIVES; i++) { (void)ft80x_example(fd, buffer, &g_primitives[i]); @@ -284,6 +289,8 @@ int ft80x_main(int argc, char *argv[]) /* Perform tests on a few of the FT80x Co-processor functions */ + ft80x_info("FT80x Co-processor Functions\n"); + for (i = 0; i < NCOPROC; i++) { (void)ft80x_example(fd, buffer, &g_coproc[i]); diff --git a/graphics/ft80x/ft80x_ramcmd.c b/graphics/ft80x/ft80x_ramcmd.c index b0db2949e..add1bc6a8 100644 --- a/graphics/ft80x/ft80x_ramcmd.c +++ b/graphics/ft80x/ft80x_ramcmd.c @@ -336,6 +336,8 @@ int ft80x_ramcmd_waitfifoempty(int fd, FAR struct ft80x_dlbuffer_s *buffer) break; } + ft80x_info("head=%u tail=%u\n", head, tail); + if (head == tail) { /* The FIFO is empty... return success */ diff --git a/graphics/ft80x/ft80x_regs.c b/graphics/ft80x/ft80x_regs.c index 0ab034d10..2c551a975 100644 --- a/graphics/ft80x/ft80x_regs.c +++ b/graphics/ft80x/ft80x_regs.c @@ -255,7 +255,7 @@ int ft80x_dl_swap(int fd) if (++timeout > DLSWAP_TIMEOUT_CSEC) { - ft80x_err("ERROR: Timed out waiting for DLSWAP to complete\n"); + ft80x_warn("WARNING: Timed out waiting for DLSWAP to complete\n"); return -ETIMEDOUT; }