Squashed commit of the following:

apps/examples/ft80x:  Add another co-processor demo
    ft80x: Add a few more debug message.
This commit is contained in:
Gregory Nutt 2018-02-20 18:46:17 -06:00
parent ecfdf073fc
commit a2b232f832
5 changed files with 399 additions and 23 deletions

View File

@ -152,6 +152,7 @@ int ft80x_prim_rectangles(int fd, FAR struct ft80x_dlbuffer_s *buffer);
/* Co-processor display examples */ /* Co-processor display examples */
int ft80x_coproc_progressbar(int fd, FAR struct ft80x_dlbuffer_s *buffer); 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 #undef EXTERN
#ifdef __cplusplus #ifdef __cplusplus

View File

@ -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); ft80x_err("ERROR: ft80x_dl_data failed: %d\n", ret);
return 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); ret = ft80x_dl_end(fd, buffer);
if (ret < 0) if (ret < 0)

View File

@ -103,14 +103,14 @@ static const struct ft80x_exampleinfo_s g_primitives[] =
* possible options. * possible options.
* *
* FUNCTION CoProc CMD USED DESCRIPTION * FUNCTION CoProc CMD USED DESCRIPTION
* ----------------------- --------------- ---------------------------------- * ------------------------ --------------- ----------------------------------
* --None-- CMD_TEXT Draw text * --None-- CMD_TEXT Draw text
* --None-- CMD_BUTTON Draw a button * --None-- CMD_BUTTON Draw a button
* --None-- CMD_CLOCK Draw an analog clock * --None-- CMD_CLOCK Draw an analog clock
* --None-- CMD_GAUGE Draw a gauge * --None-- CMD_GAUGE Draw a gauge
* --None-- CMD_KEYS Draw a row of keys * --None-- CMD_KEYS Draw a row of keys
* ft80x_coproc_progressbar CMD_PROGRESS Draw a progress bar * ft80x_coproc_progressbar CMD_PROGRESS Draw a progress bar
* --None-- CMD_SCROLLBAR Draw a scroll bar * ft80x_coproc_scrollbar CMD_SCROLLBAR Draw a scroll bar
* --None-- CMD_SLIDER Draw a slider * --None-- CMD_SLIDER Draw a slider
* --None-- CMD_DIAL Draw a rotary dial control * --None-- CMD_DIAL Draw a rotary dial control
* --None-- CMD_TOGGLE Draw a toggle switch * --None-- CMD_TOGGLE Draw a toggle switch
@ -127,7 +127,8 @@ static const struct ft80x_exampleinfo_s g_primitives[] =
static const struct ft80x_exampleinfo_s g_coproc[] = 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)) #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; int ret;
ft80x_info("Example %s\n", example->name);
/* Show the name of the example */ /* Show the name of the example */
ret = ft80x_showname(fd, buffer, example->name); 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 */ /* Perform tests on a few of the FT80x primitive functions */
ft80x_info("FT80x Primitive Functions\n");
for (i = 0; i < NPRIMITIVES; i++) for (i = 0; i < NPRIMITIVES; i++)
{ {
(void)ft80x_example(fd, buffer, &g_primitives[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 */ /* Perform tests on a few of the FT80x Co-processor functions */
ft80x_info("FT80x Co-processor Functions\n");
for (i = 0; i < NCOPROC; i++) for (i = 0; i < NCOPROC; i++)
{ {
(void)ft80x_example(fd, buffer, &g_coproc[i]); (void)ft80x_example(fd, buffer, &g_coproc[i]);

View File

@ -336,6 +336,8 @@ int ft80x_ramcmd_waitfifoempty(int fd, FAR struct ft80x_dlbuffer_s *buffer)
break; break;
} }
ft80x_info("head=%u tail=%u\n", head, tail);
if (head == tail) if (head == tail)
{ {
/* The FIFO is empty... return success */ /* The FIFO is empty... return success */

View File

@ -255,7 +255,7 @@ int ft80x_dl_swap(int fd)
if (++timeout > DLSWAP_TIMEOUT_CSEC) 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; return -ETIMEDOUT;
} }