FTDI Community

Please login or register.

Login with username, password and session length.
Advanced Search  

News:

Welcome to the FTDI Community!

Please read our Welcome Note

Technical Support enquires
please contact the team
@ FTDI Support


New Bridgetek Community is now open

Please note that we have created the Bridgetek Community to discuss all Bridgetek products e.g. EVE, MCU.

Please follow this link and create a new user account to get started.

Bridgetek Community

Show Posts

You can view here all posts made by this member. Note that you can only see posts made in areas to which you currently have access.

Topics - jberkhout

Pages: [1]
1
General Discussion / FT813 bin compression algorithm documented?
« on: January 27, 2023, 07:26:47 PM »
I use an STM32F7 MCU, it can render bitmaps and store them on an SD card.
Then, if they exist, they can just be loaded, and don't need to be rendered again, which is quicker.
Though I can load them as uncompressed binary files only.
However I would like to compress them as the EVE Asset Builder can do, so I can load smaller files, even quicker.

Currently I would need to transfer them from the SD card to the computer, convert them, load them in Asset Builder, convert them into compressed bin format and then copy them back to the SD card.
It is quite cumbersome. If it could be compressed by the MCU that would be awesome.
What compression algorithm is used? Is it documented?

Any help would be very welcome.

2
General Discussion / FT813 Custom Font Text
« on: September 07, 2019, 09:09:59 PM »
Hi, I use a custom font.
I ported Rudolph Riedel library (Thank you very much!) to STM32H7 (480MHz) and drive the display using Quad-SPI (4-bit).
For the SD-card, I use the SDMMC (4-bit) interface, and FATFS.

I created the font with command:
fnt_cvt.exe -i SourceCodePro-Regular.ttf -s 40 -u characters.txt -d 1000
The file characters.txt contains this string (excluding the first and last double-quote):
" !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[|]^_`abcdefghijklmnopqrstuvwxyz{|}~"

When printing strings, all works fine until the printed character value reaches 96, after which the characters are printed over each other (so the cursor-position didn't increment to the next horizontal character position). To illustrate it, I have attached a photo from the screen.

In the top three lines, I first print the characters individually on a calculated (forced) position. That works, all characters are printable.

The fourth line should read as: "0123456789 The quick brown fox jumps over the lazy dog", but problems start beyond character value 96, with the lower case characters, being printed over each other.
The 7th line should read as "abcdefghijklmnopqrstuvwxyz", but shows those characters all printed over each other on one place.
In the last line I take a string with the character 96 somewhere near the end ("XYZ[|]^_`abc"). The first part goes well until character 96.

My code:

Code: [Select]
/*
 * This example shows the use of the SETFONT2 command.
 * Simpler method to load RAM font. Use the font conversion utility to convert the desired
 * subset of the ASCII characters, load font data, and use cmd_setfont2 command.
 * In characters.txt
 *  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[|]^_`abcdefghijklmnopqrstuvwxyz{|}~
 */
void Ft813Setfont40(void)
{
  /*
   * The converted font file will have a starting address of
   * RAM_G or 0th byte mark
   */
  uint8_t FontHandle = 1;
  uint16_t fontFileAddress = RAM_G + 1000;
  uint16_t FontWidth = 22;
  uint16_t FontHeight = 40;

  Ft813DLstart();
  Ft813DL(CLEAR_COLOR_RGB(0, 0, 0));
  Ft813DL(CLEAR(1, 1, 1));
  Ft813DL(COLOR_RGB(255, 255, 255));
  Ft813LoadRawFile(fontFileAddress, "SourceCodePro-Regular.ttf_40_L4.raw");      /* Load font data */
  Ft813SetFont2(1, fontFileAddress, 31);
  /*
   * Set ram font to font handle 1, font metric block starts at fontFileAddress(RAM_G),
   * and set the starting character to the 32th character in the set.
   */
  uint16_t x = 10;
  for(uint8_t i = 0; i < 32; i++)
  {
    char str[2];
    str[1] = 0;
    str[0] = i + 0x20;
    Ft813Text(x, 10, FontHandle, 0, str);
    str[0] = i + 0x20 + 32;
    Ft813Text(x, 10 + FontHeight, FontHandle, 0, str);
    if (i + 0x20 + 64 < 127)    /* Do not print space character (0x20) */
    {
      str[0] = i + 0x20 + 64;
      Ft813Text(x, 10 + FontHeight * 2, FontHandle, 0, str);
    }
    x += FontWidth;
  }

  Ft813Text(10, 10 + FontHeight*4, FontHandle, 0, "0123456789 The quick brown fox jumps over the lazy dog");
  Ft813Text(10, 10 + FontHeight*5, FontHandle, 0, "The quick brown fox jumps over the lazy dog");
  Ft813Text(10, 10 + FontHeight*6, FontHandle, 0, "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
  Ft813Text(10, 10 + FontHeight*7, FontHandle, 0, "abcdefghijklmnopqrstuvwxyz");

  Ft813DL(DISPLAY());         /* Display the image */
  Ft813Swap();                /* Swap the current display list */
  Ft813Flush_Co_Buffer();     /* Download the commands into fifo */
  Ft813WaitCmdFifoEmpty();    /* Wait till coprocessor completes the operation */
}


The function Ft813Text:

Code: [Select]
/* Draw Text: FT81x Series Programmers Guide Section 5.41 */
void Ft813Text(int16_t x, int16_t y, int16_t font, uint16_t options, const char* s)
{
  Ft813StartFunc(FT_CMD_SIZE * 3 + strlen(s) + 1);
  Ft813SendCmd(CMD_TEXT); // 4294967052 = FFFFFF0C
  Ft813SendCmd((((uint32_t) y << 16) | (x & 0xffff)));
  Ft813SendCmd((((uint32_t) options << 16) | (uint32_t) font));
  Ft813SendStr(s);
  Ft813EndFunc();
}
Probably, I'm overlooking something.
Note, in the function Ft813SetFont2, I specified 31 as first character, perhaps there is a limit on the character value of 127.
I hope this helps somebody having the same problems.

3
Discussion - Hardware / FT813 GRAM size 1MB to be increased soon?
« on: September 12, 2018, 01:24:58 PM »
Hi,
we use a lot of bitmaps, and when bitmaps are displayed, they have to stay in GRAM, so removing them while displaying content is not possible.
Or to do this, we may need to blank the display for a moment, every time we show a new page.
Of course we try to optimize bitmaps and load first what we always need, so we can keep them, while reloading a part of GRAM.
But 1MB of GRAM is a limiting factor to use this display for all our applications.
Is there a chance a new controller will be developed with more GRAM, say 4MB?
Regards,
Jack.

4
Hi,

I just discovered a problem using the 800x480 display in portait mode:

BITMAP_LAYOUT and BITMAP_SIZE have only 8 bits for specifying the height, which gives a maximum of 511 pixels in height.
BITMAP_SIZE also has a limited width of 511 resolution.
So bitmaps that are bigger has greater resolution will not be handled correctly.

This is a limitation that should be addressed in the future of EVE, would it be able to support bigger displays (and portrait mode).

To work around this, I will try to cut my images so they don't exceed 511 pixels.

Hope this helps others.

Kind regards,
Jack.

5
Hi,

I am working on a EVE library for the mbed (ARM Cortex) platform in combination with the EVE ME813A-WH50C display.

It is now working, displaying images from the displays GRAM, after a lot of trying.

I have edited this post when I discovered more about the cause of the problem.

After loading images into RAM (only once), they display correctly, in gray color.

The below code loads and shows 4 bitmaps on the correct place and in the correct gray color (On and Off buttons, in narrow and wide versions):

Code: [Select]
    TFT.DLstart();                              // start a new display command list
    TFT.DL(CLEAR_COLOR_RGB(0x25, 0x25, 0x25));  // set the clear color to white
    TFT.DL(CLEAR(1, 1, 1));                     // clear buffers -> color buffer,stencil buffer, tag buffer

    TFT.SetLoadAddress(0);
 
    //  Narrow On button, 100x132, Address 0-26400
    TFT.DL(BITMAP_HANDLE(0));
    TFT.Png("/fs/SWITCH_BUTTON_SMALL_ON_100x131.png", 20, 20);
 
    // Narrow Off button, 100x132, Address 26400-52800
    TFT.DL(BITMAP_HANDLE(1));
    TFT.Png("/fs/SWITCH_BUTTON_SMALL_OFF_100x131.png", 125, 20);

    // Wide On button, 182x132, Address 52800-100848
    TFT.DL(BITMAP_HANDLE(2));
    TFT.Png("/fs/SWITCH_BUTTON_LARGE_ON_181x131.png", 230, 20);

    // Wide Off button, 182x132, Address 100848-148896
    TFT.DL(BITMAP_HANDLE(3));
    TFT.Png("/fs/SWITCH_BUTTON_LARGE_OFF_181x131.png", 416, 20);

    TFT.DL(DISPLAY());                          // Display the image
    TFT.Swap();                                 // Swap the current display list
    TFT.Flush_Co_Buffer();                      // Download the command list into fifo
    TFT.WaitCmdfifo_empty();                    // Wait till coprocessor completes the operation

In TFT.png, the image was loaded using below code, which seems to work fine:

Code: [Select]
    // In short
    //    WrCmd32(CMD_LOADIMAGE);
    //    WrCmd32(_address);             //destination address of png decode
    //    WrCmd32(0);             // Output format of the bitmap OPT_RGB565
    //    WrCmdBuf((uint8_t *)pbuff, blocklen); //alignment is already taken care by this api

ft_uint8_t FT813::LoadPng(char* filename, ft_int16_t* x_size, ft_int16_t* y_size)
{
    int bufferSize = 8192;
    uint32_t marker1;
    uint32_t marker2;
    unsigned short length;
    unsigned char data[32];

    ft_uint16_t blocklen;
 
    FILE *fp = fopen(filename, "rb");
    if(fp == NULL) {
        printf("LoadPng: Cannot open file \"%s\".\n", filename);
        return (-1);         // cannot open file
    }

    // Get file size
    fseek(fp, 0, SEEK_END);
    unsigned int Fsize = ftell(fp);
    // search for 0x89504E47 and 0x0D0A1A0A markers "‰PNG...."
    fseek(fp, 2, SEEK_SET); // Beginning of file
    fread(data, 32, 1, fp); // Read first 32 bytes
    printf("LoadPng: Filesize %d\n", Fsize);
   
    // Check that this is indeed a PNG file
    unsigned char png_header[] = {0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A};
    if (memcmp(data, png_header, 8)) {
        printf("LoadPng: Not a PNG file.\n");
        return (-2);  // No FFC0 Marker, wrong format no baseline DCT-based JPEG
    }

    // Make sure you have an IHDR
    unsigned char ihdr_name[] = "IHDR";
    if (memcmp(data+8+4, ihdr_name, 4)) {
        // not an IHDR chunk, invalid PNG file
        printf("LoadPng: Not an IHDR chunk, invalid PNG file.\n");
        return (-3);  // No FFC0 Marker, wrong format no baseline DCT-based JPEG
    }
   
    // PNG actually stores integers in big-endian.
    *x_size = ReadBigInt32(data, 24 - 8);
    *y_size = ReadBigInt32(data, 24 - 4);
    uint16_t size_x = ReadBigInt32(data, 24 - 8);
    uint16_t size_y = ReadBigInt32(data, 24 - 4);
 
    if(*x_size > DispWidth || *y_size > DispHeight)
    {
        printf("LoadPng: Too big to fit on screen\n");
        printf("LoadPng: PNG (%dx%d) does not fit on TFT (%dx%d)\n", *x_size, *y_size, DispWidth, DispHeight);
        return (-3);  // Too big to fit on screen
    }

    fseek(fp, 0, SEEK_SET); // Beginning of file
   
    // http://www.ftdichip.com/Support/Documents/AppNotes/AN_339%20Using%20JPEGs%20with%20the%20FT800%20series.pdf
    // CMD_LOADIMAGE: This function will decode the JPEG file, produce
    // either RGB565 or L8 bitmap data and store this in graphics RAM.
    // It also writes commands to the display list to set the source, layout and size of the
    // image (BITMAP_SOURCE, BITMAP_LAYOUT and BITMAP_SIZE).
    // Note that only a BEGIN and VERTEX2F (or VERTEX2II) display list commands are then
    // required to complete the display list needed to render the image.
    WrCmd32(CMD_LOADIMAGE);
    WrCmd32(_address);             //destination address of png decode

    // Increment _address
    _addresses[_bitmap_count] = _address;
    _bitmap_count++;
    _address += (uint32_t) (size_x * size_y * 2);
    _addresses[_bitmap_count] = _address;

    // 0 OPT_RGB565
    // 1 OPT_MONO
    // 2 OPT_NODL
    // 256 OPT_FLAT
    // 256 OPT_SIGNED
    // 512 OPT_CENTERX
    // 1024 OPT_CENTERY
    // 1536 OPT_CENTER
    // 2048 OPT_RIGHTX
    // 4096 OPT_NOBACK
    // 8192 OPT_NOTICKS
    // By default, option OPT_RGB565 means the loaded bitmap is in RGB565 format.
    WrCmd32(0);             // Output format of the bitmap OPT_RGB565

    char* pbuff = (char*)malloc(bufferSize);

    unsigned int FsizeCounter = Fsize;
    while(FsizeCounter > 0) {
        /* download the data into the command buffer by 8kb one shot */
        blocklen = FsizeCounter > bufferSize ? bufferSize : FsizeCounter;

        /* copy the data into pbuff and then transfter it to command buffer */
        int size = fread(pbuff, 1, blocklen, fp);
        FsizeCounter -= blocklen;
        /* copy data continuously into command memory */
        WrCmdBuf((uint8_t *)pbuff, blocklen); //alignment is already taken care by this api
    }
    fclose(fp);

    // If the number of bytes in the JPEG file to be written to the command buffer is not a multiple of
    // four, then one, two or three bytes (of any value) should be added to ensure four-byte alignment of
    // the next command.
    blocklen = Fsize % 4;
    memset(pbuff, 0, bufferSize);
    WrCmdBuf((uint8_t *)pbuff, blocklen); //alignment is already taken care by this api
 
    free(pbuff);
    printf("LoadPng: Done.\n");

    return(0);
}

And the shown correctly with following code:

Code: [Select]
    DL(BEGIN(BITMAPS));                 
    DL(VERTEX2F(x * 16, y * 16));

Then, it should display several of the pre-loaded images from the displays GRAM at different locations on the screen.

It turnes out this works fine if I specify ARGB4 for the format in GRAM (trial and error). Why does it not match the RGB565 layout?

Code: [Select]
    TFT.DLstart();                              // start a new display command list
    TFT.DL(CLEAR_COLOR_RGB(0x25, 0x25, 0x25));  // set the clear color to white
    TFT.DL(CLEAR(1, 1, 1));                     // clear buffers -> color buffer,stencil buffer, tag buffer
             
    //  Narrow On button, 100x132, Address 0-26400
    TFT.DL(BITMAP_SOURCE(TFT.GetBitmapAddress(0)));
    TFT.DL(BITMAP_LAYOUT(ARGB4, 100*2, 132));    // <------- Why ARGB4 instead of RGB565?
    TFT.DL(BITMAP_SIZE(NEAREST, BORDER, BORDER, 100, 132));
    TFT.DL(BEGIN(BITMAPS));   
    TFT.DL(VERTEX2II(125, 190, 0, 0));

    // Narrow Off button, 100x132, Address 26400-52800
    TFT.DL(BITMAP_SOURCE(TFT.GetBitmapAddress(1)));
    TFT.DL(BITMAP_LAYOUT(ARGB4, 100*2, 132));    // <------- Why ARGB4 instead of RGB565?
    TFT.DL(BITMAP_SIZE(NEAREST, BORDER, BORDER, 100, 132));
    TFT.DL(BEGIN(BITMAPS));   
    TFT.DL(VERTEX2II(20, 190, 0, 0));

    // Wide On button, 182x132, Address 52800-100848
    TFT.DL(BITMAP_SOURCE(TFT.GetBitmapAddress(2)));
    TFT.DL(BITMAP_LAYOUT(ARGB4, 182*2, 132));    // <------- Why ARGB4 instead of RGB565?
    TFT.DL(BITMAP_SIZE(NEAREST, BORDER, BORDER, 182, 132));
    TFT.DL(BEGIN(BITMAPS));   
    TFT.DL(VERTEX2II(416, 190, 0, 0));

    // Wide Off button, 182x132, Address 100848-148896
    TFT.DL(BITMAP_SOURCE(TFT.GetBitmapAddress(3)));
    TFT.DL(BITMAP_LAYOUT(ARGB4, 182*2, 132));    // <------- Why ARGB4 instead of RGB565?
    TFT.DL(BITMAP_SIZE(NEAREST, BORDER, BORDER, 182, 132));
    TFT.DL(BEGIN(BITMAPS));   
    TFT.DL(VERTEX2II(230, 190, 0, 0));

    TFT.DL(END());                 
    TFT.DL(DISPLAY());                          // Display the image (erases the other images!)
    TFT.Swap();                                 // Swap the current display list
    TFT.Flush_Co_Buffer();                      // Download the command list into fifo
    TFT.WaitCmdfifo_empty();                    // Wait till coprocessor completes the operation

Definitions of RGB565, BITMAP_LAYOUT and BITMAP_SIZE_H:

Code: [Select]
#define RGB565               7UL

#define BITMAP_LAYOUT(format,linestride,height) ((7UL<<24)|(((format)&31UL)<<19)|(((linestride)&1023UL)<<9)|(((height)&511UL)<<0))

#define BITMAP_SIZE_H(width,height) ((41UL<<24)|(((width)&3UL)<<2)|(((height)&3UL)<<0))

I have added photos of the screen.

How can I define this upfront, if I'd like to try L8 format, using CMD_LOADIMAGE?
Is that possible?

I try to contribute in a positive way, and update posts with code that finally works.
Despite this seems useful and helpful information for others, this message still is awaiting approval by a moderator, for many days.
Is my contribution (as a new user) not appreciated?

I hope somebody can help me in the right direction.

Kind regards,
Jack.

6
Hi,
Using KT813, how can I best draw an arc with a line thickness?
For example for a line, I can use:

Code: [Select]
ft_void_t FT813::Line(ft_int16_t x0, ft_int16_t y0, ft_int16_t x1, ft_int16_t y1, ft_int16_t width)
{
    ft_uint32_t calc;

    StartFunc(FT_CMD_SIZE*5);
    SendCmd(DL_BEGIN | FT8_LINES);
    calc = LINE_WIDTH(width * 16);
    SendCmd(calc);
    calc = VERTEX2F(x0 * 16, y0 * 16);
    SendCmd(calc);
    calc = VERTEX2F(x1 * 16, y1 * 16);
    SendCmd(calc);
    SendCmd(DL_END);
    EndFunc();
}

Kind regards,
Jack.

7
Discussion - Software / Eclipse Build of Example HellWorld failed
« on: June 21, 2018, 02:40:16 PM »
Hi,
I exported the Basic example HelloWorld to Eclipse.
After Build (right-click project -> Build Project), I get many "No such file or directory" errors:

make all
'Building target: HelloWorld.elf'
'Invoking: FT90x GCC Linker'
ft32-elf-gcc -L"C:/Program Files (x86)/Bridgetek/FT9xx Toolchain/Toolchain/hardware/lib" -L"../FT_Eve_Hal/Lib" -Wl,--gc-sections -Wl,--entry=_start -o "HelloWorld.elf"  ./ThirdPartyLib/fatfs/diskio.o ./ThirdPartyLib/fatfs/ff.o ./ThirdPartyLib/fatfs/ff_ioctl_test.o ./ThirdPartyLib/fatfs/syscall.o ./ThirdPartyLib/fatfs/unicode.o  ./HelloWorld/AppScreen__Generated.o ./HelloWorld/App__Generated.o ./HelloWorld/MainPage__Generated.o  ./Generated/ME812A\ WH50R/HelloWorld/AppScreen__Generated.o ./Generated/ME812A\ WH50R/HelloWorld/App__Generated.o ./Generated/ME812A\ WH50R/HelloWorld/MainPage__Generated.o  ./Generated/ME812A\ WH50R/FT_Esd_Widgets/Simulation/Ft_Esd_Elements__h__Simulation.o  ./Generated/ME812A\ WH50R/FT_Esd_Widgets/Ft_Esd_CheckBox__Generated.o ./Generated/ME812A\ WH50R/FT_Esd_Widgets/Ft_Esd_Circle_Raised__Generated.o ./Generated/ME812A\ WH50R/FT_Esd_Widgets/Ft_Esd_Circle_Sunken__Generated.o ./Generated/ME812A\ WH50R/FT_Esd_Widgets/Ft_Esd_Circle__Generated.o ./Generated/ME812A\ WH50R/FT_Esd_Widgets/Ft_Esd_Clock__Generated.o ./Generated/ME812A\ WH50R/FT_Esd_Widgets/Ft_Esd_ColorPicker__Generated.o ./Generated/ME812A\ WH50R/FT_Esd_Widgets/Ft_Esd_FixedPointNumericLabel__Generated.o ./Generated/ME812A\ WH50R/FT_Esd_Widgets/Ft_Esd_Gauge__Generated.o ./Generated/ME812A\ WH50R/FT_Esd_Widgets/Ft_Esd_Gradient__Generated.o ./Generated/ME812A\ WH50R/FT_Esd_Widgets/Ft_Esd_ImageButton__Generated.o ./Generated/ME812A\ WH50R/FT_Esd_Widgets/Ft_Esd_Image_Rotate__Generated.o ./Generated/ME812A\ WH50R/FT_Esd_Widgets/Ft_Esd_Image__Generated.o ./Generated/ME812A\ WH50R/FT_Esd_Widgets/Ft_Esd_IntCounter__Generated.o ./Generated/ME812A\ WH50R/FT_Esd_Widgets/Ft_Esd_LabelButton__Generated.o ./Generated/ME812A\ WH50R/FT_Esd_Widgets/Ft_Esd_Label__Generated.o ./Generated/ME812A\ WH50R/FT_Esd_Widgets/Ft_Esd_Line__Generated.o ./Generated/ME812A\ WH50R/FT_Esd_Widgets/Ft_Esd_NumericLabel__Generated.o ./Generated/ME812A\ WH50R/FT_Esd_Widgets/Ft_Esd_Panel_Color__Generated.o ./Generated/ME812A\ WH50R/FT_Esd_Widgets/Ft_Esd_Panel_Raised__Generated.o ./Generated/ME812A\ WH50R/FT_Esd_Widgets/Ft_Esd_Panel_Sunken__Generated.o ./Generated/ME812A\ WH50R/FT_Esd_Widgets/Ft_Esd_Panel__Generated.o ./Generated/ME812A\ WH50R/FT_Esd_Widgets/Ft_Esd_PosSizeToRadius__Generated.o ./Generated/ME812A\ WH50R/FT_Esd_Widgets/Ft_Esd_ProgressBar__Generated.o ./Generated/ME812A\ WH50R/FT_Esd_Widgets/Ft_Esd_PushButton__Generated.o ./Generated/ME812A\ WH50R/FT_Esd_Widgets/Ft_Esd_RadioButton__Generated.o ./Generated/ME812A\ WH50R/FT_Esd_Widgets/Ft_Esd_RadioGroup__Generated.o ./Generated/ME812A\ WH50R/FT_Esd_Widgets/Ft_Esd_Rectangle__Generated.o ./Generated/ME812A\ WH50R/FT_Esd_Widgets/Ft_Esd_ScrollBar__Generated.o ./Generated/ME812A\ WH50R/FT_Esd_Widgets/Ft_Esd_ScrollPanel__Generated.o ./Generated/ME812A\ WH50R/FT_Esd_Widgets/Ft_Esd_ScrollableImageWidget__Generated.o ./Generated/ME812A\ WH50R/FT_Esd_Widgets/Ft_Esd_Sketch__Generated.o ./Generated/ME812A\ WH50R/FT_Esd_Widgets/Ft_Esd_Slider__Generated.o ./Generated/ME812A\ WH50R/FT_Esd_Widgets/Ft_Esd_SpinBox__Generated.o ./Generated/ME812A\ WH50R/FT_Esd_Widgets/Ft_Esd_Theme_DarkOrange.o ./Generated/ME812A\ WH50R/FT_Esd_Widgets/Ft_Esd_Theme_LightBlue.o ./Generated/ME812A\ WH50R/FT_Esd_Widgets/Ft_Esd_Toggle__Generated.o  ./Generated/ME812A\ WH50R/FT_Esd_Framework/Simulation/FT_Esd_Primitives__h__Simulation.o ./Generated/ME812A\ WH50R/FT_Esd_Framework/Simulation/Ft_Esd_CoCmd__h__Simulation.o  ./Generated/ME812A\ WH50R/FT_Esd_Framework/Ft_Esd_Layout_Stretch__Generated.o ./Generated/ME812A\ WH50R/FT_Esd_Framework/Ft_Esd_RenderForwarder__Generated.o ./Generated/ME812A\ WH50R/FT_Esd_Framework/Ft_Esd_Timer__Generated.o ./Generated/ME812A\ WH50R/FT_Esd_Framework/Ft_Esd_TouchArea__Generated.o ./Generated/ME812A\ WH50R/FT_Esd_Framework/Ft_Esd_TouchScrollLogic__Generated.o  ./FT_Eve_Hal/FT_CoPro_Cmds.o ./FT_Eve_Hal/FT_Emu_main.o ./FT_Eve_Hal/FT_Gpu_Hal.o ./FT_Eve_Hal/FT_ILI9488.o ./FT_Eve_Hal/FT_KD2401.o ./FT_Eve_Hal/FT_LoadFile_clib.o ./FT_Eve_Hal/FT_LoadFile_ff.o  ./FT_Esd_Widgets/Ft_Esd_CheckBox__Generated.o ./FT_Esd_Widgets/Ft_Esd_Circle_Raised__Generated.o ./FT_Esd_Widgets/Ft_Esd_Circle_Sunken__Generated.o ./FT_Esd_Widgets/Ft_Esd_Circle__Generated.o ./FT_Esd_Widgets/Ft_Esd_Clock__Generated.o ./FT_Esd_Widgets/Ft_Esd_ColorPicker.o ./FT_Esd_Widgets/Ft_Esd_ColorPicker__Generated.o ./FT_Esd_Widgets/Ft_Esd_Elements.o ./FT_Esd_Widgets/Ft_Esd_Elements__h__Simulation.o ./FT_Esd_Widgets/Ft_Esd_FixedPointNumericLabel.o ./FT_Esd_Widgets/Ft_Esd_FixedPointNumericLabel__Generated.o ./FT_Esd_Widgets/Ft_Esd_Gauge__Generated.o ./FT_Esd_Widgets/Ft_Esd_Gradient__Generated.o ./FT_Esd_Widgets/Ft_Esd_Image.o ./FT_Esd_Widgets/Ft_Esd_ImageButton__Generated.o ./FT_Esd_Widgets/Ft_Esd_Image_Rotate.o ./FT_Esd_Widgets/Ft_Esd_Image_Rotate__Generated.o ./FT_Esd_Widgets/Ft_Esd_Image__Generated.o ./FT_Esd_Widgets/Ft_Esd_IntCounter__Generated.o ./FT_Esd_Widgets/Ft_Esd_LabelButton.o ./FT_Esd_Widgets/Ft_Esd_LabelButton__Generated.o ./FT_Esd_Widgets/Ft_Esd_Label__Generated.o ./FT_Esd_Widgets/Ft_Esd_Line__Generated.o ./FT_Esd_Widgets/Ft_Esd_NumericLabel.o ./FT_Esd_Widgets/Ft_Esd_NumericLabel__Generated.o ./FT_Esd_Widgets/Ft_Esd_Panel_Color__Generated.o ./FT_Esd_Widgets/Ft_Esd_Panel_Raised__Generated.o ./FT_Esd_Widgets/Ft_Esd_Panel_Sunken__Generated.o ./FT_Esd_Widgets/Ft_Esd_Panel__Generated.o ./FT_Esd_Widgets/Ft_Esd_PosSizeToRadius__Generated.o ./FT_Esd_Widgets/Ft_Esd_ProgressBar.o ./FT_Esd_Widgets/Ft_Esd_ProgressBar__Generated.o ./FT_Esd_Widgets/Ft_Esd_PushButton__Generated.o ./FT_Esd_Widgets/Ft_Esd_RadioButton.o ./FT_Esd_Widgets/Ft_Esd_RadioButton__Generated.o ./FT_Esd_Widgets/Ft_Esd_RadioGroup.o ./FT_Esd_Widgets/Ft_Esd_RadioGroup__Generated.o ./FT_Esd_Widgets/Ft_Esd_Rectangle__Generated.o ./FT_Esd_Widgets/Ft_Esd_ScrollBar.o ./FT_Esd_Widgets/Ft_Esd_ScrollBar__Generated.o ./FT_Esd_Widgets/Ft_Esd_ScrollPanel.o ./FT_Esd_Widgets/Ft_Esd_ScrollPanel__Generated.o ./FT_Esd_Widgets/Ft_Esd_ScrollableImageWidget__Generated.o ./FT_Esd_Widgets/Ft_Esd_Sketch.o ./FT_Esd_Widgets/Ft_Esd_Sketch__Generated.o ./FT_Esd_Widgets/Ft_Esd_Slider.o ./FT_Esd_Widgets/Ft_Esd_Slider__Generated.o ./FT_Esd_Widgets/Ft_Esd_SpinBox__Generated.o ./FT_Esd_Widgets/Ft_Esd_Theme_DarkOrange.o ./FT_Esd_Widgets/Ft_Esd_Theme_LightBlue.o ./FT_Esd_Widgets/Ft_Esd_Toggle.o ./FT_Esd_Widgets/Ft_Esd_Toggle__Generated.o  ./FT_Esd_Framework/FT_Esd_Dl.o ./FT_Esd_Framework/FT_Esd_MainLoop.o ./FT_Esd_Framework/FT_Esd_Primitives.o ./FT_Esd_Framework/FT_Esd_Primitives__h__Simulation.o ./FT_Esd_Framework/Ft_Esd.o ./FT_Esd_Framework/Ft_Esd_App.o ./FT_Esd_Framework/Ft_Esd_BitmapInfo.o ./FT_Esd_Framework/Ft_Esd_CoCmd.o ./FT_Esd_Framework/Ft_Esd_CoCmd__h__Simulation.o ./FT_Esd_Framework/Ft_Esd_GpuAlloc.o ./FT_Esd_Framework/Ft_Esd_Layout_Display.o ./FT_Esd_Framework/Ft_Esd_Layout_Fill.o ./FT_Esd_Framework/Ft_Esd_Layout_Fixed.o ./FT_Esd_Framework/Ft_Esd_Layout_Linear.o ./FT_Esd_Framework/Ft_Esd_Layout_Scroll.o ./FT_Esd_Framework/Ft_Esd_Layout_Stretch__Generated.o ./FT_Esd_Framework/Ft_Esd_Layout_Switch.o ./FT_Esd_Framework/Ft_Esd_Layout_Tag.o ./FT_Esd_Framework/Ft_Esd_Layout_Theme.o ./FT_Esd_Framework/Ft_Esd_Math.o ./FT_Esd_Framework/Ft_Esd_RenderForwarder__Generated.o ./FT_Esd_Framework/Ft_Esd_Theme.o ./FT_Esd_Framework/Ft_Esd_Timer.o ./FT_Esd_Framework/Ft_Esd_Timer__Generated.o ./FT_Esd_Framework/Ft_Esd_TouchArea.o ./FT_Esd_Framework/Ft_Esd_TouchArea__Generated.o ./FT_Esd_Framework/Ft_Esd_TouchScrollLogic.o ./FT_Esd_Framework/Ft_Esd_TouchScrollLogic__Generated.o ./FT_Esd_Framework/Ft_Esd_TouchTag.o ./FT_Esd_Framework/Ft_Esd_Widget.o ./FT_Esd_Framework/Ft_Esd_Widget_Utils.o   -lc -lg -lm -lstub -lft900
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/HelloWorld/AppScreen__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/HelloWorld/App__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/HelloWorld/MainPage__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Widgets/Simulation/Ft_Esd_Elements__h__Simulation.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Widgets/Ft_Esd_CheckBox__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Widgets/Ft_Esd_Circle_Raised__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Widgets/Ft_Esd_Circle_Sunken__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Widgets/Ft_Esd_Circle__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Widgets/Ft_Esd_Clock__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Widgets/Ft_Esd_ColorPicker__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Widgets/Ft_Esd_FixedPointNumericLabel__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Widgets/Ft_Esd_Gauge__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Widgets/Ft_Esd_Gradient__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Widgets/Ft_Esd_ImageButton__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Widgets/Ft_Esd_Image_Rotate__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Widgets/Ft_Esd_Image__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Widgets/Ft_Esd_IntCounter__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Widgets/Ft_Esd_LabelButton__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Widgets/Ft_Esd_Label__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Widgets/Ft_Esd_Line__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Widgets/Ft_Esd_NumericLabel__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Widgets/Ft_Esd_Panel_Color__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Widgets/Ft_Esd_Panel_Raised__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Widgets/Ft_Esd_Panel_Sunken__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Widgets/Ft_Esd_Panel__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Widgets/Ft_Esd_PosSizeToRadius__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Widgets/Ft_Esd_ProgressBar__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Widgets/Ft_Esd_PushButton__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Widgets/Ft_Esd_RadioButton__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Widgets/Ft_Esd_RadioGroup__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Widgets/Ft_Esd_Rectangle__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Widgets/Ft_Esd_ScrollBar__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Widgets/Ft_Esd_ScrollPanel__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Widgets/Ft_Esd_ScrollableImageWidget__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Widgets/Ft_Esd_Sketch__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Widgets/Ft_Esd_Slider__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Widgets/Ft_Esd_SpinBox__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Widgets/Ft_Esd_Theme_DarkOrange.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Widgets/Ft_Esd_Theme_LightBlue.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Widgets/Ft_Esd_Toggle__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Framework/Simulation/FT_Esd_Primitives__h__Simulation.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Framework/Simulation/Ft_Esd_CoCmd__h__Simulation.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Framework/Ft_Esd_Layout_Stretch__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Framework/Ft_Esd_RenderForwarder__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Framework/Ft_Esd_Timer__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Framework/Ft_Esd_TouchArea__Generated.o: No such file or directory
ft32-elf-gcc: error: ./Generated/ME812A\: No such file or directory
ft32-elf-gcc: error: WH50R/FT_Esd_Framework/Ft_Esd_TouchScrollLogic__Generated.o: No such file or directory
make: *** [HelloWorld.elf] Error 1

16:12:57 Build Finished (took 3s.587ms)


From Screen Designer I can actually compile and download it.
Now, I'm convinced, I really want to learn use the EVE without Screen Designer, is that possible?
Is there good documentation for that?
Regards,
Jack.

8
Hi,

How to I change the editor font within Screen Designer? I didn't find Preferences, yet.

Kind regards,
Jack.


9
Hi,
I tried to add a them naming it Ft_Esd_Theme_LightGreen.

First I tried to File ->  New -> Theme.
What gets created is different than the DarkOrange and LightBlue theme.
It is a .theme file. After making the color green, and modifying a button to use this color, the button remained orange.
Update: it needed to close and reopen the project to make that work.

I also tried to create themes the way DarkOrange and LightBlue are created.
So, I created Ft_Esd_Theme_LightGreen.c and Ft_Esd_Theme_LightGreen.h
Since Screen Designer doesn't show all project files and does not allow you to edit all your project files, I used an external editor to edit MainPage.h, to include the new theme.
For some reason, Screen Designer does not reload files that were edited externally, so it is best to close it first.
After restarting it, the new theme does not show up. I searched and checked all files, all seem updated accordingly.

How can I add working a theme?

Kind regards,
Jack.


10
I'm using EVE Screen Designer for ME813A-WH50C Display and MM900EV1A (FT9xx) MCU.
I have an ESD Image with name “ESD Image 4”.
In a button click event, I would like to change some properties (Width and Height).

I think I need to do something like this, however context could be wrong, both my button and image 4 disappear. What is the correct way of doing this?

ESD_METHOD(MainPage_ESD_Push_Button_3_Pushed, Context = MainPage)
void MainPage_ESD_Push_Button_3_Pushed(MainPage *context)
{
// Change “ESD Image 4””width and height
   Ft_Esd_Image *object = &context->ESD_Image_4;
   Ft_Esd_Image__Initializer(object);
   object->Owner = context;
   object->Widget.LocalWidth = 115;
   object->Widget.LocalHeight = 35;
}

Any help is much appreciated!

Regards from the Netherlands.

11
I would like to calibrate the touch screen once (via a setup menu function) and store calibration values, so they can be used at start-up, without the need to perform calibration at start-up.
Is it possible to skip or disable the touch screen calibration at startup?

Thank you very much for helping me out.

Regards from the Netherlands.

12
Hi,

The FT800 provides a PWM output to adjust the brightness of the display’s LED array.
I’m new to this platform, how do I control the backlight, say with a slider?

Thank you very much for helping me out.

Regards from the Netherlands.

13
Hi,
I'm using EVE Screen Designer for ME813A-WH50C Display and MM900EV1A (FT9xx) MCU.
In my project, I will mainly use bitmaps, buttons and label widgets on the display.

While this seems a great platform, I have difficulty to start my project, because the default screen orientation is landscape (horizontal) mode.
EVE Screen Designer shows 800 horizontal and 480 vertical resolution on AppScreen.page and FirstPage.page.

While using landscape mode seems most common, portrait (vertical) mode is highly preferred for my project.
How do I change the screen orientation from landscape to portrait mode?

Thank you very much for helping me out.

Regards from the Netherlands.

14
New Member Introductions / Hello from the Netherlands.
« on: June 13, 2018, 12:29:44 PM »
Hello,

I'm new here and since a few days using a ME812A-WH50R Display Module and FT90x board.
Now I'm learning how to work with Screen Designer 4.0.

Best Regards,
Jack.

Pages: [1]