/**
 * @brief           VID Primitive Header
 * @author          AXELL CORPORATION
 * @description     VID Primitive Layer.
 * @note            none
 * @history         2017_02_22  初版
 * @history         2017_10_26  Ver2.0
*/
/* DOM-IGNORE-BEGIN */
/*
 * This program was created by AXELL CORPORATION.
 * Copyright (C) 2017 AXELL CORPORATION, all rights reserved.
 */

#ifndef VIDPRM_H
#define VIDPRM_H
/* DOM-IGNORE-END */

#include <stdint.h>

#ifdef __cplusplus
extern "C" {
#endif

/** 外部入出力チャンネルの最大数 */
#define AG903_VID_PRM_MAX_IO_PORTS          (2)

/** キャプチャ出力の最大数 */
#define AG903_VID_PRM_MAX_CAPTURE_PORTS     (4)

/** VIDIOnMODレジスタパラメータ */
typedef struct _VIDPrmParamVIDIOnMOD
{
	uint32_t vpol;                          /** VPOLフィールド値 */
	uint32_t hpol;                          /** HPOLフィールド値 */
	uint32_t dpol;                          /** DPOLフィールド値 */
	uint32_t fpol;                          /** FPOLフィールド値 */
	uint32_t cpol;                          /** CPOLフィールド値 */
} VIDPrmParamVIDIOnMOD;

/** VIDCOnMODレジスタパラメータ */
typedef struct _VIDPrmParamVIDCOnMOD
{
	uint32_t tdmblk;                        /** TDMBLKフィールド値 */
	uint32_t tdmtrs;                        /** TDMTRSフィールド値 */
	uint32_t delay;                         /** DELAYフィールド値  */
	uint32_t trsdec;                        /** TRSDECフィールド値 */
} VIDPrmParamVIDCOnMOD;

/** VIDCOnTRSPRMレジスタパラメータ */
typedef struct _VIDPrmParamVIDCOnTRSPRM
{
	uint32_t efp;                           /** EFPフィールド  */
	uint32_t ofp;                           /** OFPフィールド  */
	uint32_t vfp;                           /** VFPフィールド  */
	uint32_t href;                          /** HREFフィールド */
	uint32_t hfp;                           /** HFPフィールド  */
} VIDPrmParamVIDCOnTRSPRM;

/** VIDCOnSTATレジスタパラメータ */
typedef struct _VIDPrmParamVIDCOnSTAT
{
	uint32_t blkval;                        /** BLKVALフィールド値 */
	uint32_t trsval;                        /** TRSVALフィールド値 */
	uint32_t vblank;                        /** VBLANKフィールド値 */
	uint32_t hblank;                        /** HBLANKフィールド値 */
	uint32_t tdmch;                         /** TDMCHフィールド値  */
} VIDPrmParamVIDCOnSTAT;

/** VIDCOnVST0レジスタパラメータ */
typedef struct _VIDPrmParamVIDCOnVST0
{
	uint32_t scan;                          /** SCANフィールド値 */
	uint32_t ebp;                           /** EBPフィールド値  */
	uint32_t efp;                           /** EFPフィールド値  */
	uint32_t obp;                           /** OBPフィールド値  */
	uint32_t ofp;                           /** OFPフィールド値  */
	uint32_t vpw;                           /** VPWフィールド値  */
} VIDPrmParamVIDCOnVST0;


void AG903_VidPrmSetVIDCTRL(uint32_t on);
void AG903_VidPrmGetVIDCTRL(uint32_t *on);
void AG903_VidPrmSetVIDFMT(uint32_t fmt);
void AG903_VidPrmGetVIDFMT(uint32_t *fmt);
void AG903_VidPrmSetVIDIOnCTRL(uint32_t id, uint32_t soe);
void AG903_VidPrmGetVIDIOnCTRL(uint32_t id, uint32_t *soe);
void AG903_VidPrmSetVIDIOnMOD(uint32_t id, VIDPrmParamVIDIOnMOD *mod);
void AG903_VidPrmGetVIDIOnMOD(uint32_t id, VIDPrmParamVIDIOnMOD *mod);
void AG903_VidPrmSetVIDIOnOHPRM0(uint32_t id, uint32_t hpw);
void AG903_VidPrmGetVIDIOnOHPRM0(uint32_t id, uint32_t *hpw);
void AG903_VidPrmSetVIDIOnOHPRM1(uint32_t id, uint32_t hfp, uint32_t hbp);
void AG903_VidPrmGetVIDIOnOHPRM1(uint32_t id, uint32_t *hfp, uint32_t *hbp);
void AG903_VidPrmSetVIDIOnOVPRM0(uint32_t id, uint32_t vpw);
void AG903_VidPrmGetVIDIOnOVPRM0(uint32_t id, uint32_t *vpw);
void AG903_VidPrmSetVIDIOnOVPRM1(uint32_t id, uint32_t vfp, uint32_t vbp);
void AG903_VidPrmGetVIDIOnOVPRM1(uint32_t id, uint32_t *vfp, uint32_t *vbp);
void AG903_VidPrmSetVIDIOnOSIZE(uint32_t id, uint32_t vfs, uint32_t hfs);
void AG903_VidPrmGetVIDIOnOSIZE(uint32_t id, uint32_t *vfs, uint32_t *hfs);
void AG903_VidPrmGetVIDIOnSTAT(uint32_t id, uint32_t *cwt);
void AG903_VidPrmSetVIDCOnMOD(uint32_t id, VIDPrmParamVIDCOnMOD *mod);
void AG903_VidPrmGetVIDCOnMOD(uint32_t id, VIDPrmParamVIDCOnMOD *mod);
void AG903_VidPrmSetVIDCOnTRSPRM(uint32_t id, VIDPrmParamVIDCOnTRSPRM *trsprm);
void AG903_VidPrmGetVIDCOnTRSPRM(uint32_t id, VIDPrmParamVIDCOnTRSPRM *trsprm);
void AG903_VidPrmSetVIDCOnSDPRM(uint32_t id, uint32_t vmax, uint32_t hmax);
void AG903_VidPrmGetVIDCOnSDPRM(uint32_t id, uint32_t *vmax, uint32_t *hmax);
void AG903_VidPrmGetVIDCOnSTAT(uint32_t id, VIDPrmParamVIDCOnSTAT *stat);
void AG903_VidPrmGetVIDCOnHST0(uint32_t id, uint32_t *hpw);
void AG903_VidPrmGetVIDCOnHST1(uint32_t id, uint32_t *hfp, uint32_t *hbp);
void AG903_VidPrmGetVIDCOnVST0(uint32_t id, VIDPrmParamVIDCOnVST0 *vst0);
void AG903_VidPrmGetVIDCOnVST1(uint32_t id, uint32_t *vfp, uint32_t *vbp);
void AG903_VidPrmGetVIDCOnFST(uint32_t id, uint32_t *vfs, uint32_t *hfs);


#ifdef __cplusplus
}
#endif

#endif
