GR-PEACH Digital Signage sample for DISPLAY SHIELD. USB edition.

Dependencies:   GR-PEACH_video GraphicsFramework R_BSP USBHost mbed scan_folder

概要

USBメモリ内のJPEGファイルを読み出し、ディスプレイに表示します。
USBマウスを接続することで、次ファイル遷移、前ファイル遷移、マウスポインタ表示、ファイル表示時間変更などの操作ができます。
一定時間表示(時間の変更可)する、USBマウスを接続し左クリックを行う、または、USER_BUTTON0が押されると次のJPEGファイルを表示します。
JPEGファイルはディスプレイに出力する画像解像度にあわせて拡大/縮小されます。そのため、JPEGファイルはディスプレイ出力に近い解像度の方が元データに近い画質で表示されます。
JPEGファイルの表示順はディレクトリ解析順です。表示したい順にJPEGファイルを1ファイルずつUSBメモリに書き込んでください。

Information

micro SDカードを使用する場合はこちらのサンプルをご利用ください。
https://developer.mbed.org/users/dkato/code/GR-PEACH_Digital_Signage_display_shield/

表示可能なJPEGファイル

ファイル位置フォルダの深さはルートフォルダを含め8階層まで。
ファイル名半角英数字 (全角には対応していません)
拡張子".jpg" , ".JPG"
解像度制限上限1280 x 800 ピクセル。MCU単位のサイズ。
サイズ上限450Kbyte
フォーマットJPEGベースラインに準拠 (最適化、および、プログレッシブには対応していません)


構成

GR-PEACH、USBメモリ、USBマウス(マウス操作を行わない場合は不要)、USB HUB(USBマウス使用時)、DISPLAY SHIELD、ディスプレイ、DVI-Dケーブル。
本サンプルを使用する際は、GR-PEACHのJP3、JP8、JP9、JP10、JP11をショートする必要があります。
Jumper位置についてはこちらを参照ください。
https://developer.mbed.org/teams/Renesas/wiki/Jumper-settings-of-GR-PEACH

/media/uploads/RyoheiHagimoto/usb.jpg

機能設定

下記のマクロを変更することで、一部機能を変更できます。

main.cpp

/**** User Selection *********/
#define WAIT_TIME                           (10000) /* wait time (ms) */
#define DISSOLVE_STEP_NUM                   (16)    /* minimum 1 */
#define SCROLL_STEP_NUM                     (8)     /* minimum 1 */
#define SCROLL_DIRECTION                    (-1)    /* Select 1(left to right) or -1(right to left) */
#define LCD_SIZE                            HD_720p /* Select SVGA, XGA, or HD_720p */
/*****************************/


WAIT_TIME一つのJPEGファイルを表示する時間を設定します。単位はmsです。
DISSOLVE_STEP_NUM時間経過によって表示が変わる際のDISSOLVEエフェクトの長さを設定します。設定可能な最小値は1です。
SCROLL_STEP_NUMUSER_BUTTON0によって表示が変わる際のSCROLLエフェクトの長さを設定します。設定可能な最小値は1です。
SCROLL_DIRECTIONUSER_BUTTON0によって表示が変わる際のSCROLLエフェクトのスクロール方向を設定します。1を設定すると右へスクロール、-1を設定すると左へスクロールします。
LCD_SIZEディスプレイに出力する画面解像度を設定します。SVGA(800 x 600)、XGA(1024 x 768)、HD_720p(1280 x 720)より選択できます。


マウス操作

USBマウスを接続することで、以下の操作が可能です。

操作動作
左クリック次のJPEGファイルを表示します。
右クリック一つ前のJPEGファイルを表示します。
センタークリック
(センターホイール押し込み)
マウスポインタ表示。マウスポインタ表示中は時間経過による次ファイル遷移は行いません。
センターホイールマウスポインタ表示中にセンターホイールを回転させると、JPEGファイルの表示する時間を変更できます。

一部使用できないUSBマウスがあります。使用可能なUSBマウスは下記サンプルで動作するデバイスのみです。
https://developer.mbed.org/handbook/USBHostMouse

GIMPを使ったJPEGベースラインに準拠 したJPEGファイルの作成例

このサンプルでは、JPEGベースラインに準拠したJPEGファイルのみ表示可能です。
表示できないJPEGファイルがある場合は以下の手順をお試しください。

  1. 画像編集ツールGIMPをインストールする
  2. GIMPで画像ファイルを開く
    1. 画像ファイル上で右クリック
    2. Edit with GIMPを選択
  3. 画像サイズを変更する
    1. 「画像」→「画像の拡大・縮小」を選んで、画像の拡大・縮小ダイアログをから変更する
  4. JPEG形式で保存
    1. 「ファイル」→「名前をつけてエクスポート」で保存ダイアログを表示
    2. 保存先フォルダを選択 (ファイルの拡張子は.jpg)
    3. 「エクスポート」をクリックし、エクスポートダイアログを表示
    4. 「+詳細設定」の「+」部分をクリックして詳細設定画面を表示
    5. 「最適化」と「プログレッシブ」のチェックを外す
    6. エクスポートボタンを押す (注意:出力サイズが450Kbyteを超える場合は、品質値を調整して下さい。)
Committer:
dkato
Date:
Tue May 31 02:14:35 2016 +0000
Revision:
0:6627ec9d57e6
first commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dkato 0:6627ec9d57e6 1 /*
dkato 0:6627ec9d57e6 2 Permission is hereby granted, free of charge, to any person obtaining a copy
dkato 0:6627ec9d57e6 3 of this software and associated documentation files (the "Software"), to deal
dkato 0:6627ec9d57e6 4 in the Software without restriction, including without limitation the rights
dkato 0:6627ec9d57e6 5 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
dkato 0:6627ec9d57e6 6 copies of the Software, and to permit persons to whom the Software is
dkato 0:6627ec9d57e6 7 furnished to do so, subject to the following conditions:
dkato 0:6627ec9d57e6 8
dkato 0:6627ec9d57e6 9 The above copyright notice and this permission notice shall be included in
dkato 0:6627ec9d57e6 10 all copies or substantial portions of the Software.
dkato 0:6627ec9d57e6 11
dkato 0:6627ec9d57e6 12 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
dkato 0:6627ec9d57e6 13 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
dkato 0:6627ec9d57e6 14 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
dkato 0:6627ec9d57e6 15 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
dkato 0:6627ec9d57e6 16 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
dkato 0:6627ec9d57e6 17 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
dkato 0:6627ec9d57e6 18 THE SOFTWARE.
dkato 0:6627ec9d57e6 19 */
dkato 0:6627ec9d57e6 20
dkato 0:6627ec9d57e6 21 #include "mbed.h"
dkato 0:6627ec9d57e6 22 #include "DisplayBace.h"
dkato 0:6627ec9d57e6 23 #include "RGA.h"
dkato 0:6627ec9d57e6 24 #include "rtos.h"
dkato 0:6627ec9d57e6 25 #include "USBHostMSD.h"
dkato 0:6627ec9d57e6 26 #include "USBHostMouse.h"
dkato 0:6627ec9d57e6 27 #include "BinaryImage_RZ_A1H.h"
dkato 0:6627ec9d57e6 28 #include "scan_folder.h"
dkato 0:6627ec9d57e6 29
dkato 0:6627ec9d57e6 30 #define SVGA (0u) /* 800x600@60 37.9kHz/60Hz */
dkato 0:6627ec9d57e6 31 #define XGA (1u) /* 1024x768@60 48.4kHz/60Hz */
dkato 0:6627ec9d57e6 32 #define HD_720p (2u) /* 1280x720@60 45.0kHz/60Hz */
dkato 0:6627ec9d57e6 33
dkato 0:6627ec9d57e6 34 /**** User Selection *********/
dkato 0:6627ec9d57e6 35 #define WAIT_TIME (10000) /* wait time (ms) */
dkato 0:6627ec9d57e6 36 #define DISSOLVE_STEP_NUM (16) /* minimum 1 */
dkato 0:6627ec9d57e6 37 #define SCROLL_STEP_NUM (8) /* minimum 1 */
dkato 0:6627ec9d57e6 38 #define SCROLL_DIRECTION (-1) /* Select 1(left to right) or -1(right to left) */
dkato 0:6627ec9d57e6 39 #define LCD_SIZE HD_720p /* Select SVGA, XGA, or HD_720p */
dkato 0:6627ec9d57e6 40 /*****************************/
dkato 0:6627ec9d57e6 41
dkato 0:6627ec9d57e6 42 #if (SCROLL_DIRECTION == -1)
dkato 0:6627ec9d57e6 43 #define SCROLL_DIRECTION_NEXT (-1)
dkato 0:6627ec9d57e6 44 #define SCROLL_DIRECTION_PREV (1)
dkato 0:6627ec9d57e6 45 #else
dkato 0:6627ec9d57e6 46 #define SCROLL_DIRECTION_NEXT (1)
dkato 0:6627ec9d57e6 47 #define SCROLL_DIRECTION_PREV (-1)
dkato 0:6627ec9d57e6 48 #endif
dkato 0:6627ec9d57e6 49
dkato 0:6627ec9d57e6 50 /* LCD Parameter */
dkato 0:6627ec9d57e6 51 #define LCD_INPUT_CLOCK (66.67)
dkato 0:6627ec9d57e6 52 #if ( LCD_SIZE == SVGA )
dkato 0:6627ec9d57e6 53 #define LCD_OUTPUT_CLOCK (40.0003)
dkato 0:6627ec9d57e6 54 #define LCD_PIXEL_WIDTH (800u)
dkato 0:6627ec9d57e6 55 #define LCD_PIXEL_HEIGHT (600u)
dkato 0:6627ec9d57e6 56 #define LCD_H_BACK_PORCH (88u)
dkato 0:6627ec9d57e6 57 #define LCD_H_FRONT_PORCH (40u)
dkato 0:6627ec9d57e6 58 #define LCD_H_SYNC_WIDTH (128u)
dkato 0:6627ec9d57e6 59 #define LCD_V_BACK_PORCH (23u)
dkato 0:6627ec9d57e6 60 #define LCD_V_FRONT_PORCH (1u)
dkato 0:6627ec9d57e6 61 #define LCD_V_SYNC_WIDTH (4u)
dkato 0:6627ec9d57e6 62 #elif ( LCD_SIZE == XGA )
dkato 0:6627ec9d57e6 63 #define LCD_OUTPUT_CLOCK (65.0002)
dkato 0:6627ec9d57e6 64 #define LCD_PIXEL_WIDTH (1024u)
dkato 0:6627ec9d57e6 65 #define LCD_PIXEL_HEIGHT (768u)
dkato 0:6627ec9d57e6 66 #define LCD_H_BACK_PORCH (160u)
dkato 0:6627ec9d57e6 67 #define LCD_H_FRONT_PORCH (24u)
dkato 0:6627ec9d57e6 68 #define LCD_H_SYNC_WIDTH (136u)
dkato 0:6627ec9d57e6 69 #define LCD_V_BACK_PORCH (29u)
dkato 0:6627ec9d57e6 70 #define LCD_V_FRONT_PORCH (3u)
dkato 0:6627ec9d57e6 71 #define LCD_V_SYNC_WIDTH (6u)
dkato 0:6627ec9d57e6 72 #elif ( LCD_SIZE == HD_720p )
dkato 0:6627ec9d57e6 73 #define LCD_OUTPUT_CLOCK (74.1800)
dkato 0:6627ec9d57e6 74 #define LCD_PIXEL_WIDTH (1280u)
dkato 0:6627ec9d57e6 75 #define LCD_PIXEL_HEIGHT (720u)
dkato 0:6627ec9d57e6 76 #define LCD_H_BACK_PORCH (220u)
dkato 0:6627ec9d57e6 77 #define LCD_H_FRONT_PORCH (70u)
dkato 0:6627ec9d57e6 78 #define LCD_H_SYNC_WIDTH (80u)
dkato 0:6627ec9d57e6 79 #define LCD_V_BACK_PORCH (20u)
dkato 0:6627ec9d57e6 80 #define LCD_V_FRONT_PORCH (5u)
dkato 0:6627ec9d57e6 81 #define LCD_V_SYNC_WIDTH (5u)
dkato 0:6627ec9d57e6 82 #endif
dkato 0:6627ec9d57e6 83
dkato 0:6627ec9d57e6 84 /* FRAME BUFFER Parameter */
dkato 0:6627ec9d57e6 85 #define FRAME_BUFFER_BYTE_PER_PIXEL (2)
dkato 0:6627ec9d57e6 86 #define FRAME_BUFFER_STRIDE (((LCD_PIXEL_WIDTH * FRAME_BUFFER_BYTE_PER_PIXEL) + 31u) & ~31u)
dkato 0:6627ec9d57e6 87
dkato 0:6627ec9d57e6 88 #define EVENT_NONE (0)
dkato 0:6627ec9d57e6 89 #define EVENT_NEXT (1)
dkato 0:6627ec9d57e6 90 #define EVENT_PREV (2)
dkato 0:6627ec9d57e6 91
dkato 0:6627ec9d57e6 92 #define MAX_JPEG_SIZE (1024 * 450)
dkato 0:6627ec9d57e6 93 #define MOUNT_NAME "usb"
dkato 0:6627ec9d57e6 94 static const char_t * extension_tbl[] = {
dkato 0:6627ec9d57e6 95 ".jpg",
dkato 0:6627ec9d57e6 96 NULL
dkato 0:6627ec9d57e6 97 };
dkato 0:6627ec9d57e6 98 DigitalIn button(USER_BUTTON0);
dkato 0:6627ec9d57e6 99 I2C i2c(I2C_SDA, I2C_SCL);
dkato 0:6627ec9d57e6 100 DisplayBase Display;
dkato 0:6627ec9d57e6 101 Canvas2D_ContextClass canvas2d;
dkato 0:6627ec9d57e6 102
dkato 0:6627ec9d57e6 103 #if defined(__ICCARM__)
dkato 0:6627ec9d57e6 104 #pragma data_alignment=32
dkato 0:6627ec9d57e6 105 static uint8_t user_frame_buffer[FRAME_BUFFER_STRIDE * LCD_PIXEL_HEIGHT];
dkato 0:6627ec9d57e6 106 static uint8_t user_frame_buffer2[FRAME_BUFFER_STRIDE * LCD_PIXEL_HEIGHT];
dkato 0:6627ec9d57e6 107 #pragma data_alignment=8
dkato 0:6627ec9d57e6 108 static uint8_t JpegBuffer[MAX_JPEG_SIZE]@ ".mirrorram"; //8 bytes aligned!;
dkato 0:6627ec9d57e6 109 #pragma data_alignment=4
dkato 0:6627ec9d57e6 110 #else
dkato 0:6627ec9d57e6 111 static uint8_t user_frame_buffer[FRAME_BUFFER_STRIDE * LCD_PIXEL_HEIGHT]__attribute((aligned(32))); /* 32 bytes aligned */
dkato 0:6627ec9d57e6 112 static uint8_t user_frame_buffer2[FRAME_BUFFER_STRIDE * LCD_PIXEL_HEIGHT]__attribute((aligned(32))); /* 32 bytes aligned */
dkato 0:6627ec9d57e6 113 static uint8_t JpegBuffer[MAX_JPEG_SIZE]__attribute((section("NC_BSS"),aligned(8))); //8 bytes aligned!;
dkato 0:6627ec9d57e6 114 #endif
dkato 0:6627ec9d57e6 115 static frame_buffer_t frame_buffer_info;
dkato 0:6627ec9d57e6 116 static volatile int32_t vsync_count = 0;
dkato 0:6627ec9d57e6 117 static ScanFolder scan_foler;
dkato 0:6627ec9d57e6 118 static int mouse_pos_x = 0;
dkato 0:6627ec9d57e6 119 static int mouse_pos_y = 0;
dkato 0:6627ec9d57e6 120 static bool mouse_pos = false;
dkato 0:6627ec9d57e6 121 static bool mouse_view = false;
dkato 0:6627ec9d57e6 122 static bool mouse_disp_time = false;
dkato 0:6627ec9d57e6 123 static int event_req = EVENT_NONE;
dkato 0:6627ec9d57e6 124 static int disp_time = WAIT_TIME;
dkato 0:6627ec9d57e6 125
dkato 0:6627ec9d57e6 126 static void IntCallbackFunc_Vsync(DisplayBase::int_type_t int_type) {
dkato 0:6627ec9d57e6 127 /* Interrupt callback function for Vsync interruption */
dkato 0:6627ec9d57e6 128 if (vsync_count > 0) {
dkato 0:6627ec9d57e6 129 vsync_count--;
dkato 0:6627ec9d57e6 130 }
dkato 0:6627ec9d57e6 131 }
dkato 0:6627ec9d57e6 132
dkato 0:6627ec9d57e6 133 static void Wait_Vsync(const int32_t wait_count) {
dkato 0:6627ec9d57e6 134 /* Wait for the specified number of times Vsync occurs */
dkato 0:6627ec9d57e6 135 vsync_count = wait_count;
dkato 0:6627ec9d57e6 136 while (vsync_count > 0) {
dkato 0:6627ec9d57e6 137 /* Do nothing */
dkato 0:6627ec9d57e6 138 }
dkato 0:6627ec9d57e6 139 }
dkato 0:6627ec9d57e6 140
dkato 0:6627ec9d57e6 141 static void Init_LCD_Display(uint8_t* disp_buf) {
dkato 0:6627ec9d57e6 142 /* Create DisplayBase object */
dkato 0:6627ec9d57e6 143 DisplayBase::graphics_error_t error;
dkato 0:6627ec9d57e6 144 DisplayBase::rect_t rect;
dkato 0:6627ec9d57e6 145 DisplayBase::lcd_config_t lcd_config;
dkato 0:6627ec9d57e6 146 PinName lcd_pin[28] = {
dkato 0:6627ec9d57e6 147 /* data pin */
dkato 0:6627ec9d57e6 148 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:6627ec9d57e6 149 P4_7, P4_6, P4_5, P4_4, P10_12, P10_13, P10_14, P10_15, P3_15, P3_14, P3_13,
dkato 0:6627ec9d57e6 150 P3_12, P3_11, P3_10, P3_9, P3_8
dkato 0:6627ec9d57e6 151 };
dkato 0:6627ec9d57e6 152
dkato 0:6627ec9d57e6 153 Thread::wait(100);
dkato 0:6627ec9d57e6 154
dkato 0:6627ec9d57e6 155 lcd_config.lcd_type = DisplayBase::LCD_TYPE_PARALLEL_RGB;
dkato 0:6627ec9d57e6 156 lcd_config.intputClock = LCD_INPUT_CLOCK;
dkato 0:6627ec9d57e6 157 lcd_config.outputClock = LCD_OUTPUT_CLOCK;
dkato 0:6627ec9d57e6 158 lcd_config.lcd_outformat = DisplayBase::LCD_OUTFORMAT_RGB888;
dkato 0:6627ec9d57e6 159 lcd_config.lcd_edge = DisplayBase::EDGE_RISING;
dkato 0:6627ec9d57e6 160 lcd_config.h_toatal_period = (LCD_PIXEL_WIDTH + LCD_H_FRONT_PORCH + LCD_H_BACK_PORCH + LCD_H_SYNC_WIDTH);
dkato 0:6627ec9d57e6 161 lcd_config.v_toatal_period = (LCD_PIXEL_HEIGHT + LCD_V_FRONT_PORCH + LCD_V_BACK_PORCH + LCD_V_SYNC_WIDTH);
dkato 0:6627ec9d57e6 162
dkato 0:6627ec9d57e6 163 lcd_config.h_disp_widht = LCD_PIXEL_WIDTH;
dkato 0:6627ec9d57e6 164 lcd_config.v_disp_widht = LCD_PIXEL_HEIGHT;
dkato 0:6627ec9d57e6 165 lcd_config.h_back_porch = LCD_H_BACK_PORCH;
dkato 0:6627ec9d57e6 166 lcd_config.v_back_porch = LCD_V_BACK_PORCH;
dkato 0:6627ec9d57e6 167
dkato 0:6627ec9d57e6 168 lcd_config.h_sync_port = DisplayBase::LCD_TCON_PIN_1;
dkato 0:6627ec9d57e6 169 lcd_config.h_sync_port_polarity = DisplayBase::SIG_POL_NOT_INVERTED;
dkato 0:6627ec9d57e6 170 lcd_config.h_sync_width = LCD_H_SYNC_WIDTH;
dkato 0:6627ec9d57e6 171
dkato 0:6627ec9d57e6 172 lcd_config.v_sync_port = DisplayBase::LCD_TCON_PIN_2;
dkato 0:6627ec9d57e6 173 lcd_config.v_sync_port_polarity = DisplayBase::SIG_POL_NOT_INVERTED;
dkato 0:6627ec9d57e6 174 lcd_config.v_sync_width = LCD_V_SYNC_WIDTH;
dkato 0:6627ec9d57e6 175
dkato 0:6627ec9d57e6 176 lcd_config.de_port = DisplayBase::LCD_TCON_PIN_0;
dkato 0:6627ec9d57e6 177 lcd_config.de_port_polarity = DisplayBase::SIG_POL_NOT_INVERTED;
dkato 0:6627ec9d57e6 178
dkato 0:6627ec9d57e6 179 /* Graphics initialization process */
dkato 0:6627ec9d57e6 180 error = Display.Graphics_init(&lcd_config);
dkato 0:6627ec9d57e6 181 if (error != DisplayBase::GRAPHICS_OK) {
dkato 0:6627ec9d57e6 182 printf("Line %d, error %d\n", __LINE__, error);
dkato 0:6627ec9d57e6 183 while (1);
dkato 0:6627ec9d57e6 184 }
dkato 0:6627ec9d57e6 185
dkato 0:6627ec9d57e6 186 /* Interrupt callback function setting (Vsync signal output from scaler 0) */
dkato 0:6627ec9d57e6 187 error = Display.Graphics_Irq_Handler_Set(DisplayBase::INT_TYPE_S0_LO_VSYNC, 0, IntCallbackFunc_Vsync);
dkato 0:6627ec9d57e6 188 if (error != DisplayBase::GRAPHICS_OK) {
dkato 0:6627ec9d57e6 189 printf("Line %d, error %d\n", __LINE__, error);
dkato 0:6627ec9d57e6 190 while (1);
dkato 0:6627ec9d57e6 191 }
dkato 0:6627ec9d57e6 192
dkato 0:6627ec9d57e6 193 Display.Graphics_Lcd_Port_Init(lcd_pin, 28);
dkato 0:6627ec9d57e6 194 rect.vs = 0;
dkato 0:6627ec9d57e6 195 rect.vw = LCD_PIXEL_HEIGHT;
dkato 0:6627ec9d57e6 196 rect.hs = 0;
dkato 0:6627ec9d57e6 197 rect.hw = LCD_PIXEL_WIDTH;
dkato 0:6627ec9d57e6 198
dkato 0:6627ec9d57e6 199 Display.Graphics_Read_Setting(
dkato 0:6627ec9d57e6 200 DisplayBase::GRAPHICS_LAYER_0,
dkato 0:6627ec9d57e6 201 (void *)disp_buf,
dkato 0:6627ec9d57e6 202 FRAME_BUFFER_STRIDE,
dkato 0:6627ec9d57e6 203 DisplayBase::GRAPHICS_FORMAT_RGB565,
dkato 0:6627ec9d57e6 204 DisplayBase::WR_RD_WRSWA_32_16BIT,
dkato 0:6627ec9d57e6 205 &rect
dkato 0:6627ec9d57e6 206 );
dkato 0:6627ec9d57e6 207 }
dkato 0:6627ec9d57e6 208
dkato 0:6627ec9d57e6 209 static void Start_LCD_Display(void) {
dkato 0:6627ec9d57e6 210 Display.Graphics_Start(DisplayBase::GRAPHICS_LAYER_0);
dkato 0:6627ec9d57e6 211 }
dkato 0:6627ec9d57e6 212
dkato 0:6627ec9d57e6 213 static void Update_LCD_Display(frame_buffer_t * frmbuf_info) {
dkato 0:6627ec9d57e6 214 Display.Graphics_Read_Change(DisplayBase::GRAPHICS_LAYER_0,
dkato 0:6627ec9d57e6 215 (void *)frmbuf_info->buffer_address[frmbuf_info->draw_buffer_index]);
dkato 0:6627ec9d57e6 216 Wait_Vsync(1);
dkato 0:6627ec9d57e6 217 }
dkato 0:6627ec9d57e6 218
dkato 0:6627ec9d57e6 219 static void Swap_FrameBuffer(frame_buffer_t * frmbuf_info) {
dkato 0:6627ec9d57e6 220 if (frmbuf_info->draw_buffer_index == 1) {
dkato 0:6627ec9d57e6 221 frmbuf_info->draw_buffer_index = 0;
dkato 0:6627ec9d57e6 222 } else {
dkato 0:6627ec9d57e6 223 frmbuf_info->draw_buffer_index = 1;
dkato 0:6627ec9d57e6 224 }
dkato 0:6627ec9d57e6 225 }
dkato 0:6627ec9d57e6 226
dkato 0:6627ec9d57e6 227 static void draw_mouse_pos(void) {
dkato 0:6627ec9d57e6 228 /* mouse pos */
dkato 0:6627ec9d57e6 229 if (mouse_pos != false) {
dkato 0:6627ec9d57e6 230 mouse_view = true;
dkato 0:6627ec9d57e6 231 /* Complete drawing */
dkato 0:6627ec9d57e6 232 R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
dkato 0:6627ec9d57e6 233 /* Draw a image */
dkato 0:6627ec9d57e6 234 canvas2d.drawImage(mousu_pos_File, mouse_pos_x, mouse_pos_y);
dkato 0:6627ec9d57e6 235 R_OSPL_CLEAR_ERROR();
dkato 0:6627ec9d57e6 236
dkato 0:6627ec9d57e6 237 if (mouse_disp_time != false) {
dkato 0:6627ec9d57e6 238 const graphics_image_t * p_num;
dkato 0:6627ec9d57e6 239
dkato 0:6627ec9d57e6 240 /* Draw a image */
dkato 0:6627ec9d57e6 241 canvas2d.drawImage(disp_xsec_File, mouse_pos_x + 30, mouse_pos_y);
dkato 0:6627ec9d57e6 242 R_OSPL_CLEAR_ERROR();
dkato 0:6627ec9d57e6 243 switch (disp_time) {
dkato 0:6627ec9d57e6 244 case 0: p_num = number0_File; break;
dkato 0:6627ec9d57e6 245 case 1000: p_num = number1_File; break;
dkato 0:6627ec9d57e6 246 case 2000: p_num = number2_File; break;
dkato 0:6627ec9d57e6 247 case 3000: p_num = number3_File; break;
dkato 0:6627ec9d57e6 248 case 4000: p_num = number4_File; break;
dkato 0:6627ec9d57e6 249 case 5000: p_num = number5_File; break;
dkato 0:6627ec9d57e6 250 case 6000: p_num = number6_File; break;
dkato 0:6627ec9d57e6 251 case 7000: p_num = number7_File; break;
dkato 0:6627ec9d57e6 252 case 8000: p_num = number8_File; break;
dkato 0:6627ec9d57e6 253 case 9000: p_num = number9_File; break;
dkato 0:6627ec9d57e6 254 case 10000: p_num = number10_File; break;
dkato 0:6627ec9d57e6 255 case 11000: p_num = number11_File; break;
dkato 0:6627ec9d57e6 256 case 12000: p_num = number12_File; break;
dkato 0:6627ec9d57e6 257 case 13000: p_num = number13_File; break;
dkato 0:6627ec9d57e6 258 case 14000: p_num = number14_File; break;
dkato 0:6627ec9d57e6 259 case 15000: p_num = number15_File; break;
dkato 0:6627ec9d57e6 260 default: p_num = NULL; break;
dkato 0:6627ec9d57e6 261 }
dkato 0:6627ec9d57e6 262 if (p_num != NULL) {
dkato 0:6627ec9d57e6 263 /* Draw a image */
dkato 0:6627ec9d57e6 264 canvas2d.drawImage(p_num, mouse_pos_x + 136, mouse_pos_y);
dkato 0:6627ec9d57e6 265 R_OSPL_CLEAR_ERROR();
dkato 0:6627ec9d57e6 266 }
dkato 0:6627ec9d57e6 267 }
dkato 0:6627ec9d57e6 268 }
dkato 0:6627ec9d57e6 269 }
dkato 0:6627ec9d57e6 270
dkato 0:6627ec9d57e6 271 static void draw_image(frame_buffer_t* frmbuf_info, const graphics_image_t* image_new) {
dkato 0:6627ec9d57e6 272 Swap_FrameBuffer(frmbuf_info);
dkato 0:6627ec9d57e6 273 /* Clear */
dkato 0:6627ec9d57e6 274 canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
dkato 0:6627ec9d57e6 275 /* Draw a image */
dkato 0:6627ec9d57e6 276 canvas2d.globalAlpha = 1.0f;
dkato 0:6627ec9d57e6 277 canvas2d.drawImage((const graphics_image_t*)image_new, 0, 0, frmbuf_info->width, frmbuf_info->height);
dkato 0:6627ec9d57e6 278 R_OSPL_CLEAR_ERROR();
dkato 0:6627ec9d57e6 279 /* mouse pos */
dkato 0:6627ec9d57e6 280 draw_mouse_pos();
dkato 0:6627ec9d57e6 281 /* Complete drawing */
dkato 0:6627ec9d57e6 282 R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
dkato 0:6627ec9d57e6 283 Update_LCD_Display(frmbuf_info);
dkato 0:6627ec9d57e6 284 }
dkato 0:6627ec9d57e6 285
dkato 0:6627ec9d57e6 286 static void draw_image_scroll(frame_buffer_t* frmbuf_info, const graphics_image_t* image_last,
dkato 0:6627ec9d57e6 287 const graphics_image_t* image_new, float32_t scroll, int ditection) {
dkato 0:6627ec9d57e6 288 Swap_FrameBuffer(frmbuf_info);
dkato 0:6627ec9d57e6 289 /* Clear */
dkato 0:6627ec9d57e6 290 canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
dkato 0:6627ec9d57e6 291 /* Draw a image */
dkato 0:6627ec9d57e6 292 canvas2d.globalAlpha = 1.0f;
dkato 0:6627ec9d57e6 293 canvas2d.drawImage((const graphics_image_t*)image_last,
dkato 0:6627ec9d57e6 294 (int_t)(frmbuf_info->width * scroll) * ditection, 0,
dkato 0:6627ec9d57e6 295 frmbuf_info->width, frmbuf_info->height);
dkato 0:6627ec9d57e6 296 R_OSPL_CLEAR_ERROR();
dkato 0:6627ec9d57e6 297 canvas2d.globalAlpha = 1.0f;
dkato 0:6627ec9d57e6 298 canvas2d.drawImage((const graphics_image_t*)image_new,
dkato 0:6627ec9d57e6 299 ((int_t)(frmbuf_info->width * scroll) - frmbuf_info->width) * ditection, 0,
dkato 0:6627ec9d57e6 300 frmbuf_info->width, frmbuf_info->height);
dkato 0:6627ec9d57e6 301 R_OSPL_CLEAR_ERROR();
dkato 0:6627ec9d57e6 302 /* mouse pos */
dkato 0:6627ec9d57e6 303 draw_mouse_pos();
dkato 0:6627ec9d57e6 304 /* Complete drawing */
dkato 0:6627ec9d57e6 305 R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
dkato 0:6627ec9d57e6 306 Update_LCD_Display(frmbuf_info);
dkato 0:6627ec9d57e6 307 }
dkato 0:6627ec9d57e6 308
dkato 0:6627ec9d57e6 309 static void draw_image_dissolve(frame_buffer_t* frmbuf_info, const graphics_image_t* image_last,
dkato 0:6627ec9d57e6 310 const graphics_image_t* image_new, float32_t alpha) {
dkato 0:6627ec9d57e6 311 Swap_FrameBuffer(frmbuf_info);
dkato 0:6627ec9d57e6 312 /* Clear */
dkato 0:6627ec9d57e6 313 canvas2d.clearRect(0, 0, frmbuf_info->width, frmbuf_info->height);
dkato 0:6627ec9d57e6 314 /* Draw a image */
dkato 0:6627ec9d57e6 315 canvas2d.globalAlpha = 1.0f - alpha;
dkato 0:6627ec9d57e6 316 canvas2d.drawImage((const graphics_image_t*)image_last, 0, 0, frmbuf_info->width, frmbuf_info->height);
dkato 0:6627ec9d57e6 317 R_OSPL_CLEAR_ERROR();
dkato 0:6627ec9d57e6 318 canvas2d.globalAlpha = alpha;
dkato 0:6627ec9d57e6 319 canvas2d.drawImage((const graphics_image_t*)image_new, 0, 0, frmbuf_info->width, frmbuf_info->height);
dkato 0:6627ec9d57e6 320 R_OSPL_CLEAR_ERROR();
dkato 0:6627ec9d57e6 321 /* mouse pos */
dkato 0:6627ec9d57e6 322 draw_mouse_pos();
dkato 0:6627ec9d57e6 323 /* Complete drawing */
dkato 0:6627ec9d57e6 324 R_GRAPHICS_Finish(canvas2d.c_LanguageContext);
dkato 0:6627ec9d57e6 325 Update_LCD_Display(frmbuf_info);
dkato 0:6627ec9d57e6 326 }
dkato 0:6627ec9d57e6 327
dkato 0:6627ec9d57e6 328 static void next_file(uint32_t * file_id, uint32_t total_track) {
dkato 0:6627ec9d57e6 329 if (file_id == NULL) {
dkato 0:6627ec9d57e6 330 // do nothing
dkato 0:6627ec9d57e6 331 } else if (*file_id < (total_track - 1)) {
dkato 0:6627ec9d57e6 332 *file_id += 1;
dkato 0:6627ec9d57e6 333 } else {
dkato 0:6627ec9d57e6 334 *file_id = 0;
dkato 0:6627ec9d57e6 335 }
dkato 0:6627ec9d57e6 336 }
dkato 0:6627ec9d57e6 337
dkato 0:6627ec9d57e6 338 static void prev_file(uint32_t * file_id, uint32_t total_track) {
dkato 0:6627ec9d57e6 339 if (file_id == NULL) {
dkato 0:6627ec9d57e6 340 // do nothing
dkato 0:6627ec9d57e6 341 } else if (*file_id != 0) {
dkato 0:6627ec9d57e6 342 *file_id -= 1;
dkato 0:6627ec9d57e6 343 } else {
dkato 0:6627ec9d57e6 344 *file_id = total_track - 1;
dkato 0:6627ec9d57e6 345 }
dkato 0:6627ec9d57e6 346 }
dkato 0:6627ec9d57e6 347
dkato 0:6627ec9d57e6 348 void onMouseEvent(uint8_t buttons, int8_t x, int8_t y, int8_t z) {
dkato 0:6627ec9d57e6 349 int wk_pos;
dkato 0:6627ec9d57e6 350 int wk_disp_time;
dkato 0:6627ec9d57e6 351 static uint8_t last_buttons = 0;
dkato 0:6627ec9d57e6 352
dkato 0:6627ec9d57e6 353 // printf("buttons: %d, x: %d, y: %d, z: %d\r\n", buttons, x, y, z);
dkato 0:6627ec9d57e6 354
dkato 0:6627ec9d57e6 355 wk_pos = mouse_pos_x;
dkato 0:6627ec9d57e6 356 wk_pos += x;
dkato 0:6627ec9d57e6 357 if (wk_pos < 0) {
dkato 0:6627ec9d57e6 358 wk_pos = 0;
dkato 0:6627ec9d57e6 359 }
dkato 0:6627ec9d57e6 360 if (wk_pos > (LCD_PIXEL_WIDTH - 10)) {
dkato 0:6627ec9d57e6 361 wk_pos = LCD_PIXEL_WIDTH - 10;
dkato 0:6627ec9d57e6 362 }
dkato 0:6627ec9d57e6 363 mouse_pos_x = wk_pos;
dkato 0:6627ec9d57e6 364
dkato 0:6627ec9d57e6 365 wk_pos = mouse_pos_y;
dkato 0:6627ec9d57e6 366 wk_pos += y;
dkato 0:6627ec9d57e6 367 if (wk_pos < 0) {
dkato 0:6627ec9d57e6 368 wk_pos = 0;
dkato 0:6627ec9d57e6 369 }
dkato 0:6627ec9d57e6 370 if (wk_pos > (LCD_PIXEL_HEIGHT - 10)) {
dkato 0:6627ec9d57e6 371 wk_pos = (LCD_PIXEL_HEIGHT - 10);
dkato 0:6627ec9d57e6 372 }
dkato 0:6627ec9d57e6 373 mouse_pos_y = wk_pos;
dkato 0:6627ec9d57e6 374
dkato 0:6627ec9d57e6 375 // left
dkato 0:6627ec9d57e6 376 if (((buttons & 0x01) == 0) && ((last_buttons & 0x01) != 0)) {
dkato 0:6627ec9d57e6 377 if (mouse_disp_time != false) {
dkato 0:6627ec9d57e6 378 mouse_disp_time = false;
dkato 0:6627ec9d57e6 379 } else {
dkato 0:6627ec9d57e6 380 event_req = EVENT_NEXT;
dkato 0:6627ec9d57e6 381 }
dkato 0:6627ec9d57e6 382 }
dkato 0:6627ec9d57e6 383
dkato 0:6627ec9d57e6 384 // rigth
dkato 0:6627ec9d57e6 385 if (((buttons & 0x02) == 0) && ((last_buttons & 0x02) != 0)) {
dkato 0:6627ec9d57e6 386 if (mouse_disp_time != false) {
dkato 0:6627ec9d57e6 387 mouse_disp_time = false;
dkato 0:6627ec9d57e6 388 } else {
dkato 0:6627ec9d57e6 389 event_req = EVENT_PREV;
dkato 0:6627ec9d57e6 390 }
dkato 0:6627ec9d57e6 391 }
dkato 0:6627ec9d57e6 392
dkato 0:6627ec9d57e6 393 if (((buttons & 0x04) != 0) && ((last_buttons & 0x04) == 0)) {
dkato 0:6627ec9d57e6 394 mouse_pos = !mouse_pos;
dkato 0:6627ec9d57e6 395 if (mouse_pos == false) {
dkato 0:6627ec9d57e6 396 mouse_disp_time = false;
dkato 0:6627ec9d57e6 397 }
dkato 0:6627ec9d57e6 398 }
dkato 0:6627ec9d57e6 399
dkato 0:6627ec9d57e6 400 if (z != 0) {
dkato 0:6627ec9d57e6 401 if (mouse_pos != false) {
dkato 0:6627ec9d57e6 402 wk_disp_time = disp_time;
dkato 0:6627ec9d57e6 403 if (z > 0) {
dkato 0:6627ec9d57e6 404 wk_disp_time += 1000;
dkato 0:6627ec9d57e6 405 if (wk_disp_time > 15000) {
dkato 0:6627ec9d57e6 406 wk_disp_time = 15000;
dkato 0:6627ec9d57e6 407 }
dkato 0:6627ec9d57e6 408 } else {
dkato 0:6627ec9d57e6 409 wk_disp_time -= 1000;
dkato 0:6627ec9d57e6 410 if (wk_disp_time < 0) {
dkato 0:6627ec9d57e6 411 wk_disp_time = 0;
dkato 0:6627ec9d57e6 412 }
dkato 0:6627ec9d57e6 413 }
dkato 0:6627ec9d57e6 414 disp_time = wk_disp_time;
dkato 0:6627ec9d57e6 415 mouse_disp_time = true;
dkato 0:6627ec9d57e6 416 }
dkato 0:6627ec9d57e6 417 }
dkato 0:6627ec9d57e6 418
dkato 0:6627ec9d57e6 419 last_buttons = buttons;
dkato 0:6627ec9d57e6 420
dkato 0:6627ec9d57e6 421 // printf("pos_x: %d, pos_y: %d\n", mouse_pos_x, mouse_pos_y);
dkato 0:6627ec9d57e6 422 }
dkato 0:6627ec9d57e6 423
dkato 0:6627ec9d57e6 424 void mouse_task(void const *) {
dkato 0:6627ec9d57e6 425 USBHostMouse mouse;
dkato 0:6627ec9d57e6 426
dkato 0:6627ec9d57e6 427 while(1) {
dkato 0:6627ec9d57e6 428 // try to connect a USB mouse
dkato 0:6627ec9d57e6 429 while(!mouse.connect())
dkato 0:6627ec9d57e6 430 Thread::wait(500);
dkato 0:6627ec9d57e6 431
dkato 0:6627ec9d57e6 432 // when connected, attach handler called on mouse event
dkato 0:6627ec9d57e6 433 mouse.attachEvent(onMouseEvent);
dkato 0:6627ec9d57e6 434
dkato 0:6627ec9d57e6 435 // wait until the mouse is disconnected
dkato 0:6627ec9d57e6 436 while(mouse.connected())
dkato 0:6627ec9d57e6 437 Thread::wait(500);
dkato 0:6627ec9d57e6 438 }
dkato 0:6627ec9d57e6 439 }
dkato 0:6627ec9d57e6 440
dkato 0:6627ec9d57e6 441 int main(void) {
dkato 0:6627ec9d57e6 442 errnum_t err;
dkato 0:6627ec9d57e6 443 Canvas2D_ContextConfigClass config;
dkato 0:6627ec9d57e6 444
dkato 0:6627ec9d57e6 445 memset(user_frame_buffer, 0, sizeof(user_frame_buffer));
dkato 0:6627ec9d57e6 446 memset(user_frame_buffer2, 0, sizeof(user_frame_buffer2));
dkato 0:6627ec9d57e6 447 frame_buffer_info.buffer_address[0] = user_frame_buffer;
dkato 0:6627ec9d57e6 448 frame_buffer_info.buffer_address[1] = user_frame_buffer2;
dkato 0:6627ec9d57e6 449 frame_buffer_info.buffer_count = 2;
dkato 0:6627ec9d57e6 450 frame_buffer_info.show_buffer_index = 0;
dkato 0:6627ec9d57e6 451 frame_buffer_info.draw_buffer_index = 0;
dkato 0:6627ec9d57e6 452 frame_buffer_info.width = LCD_PIXEL_WIDTH;
dkato 0:6627ec9d57e6 453 frame_buffer_info.byte_per_pixel = FRAME_BUFFER_BYTE_PER_PIXEL;
dkato 0:6627ec9d57e6 454 frame_buffer_info.stride = LCD_PIXEL_WIDTH * FRAME_BUFFER_BYTE_PER_PIXEL;
dkato 0:6627ec9d57e6 455 frame_buffer_info.height = LCD_PIXEL_HEIGHT;
dkato 0:6627ec9d57e6 456 frame_buffer_info.pixel_format = PIXEL_FORMAT_RGB565;
dkato 0:6627ec9d57e6 457 Init_LCD_Display(frame_buffer_info.buffer_address[0]);
dkato 0:6627ec9d57e6 458
dkato 0:6627ec9d57e6 459 config.frame_buffer = &frame_buffer_info;
dkato 0:6627ec9d57e6 460 canvas2d = R_RGA_New_Canvas2D_ContextClass(config);
dkato 0:6627ec9d57e6 461 err = R_OSPL_GetErrNum();
dkato 0:6627ec9d57e6 462 if (err != 0) {
dkato 0:6627ec9d57e6 463 printf("Line %d, error %d\n", __LINE__, err);
dkato 0:6627ec9d57e6 464 while (1);
dkato 0:6627ec9d57e6 465 }
dkato 0:6627ec9d57e6 466 Start_LCD_Display();
dkato 0:6627ec9d57e6 467
dkato 0:6627ec9d57e6 468 Thread::wait(100); // wait sd mount
dkato 0:6627ec9d57e6 469 Thread mouseTask(mouse_task, NULL, osPriorityNormal, 1024);
dkato 0:6627ec9d57e6 470
dkato 0:6627ec9d57e6 471 USBHostMSD msd(MOUNT_NAME);
dkato 0:6627ec9d57e6 472 uint32_t now_file_id = 0xffffffff;
dkato 0:6627ec9d57e6 473 uint32_t req_file_id = 0;
dkato 0:6627ec9d57e6 474 int jpeg_toggle = 0;
dkato 0:6627ec9d57e6 475 size_t ret;
dkato 0:6627ec9d57e6 476 uint8_t * p_JpegBuffer[2];
dkato 0:6627ec9d57e6 477 int wait_time = 0;
dkato 0:6627ec9d57e6 478 uint32_t total_file = 0;
dkato 0:6627ec9d57e6 479
dkato 0:6627ec9d57e6 480 p_JpegBuffer[0] = JpegBuffer;
dkato 0:6627ec9d57e6 481 p_JpegBuffer[1] = new uint8_t[MAX_JPEG_SIZE];
dkato 0:6627ec9d57e6 482
dkato 0:6627ec9d57e6 483 while (1) {
dkato 0:6627ec9d57e6 484 bool key_press = false;
dkato 0:6627ec9d57e6 485
dkato 0:6627ec9d57e6 486 /* USB connect check */
dkato 0:6627ec9d57e6 487 while (!msd.connected()) {
dkato 0:6627ec9d57e6 488 if (!msd.connect()) {
dkato 0:6627ec9d57e6 489 Thread::wait(500);
dkato 0:6627ec9d57e6 490 } else {
dkato 0:6627ec9d57e6 491 scan_foler.scan("/"MOUNT_NAME, extension_tbl);
dkato 0:6627ec9d57e6 492 total_file = scan_foler.getTotalFile();
dkato 0:6627ec9d57e6 493 }
dkato 0:6627ec9d57e6 494 }
dkato 0:6627ec9d57e6 495
dkato 0:6627ec9d57e6 496 switch (event_req) {
dkato 0:6627ec9d57e6 497 case EVENT_NEXT:
dkato 0:6627ec9d57e6 498 next_file(&req_file_id, total_file);
dkato 0:6627ec9d57e6 499 key_press = true;
dkato 0:6627ec9d57e6 500 break;
dkato 0:6627ec9d57e6 501 case EVENT_PREV:
dkato 0:6627ec9d57e6 502 prev_file(&req_file_id, total_file);
dkato 0:6627ec9d57e6 503 key_press = true;
dkato 0:6627ec9d57e6 504 break;
dkato 0:6627ec9d57e6 505 case EVENT_NONE:
dkato 0:6627ec9d57e6 506 default:
dkato 0:6627ec9d57e6 507 if (button == 0) {
dkato 0:6627ec9d57e6 508 next_file(&req_file_id, total_file);
dkato 0:6627ec9d57e6 509 key_press = true;
dkato 0:6627ec9d57e6 510 } else if ((wait_time >= disp_time) && (mouse_pos == false)) {
dkato 0:6627ec9d57e6 511 next_file(&req_file_id, total_file);
dkato 0:6627ec9d57e6 512 wait_time = 0;
dkato 0:6627ec9d57e6 513 } else {
dkato 0:6627ec9d57e6 514 // Do Nothing
dkato 0:6627ec9d57e6 515 }
dkato 0:6627ec9d57e6 516 break;
dkato 0:6627ec9d57e6 517 }
dkato 0:6627ec9d57e6 518 event_req = EVENT_NONE;
dkato 0:6627ec9d57e6 519
dkato 0:6627ec9d57e6 520 if (now_file_id != req_file_id) {
dkato 0:6627ec9d57e6 521 FILE * fp = scan_foler.open(req_file_id);
dkato 0:6627ec9d57e6 522 ret = fread(p_JpegBuffer[jpeg_toggle], sizeof(char), MAX_JPEG_SIZE, fp);
dkato 0:6627ec9d57e6 523 scan_foler.close(fp);
dkato 0:6627ec9d57e6 524 if (ret < MAX_JPEG_SIZE) {
dkato 0:6627ec9d57e6 525 if (now_file_id == 0xffffffff) {
dkato 0:6627ec9d57e6 526 // Effect NONE
dkato 0:6627ec9d57e6 527 draw_image(&frame_buffer_info, (const graphics_image_t*)p_JpegBuffer[jpeg_toggle]);
dkato 0:6627ec9d57e6 528 } else if (key_press == false) {
dkato 0:6627ec9d57e6 529 // Effect DISSOLVE
dkato 0:6627ec9d57e6 530 for (int i = 1; i <= DISSOLVE_STEP_NUM; i++) {
dkato 0:6627ec9d57e6 531 draw_image_dissolve(&frame_buffer_info,
dkato 0:6627ec9d57e6 532 (const graphics_image_t*)p_JpegBuffer[!jpeg_toggle],
dkato 0:6627ec9d57e6 533 (const graphics_image_t*)p_JpegBuffer[jpeg_toggle],
dkato 0:6627ec9d57e6 534 (float32_t)i / (float32_t)DISSOLVE_STEP_NUM);
dkato 0:6627ec9d57e6 535 }
dkato 0:6627ec9d57e6 536 } else {
dkato 0:6627ec9d57e6 537 // Effect SCROLL
dkato 0:6627ec9d57e6 538 int direction;
dkato 0:6627ec9d57e6 539 if ((req_file_id == 0) && (now_file_id == (total_file - 1))) {
dkato 0:6627ec9d57e6 540 direction = SCROLL_DIRECTION_NEXT;
dkato 0:6627ec9d57e6 541 } else if ((now_file_id == 0) && (req_file_id == (total_file - 1))) {
dkato 0:6627ec9d57e6 542 direction = SCROLL_DIRECTION_PREV;
dkato 0:6627ec9d57e6 543 } else if (req_file_id > now_file_id) {
dkato 0:6627ec9d57e6 544 direction = SCROLL_DIRECTION_NEXT;
dkato 0:6627ec9d57e6 545 } else {
dkato 0:6627ec9d57e6 546 direction = SCROLL_DIRECTION_PREV;
dkato 0:6627ec9d57e6 547 }
dkato 0:6627ec9d57e6 548 for (int i = 1; i <= SCROLL_STEP_NUM; i++) {
dkato 0:6627ec9d57e6 549 draw_image_scroll(&frame_buffer_info,
dkato 0:6627ec9d57e6 550 (const graphics_image_t*)p_JpegBuffer[!jpeg_toggle],
dkato 0:6627ec9d57e6 551 (const graphics_image_t*)p_JpegBuffer[jpeg_toggle],
dkato 0:6627ec9d57e6 552 (float32_t)i / (float32_t)SCROLL_STEP_NUM, direction);
dkato 0:6627ec9d57e6 553 }
dkato 0:6627ec9d57e6 554 }
dkato 0:6627ec9d57e6 555 jpeg_toggle = !jpeg_toggle;
dkato 0:6627ec9d57e6 556 }
dkato 0:6627ec9d57e6 557 now_file_id = req_file_id;
dkato 0:6627ec9d57e6 558 wait_time = 0;
dkato 0:6627ec9d57e6 559 } else {
dkato 0:6627ec9d57e6 560 if ((mouse_pos != false) || (mouse_view != false)) {
dkato 0:6627ec9d57e6 561 mouse_view = false;
dkato 0:6627ec9d57e6 562 draw_image(&frame_buffer_info, (const graphics_image_t*)p_JpegBuffer[!jpeg_toggle]);
dkato 0:6627ec9d57e6 563 wait_time = 0;
dkato 0:6627ec9d57e6 564 } else {
dkato 0:6627ec9d57e6 565 Thread::wait(100);
dkato 0:6627ec9d57e6 566 wait_time += 100;
dkato 0:6627ec9d57e6 567 }
dkato 0:6627ec9d57e6 568 }
dkato 0:6627ec9d57e6 569 }
dkato 0:6627ec9d57e6 570 }