Tomo Yamanaka / Mbed 2 deprecated DrawImage_by_2_gesture_sensor

Dependencies:   GR-PEACH_video SI1143 mbed-rtos mbed

Committer:
1050186
Date:
Tue May 31 04:55:21 2016 +0000
Revision:
1:8eddef24a632
Parent:
0:7e5105dee0cb
delete R_BSP library.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
1050186 0:7e5105dee0cb 1 #include "mbed.h"
1050186 0:7e5105dee0cb 2 #include "DisplayBace.h"
1050186 0:7e5105dee0cb 3 #include "rtos.h"
1050186 0:7e5105dee0cb 4 #include "SI1143.h"
1050186 0:7e5105dee0cb 5 #include "image_data.h"
1050186 0:7e5105dee0cb 6
1050186 0:7e5105dee0cb 7 /**** LCD Parameter **********/
1050186 0:7e5105dee0cb 8 #define LCD_DE_MODE (0)
1050186 0:7e5105dee0cb 9 #define LCD_SYNC_MODE (1)
1050186 0:7e5105dee0cb 10
1050186 0:7e5105dee0cb 11 #define LCD_DOT_CLOCK (13.40f) // 13.4MHz
1050186 0:7e5105dee0cb 12
1050186 0:7e5105dee0cb 13 #define LCD_H_WIDTH (480u)
1050186 0:7e5105dee0cb 14 #define LCD_H_BACK_PORCH (43u)
1050186 0:7e5105dee0cb 15 #define LCD_H_FRONT_PORCH (52u)
1050186 0:7e5105dee0cb 16 #define LCD_H_SYNC_WIDTH (41u)
1050186 0:7e5105dee0cb 17
1050186 0:7e5105dee0cb 18 #define LCD_V_WIDTH (272u)
1050186 0:7e5105dee0cb 19 #define LCD_V_BACK_PORCH (12u)
1050186 0:7e5105dee0cb 20 #define LCD_V_FRONT_PORCH (2u)
1050186 0:7e5105dee0cb 21 #define LCD_V_SYNC_WIDTH (10u)
1050186 0:7e5105dee0cb 22
1050186 0:7e5105dee0cb 23 #define LCD_MODE (LCD_SYNC_MODE)
1050186 0:7e5105dee0cb 24
1050186 0:7e5105dee0cb 25 /*****************************/
1050186 0:7e5105dee0cb 26
1050186 0:7e5105dee0cb 27
1050186 0:7e5105dee0cb 28 #define FRAME_BUFFER_BYTE_PER_PIXEL (2u)
1050186 0:7e5105dee0cb 29 #define VIDEO_BUFFER_STRIDE (((LCD_H_WIDTH * FRAME_BUFFER_BYTE_PER_PIXEL) + 31u) & ~31u)
1050186 0:7e5105dee0cb 30 #define VIDEO_BUFFER_HEIGHT (LCD_V_WIDTH)
1050186 0:7e5105dee0cb 31
1050186 0:7e5105dee0cb 32 #define IMG_RGB565 (0)
1050186 0:7e5105dee0cb 33 #define IMG_ARGB1555 (2)
1050186 0:7e5105dee0cb 34 #define IMG_ARGB4444 (3)
1050186 0:7e5105dee0cb 35 #define IMG_CLUT8 (6)
1050186 0:7e5105dee0cb 36 #define IMG_CLUT4 (7)
1050186 0:7e5105dee0cb 37 #define IMG_CLUT1 (8)
1050186 0:7e5105dee0cb 38 #define IMG_XRGB8888 (9)
1050186 0:7e5105dee0cb 39 #define IMG_ARGB8888 (10)
1050186 0:7e5105dee0cb 40 #define IMG_YUV422 (11)
1050186 0:7e5105dee0cb 41
1050186 0:7e5105dee0cb 42 enum {
1050186 0:7e5105dee0cb 43 IMG_SETTING,
1050186 0:7e5105dee0cb 44 IMG_START,
1050186 0:7e5105dee0cb 45 IMG_RED,
1050186 0:7e5105dee0cb 46 IMG_GREEN,
1050186 0:7e5105dee0cb 47 IMG_BLUE,
1050186 0:7e5105dee0cb 48 IMG_YELLOW,
1050186 0:7e5105dee0cb 49 IMG_LIGHTBLUE,
1050186 0:7e5105dee0cb 50 IMG_PINK,
1050186 0:7e5105dee0cb 51 IMG_WHITE
1050186 0:7e5105dee0cb 52 };
1050186 0:7e5105dee0cb 53
1050186 0:7e5105dee0cb 54 enum {
1050186 0:7e5105dee0cb 55 SENSE1_NON,
1050186 0:7e5105dee0cb 56 SENSE1_1,
1050186 0:7e5105dee0cb 57 SENSE1_2,
1050186 0:7e5105dee0cb 58 SENSE1_3
1050186 0:7e5105dee0cb 59 };
1050186 0:7e5105dee0cb 60
1050186 0:7e5105dee0cb 61 enum {
1050186 0:7e5105dee0cb 62 SENSE2_NON,
1050186 0:7e5105dee0cb 63 SENSE2_1,
1050186 0:7e5105dee0cb 64 SENSE2_2,
1050186 0:7e5105dee0cb 65 SENSE2_3
1050186 0:7e5105dee0cb 66 };
1050186 0:7e5105dee0cb 67
1050186 0:7e5105dee0cb 68 DigitalOut lcd_pwon(P7_15);
1050186 0:7e5105dee0cb 69 DigitalOut lcd_blon(P8_1);
1050186 0:7e5105dee0cb 70 PwmOut lcd_cntrst(P8_15);
1050186 0:7e5105dee0cb 71 SI1143 sensor1(I2C_SDA, I2C_SCL);
1050186 0:7e5105dee0cb 72 SI1143 sensor2(P1_7, P1_6);
1050186 0:7e5105dee0cb 73
1050186 0:7e5105dee0cb 74 typedef struct {
1050186 0:7e5105dee0cb 75 uint32_t dummy1;
1050186 0:7e5105dee0cb 76 uint32_t offset_to_image;
1050186 0:7e5105dee0cb 77 uint32_t dummy2;
1050186 0:7e5105dee0cb 78 uint16_t width;
1050186 0:7e5105dee0cb 79 uint16_t height;
1050186 0:7e5105dee0cb 80 uint8_t type;
1050186 0:7e5105dee0cb 81 uint8_t dummy3;
1050186 0:7e5105dee0cb 82 uint32_t dummy4;
1050186 0:7e5105dee0cb 83 } graphics_image_t;
1050186 0:7e5105dee0cb 84
1050186 0:7e5105dee0cb 85 typedef struct {
1050186 0:7e5105dee0cb 86 const graphics_image_t* image;
1050186 0:7e5105dee0cb 87 uint32_t pos_x;
1050186 0:7e5105dee0cb 88 uint32_t pos_y;
1050186 0:7e5105dee0cb 89 } draw_info_t;
1050186 0:7e5105dee0cb 90
1050186 0:7e5105dee0cb 91 typedef struct {
1050186 0:7e5105dee0cb 92 draw_info_t curr;
1050186 0:7e5105dee0cb 93 draw_info_t last;
1050186 0:7e5105dee0cb 94 } image_draw_t;
1050186 0:7e5105dee0cb 95
1050186 0:7e5105dee0cb 96 static const graphics_image_t* image_file[9] = {
1050186 0:7e5105dee0cb 97 g_setting, g_start, g_red, g_gren, g_blue, g_yellow, g_lightblue, g_pink, g_white
1050186 0:7e5105dee0cb 98 };
1050186 0:7e5105dee0cb 99
1050186 0:7e5105dee0cb 100 static uint8_t user_frame_buffer[VIDEO_BUFFER_STRIDE * VIDEO_BUFFER_HEIGHT]__attribute((section("NC_BSS"),aligned(32))); //32 bytes aligned!;
1050186 0:7e5105dee0cb 101 static uint8_t user_frame_buffer2[VIDEO_BUFFER_STRIDE * VIDEO_BUFFER_HEIGHT]__attribute((section("NC_BSS"),aligned(32))); //32 bytes aligned!;
1050186 0:7e5105dee0cb 102 static volatile int32_t vsync_count;
1050186 0:7e5105dee0cb 103 static uint8_t* disp_buff_addr;
1050186 0:7e5105dee0cb 104 static int sense1[3] = {0, 0, 0};
1050186 0:7e5105dee0cb 105 static int sense2[3] = {0, 0, 0};
1050186 0:7e5105dee0cb 106 static image_draw_t img1_info;
1050186 0:7e5105dee0cb 107 static image_draw_t img2_info;
1050186 0:7e5105dee0cb 108
1050186 0:7e5105dee0cb 109 static void IntCallbackFunc_Vsync(DisplayBase::int_type_t int_type)
1050186 0:7e5105dee0cb 110 {
1050186 0:7e5105dee0cb 111 //Interrupt callback function for Vsync interruption
1050186 0:7e5105dee0cb 112 if (vsync_count > 0) {
1050186 0:7e5105dee0cb 113 vsync_count--;
1050186 0:7e5105dee0cb 114 }
1050186 0:7e5105dee0cb 115 }
1050186 0:7e5105dee0cb 116
1050186 0:7e5105dee0cb 117 static void Wait_Vsync(const int32_t wait_count)
1050186 0:7e5105dee0cb 118 {
1050186 0:7e5105dee0cb 119 //Wait for the specified number of times Vsync occurs
1050186 0:7e5105dee0cb 120 vsync_count = wait_count;
1050186 0:7e5105dee0cb 121 while (vsync_count > 0) {
1050186 0:7e5105dee0cb 122 /* Do nothing */
1050186 0:7e5105dee0cb 123 }
1050186 0:7e5105dee0cb 124 }
1050186 0:7e5105dee0cb 125
1050186 0:7e5105dee0cb 126 static void Clr_FrameBuffer(uint8_t frmbuf_num) {
1050186 0:7e5105dee0cb 127 int vcnt, wcnt;
1050186 0:7e5105dee0cb 128 uint16_t * fb_base;
1050186 0:7e5105dee0cb 129 uint16_t * fb_pos;
1050186 0:7e5105dee0cb 130
1050186 0:7e5105dee0cb 131 if ((frmbuf_num & 0x01) != 0) {
1050186 0:7e5105dee0cb 132 fb_base = (uint16_t *)user_frame_buffer;
1050186 0:7e5105dee0cb 133 for (vcnt = 0; vcnt < LCD_V_WIDTH; vcnt++) {
1050186 0:7e5105dee0cb 134 fb_pos = fb_base + (vcnt * LCD_H_WIDTH);
1050186 0:7e5105dee0cb 135 for (wcnt = 0; wcnt < LCD_H_WIDTH; wcnt++) {
1050186 0:7e5105dee0cb 136 fb_pos[wcnt] = 0xFFFF;
1050186 0:7e5105dee0cb 137 }
1050186 0:7e5105dee0cb 138 }
1050186 0:7e5105dee0cb 139 }
1050186 0:7e5105dee0cb 140 if ((frmbuf_num & 0x02) != 0) {
1050186 0:7e5105dee0cb 141 fb_base = (uint16_t *)user_frame_buffer2;
1050186 0:7e5105dee0cb 142 for (vcnt = 0; vcnt < LCD_V_WIDTH; vcnt++) {
1050186 0:7e5105dee0cb 143 fb_pos = fb_base + (vcnt * LCD_H_WIDTH);
1050186 0:7e5105dee0cb 144 for (wcnt = 0; wcnt < LCD_H_WIDTH; wcnt++) {
1050186 0:7e5105dee0cb 145 fb_pos[wcnt] = 0xFFFF;
1050186 0:7e5105dee0cb 146 }
1050186 0:7e5105dee0cb 147 }
1050186 0:7e5105dee0cb 148 }
1050186 0:7e5105dee0cb 149 }
1050186 0:7e5105dee0cb 150
1050186 0:7e5105dee0cb 151 static void Draw_Image(void * dst_buff, uint32_t dst_stride, const graphics_image_t * src_image, uint32_t pos_x, uint32_t pos_y) {
1050186 0:7e5105dee0cb 152 uint32_t offset_to_image;
1050186 0:7e5105dee0cb 153 uint16_t width;
1050186 0:7e5105dee0cb 154 uint16_t height;
1050186 0:7e5105dee0cb 155 uint8_t type;
1050186 0:7e5105dee0cb 156 uint16_t * pSrc16;
1050186 0:7e5105dee0cb 157 uint32_t * pSrc32;
1050186 0:7e5105dee0cb 158 uint16_t * pDst16;
1050186 0:7e5105dee0cb 159 uint32_t * pDst32;
1050186 0:7e5105dee0cb 160 uint32_t x,y;
1050186 0:7e5105dee0cb 161
1050186 0:7e5105dee0cb 162 if (src_image != NULL) {
1050186 0:7e5105dee0cb 163 offset_to_image = src_image->offset_to_image;
1050186 0:7e5105dee0cb 164 width = src_image->width;
1050186 0:7e5105dee0cb 165 height = src_image->height;
1050186 0:7e5105dee0cb 166 type = src_image->type;
1050186 0:7e5105dee0cb 167
1050186 0:7e5105dee0cb 168 if (type == IMG_ARGB4444) {
1050186 0:7e5105dee0cb 169 pDst16 = (uint16_t *)dst_buff;
1050186 0:7e5105dee0cb 170 pSrc16 = (uint16_t *)((uint8_t *)src_image + offset_to_image );
1050186 0:7e5105dee0cb 171
1050186 0:7e5105dee0cb 172 for (y = 0; y < height; y++) {
1050186 0:7e5105dee0cb 173 for (x = 0; x < width; x++) {
1050186 0:7e5105dee0cb 174 if ((pSrc16[(y * width) + x] & 0xf000) != 0) {
1050186 0:7e5105dee0cb 175 /* Copy the pixel value if its alpha value is not 0 */
1050186 0:7e5105dee0cb 176 pDst16[((y + pos_y) * dst_stride / 2) + (x + pos_x)] = pSrc16[(y * width) + x];
1050186 0:7e5105dee0cb 177 }
1050186 0:7e5105dee0cb 178 }
1050186 0:7e5105dee0cb 179 }
1050186 0:7e5105dee0cb 180 } else if (type == IMG_ARGB8888) {
1050186 0:7e5105dee0cb 181 pDst32 = (uint32_t *)dst_buff;
1050186 0:7e5105dee0cb 182 pSrc32 = (uint32_t *)((uint8_t *)src_image + offset_to_image);
1050186 0:7e5105dee0cb 183
1050186 0:7e5105dee0cb 184 for (y = 0; y < height; y++) {
1050186 0:7e5105dee0cb 185 for (x = 0; x < width; x++) {
1050186 0:7e5105dee0cb 186 if ((pSrc32[(y * width) + x] & 0xff000000) != 0) {
1050186 0:7e5105dee0cb 187 /* Copy the pixel value if its alpha value is not 0 */
1050186 0:7e5105dee0cb 188 pDst32[((y + pos_y) * dst_stride / 4) + (x + pos_x)] = pSrc32[(y * width) + x];
1050186 0:7e5105dee0cb 189 }
1050186 0:7e5105dee0cb 190 }
1050186 0:7e5105dee0cb 191 }
1050186 0:7e5105dee0cb 192 } else if (type == IMG_RGB565) {
1050186 0:7e5105dee0cb 193 pDst16 = (uint16_t *)dst_buff;
1050186 0:7e5105dee0cb 194 pSrc16 = (uint16_t *)((uint8_t *)src_image + offset_to_image);
1050186 0:7e5105dee0cb 195
1050186 0:7e5105dee0cb 196 for (y = 0; y < height; y++) {
1050186 0:7e5105dee0cb 197 for (x = 0; x < width; x++) {
1050186 0:7e5105dee0cb 198 pDst16[((y + pos_y) * dst_stride / 2) + (x + pos_x)] = pSrc16[(y * width) + x];
1050186 0:7e5105dee0cb 199 }
1050186 0:7e5105dee0cb 200 }
1050186 0:7e5105dee0cb 201 }
1050186 0:7e5105dee0cb 202 }
1050186 0:7e5105dee0cb 203 }
1050186 0:7e5105dee0cb 204
1050186 0:7e5105dee0cb 205 static int Get_Sensor1(void) {
1050186 0:7e5105dee0cb 206 int sense_num = SENSE1_NON;
1050186 0:7e5105dee0cb 207
1050186 0:7e5105dee0cb 208 // Read each led sensor
1050186 0:7e5105dee0cb 209 sense1[0] = sensor1.get_ps1(5);
1050186 0:7e5105dee0cb 210 sense1[1] = sensor1.get_ps2(5);
1050186 0:7e5105dee0cb 211 sense1[2] = sensor1.get_ps3(5);
1050186 0:7e5105dee0cb 212
1050186 0:7e5105dee0cb 213 if (sense1[0] > 500 || sense1[1] > 500 || sense1[2] > 500) {
1050186 0:7e5105dee0cb 214 if (sense1[0] > sense1[1] && sense1[0] > sense1[2]) {
1050186 0:7e5105dee0cb 215 sense_num = SENSE1_1;
1050186 0:7e5105dee0cb 216 } else if (sense1[1] > sense1[0] && sense1[1] > sense1[2]) {
1050186 0:7e5105dee0cb 217 sense_num = SENSE1_2;
1050186 0:7e5105dee0cb 218 } else if (sense1[2] > sense1[0] && sense1[2] > sense1[1]) {
1050186 0:7e5105dee0cb 219 sense_num = SENSE1_3;
1050186 0:7e5105dee0cb 220 }
1050186 0:7e5105dee0cb 221 }
1050186 0:7e5105dee0cb 222
1050186 0:7e5105dee0cb 223 return sense_num;
1050186 0:7e5105dee0cb 224 }
1050186 0:7e5105dee0cb 225
1050186 0:7e5105dee0cb 226 static int Get_Sensor2(void) {
1050186 0:7e5105dee0cb 227 int sense_num = SENSE2_NON;
1050186 0:7e5105dee0cb 228
1050186 0:7e5105dee0cb 229 // Read each led sensor
1050186 0:7e5105dee0cb 230 sense2[0] = sensor2.get_ps1(5);
1050186 0:7e5105dee0cb 231 sense2[1] = sensor2.get_ps2(5);
1050186 0:7e5105dee0cb 232 sense2[2] = sensor2.get_ps3(5);
1050186 0:7e5105dee0cb 233
1050186 0:7e5105dee0cb 234 if (sense2[0] > 500 || sense2[1] > 500 || sense2[2] > 500) {
1050186 0:7e5105dee0cb 235 if (sense2[0] > sense2[1] && sense2[0] > sense2[2]) {
1050186 0:7e5105dee0cb 236 sense_num = SENSE2_1;
1050186 0:7e5105dee0cb 237 } else if (sense2[1] > sense2[0] && sense2[1] > sense2[2]) {
1050186 0:7e5105dee0cb 238 sense_num = SENSE2_2;
1050186 0:7e5105dee0cb 239 } else if (sense2[2] > sense2[0] && sense2[2] > sense2[1]) {
1050186 0:7e5105dee0cb 240 sense_num = SENSE2_3;
1050186 0:7e5105dee0cb 241 }
1050186 0:7e5105dee0cb 242 }
1050186 0:7e5105dee0cb 243
1050186 0:7e5105dee0cb 244 return sense_num;
1050186 0:7e5105dee0cb 245 }
1050186 0:7e5105dee0cb 246
1050186 0:7e5105dee0cb 247 static void Swap_FrameBuffer(void) {
1050186 0:7e5105dee0cb 248 if (disp_buff_addr == user_frame_buffer) {
1050186 0:7e5105dee0cb 249 disp_buff_addr = user_frame_buffer2;
1050186 0:7e5105dee0cb 250 Clr_FrameBuffer(0x02);
1050186 0:7e5105dee0cb 251 } else {
1050186 0:7e5105dee0cb 252 disp_buff_addr = user_frame_buffer;
1050186 0:7e5105dee0cb 253 Clr_FrameBuffer(0x01);
1050186 0:7e5105dee0cb 254 }
1050186 0:7e5105dee0cb 255 }
1050186 0:7e5105dee0cb 256
1050186 0:7e5105dee0cb 257 int main(void)
1050186 0:7e5105dee0cb 258 {
1050186 0:7e5105dee0cb 259 /* Create DisplayBase object */
1050186 0:7e5105dee0cb 260 DisplayBase Display;
1050186 0:7e5105dee0cb 261 DisplayBase::graphics_error_t error;
1050186 0:7e5105dee0cb 262 DisplayBase::lcd_config_t lcd_config;
1050186 0:7e5105dee0cb 263 disp_buff_addr = user_frame_buffer;
1050186 0:7e5105dee0cb 264 int sense1 = SENSE1_NON;
1050186 0:7e5105dee0cb 265 int sense2 = SENSE2_NON;
1050186 0:7e5105dee0cb 266 img1_info.curr.image = image_file[IMG_START];
1050186 0:7e5105dee0cb 267 img1_info.curr.pos_x = 0;
1050186 0:7e5105dee0cb 268 img1_info.curr.pos_y = 0;
1050186 0:7e5105dee0cb 269 img1_info.last.image = image_file[IMG_WHITE];
1050186 0:7e5105dee0cb 270 img1_info.last.pos_x = 0;
1050186 0:7e5105dee0cb 271 img1_info.last.pos_y = 0;
1050186 0:7e5105dee0cb 272 img2_info.curr.image = image_file[IMG_START];
1050186 0:7e5105dee0cb 273 img2_info.curr.pos_x = 0;
1050186 0:7e5105dee0cb 274 img2_info.curr.pos_y = 0;
1050186 0:7e5105dee0cb 275 img2_info.last.image = image_file[IMG_WHITE];
1050186 0:7e5105dee0cb 276 img2_info.last.pos_x = 240;
1050186 0:7e5105dee0cb 277 img2_info.last.pos_y = 0;
1050186 0:7e5105dee0cb 278
1050186 0:7e5105dee0cb 279 lcd_pwon = 0;
1050186 0:7e5105dee0cb 280 lcd_blon = 0;
1050186 0:7e5105dee0cb 281 Thread::wait(100);
1050186 0:7e5105dee0cb 282 lcd_pwon = 1;
1050186 0:7e5105dee0cb 283 lcd_blon = 1;
1050186 0:7e5105dee0cb 284 Thread::wait(100);
1050186 0:7e5105dee0cb 285
1050186 0:7e5105dee0cb 286 // Setup display
1050186 0:7e5105dee0cb 287 vsync_count = 0;
1050186 0:7e5105dee0cb 288 PinName lvds_pin[8] = {
1050186 0:7e5105dee0cb 289 /* data pin */
1050186 0:7e5105dee0cb 290 P5_7, P5_6, P5_5, P5_4, P5_3, P5_2, P5_1, P5_0
1050186 0:7e5105dee0cb 291 };
1050186 0:7e5105dee0cb 292 DisplayBase::rect_t rect;
1050186 0:7e5105dee0cb 293
1050186 0:7e5105dee0cb 294 lcd_config.lcd_type = DisplayBase::LCD_TYPE_LVDS;
1050186 0:7e5105dee0cb 295 lcd_config.intputClock = 66.67f;
1050186 0:7e5105dee0cb 296 lcd_config.outputClock = LCD_DOT_CLOCK;
1050186 0:7e5105dee0cb 297 lcd_config.lcd_outformat = DisplayBase::LCD_OUTFORMAT_RGB888;
1050186 0:7e5105dee0cb 298 lcd_config.lcd_edge = DisplayBase::EDGE_RISING;
1050186 0:7e5105dee0cb 299 #if(LCD_MODE) //SYNC Mode
1050186 0:7e5105dee0cb 300 lcd_config.h_toatal_period = (LCD_H_BACK_PORCH + LCD_H_WIDTH + LCD_H_FRONT_PORCH);
1050186 0:7e5105dee0cb 301 lcd_config.v_toatal_period = (LCD_V_BACK_PORCH + LCD_V_WIDTH + LCD_V_FRONT_PORCH);
1050186 0:7e5105dee0cb 302
1050186 0:7e5105dee0cb 303 lcd_config.h_disp_widht = (LCD_H_WIDTH);
1050186 0:7e5105dee0cb 304 lcd_config.v_disp_widht = (LCD_V_WIDTH);
1050186 0:7e5105dee0cb 305 lcd_config.h_back_porch = (LCD_H_BACK_PORCH);
1050186 0:7e5105dee0cb 306 lcd_config.v_back_porch = (LCD_V_BACK_PORCH);
1050186 0:7e5105dee0cb 307
1050186 0:7e5105dee0cb 308 lcd_config.h_sync_port = DisplayBase::LCD_TCON_PIN_2;
1050186 0:7e5105dee0cb 309 lcd_config.h_sync_port_polarity = DisplayBase::SIG_POL_INVERTED;
1050186 0:7e5105dee0cb 310 lcd_config.h_sync_width = LCD_H_SYNC_WIDTH;
1050186 0:7e5105dee0cb 311
1050186 0:7e5105dee0cb 312 lcd_config.v_sync_port = DisplayBase::LCD_TCON_PIN_0;
1050186 0:7e5105dee0cb 313 lcd_config.v_sync_port_polarity = DisplayBase::SIG_POL_INVERTED;
1050186 0:7e5105dee0cb 314 lcd_config.v_sync_width = LCD_V_SYNC_WIDTH;
1050186 0:7e5105dee0cb 315
1050186 0:7e5105dee0cb 316 lcd_config.de_port = DisplayBase::LCD_TCON_PIN_3;
1050186 0:7e5105dee0cb 317 lcd_config.de_port_polarity = DisplayBase::SIG_POL_NOT_INVERTED;
1050186 0:7e5105dee0cb 318 #else //DE Mode
1050186 0:7e5105dee0cb 319 lcd_config.h_toatal_period = (LCD_H_WIDTH + 80u);
1050186 0:7e5105dee0cb 320 lcd_config.v_toatal_period = (LCD_V_WIDTH);
1050186 0:7e5105dee0cb 321
1050186 0:7e5105dee0cb 322 lcd_config.h_disp_widht = (LCD_H_WIDTH);
1050186 0:7e5105dee0cb 323 lcd_config.v_disp_widht = (LCD_V_WIDTH);
1050186 0:7e5105dee0cb 324 lcd_config.h_back_porch = (68u);
1050186 0:7e5105dee0cb 325 lcd_config.v_back_porch = (18u);
1050186 0:7e5105dee0cb 326
1050186 0:7e5105dee0cb 327 lcd_config.h_sync_port = DisplayBase::LCD_TCON_PIN_NON;
1050186 0:7e5105dee0cb 328 lcd_config.h_sync_port_polarity = DisplayBase::SIG_POL_NOT_INVERTED;
1050186 0:7e5105dee0cb 329 lcd_config.h_sync_width = 0;
1050186 0:7e5105dee0cb 330
1050186 0:7e5105dee0cb 331 lcd_config.v_sync_port = DisplayBase::LCD_TCON_PIN_NON;
1050186 0:7e5105dee0cb 332 lcd_config.v_sync_port_polarity = DisplayBase::SIG_POL_NOT_INVERTED;
1050186 0:7e5105dee0cb 333 lcd_config.v_sync_width = 0;
1050186 0:7e5105dee0cb 334
1050186 0:7e5105dee0cb 335 lcd_config.de_port = DisplayBase::LCD_TCON_PIN_3;
1050186 0:7e5105dee0cb 336 lcd_config.de_port_polarity = DisplayBase::SIG_POL_INVERTED;
1050186 0:7e5105dee0cb 337 #endif
1050186 0:7e5105dee0cb 338
1050186 0:7e5105dee0cb 339 /* Graphics initialization process */
1050186 0:7e5105dee0cb 340 error = Display.Graphics_init(&lcd_config);
1050186 0:7e5105dee0cb 341 if (error != DisplayBase::GRAPHICS_OK) {
1050186 0:7e5105dee0cb 342 printf("Line %d, error %d\n", __LINE__, error);
1050186 0:7e5105dee0cb 343 while (1);
1050186 0:7e5105dee0cb 344 }
1050186 0:7e5105dee0cb 345
1050186 0:7e5105dee0cb 346 /* Interrupt callback function setting (Vsync signal output from scaler 0) */
1050186 0:7e5105dee0cb 347 error = Display.Graphics_Irq_Handler_Set(DisplayBase::INT_TYPE_S0_LO_VSYNC, 0, IntCallbackFunc_Vsync);
1050186 0:7e5105dee0cb 348 if (error != DisplayBase::GRAPHICS_OK) {
1050186 0:7e5105dee0cb 349 printf("Line %d, error %d\n", __LINE__, error);
1050186 0:7e5105dee0cb 350 while (1);
1050186 0:7e5105dee0cb 351 }
1050186 0:7e5105dee0cb 352
1050186 0:7e5105dee0cb 353 Display.Graphics_Lvds_Port_Init(lvds_pin, 8);
1050186 0:7e5105dee0cb 354 rect.vs = 0;
1050186 0:7e5105dee0cb 355 rect.vw = LCD_V_WIDTH;
1050186 0:7e5105dee0cb 356 rect.hs = 0;
1050186 0:7e5105dee0cb 357 rect.hw = LCD_H_WIDTH;
1050186 0:7e5105dee0cb 358
1050186 0:7e5105dee0cb 359 Display.Graphics_Read_Setting(
1050186 0:7e5105dee0cb 360 DisplayBase::GRAPHICS_LAYER_0,
1050186 0:7e5105dee0cb 361 (void *)disp_buff_addr,
1050186 0:7e5105dee0cb 362 VIDEO_BUFFER_STRIDE,
1050186 0:7e5105dee0cb 363 DisplayBase::GRAPHICS_FORMAT_RGB565,
1050186 0:7e5105dee0cb 364 DisplayBase::WR_RD_WRSWA_32_16BIT,
1050186 0:7e5105dee0cb 365 &rect
1050186 0:7e5105dee0cb 366 );
1050186 0:7e5105dee0cb 367 Display.Graphics_Start(DisplayBase::GRAPHICS_LAYER_0);
1050186 0:7e5105dee0cb 368 lcd_cntrst.write(1.0);
1050186 0:7e5105dee0cb 369
1050186 0:7e5105dee0cb 370 // Setup the baseline
1050186 0:7e5105dee0cb 371 Draw_Image(disp_buff_addr, VIDEO_BUFFER_STRIDE, image_file[IMG_SETTING], 0, 0);
1050186 0:7e5105dee0cb 372 printf("SI1143 Gesture Sensor setting...\n");
1050186 0:7e5105dee0cb 373 sensor1.bias(1,5);
1050186 0:7e5105dee0cb 374 sensor2.bias(1,5);
1050186 0:7e5105dee0cb 375 Thread::wait(1000);
1050186 0:7e5105dee0cb 376 Draw_Image(disp_buff_addr, VIDEO_BUFFER_STRIDE, image_file[IMG_START], 0, 0);
1050186 0:7e5105dee0cb 377 printf("SI1143 Gesture Sensor setting finished!\n");
1050186 0:7e5105dee0cb 378 while (1) {
1050186 0:7e5105dee0cb 379 sense1 = Get_Sensor1();
1050186 0:7e5105dee0cb 380 switch (sense1) {
1050186 0:7e5105dee0cb 381 case SENSE1_1 :
1050186 0:7e5105dee0cb 382 img1_info.curr.image = image_file[IMG_RED];
1050186 0:7e5105dee0cb 383 img1_info.curr.pos_x = 0;
1050186 0:7e5105dee0cb 384 img1_info.curr.pos_y = 0;
1050186 0:7e5105dee0cb 385 break;
1050186 0:7e5105dee0cb 386 case SENSE1_2 :
1050186 0:7e5105dee0cb 387 img1_info.curr.image = image_file[IMG_GREEN];
1050186 0:7e5105dee0cb 388 img1_info.curr.pos_x = 80;
1050186 0:7e5105dee0cb 389 img1_info.curr.pos_y = 0;
1050186 0:7e5105dee0cb 390 break;
1050186 0:7e5105dee0cb 391 case SENSE1_3 :
1050186 0:7e5105dee0cb 392 img1_info.curr.image = image_file[IMG_BLUE];
1050186 0:7e5105dee0cb 393 img1_info.curr.pos_x = 160;
1050186 0:7e5105dee0cb 394 img1_info.curr.pos_y = 0;
1050186 0:7e5105dee0cb 395 break;
1050186 0:7e5105dee0cb 396 default :
1050186 0:7e5105dee0cb 397 img1_info.curr.image = NULL;
1050186 0:7e5105dee0cb 398 img1_info.curr.pos_x = 0;
1050186 0:7e5105dee0cb 399 img1_info.curr.pos_y = 0;
1050186 0:7e5105dee0cb 400 break;
1050186 0:7e5105dee0cb 401 }
1050186 0:7e5105dee0cb 402 sense2 = Get_Sensor2();
1050186 0:7e5105dee0cb 403 switch (sense2) {
1050186 0:7e5105dee0cb 404 case SENSE2_1 :
1050186 0:7e5105dee0cb 405 img2_info.curr.image = image_file[IMG_YELLOW];
1050186 0:7e5105dee0cb 406 img2_info.curr.pos_x = 240;
1050186 0:7e5105dee0cb 407 img2_info.curr.pos_y = 0;
1050186 0:7e5105dee0cb 408 break;
1050186 0:7e5105dee0cb 409 case SENSE2_2 :
1050186 0:7e5105dee0cb 410 img2_info.curr.image = image_file[IMG_LIGHTBLUE];
1050186 0:7e5105dee0cb 411 img2_info.curr.pos_x = 320;
1050186 0:7e5105dee0cb 412 img2_info.curr.pos_y = 0;
1050186 0:7e5105dee0cb 413 break;
1050186 0:7e5105dee0cb 414 case SENSE2_3 :
1050186 0:7e5105dee0cb 415 img2_info.curr.image = image_file[IMG_PINK];
1050186 0:7e5105dee0cb 416 img2_info.curr.pos_x = 400;
1050186 0:7e5105dee0cb 417 img2_info.curr.pos_y = 0;
1050186 0:7e5105dee0cb 418 break;
1050186 0:7e5105dee0cb 419 default :
1050186 0:7e5105dee0cb 420 img2_info.curr.image = NULL;
1050186 0:7e5105dee0cb 421 img2_info.curr.pos_x = 0;
1050186 0:7e5105dee0cb 422 img2_info.curr.pos_y = 0;
1050186 0:7e5105dee0cb 423 break;
1050186 0:7e5105dee0cb 424 }
1050186 0:7e5105dee0cb 425
1050186 0:7e5105dee0cb 426 if ((sense1 != 0) || (sense2 != 0)) {
1050186 0:7e5105dee0cb 427 /* Draw Image */
1050186 0:7e5105dee0cb 428 Swap_FrameBuffer();
1050186 0:7e5105dee0cb 429 if (sense1 != 0) {
1050186 0:7e5105dee0cb 430 Draw_Image(disp_buff_addr, VIDEO_BUFFER_STRIDE, img1_info.curr.image, img1_info.curr.pos_x, img1_info.curr.pos_y);
1050186 0:7e5105dee0cb 431 Draw_Image(disp_buff_addr, VIDEO_BUFFER_STRIDE, img2_info.last.image, img2_info.last.pos_x, img2_info.last.pos_y);
1050186 0:7e5105dee0cb 432 img1_info.last.image = img1_info.curr.image;
1050186 0:7e5105dee0cb 433 img1_info.last.pos_x = img1_info.curr.pos_x;
1050186 0:7e5105dee0cb 434 img1_info.last.pos_y = img1_info.curr.pos_y;
1050186 0:7e5105dee0cb 435 }
1050186 0:7e5105dee0cb 436 if (sense2 != 0) {
1050186 0:7e5105dee0cb 437 Draw_Image(disp_buff_addr, VIDEO_BUFFER_STRIDE, img1_info.last.image, img1_info.last.pos_x, img1_info.last.pos_y);
1050186 0:7e5105dee0cb 438 Draw_Image(disp_buff_addr, VIDEO_BUFFER_STRIDE, img2_info.curr.image, img2_info.curr.pos_x, img2_info.curr.pos_y);
1050186 0:7e5105dee0cb 439 img2_info.last.image = img2_info.curr.image;
1050186 0:7e5105dee0cb 440 img2_info.last.pos_x = img2_info.curr.pos_x;
1050186 0:7e5105dee0cb 441 img2_info.last.pos_y = img2_info.curr.pos_y;
1050186 0:7e5105dee0cb 442 }
1050186 0:7e5105dee0cb 443 Display.Graphics_Read_Change(DisplayBase::GRAPHICS_LAYER_0, (void *)disp_buff_addr);
1050186 0:7e5105dee0cb 444 Wait_Vsync(1);
1050186 0:7e5105dee0cb 445 }
1050186 0:7e5105dee0cb 446 }
1050186 0:7e5105dee0cb 447 }