test public

Dependencies:   HttpServer_snapshot_mbed-os

Revision:
0:e9fd5575b10e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-gr-libs/EasyAttach_CameraAndLCD/EasyAttach_CameraAndLCD.cpp	Fri Oct 18 03:09:43 2019 +0000
@@ -0,0 +1,305 @@
+/* Copyright (c) 2017 dkato
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "mbed.h"
+#include "rtos.h"
+#include "EasyAttach_CameraAndLCD.h"
+
+#if MBED_CONF_APP_LCD
+#if ((MBED_CONF_APP_LCD_TYPE & 0xFF00) == 0x0000)    /* GR-PEACH LVDS */
+static DigitalOut lcd_cntrst(P8_15);
+#elif ((MBED_CONF_APP_LCD_TYPE & 0xFF00) == 0x1000)  /* GR-LYCHEE */
+static PwmOut lcd_cntrst(P3_12);
+#elif (MBED_CONF_APP_LCD_TYPE == RZ_A2M_EVB_RSK_TFT) /* RZ/A2M */
+static PwmOut lcd_cntrst(P7_6);
+#endif
+#define MAX_BACKLIGHT_VOL       (33.0f)
+#ifndef TYPICAL_BACKLIGHT_VOL
+  #define TYPICAL_BACKLIGHT_VOL (33.0f)
+#endif
+static float voltage_adjust = (TYPICAL_BACKLIGHT_VOL / MAX_BACKLIGHT_VOL);
+#endif
+
+static const DisplayBase::lcd_config_t * lcd_port_init(DisplayBase& Display) {
+#if MBED_CONF_APP_LCD
+ #if ((MBED_CONF_APP_LCD_TYPE & 0xFF00) == 0x0000)   /* GR-PEACH LVDS */
+    PinName lvds_pin[8] = {
+        /* data pin */
+        P5_7, P5_6, P5_5, P5_4, P5_3, P5_2, P5_1, P5_0
+    };
+    Display.Graphics_Lvds_Port_Init(lvds_pin, 8);
+
+    DigitalOut lcd_pwon(P7_15);
+    DigitalOut lcd_blon(P8_1);
+    lcd_pwon = 0;
+    lcd_blon = 0;
+    ThisThread::sleep_for(100);
+    lcd_pwon = 1;
+    lcd_blon = 1;
+ #elif ((MBED_CONF_APP_LCD_TYPE & 0xFF00) == 0x0100) /* GR-PEACH RGB */
+    PinName lcd_pin[28] = {
+        /* data pin */
+        P11_15, P11_14, P11_13, P11_12, P5_7, P5_6, P5_5, P5_4, P5_3, P5_2, P5_1, P5_0,
+        P4_7, P4_6, P4_5, P4_4, P10_12, P10_13, P10_14, P10_15, P3_15, P3_14, P3_13,
+        P3_12, P3_11, P3_10, P3_9, P3_8
+    };
+    Display.Graphics_Lcd_Port_Init(lcd_pin, 28);
+ #elif ((MBED_CONF_APP_LCD_TYPE & 0xFF00) == 0x1000) /* GR-LYCHEE */
+    PinName lcd_pin[28] = {
+        /* data pin */
+        P6_15, P6_14, P6_13, P6_12, P6_11, P6_10, P6_9, P6_8, P6_7, P6_6, P6_5, P6_4,
+        P6_3, P6_2, P6_1, P6_0, P3_7, P3_6, P3_5, P3_4, P3_3, P3_2, P3_1, P3_0, P5_2,
+        P5_1, P5_0, P7_4, 
+    };
+    Display.Graphics_Lcd_Port_Init(lcd_pin, 28);
+
+    DigitalOut lcd_pwon(P5_12);
+    lcd_pwon = 0;
+    lcd_cntrst.period_us(500);
+    ThisThread::sleep_for(100);
+    lcd_pwon = 1;
+ #elif ((MBED_CONF_APP_LCD_TYPE & 0xFF00) == 0x2000) /* RZ/A2M LVDS */
+    PinName lvds_pin[8] = {
+        /* data pin */
+        P4_0, P4_1, P4_2, P4_3, P4_4, P4_5, P4_6, P4_7
+    };
+    Display.Graphics_Lvds_Port_Init(lvds_pin, 8);
+ #elif ((MBED_CONF_APP_LCD_TYPE & 0xFF00) == 0x2100) /* RZ/A2M RGB */
+    PinName lcd_pin[28] = {
+        /* data pin */
+        PB_5, PB_4, PB_3, PB_2, PB_1, PB_0, PA_7, PA_6, PA_5, PA_4, PA_3, PA_2, PA_1, PA_0,
+        P8_0, PF_0, PF_1, PF_2, PF_3, PF_4, PF_5, PF_6, PH_2, PF_7, PC_3, PC_4, P7_7, PJ_6
+    };
+    Display.Graphics_Lcd_Port_Init(lcd_pin, 28);
+  #if MBED_CONF_APP_LCD_TYPE == RZ_A2M_DVI_STICK
+    const char send_cmd[3] = {0x08u, 0xbfu, 0x70u};
+   #if defined(TARGET_RZ_A2M_SBEV) || defined(TARGET_SEMB1402)
+    I2C mI2c_(PD_5, PD_4);
+   #else
+    I2C mI2c_(I2C_SDA, I2C_SCL);
+   #endif
+    mI2c_.write(0x78, send_cmd, 3);
+  #elif MBED_CONF_APP_LCD_TYPE == RZ_A2M_EVB_RSK_TFT
+    lcd_cntrst.period_us(500);
+  #endif
+ #endif
+    return &LcdCfgTbl_LCD_shield;
+#else
+    return NULL;
+#endif
+}
+
+static DisplayBase::graphics_error_t camera_init(DisplayBase& Display, uint16_t cap_width, uint16_t cap_height) {
+#if MBED_CONF_APP_CAMERA
+ #if MBED_CONF_APP_CAMERA_TYPE == CAMERA_CVBS
+    DisplayBase::graphics_error_t error;
+    error = Display.Graphics_Video_init(DisplayBase::INPUT_SEL_VDEC, NULL);
+    if( error != DisplayBase::GRAPHICS_OK ) {
+        printf("Line %d, error %d\n", __LINE__, error);
+        return error;
+    }
+
+    return DisplayBase::GRAPHICS_OK;
+ #else
+    DisplayBase::graphics_error_t error;
+    DisplayBase::video_input_sel_t video_input_sel;
+
+  #if CAMERA_MODULE == MODULE_MIPI
+    // do nothing
+  #elif defined(TARGET_RZ_A1H)
+    PinName cmos_camera_pin[11] = {
+        /* data pin */
+        P2_7, P2_6, P2_5, P2_4, P2_3, P2_2, P2_1, P2_0,
+        /* control pin */
+        P10_0,      /* DV0_CLK   */
+        P1_0,       /* DV0_Vsync */
+        P1_1        /* DV0_Hsync */
+    };
+   #if MBED_CONF_APP_SHIELD_TYPE == SHIELD_AUDIO_CAMERA
+    DigitalOut pwdn(P3_12);
+    pwdn = 0;
+    ThisThread::sleep_for(1 + 1);
+   #elif MBED_CONF_APP_SHIELD_TYPE == SHIELD_WIRELESS_CAMERA
+    DigitalOut pwdn(P3_15);
+    DigitalOut rstb(P3_14);
+    pwdn = 0;
+    rstb = 0;
+    ThisThread::sleep_for(10 + 1);
+    rstb = 1;
+    ThisThread::sleep_for(1 + 1);
+   #endif
+  #elif defined(TARGET_GR_LYCHEE)
+    PinName cmos_camera_pin[11] = {
+        /* data pin */
+        P1_0, P1_1, P1_2, P1_3, P1_8, P1_9, P1_10, P1_11,
+        /* control pin */
+        P7_8,       /* DV0_CLK   */
+        P7_9,       /* DV0_Vsync */
+        P7_10       /* DV0_Hsync */
+    };
+    DigitalOut pwdn(P7_11);
+    DigitalOut rstb(P2_3);
+
+    pwdn = 0;
+    rstb = 0;
+    ThisThread::sleep_for(10 + 1);
+    rstb = 1;
+    ThisThread::sleep_for(1 + 1);
+  #elif defined(TARGET_RZ_A2M_EVB) || defined(TARGET_RZ_A2M_EVB_HF) || defined(TARGET_RZ_A2M_SBEV) || defined(TARGET_SEMB1402)
+    PinName cmos_camera_pin[11] = {
+        /* data pin */
+        PE_1, PE_2, PE_3, PE_4, PE_5, PE_6, PH_0, PH_1,
+        /* control pin */
+        P6_1,       /* VIO_CLK   */
+        P6_2,       /* VIO_VD */
+        P6_3        /* VIO_HD */
+    };
+    DigitalOut camera_stby(PE_0);
+    camera_stby = 0;
+    ThisThread::sleep_for(1 + 1);
+  #endif
+
+    /* camera input port setting */
+  #if CAMERA_MODULE == MODULE_VDC
+    video_input_sel = DisplayBase::INPUT_SEL_EXT;
+    error = Display.Graphics_Dvinput_Port_Init(cmos_camera_pin, 11);
+  #elif CAMERA_MODULE == MODULE_CEU
+    video_input_sel = DisplayBase::INPUT_SEL_CEU;
+    error = Display.Graphics_Ceu_Port_Init(cmos_camera_pin, 11);
+  #else
+    video_input_sel = DisplayBase::INPUT_SEL_MIPI;
+    error = DisplayBase::GRAPHICS_OK;
+  #endif
+    if( error != DisplayBase::GRAPHICS_OK) {
+        printf("Line %d, error %d\n", __LINE__, error);
+        return error;
+    }
+
+  #if MBED_CONF_APP_CAMERA_TYPE == CAMERA_MT9V111
+    MT9V111_config camera_cfg;
+  #elif MBED_CONF_APP_CAMERA_TYPE == CAMERA_OV7725
+    OV7725_config camera_cfg;
+  #elif MBED_CONF_APP_CAMERA_TYPE == CAMERA_OV5642
+    OV5642_config camera_cfg;
+  #elif MBED_CONF_APP_CAMERA_TYPE == CAMERA_RASPBERRY_PI
+    RaspberryPi_config camera_cfg;
+  #else
+    #error "No camera chosen. Please add 'config.camera-type.value' to your mbed_app.json (see README.md for more information)."
+  #endif
+
+  #if CAMERA_MODULE == MODULE_MIPI
+    DisplayBase::video_mipi_param_t mipi_config;
+    DisplayBase::video_vin_setup_t  vin_setup;
+
+    camera_cfg.Initialise();
+    camera_cfg.SetMipiConfig(&mipi_config);
+    camera_cfg.SetVinSetup(&vin_setup);
+    error = Display.Graphics_Video_init(video_input_sel, &mipi_config, &vin_setup);
+  #else
+    DisplayBase::video_ext_in_config_t ext_in_config;
+
+    camera_cfg.Initialise();
+    camera_cfg.SetExtInConfig(&ext_in_config);
+    if (cap_width != 0) {
+        ext_in_config.cap_width  = cap_width;                             /* Capture width */
+    }
+    if (cap_height != 0) {
+        ext_in_config.cap_height = cap_height;                            /* Capture heigh */
+    }
+
+    error = Display.Graphics_Video_init(video_input_sel, &ext_in_config);
+  #endif
+    if( error != DisplayBase::GRAPHICS_OK ) {
+        printf("Line %d, error %d\n", __LINE__, error);
+        return error;
+    }
+
+    return DisplayBase::GRAPHICS_OK;
+ #endif
+#else
+    return DisplayBase::GRAPHICS_OK;
+#endif
+}
+
+DisplayBase::graphics_error_t EasyAttach_Init(DisplayBase& Display, uint16_t cap_width, uint16_t cap_height) {
+    DisplayBase::graphics_error_t error;
+    const DisplayBase::lcd_config_t * lcd_config = lcd_port_init(Display);
+
+    error = Display.Graphics_init(lcd_config);
+    if (error != DisplayBase::GRAPHICS_OK) {
+        printf("Line %d, error %d\n", __LINE__, error);
+        return error;
+    }
+    return camera_init(Display, cap_width, cap_height);
+}
+
+void EasyAttach_SetTypicalBacklightVol(float typ_vol) {
+#if MBED_CONF_APP_LCD
+    if (typ_vol > MAX_BACKLIGHT_VOL) {
+        voltage_adjust = 1.0f;
+    } else {
+        voltage_adjust = (typ_vol / MAX_BACKLIGHT_VOL);
+    }
+#endif
+}
+
+void EasyAttach_LcdBacklight(bool type) {
+#if MBED_CONF_APP_LCD
+    if (type) {
+        EasyAttach_LcdBacklight(1.0f);
+    } else {
+        EasyAttach_LcdBacklight(0.0f);
+    }
+#endif
+}
+
+void EasyAttach_LcdBacklight(float value) {
+#if MBED_CONF_APP_LCD
+#if ((MBED_CONF_APP_LCD_TYPE & 0xFF00) == 0x0000) || ((MBED_CONF_APP_LCD_TYPE & 0xFF00) == 0x1000) || (MBED_CONF_APP_LCD_TYPE == RZ_A2M_EVB_RSK_TFT)
+    lcd_cntrst = (value * voltage_adjust);
+#endif
+#endif
+}
+
+DisplayBase::graphics_error_t EasyAttach_CameraStart(DisplayBase& Display, DisplayBase::video_input_channel_t channel) {
+#if MBED_CONF_APP_CAMERA
+    DisplayBase::graphics_error_t error;
+
+    /* Video write process start */
+    error = Display.Video_Start(channel);
+    if (error != DisplayBase::GRAPHICS_OK) {
+        printf("Line %d, error %d\n", __LINE__, error);
+        return error;
+    }
+
+  #if CAMERA_MODULE == MODULE_VDC
+    /* Video write process stop */
+    error = Display.Video_Stop(channel);
+    if (error != DisplayBase::GRAPHICS_OK) {
+        printf("Line %d, error %d\n", __LINE__, error);
+        return error;
+    }
+
+    /* Video write process start */
+    error = Display.Video_Start(channel);
+    if (error != DisplayBase::GRAPHICS_OK) {
+        printf("Line %d, error %d\n", __LINE__, error);
+        return error;
+    }
+  #endif
+#endif
+
+    return DisplayBase::GRAPHICS_OK;
+}