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
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.
- Datasheet of Si1143
http://www.silabs.com/Support%20Documents/TechnicalDocs/Si114x.pdf
About wiring
VDD | 3.3V |
SCL | D15 |
SDA | D14 |
GND | GND |
main.cpp@4:2318f8bee89c, 2016-05-30 (annotated)
- 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?
User | Revision | Line number | New 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 | } |