Plays MJPEG Video using the RGA. THe RGA allows resize of the JPEG file.

Dependencies:   GR-PEACH_video GraphicsFramework LCD_shield_config R_BSP SDBlockDevice_GR_PEACH TLV320_RBSP USBHost_custom

Fork of RGA_HelloWorld by Renesas

Overview

This demo shows how play a MJPEG and WAV file video using the RZA1 hardware RGA, JCU and SSIF. The JCU decodes each MJPEG frame. The SSIF plays the raw WAV file, and the RGA supplies the GUI and resize of the JPEG image.

MJPEG Creation

Requirements

Python Script

SD Card

  • Rename the jpg file to Renesas.jpg and audio file Renesas.wav
  • Download this image file and rename is Background.jpg /media/uploads/zkimike/background.jpg
Committer:
zkimike
Date:
Fri Jan 05 22:41:01 2018 +0000
Revision:
12:9a413bec6673
Parent:
7:8fd684e60d66
Child:
13:0a5bd13f6e7f
Added MJPEG video.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
1050186 0:84e4649e7707 1 /*
1050186 0:84e4649e7707 2 Permission is hereby granted, free of charge, to any person obtaining a copy
1050186 0:84e4649e7707 3 of this software and associated documentation files (the "Software"), to deal
1050186 0:84e4649e7707 4 in the Software without restriction, including without limitation the rights
1050186 0:84e4649e7707 5 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
1050186 0:84e4649e7707 6 copies of the Software, and to permit persons to whom the Software is
1050186 0:84e4649e7707 7 furnished to do so, subject to the following conditions:
1050186 0:84e4649e7707 8
1050186 0:84e4649e7707 9 The above copyright notice and this permission notice shall be included in
1050186 0:84e4649e7707 10 all copies or substantial portions of the Software.
1050186 0:84e4649e7707 11
1050186 0:84e4649e7707 12 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1050186 0:84e4649e7707 13 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1050186 0:84e4649e7707 14 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
1050186 0:84e4649e7707 15 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1050186 0:84e4649e7707 16 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
1050186 0:84e4649e7707 17 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
1050186 0:84e4649e7707 18 THE SOFTWARE.
1050186 0:84e4649e7707 19 */
dkato 2:c7faef0ef374 20
1050186 0:84e4649e7707 21 #include "mbed.h"
1050186 0:84e4649e7707 22 #include "rga_func.h"
1050186 0:84e4649e7707 23 #include "DisplayBace.h"
1050186 0:84e4649e7707 24 #include "rtos.h"
zkimike 12:9a413bec6673 25 #include "TLV320_RBSP.h"
dkato 4:ce438477eddb 26 #include "LCD_shield_config_7_1inch.h"
zkimike 12:9a413bec6673 27 #include "FATFileSystem.h"
zkimike 12:9a413bec6673 28 #include "SDBlockDevice_GR_PEACH.h"
zkimike 12:9a413bec6673 29 #include "USBHostMSD.h"
zkimike 12:9a413bec6673 30 #include "dec_wav.h"
1050186 0:84e4649e7707 31
dkato 4:ce438477eddb 32 #define GRAPHICS_FORMAT (DisplayBase::GRAPHICS_FORMAT_RGB565)
dkato 4:ce438477eddb 33 #define WR_RD_WRSWA (DisplayBase::WR_RD_WRSWA_32_16BIT)
dkato 4:ce438477eddb 34 #define TOUCH_NUM (1u)
1050186 0:84e4649e7707 35
1050186 0:84e4649e7707 36 /* FRAME BUFFER Parameter */
dkato 2:c7faef0ef374 37 #define FRAME_BUFFER_BYTE_PER_PIXEL (2)
1050186 0:84e4649e7707 38 #define FRAME_BUFFER_STRIDE (((LCD_PIXEL_WIDTH * FRAME_BUFFER_BYTE_PER_PIXEL) + 31u) & ~31u)
1050186 0:84e4649e7707 39
dkato 2:c7faef0ef374 40 #define DRAW_RECTANGLE_CNT_MAX (4)
dkato 2:c7faef0ef374 41
zkimike 12:9a413bec6673 42 #define FILE_NAME_LEN (64)
zkimike 12:9a413bec6673 43 #define FLD_PATH "/usb/"
zkimike 12:9a413bec6673 44 #define TEXT_SIZE (64 + 1) //null-terminated
zkimike 12:9a413bec6673 45
zkimike 12:9a413bec6673 46 #define MJPEG_DIV 2
zkimike 12:9a413bec6673 47 #define AUDIO_WRITE_BUFF_SIZE (7056 * MJPEG_DIV)
zkimike 12:9a413bec6673 48 #define AUDIO_WRITE_BUFF_NUM (9)
zkimike 12:9a413bec6673 49
zkimike 12:9a413bec6673 50 // Testing
zkimike 12:9a413bec6673 51 DigitalOut TestPin0(D0); // Video File Read
zkimike 12:9a413bec6673 52 DigitalOut TestPin1(D1); // Audio File Read
zkimike 12:9a413bec6673 53 DigitalOut TestPin2(D6); // Update Display
zkimike 12:9a413bec6673 54 DigitalOut TestPin3(D7); // Sync
zkimike 12:9a413bec6673 55
1050186 0:84e4649e7707 56 typedef enum {
dkato 2:c7faef0ef374 57 RGA_FUNC_NON,
dkato 2:c7faef0ef374 58 RGA_FUNC_DRAW_RECTANGLE,
1050186 0:84e4649e7707 59 RGA_FUNC_DRAW_IMAGE,
zkimike 12:9a413bec6673 60 RGA_FUNC_VIDEO_PLAYER,
zkimike 12:9a413bec6673 61 RGA_FUNC_VIDEO_PLAY,
zkimike 12:9a413bec6673 62 RGA_FUNC_VIDEO_STOP,
zkimike 12:9a413bec6673 63 RGA_FUNC_VIDEO_FWD,
zkimike 12:9a413bec6673 64 RGA_FUNC_VIDEO_REV,
1050186 0:84e4649e7707 65 RGA_FUNC_DISSOLVE,
1050186 0:84e4649e7707 66 RGA_FUNC_SCROLL,
1050186 0:84e4649e7707 67 RGA_FUNC_ZOOM,
1050186 0:84e4649e7707 68 RGA_FUNC_ROTATION,
1050186 0:84e4649e7707 69 RGA_FUNC_ACCELERATE,
dkato 2:c7faef0ef374 70 RGA_FUNC_ANIME_EASE,
dkato 2:c7faef0ef374 71 RGA_FUNC_ANIME_LINEAR,
dkato 2:c7faef0ef374 72 RGA_FUNC_ANIME_EASE_IN,
dkato 2:c7faef0ef374 73 RGA_FUNC_ANIME_EASE_OUT,
dkato 2:c7faef0ef374 74 RGA_FUNC_ANIME_EASE_IN_OUT,
dkato 2:c7faef0ef374 75 RGA_FUNC_RETURN,
dkato 2:c7faef0ef374 76 RGA_FUNC_END
dkato 4:ce438477eddb 77 } func_code_t;
1050186 0:84e4649e7707 78
1050186 0:84e4649e7707 79 DigitalOut lcd_pwon(P7_15);
1050186 0:84e4649e7707 80 DigitalOut lcd_blon(P8_1);
1050186 0:84e4649e7707 81 PwmOut lcd_cntrst(P8_15);
1050186 0:84e4649e7707 82 DisplayBase Display;
1050186 0:84e4649e7707 83
1050186 0:84e4649e7707 84 typedef struct {
1050186 0:84e4649e7707 85 uint32_t pic_pos_x; /* X position of the key picture. */
1050186 0:84e4649e7707 86 uint32_t pic_pos_y; /* Y position of the key picture. */
1050186 0:84e4649e7707 87 uint32_t pic_width; /* Width of the key picture. */
1050186 0:84e4649e7707 88 uint32_t pic_height; /* Height of the key picture. */
1050186 0:84e4649e7707 89 func_code_t func_code; /* func code of the key picture. */
1050186 0:84e4649e7707 90 } key_pic_info_t;
1050186 0:84e4649e7707 91
dkato 4:ce438477eddb 92 #if defined(__ICCARM__)
dkato 4:ce438477eddb 93 #pragma data_alignment=32
dkato 4:ce438477eddb 94 static uint8_t user_frame_buffer1[FRAME_BUFFER_STRIDE * LCD_PIXEL_HEIGHT];
1050186 7:8fd684e60d66 95 #pragma data_alignment=32
dkato 4:ce438477eddb 96 static uint8_t user_frame_buffer2[FRAME_BUFFER_STRIDE * LCD_PIXEL_HEIGHT];
dkato 4:ce438477eddb 97 #else
dkato 4:ce438477eddb 98 static uint8_t user_frame_buffer1[FRAME_BUFFER_STRIDE * LCD_PIXEL_HEIGHT]__attribute((aligned(32))); /* 32 bytes aligned */
dkato 2:c7faef0ef374 99 static uint8_t user_frame_buffer2[FRAME_BUFFER_STRIDE * LCD_PIXEL_HEIGHT]__attribute((aligned(32))); /* 32 bytes aligned */
zkimike 12:9a413bec6673 100 static uint8_t jpeg_frame_buffer1[FRAME_BUFFER_STRIDE * LCD_PIXEL_HEIGHT]__attribute((aligned(32))); /* 32 bytes aligned */
zkimike 12:9a413bec6673 101 static uint8_t jpeg_frame_buffer2[FRAME_BUFFER_STRIDE * LCD_PIXEL_HEIGHT]__attribute((aligned(32))); /* 32 bytes aligned */
zkimike 12:9a413bec6673 102 static uint8_t audio_write_buff[AUDIO_WRITE_BUFF_NUM][AUDIO_WRITE_BUFF_SIZE] __attribute((section("NC_BSS"),aligned(4)));
dkato 4:ce438477eddb 103 #endif
1050186 0:84e4649e7707 104 static frame_buffer_t frame_buffer_info;
1050186 0:84e4649e7707 105 static volatile int32_t vsync_count = 0;
1050186 0:84e4649e7707 106
zkimike 12:9a413bec6673 107 // Audio Tag buffers
zkimike 12:9a413bec6673 108 static uint8_t title_buf[TEXT_SIZE];
zkimike 12:9a413bec6673 109 static uint8_t artist_buf[TEXT_SIZE];
zkimike 12:9a413bec6673 110 static uint8_t album_buf[TEXT_SIZE];
zkimike 12:9a413bec6673 111
dkato 2:c7faef0ef374 112 static const key_pic_info_t top_screen_key_tbl[] = {
dkato 2:c7faef0ef374 113 /* X Y Width Height Func code */
dkato 2:c7faef0ef374 114 { 50, 350, 120, 52, RGA_FUNC_DRAW_RECTANGLE }, /* RGA Func1 */
zkimike 12:9a413bec6673 115 { 230, 350, 120, 52, RGA_FUNC_VIDEO_PLAYER }, /* RGA Func2 */
dkato 2:c7faef0ef374 116 { 410, 350, 120, 52, RGA_FUNC_DISSOLVE }, /* RGA Func3 */
dkato 2:c7faef0ef374 117 { 50, 420, 120, 52, RGA_FUNC_SCROLL }, /* RGA Func4 */
dkato 2:c7faef0ef374 118 { 230, 420, 120, 52, RGA_FUNC_ZOOM }, /* RGA Func5 */
dkato 2:c7faef0ef374 119 { 410, 420, 120, 52, RGA_FUNC_ROTATION }, /* RGA Func6 */
dkato 2:c7faef0ef374 120 { 615, 420, 120, 52, RGA_FUNC_ACCELERATE }, /* RGA Func7 */
dkato 2:c7faef0ef374 121 { 0, 0, 0, 0, RGA_FUNC_END } /* table end */
dkato 2:c7faef0ef374 122 };
dkato 2:c7faef0ef374 123
dkato 2:c7faef0ef374 124 static const key_pic_info_t return_key_tbl[] = {
dkato 2:c7faef0ef374 125 /* X Y Width Height Func code */
dkato 2:c7faef0ef374 126 { 640, 10, 150, 84, RGA_FUNC_RETURN }, /* Return Top Screen */
dkato 2:c7faef0ef374 127 { 0, 0, 0, 0, RGA_FUNC_END } /* table end */
dkato 2:c7faef0ef374 128 };
dkato 2:c7faef0ef374 129
dkato 2:c7faef0ef374 130 static const key_pic_info_t animetion_timing_key_tbl[] = {
dkato 2:c7faef0ef374 131 /* X Y Width Height Func code */
dkato 2:c7faef0ef374 132 { 640, 10, 150, 84, RGA_FUNC_RETURN }, /* Return Top Screen */
dkato 2:c7faef0ef374 133 { 17, 372, 136, 50, RGA_FUNC_ANIME_EASE }, /* ease */
dkato 2:c7faef0ef374 134 { 173, 372, 136, 50, RGA_FUNC_ANIME_LINEAR }, /* linear */
dkato 2:c7faef0ef374 135 { 330, 372, 136, 50, RGA_FUNC_ANIME_EASE_IN }, /* ease-in */
dkato 2:c7faef0ef374 136 { 487, 372, 136, 50, RGA_FUNC_ANIME_EASE_OUT }, /* ease-out */
dkato 2:c7faef0ef374 137 { 644, 372, 136, 50, RGA_FUNC_ANIME_EASE_IN_OUT }, /* ease-in-out */
dkato 2:c7faef0ef374 138 { 0, 0, 0, 0, RGA_FUNC_END } /* table end */
1050186 0:84e4649e7707 139 };
1050186 0:84e4649e7707 140
zkimike 12:9a413bec6673 141 static const key_pic_info_t video_screen_key_tbl[] = {
zkimike 12:9a413bec6673 142 /* X Y Width Height Func code */
zkimike 12:9a413bec6673 143 { 640, 10, 150, 84, RGA_FUNC_RETURN }, /* Return Top Screen */
zkimike 12:9a413bec6673 144 { 545, 55, 192, 64, RGA_FUNC_VIDEO_PLAY }, /* Video Play */
zkimike 12:9a413bec6673 145 { 545, 138, 192, 64, RGA_FUNC_VIDEO_STOP }, /* Video Stop */
zkimike 12:9a413bec6673 146 { 654, 241, 89, 60, RGA_FUNC_VIDEO_FWD }, /* Video Forward */
zkimike 12:9a413bec6673 147 { 545, 241, 89, 60, RGA_FUNC_VIDEO_REV } /* Video Reverse */
zkimike 12:9a413bec6673 148 };
zkimike 12:9a413bec6673 149 TLV320_RBSP audio(P10_13, I2C_SDA, I2C_SCL, P4_4, P4_5, P4_7, P4_6,
zkimike 12:9a413bec6673 150 0x80, (AUDIO_WRITE_BUFF_NUM - 1), 0);
zkimike 12:9a413bec6673 151
dkato 4:ce438477eddb 152 /****** LCD ******/
dkato 4:ce438477eddb 153 static void IntCallbackFunc_LoVsync(DisplayBase::int_type_t int_type) {
1050186 0:84e4649e7707 154 /* Interrupt callback function for Vsync interruption */
1050186 0:84e4649e7707 155 if (vsync_count > 0) {
1050186 0:84e4649e7707 156 vsync_count--;
1050186 0:84e4649e7707 157 }
1050186 0:84e4649e7707 158 }
1050186 0:84e4649e7707 159
1050186 0:84e4649e7707 160 static void Wait_Vsync(const int32_t wait_count) {
1050186 0:84e4649e7707 161 /* Wait for the specified number of times Vsync occurs */
1050186 0:84e4649e7707 162 vsync_count = wait_count;
1050186 0:84e4649e7707 163 while (vsync_count > 0) {
1050186 0:84e4649e7707 164 /* Do nothing */
1050186 0:84e4649e7707 165 }
1050186 0:84e4649e7707 166 }
1050186 0:84e4649e7707 167
dkato 4:ce438477eddb 168 static void Init_LCD_Display(void) {
1050186 0:84e4649e7707 169 DisplayBase::graphics_error_t error;
1050186 0:84e4649e7707 170 DisplayBase::lcd_config_t lcd_config;
1050186 0:84e4649e7707 171 PinName lvds_pin[8] = {
1050186 0:84e4649e7707 172 /* data pin */
1050186 0:84e4649e7707 173 P5_7, P5_6, P5_5, P5_4, P5_3, P5_2, P5_1, P5_0
1050186 0:84e4649e7707 174 };
1050186 0:84e4649e7707 175
1050186 0:84e4649e7707 176 lcd_pwon = 0;
1050186 0:84e4649e7707 177 lcd_blon = 0;
1050186 0:84e4649e7707 178 Thread::wait(100);
1050186 0:84e4649e7707 179 lcd_pwon = 1;
1050186 0:84e4649e7707 180 lcd_blon = 1;
1050186 0:84e4649e7707 181
dkato 4:ce438477eddb 182 Display.Graphics_Lvds_Port_Init(lvds_pin, 8);
1050186 0:84e4649e7707 183
1050186 0:84e4649e7707 184 /* Graphics initialization process */
dkato 4:ce438477eddb 185 lcd_config = LcdCfgTbl_LCD_shield;
1050186 0:84e4649e7707 186 error = Display.Graphics_init(&lcd_config);
1050186 0:84e4649e7707 187 if (error != DisplayBase::GRAPHICS_OK) {
1050186 0:84e4649e7707 188 printf("Line %d, error %d\n", __LINE__, error);
dkato 4:ce438477eddb 189 mbed_die();
1050186 0:84e4649e7707 190 }
1050186 0:84e4649e7707 191
1050186 0:84e4649e7707 192 /* Interrupt callback function setting (Vsync signal output from scaler 0) */
dkato 4:ce438477eddb 193 error = Display.Graphics_Irq_Handler_Set(DisplayBase::INT_TYPE_S0_LO_VSYNC, 0, IntCallbackFunc_LoVsync);
1050186 0:84e4649e7707 194 if (error != DisplayBase::GRAPHICS_OK) {
1050186 0:84e4649e7707 195 printf("Line %d, error %d\n", __LINE__, error);
dkato 4:ce438477eddb 196 mbed_die();
1050186 0:84e4649e7707 197 }
dkato 4:ce438477eddb 198 }
1050186 0:84e4649e7707 199
dkato 4:ce438477eddb 200 static void Start_LCD_Display(uint8_t * p_buf) {
dkato 4:ce438477eddb 201 DisplayBase::rect_t rect;
dkato 4:ce438477eddb 202
1050186 0:84e4649e7707 203 rect.vs = 0;
1050186 0:84e4649e7707 204 rect.vw = LCD_PIXEL_HEIGHT;
1050186 0:84e4649e7707 205 rect.hs = 0;
1050186 0:84e4649e7707 206 rect.hw = LCD_PIXEL_WIDTH;
1050186 0:84e4649e7707 207 Display.Graphics_Read_Setting(
1050186 0:84e4649e7707 208 DisplayBase::GRAPHICS_LAYER_0,
dkato 4:ce438477eddb 209 (void *)p_buf,
1050186 0:84e4649e7707 210 FRAME_BUFFER_STRIDE,
dkato 4:ce438477eddb 211 GRAPHICS_FORMAT,
dkato 4:ce438477eddb 212 WR_RD_WRSWA,
1050186 0:84e4649e7707 213 &rect
1050186 0:84e4649e7707 214 );
1050186 0:84e4649e7707 215 Display.Graphics_Start(DisplayBase::GRAPHICS_LAYER_0);
1050186 0:84e4649e7707 216 }
1050186 0:84e4649e7707 217
dkato 2:c7faef0ef374 218 static void Update_LCD_Display(frame_buffer_t * frmbuf_info) {
dkato 2:c7faef0ef374 219 Display.Graphics_Read_Change(DisplayBase::GRAPHICS_LAYER_0,
dkato 2:c7faef0ef374 220 (void *)frmbuf_info->buffer_address[frmbuf_info->draw_buffer_index]);
1050186 0:84e4649e7707 221 Wait_Vsync(1);
1050186 0:84e4649e7707 222 }
1050186 0:84e4649e7707 223
dkato 4:ce438477eddb 224 static void Swap_FrameBuffer(frame_buffer_t * frmbuf_info) {
dkato 4:ce438477eddb 225 if (frmbuf_info->draw_buffer_index == 1) {
dkato 4:ce438477eddb 226 frmbuf_info->draw_buffer_index = 0;
dkato 4:ce438477eddb 227 } else {
dkato 4:ce438477eddb 228 frmbuf_info->draw_buffer_index = 1;
1050186 0:84e4649e7707 229 }
1050186 0:84e4649e7707 230 }
zkimike 12:9a413bec6673 231 /****** Audio ******/
zkimike 12:9a413bec6673 232 static void callback_audio_write_end(void * p_data, int32_t result, void * p_app_data) {
zkimike 12:9a413bec6673 233 if (result < 0) {
zkimike 12:9a413bec6673 234 printf("audio write callback error %d\n", result);
zkimike 12:9a413bec6673 235 }
zkimike 12:9a413bec6673 236 }
1050186 0:84e4649e7707 237
dkato 4:ce438477eddb 238 /****** Touch ******/
dkato 2:c7faef0ef374 239 static func_code_t Scan_Key(const key_pic_info_t * key_tbl, const uint32_t pos_x, const uint32_t pos_y) {
1050186 0:84e4649e7707 240 func_code_t ret = RGA_FUNC_NON;
1050186 0:84e4649e7707 241
dkato 2:c7faef0ef374 242 while (ret == RGA_FUNC_NON) {
dkato 2:c7faef0ef374 243 if (key_tbl->func_code == RGA_FUNC_END) {
dkato 2:c7faef0ef374 244 break;
dkato 2:c7faef0ef374 245 }
1050186 0:84e4649e7707 246 /* Check the range of the X position */
dkato 2:c7faef0ef374 247 if ((pos_x >= key_tbl->pic_pos_x) && (pos_x <= (key_tbl->pic_pos_x + key_tbl->pic_width))) {
1050186 0:84e4649e7707 248 /* Check the range of the Y position */
dkato 2:c7faef0ef374 249 if ((pos_y >= key_tbl->pic_pos_y) && (pos_y <= (key_tbl->pic_pos_y + key_tbl->pic_height))) {
1050186 0:84e4649e7707 250 /* Decide the func code. */
dkato 2:c7faef0ef374 251 ret = key_tbl->func_code;
1050186 0:84e4649e7707 252 }
1050186 0:84e4649e7707 253 }
dkato 2:c7faef0ef374 254 key_tbl++;
1050186 0:84e4649e7707 255 }
1050186 0:84e4649e7707 256
1050186 0:84e4649e7707 257 return ret;
1050186 0:84e4649e7707 258 }
1050186 0:84e4649e7707 259
dkato 4:ce438477eddb 260 /****** Efect ******/
dkato 4:ce438477eddb 261 static void Exe_RGA_Func(func_code_t func_name, frame_buffer_t* frmbuf_info, TouckKey_LCD_shield * p_touch) {
dkato 2:c7faef0ef374 262 uint8_t touch_num = 0;
dkato 4:ce438477eddb 263 TouchKey::touch_pos_t touch_pos[TOUCH_NUM];
1050186 0:84e4649e7707 264
1050186 0:84e4649e7707 265 switch (func_name) {
1050186 0:84e4649e7707 266 case RGA_FUNC_DRAW_RECTANGLE:
1050186 6:6a8ce6f7767b 267 {
dkato 2:c7faef0ef374 268 bool key_on = false;
dkato 2:c7faef0ef374 269 int cnt;
dkato 2:c7faef0ef374 270 int color_cnt = 0;
dkato 2:c7faef0ef374 271 int x_0 = 0;
dkato 2:c7faef0ef374 272 int y_0 = 0;
dkato 2:c7faef0ef374 273 draw_rectangle_pos_t pos_tbl[DRAW_RECTANGLE_CNT_MAX] = {0};
dkato 2:c7faef0ef374 274
dkato 2:c7faef0ef374 275 pos_tbl[0].style = "#FF0000"; /* red */
dkato 2:c7faef0ef374 276 pos_tbl[1].style = "#00FF00"; /* green */
dkato 2:c7faef0ef374 277 pos_tbl[2].style = "#0000FF"; /* blue */
dkato 2:c7faef0ef374 278 pos_tbl[3].style = "#000000"; /* black */
dkato 2:c7faef0ef374 279
dkato 2:c7faef0ef374 280 while (1) {
dkato 2:c7faef0ef374 281 /* Get coordinates */
dkato 4:ce438477eddb 282 touch_num = p_touch->GetCoordinates(TOUCH_NUM, touch_pos);
dkato 2:c7faef0ef374 283 if (touch_num != 0) {
dkato 4:ce438477eddb 284 if (Scan_Key(return_key_tbl, touch_pos[0].x, touch_pos[0].y) == RGA_FUNC_RETURN) {
dkato 2:c7faef0ef374 285 break;
dkato 2:c7faef0ef374 286 }
dkato 2:c7faef0ef374 287 if (key_on == false) {
dkato 2:c7faef0ef374 288 key_on = true;
dkato 2:c7faef0ef374 289 if (color_cnt == 0) {
dkato 2:c7faef0ef374 290 for (cnt = 0; cnt < DRAW_RECTANGLE_CNT_MAX; cnt++) {
dkato 2:c7faef0ef374 291 pos_tbl[cnt].x = 0;
dkato 2:c7faef0ef374 292 pos_tbl[cnt].y = 0;
dkato 2:c7faef0ef374 293 pos_tbl[cnt].w = 0;
dkato 2:c7faef0ef374 294 pos_tbl[cnt].h = 0;
dkato 2:c7faef0ef374 295 }
dkato 2:c7faef0ef374 296 }
dkato 4:ce438477eddb 297 x_0 = touch_pos[0].x;
dkato 4:ce438477eddb 298 y_0 = touch_pos[0].y;
dkato 2:c7faef0ef374 299 }
dkato 4:ce438477eddb 300 if (x_0 < touch_pos[0].x) {
dkato 2:c7faef0ef374 301 pos_tbl[color_cnt].x = x_0;
dkato 4:ce438477eddb 302 pos_tbl[color_cnt].w = touch_pos[0].x - x_0;
dkato 2:c7faef0ef374 303 } else {
dkato 4:ce438477eddb 304 pos_tbl[color_cnt].x = touch_pos[0].x;
dkato 4:ce438477eddb 305 pos_tbl[color_cnt].w = x_0 - touch_pos[0].x;
dkato 2:c7faef0ef374 306 }
dkato 4:ce438477eddb 307 if (y_0 < touch_pos[0].y) {
dkato 2:c7faef0ef374 308 pos_tbl[color_cnt].y = y_0;
dkato 4:ce438477eddb 309 pos_tbl[color_cnt].h = touch_pos[0].y - y_0;
dkato 2:c7faef0ef374 310 } else {
dkato 4:ce438477eddb 311 pos_tbl[color_cnt].y = touch_pos[0].y;
dkato 4:ce438477eddb 312 pos_tbl[color_cnt].h = y_0 - touch_pos[0].y;
dkato 2:c7faef0ef374 313 }
dkato 2:c7faef0ef374 314 } else {
dkato 2:c7faef0ef374 315 if (key_on != false) {
dkato 2:c7faef0ef374 316 color_cnt++;
dkato 2:c7faef0ef374 317 if (color_cnt == DRAW_RECTANGLE_CNT_MAX) {
dkato 2:c7faef0ef374 318 color_cnt = 0;
dkato 2:c7faef0ef374 319 }
dkato 2:c7faef0ef374 320 }
dkato 2:c7faef0ef374 321 key_on = false;
dkato 2:c7faef0ef374 322 }
dkato 2:c7faef0ef374 323 /* Draw screen */
dkato 2:c7faef0ef374 324 Swap_FrameBuffer(frmbuf_info);
dkato 2:c7faef0ef374 325 RGA_Func_DrawRectangle(frmbuf_info, pos_tbl, DRAW_RECTANGLE_CNT_MAX);
dkato 2:c7faef0ef374 326 Update_LCD_Display(frmbuf_info);
dkato 2:c7faef0ef374 327 }
1050186 6:6a8ce6f7767b 328 }
1050186 6:6a8ce6f7767b 329 break;
1050186 0:84e4649e7707 330 case RGA_FUNC_DRAW_IMAGE:
1050186 6:6a8ce6f7767b 331 {
dkato 2:c7faef0ef374 332 int center_pos_x = 320;
dkato 2:c7faef0ef374 333 int center_pos_y = 110;
dkato 2:c7faef0ef374 334 while (1) {
dkato 2:c7faef0ef374 335 /* Get coordinates */
dkato 4:ce438477eddb 336 touch_num = p_touch->GetCoordinates(TOUCH_NUM, touch_pos);
dkato 2:c7faef0ef374 337 if (touch_num != 0) {
dkato 4:ce438477eddb 338 if (Scan_Key(return_key_tbl, touch_pos[0].x, touch_pos[0].y) == RGA_FUNC_RETURN) {
dkato 2:c7faef0ef374 339 break;
dkato 2:c7faef0ef374 340 }
dkato 4:ce438477eddb 341 center_pos_x = touch_pos[0].x;
dkato 4:ce438477eddb 342 center_pos_y = touch_pos[0].y;
dkato 2:c7faef0ef374 343 }
dkato 2:c7faef0ef374 344 /* Draw screen */
dkato 2:c7faef0ef374 345 Swap_FrameBuffer(frmbuf_info);
dkato 2:c7faef0ef374 346 RGA_Func_DrawImage(frmbuf_info, center_pos_x, center_pos_y);
dkato 2:c7faef0ef374 347 Update_LCD_Display(frmbuf_info);
dkato 2:c7faef0ef374 348 }
1050186 6:6a8ce6f7767b 349 }
1050186 6:6a8ce6f7767b 350 break;
zkimike 12:9a413bec6673 351 case RGA_FUNC_VIDEO_PLAYER:
zkimike 12:9a413bec6673 352 case RGA_FUNC_VIDEO_PLAY:
zkimike 12:9a413bec6673 353 case RGA_FUNC_VIDEO_STOP:
zkimike 12:9a413bec6673 354 case RGA_FUNC_VIDEO_FWD:
zkimike 12:9a413bec6673 355 case RGA_FUNC_VIDEO_REV:
zkimike 12:9a413bec6673 356 {
zkimike 12:9a413bec6673 357 // FileSystem
zkimike 12:9a413bec6673 358 FILE * vfp = NULL;
zkimike 12:9a413bec6673 359 FILE * afp = NULL;
zkimike 12:9a413bec6673 360 DIR * d = NULL;
zkimike 12:9a413bec6673 361 char file_path[sizeof(FLD_PATH) + FILE_NAME_LEN];
zkimike 12:9a413bec6673 362 uint16_t read_bytes = 0;
zkimike 12:9a413bec6673 363 dec_wav wav_file;
zkimike 12:9a413bec6673 364
zkimike 12:9a413bec6673 365 // Video File
zkimike 12:9a413bec6673 366 int framesize = 0;
zkimike 12:9a413bec6673 367 float framerate = 0.0;
zkimike 12:9a413bec6673 368 uint8_t frame_skip = 2;
zkimike 12:9a413bec6673 369
zkimike 12:9a413bec6673 370 // Audio File
zkimike 12:9a413bec6673 371 uint16_t buff_index = 0;
zkimike 12:9a413bec6673 372 uint8_t * p_buf = NULL;
zkimike 12:9a413bec6673 373 size_t audio_data_size;
zkimike 12:9a413bec6673 374 rbsp_data_conf_t audio_write_async_ctl = {&callback_audio_write_end, NULL};
zkimike 12:9a413bec6673 375
zkimike 12:9a413bec6673 376 // Sync
zkimike 12:9a413bec6673 377 uint32_t frame_period_ms = 0;
zkimike 12:9a413bec6673 378 uint32_t audio_sample_size = 0;
zkimike 12:9a413bec6673 379 Timer timer;
zkimike 12:9a413bec6673 380
zkimike 12:9a413bec6673 381 /*******************************************************************
zkimike 12:9a413bec6673 382 * Initialize SDHC FileSystem
zkimike 12:9a413bec6673 383 *******************************************************************/
zkimike 12:9a413bec6673 384 FATFileSystem fs("usb");
zkimike 12:9a413bec6673 385 SDBlockDevice_GR_PEACH msd;
zkimike 12:9a413bec6673 386
zkimike 12:9a413bec6673 387 printf("GR-PEACH SDHC MSD\n");
zkimike 12:9a413bec6673 388
zkimike 12:9a413bec6673 389 while(!msd.connect()) {
zkimike 12:9a413bec6673 390 Thread::wait(500);
zkimike 12:9a413bec6673 391 }
zkimike 12:9a413bec6673 392 // Now that the MSD device is connected, file system is mounted.
zkimike 12:9a413bec6673 393 fs.mount(&msd);
zkimike 12:9a413bec6673 394
zkimike 12:9a413bec6673 395 /*******************************************************************
zkimike 12:9a413bec6673 396 * Initialize Audio
zkimike 12:9a413bec6673 397 *******************************************************************/
zkimike 12:9a413bec6673 398 audio.power(0x02); // mic off
zkimike 12:9a413bec6673 399 audio.inputVolume(0.7, 0.7);
zkimike 12:9a413bec6673 400
zkimike 12:9a413bec6673 401 /*******************************************************************
zkimike 12:9a413bec6673 402 * Read background
zkimike 12:9a413bec6673 403 *******************************************************************/
zkimike 12:9a413bec6673 404 strcpy(file_path, FLD_PATH);
zkimike 12:9a413bec6673 405 strcat(file_path, "Background.jpg");
zkimike 12:9a413bec6673 406 printf("File Open: %s\n", file_path);
zkimike 12:9a413bec6673 407 vfp = fopen(file_path, "r");
zkimike 12:9a413bec6673 408 read_bytes = fread(&jpeg_frame_buffer1[0], sizeof(char), 114419, vfp);
zkimike 12:9a413bec6673 409 fclose(vfp);
zkimike 12:9a413bec6673 410
zkimike 12:9a413bec6673 411 /*******************************************************************
zkimike 12:9a413bec6673 412 * Open Video File
zkimike 12:9a413bec6673 413 *******************************************************************/
zkimike 12:9a413bec6673 414 strcpy(file_path, FLD_PATH);
zkimike 12:9a413bec6673 415 strcat(file_path, "Renesas.jpg");
zkimike 12:9a413bec6673 416 vfp = fopen(file_path, "r");
zkimike 12:9a413bec6673 417 fread ( &framerate, sizeof(char), 4, vfp);
zkimike 12:9a413bec6673 418 printf( "Video FrameRate : %f\n", framerate );
zkimike 12:9a413bec6673 419 fread ( &framesize, sizeof(char), 4, vfp);
zkimike 12:9a413bec6673 420 fread ( jpeg_frame_buffer2, sizeof(char), framesize, vfp);
zkimike 12:9a413bec6673 421
zkimike 12:9a413bec6673 422 /*******************************************************************
zkimike 12:9a413bec6673 423 * Open and Anylize WAV file
zkimike 12:9a413bec6673 424 *******************************************************************/
zkimike 12:9a413bec6673 425 strcpy(file_path, FLD_PATH);
zkimike 12:9a413bec6673 426 strcat(file_path, "Renesas.wav");
zkimike 12:9a413bec6673 427 afp = fopen(file_path, "r");
zkimike 12:9a413bec6673 428 wav_file.AnalyzeHeder(title_buf, artist_buf, album_buf, TEXT_SIZE, afp);
zkimike 12:9a413bec6673 429 if ( false == audio.format(wav_file.GetBlockSize()) ) {
zkimike 12:9a413bec6673 430 printf( "Audio ERROR Setting format : %d\n", wav_file.GetBlockSize());
zkimike 12:9a413bec6673 431 break;
zkimike 12:9a413bec6673 432 }
zkimike 12:9a413bec6673 433 if ( false == audio.frequency(wav_file.GetSamplingRate()) ) {
zkimike 12:9a413bec6673 434 printf( "Audio ERROR Setting frequency : f%Hz\n", wav_file.GetSamplingRate());
zkimike 12:9a413bec6673 435 break;
zkimike 12:9a413bec6673 436 }
zkimike 12:9a413bec6673 437 /*******************************************************************
zkimike 12:9a413bec6673 438 * Initialize Sync
zkimike 12:9a413bec6673 439 *******************************************************************/
zkimike 12:9a413bec6673 440 frame_period_ms = (int)((1/framerate) * 1000);
zkimike 12:9a413bec6673 441 printf( "Audio Frame Lenght : %dms\n", frame_period_ms);
zkimike 12:9a413bec6673 442 frame_period_ms = frame_period_ms * MJPEG_DIV;
zkimike 12:9a413bec6673 443 printf( "Video Frame Lenght : %dms\n", frame_period_ms);
zkimike 12:9a413bec6673 444 audio_sample_size = (int)((wav_file.GetSamplingRate() * wav_file.GetChannel()
zkimike 12:9a413bec6673 445 * (wav_file.GetBlockSize()/8)) / ( framerate )) * MJPEG_DIV;
zkimike 12:9a413bec6673 446 frame_skip = MJPEG_DIV-1;
zkimike 12:9a413bec6673 447
zkimike 12:9a413bec6673 448 TestPin0 = 0;
zkimike 12:9a413bec6673 449 TestPin1 = 0;
zkimike 12:9a413bec6673 450 TestPin2 = 0;
zkimike 12:9a413bec6673 451 TestPin3 = 0;
zkimike 12:9a413bec6673 452 timer.reset();
zkimike 12:9a413bec6673 453
zkimike 12:9a413bec6673 454 while (1) {
zkimike 12:9a413bec6673 455 timer.start();
zkimike 12:9a413bec6673 456
zkimike 12:9a413bec6673 457 // if device disconnected, try to connect again
zkimike 12:9a413bec6673 458 if (!msd.connected()) {
zkimike 12:9a413bec6673 459 break;
zkimike 12:9a413bec6673 460 }
zkimike 12:9a413bec6673 461
zkimike 12:9a413bec6673 462 // Read Next Video Frame
zkimike 12:9a413bec6673 463 TestPin0 = 1;
zkimike 12:9a413bec6673 464 for ( int i = 0; i < frame_skip; i++ ) {
zkimike 12:9a413bec6673 465 fread ( &framesize, sizeof(char), 4, vfp);
zkimike 12:9a413bec6673 466 fseek ( vfp, framesize, SEEK_CUR);
zkimike 12:9a413bec6673 467 }
zkimike 12:9a413bec6673 468 fread ( &framesize, sizeof(char), 4, vfp);
zkimike 12:9a413bec6673 469 fread ( jpeg_frame_buffer2, sizeof(char), framesize, vfp);
zkimike 12:9a413bec6673 470 TestPin0 = 0;
zkimike 12:9a413bec6673 471
zkimike 12:9a413bec6673 472 // Read and play Next Audio Frame
zkimike 12:9a413bec6673 473 TestPin1 = 1;
zkimike 12:9a413bec6673 474 p_buf = audio_write_buff[buff_index];
zkimike 12:9a413bec6673 475 audio_data_size = wav_file.GetNextData(p_buf, AUDIO_WRITE_BUFF_SIZE);
zkimike 12:9a413bec6673 476 if (audio_data_size > 0) {
zkimike 12:9a413bec6673 477 audio.write(p_buf, audio_data_size, &audio_write_async_ctl);
zkimike 12:9a413bec6673 478 buff_index++;
zkimike 12:9a413bec6673 479 if (buff_index >= AUDIO_WRITE_BUFF_NUM) {
zkimike 12:9a413bec6673 480 buff_index = 0;
zkimike 12:9a413bec6673 481 }
zkimike 12:9a413bec6673 482 }
zkimike 12:9a413bec6673 483 TestPin1 = 0;
zkimike 12:9a413bec6673 484
zkimike 12:9a413bec6673 485 /* Draw screen */
zkimike 12:9a413bec6673 486 TestPin2 = 1;
zkimike 12:9a413bec6673 487 Swap_FrameBuffer(frmbuf_info);
zkimike 12:9a413bec6673 488 RGA_Func_VideoPlayer(frmbuf_info, jpeg_frame_buffer1, jpeg_frame_buffer2);
zkimike 12:9a413bec6673 489 Update_LCD_Display(frmbuf_info);
zkimike 12:9a413bec6673 490 TestPin2 = 0;
zkimike 12:9a413bec6673 491 buff_index++;
zkimike 12:9a413bec6673 492
zkimike 12:9a413bec6673 493 // Sync
zkimike 12:9a413bec6673 494 TestPin3 = 1;
zkimike 12:9a413bec6673 495 while( frame_period_ms > timer.read_ms());
zkimike 12:9a413bec6673 496 timer.stop();
zkimike 12:9a413bec6673 497 timer.reset();
zkimike 12:9a413bec6673 498 TestPin3 = 0;
zkimike 12:9a413bec6673 499 }
zkimike 12:9a413bec6673 500 }
zkimike 12:9a413bec6673 501 break;
1050186 0:84e4649e7707 502 case RGA_FUNC_DISSOLVE:
1050186 6:6a8ce6f7767b 503 {
dkato 2:c7faef0ef374 504 float32_t work_alpha = 0.0f;
dkato 2:c7faef0ef374 505 while (1) {
dkato 2:c7faef0ef374 506 /* Get coordinates */
dkato 4:ce438477eddb 507 touch_num = p_touch->GetCoordinates(TOUCH_NUM, touch_pos);
dkato 2:c7faef0ef374 508 if (touch_num != 0) {
dkato 4:ce438477eddb 509 if (Scan_Key(return_key_tbl, touch_pos[0].x, touch_pos[0].y) == RGA_FUNC_RETURN) {
dkato 2:c7faef0ef374 510 break;
dkato 2:c7faef0ef374 511 }
dkato 4:ce438477eddb 512 work_alpha = (float32_t)touch_pos[0].x / (float32_t)(LCD_PIXEL_WIDTH);
dkato 2:c7faef0ef374 513 }
dkato 2:c7faef0ef374 514 /* Draw screen */
1050186 0:84e4649e7707 515 Swap_FrameBuffer(frmbuf_info);
1050186 0:84e4649e7707 516 RGA_Func_Dissolve(frmbuf_info, work_alpha);
dkato 2:c7faef0ef374 517 Update_LCD_Display(frmbuf_info);
1050186 0:84e4649e7707 518 }
1050186 6:6a8ce6f7767b 519 }
1050186 6:6a8ce6f7767b 520 break;
1050186 0:84e4649e7707 521 case RGA_FUNC_SCROLL:
1050186 6:6a8ce6f7767b 522 {
dkato 2:c7faef0ef374 523 int work_width_pos = 0;
dkato 2:c7faef0ef374 524 while (1) {
dkato 2:c7faef0ef374 525 /* Get coordinates */
dkato 4:ce438477eddb 526 touch_num = p_touch->GetCoordinates(TOUCH_NUM, touch_pos);
dkato 2:c7faef0ef374 527 if (touch_num != 0) {
dkato 4:ce438477eddb 528 if (Scan_Key(return_key_tbl, touch_pos[0].x, touch_pos[0].y) == RGA_FUNC_RETURN) {
dkato 2:c7faef0ef374 529 break;
dkato 2:c7faef0ef374 530 }
dkato 4:ce438477eddb 531 work_width_pos = SCROLL_MAX_NUM * ((float32_t)touch_pos[0].x / (float32_t)(LCD_PIXEL_WIDTH));
dkato 2:c7faef0ef374 532 }
dkato 2:c7faef0ef374 533 /* Draw screen */
1050186 0:84e4649e7707 534 Swap_FrameBuffer(frmbuf_info);
1050186 0:84e4649e7707 535 RGA_Func_Scroll(frmbuf_info, work_width_pos);
dkato 2:c7faef0ef374 536 Update_LCD_Display(frmbuf_info);
1050186 0:84e4649e7707 537 }
1050186 6:6a8ce6f7767b 538 }
1050186 6:6a8ce6f7767b 539 break;
1050186 0:84e4649e7707 540 case RGA_FUNC_ZOOM:
1050186 6:6a8ce6f7767b 541 {
dkato 2:c7faef0ef374 542 int work_height_pos = ZOOM_MAX_NUM;
dkato 2:c7faef0ef374 543 while (1) {
dkato 2:c7faef0ef374 544 /* Get coordinates */
dkato 4:ce438477eddb 545 touch_num = p_touch->GetCoordinates(TOUCH_NUM, touch_pos);
dkato 2:c7faef0ef374 546 if (touch_num != 0) {
dkato 4:ce438477eddb 547 if (Scan_Key(return_key_tbl, touch_pos[0].x, touch_pos[0].y) == RGA_FUNC_RETURN) {
dkato 2:c7faef0ef374 548 break;
dkato 2:c7faef0ef374 549 }
dkato 4:ce438477eddb 550 work_height_pos = ZOOM_MAX_NUM * ((float32_t)touch_pos[0].x / (float32_t)(LCD_PIXEL_WIDTH));
dkato 2:c7faef0ef374 551 }
dkato 2:c7faef0ef374 552 /* Draw screen */
1050186 0:84e4649e7707 553 Swap_FrameBuffer(frmbuf_info);
dkato 2:c7faef0ef374 554 RGA_Func_Zoom(frmbuf_info, work_height_pos);
dkato 2:c7faef0ef374 555 Update_LCD_Display(frmbuf_info);
1050186 0:84e4649e7707 556 }
1050186 6:6a8ce6f7767b 557 }
1050186 6:6a8ce6f7767b 558 break;
1050186 0:84e4649e7707 559 case RGA_FUNC_ROTATION:
1050186 6:6a8ce6f7767b 560 {
dkato 2:c7faef0ef374 561 graphics_matrix_float_t work_angle = 0;
dkato 2:c7faef0ef374 562 while (1) {
dkato 2:c7faef0ef374 563 /* Get coordinates */
dkato 4:ce438477eddb 564 touch_num = p_touch->GetCoordinates(TOUCH_NUM, touch_pos);
dkato 2:c7faef0ef374 565 if (touch_num != 0) {
dkato 4:ce438477eddb 566 if (Scan_Key(return_key_tbl, touch_pos[0].x, touch_pos[0].y) == RGA_FUNC_RETURN) {
dkato 2:c7faef0ef374 567 break;
dkato 2:c7faef0ef374 568 }
dkato 4:ce438477eddb 569 work_angle = ROTATION_MAX_NUM * ((float32_t)touch_pos[0].x / (float32_t)(LCD_PIXEL_WIDTH));
dkato 2:c7faef0ef374 570 }
dkato 2:c7faef0ef374 571 /* Draw screen */
1050186 0:84e4649e7707 572 Swap_FrameBuffer(frmbuf_info);
1050186 0:84e4649e7707 573 RGA_Func_Rotation(frmbuf_info, work_angle);
dkato 2:c7faef0ef374 574 Update_LCD_Display(frmbuf_info);
1050186 0:84e4649e7707 575 }
1050186 6:6a8ce6f7767b 576 }
1050186 6:6a8ce6f7767b 577 break;
1050186 0:84e4649e7707 578 case RGA_FUNC_ACCELERATE:
1050186 6:6a8ce6f7767b 579 {
dkato 2:c7faef0ef374 580 int acce_frame_num = 0;
dkato 2:c7faef0ef374 581 int animation_timing = 0;
1050186 0:84e4649e7707 582 float32_t work_relative_pos;
dkato 2:c7faef0ef374 583 while (1) {
dkato 2:c7faef0ef374 584 /* Get coordinates */
dkato 4:ce438477eddb 585 touch_num = p_touch->GetCoordinates(TOUCH_NUM, touch_pos);
dkato 2:c7faef0ef374 586 if (touch_num != 0) {
dkato 2:c7faef0ef374 587 func_code_t func_code;
dkato 2:c7faef0ef374 588
dkato 4:ce438477eddb 589 func_code = Scan_Key(animetion_timing_key_tbl, touch_pos[0].x, touch_pos[0].y);
dkato 2:c7faef0ef374 590 if (func_code == RGA_FUNC_RETURN) {
dkato 2:c7faef0ef374 591 break;
dkato 2:c7faef0ef374 592 }
dkato 2:c7faef0ef374 593 switch (func_code) {
dkato 2:c7faef0ef374 594 case RGA_FUNC_ANIME_EASE:
dkato 2:c7faef0ef374 595 animation_timing = 0;
dkato 2:c7faef0ef374 596 acce_frame_num = 0;
dkato 2:c7faef0ef374 597 break;
dkato 2:c7faef0ef374 598 case RGA_FUNC_ANIME_LINEAR:
dkato 2:c7faef0ef374 599 animation_timing = 1;
dkato 2:c7faef0ef374 600 acce_frame_num = 0;
dkato 2:c7faef0ef374 601 break;
dkato 2:c7faef0ef374 602 case RGA_FUNC_ANIME_EASE_IN:
dkato 2:c7faef0ef374 603 animation_timing = 2;
dkato 2:c7faef0ef374 604 acce_frame_num = 0;
dkato 2:c7faef0ef374 605 break;
dkato 2:c7faef0ef374 606 case RGA_FUNC_ANIME_EASE_OUT:
dkato 2:c7faef0ef374 607 animation_timing = 3;
dkato 2:c7faef0ef374 608 acce_frame_num = 0;
dkato 2:c7faef0ef374 609 break;
dkato 2:c7faef0ef374 610 case RGA_FUNC_ANIME_EASE_IN_OUT:
dkato 2:c7faef0ef374 611 animation_timing = 4;
dkato 2:c7faef0ef374 612 acce_frame_num = 0;
dkato 2:c7faef0ef374 613 break;
dkato 2:c7faef0ef374 614 default:
dkato 2:c7faef0ef374 615 /* Do Nothing */
dkato 2:c7faef0ef374 616 break;
dkato 2:c7faef0ef374 617 }
dkato 2:c7faef0ef374 618 }
dkato 2:c7faef0ef374 619 work_relative_pos = acce_frame_num / (float32_t)ACCELERATE_MAX_NUM;
dkato 2:c7faef0ef374 620 acce_frame_num++;
dkato 2:c7faef0ef374 621 if (acce_frame_num > ACCELERATE_MAX_NUM) {
dkato 2:c7faef0ef374 622 acce_frame_num = 0;
dkato 2:c7faef0ef374 623 }
dkato 2:c7faef0ef374 624 /* Draw screen */
1050186 0:84e4649e7707 625 Swap_FrameBuffer(frmbuf_info);
dkato 2:c7faef0ef374 626 RGA_Func_Accelerate(frmbuf_info, animation_timing, work_relative_pos);
dkato 2:c7faef0ef374 627 Update_LCD_Display(frmbuf_info);
1050186 0:84e4649e7707 628 }
1050186 6:6a8ce6f7767b 629 }
1050186 6:6a8ce6f7767b 630 break;
1050186 0:84e4649e7707 631 default :
1050186 0:84e4649e7707 632 /* Do nothing */
1050186 0:84e4649e7707 633 break;
1050186 0:84e4649e7707 634 }
1050186 0:84e4649e7707 635 }
1050186 0:84e4649e7707 636
1050186 0:84e4649e7707 637 int main(void) {
1050186 0:84e4649e7707 638 func_code_t func_code;
1050186 0:84e4649e7707 639 uint8_t touch_num = 0;
dkato 4:ce438477eddb 640 TouchKey::touch_pos_t touch_pos[TOUCH_NUM];
1050186 0:84e4649e7707 641
dkato 4:ce438477eddb 642 /* Initialization of LCD */
dkato 4:ce438477eddb 643 Init_LCD_Display(); /* When using LCD, please call before than Init_Video(). */
dkato 4:ce438477eddb 644
dkato 4:ce438477eddb 645 memset(user_frame_buffer1, 0, sizeof(user_frame_buffer1));
1050186 0:84e4649e7707 646 memset(user_frame_buffer2, 0, sizeof(user_frame_buffer2));
dkato 4:ce438477eddb 647 frame_buffer_info.buffer_address[0] = user_frame_buffer1;
1050186 0:84e4649e7707 648 frame_buffer_info.buffer_address[1] = user_frame_buffer2;
1050186 0:84e4649e7707 649 frame_buffer_info.buffer_count = 2;
1050186 0:84e4649e7707 650 frame_buffer_info.show_buffer_index = 0;
1050186 0:84e4649e7707 651 frame_buffer_info.draw_buffer_index = 0;
1050186 0:84e4649e7707 652 frame_buffer_info.width = LCD_PIXEL_WIDTH;
1050186 0:84e4649e7707 653 frame_buffer_info.byte_per_pixel = FRAME_BUFFER_BYTE_PER_PIXEL;
1050186 0:84e4649e7707 654 frame_buffer_info.stride = LCD_PIXEL_WIDTH * FRAME_BUFFER_BYTE_PER_PIXEL;
1050186 0:84e4649e7707 655 frame_buffer_info.height = LCD_PIXEL_HEIGHT;
1050186 0:84e4649e7707 656 frame_buffer_info.pixel_format = PIXEL_FORMAT_RGB565;
1050186 0:84e4649e7707 657
1050186 0:84e4649e7707 658 /* Display Top Screen */
dkato 2:c7faef0ef374 659 Set_RGAObject(&frame_buffer_info);
dkato 2:c7faef0ef374 660 RGA_Func_DrawTopScreen(&frame_buffer_info);
zkimike 12:9a413bec6673 661
dkato 4:ce438477eddb 662 /* Start of LCD */
dkato 4:ce438477eddb 663 Start_LCD_Display(frame_buffer_info.buffer_address[0]);
dkato 4:ce438477eddb 664
dkato 4:ce438477eddb 665 /* Backlight on */
dkato 4:ce438477eddb 666 Thread::wait(200);
dkato 4:ce438477eddb 667 lcd_cntrst.write(1.0);
dkato 4:ce438477eddb 668
dkato 4:ce438477eddb 669 /* Reset touch IC */
dkato 4:ce438477eddb 670 TouckKey_LCD_shield touch(P4_0, P2_13, I2C_SDA, I2C_SCL);
dkato 4:ce438477eddb 671 touch.Reset();
zkimike 12:9a413bec6673 672
1050186 0:84e4649e7707 673 while (1) {
dkato 2:c7faef0ef374 674 /* Get Coordinates */
dkato 4:ce438477eddb 675 touch_num = touch.GetCoordinates(TOUCH_NUM, touch_pos);
1050186 0:84e4649e7707 676 if (touch_num != 0) {
dkato 4:ce438477eddb 677 func_code = Scan_Key(top_screen_key_tbl, touch_pos[0].x, touch_pos[0].y);
1050186 0:84e4649e7707 678 if (func_code != RGA_FUNC_NON) {
dkato 2:c7faef0ef374 679 /* Wait key off */
dkato 2:c7faef0ef374 680 while (1) {
dkato 4:ce438477eddb 681 touch_num = touch.GetCoordinates(TOUCH_NUM, touch_pos);
dkato 2:c7faef0ef374 682 if (touch_num == 0) {
dkato 2:c7faef0ef374 683 break;
dkato 2:c7faef0ef374 684 }
dkato 4:ce438477eddb 685 Thread::wait(20);
dkato 2:c7faef0ef374 686 }
dkato 2:c7faef0ef374 687
1050186 0:84e4649e7707 688 /* Execute RGA functions */
dkato 4:ce438477eddb 689 Exe_RGA_Func(func_code, &frame_buffer_info, &touch);
dkato 2:c7faef0ef374 690
1050186 0:84e4649e7707 691 /* Return Top Screen */
dkato 2:c7faef0ef374 692 Swap_FrameBuffer(&frame_buffer_info);
dkato 2:c7faef0ef374 693 RGA_Func_DrawTopScreen(&frame_buffer_info);
dkato 2:c7faef0ef374 694 Update_LCD_Display(&frame_buffer_info);
1050186 0:84e4649e7707 695 }
1050186 0:84e4649e7707 696 }
dkato 4:ce438477eddb 697 Thread::wait(20);
1050186 0:84e4649e7707 698 }
zkimike 12:9a413bec6673 699 }