/*********************************************************************************************************************
* TC264 Opensourec Library TC264 Դ⣩һڹٷ SDK ӿڵĵԴ
* Copyright (c) 2022 SEEKFREE ɿƼ
*
* ļ TC264 Դһ
*
* TC264 Դ 
* Ըᷢ GPLGNU General Public License GNUͨù֤
*  GPL ĵ3棨 GPL3.0ѡģκκİ汾·/޸
*
* Դķϣܷãδκεı֤
* ûԻʺض;ı֤
* ϸμ GPL
*
* ӦյԴͬʱյһ GPL ĸ
* ûУ<https://www.gnu.org/licenses/>
*
* ע
* Դʹ GPL3.0 Դ֤Э Ϊİ汾
* Ӣİ libraries/doc ļµ GPL3_permission_statement.txt ļ
* ֤ libraries ļ ļµ LICENSE ļ
* ӭλʹò ޸ʱ뱣ɿƼİȨ
*
* ļ          zf_device_mt9v03x
* ˾          ɶɿƼ޹˾
* 汾Ϣ          鿴 libraries/doc ļ version ļ 汾˵
*           ADS v1.9.4
* ƽ̨          TC264D
*           https://seekfree.taobao.com/
*
* ޸ļ¼
*                               ע
* 2022-09-15       pudding            first version
* 2023-04-28       pudding            ע˵
********************************************************************************************************************/
/*********************************************************************************************************************
* ߶壺
*                  ------------------------------------
*                  ģܽ             Ƭܽ
*                  TXD                鿴 zf_device_mt9v03x.h  MT9V03X_COF_UART_TX 궨
*                  RXD                鿴 zf_device_mt9v03x.h  MT9V03X_COF_UART_RX 궨
*                  PCLK               鿴 zf_device_mt9v03x.h  MT9V03X_PCLK_PIN 궨
*                  VSY                鿴 zf_device_mt9v03x.h  MT9V03X_VSYNC_PIN 궨
*                  D0-D7              鿴 zf_device_mt9v03x.h  MT9V03X_DATA_PIN 궨 Ӹö忪ʼ˸
*                  VCC                3.3VԴ
*                  GND                Դ
*                  
*                  ------------------------------------
********************************************************************************************************************/

#ifndef _zf_device_mt9v03x_h_
#define _zf_device_mt9v03x_h_

#include "zf_common_typedef.h"
#include "zf_device_type.h"

//================================================ MT9V03X ================================================
#define MT9V03X_COF_UART        (UART_1)                                        // ͷʹõĴ
#define MT9V03X_COF_BAUR        (9600)                                          // ôڲ
#define MT9V03X_COF_UART_TX     (UART1_RX_P02_3)                                //  UART-TX  ҪڵƬ RX 
#define MT9V03X_COF_UART_RX     (UART1_TX_P02_2)                                //  UART-RX  ҪڵƬ TX 

#define MT9V03X_COF_IIC_DELAY   (800)                                           //  IIC ʱ
#define MT9V03X_COF_IIC_SCL     (P02_3)                                         //  IIC-SCL 
#define MT9V03X_COF_IIC_SDA     (P02_2)                                         //  IIC-SDA 

#define MT9V03X_DMA_CH          (IfxDma_ChannelId_5)

#define MT9V03X_PCLK_PIN        (ERU_CH2_REQ14_P02_1)                           // PCLK ź TIM_ETR Žֹ޸

#define MT9V03X_VSYNC_PIN       (ERU_CH3_REQ6_P02_0)                            // ж

#define MT9V03X_DATA_PIN        (P00_0)                                         //   ֻ GPIOx0  GPIOx8 ʼ ˸ P00_0-P00_7
#define MT9V03X_DATA_ADD        (get_port_in_addr(MT9V03X_DATA_PIN))

#define MT9V03X_INIT_TIMEOUT    (0x0080)                                        // Ĭϵͷʼʱʱ Ϊλ
//================================================ MT9V03X ================================================


//================================================ MT9V03X ================================================
#define MT9V03X_W               (188)                                           // ͼ     Χ [1-752]
#define MT9V03X_H               (120)                                           // ͼ߶     Χ [1-480]

#define MT9V03X_IMAGE_SIZE      (MT9V03X_W * MT9V03X_H)                         // ͼСܳ 65535

#define MT9V03X_AUTO_EXP_DEF    ( 0   )                                         // Զع     ĬϲԶع  Χ [0-63] 0Ϊر
                                                                                //                  Զع⿪  EXP_TIMEԶعʱ
                                                                                //                  һǲҪԶع ߷ǳȵԳԶع⣬ͼȶ
#define MT9V03X_EXP_TIME_DEF    ( 512 )                                         // عʱ         ͷյԶعʱ䣬ùΪعֵ
#define MT9V03X_FPS_DEF         ( 50  )                                         // ͼ֡         ͷյԶFPSΪFPS
#define MT9V03X_LR_OFFSET_DEF   ( 0   )                                         // ͼƫ   ֵ ƫ   ֵ ƫ  Ϊ188 376 752ʱ޷ƫ
                                                                                //                  ͷƫݺԶƫƣüƫ
#define MT9V03X_UD_OFFSET_DEF   ( 0   )                                         // ͼƫ   ֵ ƫ   ֵ ƫ  Ϊ120 240 480ʱ޷ƫ
                                                                                //                  ͷƫݺԶƫƣüƫ
#define MT9V03X_GAIN_DEF        ( 32  )                                         // ͼ         Χ [16-64]  عʱ̶¸ıͼ̶
#define MT9V03X_PCLK_MODE_DEF   ( 0   )                                         // ʱģʽ     Χ [0-1]    Ĭϣ0 ѡΪ[0ź,1ź]
                                                                                //                  ͨΪ0ʹCH32V307DVPӿڻSTM32DCMIӿڲɼҪΪ1
                                                                                //                   MT9V034 V1.5 Լϰ汾ָ֧
//================================================ MT9V03X ================================================


//================================================ MT9V03X ṹ===============================================
typedef enum
{
    MT9V03X_INIT = 0,                                                           // ͷʼ
    MT9V03X_AUTO_EXP,                                                           // Զع
    MT9V03X_EXP_TIME,                                                           // عʱ
    MT9V03X_FPS,                                                                // ͷ֡
    MT9V03X_SET_COL,                                                            // ͼ
    MT9V03X_SET_ROW,                                                            // ͼ
    MT9V03X_LR_OFFSET,                                                          // ͼƫ
    MT9V03X_UD_OFFSET,                                                          // ͼƫ
    MT9V03X_GAIN,                                                               // ͼƫ
    MT9V03X_PCLK_MODE,                                                          // ʱģʽ(MT9V034 V1.5Լϰ汾ָ֧)
    MT9V03X_CONFIG_FINISH,                                                      // λҪռλ

    MT9V03X_COLOR_GET_WHO_AM_I = 0xEF,
    MT9V03X_SET_EXP_TIME = 0XF0,                                                // عʱ
    MT9V03X_GET_STATUS,                                                         // ȡͷ
    MT9V03X_GET_VERSION,                                                        // ̼汾

    MT9V03X_SET_ADDR = 0XFE,                                                    // Ĵַ
    MT9V03X_SET_DATA                                                            // Ĵ
}m9v03x_cmd_enum;

// ͷӿö
typedef enum
{
    MT9V03X_UART,                                                               // ͨò
    MT9V03X_SCCB,                                                               // ͨSCCBò
}m9v03x_type_enum;
//================================================ MT9V03X ṹ===============================================


//================================================ MT9V03X ȫֱ================================================
extern vuint8    mt9v03x_finish_flag;                                           // һͼɼɱ־λ
extern uint8    mt9v03x_image[MT9V03X_H][MT9V03X_W];                            // ͼݴ洢
//================================================ MT9V03X ȫֱ================================================


//================================================ MT9V03X ================================================
uint16      mt9v03x_get_version         (void);                                 // ȡͷ̼汾
uint8       mt9v03x_set_exposure_time   (uint16 light);                         // ͷعʱ
uint8       mt9v03x_set_reg             (uint8 addr, uint16 data);              // ͷڲĴд
uint8       mt9v03x_init                (void);                                 // MT9V03X ͷʼ
//================================================ MT9V03X ================================================

#endif
