Video image display and touch panel sample for GR-PEACH LCD Shield.

Information

Japanese version is available in lower part of this page.
このページの後半に日本語版が用意されています.

Information

This sample has multiple frame buffers so that the clock source can display different cameras and LCDs cleanly. If you are using the NTSC signal, the following sample is simpler.
このサンプルはクロック元が異なるカメラとLCDを綺麗に表示するために、複数のフレームバッファを持っています。NTSC信号を使用するのであれば、以下のサンプルの方が単純です。

https://developer.mbed.org/users/dkato/code/GR-PEACH_NTSC_in_2ch/

What is this ?

The basic function of the GR-PEACH LCD Shield can be tried by this sample.
Display the information of the touch panel on the camera image.
A character font is shown to the screen lower right every 1 second.

Touch panel information

The touch location of the blue and the 2nd point becomes pink in the 1st touch location in case of a multi-touch.
While touching the screen, a white square in the upper left corner of the screen will be displayed.
Touch information is being output in printf. When doing terminal designation, please set 230400 as a baud rate.

Composition

GR-PEACH, GR-PEACH 4.3 inch LCD Shield or GR-PEACH 7.1 inch LCD Shield, GR-PEACH AUDIO CAMERA Shield and Camera.
/media/uploads/dkato/gr-peach_with_camera_lcd.png

When using analog input for video input, GR-PEACH AUDIO CAMERA Shield and the camera are unnecessary.
(Setting the VIDEO_CVBS to VIDEO_INPUT_METHOD)
Please input analog signal to NTSC1A pin. (Even if there are no input signals, a touch panel can be operated.).
/media/uploads/dkato/video_display_analog.jpg

Video input of default is a digital input (Cmos Camera). When changing the video input, please change the below.

mbed_app.json

{
    "config": {
        "camera":{
            "help": "0:disable 1:enable",
            "value": "1"
        },
        "camera-type":{
            "help": "Please see README.md",
            "value": "CAMERA_CVBS"
        },
        "lcd":{
            "help": "0:disable 1:enable",
            "value": "1"
        },
        "lcd-type":{
            "help": "Please see README.md",
            "value": "GR_PEACH_4_3INCH_SHIELD"
        }
    }
}
camera-type "value"Description
CAMERA_CVBSGR-PEACH NTSC signal
CAMERA_MT9V111GR-PEACH MT9V111
CAMERA_OV7725GR-LYHCEE included camera
CAMERA_OV5642GR-PEACH OV5642
CAMERA_WIRELESS_CAMERAGR-PEACH Wireless/Camera shield (MT9V111)
lcd-type "value"Description
GR_PEACH_4_3INCH_SHIELDGR-PEACH 4.3 inch LCD shield
GR_PEACH_7_1INCH_SHIELDGR-PEACH 7.1 inch LCD shield
GR_PEACH_RSK_TFTGR-PEACH RSK board LCD
GR_PEACH_DISPLAY_SHIELDGR-PEACH Display Shield or DVi-Board
GR_LYCHEE_LCDGR-LYHCEE TF043HV001A0..etc(40pin)




概要

このサンプルではGR-PEACH LCD Shieldの基本的な機能を試せます。
カメラ画像の上にタッチパネルの情報を重ねて表示します。
文字フォントが右下に1秒毎に表示されます。

タッチパネルの情報

マルチタッチの場合は1点目のタッチ位置は青、2点目のタッチ位置はピンクになります。
画面がタッチされている間、画面左上に白い四角が表示されます。
printfでもタッチ情報を出力しています。ターミナル表示を行う際は、ボーレートに230400を設定してください。

構成

GR-PEACH、GR-PEACH 4.3 inch LCD Shield または GR-PEACH 7.1 inch LCD Shield、GR-PEACH AUDIO CAMERA Shield 、カメラ。
/media/uploads/dkato/gr-peach_with_camera_lcd.png

ビデオ入力にアナログ入力を使用する場合はGR-PEACH AUDIO CAMERA Shield とカメラは不要です。
(VIDEO_INPUT_METHOD にVIDEO_CVBS を設定)
NTSC1Aピンにアナログ信号を入力してください。(入力信号が無くてもタッチパネルは操作できます。)
/media/uploads/dkato/video_display_analog.jpg

デフォルトのビデオ入力はデジタル入力(Cmos Camera)です。ビデオ入力を変更する際は以下を変更してください。

mbed_app.json

{
    "config": {
        "camera":{
            "help": "0:disable 1:enable",
            "value": "1"
        },
        "camera-type":{
            "help": "Please see README.md",
            "value": "CAMERA_CVBS"
        },
        "lcd":{
            "help": "0:disable 1:enable",
            "value": "1"
        },
        "lcd-type":{
            "help": "Please see README.md",
            "value": "GR_PEACH_4_3INCH_SHIELD"
        }
    }
}
camera-type "value"Description
CAMERA_CVBSGR-PEACH NTSC signal
CAMERA_MT9V111GR-PEACH MT9V111
CAMERA_OV7725GR-LYHCEE included camera
CAMERA_OV5642GR-PEACH OV5642
CAMERA_WIRELESS_CAMERAGR-PEACH Wireless/Camera shield (MT9V111)
lcd-type "value"Description
GR_PEACH_4_3INCH_SHIELDGR-PEACH 4.3 inch LCD shield
GR_PEACH_7_1INCH_SHIELDGR-PEACH 7.1 inch LCD shield
GR_PEACH_RSK_TFTGR-PEACH RSK board LCD
GR_PEACH_DISPLAY_SHIELDGR-PEACH Display Shield or DVi-Board
GR_LYCHEE_LCDGR-LYHCEE TF043HV001A0..etc(40pin)
Committer:
dkato
Date:
Tue Jul 24 02:50:28 2018 +0000
Revision:
7:d782dce51ee6
Parent:
6:95b92f2035dc
Child:
8:5975dd9a8177
Supports mbed-os 5.9.1 and later

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dkato 0:b2184c2d15dd 1 #include "mbed.h"
dkato 7:d782dce51ee6 2 #include "dcache-control.h"
dkato 7:d782dce51ee6 3 #include "EasyAttach_CameraAndLCD.h"
dkato 4:bafd63604b7c 4 #include "AsciiFont.h"
dkato 0:b2184c2d15dd 5
dkato 0:b2184c2d15dd 6 /* Video input and LCD layer 0 output */
dkato 7:d782dce51ee6 7 #define DATA_SIZE_PER_PIC (2u)
dkato 0:b2184c2d15dd 8
dkato 0:b2184c2d15dd 9 /*! Frame buffer stride: Frame buffer stride should be set to a multiple of 32 or 128
dkato 0:b2184c2d15dd 10 in accordance with the frame buffer burst transfer mode. */
dkato 7:d782dce51ee6 11 #define VIDEO_PIXEL_HW LCD_PIXEL_WIDTH
dkato 7:d782dce51ee6 12 #define VIDEO_PIXEL_VW LCD_PIXEL_HEIGHT
dkato 7:d782dce51ee6 13 #if (MBED_CONF_APP_LCD_TYPE == GR_PEACH_4_3INCH_SHIELD)
dkato 7:d782dce51ee6 14 #define ASPECT_RATIO_16_9 (1)
dkato 0:b2184c2d15dd 15 #endif
dkato 0:b2184c2d15dd 16
dkato 7:d782dce51ee6 17 #define FRAME_BUFFER_STRIDE (((VIDEO_PIXEL_HW * DATA_SIZE_PER_PIC) + 31u) & ~31u)
dkato 7:d782dce51ee6 18 #define FRAME_BUFFER_HEIGHT (VIDEO_PIXEL_VW)
dkato 0:b2184c2d15dd 19
dkato 4:bafd63604b7c 20 /* STRING BUFFER Parameter GRAPHICS_LAYER_2 */
dkato 4:bafd63604b7c 21 #define STRING_PIXEL_HW (120)
dkato 4:bafd63604b7c 22 #define STRING_PIXEL_VM (24)
dkato 4:bafd63604b7c 23 #define STRING_BUFFER_BYTE_PER_PIXEL (2u)
dkato 4:bafd63604b7c 24 #define STRING_BUFFER_STRIDE (((LCD_PIXEL_WIDTH * STRING_BUFFER_BYTE_PER_PIXEL) + 31u) & ~31u)
dkato 4:bafd63604b7c 25
dkato 0:b2184c2d15dd 26 static DisplayBase Display;
dkato 0:b2184c2d15dd 27 static DigitalOut led_blue(LED_BLUE);
dkato 0:b2184c2d15dd 28
dkato 0:b2184c2d15dd 29 #if defined(__ICCARM__)
dkato 0:b2184c2d15dd 30 #pragma data_alignment=32
dkato 7:d782dce51ee6 31 static uint8_t user_frame_buffer0[FRAME_BUFFER_STRIDE * FRAME_BUFFER_HEIGHT]@ ".mirrorram";
dkato 4:bafd63604b7c 32 #pragma data_alignment=32
dkato 4:bafd63604b7c 33 static uint8_t user_frame_buffer_string[STRING_BUFFER_STRIDE * STRING_PIXEL_VM];
dkato 0:b2184c2d15dd 34 #else
dkato 7:d782dce51ee6 35 static uint8_t user_frame_buffer0[FRAME_BUFFER_STRIDE * FRAME_BUFFER_HEIGHT]__attribute((section("NC_BSS"),aligned(32)));
dkato 4:bafd63604b7c 36 static uint8_t user_frame_buffer_string[STRING_BUFFER_STRIDE * STRING_PIXEL_VM]__attribute((aligned(32)));
dkato 0:b2184c2d15dd 37 #endif
dkato 0:b2184c2d15dd 38
dkato 7:d782dce51ee6 39 #if defined(TouckKey_LCD_shield)
dkato 0:b2184c2d15dd 40
dkato 7:d782dce51ee6 41 /* TOUCH BUFFER Parameter GRAPHICS_LAYER_1 */
dkato 7:d782dce51ee6 42 #define TOUCH_BUFFER_BYTE_PER_PIXEL (2u)
dkato 7:d782dce51ee6 43 #define TOUCH_BUFFER_STRIDE (((LCD_PIXEL_WIDTH * TOUCH_BUFFER_BYTE_PER_PIXEL) + 31u) & ~31u)
dkato 0:b2184c2d15dd 44
dkato 7:d782dce51ee6 45 /* Touch panel parameter */
dkato 7:d782dce51ee6 46 #define TOUCH_NUM (2u)
dkato 7:d782dce51ee6 47 #define DRAW_POINT (8)
dkato 0:b2184c2d15dd 48
dkato 7:d782dce51ee6 49 static Semaphore sem_touch_int(0);
dkato 7:d782dce51ee6 50 #if defined(__ICCARM__)
dkato 7:d782dce51ee6 51 #pragma data_alignment=32
dkato 7:d782dce51ee6 52 static uint8_t user_frame_buffer_touch[TOUCH_BUFFER_STRIDE * LCD_PIXEL_HEIGHT];
dkato 0:b2184c2d15dd 53 #else
dkato 7:d782dce51ee6 54 static uint8_t user_frame_buffer_touch[TOUCH_BUFFER_STRIDE * LCD_PIXEL_HEIGHT]__attribute((aligned(32)));
dkato 0:b2184c2d15dd 55 #endif
dkato 0:b2184c2d15dd 56
dkato 6:95b92f2035dc 57 static void draw_touch_pos(uint8_t * p_buf, int id, int x, int y) {
dkato 0:b2184c2d15dd 58 int idx_base;
dkato 0:b2184c2d15dd 59 int wk_idx;
dkato 0:b2184c2d15dd 60 int i;
dkato 0:b2184c2d15dd 61 int j;
dkato 0:b2184c2d15dd 62 uint8_t coller_pix[TOUCH_BUFFER_BYTE_PER_PIXEL]; /* ARGB4444 */
dkato 0:b2184c2d15dd 63
dkato 0:b2184c2d15dd 64 /* A coordinate in the upper left is calculated from a central coordinate. */
dkato 6:95b92f2035dc 65 if ((x - (DRAW_POINT / 2)) >= 0) {
dkato 6:95b92f2035dc 66 x -= (DRAW_POINT / 2);
dkato 0:b2184c2d15dd 67 }
dkato 7:d782dce51ee6 68 if (x > ((int)LCD_PIXEL_WIDTH - DRAW_POINT)) {
dkato 7:d782dce51ee6 69 x = ((int)LCD_PIXEL_WIDTH - DRAW_POINT);
dkato 0:b2184c2d15dd 70 }
dkato 6:95b92f2035dc 71 if ((y - (DRAW_POINT / 2)) >= 0) {
dkato 6:95b92f2035dc 72 y -= (DRAW_POINT / 2);
dkato 0:b2184c2d15dd 73 }
dkato 7:d782dce51ee6 74 if (y > ((int)LCD_PIXEL_HEIGHT - DRAW_POINT)) {
dkato 7:d782dce51ee6 75 y = ((int)LCD_PIXEL_HEIGHT - DRAW_POINT);
dkato 0:b2184c2d15dd 76 }
dkato 7:d782dce51ee6 77 idx_base = (x + ((int)LCD_PIXEL_WIDTH * y)) * TOUCH_BUFFER_BYTE_PER_PIXEL;
dkato 0:b2184c2d15dd 78
dkato 0:b2184c2d15dd 79 /* Select color */
dkato 0:b2184c2d15dd 80 if (id == 0) {
dkato 0:b2184c2d15dd 81 /* Blue */
dkato 0:b2184c2d15dd 82 coller_pix[0] = 0x0F; /* 4:Green 4:Blue */
dkato 0:b2184c2d15dd 83 coller_pix[1] = 0xF0; /* 4:Alpha 4:Red */
dkato 0:b2184c2d15dd 84 } else {
dkato 0:b2184c2d15dd 85 /* Pink */
dkato 0:b2184c2d15dd 86 coller_pix[0] = 0x07; /* 4:Green 4:Blue */
dkato 0:b2184c2d15dd 87 coller_pix[1] = 0xFF; /* 4:Alpha 4:Red */
dkato 0:b2184c2d15dd 88 }
dkato 0:b2184c2d15dd 89
dkato 0:b2184c2d15dd 90 /* Drawing */
dkato 6:95b92f2035dc 91 for (i = 0; i < DRAW_POINT; i++) {
dkato 7:d782dce51ee6 92 wk_idx = idx_base + ((int)LCD_PIXEL_WIDTH * TOUCH_BUFFER_BYTE_PER_PIXEL * i);
dkato 6:95b92f2035dc 93 for (j = 0; j < DRAW_POINT; j++) {
dkato 0:b2184c2d15dd 94 p_buf[wk_idx++] = coller_pix[0];
dkato 0:b2184c2d15dd 95 p_buf[wk_idx++] = coller_pix[1];
dkato 0:b2184c2d15dd 96 }
dkato 0:b2184c2d15dd 97 }
dkato 0:b2184c2d15dd 98 }
dkato 0:b2184c2d15dd 99
dkato 0:b2184c2d15dd 100 static void touch_int_callback(void) {
dkato 0:b2184c2d15dd 101 sem_touch_int.release();
dkato 0:b2184c2d15dd 102 }
dkato 0:b2184c2d15dd 103
dkato 2:8721836b639d 104 static void touch_task(void) {
dkato 0:b2184c2d15dd 105 DisplayBase::rect_t rect;
dkato 0:b2184c2d15dd 106 TouchKey::touch_pos_t touch_pos[TOUCH_NUM];
dkato 0:b2184c2d15dd 107 int touch_num = 0;
dkato 0:b2184c2d15dd 108 int touch_num_last = 0;
dkato 7:d782dce51ee6 109 uint32_t i;
dkato 7:d782dce51ee6 110 TouckKey_LCD_shield touch(P4_0, P2_13, I2C_SDA, I2C_SCL);
dkato 0:b2184c2d15dd 111
dkato 0:b2184c2d15dd 112 /* The layer by which the touch panel location is drawn */
dkato 0:b2184c2d15dd 113 memset(user_frame_buffer_touch, 0, sizeof(user_frame_buffer_touch));
dkato 0:b2184c2d15dd 114 dcache_clean(user_frame_buffer_touch, sizeof(user_frame_buffer_touch));
dkato 0:b2184c2d15dd 115 rect.vs = 0;
dkato 0:b2184c2d15dd 116 rect.vw = LCD_PIXEL_HEIGHT;
dkato 0:b2184c2d15dd 117 rect.hs = 0;
dkato 0:b2184c2d15dd 118 rect.hw = LCD_PIXEL_WIDTH;
dkato 0:b2184c2d15dd 119 Display.Graphics_Read_Setting(
dkato 0:b2184c2d15dd 120 DisplayBase::GRAPHICS_LAYER_1,
dkato 0:b2184c2d15dd 121 (void *)user_frame_buffer_touch,
dkato 0:b2184c2d15dd 122 TOUCH_BUFFER_STRIDE,
dkato 0:b2184c2d15dd 123 DisplayBase::GRAPHICS_FORMAT_ARGB4444,
dkato 0:b2184c2d15dd 124 DisplayBase::WR_RD_WRSWA_32_16BIT,
dkato 0:b2184c2d15dd 125 &rect
dkato 0:b2184c2d15dd 126 );
dkato 0:b2184c2d15dd 127 Display.Graphics_Start(DisplayBase::GRAPHICS_LAYER_1);
dkato 0:b2184c2d15dd 128
dkato 0:b2184c2d15dd 129 /* Callback setting */
dkato 0:b2184c2d15dd 130 touch.SetCallback(&touch_int_callback);
dkato 0:b2184c2d15dd 131
dkato 0:b2184c2d15dd 132 /* Reset touch IC */
dkato 0:b2184c2d15dd 133 touch.Reset();
dkato 0:b2184c2d15dd 134
dkato 0:b2184c2d15dd 135 while (1) {
dkato 0:b2184c2d15dd 136 /* Wait touch event */
dkato 0:b2184c2d15dd 137 sem_touch_int.wait();
dkato 0:b2184c2d15dd 138
dkato 0:b2184c2d15dd 139 /* Get touch coordinates */
dkato 0:b2184c2d15dd 140 touch_num = touch.GetCoordinates(TOUCH_NUM, touch_pos);
dkato 0:b2184c2d15dd 141
dkato 0:b2184c2d15dd 142 /* When it's a new touch, touch frame buffer is initialized */
dkato 0:b2184c2d15dd 143 if ((touch_num != 0) && (touch_num_last == 0)) {
dkato 0:b2184c2d15dd 144 memset(user_frame_buffer_touch, 0, sizeof(user_frame_buffer_touch));
dkato 0:b2184c2d15dd 145 }
dkato 0:b2184c2d15dd 146 touch_num_last = touch_num;
dkato 0:b2184c2d15dd 147
dkato 0:b2184c2d15dd 148 /* Drawing of a touch coordinate */
dkato 0:b2184c2d15dd 149 for (i = 0; i < TOUCH_NUM; i ++) {
dkato 7:d782dce51ee6 150 printf("{valid=%d,x=%lu,y=%lu} ", touch_pos[i].valid, touch_pos[i].x, touch_pos[i].y);
dkato 0:b2184c2d15dd 151 if (touch_pos[i].valid) {
dkato 6:95b92f2035dc 152 draw_touch_pos(user_frame_buffer_touch, i, touch_pos[i].x, touch_pos[i].y);
dkato 0:b2184c2d15dd 153 }
dkato 0:b2184c2d15dd 154 }
dkato 7:d782dce51ee6 155 printf("\r\n");
dkato 0:b2184c2d15dd 156
dkato 0:b2184c2d15dd 157 /* Data cache clean */
dkato 0:b2184c2d15dd 158 dcache_clean(user_frame_buffer_touch, sizeof(user_frame_buffer_touch));
dkato 0:b2184c2d15dd 159 }
dkato 0:b2184c2d15dd 160 }
dkato 7:d782dce51ee6 161 #endif // TouckKey_LCD_shield
dkato 0:b2184c2d15dd 162
dkato 7:d782dce51ee6 163 static void string_task(void) {
dkato 4:bafd63604b7c 164 DisplayBase::rect_t rect;
dkato 4:bafd63604b7c 165 char test_cnt = 0x20;
dkato 4:bafd63604b7c 166
dkato 5:4e96673f4830 167 /* The layer by which the character string is drawn */
dkato 4:bafd63604b7c 168 memset(user_frame_buffer_string, 0, sizeof(user_frame_buffer_string));
dkato 4:bafd63604b7c 169 dcache_clean(user_frame_buffer_string, sizeof(user_frame_buffer_string));
dkato 7:d782dce51ee6 170
dkato 4:bafd63604b7c 171 rect.vs = LCD_PIXEL_HEIGHT - STRING_PIXEL_VM - 10;
dkato 4:bafd63604b7c 172 rect.vw = STRING_PIXEL_VM;
dkato 4:bafd63604b7c 173 rect.hs = LCD_PIXEL_WIDTH - STRING_PIXEL_HW - 10;
dkato 4:bafd63604b7c 174 rect.hw = STRING_PIXEL_HW;
dkato 4:bafd63604b7c 175 Display.Graphics_Read_Setting(
dkato 4:bafd63604b7c 176 DisplayBase::GRAPHICS_LAYER_2,
dkato 4:bafd63604b7c 177 (void *)user_frame_buffer_string,
dkato 4:bafd63604b7c 178 STRING_BUFFER_STRIDE,
dkato 4:bafd63604b7c 179 DisplayBase::GRAPHICS_FORMAT_ARGB4444,
dkato 4:bafd63604b7c 180 DisplayBase::WR_RD_WRSWA_32_16BIT,
dkato 4:bafd63604b7c 181 &rect
dkato 4:bafd63604b7c 182 );
dkato 4:bafd63604b7c 183 Display.Graphics_Start(DisplayBase::GRAPHICS_LAYER_2);
dkato 4:bafd63604b7c 184
dkato 4:bafd63604b7c 185 /* String */
dkato 4:bafd63604b7c 186 AsciiFont ascii_font(user_frame_buffer_string, STRING_PIXEL_HW, STRING_PIXEL_VM,
dkato 4:bafd63604b7c 187 STRING_BUFFER_STRIDE, STRING_BUFFER_BYTE_PER_PIXEL);
dkato 5:4e96673f4830 188 ascii_font.DrawStr("Font:", 0, 8, 0x0000ffff, 2);
dkato 7:d782dce51ee6 189
dkato 0:b2184c2d15dd 190 while (1) {
dkato 0:b2184c2d15dd 191 led_blue = !led_blue;
dkato 4:bafd63604b7c 192 //colour: rrrrGBAR (r:Reserve G:Green B:Blue A:Alpha R:Red
dkato 4:bafd63604b7c 193 ascii_font.DrawChar(test_cnt, 84, 0, 0x0000aa9f, 3);
dkato 4:bafd63604b7c 194 if (test_cnt < 0x7e) {
dkato 4:bafd63604b7c 195 test_cnt++;
dkato 4:bafd63604b7c 196 } else {
dkato 4:bafd63604b7c 197 test_cnt = 0x20;
dkato 4:bafd63604b7c 198 }
dkato 4:bafd63604b7c 199 dcache_clean(user_frame_buffer_string, sizeof(user_frame_buffer_string));
dkato 0:b2184c2d15dd 200 Thread::wait(1000);
dkato 0:b2184c2d15dd 201 }
dkato 0:b2184c2d15dd 202 }
dkato 7:d782dce51ee6 203
dkato 7:d782dce51ee6 204 static void Start_Video_Camera(void) {
dkato 7:d782dce51ee6 205 // Video capture setting (progressive form fixed)
dkato 7:d782dce51ee6 206 Display.Video_Write_Setting(
dkato 7:d782dce51ee6 207 DisplayBase::VIDEO_INPUT_CHANNEL_0,
dkato 7:d782dce51ee6 208 DisplayBase::COL_SYS_NTSC_358,
dkato 7:d782dce51ee6 209 (void *)user_frame_buffer0,
dkato 7:d782dce51ee6 210 FRAME_BUFFER_STRIDE,
dkato 7:d782dce51ee6 211 DisplayBase::VIDEO_FORMAT_YCBCR422,
dkato 7:d782dce51ee6 212 DisplayBase::WR_RD_WRSWA_32_16BIT,
dkato 7:d782dce51ee6 213 VIDEO_PIXEL_VW,
dkato 7:d782dce51ee6 214 VIDEO_PIXEL_HW
dkato 7:d782dce51ee6 215 );
dkato 7:d782dce51ee6 216 EasyAttach_CameraStart(Display, DisplayBase::VIDEO_INPUT_CHANNEL_0);
dkato 7:d782dce51ee6 217 }
dkato 7:d782dce51ee6 218
dkato 7:d782dce51ee6 219 static void Start_LCD_Display(void) {
dkato 7:d782dce51ee6 220 DisplayBase::rect_t rect;
dkato 7:d782dce51ee6 221
dkato 7:d782dce51ee6 222 rect.vs = 0;
dkato 7:d782dce51ee6 223 rect.vw = LCD_PIXEL_HEIGHT;
dkato 7:d782dce51ee6 224 rect.hs = 0;
dkato 7:d782dce51ee6 225 rect.hw = LCD_PIXEL_WIDTH;
dkato 7:d782dce51ee6 226 Display.Graphics_Read_Setting(
dkato 7:d782dce51ee6 227 DisplayBase::GRAPHICS_LAYER_0,
dkato 7:d782dce51ee6 228 (void *)user_frame_buffer0,
dkato 7:d782dce51ee6 229 FRAME_BUFFER_STRIDE,
dkato 7:d782dce51ee6 230 DisplayBase::GRAPHICS_FORMAT_YCBCR422,
dkato 7:d782dce51ee6 231 DisplayBase::WR_RD_WRSWA_32_16BIT,
dkato 7:d782dce51ee6 232 &rect
dkato 7:d782dce51ee6 233 );
dkato 7:d782dce51ee6 234 Display.Graphics_Start(DisplayBase::GRAPHICS_LAYER_0);
dkato 7:d782dce51ee6 235
dkato 7:d782dce51ee6 236 Thread::wait(50);
dkato 7:d782dce51ee6 237 EasyAttach_LcdBacklight(true);
dkato 7:d782dce51ee6 238 }
dkato 7:d782dce51ee6 239
dkato 7:d782dce51ee6 240 int main(void) {
dkato 7:d782dce51ee6 241 // Initialize the background to black
dkato 7:d782dce51ee6 242 for (uint32_t i = 0; i < sizeof(user_frame_buffer0); i += 2) {
dkato 7:d782dce51ee6 243 user_frame_buffer0[i + 0] = 0x00;
dkato 7:d782dce51ee6 244 user_frame_buffer0[i + 1] = 0x80;
dkato 7:d782dce51ee6 245 }
dkato 7:d782dce51ee6 246
dkato 7:d782dce51ee6 247 #if ASPECT_RATIO_16_9
dkato 7:d782dce51ee6 248 EasyAttach_Init(Display, 640, 360); //aspect ratio 16:9
dkato 7:d782dce51ee6 249 #else
dkato 7:d782dce51ee6 250 EasyAttach_Init(Display); //aspect ratio 4:3
dkato 7:d782dce51ee6 251 #endif
dkato 7:d782dce51ee6 252 Start_Video_Camera();
dkato 7:d782dce51ee6 253 Start_LCD_Display();
dkato 7:d782dce51ee6 254
dkato 7:d782dce51ee6 255 /* Start touch panel processing */
dkato 7:d782dce51ee6 256 #if defined(TouckKey_LCD_shield)
dkato 7:d782dce51ee6 257 Thread touchTask;
dkato 7:d782dce51ee6 258 touchTask.start(callback(touch_task));
dkato 7:d782dce51ee6 259 #endif // TouckKey_LCD_shield
dkato 7:d782dce51ee6 260
dkato 7:d782dce51ee6 261 /* Start string disp processing */
dkato 7:d782dce51ee6 262 Thread stringTask;
dkato 7:d782dce51ee6 263 stringTask.start(callback(string_task));
dkato 7:d782dce51ee6 264 stringTask.join();
dkato 7:d782dce51ee6 265 }