Image scroll Sample. This program uses GraphicsFramework library and Si1143 sensor.

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

Fork of RGA_HelloWorld by Renesas

About Si1143

Si1143 is a gesture sensor and can be controlled by using the I2C.
This can be detected from the shortest 1cm up to 200cm.
Si1143 emits three infrared LED that is mounted on a substrate, and detects the movement by measuring the reflected light from the external object.

About wiring

VDD3.3V
SCLD15
SDAD14
GNDGND
Committer:
1050186
Date:
Mon May 30 04:55:35 2016 +0000
Revision:
4:2318f8bee89c
Parent:
2:c7faef0ef374
First Commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
1050186 0:84e4649e7707 1 #include "mbed.h"
1050186 0:84e4649e7707 2 #include "rga_func.h"
1050186 4:2318f8bee89c 3 #include "Images/BinaryImage_RZ_A1H.h"
1050186 0:84e4649e7707 4 #include "DisplayBace.h"
1050186 0:84e4649e7707 5 #include "rtos.h"
1050186 4:2318f8bee89c 6 #include "SI1143.h"
1050186 0:84e4649e7707 7
1050186 4:2318f8bee89c 8 /**** LCD Parameter **********/
1050186 4:2318f8bee89c 9 #define LCD_DE_MODE (0)
1050186 4:2318f8bee89c 10 #define LCD_SYNC_MODE (1)
1050186 4:2318f8bee89c 11
1050186 4:2318f8bee89c 12 #define LCD_DOT_CLOCK (13.40f) // 13.4MHz
1050186 0:84e4649e7707 13
1050186 4:2318f8bee89c 14 #define LCD_H_WIDTH (480u)
1050186 4:2318f8bee89c 15 #define LCD_H_BACK_PORCH (43u)
1050186 4:2318f8bee89c 16 #define LCD_H_FRONT_PORCH (52u)
1050186 4:2318f8bee89c 17 #define LCD_H_SYNC_WIDTH (41u)
1050186 4:2318f8bee89c 18
1050186 4:2318f8bee89c 19 #define LCD_V_WIDTH (272u)
1050186 4:2318f8bee89c 20 #define LCD_V_BACK_PORCH (12u)
1050186 4:2318f8bee89c 21 #define LCD_V_FRONT_PORCH (2u)
1050186 4:2318f8bee89c 22 #define LCD_V_SYNC_WIDTH (10u)
1050186 4:2318f8bee89c 23
1050186 4:2318f8bee89c 24 #define LCD_MODE (LCD_SYNC_MODE)
1050186 4:2318f8bee89c 25
1050186 4:2318f8bee89c 26 /*****************************/
1050186 0:84e4649e7707 27
1050186 0:84e4649e7707 28 /* FRAME BUFFER Parameter */
dkato 2:c7faef0ef374 29 #define FRAME_BUFFER_BYTE_PER_PIXEL (2)
1050186 4:2318f8bee89c 30 #define FRAME_BUFFER_STRIDE (((LCD_H_WIDTH * FRAME_BUFFER_BYTE_PER_PIXEL) + 31u) & ~31u)
dkato 2:c7faef0ef374 31
1050186 4:2318f8bee89c 32 enum {
1050186 4:2318f8bee89c 33 IMG_SETTING,
1050186 4:2318f8bee89c 34 IMG_START,
1050186 4:2318f8bee89c 35 IMG_RED,
1050186 4:2318f8bee89c 36 IMG_BLUE,
1050186 4:2318f8bee89c 37 IMG_YELLOW,
1050186 4:2318f8bee89c 38 IMG_GREEN
1050186 4:2318f8bee89c 39 };
1050186 0:84e4649e7707 40
1050186 0:84e4649e7707 41 DigitalOut lcd_pwon(P7_15);
1050186 0:84e4649e7707 42 DigitalOut lcd_blon(P8_1);
1050186 4:2318f8bee89c 43 DigitalOut touch_reset(P4_0);
1050186 0:84e4649e7707 44 PwmOut lcd_cntrst(P8_15);
1050186 0:84e4649e7707 45 DisplayBase Display;
1050186 4:2318f8bee89c 46 SI1143 sensor(I2C_SDA, I2C_SCL);
1050186 0:84e4649e7707 47
1050186 4:2318f8bee89c 48 static const graphics_image_t* image_file[6] = {
1050186 4:2318f8bee89c 49 Setting_jpg_File, Start_jpg_File, red_jpg_File, blue_jpg_File, yellow_jpg_File, green_jpg_File
1050186 4:2318f8bee89c 50 };
1050186 0:84e4649e7707 51
1050186 4:2318f8bee89c 52 static uint8_t user_frame_buffer[FRAME_BUFFER_STRIDE * LCD_V_WIDTH]__attribute((aligned(32))); /* 32 bytes aligned */
1050186 4:2318f8bee89c 53 static uint8_t user_frame_buffer2[FRAME_BUFFER_STRIDE * LCD_V_WIDTH]__attribute((aligned(32))); /* 32 bytes aligned */
1050186 0:84e4649e7707 54 static frame_buffer_t frame_buffer_info;
1050186 0:84e4649e7707 55 static volatile int32_t vsync_count = 0;
1050186 4:2318f8bee89c 56 static int sense_old[3] = {0, 0, 0};
1050186 4:2318f8bee89c 57 static int sense_new[3] = {0, 0, 0};
1050186 4:2318f8bee89c 58 static const graphics_image_t* image_old = image_file[IMG_START];
1050186 4:2318f8bee89c 59 static const graphics_image_t* image_new = image_file[IMG_START];
1050186 0:84e4649e7707 60
1050186 0:84e4649e7707 61 static void IntCallbackFunc_Vsync(DisplayBase::int_type_t int_type) {
1050186 0:84e4649e7707 62 /* Interrupt callback function for Vsync interruption */
1050186 0:84e4649e7707 63 if (vsync_count > 0) {
1050186 0:84e4649e7707 64 vsync_count--;
1050186 0:84e4649e7707 65 }
1050186 0:84e4649e7707 66 }
1050186 0:84e4649e7707 67
1050186 0:84e4649e7707 68 static void Wait_Vsync(const int32_t wait_count) {
1050186 0:84e4649e7707 69 /* Wait for the specified number of times Vsync occurs */
1050186 0:84e4649e7707 70 vsync_count = wait_count;
1050186 0:84e4649e7707 71 while (vsync_count > 0) {
1050186 0:84e4649e7707 72 /* Do nothing */
1050186 0:84e4649e7707 73 }
1050186 0:84e4649e7707 74 }
1050186 0:84e4649e7707 75
1050186 4:2318f8bee89c 76 static int Get_Direction(void) {
1050186 4:2318f8bee89c 77 int dire_sense[3];
1050186 4:2318f8bee89c 78 int ret;
1050186 4:2318f8bee89c 79 // Read each led sensor
1050186 4:2318f8bee89c 80 sense_new[0] = sensor.get_ps1(2);
1050186 4:2318f8bee89c 81 sense_new[1] = sensor.get_ps2(2);
1050186 4:2318f8bee89c 82 sense_new[2] = sensor.get_ps3(2);
1050186 4:2318f8bee89c 83
1050186 4:2318f8bee89c 84 if ((sense_new[0] > 50) && (sense_new[1] > 50) && (sense_new[2] > 50)) {
1050186 4:2318f8bee89c 85 for (int cnt = 0; cnt < 3; cnt++) {
1050186 4:2318f8bee89c 86 dire_sense[cnt] = sense_new[cnt] - sense_old[cnt];
1050186 4:2318f8bee89c 87 if (dire_sense[cnt] <= 50) { // less than 50 or minus
1050186 4:2318f8bee89c 88 dire_sense[cnt] = 0;
1050186 4:2318f8bee89c 89 }
1050186 4:2318f8bee89c 90 }
1050186 4:2318f8bee89c 91 if (((sense_old[0] - sense_old[1]) > 50) && ((sense_old[0] - sense_old[2]) > 50)) {
1050186 4:2318f8bee89c 92 /* sense1 to ... */
1050186 4:2318f8bee89c 93 if ((dire_sense[1] > dire_sense[0]) && (dire_sense[1] > dire_sense[2])) {
1050186 4:2318f8bee89c 94 ret = DIREC_UP;
1050186 4:2318f8bee89c 95 } else if ((dire_sense[2] > dire_sense[0]) && (dire_sense[2] > dire_sense[1])) {
1050186 4:2318f8bee89c 96 ret = DIREC_RIGHT;
1050186 4:2318f8bee89c 97 } else {
1050186 4:2318f8bee89c 98 ret = DIREC_NON;
1050186 4:2318f8bee89c 99 }
1050186 4:2318f8bee89c 100 } else if (((sense_old[1] - sense_old[0]) > 50) && ((sense_old[1] - sense_old[2]) > 50)) {
1050186 4:2318f8bee89c 101 /* sense2 to ... */
1050186 4:2318f8bee89c 102 if ((dire_sense[0] > dire_sense[1]) && (dire_sense[0] > dire_sense[2])) {
1050186 4:2318f8bee89c 103 ret = DIREC_DOWN;
1050186 4:2318f8bee89c 104 } else if ((dire_sense[2] > dire_sense[0]) && (dire_sense[2] > dire_sense[1])) {
1050186 4:2318f8bee89c 105 ret = DIREC_DOWN;
1050186 4:2318f8bee89c 106 } else {
1050186 4:2318f8bee89c 107 ret = DIREC_NON;
1050186 4:2318f8bee89c 108 }
1050186 4:2318f8bee89c 109 } else if (((sense_old[2] - sense_old[0]) > 50) && ((sense_old[2] - sense_old[1]) > 50)) {
1050186 4:2318f8bee89c 110 /* sense3 to ... */
1050186 4:2318f8bee89c 111 if ((dire_sense[0] > dire_sense[1]) && (dire_sense[0] > dire_sense[2])) {
1050186 4:2318f8bee89c 112 ret = DIREC_LEFT;
1050186 4:2318f8bee89c 113 } else if ((dire_sense[1] > dire_sense[0]) && (dire_sense[1] > dire_sense[2])) {
1050186 4:2318f8bee89c 114 ret = DIREC_UP;
1050186 4:2318f8bee89c 115 } else {
1050186 4:2318f8bee89c 116 ret = DIREC_NON;
1050186 4:2318f8bee89c 117 }
1050186 4:2318f8bee89c 118 } else {
1050186 4:2318f8bee89c 119 ret = DIREC_NON;
1050186 4:2318f8bee89c 120 }
1050186 4:2318f8bee89c 121 } else {
1050186 4:2318f8bee89c 122 ret = DIREC_NON;
1050186 4:2318f8bee89c 123 }
1050186 4:2318f8bee89c 124 sense_old[0] = sense_new[0];
1050186 4:2318f8bee89c 125 sense_old[1] = sense_new[1];
1050186 4:2318f8bee89c 126 sense_old[2] = sense_new[2];
1050186 4:2318f8bee89c 127
1050186 4:2318f8bee89c 128
1050186 4:2318f8bee89c 129 return ret;
1050186 4:2318f8bee89c 130 }
1050186 4:2318f8bee89c 131
1050186 4:2318f8bee89c 132 static void Swap_FrameBuffer(frame_buffer_t * frmbuf_info) {
1050186 4:2318f8bee89c 133 if (frmbuf_info->draw_buffer_index == 1) {
1050186 4:2318f8bee89c 134 frmbuf_info->draw_buffer_index = 0;
1050186 4:2318f8bee89c 135 } else {
1050186 4:2318f8bee89c 136 frmbuf_info->draw_buffer_index = 1;
1050186 4:2318f8bee89c 137 }
1050186 4:2318f8bee89c 138 }
1050186 4:2318f8bee89c 139
1050186 4:2318f8bee89c 140 static void Update_LCD_Display(frame_buffer_t * frmbuf_info) {
1050186 4:2318f8bee89c 141 Display.Graphics_Read_Change(DisplayBase::GRAPHICS_LAYER_0,
1050186 4:2318f8bee89c 142 (void *)frmbuf_info->buffer_address[frmbuf_info->draw_buffer_index]);
1050186 4:2318f8bee89c 143 Wait_Vsync(1);
1050186 4:2318f8bee89c 144 }
1050186 4:2318f8bee89c 145
1050186 4:2318f8bee89c 146 static void Draw_Image(int direction) {
1050186 4:2318f8bee89c 147 int work_width_pos;
1050186 4:2318f8bee89c 148
1050186 4:2318f8bee89c 149 if (direction == DIREC_RIGHT) {
1050186 4:2318f8bee89c 150 image_new = image_file[IMG_RED];
1050186 4:2318f8bee89c 151 } else if (direction == DIREC_LEFT) {
1050186 4:2318f8bee89c 152 image_new = image_file[IMG_BLUE];
1050186 4:2318f8bee89c 153 } else if (direction == DIREC_UP) {
1050186 4:2318f8bee89c 154 image_new = image_file[IMG_YELLOW];
1050186 4:2318f8bee89c 155 } else if (direction == DIREC_DOWN) {
1050186 4:2318f8bee89c 156 image_new = image_file[IMG_GREEN];
1050186 4:2318f8bee89c 157 }
1050186 4:2318f8bee89c 158 for (work_width_pos = 1; work_width_pos <= SCROLL_STEP_NUM; work_width_pos++) {
1050186 4:2318f8bee89c 159 /* Draw screen */
1050186 4:2318f8bee89c 160 Swap_FrameBuffer(&frame_buffer_info);
1050186 4:2318f8bee89c 161 RGA_Func_Scroll(&frame_buffer_info, image_old, image_new, direction, (float32_t)work_width_pos / (float32_t)SCROLL_STEP_NUM);
1050186 4:2318f8bee89c 162 Update_LCD_Display(&frame_buffer_info);
1050186 4:2318f8bee89c 163 }
1050186 4:2318f8bee89c 164 image_old = image_new;
1050186 4:2318f8bee89c 165 }
1050186 4:2318f8bee89c 166
1050186 4:2318f8bee89c 167 int main(void) {
1050186 0:84e4649e7707 168 /* Create DisplayBase object */
1050186 0:84e4649e7707 169 DisplayBase::graphics_error_t error;
1050186 4:2318f8bee89c 170 int direction = 0;
1050186 4:2318f8bee89c 171
1050186 4:2318f8bee89c 172 memset(user_frame_buffer, 0, sizeof(user_frame_buffer));
1050186 4:2318f8bee89c 173 memset(user_frame_buffer2, 0, sizeof(user_frame_buffer2));
1050186 4:2318f8bee89c 174 frame_buffer_info.buffer_address[0] = user_frame_buffer;
1050186 4:2318f8bee89c 175 frame_buffer_info.buffer_address[1] = user_frame_buffer2;
1050186 4:2318f8bee89c 176 frame_buffer_info.buffer_count = 2;
1050186 4:2318f8bee89c 177 frame_buffer_info.show_buffer_index = 0;
1050186 4:2318f8bee89c 178 frame_buffer_info.draw_buffer_index = 0;
1050186 4:2318f8bee89c 179 frame_buffer_info.width = LCD_H_WIDTH;
1050186 4:2318f8bee89c 180 frame_buffer_info.byte_per_pixel = FRAME_BUFFER_BYTE_PER_PIXEL;
1050186 4:2318f8bee89c 181 frame_buffer_info.stride = LCD_H_WIDTH * FRAME_BUFFER_BYTE_PER_PIXEL;
1050186 4:2318f8bee89c 182 frame_buffer_info.height = LCD_V_WIDTH;
1050186 4:2318f8bee89c 183 frame_buffer_info.pixel_format = PIXEL_FORMAT_RGB565;
1050186 4:2318f8bee89c 184
1050186 4:2318f8bee89c 185 lcd_pwon = 0;
1050186 4:2318f8bee89c 186 lcd_blon = 0;
1050186 4:2318f8bee89c 187 touch_reset = 0;
1050186 4:2318f8bee89c 188 Thread::wait(100);
1050186 4:2318f8bee89c 189
1050186 4:2318f8bee89c 190 lcd_pwon = 1;
1050186 4:2318f8bee89c 191 lcd_blon = 1;
1050186 4:2318f8bee89c 192 touch_reset = 1;
1050186 4:2318f8bee89c 193 Thread::wait(100);
1050186 4:2318f8bee89c 194
1050186 0:84e4649e7707 195 DisplayBase::lcd_config_t lcd_config;
1050186 0:84e4649e7707 196 PinName lvds_pin[8] = {
1050186 0:84e4649e7707 197 /* data pin */
1050186 0:84e4649e7707 198 P5_7, P5_6, P5_5, P5_4, P5_3, P5_2, P5_1, P5_0
1050186 0:84e4649e7707 199 };
1050186 4:2318f8bee89c 200 DisplayBase::rect_t rect;
1050186 0:84e4649e7707 201
1050186 0:84e4649e7707 202 lcd_config.lcd_type = DisplayBase::LCD_TYPE_LVDS;
1050186 4:2318f8bee89c 203 lcd_config.intputClock = 66.67f;
1050186 4:2318f8bee89c 204 lcd_config.outputClock = LCD_DOT_CLOCK;
1050186 0:84e4649e7707 205 lcd_config.lcd_outformat = DisplayBase::LCD_OUTFORMAT_RGB888;
1050186 0:84e4649e7707 206 lcd_config.lcd_edge = DisplayBase::EDGE_RISING;
1050186 4:2318f8bee89c 207 #if(LCD_MODE) //SYNC Mode
1050186 4:2318f8bee89c 208 lcd_config.h_toatal_period = (LCD_H_BACK_PORCH + LCD_H_WIDTH + LCD_H_FRONT_PORCH);
1050186 4:2318f8bee89c 209 lcd_config.v_toatal_period = (LCD_V_BACK_PORCH + LCD_V_WIDTH + LCD_V_FRONT_PORCH);
1050186 4:2318f8bee89c 210
1050186 4:2318f8bee89c 211 lcd_config.h_disp_widht = (LCD_H_WIDTH);
1050186 4:2318f8bee89c 212 lcd_config.v_disp_widht = (LCD_V_WIDTH);
1050186 4:2318f8bee89c 213 lcd_config.h_back_porch = (LCD_H_BACK_PORCH);
1050186 4:2318f8bee89c 214 lcd_config.v_back_porch = (LCD_V_BACK_PORCH);
1050186 4:2318f8bee89c 215
1050186 4:2318f8bee89c 216 lcd_config.h_sync_port = DisplayBase::LCD_TCON_PIN_2;
1050186 4:2318f8bee89c 217 lcd_config.h_sync_port_polarity = DisplayBase::SIG_POL_INVERTED;
1050186 4:2318f8bee89c 218 lcd_config.h_sync_width = LCD_H_SYNC_WIDTH;
1050186 4:2318f8bee89c 219
1050186 4:2318f8bee89c 220 lcd_config.v_sync_port = DisplayBase::LCD_TCON_PIN_0;
1050186 4:2318f8bee89c 221 lcd_config.v_sync_port_polarity = DisplayBase::SIG_POL_INVERTED;
1050186 4:2318f8bee89c 222 lcd_config.v_sync_width = LCD_V_SYNC_WIDTH;
1050186 4:2318f8bee89c 223
1050186 4:2318f8bee89c 224 lcd_config.de_port = DisplayBase::LCD_TCON_PIN_3;
1050186 4:2318f8bee89c 225 lcd_config.de_port_polarity = DisplayBase::SIG_POL_NOT_INVERTED;
1050186 4:2318f8bee89c 226 #else //DE Mode
1050186 4:2318f8bee89c 227 lcd_config.h_toatal_period = (LCD_H_WIDTH + 80u);
1050186 4:2318f8bee89c 228 lcd_config.v_toatal_period = (LCD_V_WIDTH);
1050186 0:84e4649e7707 229
1050186 4:2318f8bee89c 230 lcd_config.h_disp_widht = (LCD_H_WIDTH);
1050186 4:2318f8bee89c 231 lcd_config.v_disp_widht = (LCD_V_WIDTH);
1050186 4:2318f8bee89c 232 lcd_config.h_back_porch = (68u);
1050186 4:2318f8bee89c 233 lcd_config.v_back_porch = (18u);
1050186 0:84e4649e7707 234
1050186 0:84e4649e7707 235 lcd_config.h_sync_port = DisplayBase::LCD_TCON_PIN_NON;
1050186 0:84e4649e7707 236 lcd_config.h_sync_port_polarity = DisplayBase::SIG_POL_NOT_INVERTED;
1050186 0:84e4649e7707 237 lcd_config.h_sync_width = 0;
1050186 0:84e4649e7707 238
1050186 0:84e4649e7707 239 lcd_config.v_sync_port = DisplayBase::LCD_TCON_PIN_NON;
1050186 0:84e4649e7707 240 lcd_config.v_sync_port_polarity = DisplayBase::SIG_POL_NOT_INVERTED;
1050186 0:84e4649e7707 241 lcd_config.v_sync_width = 0;
1050186 0:84e4649e7707 242
1050186 0:84e4649e7707 243 lcd_config.de_port = DisplayBase::LCD_TCON_PIN_3;
1050186 4:2318f8bee89c 244 lcd_config.de_port_polarity = DisplayBase::SIG_POL_INVERTED;
1050186 4:2318f8bee89c 245 #endif
1050186 0:84e4649e7707 246
1050186 0:84e4649e7707 247 /* Graphics initialization process */
1050186 0:84e4649e7707 248 error = Display.Graphics_init(&lcd_config);
1050186 0:84e4649e7707 249 if (error != DisplayBase::GRAPHICS_OK) {
1050186 0:84e4649e7707 250 printf("Line %d, error %d\n", __LINE__, error);
1050186 0:84e4649e7707 251 while (1);
1050186 0:84e4649e7707 252 }
1050186 0:84e4649e7707 253
1050186 0:84e4649e7707 254 /* Interrupt callback function setting (Vsync signal output from scaler 0) */
1050186 0:84e4649e7707 255 error = Display.Graphics_Irq_Handler_Set(DisplayBase::INT_TYPE_S0_LO_VSYNC, 0, IntCallbackFunc_Vsync);
1050186 0:84e4649e7707 256 if (error != DisplayBase::GRAPHICS_OK) {
1050186 0:84e4649e7707 257 printf("Line %d, error %d\n", __LINE__, error);
1050186 0:84e4649e7707 258 while (1);
1050186 0:84e4649e7707 259 }
1050186 0:84e4649e7707 260
1050186 0:84e4649e7707 261 Display.Graphics_Lvds_Port_Init(lvds_pin, 8);
1050186 0:84e4649e7707 262 rect.vs = 0;
1050186 4:2318f8bee89c 263 rect.vw = LCD_V_WIDTH;
1050186 0:84e4649e7707 264 rect.hs = 0;
1050186 4:2318f8bee89c 265 rect.hw = LCD_H_WIDTH;
1050186 0:84e4649e7707 266
1050186 0:84e4649e7707 267 Display.Graphics_Read_Setting(
1050186 0:84e4649e7707 268 DisplayBase::GRAPHICS_LAYER_0,
1050186 4:2318f8bee89c 269 (void *)frame_buffer_info.buffer_address[0],
1050186 0:84e4649e7707 270 FRAME_BUFFER_STRIDE,
1050186 0:84e4649e7707 271 DisplayBase::GRAPHICS_FORMAT_RGB565,
1050186 0:84e4649e7707 272 DisplayBase::WR_RD_WRSWA_32_16BIT,
1050186 0:84e4649e7707 273 &rect
1050186 0:84e4649e7707 274 );
1050186 0:84e4649e7707 275
1050186 4:2318f8bee89c 276 /* Display Start */
1050186 4:2318f8bee89c 277 Set_RGAObject(&frame_buffer_info);
1050186 0:84e4649e7707 278 Display.Graphics_Start(DisplayBase::GRAPHICS_LAYER_0);
1050186 0:84e4649e7707 279 lcd_cntrst.write(1.0);
1050186 0:84e4649e7707 280
1050186 4:2318f8bee89c 281 // Setup the baseline
1050186 4:2318f8bee89c 282 RGA_Func_DrawTopScreen(&frame_buffer_info, image_file[IMG_SETTING]);
1050186 4:2318f8bee89c 283 printf("SI1143 Gesture Sensor setting...\n");
1050186 4:2318f8bee89c 284 sensor.bias(1,5);
1050186 4:2318f8bee89c 285 Thread::wait(1000);
1050186 4:2318f8bee89c 286 RGA_Func_DrawTopScreen(&frame_buffer_info, image_file[IMG_START]);
1050186 4:2318f8bee89c 287 printf("SI1143 Gesture Sensor setting finished!\n");
1050186 0:84e4649e7707 288
1050186 4:2318f8bee89c 289 while (1) {
1050186 4:2318f8bee89c 290 /* Get coordinates */
1050186 4:2318f8bee89c 291 direction = Get_Direction();
1050186 4:2318f8bee89c 292 if (direction != 0) {
1050186 4:2318f8bee89c 293 Draw_Image(direction);
1050186 0:84e4649e7707 294 }
1050186 0:84e4649e7707 295 }
1050186 0:84e4649e7707 296 }