Daiki Kato / Mbed 2 deprecated GR-PEACH_Digital_Signage_display_shield

Dependencies:   GR-PEACH_video GraphicsFramework R_BSP SDFileSystem_tmp mbed-rtos mbed

Committer:
dkato
Date:
Tue May 24 08:01:44 2016 +0000
Revision:
1:2f9f102b2b4c
Parent:
0:8970afa15acc
Child:
2:e79ddc136968
Add the HD(720p) output setting.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dkato 0:8970afa15acc 1 /*
dkato 0:8970afa15acc 2 Permission is hereby granted, free of charge, to any person obtaining a copy
dkato 0:8970afa15acc 3 of this software and associated documentation files (the "Software"), to deal
dkato 0:8970afa15acc 4 in the Software without restriction, including without limitation the rights
dkato 0:8970afa15acc 5 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
dkato 0:8970afa15acc 6 copies of the Software, and to permit persons to whom the Software is
dkato 0:8970afa15acc 7 furnished to do so, subject to the following conditions:
dkato 0:8970afa15acc 8
dkato 0:8970afa15acc 9 The above copyright notice and this permission notice shall be included in
dkato 0:8970afa15acc 10 all copies or substantial portions of the Software.
dkato 0:8970afa15acc 11
dkato 0:8970afa15acc 12 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
dkato 0:8970afa15acc 13 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
dkato 0:8970afa15acc 14 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
dkato 0:8970afa15acc 15 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
dkato 0:8970afa15acc 16 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
dkato 0:8970afa15acc 17 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
dkato 0:8970afa15acc 18 THE SOFTWARE.
dkato 0:8970afa15acc 19 */
dkato 0:8970afa15acc 20
dkato 0:8970afa15acc 21 #include "mbed.h"
dkato 0:8970afa15acc 22 #include "DisplayBace.h"
dkato 0:8970afa15acc 23 #include "RGA.h"
dkato 0:8970afa15acc 24 #include "rtos.h"
dkato 0:8970afa15acc 25 #include "SDFileSystem.h"
dkato 0:8970afa15acc 26
dkato 0:8970afa15acc 27 #define SVGA (0u) /* 800 x 600 */
dkato 0:8970afa15acc 28 #define XGA (1u) /* 1024 x 768 */
dkato 1:2f9f102b2b4c 29 #define HD_720p (2u) /* 1280 x 720 */
dkato 1:2f9f102b2b4c 30 #define WXGA (3u) /* 1280 x 800 */
dkato 0:8970afa15acc 31
dkato 0:8970afa15acc 32 /**** User Selection *********/
dkato 0:8970afa15acc 33 #define WAIT_TIME (8000)
dkato 0:8970afa15acc 34 #define DISSOLVE_STEP_NUM (16) /* minimum 1 */
dkato 0:8970afa15acc 35 #define SCROLL_STEP_NUM (8) /* minimum 1 */
dkato 0:8970afa15acc 36 #define SCROLL_DIRECTION (-1) /* Select 1(left to right) or -1(right to left) */
dkato 1:2f9f102b2b4c 37 #define LCD_SIZE WXGA /* Select SVGA, XGA, HD_720p or WXGA */
dkato 0:8970afa15acc 38 #define MAX_JPEG_SIZE (1024 * 300)
dkato 0:8970afa15acc 39 /*****************************/
dkato 0:8970afa15acc 40
dkato 0:8970afa15acc 41 #define FILE_NAME_LEN (64)
dkato 0:8970afa15acc 42 #define TEXT_SIZE (64 + 1) //null-terminated
dkato 0:8970afa15acc 43 #define FLD_PATH "/sd/"
dkato 0:8970afa15acc 44
dkato 0:8970afa15acc 45 /* LCD Parameter */
dkato 0:8970afa15acc 46 #define LCD_INPUT_CLOCK (66.67f)
dkato 0:8970afa15acc 47 #if ( LCD_SIZE == SVGA )
dkato 1:2f9f102b2b4c 48 #define LCD_OUTPUT_CLOCK (40.000f)
dkato 0:8970afa15acc 49 #define LCD_PIXEL_WIDTH (800u)
dkato 0:8970afa15acc 50 #define LCD_PIXEL_HEIGHT (600u)
dkato 0:8970afa15acc 51 #define LCD_H_BACK_PORCH (88u)
dkato 0:8970afa15acc 52 #define LCD_H_FRONT_PORCH (40u)
dkato 0:8970afa15acc 53 #define LCD_H_SYNC_WIDTH (128u)
dkato 0:8970afa15acc 54 #define LCD_V_BACK_PORCH (23u)
dkato 0:8970afa15acc 55 #define LCD_V_FRONT_PORCH (1u)
dkato 0:8970afa15acc 56 #define LCD_V_SYNC_WIDTH (4u)
dkato 0:8970afa15acc 57 #elif ( LCD_SIZE == XGA )
dkato 1:2f9f102b2b4c 58 #define LCD_OUTPUT_CLOCK (65.000f)
dkato 0:8970afa15acc 59 #define LCD_PIXEL_WIDTH (1024u)
dkato 0:8970afa15acc 60 #define LCD_PIXEL_HEIGHT (768u)
dkato 0:8970afa15acc 61 #define LCD_H_BACK_PORCH (160u)
dkato 0:8970afa15acc 62 #define LCD_H_FRONT_PORCH (24u)
dkato 0:8970afa15acc 63 #define LCD_H_SYNC_WIDTH (136u)
dkato 0:8970afa15acc 64 #define LCD_V_BACK_PORCH (29u)
dkato 0:8970afa15acc 65 #define LCD_V_FRONT_PORCH (3u)
dkato 0:8970afa15acc 66 #define LCD_V_SYNC_WIDTH (6u)
dkato 1:2f9f102b2b4c 67 #elif ( LCD_SIZE == HD_720p )
dkato 1:2f9f102b2b4c 68 #define LCD_OUTPUT_CLOCK (74.1800f)
dkato 1:2f9f102b2b4c 69 #define LCD_PIXEL_WIDTH (1280u)
dkato 1:2f9f102b2b4c 70 #define LCD_PIXEL_HEIGHT (800u)
dkato 1:2f9f102b2b4c 71 #define LCD_H_BACK_PORCH (220u)
dkato 1:2f9f102b2b4c 72 #define LCD_H_FRONT_PORCH (70u)
dkato 1:2f9f102b2b4c 73 #define LCD_H_SYNC_WIDTH (80u)
dkato 1:2f9f102b2b4c 74 #define LCD_V_BACK_PORCH (20u)
dkato 1:2f9f102b2b4c 75 #define LCD_V_FRONT_PORCH (5u)
dkato 1:2f9f102b2b4c 76 #define LCD_V_SYNC_WIDTH (5u)
dkato 0:8970afa15acc 77 #elif ( LCD_SIZE == WXGA )
dkato 1:2f9f102b2b4c 78 #define LCD_OUTPUT_CLOCK (85.4000f)
dkato 0:8970afa15acc 79 #define LCD_PIXEL_WIDTH (1280u)
dkato 0:8970afa15acc 80 #define LCD_PIXEL_HEIGHT (800u)
dkato 0:8970afa15acc 81 #define LCD_H_BACK_PORCH (200u)
dkato 0:8970afa15acc 82 #define LCD_H_FRONT_PORCH (64u)
dkato 0:8970afa15acc 83 #define LCD_H_SYNC_WIDTH (136u)
dkato 0:8970afa15acc 84 #define LCD_V_BACK_PORCH (24u)
dkato 0:8970afa15acc 85 #define LCD_V_FRONT_PORCH (1u)
dkato 0:8970afa15acc 86 #define LCD_V_SYNC_WIDTH (3u)
dkato 0:8970afa15acc 87 #endif
dkato 0:8970afa15acc 88
dkato 0:8970afa15acc 89 /* FRAME BUFFER Parameter */
dkato 0:8970afa15acc 90 #define FRAME_BUFFER_BYTE_PER_PIXEL (2)
dkato 0:8970afa15acc 91 #define FRAME_BUFFER_STRIDE (((LCD_PIXEL_WIDTH * FRAME_BUFFER_BYTE_PER_PIXEL) + 31u) & ~31u)
dkato 0:8970afa15acc 92
dkato 0:8970afa15acc 93 DigitalIn button(USER_BUTTON0);
dkato 0:8970afa15acc 94 I2C i2c(I2C_SDA, I2C_SCL);
dkato 0:8970afa15acc 95 DisplayBase Display;
dkato 0:8970afa15acc 96 Canvas2D_ContextClass canvas2d;
dkato 0:8970afa15acc 97
dkato 0:8970afa15acc 98 static uint8_t user_frame_buffer[FRAME_BUFFER_STRIDE * LCD_PIXEL_HEIGHT]__attribute((aligned(32))); /* 32 bytes aligned */
dkato 0:8970afa15acc 99 static uint8_t user_frame_buffer2[FRAME_BUFFER_STRIDE * LCD_PIXEL_HEIGHT]__attribute((aligned(32))); /* 32 bytes aligned */
dkato 0:8970afa15acc 100 static frame_buffer_t frame_buffer_info;
dkato 0:8970afa15acc 101 static volatile int32_t vsync_count = 0;
dkato 0:8970afa15acc 102
dkato 0:8970afa15acc 103 #if defined(__ICCARM__)
dkato 0:8970afa15acc 104 #pragma data_alignment=8
dkato 0:8970afa15acc 105 static uint8_t JpegBuffer[2][MAX_JPEG_SIZE]@ ".mirrorram"; //8 bytes aligned!;
dkato 0:8970afa15acc 106 #pragma data_alignment=4
dkato 0:8970afa15acc 107 #else
dkato 0:8970afa15acc 108 static uint8_t JpegBuffer[2][MAX_JPEG_SIZE]__attribute((section("NC_BSS"),aligned(8))); //8 bytes aligned!;
dkato 0:8970afa15acc 109 #endif
dkato 0:8970afa15acc 110
dkato 0:8970afa15acc 111 static void IntCallbackFunc_Vsync(DisplayBase::int_type_t int_type) {
dkato 0:8970afa15acc 112 /* Interrupt callback function for Vsync interruption */
dkato 0:8970afa15acc 113 if (vsync_count > 0) {
dkato 0:8970afa15acc 114 vsync_count--;
dkato 0:8970afa15acc 115 }
dkato 0:8970afa15acc 116 }
dkato 0:8970afa15acc 117
dkato 0:8970afa15acc 118 static void Wait_Vsync(const int32_t wait_count) {
dkato 0:8970afa15acc 119 /* Wait for the specified number of times Vsync occurs */
dkato 0:8970afa15acc 120 vsync_count = wait_count;
dkato 0:8970afa15acc 121 while (vsync_count > 0) {
dkato 0:8970afa15acc 122 /* Do nothing */
dkato 0:8970afa15acc 123 }
dkato 0:8970afa15acc 124 }
dkato 0:8970afa15acc 125
dkato 0:8970afa15acc 126 static void Init_LCD_Display(uint8_t* disp_buf) {
dkato 0:8970afa15acc 127 /* Create DisplayBase object */
dkato 0:8970afa15acc 128 DisplayBase::graphics_error_t error;
dkato 0:8970afa15acc 129 DisplayBase::rect_t rect;
dkato 0:8970afa15acc 130 DisplayBase::lcd_config_t lcd_config;
dkato 0:8970afa15acc 131 PinName lcd_pin[28] = {
dkato 0:8970afa15acc 132 /* data pin */
dkato 0:8970afa15acc 133 P11_15, P11_14, P11_13, P11_12, P5_7, P5_6, P5_5, P5_4, P5_3, P5_2, P5_1, P5_0,
dkato 0:8970afa15acc 134 P4_7, P4_6, P4_5, P4_4, P10_12, P10_13, P10_14, P10_15, P3_15, P3_14, P3_13,
dkato 0:8970afa15acc 135 P3_12, P3_11, P3_10, P3_9, P3_8
dkato 0:8970afa15acc 136 };
dkato 0:8970afa15acc 137
dkato 0:8970afa15acc 138 Thread::wait(100);
dkato 0:8970afa15acc 139
dkato 0:8970afa15acc 140 lcd_config.lcd_type = DisplayBase::LCD_TYPE_PARALLEL_RGB;
dkato 0:8970afa15acc 141 lcd_config.intputClock = LCD_INPUT_CLOCK;
dkato 0:8970afa15acc 142 lcd_config.outputClock = LCD_OUTPUT_CLOCK;
dkato 0:8970afa15acc 143 lcd_config.lcd_outformat = DisplayBase::LCD_OUTFORMAT_RGB888;
dkato 0:8970afa15acc 144 lcd_config.lcd_edge = DisplayBase::EDGE_RISING;
dkato 0:8970afa15acc 145 lcd_config.h_toatal_period = (LCD_PIXEL_WIDTH + LCD_H_FRONT_PORCH + LCD_H_BACK_PORCH);
dkato 0:8970afa15acc 146 lcd_config.v_toatal_period = (LCD_PIXEL_HEIGHT + LCD_V_FRONT_PORCH + LCD_V_BACK_PORCH);
dkato 0:8970afa15acc 147
dkato 0:8970afa15acc 148 lcd_config.h_disp_widht = LCD_PIXEL_WIDTH;
dkato 0:8970afa15acc 149 lcd_config.v_disp_widht = LCD_PIXEL_HEIGHT;
dkato 0:8970afa15acc 150 lcd_config.h_back_porch = LCD_H_BACK_PORCH;
dkato 0:8970afa15acc 151 lcd_config.v_back_porch = LCD_V_BACK_PORCH;
dkato 0:8970afa15acc 152
dkato 0:8970afa15acc 153 lcd_config.h_sync_port = DisplayBase::LCD_TCON_PIN_1;
dkato 0:8970afa15acc 154 lcd_config.h_sync_port_polarity = DisplayBase::SIG_POL_NOT_INVERTED;
dkato 0:8970afa15acc 155 lcd_config.h_sync_width = LCD_H_SYNC_WIDTH;
dkato 0:8970afa15acc 156
dkato 0:8970afa15acc 157 lcd_config.v_sync_port = DisplayBase::LCD_TCON_PIN_2;
dkato 0:8970afa15acc 158 lcd_config.v_sync_port_polarity = DisplayBase::SIG_POL_NOT_INVERTED;
dkato 0:8970afa15acc 159 lcd_config.v_sync_width = LCD_V_SYNC_WIDTH;
dkato 0:8970afa15acc 160
dkato 0:8970afa15acc 161 lcd_config.de_port = DisplayBase::LCD_TCON_PIN_0;
dkato 0:8970afa15acc 162 lcd_config.de_port_polarity = DisplayBase::SIG_POL_NOT_INVERTED;
dkato 0:8970afa15acc 163
dkato 0:8970afa15acc 164 /* Graphics initialization process */
dkato 0:8970afa15acc 165 error = Display.Graphics_init(&lcd_config);
dkato 0:8970afa15acc 166 if (error != DisplayBase::GRAPHICS_OK) {
dkato 0:8970afa15acc 167 printf("Line %d, error %d\n", __LINE__, error);
dkato 0:8970afa15acc 168 while (1);
dkato 0:8970afa15acc 169 }
dkato 0:8970afa15acc 170
dkato 0:8970afa15acc 171 /* Interrupt callback function setting (Vsync signal output from scaler 0) */
dkato 0:8970afa15acc 172 error = Display.Graphics_Irq_Handler_Set(DisplayBase::INT_TYPE_S0_LO_VSYNC, 0, IntCallbackFunc_Vsync);
dkato 0:8970afa15acc 173 if (error != DisplayBase::GRAPHICS_OK) {
dkato 0:8970afa15acc 174 printf("Line %d, error %d\n", __LINE__, error);
dkato 0:8970afa15acc 175 while (1);
dkato 0:8970afa15acc 176 }
dkato 0:8970afa15acc 177
dkato 0:8970afa15acc 178 Display.Graphics_Lcd_Port_Init(lcd_pin, 28);
dkato 0:8970afa15acc 179 rect.vs = 0;
dkato 0:8970afa15acc 180 rect.vw = LCD_PIXEL_HEIGHT;
dkato 0:8970afa15acc 181 rect.hs = 0;
dkato 0:8970afa15acc 182 rect.hw = LCD_PIXEL_WIDTH;
dkato 0:8970afa15acc 183
dkato 0:8970afa15acc 184 Display.Graphics_Read_Setting(
dkato 0:8970afa15acc 185 DisplayBase::GRAPHICS_LAYER_0,
dkato 0:8970afa15acc 186 (void *)disp_buf,
dkato 0:8970afa15acc 187 FRAME_BUFFER_STRIDE,
dkato 0:8970afa15acc 188 DisplayBase::GRAPHICS_FORMAT_RGB565,
dkato 0:8970afa15acc 189 DisplayBase::WR_RD_WRSWA_32_16BIT,
dkato 0:8970afa15acc 190 &rect
dkato 0:8970afa15acc 191 );
dkato 0:8970afa15acc 192 }
dkato 0:8970afa15acc 193
dkato 0:8970afa15acc 194 static void Start_LCD_Display(void) {
dkato 0:8970afa15acc 195 Display.Graphics_Start(DisplayBase::GRAPHICS_LAYER_0);
dkato 0:8970afa15acc 196 }
dkato 0:8970afa15acc 197
dkato 0:8970afa15acc 198 static void Update_LCD_Display(frame_buffer_t * frmbuf_info) {
dkato 0:8970afa15acc 199 Display.Graphics_Read_Change(DisplayBase::GRAPHICS_LAYER_0,
dkato 0:8970afa15acc 200 (void *)frmbuf_info->buffer_address[frmbuf_info->draw_buffer_index]);
dkato 0:8970afa15acc 201 Wait_Vsync(1);
dkato 0:8970afa15acc 202 }
dkato 0:8970afa15acc 203
dkato 0:8970afa15acc 204 static void Swap_FrameBuffer(frame_buffer_t * frmbuf_info) {
dkato 0:8970afa15acc 205 if (frmbuf_info->draw_buffer_index == 1) {
dkato 0:8970afa15acc 206 frmbuf_info->draw_buffer_index = 0;
dkato 0:8970afa15acc 207 } else {
dkato 0:8970afa15acc 208 frmbuf_info->draw_buffer_index = 1;
dkato 0:8970afa15acc 209 }
dkato 0:8970afa15acc 210 }
dkato 0:8970afa15acc 211
dkato 0:8970afa15acc 212 static void draw_image(frame_buffer_t* frmbuf_info, const graphics_image_t* image_new) {
dkato 0:8970afa15acc 213 Swap_FrameBuffer(frmbuf_info);
dkato 0:8970afa15acc 214 /* Clear */
dkato 0:8970afa15acc 215 canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
dkato 0:8970afa15acc 216 /* Draw a image */
dkato 0:8970afa15acc 217 canvas2d.globalAlpha = 1.0f;
dkato 0:8970afa15acc 218 canvas2d.drawImage((const graphics_image_t*)image_new, 0, 0, frmbuf_info->width, frmbuf_info->height);
dkato 0:8970afa15acc 219 R_OSPL_CLEAR_ERROR();
dkato 0:8970afa15acc 220 /* Complete drawing */
dkato 0:8970afa15acc 221 R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
dkato 0:8970afa15acc 222 Update_LCD_Display(frmbuf_info);
dkato 0:8970afa15acc 223 }
dkato 0:8970afa15acc 224
dkato 0:8970afa15acc 225 static void draw_image_scroll(frame_buffer_t* frmbuf_info, const graphics_image_t* image_last,
dkato 0:8970afa15acc 226 const graphics_image_t* image_new, float32_t scroll) {
dkato 0:8970afa15acc 227 Swap_FrameBuffer(frmbuf_info);
dkato 0:8970afa15acc 228 /* Clear */
dkato 0:8970afa15acc 229 canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
dkato 0:8970afa15acc 230 /* Draw a image */
dkato 0:8970afa15acc 231 canvas2d.globalAlpha = 1.0f;
dkato 0:8970afa15acc 232 canvas2d.drawImage((const graphics_image_t*)image_last,
dkato 0:8970afa15acc 233 (int_t)(frmbuf_info->width * scroll) * SCROLL_DIRECTION, 0,
dkato 0:8970afa15acc 234 frmbuf_info->width, frmbuf_info->height);
dkato 0:8970afa15acc 235 R_OSPL_CLEAR_ERROR();
dkato 0:8970afa15acc 236 canvas2d.globalAlpha = 1.0f;
dkato 0:8970afa15acc 237 canvas2d.drawImage((const graphics_image_t*)image_new,
dkato 0:8970afa15acc 238 ((int_t)(frmbuf_info->width * scroll) - frmbuf_info->width) * SCROLL_DIRECTION, 0,
dkato 0:8970afa15acc 239 frmbuf_info->width, frmbuf_info->height);
dkato 0:8970afa15acc 240 R_OSPL_CLEAR_ERROR();
dkato 0:8970afa15acc 241 /* Complete drawing */
dkato 0:8970afa15acc 242 R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
dkato 0:8970afa15acc 243 Update_LCD_Display(frmbuf_info);
dkato 0:8970afa15acc 244 }
dkato 0:8970afa15acc 245
dkato 0:8970afa15acc 246 static void draw_image_dissolve(frame_buffer_t* frmbuf_info, const graphics_image_t* image_last,
dkato 0:8970afa15acc 247 const graphics_image_t* image_new, float32_t alpha) {
dkato 0:8970afa15acc 248 Swap_FrameBuffer(frmbuf_info);
dkato 0:8970afa15acc 249 /* Clear */
dkato 0:8970afa15acc 250 canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
dkato 0:8970afa15acc 251 /* Draw a image */
dkato 0:8970afa15acc 252 canvas2d.globalAlpha = 1.0f - alpha;
dkato 0:8970afa15acc 253 canvas2d.drawImage((const graphics_image_t*)image_last, 0, 0, frmbuf_info->width, frmbuf_info->height);
dkato 0:8970afa15acc 254 R_OSPL_CLEAR_ERROR();
dkato 0:8970afa15acc 255 canvas2d.globalAlpha = alpha;
dkato 0:8970afa15acc 256 canvas2d.drawImage((const graphics_image_t*)image_new, 0, 0, frmbuf_info->width, frmbuf_info->height);
dkato 0:8970afa15acc 257 R_OSPL_CLEAR_ERROR();
dkato 0:8970afa15acc 258 /* Complete drawing */
dkato 0:8970afa15acc 259 R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
dkato 0:8970afa15acc 260 Update_LCD_Display(frmbuf_info);
dkato 0:8970afa15acc 261 }
dkato 0:8970afa15acc 262
dkato 0:8970afa15acc 263 int main(void) {
dkato 0:8970afa15acc 264 errnum_t err;
dkato 0:8970afa15acc 265 Canvas2D_ContextConfigClass config;
dkato 0:8970afa15acc 266
dkato 0:8970afa15acc 267 memset(user_frame_buffer, 0, sizeof(user_frame_buffer));
dkato 0:8970afa15acc 268 memset(user_frame_buffer2, 0, sizeof(user_frame_buffer2));
dkato 0:8970afa15acc 269 frame_buffer_info.buffer_address[0] = user_frame_buffer;
dkato 0:8970afa15acc 270 frame_buffer_info.buffer_address[1] = user_frame_buffer2;
dkato 0:8970afa15acc 271 frame_buffer_info.buffer_count = 2;
dkato 0:8970afa15acc 272 frame_buffer_info.show_buffer_index = 0;
dkato 0:8970afa15acc 273 frame_buffer_info.draw_buffer_index = 0;
dkato 0:8970afa15acc 274 frame_buffer_info.width = LCD_PIXEL_WIDTH;
dkato 0:8970afa15acc 275 frame_buffer_info.byte_per_pixel = FRAME_BUFFER_BYTE_PER_PIXEL;
dkato 0:8970afa15acc 276 frame_buffer_info.stride = LCD_PIXEL_WIDTH * FRAME_BUFFER_BYTE_PER_PIXEL;
dkato 0:8970afa15acc 277 frame_buffer_info.height = LCD_PIXEL_HEIGHT;
dkato 0:8970afa15acc 278 frame_buffer_info.pixel_format = PIXEL_FORMAT_RGB565;
dkato 0:8970afa15acc 279 Init_LCD_Display(frame_buffer_info.buffer_address[0]);
dkato 0:8970afa15acc 280
dkato 0:8970afa15acc 281 config.frame_buffer = &frame_buffer_info;
dkato 0:8970afa15acc 282 canvas2d = R_RGA_New_Canvas2D_ContextClass(config);
dkato 0:8970afa15acc 283 err = R_OSPL_GetErrNum();
dkato 0:8970afa15acc 284 if (err != 0) {
dkato 0:8970afa15acc 285 printf("Line %d, error %d\n", __LINE__, err);
dkato 0:8970afa15acc 286 while (1);
dkato 0:8970afa15acc 287 }
dkato 0:8970afa15acc 288 Start_LCD_Display();
dkato 0:8970afa15acc 289
dkato 0:8970afa15acc 290 SDFileSystem sd(P8_5, P8_6, P8_3, P8_4, "sd");
dkato 0:8970afa15acc 291 FILE * fp = NULL;
dkato 0:8970afa15acc 292 DIR * d = NULL;
dkato 0:8970afa15acc 293 char file_path[sizeof(FLD_PATH) + FILE_NAME_LEN];
dkato 0:8970afa15acc 294 int jpeg_toggle = 0;
dkato 0:8970afa15acc 295 bool first_view = true;
dkato 0:8970afa15acc 296 size_t ret;
dkato 0:8970afa15acc 297
dkato 0:8970afa15acc 298 while (1) {
dkato 0:8970afa15acc 299 // file search
dkato 0:8970afa15acc 300 if (d == NULL) {
dkato 0:8970afa15acc 301 d = opendir(FLD_PATH);
dkato 0:8970afa15acc 302 }
dkato 0:8970afa15acc 303 struct dirent * p;
dkato 0:8970afa15acc 304 while ((p = readdir(d)) != NULL) {
dkato 0:8970afa15acc 305 size_t len = strlen(p->d_name);
dkato 0:8970afa15acc 306 if ((len > 4) && (len < FILE_NAME_LEN)
dkato 0:8970afa15acc 307 && (strncasecmp(&p->d_name[len - 4], ".jpg", 4) == 0)) {
dkato 0:8970afa15acc 308 strcpy(file_path, FLD_PATH);
dkato 0:8970afa15acc 309 strcat(file_path, p->d_name);
dkato 0:8970afa15acc 310 fp = fopen(file_path, "r");
dkato 0:8970afa15acc 311 ret = fread(&JpegBuffer[jpeg_toggle], sizeof(char), MAX_JPEG_SIZE, fp);
dkato 0:8970afa15acc 312 fclose(fp);
dkato 0:8970afa15acc 313 if (ret < MAX_JPEG_SIZE) {
dkato 0:8970afa15acc 314 if (first_view != false) {
dkato 0:8970afa15acc 315 // Effect NONE
dkato 0:8970afa15acc 316 first_view = false;
dkato 0:8970afa15acc 317 draw_image(&frame_buffer_info, (const graphics_image_t*)&JpegBuffer[jpeg_toggle]);
dkato 0:8970afa15acc 318 } else {
dkato 0:8970afa15acc 319 bool key_press = false;
dkato 0:8970afa15acc 320 // Wait timeout or key press
dkato 0:8970afa15acc 321 for (int i = 0; i < WAIT_TIME; i += 100) {
dkato 0:8970afa15acc 322 if (button == 0) {
dkato 0:8970afa15acc 323 key_press = true;
dkato 0:8970afa15acc 324 break;
dkato 0:8970afa15acc 325 }
dkato 0:8970afa15acc 326 Thread::wait(100);
dkato 0:8970afa15acc 327 }
dkato 0:8970afa15acc 328 if (key_press == false) {
dkato 0:8970afa15acc 329 // Effect DISSOLVE
dkato 0:8970afa15acc 330 for (int i = 1; i <= DISSOLVE_STEP_NUM; i++) {
dkato 0:8970afa15acc 331 draw_image_dissolve(&frame_buffer_info,
dkato 0:8970afa15acc 332 (const graphics_image_t*)&JpegBuffer[!jpeg_toggle],
dkato 0:8970afa15acc 333 (const graphics_image_t*)&JpegBuffer[jpeg_toggle],
dkato 0:8970afa15acc 334 (float32_t)i / (float32_t)DISSOLVE_STEP_NUM);
dkato 0:8970afa15acc 335 }
dkato 0:8970afa15acc 336 } else {
dkato 0:8970afa15acc 337 // Effect SCROLL
dkato 0:8970afa15acc 338 for (int i = 1; i <= SCROLL_STEP_NUM; i++) {
dkato 0:8970afa15acc 339 draw_image_scroll(&frame_buffer_info,
dkato 0:8970afa15acc 340 (const graphics_image_t*)&JpegBuffer[!jpeg_toggle],
dkato 0:8970afa15acc 341 (const graphics_image_t*)&JpegBuffer[jpeg_toggle],
dkato 0:8970afa15acc 342 (float32_t)i / (float32_t)SCROLL_STEP_NUM);
dkato 0:8970afa15acc 343 }
dkato 0:8970afa15acc 344 }
dkato 0:8970afa15acc 345 }
dkato 0:8970afa15acc 346 jpeg_toggle = !jpeg_toggle;
dkato 0:8970afa15acc 347 }
dkato 0:8970afa15acc 348 break;
dkato 0:8970afa15acc 349 }
dkato 0:8970afa15acc 350 }
dkato 0:8970afa15acc 351 if (p == NULL) {
dkato 0:8970afa15acc 352 closedir(d);
dkato 0:8970afa15acc 353 d = NULL;
dkato 0:8970afa15acc 354 }
dkato 0:8970afa15acc 355 }
dkato 0:8970afa15acc 356 }