MY TRAIAL (1)

Dependencies:   FATFileSystem GR-PEACH_video GraphicsFramework LCD_shield_config R_BSP mbed-rtos mbed

Fork of GR-PEACH_NTSC_in_2ch_MOD_try by Hirofumi Inomata

I put an OVERVIEW in the blow URL. https://developer.mbed.org/users/digiponta/notebook/my-trial-ar--vr-2-eyes-display-goes-by-a-gr-peach/

Committer:
dkato
Date:
Mon Aug 08 12:59:36 2016 +0000
Revision:
0:f8cb87301ad8
Child:
1:fa4f4543bcdd
Child:
2:e59e938472ac
first commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dkato 0:f8cb87301ad8 1 #include "mbed.h"
dkato 0:f8cb87301ad8 2 #include "DisplayBace.h"
dkato 0:f8cb87301ad8 3 #include "rtos.h"
dkato 0:f8cb87301ad8 4
dkato 0:f8cb87301ad8 5 #define VIDEO_YCBCR422 (0)
dkato 0:f8cb87301ad8 6 #define VIDEO_RGB888 (1)
dkato 0:f8cb87301ad8 7 #define VIDEO_RGB565 (2)
dkato 0:f8cb87301ad8 8
dkato 0:f8cb87301ad8 9 /**** User Selection *********/
dkato 0:f8cb87301ad8 10 /** Camera setting **/
dkato 0:f8cb87301ad8 11 #define VIDEO_INPUT_FORMAT (VIDEO_YCBCR422) /* Select VIDEO_YCBCR422 or VIDEO_RGB888 or VIDEO_RGB565 */
dkato 0:f8cb87301ad8 12 #define VIDEO_PAL (0) /* Select 0(NTSC) or 1(PAL) If selecting VIDEO_CVBS, this parameter is not referenced.) */
dkato 0:f8cb87301ad8 13 /** LCD setting **/
dkato 0:f8cb87301ad8 14 #define LCD_TYPE (0) /* Select 0(4.3inch) or 1(7.1inch) */
dkato 0:f8cb87301ad8 15 /*****************************/
dkato 0:f8cb87301ad8 16
dkato 0:f8cb87301ad8 17 /** LCD shield config **/
dkato 0:f8cb87301ad8 18 #if (LCD_TYPE == 0)
dkato 0:f8cb87301ad8 19 #include "LCD_shield_config_4_3inch.h"
dkato 0:f8cb87301ad8 20 #else
dkato 0:f8cb87301ad8 21 #include "LCD_shield_config_7_1inch.h"
dkato 0:f8cb87301ad8 22 #endif
dkato 0:f8cb87301ad8 23
dkato 0:f8cb87301ad8 24 /** Video and Grapics (GRAPHICS_LAYER_0) parameter **/
dkato 0:f8cb87301ad8 25 /* NTSC or PAL */
dkato 0:f8cb87301ad8 26 #if VIDEO_PAL == 0
dkato 0:f8cb87301ad8 27 #define COL_SYS (DisplayBase::COL_SYS_NTSC_358)
dkato 0:f8cb87301ad8 28 #else
dkato 0:f8cb87301ad8 29 #define COL_SYS (DisplayBase::COL_SYS_PAL_443)
dkato 0:f8cb87301ad8 30 #endif
dkato 0:f8cb87301ad8 31
dkato 0:f8cb87301ad8 32 /* Video input and LCD layer 0 output */
dkato 0:f8cb87301ad8 33 #if VIDEO_INPUT_FORMAT == VIDEO_YCBCR422
dkato 0:f8cb87301ad8 34 #define VIDEO_FORMAT (DisplayBase::VIDEO_FORMAT_YCBCR422)
dkato 0:f8cb87301ad8 35 #define GRAPHICS_FORMAT (DisplayBase::GRAPHICS_FORMAT_YCBCR422)
dkato 0:f8cb87301ad8 36 #define WR_RD_WRSWA (DisplayBase::WR_RD_WRSWA_NON)
dkato 0:f8cb87301ad8 37 #elif VIDEO_INPUT_FORMAT == VIDEO_RGB565
dkato 0:f8cb87301ad8 38 #define VIDEO_FORMAT (DisplayBase::VIDEO_FORMAT_RGB565)
dkato 0:f8cb87301ad8 39 #define GRAPHICS_FORMAT (DisplayBase::GRAPHICS_FORMAT_RGB565)
dkato 0:f8cb87301ad8 40 #define WR_RD_WRSWA (DisplayBase::WR_RD_WRSWA_32_16BIT)
dkato 0:f8cb87301ad8 41 #else
dkato 0:f8cb87301ad8 42 #define VIDEO_FORMAT (DisplayBase::VIDEO_FORMAT_RGB888)
dkato 0:f8cb87301ad8 43 #define GRAPHICS_FORMAT (DisplayBase::GRAPHICS_FORMAT_RGB888)
dkato 0:f8cb87301ad8 44 #define WR_RD_WRSWA (DisplayBase::WR_RD_WRSWA_32BIT)
dkato 0:f8cb87301ad8 45 #endif
dkato 0:f8cb87301ad8 46
dkato 0:f8cb87301ad8 47 /* The size of the video input is adjusted to the LCD size. */
dkato 0:f8cb87301ad8 48 #define VIDEO_PIXEL_HW LCD_PIXEL_WIDTH
dkato 0:f8cb87301ad8 49 #define VIDEO_PIXEL_VW LCD_PIXEL_HEIGHT
dkato 0:f8cb87301ad8 50
dkato 0:f8cb87301ad8 51 /*! Frame buffer stride: Frame buffer stride should be set to a multiple of 32 or 128
dkato 0:f8cb87301ad8 52 in accordance with the frame buffer burst transfer mode. */
dkato 0:f8cb87301ad8 53 /* FRAME BUFFER Parameter GRAPHICS_LAYER_0 */
dkato 0:f8cb87301ad8 54 #if ( VIDEO_INPUT_FORMAT == VIDEO_YCBCR422 || VIDEO_INPUT_FORMAT == VIDEO_RGB565 )
dkato 0:f8cb87301ad8 55 #define FRAME_BUFFER_BYTE_PER_PIXEL (2u)
dkato 0:f8cb87301ad8 56 #else
dkato 0:f8cb87301ad8 57 #define FRAME_BUFFER_BYTE_PER_PIXEL (4u)
dkato 0:f8cb87301ad8 58 #endif
dkato 0:f8cb87301ad8 59 #define FRAME_BUFFER_STRIDE (((LCD_PIXEL_WIDTH * FRAME_BUFFER_BYTE_PER_PIXEL) + 31u) & ~31u)
dkato 0:f8cb87301ad8 60
dkato 0:f8cb87301ad8 61 static DisplayBase Display;
dkato 0:f8cb87301ad8 62 static DigitalOut lcd_pwon(P7_15);
dkato 0:f8cb87301ad8 63 static DigitalOut lcd_blon(P8_1);
dkato 0:f8cb87301ad8 64 static PwmOut lcd_cntrst(P8_15);
dkato 0:f8cb87301ad8 65 static DigitalOut led_blue(LED_BLUE);
dkato 0:f8cb87301ad8 66
dkato 0:f8cb87301ad8 67 #if defined(__ICCARM__)
dkato 0:f8cb87301ad8 68 /* 32 bytes aligned */
dkato 0:f8cb87301ad8 69 #pragma data_alignment=32
dkato 0:f8cb87301ad8 70 static uint8_t user_frame_buffer0[FRAME_BUFFER_STRIDE * LCD_PIXEL_HEIGHT];
dkato 0:f8cb87301ad8 71 #pragma data_alignment=4
dkato 0:f8cb87301ad8 72 #else
dkato 0:f8cb87301ad8 73 /* 32 bytes aligned */
dkato 0:f8cb87301ad8 74 static uint8_t user_frame_buffer0[FRAME_BUFFER_STRIDE * LCD_PIXEL_HEIGHT]__attribute((aligned(32)));
dkato 0:f8cb87301ad8 75 #endif
dkato 0:f8cb87301ad8 76 static bool graphics_init_end = false;
dkato 0:f8cb87301ad8 77
dkato 0:f8cb87301ad8 78 /****** LCD ******/
dkato 0:f8cb87301ad8 79 static void Init_LCD_Display(void) {
dkato 0:f8cb87301ad8 80 DisplayBase::graphics_error_t error;
dkato 0:f8cb87301ad8 81 DisplayBase::lcd_config_t lcd_config;
dkato 0:f8cb87301ad8 82 PinName lvds_pin[8] = {
dkato 0:f8cb87301ad8 83 /* data pin */
dkato 0:f8cb87301ad8 84 P5_7, P5_6, P5_5, P5_4, P5_3, P5_2, P5_1, P5_0
dkato 0:f8cb87301ad8 85 };
dkato 0:f8cb87301ad8 86
dkato 0:f8cb87301ad8 87 lcd_pwon = 0;
dkato 0:f8cb87301ad8 88 lcd_blon = 0;
dkato 0:f8cb87301ad8 89 Thread::wait(100);
dkato 0:f8cb87301ad8 90 lcd_pwon = 1;
dkato 0:f8cb87301ad8 91 lcd_blon = 1;
dkato 0:f8cb87301ad8 92
dkato 0:f8cb87301ad8 93 Display.Graphics_Lvds_Port_Init(lvds_pin, 8);
dkato 0:f8cb87301ad8 94
dkato 0:f8cb87301ad8 95 /* Graphics initialization process */
dkato 0:f8cb87301ad8 96 lcd_config = LcdCfgTbl_LCD_shield;
dkato 0:f8cb87301ad8 97 error = Display.Graphics_init(&lcd_config);
dkato 0:f8cb87301ad8 98 if (error != DisplayBase::GRAPHICS_OK) {
dkato 0:f8cb87301ad8 99 printf("Line %d, error %d\n", __LINE__, error);
dkato 0:f8cb87301ad8 100 mbed_die();
dkato 0:f8cb87301ad8 101 }
dkato 0:f8cb87301ad8 102 graphics_init_end = true;
dkato 0:f8cb87301ad8 103 }
dkato 0:f8cb87301ad8 104
dkato 0:f8cb87301ad8 105 static void Start_LCD_Display(uint8_t * p_buf) {
dkato 0:f8cb87301ad8 106 DisplayBase::rect_t rect;
dkato 0:f8cb87301ad8 107
dkato 0:f8cb87301ad8 108 rect.vs = 0;
dkato 0:f8cb87301ad8 109 rect.vw = LCD_PIXEL_HEIGHT;
dkato 0:f8cb87301ad8 110 rect.hs = 0;
dkato 0:f8cb87301ad8 111 rect.hw = LCD_PIXEL_WIDTH;
dkato 0:f8cb87301ad8 112 Display.Graphics_Read_Setting(
dkato 0:f8cb87301ad8 113 DisplayBase::GRAPHICS_LAYER_0,
dkato 0:f8cb87301ad8 114 (void *)p_buf,
dkato 0:f8cb87301ad8 115 FRAME_BUFFER_STRIDE,
dkato 0:f8cb87301ad8 116 GRAPHICS_FORMAT,
dkato 0:f8cb87301ad8 117 WR_RD_WRSWA,
dkato 0:f8cb87301ad8 118 &rect
dkato 0:f8cb87301ad8 119 );
dkato 0:f8cb87301ad8 120 Display.Graphics_Start(DisplayBase::GRAPHICS_LAYER_0);
dkato 0:f8cb87301ad8 121 }
dkato 0:f8cb87301ad8 122
dkato 0:f8cb87301ad8 123 /****** Video ******/
dkato 0:f8cb87301ad8 124 static void Init_Video(void) {
dkato 0:f8cb87301ad8 125 DisplayBase::graphics_error_t error;
dkato 0:f8cb87301ad8 126
dkato 0:f8cb87301ad8 127 /* Graphics initialization process */
dkato 0:f8cb87301ad8 128 if (graphics_init_end == false) {
dkato 0:f8cb87301ad8 129 /* When not initializing LCD, this processing is needed. */
dkato 0:f8cb87301ad8 130 error = Display.Graphics_init(NULL);
dkato 0:f8cb87301ad8 131 if (error != DisplayBase::GRAPHICS_OK) {
dkato 0:f8cb87301ad8 132 printf("Line %d, error %d\n", __LINE__, error);
dkato 0:f8cb87301ad8 133 mbed_die();
dkato 0:f8cb87301ad8 134 }
dkato 0:f8cb87301ad8 135 graphics_init_end = true;
dkato 0:f8cb87301ad8 136 }
dkato 0:f8cb87301ad8 137
dkato 0:f8cb87301ad8 138 error = Display.Graphics_Video_init( DisplayBase::INPUT_SEL_VDEC, NULL);
dkato 0:f8cb87301ad8 139 if( error != DisplayBase::GRAPHICS_OK ) {
dkato 0:f8cb87301ad8 140 printf("Line %d, error %d\n", __LINE__, error);
dkato 0:f8cb87301ad8 141 mbed_die();
dkato 0:f8cb87301ad8 142 }
dkato 0:f8cb87301ad8 143 }
dkato 0:f8cb87301ad8 144
dkato 0:f8cb87301ad8 145 static void Start_Video(DisplayBase::video_input_channel_t ch, uint8_t * p_buf) {
dkato 0:f8cb87301ad8 146 DisplayBase::graphics_error_t error;
dkato 0:f8cb87301ad8 147
dkato 0:f8cb87301ad8 148 /* Video capture setting (progressive form fixed) */
dkato 0:f8cb87301ad8 149 error = Display.Video_Write_Setting(
dkato 0:f8cb87301ad8 150 ch,
dkato 0:f8cb87301ad8 151 COL_SYS,
dkato 0:f8cb87301ad8 152 p_buf,
dkato 0:f8cb87301ad8 153 FRAME_BUFFER_STRIDE,
dkato 0:f8cb87301ad8 154 VIDEO_FORMAT,
dkato 0:f8cb87301ad8 155 WR_RD_WRSWA,
dkato 0:f8cb87301ad8 156 VIDEO_PIXEL_VW,
dkato 0:f8cb87301ad8 157 VIDEO_PIXEL_HW / 2
dkato 0:f8cb87301ad8 158 );
dkato 0:f8cb87301ad8 159 if (error != DisplayBase::GRAPHICS_OK) {
dkato 0:f8cb87301ad8 160 printf("Line %d, error %d\n", __LINE__, error);
dkato 0:f8cb87301ad8 161 mbed_die();
dkato 0:f8cb87301ad8 162 }
dkato 0:f8cb87301ad8 163
dkato 0:f8cb87301ad8 164 /* Video write process start */
dkato 0:f8cb87301ad8 165 error = Display.Video_Start(ch);
dkato 0:f8cb87301ad8 166 if (error != DisplayBase::GRAPHICS_OK) {
dkato 0:f8cb87301ad8 167 printf("Line %d, error %d\n", __LINE__, error);
dkato 0:f8cb87301ad8 168 mbed_die();
dkato 0:f8cb87301ad8 169 }
dkato 0:f8cb87301ad8 170
dkato 0:f8cb87301ad8 171 /* Video write process stop */
dkato 0:f8cb87301ad8 172 error = Display.Video_Stop(ch);
dkato 0:f8cb87301ad8 173 if (error != DisplayBase::GRAPHICS_OK) {
dkato 0:f8cb87301ad8 174 printf("Line %d, error %d\n", __LINE__, error);
dkato 0:f8cb87301ad8 175 mbed_die();
dkato 0:f8cb87301ad8 176 }
dkato 0:f8cb87301ad8 177
dkato 0:f8cb87301ad8 178 /* Video write process start */
dkato 0:f8cb87301ad8 179 error = Display.Video_Start(ch);
dkato 0:f8cb87301ad8 180 if (error != DisplayBase::GRAPHICS_OK) {
dkato 0:f8cb87301ad8 181 printf("Line %d, error %d\n", __LINE__, error);
dkato 0:f8cb87301ad8 182 mbed_die();
dkato 0:f8cb87301ad8 183 }
dkato 0:f8cb87301ad8 184 }
dkato 0:f8cb87301ad8 185
dkato 0:f8cb87301ad8 186 /****** main ******/
dkato 0:f8cb87301ad8 187 int main(void) {
dkato 0:f8cb87301ad8 188 /* Initialization of LCD */
dkato 0:f8cb87301ad8 189 Init_LCD_Display(); /* When using LCD, please call before than Init_Video(). */
dkato 0:f8cb87301ad8 190
dkato 0:f8cb87301ad8 191 /* Initialization of Video */
dkato 0:f8cb87301ad8 192 Init_Video();
dkato 0:f8cb87301ad8 193
dkato 0:f8cb87301ad8 194 /* Initialization memory */
dkato 0:f8cb87301ad8 195 memset(user_frame_buffer0, 0, (FRAME_BUFFER_STRIDE * LCD_PIXEL_HEIGHT));
dkato 0:f8cb87301ad8 196
dkato 0:f8cb87301ad8 197 /* Start of Video */
dkato 0:f8cb87301ad8 198 Start_Video(DisplayBase::VIDEO_INPUT_CHANNEL_0, &user_frame_buffer0[0]);
dkato 0:f8cb87301ad8 199 Start_Video(DisplayBase::VIDEO_INPUT_CHANNEL_1, &user_frame_buffer0[FRAME_BUFFER_STRIDE / 2]);
dkato 0:f8cb87301ad8 200
dkato 0:f8cb87301ad8 201 /* Start of LCD */
dkato 0:f8cb87301ad8 202 Start_LCD_Display(&user_frame_buffer0[0]);
dkato 0:f8cb87301ad8 203
dkato 0:f8cb87301ad8 204 /* Backlight on */
dkato 0:f8cb87301ad8 205 Thread::wait(200);
dkato 0:f8cb87301ad8 206 lcd_cntrst.write(1.0);
dkato 0:f8cb87301ad8 207
dkato 0:f8cb87301ad8 208 while (1) {
dkato 0:f8cb87301ad8 209 led_blue = !led_blue;
dkato 0:f8cb87301ad8 210 Thread::wait(1000);
dkato 0:f8cb87301ad8 211 }
dkato 0:f8cb87301ad8 212 }