Image Zoom In/out Sample. This program uses GraphicsFramework library and GP2Y0A21YK sensor. Please use distance sensor in the range of 10-30cm.

Dependencies:   GR-PEACH_video GraphicsFramework R_BSP mbed-rtos mbed

Fork of RGA_HelloWorld by Renesas

About GP2Y0A21YK

GP2Y0A21YK is a distance sensor and can be controlled by using the AnalogIn.
The range of this sensor is 10-80cm.

About wiring

SensorGR-PEACH
White wireA0
Orange wireGND
Black wire5.0V
Committer:
dkato
Date:
Thu Jan 21 10:10:19 2016 +0000
Revision:
2:c7faef0ef374
Parent:
0:84e4649e7707
Child:
4:ffbd2a93b02f
Add touch operations.

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"
1050186 0:84e4649e7707 25
1050186 0:84e4649e7707 26
1050186 0:84e4649e7707 27 /* LCD Parameter */
dkato 2:c7faef0ef374 28 #define LCD_INPUT_CLOCK (66.67f)
dkato 2:c7faef0ef374 29 #define LCD_OUTPUT_CLOCK (33.26f)
1050186 0:84e4649e7707 30
dkato 2:c7faef0ef374 31 #define LCD_PIXEL_WIDTH (800)
dkato 2:c7faef0ef374 32 #define LCD_PIXEL_HEIGHT (480)
dkato 2:c7faef0ef374 33 #define LCD_H_BACK_PORCH (128 + 36)
dkato 2:c7faef0ef374 34 #define LCD_H_FRONT_PORCH (92)
dkato 2:c7faef0ef374 35 #define LCD_V_BACK_PORCH (35 + 5)
dkato 2:c7faef0ef374 36 #define LCD_V_FRONT_PORCH (5)
1050186 0:84e4649e7707 37
1050186 0:84e4649e7707 38 /* FRAME BUFFER Parameter */
dkato 2:c7faef0ef374 39 #define FRAME_BUFFER_BYTE_PER_PIXEL (2)
1050186 0:84e4649e7707 40 #define FRAME_BUFFER_STRIDE (((LCD_PIXEL_WIDTH * FRAME_BUFFER_BYTE_PER_PIXEL) + 31u) & ~31u)
1050186 0:84e4649e7707 41
dkato 2:c7faef0ef374 42 #define DRAW_RECTANGLE_CNT_MAX (4)
dkato 2:c7faef0ef374 43
1050186 0:84e4649e7707 44 typedef enum {
dkato 2:c7faef0ef374 45 RGA_FUNC_NON,
dkato 2:c7faef0ef374 46 RGA_FUNC_DRAW_RECTANGLE,
1050186 0:84e4649e7707 47 RGA_FUNC_DRAW_IMAGE,
1050186 0:84e4649e7707 48 RGA_FUNC_DISSOLVE,
1050186 0:84e4649e7707 49 RGA_FUNC_SCROLL,
1050186 0:84e4649e7707 50 RGA_FUNC_ZOOM,
1050186 0:84e4649e7707 51 RGA_FUNC_ROTATION,
1050186 0:84e4649e7707 52 RGA_FUNC_ACCELERATE,
dkato 2:c7faef0ef374 53 RGA_FUNC_ANIME_EASE,
dkato 2:c7faef0ef374 54 RGA_FUNC_ANIME_LINEAR,
dkato 2:c7faef0ef374 55 RGA_FUNC_ANIME_EASE_IN,
dkato 2:c7faef0ef374 56 RGA_FUNC_ANIME_EASE_OUT,
dkato 2:c7faef0ef374 57 RGA_FUNC_ANIME_EASE_IN_OUT,
dkato 2:c7faef0ef374 58 RGA_FUNC_RETURN,
dkato 2:c7faef0ef374 59 RGA_FUNC_END
1050186 0:84e4649e7707 60 }func_code_t;
1050186 0:84e4649e7707 61
1050186 0:84e4649e7707 62 DigitalOut lcd_pwon(P7_15);
1050186 0:84e4649e7707 63 DigitalOut lcd_blon(P8_1);
1050186 0:84e4649e7707 64 PwmOut lcd_cntrst(P8_15);
1050186 0:84e4649e7707 65 I2C i2c(I2C_SDA, I2C_SCL);
1050186 0:84e4649e7707 66 DisplayBase Display;
1050186 0:84e4649e7707 67
1050186 0:84e4649e7707 68 typedef struct {
1050186 0:84e4649e7707 69 uint8_t y_h: 3,
1050186 0:84e4649e7707 70 reserved: 1,
1050186 0:84e4649e7707 71 x_h: 3,
1050186 0:84e4649e7707 72 valid: 1;
1050186 0:84e4649e7707 73 uint8_t x_l;
1050186 0:84e4649e7707 74 uint8_t y_l;
1050186 0:84e4649e7707 75 uint8_t z;
1050186 0:84e4649e7707 76 } xyz_data_t;
1050186 0:84e4649e7707 77
1050186 0:84e4649e7707 78 typedef struct {
1050186 0:84e4649e7707 79 uint8_t fingers: 4,
1050186 0:84e4649e7707 80 reserved: 4;
1050186 0:84e4649e7707 81 uint8_t keys;
1050186 0:84e4649e7707 82 xyz_data_t xyz_data;
1050186 0:84e4649e7707 83 } stx_report_data_t;
1050186 0:84e4649e7707 84
1050186 0:84e4649e7707 85 typedef struct {
1050186 0:84e4649e7707 86 uint32_t pic_pos_x; /* X position of the key picture. */
1050186 0:84e4649e7707 87 uint32_t pic_pos_y; /* Y position of the key picture. */
1050186 0:84e4649e7707 88 uint32_t pic_width; /* Width of the key picture. */
1050186 0:84e4649e7707 89 uint32_t pic_height; /* Height of the key picture. */
1050186 0:84e4649e7707 90 func_code_t func_code; /* func code of the key picture. */
1050186 0:84e4649e7707 91 } key_pic_info_t;
1050186 0:84e4649e7707 92
dkato 2:c7faef0ef374 93 static uint8_t user_frame_buffer[FRAME_BUFFER_STRIDE * LCD_PIXEL_HEIGHT]__attribute((aligned(32))); /* 32 bytes aligned */
dkato 2:c7faef0ef374 94 static uint8_t user_frame_buffer2[FRAME_BUFFER_STRIDE * LCD_PIXEL_HEIGHT]__attribute((aligned(32))); /* 32 bytes aligned */
1050186 0:84e4649e7707 95 static frame_buffer_t frame_buffer_info;
1050186 0:84e4649e7707 96 static volatile int32_t vsync_count = 0;
1050186 0:84e4649e7707 97
dkato 2:c7faef0ef374 98 static const key_pic_info_t top_screen_key_tbl[] = {
dkato 2:c7faef0ef374 99 /* X Y Width Height Func code */
dkato 2:c7faef0ef374 100 { 50, 350, 120, 52, RGA_FUNC_DRAW_RECTANGLE }, /* RGA Func1 */
dkato 2:c7faef0ef374 101 { 230, 350, 120, 52, RGA_FUNC_DRAW_IMAGE }, /* RGA Func2 */
dkato 2:c7faef0ef374 102 { 410, 350, 120, 52, RGA_FUNC_DISSOLVE }, /* RGA Func3 */
dkato 2:c7faef0ef374 103 { 50, 420, 120, 52, RGA_FUNC_SCROLL }, /* RGA Func4 */
dkato 2:c7faef0ef374 104 { 230, 420, 120, 52, RGA_FUNC_ZOOM }, /* RGA Func5 */
dkato 2:c7faef0ef374 105 { 410, 420, 120, 52, RGA_FUNC_ROTATION }, /* RGA Func6 */
dkato 2:c7faef0ef374 106 { 615, 420, 120, 52, RGA_FUNC_ACCELERATE }, /* RGA Func7 */
dkato 2:c7faef0ef374 107 { 0, 0, 0, 0, RGA_FUNC_END } /* table end */
dkato 2:c7faef0ef374 108 };
dkato 2:c7faef0ef374 109
dkato 2:c7faef0ef374 110 static const key_pic_info_t return_key_tbl[] = {
dkato 2:c7faef0ef374 111 /* X Y Width Height Func code */
dkato 2:c7faef0ef374 112 { 640, 10, 150, 84, RGA_FUNC_RETURN }, /* Return Top Screen */
dkato 2:c7faef0ef374 113 { 0, 0, 0, 0, RGA_FUNC_END } /* table end */
dkato 2:c7faef0ef374 114 };
dkato 2:c7faef0ef374 115
dkato 2:c7faef0ef374 116 static const key_pic_info_t animetion_timing_key_tbl[] = {
dkato 2:c7faef0ef374 117 /* X Y Width Height Func code */
dkato 2:c7faef0ef374 118 { 640, 10, 150, 84, RGA_FUNC_RETURN }, /* Return Top Screen */
dkato 2:c7faef0ef374 119 { 17, 372, 136, 50, RGA_FUNC_ANIME_EASE }, /* ease */
dkato 2:c7faef0ef374 120 { 173, 372, 136, 50, RGA_FUNC_ANIME_LINEAR }, /* linear */
dkato 2:c7faef0ef374 121 { 330, 372, 136, 50, RGA_FUNC_ANIME_EASE_IN }, /* ease-in */
dkato 2:c7faef0ef374 122 { 487, 372, 136, 50, RGA_FUNC_ANIME_EASE_OUT }, /* ease-out */
dkato 2:c7faef0ef374 123 { 644, 372, 136, 50, RGA_FUNC_ANIME_EASE_IN_OUT }, /* ease-in-out */
dkato 2:c7faef0ef374 124 { 0, 0, 0, 0, RGA_FUNC_END } /* table end */
1050186 0:84e4649e7707 125 };
1050186 0:84e4649e7707 126
1050186 0:84e4649e7707 127 static void IntCallbackFunc_Vsync(DisplayBase::int_type_t int_type) {
1050186 0:84e4649e7707 128 /* Interrupt callback function for Vsync interruption */
1050186 0:84e4649e7707 129 if (vsync_count > 0) {
1050186 0:84e4649e7707 130 vsync_count--;
1050186 0:84e4649e7707 131 }
1050186 0:84e4649e7707 132 }
1050186 0:84e4649e7707 133
1050186 0:84e4649e7707 134 static void Wait_Vsync(const int32_t wait_count) {
1050186 0:84e4649e7707 135 /* Wait for the specified number of times Vsync occurs */
1050186 0:84e4649e7707 136 vsync_count = wait_count;
1050186 0:84e4649e7707 137 while (vsync_count > 0) {
1050186 0:84e4649e7707 138 /* Do nothing */
1050186 0:84e4649e7707 139 }
1050186 0:84e4649e7707 140 }
1050186 0:84e4649e7707 141
1050186 0:84e4649e7707 142 static void Init_LCD_Display(uint8_t* disp_buf) {
1050186 0:84e4649e7707 143 /* Create DisplayBase object */
1050186 0:84e4649e7707 144 DisplayBase::graphics_error_t error;
1050186 0:84e4649e7707 145 DisplayBase::rect_t rect;
1050186 0:84e4649e7707 146 DisplayBase::lcd_config_t lcd_config;
1050186 0:84e4649e7707 147 PinName lvds_pin[8] = {
1050186 0:84e4649e7707 148 /* data pin */
1050186 0:84e4649e7707 149 P5_7, P5_6, P5_5, P5_4, P5_3, P5_2, P5_1, P5_0
1050186 0:84e4649e7707 150 };
1050186 0:84e4649e7707 151
1050186 0:84e4649e7707 152 lcd_pwon = 0;
1050186 0:84e4649e7707 153 lcd_blon = 0;
1050186 0:84e4649e7707 154 Thread::wait(100);
1050186 0:84e4649e7707 155 lcd_pwon = 1;
1050186 0:84e4649e7707 156 lcd_blon = 1;
1050186 0:84e4649e7707 157 Thread::wait(100);
1050186 0:84e4649e7707 158
1050186 0:84e4649e7707 159 lcd_config.lcd_type = DisplayBase::LCD_TYPE_LVDS;
1050186 0:84e4649e7707 160 lcd_config.intputClock = LCD_INPUT_CLOCK;
1050186 0:84e4649e7707 161 lcd_config.outputClock = LCD_OUTPUT_CLOCK;
1050186 0:84e4649e7707 162 lcd_config.lcd_outformat = DisplayBase::LCD_OUTFORMAT_RGB888;
1050186 0:84e4649e7707 163 lcd_config.lcd_edge = DisplayBase::EDGE_RISING;
1050186 0:84e4649e7707 164 lcd_config.h_toatal_period = (LCD_PIXEL_WIDTH + LCD_H_FRONT_PORCH + LCD_H_BACK_PORCH);
1050186 0:84e4649e7707 165 lcd_config.v_toatal_period = (LCD_PIXEL_HEIGHT + LCD_V_FRONT_PORCH + LCD_V_BACK_PORCH);
1050186 0:84e4649e7707 166
1050186 0:84e4649e7707 167 lcd_config.h_disp_widht = LCD_PIXEL_WIDTH;
1050186 0:84e4649e7707 168 lcd_config.v_disp_widht = LCD_PIXEL_HEIGHT;
1050186 0:84e4649e7707 169 lcd_config.h_back_porch = LCD_H_BACK_PORCH;
1050186 0:84e4649e7707 170 lcd_config.v_back_porch = LCD_V_BACK_PORCH;
1050186 0:84e4649e7707 171
1050186 0:84e4649e7707 172 lcd_config.h_sync_port = DisplayBase::LCD_TCON_PIN_NON;
1050186 0:84e4649e7707 173 lcd_config.h_sync_port_polarity = DisplayBase::SIG_POL_NOT_INVERTED;
1050186 0:84e4649e7707 174 lcd_config.h_sync_width = 0;
1050186 0:84e4649e7707 175
1050186 0:84e4649e7707 176 lcd_config.v_sync_port = DisplayBase::LCD_TCON_PIN_NON;
1050186 0:84e4649e7707 177 lcd_config.v_sync_port_polarity = DisplayBase::SIG_POL_NOT_INVERTED;
1050186 0:84e4649e7707 178 lcd_config.v_sync_width = 0;
1050186 0:84e4649e7707 179
1050186 0:84e4649e7707 180 lcd_config.de_port = DisplayBase::LCD_TCON_PIN_3;
1050186 0:84e4649e7707 181 lcd_config.de_port_polarity = DisplayBase::SIG_POL_NOT_INVERTED;
1050186 0:84e4649e7707 182
1050186 0:84e4649e7707 183 /* Graphics initialization process */
1050186 0:84e4649e7707 184 error = Display.Graphics_init(&lcd_config);
1050186 0:84e4649e7707 185 if (error != DisplayBase::GRAPHICS_OK) {
1050186 0:84e4649e7707 186 printf("Line %d, error %d\n", __LINE__, error);
1050186 0:84e4649e7707 187 while (1);
1050186 0:84e4649e7707 188 }
1050186 0:84e4649e7707 189
1050186 0:84e4649e7707 190 /* Interrupt callback function setting (Vsync signal output from scaler 0) */
1050186 0:84e4649e7707 191 error = Display.Graphics_Irq_Handler_Set(DisplayBase::INT_TYPE_S0_LO_VSYNC, 0, IntCallbackFunc_Vsync);
1050186 0:84e4649e7707 192 if (error != DisplayBase::GRAPHICS_OK) {
1050186 0:84e4649e7707 193 printf("Line %d, error %d\n", __LINE__, error);
1050186 0:84e4649e7707 194 while (1);
1050186 0:84e4649e7707 195 }
1050186 0:84e4649e7707 196
1050186 0:84e4649e7707 197 Display.Graphics_Lvds_Port_Init(lvds_pin, 8);
1050186 0:84e4649e7707 198 rect.vs = 0;
1050186 0:84e4649e7707 199 rect.vw = LCD_PIXEL_HEIGHT;
1050186 0:84e4649e7707 200 rect.hs = 0;
1050186 0:84e4649e7707 201 rect.hw = LCD_PIXEL_WIDTH;
1050186 0:84e4649e7707 202
1050186 0:84e4649e7707 203 Display.Graphics_Read_Setting(
1050186 0:84e4649e7707 204 DisplayBase::GRAPHICS_LAYER_0,
1050186 0:84e4649e7707 205 (void *)disp_buf,
1050186 0:84e4649e7707 206 FRAME_BUFFER_STRIDE,
1050186 0:84e4649e7707 207 DisplayBase::GRAPHICS_FORMAT_RGB565,
1050186 0:84e4649e7707 208 DisplayBase::WR_RD_WRSWA_32_16BIT,
1050186 0:84e4649e7707 209 &rect
1050186 0:84e4649e7707 210 );
1050186 0:84e4649e7707 211 }
1050186 0:84e4649e7707 212
1050186 0:84e4649e7707 213 static void Start_LCD_Display(void) {
1050186 0:84e4649e7707 214 Display.Graphics_Start(DisplayBase::GRAPHICS_LAYER_0);
1050186 0:84e4649e7707 215
1050186 0:84e4649e7707 216 lcd_cntrst.write(1.0);
1050186 0:84e4649e7707 217 }
1050186 0:84e4649e7707 218
dkato 2:c7faef0ef374 219 static void Update_LCD_Display(frame_buffer_t * frmbuf_info) {
dkato 2:c7faef0ef374 220 Display.Graphics_Read_Change(DisplayBase::GRAPHICS_LAYER_0,
dkato 2:c7faef0ef374 221 (void *)frmbuf_info->buffer_address[frmbuf_info->draw_buffer_index]);
1050186 0:84e4649e7707 222 Wait_Vsync(1);
1050186 0:84e4649e7707 223 }
1050186 0:84e4649e7707 224
1050186 0:84e4649e7707 225 static int Get_Coordinates(uint8_t *count, uint32_t *x0, uint32_t *y0) {
1050186 0:84e4649e7707 226 char buf[6];
1050186 0:84e4649e7707 227 stx_report_data_t *pdata;
1050186 0:84e4649e7707 228 int ret = -1;
1050186 0:84e4649e7707 229 *count = 0; // Set point detected count to 0
1050186 0:84e4649e7707 230
1050186 0:84e4649e7707 231 if (i2c.read((0x55 << 1), buf, sizeof(buf)) == 0) {
1050186 0:84e4649e7707 232 pdata = (stx_report_data_t *)buf;
1050186 0:84e4649e7707 233 if (pdata->fingers) {
1050186 0:84e4649e7707 234 if (pdata->xyz_data.valid) {
1050186 0:84e4649e7707 235 *x0 = (pdata->xyz_data.x_h << 8) | pdata->xyz_data.x_l;
1050186 0:84e4649e7707 236 *y0 = (pdata->xyz_data.y_h << 8) | pdata->xyz_data.y_l;
1050186 0:84e4649e7707 237 (*count)++;
1050186 0:84e4649e7707 238 }
1050186 0:84e4649e7707 239 }
1050186 0:84e4649e7707 240 ret = 0;
1050186 0:84e4649e7707 241 }
1050186 0:84e4649e7707 242
1050186 0:84e4649e7707 243 return ret;
1050186 0:84e4649e7707 244 }
1050186 0:84e4649e7707 245
dkato 2:c7faef0ef374 246 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 247 func_code_t ret = RGA_FUNC_NON;
1050186 0:84e4649e7707 248
dkato 2:c7faef0ef374 249 while (ret == RGA_FUNC_NON) {
dkato 2:c7faef0ef374 250 if (key_tbl->func_code == RGA_FUNC_END) {
dkato 2:c7faef0ef374 251 break;
dkato 2:c7faef0ef374 252 }
1050186 0:84e4649e7707 253 /* Check the range of the X position */
dkato 2:c7faef0ef374 254 if ((pos_x >= key_tbl->pic_pos_x) && (pos_x <= (key_tbl->pic_pos_x + key_tbl->pic_width))) {
1050186 0:84e4649e7707 255 /* Check the range of the Y position */
dkato 2:c7faef0ef374 256 if ((pos_y >= key_tbl->pic_pos_y) && (pos_y <= (key_tbl->pic_pos_y + key_tbl->pic_height))) {
1050186 0:84e4649e7707 257 /* Decide the func code. */
dkato 2:c7faef0ef374 258 ret = key_tbl->func_code;
1050186 0:84e4649e7707 259 }
1050186 0:84e4649e7707 260 }
dkato 2:c7faef0ef374 261 key_tbl++;
1050186 0:84e4649e7707 262 }
1050186 0:84e4649e7707 263
1050186 0:84e4649e7707 264 return ret;
1050186 0:84e4649e7707 265 }
1050186 0:84e4649e7707 266
1050186 0:84e4649e7707 267 static void Swap_FrameBuffer(frame_buffer_t * frmbuf_info) {
1050186 0:84e4649e7707 268 if (frmbuf_info->draw_buffer_index == 1) {
1050186 0:84e4649e7707 269 frmbuf_info->draw_buffer_index = 0;
1050186 0:84e4649e7707 270 } else {
1050186 0:84e4649e7707 271 frmbuf_info->draw_buffer_index = 1;
1050186 0:84e4649e7707 272 }
1050186 0:84e4649e7707 273 }
1050186 0:84e4649e7707 274
1050186 0:84e4649e7707 275 static void Exe_RGA_Func(int func_name, frame_buffer_t* frmbuf_info) {
dkato 2:c7faef0ef374 276 uint8_t touch_num = 0;
dkato 2:c7faef0ef374 277 uint32_t pos_x0 = 0;
dkato 2:c7faef0ef374 278 uint32_t pos_y0 = 0;
dkato 2:c7faef0ef374 279 func_code_t func_code;
1050186 0:84e4649e7707 280
1050186 0:84e4649e7707 281 switch (func_name) {
1050186 0:84e4649e7707 282 case RGA_FUNC_DRAW_RECTANGLE:
dkato 2:c7faef0ef374 283 bool key_on = false;
dkato 2:c7faef0ef374 284 int cnt;
dkato 2:c7faef0ef374 285 int color_cnt = 0;
dkato 2:c7faef0ef374 286 int x_0 = 0;
dkato 2:c7faef0ef374 287 int y_0 = 0;
dkato 2:c7faef0ef374 288 draw_rectangle_pos_t pos_tbl[DRAW_RECTANGLE_CNT_MAX] = {0};
dkato 2:c7faef0ef374 289
dkato 2:c7faef0ef374 290 pos_tbl[0].style = "#FF0000"; /* red */
dkato 2:c7faef0ef374 291 pos_tbl[1].style = "#00FF00"; /* green */
dkato 2:c7faef0ef374 292 pos_tbl[2].style = "#0000FF"; /* blue */
dkato 2:c7faef0ef374 293 pos_tbl[3].style = "#000000"; /* black */
dkato 2:c7faef0ef374 294
dkato 2:c7faef0ef374 295 while (1) {
dkato 2:c7faef0ef374 296 /* Get coordinates */
dkato 2:c7faef0ef374 297 Get_Coordinates(&touch_num, &pos_x0, &pos_y0);
dkato 2:c7faef0ef374 298 if (touch_num != 0) {
dkato 2:c7faef0ef374 299 if (Scan_Key(return_key_tbl, pos_x0, pos_y0) == RGA_FUNC_RETURN) {
dkato 2:c7faef0ef374 300 break;
dkato 2:c7faef0ef374 301 }
dkato 2:c7faef0ef374 302 if (key_on == false) {
dkato 2:c7faef0ef374 303 key_on = true;
dkato 2:c7faef0ef374 304 if (color_cnt == 0) {
dkato 2:c7faef0ef374 305 for (cnt = 0; cnt < DRAW_RECTANGLE_CNT_MAX; cnt++) {
dkato 2:c7faef0ef374 306 pos_tbl[cnt].x = 0;
dkato 2:c7faef0ef374 307 pos_tbl[cnt].y = 0;
dkato 2:c7faef0ef374 308 pos_tbl[cnt].w = 0;
dkato 2:c7faef0ef374 309 pos_tbl[cnt].h = 0;
dkato 2:c7faef0ef374 310 }
dkato 2:c7faef0ef374 311 }
dkato 2:c7faef0ef374 312 x_0 = pos_x0;
dkato 2:c7faef0ef374 313 y_0 = pos_y0;
dkato 2:c7faef0ef374 314 }
dkato 2:c7faef0ef374 315 if (x_0 < pos_x0) {
dkato 2:c7faef0ef374 316 pos_tbl[color_cnt].x = x_0;
dkato 2:c7faef0ef374 317 pos_tbl[color_cnt].w = pos_x0 - x_0;
dkato 2:c7faef0ef374 318 } else {
dkato 2:c7faef0ef374 319 pos_tbl[color_cnt].x = pos_x0;
dkato 2:c7faef0ef374 320 pos_tbl[color_cnt].w = x_0 - pos_x0;
dkato 2:c7faef0ef374 321 }
dkato 2:c7faef0ef374 322 if (y_0 < pos_y0) {
dkato 2:c7faef0ef374 323 pos_tbl[color_cnt].y = y_0;
dkato 2:c7faef0ef374 324 pos_tbl[color_cnt].h = pos_y0 - y_0;
dkato 2:c7faef0ef374 325 } else {
dkato 2:c7faef0ef374 326 pos_tbl[color_cnt].y = pos_y0;
dkato 2:c7faef0ef374 327 pos_tbl[color_cnt].h = y_0 - pos_y0;
dkato 2:c7faef0ef374 328 }
dkato 2:c7faef0ef374 329 } else {
dkato 2:c7faef0ef374 330 if (key_on != false) {
dkato 2:c7faef0ef374 331 color_cnt++;
dkato 2:c7faef0ef374 332 if (color_cnt == DRAW_RECTANGLE_CNT_MAX) {
dkato 2:c7faef0ef374 333 color_cnt = 0;
dkato 2:c7faef0ef374 334 }
dkato 2:c7faef0ef374 335 }
dkato 2:c7faef0ef374 336 key_on = false;
dkato 2:c7faef0ef374 337 }
dkato 2:c7faef0ef374 338 /* Draw screen */
dkato 2:c7faef0ef374 339 Swap_FrameBuffer(frmbuf_info);
dkato 2:c7faef0ef374 340 RGA_Func_DrawRectangle(frmbuf_info, pos_tbl, DRAW_RECTANGLE_CNT_MAX);
dkato 2:c7faef0ef374 341 Update_LCD_Display(frmbuf_info);
dkato 2:c7faef0ef374 342 }
1050186 0:84e4649e7707 343 break;
1050186 0:84e4649e7707 344 case RGA_FUNC_DRAW_IMAGE:
dkato 2:c7faef0ef374 345 int center_pos_x = 320;
dkato 2:c7faef0ef374 346 int center_pos_y = 110;
dkato 2:c7faef0ef374 347 while (1) {
dkato 2:c7faef0ef374 348 /* Get coordinates */
dkato 2:c7faef0ef374 349 Get_Coordinates(&touch_num, &pos_x0, &pos_y0);
dkato 2:c7faef0ef374 350 if (touch_num != 0) {
dkato 2:c7faef0ef374 351 if (Scan_Key(return_key_tbl, pos_x0, pos_y0) == RGA_FUNC_RETURN) {
dkato 2:c7faef0ef374 352 break;
dkato 2:c7faef0ef374 353 }
dkato 2:c7faef0ef374 354 center_pos_x = pos_x0;
dkato 2:c7faef0ef374 355 center_pos_y = pos_y0;
dkato 2:c7faef0ef374 356 }
dkato 2:c7faef0ef374 357 /* Draw screen */
dkato 2:c7faef0ef374 358 Swap_FrameBuffer(frmbuf_info);
dkato 2:c7faef0ef374 359 RGA_Func_DrawImage(frmbuf_info, center_pos_x, center_pos_y);
dkato 2:c7faef0ef374 360 Update_LCD_Display(frmbuf_info);
dkato 2:c7faef0ef374 361 }
1050186 0:84e4649e7707 362 break;
1050186 0:84e4649e7707 363 case RGA_FUNC_DISSOLVE:
dkato 2:c7faef0ef374 364 float32_t work_alpha = 0.0f;
dkato 2:c7faef0ef374 365 while (1) {
dkato 2:c7faef0ef374 366 /* Get coordinates */
dkato 2:c7faef0ef374 367 Get_Coordinates(&touch_num, &pos_x0, &pos_y0);
dkato 2:c7faef0ef374 368 if (touch_num != 0) {
dkato 2:c7faef0ef374 369 if (Scan_Key(return_key_tbl, pos_x0, pos_y0) == RGA_FUNC_RETURN) {
dkato 2:c7faef0ef374 370 break;
dkato 2:c7faef0ef374 371 }
dkato 2:c7faef0ef374 372 work_alpha = (float32_t)pos_x0 / (float32_t)(LCD_PIXEL_WIDTH);
dkato 2:c7faef0ef374 373 }
dkato 2:c7faef0ef374 374 /* Draw screen */
1050186 0:84e4649e7707 375 Swap_FrameBuffer(frmbuf_info);
1050186 0:84e4649e7707 376 RGA_Func_Dissolve(frmbuf_info, work_alpha);
dkato 2:c7faef0ef374 377 Update_LCD_Display(frmbuf_info);
1050186 0:84e4649e7707 378 }
1050186 0:84e4649e7707 379 break;
1050186 0:84e4649e7707 380 case RGA_FUNC_SCROLL:
dkato 2:c7faef0ef374 381 int work_width_pos = 0;
dkato 2:c7faef0ef374 382 while (1) {
dkato 2:c7faef0ef374 383 /* Get coordinates */
dkato 2:c7faef0ef374 384 Get_Coordinates(&touch_num, &pos_x0, &pos_y0);
dkato 2:c7faef0ef374 385 if (touch_num != 0) {
dkato 2:c7faef0ef374 386 if (Scan_Key(return_key_tbl, pos_x0, pos_y0) == RGA_FUNC_RETURN) {
dkato 2:c7faef0ef374 387 break;
dkato 2:c7faef0ef374 388 }
dkato 2:c7faef0ef374 389 work_width_pos = SCROLL_MAX_NUM * ((float32_t)pos_x0 / (float32_t)(LCD_PIXEL_WIDTH));
dkato 2:c7faef0ef374 390 }
dkato 2:c7faef0ef374 391 /* Draw screen */
1050186 0:84e4649e7707 392 Swap_FrameBuffer(frmbuf_info);
1050186 0:84e4649e7707 393 RGA_Func_Scroll(frmbuf_info, work_width_pos);
dkato 2:c7faef0ef374 394 Update_LCD_Display(frmbuf_info);
1050186 0:84e4649e7707 395 }
1050186 0:84e4649e7707 396 break;
1050186 0:84e4649e7707 397 case RGA_FUNC_ZOOM:
dkato 2:c7faef0ef374 398 int work_height_pos = ZOOM_MAX_NUM;
dkato 2:c7faef0ef374 399 while (1) {
dkato 2:c7faef0ef374 400 /* Get coordinates */
dkato 2:c7faef0ef374 401 Get_Coordinates(&touch_num, &pos_x0, &pos_y0);
dkato 2:c7faef0ef374 402 if (touch_num != 0) {
dkato 2:c7faef0ef374 403 if (Scan_Key(return_key_tbl, pos_x0, pos_y0) == RGA_FUNC_RETURN) {
dkato 2:c7faef0ef374 404 break;
dkato 2:c7faef0ef374 405 }
dkato 2:c7faef0ef374 406 work_height_pos = ZOOM_MAX_NUM * ((float32_t)pos_x0 / (float32_t)(LCD_PIXEL_WIDTH));
dkato 2:c7faef0ef374 407 }
dkato 2:c7faef0ef374 408 /* Draw screen */
1050186 0:84e4649e7707 409 Swap_FrameBuffer(frmbuf_info);
dkato 2:c7faef0ef374 410 RGA_Func_Zoom(frmbuf_info, work_height_pos);
dkato 2:c7faef0ef374 411 Update_LCD_Display(frmbuf_info);
1050186 0:84e4649e7707 412 }
1050186 0:84e4649e7707 413 break;
1050186 0:84e4649e7707 414 case RGA_FUNC_ROTATION:
dkato 2:c7faef0ef374 415 graphics_matrix_float_t work_angle = 0;
dkato 2:c7faef0ef374 416 while (1) {
dkato 2:c7faef0ef374 417 /* Get coordinates */
dkato 2:c7faef0ef374 418 Get_Coordinates(&touch_num, &pos_x0, &pos_y0);
dkato 2:c7faef0ef374 419 if (touch_num != 0) {
dkato 2:c7faef0ef374 420 if (Scan_Key(return_key_tbl, pos_x0, pos_y0) == RGA_FUNC_RETURN) {
dkato 2:c7faef0ef374 421 break;
dkato 2:c7faef0ef374 422 }
dkato 2:c7faef0ef374 423 work_angle = ROTATION_MAX_NUM * ((float32_t)pos_x0 / (float32_t)(LCD_PIXEL_WIDTH));
dkato 2:c7faef0ef374 424 }
dkato 2:c7faef0ef374 425 /* Draw screen */
1050186 0:84e4649e7707 426 Swap_FrameBuffer(frmbuf_info);
1050186 0:84e4649e7707 427 RGA_Func_Rotation(frmbuf_info, work_angle);
dkato 2:c7faef0ef374 428 Update_LCD_Display(frmbuf_info);
1050186 0:84e4649e7707 429 }
1050186 0:84e4649e7707 430 break;
1050186 0:84e4649e7707 431 case RGA_FUNC_ACCELERATE:
dkato 2:c7faef0ef374 432 int acce_frame_num = 0;
dkato 2:c7faef0ef374 433 int animation_timing = 0;
1050186 0:84e4649e7707 434 float32_t work_relative_pos;
dkato 2:c7faef0ef374 435 while (1) {
dkato 2:c7faef0ef374 436 /* Get coordinates */
dkato 2:c7faef0ef374 437 Get_Coordinates(&touch_num, &pos_x0, &pos_y0);
dkato 2:c7faef0ef374 438 if (touch_num != 0) {
dkato 2:c7faef0ef374 439 func_code_t func_code;
dkato 2:c7faef0ef374 440
dkato 2:c7faef0ef374 441 func_code = Scan_Key(animetion_timing_key_tbl, pos_x0, pos_y0);
dkato 2:c7faef0ef374 442 if (func_code == RGA_FUNC_RETURN) {
dkato 2:c7faef0ef374 443 break;
dkato 2:c7faef0ef374 444 }
dkato 2:c7faef0ef374 445 switch (func_code) {
dkato 2:c7faef0ef374 446 case RGA_FUNC_ANIME_EASE:
dkato 2:c7faef0ef374 447 animation_timing = 0;
dkato 2:c7faef0ef374 448 acce_frame_num = 0;
dkato 2:c7faef0ef374 449 break;
dkato 2:c7faef0ef374 450 case RGA_FUNC_ANIME_LINEAR:
dkato 2:c7faef0ef374 451 animation_timing = 1;
dkato 2:c7faef0ef374 452 acce_frame_num = 0;
dkato 2:c7faef0ef374 453 break;
dkato 2:c7faef0ef374 454 case RGA_FUNC_ANIME_EASE_IN:
dkato 2:c7faef0ef374 455 animation_timing = 2;
dkato 2:c7faef0ef374 456 acce_frame_num = 0;
dkato 2:c7faef0ef374 457 break;
dkato 2:c7faef0ef374 458 case RGA_FUNC_ANIME_EASE_OUT:
dkato 2:c7faef0ef374 459 animation_timing = 3;
dkato 2:c7faef0ef374 460 acce_frame_num = 0;
dkato 2:c7faef0ef374 461 break;
dkato 2:c7faef0ef374 462 case RGA_FUNC_ANIME_EASE_IN_OUT:
dkato 2:c7faef0ef374 463 animation_timing = 4;
dkato 2:c7faef0ef374 464 acce_frame_num = 0;
dkato 2:c7faef0ef374 465 break;
dkato 2:c7faef0ef374 466 default:
dkato 2:c7faef0ef374 467 /* Do Nothing */
dkato 2:c7faef0ef374 468 break;
dkato 2:c7faef0ef374 469 }
dkato 2:c7faef0ef374 470 }
dkato 2:c7faef0ef374 471 work_relative_pos = acce_frame_num / (float32_t)ACCELERATE_MAX_NUM;
dkato 2:c7faef0ef374 472 acce_frame_num++;
dkato 2:c7faef0ef374 473 if (acce_frame_num > ACCELERATE_MAX_NUM) {
dkato 2:c7faef0ef374 474 acce_frame_num = 0;
dkato 2:c7faef0ef374 475 }
dkato 2:c7faef0ef374 476 /* Draw screen */
1050186 0:84e4649e7707 477 Swap_FrameBuffer(frmbuf_info);
dkato 2:c7faef0ef374 478 RGA_Func_Accelerate(frmbuf_info, animation_timing, work_relative_pos);
dkato 2:c7faef0ef374 479 Update_LCD_Display(frmbuf_info);
1050186 0:84e4649e7707 480 }
1050186 0:84e4649e7707 481 break;
1050186 0:84e4649e7707 482 default :
1050186 0:84e4649e7707 483 /* Do nothing */
1050186 0:84e4649e7707 484 break;
1050186 0:84e4649e7707 485 }
1050186 0:84e4649e7707 486 }
1050186 0:84e4649e7707 487
1050186 0:84e4649e7707 488 int main(void) {
1050186 0:84e4649e7707 489 func_code_t func_code;
1050186 0:84e4649e7707 490 uint8_t touch_num = 0;
1050186 0:84e4649e7707 491 uint32_t pos_x0 = 0;
1050186 0:84e4649e7707 492 uint32_t pos_y0 = 0;
1050186 0:84e4649e7707 493
1050186 0:84e4649e7707 494 memset(user_frame_buffer, 0, sizeof(user_frame_buffer));
1050186 0:84e4649e7707 495 memset(user_frame_buffer2, 0, sizeof(user_frame_buffer2));
1050186 0:84e4649e7707 496 frame_buffer_info.buffer_address[0] = user_frame_buffer;
1050186 0:84e4649e7707 497 frame_buffer_info.buffer_address[1] = user_frame_buffer2;
1050186 0:84e4649e7707 498 frame_buffer_info.buffer_count = 2;
1050186 0:84e4649e7707 499 frame_buffer_info.show_buffer_index = 0;
1050186 0:84e4649e7707 500 frame_buffer_info.draw_buffer_index = 0;
1050186 0:84e4649e7707 501 frame_buffer_info.width = LCD_PIXEL_WIDTH;
1050186 0:84e4649e7707 502 frame_buffer_info.byte_per_pixel = FRAME_BUFFER_BYTE_PER_PIXEL;
1050186 0:84e4649e7707 503 frame_buffer_info.stride = LCD_PIXEL_WIDTH * FRAME_BUFFER_BYTE_PER_PIXEL;
1050186 0:84e4649e7707 504 frame_buffer_info.height = LCD_PIXEL_HEIGHT;
1050186 0:84e4649e7707 505 frame_buffer_info.pixel_format = PIXEL_FORMAT_RGB565;
dkato 2:c7faef0ef374 506 Init_LCD_Display(frame_buffer_info.buffer_address[0]);
1050186 0:84e4649e7707 507
1050186 0:84e4649e7707 508 /* Display Top Screen */
dkato 2:c7faef0ef374 509 Set_RGAObject(&frame_buffer_info);
dkato 2:c7faef0ef374 510 RGA_Func_DrawTopScreen(&frame_buffer_info);
1050186 0:84e4649e7707 511 Start_LCD_Display();
1050186 0:84e4649e7707 512
1050186 0:84e4649e7707 513 while (1) {
dkato 2:c7faef0ef374 514 /* Get Coordinates */
1050186 0:84e4649e7707 515 Get_Coordinates(&touch_num, &pos_x0, &pos_y0);
1050186 0:84e4649e7707 516 if (touch_num != 0) {
dkato 2:c7faef0ef374 517 func_code = Scan_Key(top_screen_key_tbl, pos_x0, pos_y0);
1050186 0:84e4649e7707 518 if (func_code != RGA_FUNC_NON) {
dkato 2:c7faef0ef374 519 /* Wait key off */
dkato 2:c7faef0ef374 520 while (1) {
dkato 2:c7faef0ef374 521 Get_Coordinates(&touch_num, &pos_x0, &pos_y0);
dkato 2:c7faef0ef374 522 if (touch_num == 0) {
dkato 2:c7faef0ef374 523 break;
dkato 2:c7faef0ef374 524 }
dkato 2:c7faef0ef374 525 Thread::wait(50);
dkato 2:c7faef0ef374 526 }
dkato 2:c7faef0ef374 527
1050186 0:84e4649e7707 528 /* Execute RGA functions */
dkato 2:c7faef0ef374 529 Exe_RGA_Func(func_code, &frame_buffer_info);
dkato 2:c7faef0ef374 530
1050186 0:84e4649e7707 531 /* Return Top Screen */
dkato 2:c7faef0ef374 532 Swap_FrameBuffer(&frame_buffer_info);
dkato 2:c7faef0ef374 533 RGA_Func_DrawTopScreen(&frame_buffer_info);
dkato 2:c7faef0ef374 534 Update_LCD_Display(&frame_buffer_info);
1050186 0:84e4649e7707 535 }
1050186 0:84e4649e7707 536 }
1050186 0:84e4649e7707 537 Thread::wait(100);
1050186 0:84e4649e7707 538 }
1050186 0:84e4649e7707 539 }