/**
 * @brief           DSP Manager
 * @author          AXELL CORPORATION
 * @description     DSP Manager Layer.
 * @note            none
 * @history         2017_02_22  初版
 * @history         2017_10_26  Ver2.0
 * @history			2019_03_08  [SDK2.2] DOTCLK_LATCHよりもDOTCLK_CHANGEの使用を推奨 (#1950)
*/
/* DOM-IGNORE-BEGIN */
/*
 * This program was created by AXELL CORPORATION.
 * Copyright (C) 2017-2019 AXELL CORPORATION, all rights reserved.
 */

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

#ifdef __cplusplus
extern "C" {
#endif

#include "AG903_common.h"

/* 定数定義 */

/**
 * DSP画面数
 */
#define	AG903_DSP_CH_NUM					(2)
/**
 * 色補正テーブル数
 */
#define	AG903_DSP_LUT_NUM					(64)
/**
 * 減色領域数
 */
#define AG903_DSP_DITHAREA_NUM				(4)
/**
 * ウィンドウ最大数
 */
#define	AG903_DSP_WND_MAX					(16)
/**
 * アトリビュート最大数
 */
#define	AG903_DSP_ATTR_MAX					(256)


/**
 * 表示回路制御状態<p>
 * 関連する構造体：AG903_DSPMgrStat
 */
enum AG903_DSP_CTRL_ENUM{
	AG903_DSP_CTRL_OFF						= 0	,	/** 停止中 */
	AG903_DSP_CTRL_ON							,	/** 動作中 */
};
/**
 * 極性<p>
 * 関連する構造体：AG903_DSPMgrSyncParam, AG903_DSPMgrExSyncParam, 
 *                 AG903_DSPMgrCMOSParam, AG903_DSPMgrLVDSParam
 */
enum AG903_DSP_POLARITY_ENUM{
	AG903_DSP_POLARITY_NEGA					= 0	,	/** 負論理 */
	AG903_DSP_POLARITY_POSI						,	/** 正論理 */
};
/**
 * RGBDE端子出力<p>
 * 関連する構造体：AG903_DSPMgrSyncParam
 */
enum AG903_DSP_RGBDE_SIGNAL_ENUM{
	AG903_DSP_RGBDE_SIGNAL_DATA				= 0	,	/** データ有効信号 */
	AG903_DSP_RGBDE_SIGNAL_CSYNC				,	/** CSYNC信号 */
};
/**
 * ウィンドウアトリビュート、パレット読込みタイミング<p>
 * 関連する構造体：AG903_DSPMgrWindowParam
 */
enum AG903_DSP_ATTR_TIMING_ENUM{
	AG903_DSP_ATTR_END_OF_VSYNC				= 0	,	/** 垂直同期パルス終了時 */
	AG903_DSP_ATTR_START_OF_VSYNC				,	/** 垂直同期パルス開始時 */
	AG903_DSP_ATTR_START_OF_VBLANK				,	/** 垂直ブランク開始時 */
};
/**
 * フレームバッファフォーマット<p>
 * 関連する構造体：AG903_DSPMgrWinAttribute
 */
enum AG903_DSP_FFMT_ENUM{
	AG903_DSP_FFMT_A8R8G8B8					= 0	,	/** A8R8G8B8 */
	AG903_DSP_FFMT_X8R8G8B8						,	/** X8R8G8B8 */
	AG903_DSP_FFMT_R8G8B8						,	/** R8G8B8 */
	AG903_DSP_FFMT_R5G6B5						,	/** R5G6B5 */
	AG903_DSP_FFMT_A1R5G5B5						,	/** A1R5G5B5 */
	AG903_DSP_FFMT_X1R5G5B5						,	/** X1R5G5B5 */
	AG903_DSP_FFMT_A4R4G4B4						,	/** A4R4G4B4 */
	AG903_DSP_FFMT_X4R4G4B4						,	/** X4R4G4B4 */
	AG903_DSP_FFMT_YUV422_BT601_LIMIT			,	/** YUV422(BT.601 Limit Range) */
	AG903_DSP_FFMT_YUV422_BT601_FULL			,	/** YUV422(BT.601 Full Range) */
	AG903_DSP_FFMT_YUV422_BT709_LIMIT			,	/** YUV422(BT.709 Limit Range) */
	AG903_DSP_FFMT_YUV422_BT709_FULL			,	/** YUV422(BT.709 Full Range) */
	AG903_DSP_FFMT_256_PALLET0					,	/** 256色パレット */
	AG903_DSP_FFMT_256_PALLET1					,	/** 256色パレット */
	AG903_DSP_FFMT_16_PALLET					,	/**  16色パレット */
	AG903_DSP_FFMT_2_PALLET						,	/**   2色パレット */
};
/**
 * パレットフォーマット<p>
 * 関連する構造体：AG903_DSPMgrWinAttribute
 */
enum AG903_DSP_PFMT_ENUM{
	AG903_DSP_PFMT_A8R8G8B8					= 0	,	/** A8R8G8B8 */
	AG903_DSP_PFMT_X8R8G8B8						,	/** X8R8G8B8 */
	AG903_DSP_PFMT_R8G8B8						,	/** R8G8B8 */
	AG903_DSP_PFMT_R5G6B5						,	/** R5G6B5 */
	AG903_DSP_PFMT_A1R5G5B5						,	/** A1R5G5B5 */
	AG903_DSP_PFMT_X1R5G5B5						,	/** X1R5G5B5 */
	AG903_DSP_PFMT_A4R4G4B4						,	/** A4R4G4B4 */
	AG903_DSP_PFMT_X4R4G4B4						,	/** X4R4G4B4 */
};
/**
 * バッファ管理ユニットリクエストタイミング<p>
 * 関連する構造体：AG903_DSPMgrIntParam
 */
enum AG903_DSP_BMU_ENUM{
	AG903_DSP_BMU_WINDATA					= 0	,	/** ウィンドウデータ読み出し時 */
	AG903_DSP_BMU_WINATTR						,	/** ウィンドウアトリビュート読み出し時 */
};
/**
 * ビデオモード<p>
 * 関連する構造体：AG903_DSPMgrCtrlParam, AG903_DSPMgrExSyncParam
 */
enum AG903_DSP_VMODE_ENUM{
	AG903_DSP_VMODE_NONINTERLACE			= 0	,	/** ノンインターレース */
	AG903_DSP_VMODE_INTERLACE					,	/** インターレース */
};
/**
 * ウィンドウの拡縮<p>
 * 関連する構造体：AG903_DSPMgrWinAttribute
 */
enum AG903_DSP_SCALING_ENUM{
	AG903_DSP_SCALING_POINT_SAMPLING		= 0	,	/** ポイントサンプリング */
	AG903_DSP_SCALING_BILINEAR					,	/** バイリニア */
};
/**
 * 垂直ブランク割込み発生タイミング<p>
 * 関連する構造体：AG903_DSPMgrIntParam
 */
enum AG903_DSP_INT_BLANK_TIMING_ENUM{
	AG903_DSP_INT_START_OF_VBLANK			= 0	,	/** 垂直ブランク開始時 */
	AG903_DSP_INT_END_OF_VBLANK					,	/** 垂直ブランク終了時 */
};
/**
 * ライン割込み発生タイミング<p>
 * 関連する構造体：AG903_DSPMgrIntParam
 */
enum AG903_DSP_INT_LINE_TIMING_ENUM{
	AG903_DSP_INT_START_OF_LINE				= 0	,	/** 指定ライン開始時 */
	AG903_DSP_INT_END_OF_LINE					,	/** 指定ライン終了時 */
};
/**
 * イベント出力<p>
 * 関連する構造体：AG903_DSPMgrIntParam
 */
enum AG903_DSP_EVENT_ENUM{
	AG903_DSP_EVENT_VT						= 0	,	/** 垂直イベント */
	AG903_DSP_EVENT_HRZ							,	/** 水平イベント */
};
/**
 * 水平イベントタイミング<p>
 * 関連する構造体：AG903_DSPMgrIntParam
 */
enum AG903_DSP_TRG_HRZ_TIMING_ENUM{
	AG903_DSP_TRG_HRZ_START_OF_LINE			= 0	,	/** ライン開始時 */
	AG903_DSP_TRG_HRZ_END_OF_LINE				,	/** ライン終了時 */
};
/**
 * 垂直イベントタイミング<p>
 * 関連する構造体：AG903_DSPMgrIntParam
 */
enum AG903_DSP_TRG_VT_TIMING_ENUM{
	AG903_DSP_TRG_VT_START_OF_VBLANK		= 0	,	/** 垂直ブランク開始時 */
	AG903_DSP_TRG_VT_START_OF_VSYNC				,	/** 垂直同期パルス開始時 */
	AG903_DSP_TRG_VT_END_OF_VSYNC				,	/** 垂直同期パルス終了時 */
	AG903_DSP_TRG_VT_END_OF_VBLANK				,	/** 垂直ブランク終了時 */
};
/**
 * 外部同期信号<p>
 * 関連する構造体：AG903_DSPMgrExSyncParam
 */
enum AG903_DSP_EXSYNC_ENUM{
	AG903_DSP_EXSYNC_NONE					= 0	,	/** 外部同期しません */
	AG903_DSP_EXSYNC_OTHER_DSP					,	/** もう片方の表示回路と同期 */
	AG903_DSP_EXSYNC_EXTSYNC0				= 4	,	/** 外部端子EXTSYNC0 */
	AG903_DSP_EXSYNC_EXTSYNC1					,	/** 外部端子EXTSYNC1 */
	AG903_DSP_EXSYNC_VSYNC0						,	/** 外部端子VSYNC0 */
	AG903_DSP_EXSYNC_VSYNC1						,	/** 外部端子VSYNC1 */
	AG903_DSP_EXSYNC_DIGITAL_VSYNC0				,	/** デジタル入力のVSYNC0 */
	AG903_DSP_EXSYNC_DIGITAL_VSYNC1				,	/** デジタル入力のVSYNC1 */
	AG903_DSP_EXSYNC_DIGITAL_VSYNC2				,	/** デジタル入力のVSYNC2 */
	AG903_DSP_EXSYNC_DIGITAL_VSYNC3				,	/** デジタル入力のVSYNC3 */
	AG903_DSP_EXSYNC_ANALOG_VSYNC0				,	/** アナログ入力のVSYNC0 */
	AG903_DSP_EXSYNC_ANALOG_VSYNC1				,	/** アナログ入力のVSYNC1 */
	AG903_DSP_EXSYNC_ANALOG_VSYNC2				,	/** アナログ入力のVSYNC2 */
	AG903_DSP_EXSYNC_ANALOG_VSYNC3				,	/** アナログ入力のVSYNC3 */
	AG903_DSP_EXSYNC_TIMR0						,	/** タイマ0のイベント出力 */
	AG903_DSP_EXSYNC_TIMR1						,	/** タイマ1のイベント出力 */
	AG903_DSP_EXSYNC_TIMR2						,	/** タイマ2のイベント出力 */
	AG903_DSP_EXSYNC_TIMR3						,	/** タイマ3のイベント出力 */
	AG903_DSP_EXSYNC_TIMR4						,	/** タイマ4のイベント出力 */
	AG903_DSP_EXSYNC_TIMR5						,	/** タイマ5のイベント出力 */
	AG903_DSP_EXSYNC_TIMR6						,	/** タイマ6のイベント出力 */
	AG903_DSP_EXSYNC_TIMR7						,	/** タイマ7のイベント出力 */
};
/**
 * DMAリクエストタイミング<p>
 * 関連する関数：AG903_DSPMgrSetDMAReq
 */
enum AG903_DSP_DMA_ENUM{
	AG903_DSP_DMA_NONE						= 0	,	/** リクエストしません */
	AG903_DSP_DMA_END_OF_VBLANK1			= 3	,	/** リスト読み込み成功時 */
	AG903_DSP_DMA_START_OF_VBLANK				,	/** 垂直ブランク開始時 */
	AG903_DSP_DMA_START_OF_VSYNC				,	/** 垂直同期パルス開始時 */
	AG903_DSP_DMA_END_OF_VSYNC					,	/** 垂直同期パルス終了時 */
	AG903_DSP_DMA_END_OF_VBLANK2				,	/** 垂直ブランク終了時 */
};
/**
 * 水平・垂直同期回路状態<p>
 * 関連する構造体：AG903_DSPMgrStat
 */
enum AG903_DSP_STAT_ENUM{
	AG903_DSP_STAT_STOP						= 0	,	/** 停止中 */
	AG903_DSP_STAT_RUN							,	/** 動作中 */
};
/**
 * 信号別出力有効選択<p>
 * 関連する構造体：AG903_DSPMgrCMOSParam, AG903_DSPMgrLVDSParam
 */
enum AG903_DSP_SIGNAL_ENUM{
	AG903_DSP_SIGNAL_ENABLE					= 0	,	/** 信号出力有効 */
	AG903_DSP_SIGNAL_DISABLE					,	/** 信号出力無効 */
};
/**
 * 画面出力先:VOD0<p>
 * 関連する関数：AG903_DSPMgrSetPortSel, AG903_DSPMgrGetPortSel
 */
enum AG903_VOD0_PORTSEL_ENUM{
	AG903_VOD0_PORTSEL_LVCMOS24				= 0	,	/** LVCMOS 24bit RGB */
	AG903_VOD0_PORTSEL_LVCMOS16					,	/** LVCMOS 16bit YUV */
	AG903_VOD0_PORTSEL_LVCMOS8					,	/** LVCOMS	8bit YUV */
	AG903_VOD0_PORTSEL_LVDS_SINGLE				,	/** LVDS シングルリンク */
};
/**
 * 画面出力先:VOD1<p>
 * 関連する関数：AG903_DSPMgrSetPortSel, AG903_DSPMgrGetPortSel
 */
enum AG903_VOD1_PORTSEL_ENUM{
	AG903_VOD1_PORTSEL_LVDS_DUAL			= 0	,	/** LVDS デュアルリンク */
	AG903_VOD1_PORTSEL_LVCMOS8				= 2	,	/** LVCOMS	8bit YUV */
	AG903_VOD1_PORTSEL_LVDS_SINGLE				,	/** LVDS シングルリンク */
};
/**
 * ドットクロック極性<p>
 * 関連する構造体：AG903_DSPMgrCMOSParam<p>
 */
enum AG903_VOD_DOTCLK_CHANGE_ENUM{
	AG903_VOD_DOTCLK_CHANGE_RISE			= 0 ,	/** 立ち上がりエッジがRGBの変化点 */
	AG903_VOD_DOTCLK_CHANGE_FALL				,	/** 立ち下がりエッジがRGBの変化点 */
};
/**
 * ドットクロック極性(保守用)<p>
 * 関連する構造体：AG903_DSPMgrCMOSParam<p>
 * AG903_VOD_DOTCLK_CHANGE_ENUM と使用箇所は同じです。
 * CMOS出力を受ける特定の外付けトランスミッタの視点で定義されています。
 * 新規の開発ではAG903_VOD_DOTCLK_CHANGE_ENUMの方を使用して下さい。
 */
enum AG903_VOD_DOTCLK_LATCH_ENUM{
	AG903_VOD_DOTCLK_LATCH_FALL				= 0 ,	/** 立ち下がりエッジがRGBの読出点 */
	AG903_VOD_DOTCLK_LATCH_RISE					,	/** 立ち上がりエッジがRGBの読出点 */
};
/**
 * RGB->YUV 変換方法<p>
 * 関連する構造体：AG903_DSPMgrCMOSParam
 */
enum AG903_VOD_MOD_YUV_ENUM{
	AG903_VOD_MOD_YUV_BT601					= 0 ,	/** BT.601 (SDTV) */
	AG903_VOD_MOD_YUV_BT709						,	/** BT.709 (HDTV) */
};
/**
 * LVDSマクロ：パワーモード<p>
 * 関連する構造体：AG903_DSPMgrLVDSParam
 */
enum AG903_VOD_PDX_ENUM{
	AG903_VOD_PDX_PWRDOWN					= 0	,	/** パワーダウン */
	AG903_VOD_PDX_NORMAL						,	/** 通常動作 */
};
/**
 * LVDSマクロ：パワーダウン制御<p>
 * 関連する構造体：AG903_DSPMgrLVDSParam
 */
enum AG903_VOD_PM_ENUM{
	AG903_VOD_PM_AUTO						= 0	,	/** 自動制御 */
	AG903_VOD_PM_MANUAL							,	/** 手動制御 */
};
/**
 * LVDSマクロ：ドットクロック<p>
 * 関連する構造体：AG903_DSPMgrLVDSParam
 */
enum AG903_VOD_FR_ENUM{
	AG903_VOD_FR_8_16MHZ					= 0	,	/** 8-16(DUAL:16-32)MHz */
	AG903_VOD_FR_16_32MHZ						,	/** 16-32(DUAL:32-64)MHz */
	AG903_VOD_FR_32_54MHZ						,	/** 32-54(DUAL:64-108)MHz */
	AG903_VOD_FR_54_100MHZ						,	/** 54-100(DUAL:108-200)MHz */
};
/**
 * バックライトON/OFF時間単位<p>
 * 関連する構造体：AG903_DSPMgrBPwrModeParam
 */
enum AG903_VOD_BPWR_UNIT_ENUM{
	AG903_VOD_BPWR_UNIT_FRAME				= 0	,	/** フレーム単位 */
	AG903_VOD_BPWR_UNIT_SCLK					,	/** システムクロック単位 */
};
/**
 * 画面出力状態<p>
 * 関連する関数：AG903_DSPMgrGetVODStat
 */
enum AG903_VOD_VODSTAT_ENUM{
	AG903_VOD_VODSTAT_STOP					= 0	,	/** 停止 */
	AG903_VOD_VODSTAT_INIT						,	/** 内部回路初期化中 */
	AG903_VOD_VODSTAT_WAIT_DCLK					,	/** ドットクロック出力待ち */
	AG903_VOD_VODSTAT_PPWRON					,	/** パネル電源制御(PPWRON) */
	AG903_VOD_VODSTAT_BPWRON					,	/** パネル電源制御(BPWRON) */
	AG903_VOD_VODSTAT_BLGTON					,	/** パネル電源制御(BLGTON) */
	AG903_VOD_VODSTAT_IDLE					= 8	,	/** 通常動作中 */
	AG903_VOD_VODSTAT_WAIT_SYNC				= 10,	/** フレーム同期待ち */
	AG903_VOD_VODSTAT_BLGTOFF					,	/** パネル電源制御(BLGTOFF) */
	AG903_VOD_VODSTAT_BPWROFF					,	/** パネル電源制御(BPWROFF) */
	AG903_VOD_VODSTAT_PPWROFF					,	/** パネル電源制御(PPWROFF) */
	AG903_VOD_VODSTAT_WAIT_FIFO					,	/** FIFO出力待ち */
	AG903_VOD_VODSTAT_WAIT_DSPSTOP				,	/** 表示回路停止待ち */
};


/* データ構造定義 */

/**
 * DSPハンドル
 */
typedef uint32_t AG903_DSPMgrHandle;

/**
 * 同期タイミングパラメータ構造体<p>
 * 関連する列挙型：AG903_DSP_POLARITY_ENUM, AG903_DSP_RGBDE_SIGNAL_ENUM
 */
typedef struct _AG903_DSPMgrSyncParam {

	uint32_t rgbde_sel;					/** RGBDE端子の出力設定 */
	uint32_t vsync_polarity;			/** 垂直同期信号の極性 */
	uint32_t field_hsync_polarity;		/** フィールド／水平同期信号の極性 */
	uint32_t hrz_pulsewidth;			/** 水平同期信号パルス幅 [px] */
	uint32_t hrz_backporch;				/** 水平バックポーチ [px] */
	uint32_t hrz_frontporch;			/** 水平フロントポーチ [px] */
	uint32_t vt_pulsewidth;				/** 垂直同期信号パルス幅 [px] */
	uint32_t odd_frontporch_plus1;		/** インターレースモードのODDフレームフロントポーチ  [px] */
	uint32_t odd_backporch_plus1;		/** インターレースモードのODDフレームバックポーチ    [px] */
	uint32_t even_frontporch_plus1;		/** インターレースモードのEVENフレームフロントポーチ [px] */
	uint32_t even_backporch_plus1;		/** インターレースモードのEVENフレームバックポーチ   [px] */
	uint32_t vt_backporch;				/** 垂直バックポーチ [px] */
	uint32_t vt_frontporch;				/** 垂直フロントポーチ [px] */

}AG903_DSPMgrSyncParam;

/**
 * 表示回路パラメータ構造体<p>
 * 関連する列挙型：AG903_DSP_VMODE_ENUM
 */
typedef struct _AG903_DSPMgrCtrlParam {

	uint32_t ip_sel;					/** ビデオモード */
	uint32_t hrz_framesize;				/** 水平フレームサイズ [px] */
	uint32_t vt_framesize;				/** 垂直フレームサイズ [px] */
	AG903_DSPMgrSyncParam *syncparam;	/** 同期パラメータのポインタ */

}AG903_DSPMgrCtrlParam;

/**
 * ウィンドウパラメータ構造体<p>
 * 関連する列挙型：AG903_DSP_ATTR_TIMING_ENUM
 */
typedef struct _AG903_DSPMgrWindowParam {

	uint32_t update_timing;				/** 読み出しタイミング指定 */
	uint32_t background;				/** 背景色 */
	uint32_t num_config;				/** 使用するウィンドウ数 */
	uint32_t num_attr;					/** ウィンドウアトリビュートリスト数 */
	uint32_t window_attr_base;			/** ウィンドウアトリビュートリストベースアドレス(キャッシュ不可) */
	uint32_t window_attr_update;		/** ウィンドウアトリビュート更新有効*/
	uint32_t palette_update;			/** パレット更新有効 */

}AG903_DSPMgrWindowParam;

/**
 * 割り込みパラメータ構造体<p>
 * 関連する列挙型：AG903_DSP_BMU_ENUM, AG903_DSP_INT_BLANK_TIMING_ENUM, AG903_DSP_INT_LINE_TIMING_ENUM, AG903_DSP_EVENT_ENUM, AG903_DSP_TRG_HRZ_TIMING_ENUM, AG903_DSP_TRG_VT_TIMING_ENUM
 */
typedef struct _AG903_DSPMgrIntParam {

	uint32_t bmureq_timing;				/** BMUリクエスト */
	uint32_t int_line_no;				/** ライン割込み発生ライン番号 */
	uint32_t int_framecount;			/** フレームカウンタの最大値 */
	uint32_t int_hrz_line;				/** ライン割込み発生タイミング */
	uint32_t int_vt_blank;				/** 垂直ブランク割込み発生タイミング */
	uint32_t trigger_out;				/** イベント出力設定 */
	uint32_t trigger_hrz;				/** 水平イベント発生タイミング */
	uint32_t trigger_vt;				/** 垂直イベントの発生タイミング */
	uint32_t mask_vt_blank;				/** 垂直ブランク割込みマスク */
	uint32_t mask_hrz_line;				/** ライン割込みマスク */
	uint32_t mask_dspoff;				/** 表示回路停止割り込みマスク */
	uint32_t mask_error;				/** エラー割り込みマスク */

}AG903_DSPMgrIntParam;

/**
 * 割込み状態構造体
 */
typedef struct _AG903_DSPMgrIntStat {

	uint32_t int_vt_blank;			/** 垂直ブランク割込み状態 */
	uint32_t int_hrz_line;			/** ライン割込み状態 */
	uint32_t int_dspoff;			/** 表示回路停止割り込み状態 */
	uint32_t dreq;					/** DMAリクエスト状態 */
	uint32_t clr_vt_blank;			/** 垂直ブランク割込みクリア */
	uint32_t clr_hrz_line;			/** ライン割込みクリア */
	uint32_t clr_dspoff;			/** 表示回路停止割込みクリア */

}AG903_DSPMgrIntStat;

/**
 * 表示回路状態構造体<p>
 * 関連する列挙型：AG903_DSP_CTRL_ENUM, AG903_DSP_STAT_ENUM
 */
typedef struct _AG903_DSPMgrStat {

	uint32_t ctrl_status;			/** 表示回路制御状態 */
	uint32_t work_pix;				/** 現在処理中のピクセル数 */
	uint32_t hrz_status;			/** 水平同期回路の状態 */
	uint32_t work_line;				/** 現在処理中のライン数 */
	uint32_t vt_status;				/** 垂直同期回路の状態 */
	uint32_t frameconut;			/** 現在のフレームカウンタ */
	uint32_t err_line;				/** アンダーフロー発生時のライン番号 */
	uint32_t err_ue;				/** アンダーフロー有無 */
	uint32_t err_le;				/** ウィンドウアトリビュートリスト読み出しエラー有無 */
	uint32_t err_pe;				/** パレット読み出しのエラー有無 */
	uint32_t errclr_line;			/** アンダーフロー発生時のライン番号クリア */
	uint32_t errclr_ue;				/** アンダーフロークリア */
	uint32_t errclr_le;				/** ウィンドウアトリビュートリスト読み出しエラークリア*/
	uint32_t errclr_pe;				/** パレット読み出しのエラークリア */

}AG903_DSPMgrStat;

/**
 * ウィンドウアトリビュート構造体<p>
 * 関連する列挙型：AG903_DSP_FFMT_ENUM, AG903_DSP_FFMT_ENUM, AG903_DSP_SCALING_ENUM
 */
typedef struct _AG903_DSPMgrWinAttribute {

	uint16_t position_x;				/** 表示画面上のX座標 */
	uint16_t position_y;				/** 表示画面上のY座標 */
	uint16_t destination_width;			/** 表示画面上の画面データ横幅 */
	uint16_t destination_height;		/** 表示画面上の画面データ縦幅 */
	uint32_t framebuffer_base;			/** VRAM上データの先頭アドレス(キャッシュ不可) */
	uint16_t source_width;				/** VRAM上画面データ横幅 */
	uint16_t source_height;				/** VRAM上画面データ縦幅 */
	uint32_t hrz_size;					/** VRAM上フレームバッファ横幅 */
	uint8_t  transparent_color_b;		/** 透過色（青） */
	uint8_t  transparent_color_g;		/** 透過色（緑） */
	uint8_t  transparent_color_r;		/** 透過色（赤） */
	uint8_t  transparent_color_a;		/** 透過色（α） */
	uint32_t pallet_base;				/** VRAM上パレットデータ先頭アドレス(キャッシュ不可) */

	/** ウィンドウ設定領域の定義 */
	struct {
		uint32_t valid				:1;		/** 表示の有効・無効 */
		uint32_t biliner			:1;		/** バイリニア・ポイントサンプリング */
		uint32_t hrz_flip			:1;		/** 水平フリップの有効・無効 */
		uint32_t vt_flip			:1;		/** 垂直フリップの有効・無効 */
		uint32_t swap_1bit			:1;		/** データスワップ（1bit）処理有効・無効 */
		uint32_t swap_4bit			:1;		/** データスワップ（4bit）処理有効・無効 */
		uint32_t swap_half			:1;		/** データスワップ（ハーフワード）処理有効・無効 */
		uint32_t swap_word			:1;		/** データスワップ（ワード）処理有効・無効 */
		uint32_t default_alpha		:8;		/** αを持たないフォーマットで使用するα値 */
		uint32_t framebuffer_format	:4;		/** フレームバッファフォーマット */
		uint32_t pallet_format		:3;		/** パレットフォーマット */
		uint32_t					:1;
		uint32_t transparent_en_b	:1;		/** 青成分透過判定の有効・無効 */
		uint32_t transparent_en_g	:1;		/** 緑成分透過判定の有効・無効 */
		uint32_t transparent_en_r	:1;		/** 赤成分透過判定の有効・無効 */
		uint32_t transparent_en_a	:1;		/** α成分透過判定の有効・無効 */
		uint32_t transparent_en		:1;		/** 透過色処理の有効・無効 */
	}conf;

}AG903_DSPMgrWinAttribute;

/**
 * 外部同期パラメータ構造体<p>
 * 関連する列挙型：AG903_DSP_POLARITY_ENUM, AG903_DSP_VMODE_ENUM, AG903_DSP_EXSYNC_ENUM
 */
typedef struct _AG903_DSPMgrExSyncParam {

	uint32_t sync_sel;					/** 同期を取るために参照する信号 */
	uint32_t delay_ctrl_en;				/** 遅延制御の有効・無効 */
	uint32_t ip_sel;					/** 入力信号のビデオモード */
	uint32_t vsync_polarity;			/** 垂直同期信号の極性 */
	uint32_t field_hsync_polarity;		/** フィールド／水平同期信号の極性 */
	uint32_t sync_mask_en;				/** 同期マスク制御の有無 */

}AG903_DSPMgrExSyncParam;

/**
 * 色補正パラメータ構造体
 */
typedef struct _AG903_DSPMgrLutParam {

	/** 色補正パラメータ（赤） */
	struct {
		uint8_t r0;						/** 赤成分が0の場合の変換値 */
		uint8_t r1;						/** 赤成分が1の場合の変換値 */
		uint8_t r2;						/** 赤成分が2の場合の変換値 */
		uint8_t r3;						/** 赤成分が3の場合の変換値 */
	}LUTR[AG903_DSP_LUT_NUM];
	/** 色補正パラメータ（緑） */
	struct {
		uint8_t g0;						/** 赤成分が0の場合の変換値 */
		uint8_t g1;						/** 赤成分が1の場合の変換値 */
		uint8_t g2;						/** 赤成分が2の場合の変換値 */
		uint8_t g3;						/** 赤成分が3の場合の変換値 */
	}LUTG[AG903_DSP_LUT_NUM];
	/** 色補正パラメータ（青） */
	struct {
		uint8_t b0;						/** 赤成分が0の場合の変換値 */
		uint8_t b1;						/** 赤成分が1の場合の変換値 */
		uint8_t b2;						/** 赤成分が2の場合の変換値 */
		uint8_t b3;						/** 赤成分が3の場合の変換値 */
	}LUTB[AG903_DSP_LUT_NUM];

}AG903_DSPMgrLutParam;

/**
 * 減色パラメータ構造体
 */
typedef struct _AG903_DSPMgrDithParam {

	/** 減色パラメータ */
	struct {
		uint32_t x0;					/** 減色を行う区画の左上X座標 */
		uint32_t y0;					/** 減色を行う区画の左上Y座標 */
		uint32_t x1;					/** 減色を行う区画の右下X座標 */
		uint32_t y1;					/** 減色を行う区画の右下Y座標 */
	}DITHAREA[AG903_DSP_DITHAREA_NUM];

}AG903_DSPMgrDithParam;

/**
 * 色検出パラメータ構造体
 */
typedef struct _AG903_DSPMgrCDParam {

	uint32_t colordetect_en_b;			/** 青比較有効フラグ 0:無条件一致 1:比較する */
	uint32_t colordetect_en_g;			/** 緑比較有効フラグ 0:無条件一致 1:比較する */
	uint32_t colordetect_en_r;			/** 赤比較有効フラグ 0:無条件一致 1:比較する */
	uint32_t colordetect_en_a;			/** α比較有効フラグ 0:無条件一致 1:比較する */
	uint32_t colordetect_color_b;		/** 青の比較値 */
	uint32_t colordetect_color_g;		/** 緑の比較値 */
	uint32_t colordetect_color_r;		/** 赤の比較値 */
	uint32_t colordetect_color_a;		/** αの比較値 */

}AG903_DSPMgrCDParam;

/**
 * CMOSパラメータ構造体<p>
 * 関連する列挙型：AG903_DSP_POLARITY_ENUM, AG903_DSP_POLARITY_ENUM, AG903_VOD_DOTCLK_LATCH_ENUM, AG903_VOD_DOTCLK_CHANGE_ENUM, AG903_VOD_MOD_YUV_ENUM
 */
typedef struct _AG903_DSPMgrCMOSParam {

	uint32_t rgbde_polarity;			/** RGBDEの極性 */
	uint32_t vsync_polarity;			/** VSYNCの極性 */
	uint32_t hsync_polarity;			/** HSYNCの極性 */
	uint32_t field_polarity;			/** フィールド信号の極性 */
	uint32_t colordetect_polarity;		/** 色検出信号の極性 */
	uint32_t rgbde_en;					/** RGBDEの有効・無効 */
	uint32_t vsync_en;					/** VSYNCの有効・無効 */
	uint32_t hsync_en;					/** HSYNCの有効・無効 */
	uint32_t field_en;					/** フィールド信号の有効・無効 */
	uint32_t colordetect_en;			/** 色検出信号の有効・無効 */
	uint32_t pixeldata_en;				/** ピクセルデータの有効・無効 */
	uint32_t dotclk_polarity;			/** ドットクロックの極性 */
	uint32_t code_en;					/** データにSAV、EAVコード埋めこみ有無 */
	uint32_t yuv_mode;					/** RGBからYUV変換方法 */

}AG903_DSPMgrCMOSParam;

/**
 * LVDSパラメータ構造体<p>
 * 関連する列挙型：AG903_DSP_POLARITY_ENUM, AG903_DSP_SIGNAL_ENUM, AG903_VOD_PDX_ENUM, AG903_VOD_PM_ENUM, AG903_VOD_FR_ENUM
 */
typedef struct _AG903_DSPMgrLVDSParam {

	uint32_t rgbde_polarity;			/** RGBDEの極性 */
	uint32_t vsync_polarity;			/** VSYNCの極性 */
	uint32_t hsync_polarity;			/** HSYNCの極性 */
	uint32_t field_polarity;			/** フィールド信号の極性 */
	uint32_t colordetect_polarity;		/** 色検出信号の極性 */
	uint32_t rgbde_en;					/** RGBDEの有効・無効 */
	uint32_t vsync_en;					/** VSYNCの有効・無効 */
	uint32_t hsync_en;					/** HSYNCの有効・無効 */
	uint32_t field_en;					/** フィールド信号の有効・無効 */
	uint32_t colordetect_en;			/** 色検出信号の有効・無効 */
	uint32_t pixeldata_en;				/** ピクセルデータの有効・無効 */
	uint32_t format;					/** LVDS出力フォーマット */
	uint32_t ctrl0;						/** 1st LinkのCTRL信号出力値 */
	uint32_t ctrl1;						/** 2nd LinkのCTRL信号出力値 */
	uint32_t freq_range;				/** LVDSマクロの周波数レンジ */
	uint32_t auto_powermanage;			/** LVDSマクロのパワーダウン制御 */
	uint32_t macro_power;				/** LVDSマクロのパワーモード */

}AG903_DSPMgrLVDSParam;

/**
 * バックライトパラメータ構造体<p>
 * 関連する列挙型：AG903_VOD_BPWR_UNIT_ENUM
 */
typedef struct _AG903_DSPMgrBPwrModeParam {

	uint32_t backlight_en;				/** バックライト制御の有効・無効 */
	uint32_t cnt_unit;					/** ON時間、OFF時間のパラメータ単位 */
	uint32_t panel_pwroncnt;			/** パネル電源ON期間 */
	uint32_t backlight_pwroncnt;		/** バックライト電源ON期間 */
	uint32_t backlight_oncnt;			/** バックライト有効ON期間 */
	uint32_t panel_pwroffcnt;			/** パネル電源OFF期間 */
	uint32_t backlight_pwroffcnt;		/** バックライト電源OFF期間 */
	uint32_t backlight_offcnt;			/** バックライト有効OFF期間 */
	uint32_t pwm_period;				/** PWM周期 */
	uint32_t pwm_cnt;					/** PWMカウント */

}AG903_DSPMgrBPwrModeParam;

/* プロトタイプ定義 */
int32_t AG903_DSPMgrInit(void);
int32_t AG903_DSPMgrGetHandle(uint8_t ch, AG903_DSPMgrHandle **handle);
int32_t AG903_DSPMgrReleaseHandle(AG903_DSPMgrHandle *handle);
int32_t AG903_DSPMgrCheckStopped(AG903_DSPMgrHandle *handle);
int32_t AG903_DSPMgrEnable(AG903_DSPMgrHandle *handle);
int32_t AG903_DSPMgrDisable(AG903_DSPMgrHandle *handle);
int32_t AG903_DSPMgrGetCtrlParam(AG903_DSPMgrHandle *handle, AG903_DSPMgrCtrlParam *param);
int32_t AG903_DSPMgrSetWindowParam(AG903_DSPMgrHandle *handle, AG903_DSPMgrWindowParam *param);
int32_t AG903_DSPMgrSetAttributeList(AG903_DSPMgrHandle *handle, AG903_DSPMgrWindowParam *param);
int32_t AG903_DSPMgrSetIntParam(AG903_DSPMgrHandle *handle,AG903_DSPMgrIntParam *param);
int32_t AG903_DSPMgrSetIntMask(AG903_DSPMgrHandle *handle, AG903_DSPMgrIntParam *param);
int32_t AG903_DSPMgrGetIntStat(AG903_DSPMgrHandle *handle, AG903_DSPMgrIntStat *stat);
int32_t AG903_DSPMgrClearIntStat(AG903_DSPMgrHandle *handle, AG903_DSPMgrIntStat *stat);
int32_t AG903_DSPMgrGetStat(AG903_DSPMgrHandle *handle, AG903_DSPMgrStat *stat);
int32_t AG903_DSPMgrClearStat(AG903_DSPMgrHandle *handle, AG903_DSPMgrStat *stat);
/*
 * ウィンドウアトリビュート
 */
int32_t AG903_DSPMgrGetAttribute(AG903_DSPMgrHandle *handle, uint8_t listno, AG903_DSPMgrWinAttribute **attr);
int32_t AG903_DSPMgrSetAttribute(AG903_DSPMgrHandle *handle, uint8_t listno);
/*
 * オプション
 */
int32_t AG903_DSPMgrSetExSyncParam(AG903_DSPMgrHandle *handle, AG903_DSPMgrExSyncParam *param);
int32_t AG903_DSPMgrSetLutParam(AG903_DSPMgrHandle *handle, _Bool en, AG903_DSPMgrLutParam *param);
int32_t AG903_DSPMgrSetDithParam(AG903_DSPMgrHandle *handle, _Bool en, AG903_DSPMgrDithParam *param);
int32_t AG903_DSPMgrSetCDParam(AG903_DSPMgrHandle *handle, AG903_DSPMgrCDParam *param);
int32_t AG903_DSPMgrSetDMAReq(AG903_DSPMgrHandle *handle, uint8_t req);
/*
 * 画面出力
 */
int32_t AG903_DSPMgrGetPortSel(AG903_DSPMgrHandle *handle, uint8_t *sel);
int32_t AG903_DSPMgrSetPortSel(AG903_DSPMgrHandle *handle, uint8_t sel);
int32_t AG903_DSPMgrSetCMOSParam(AG903_DSPMgrHandle *handle, AG903_DSPMgrCtrlParam *ctrl, AG903_DSPMgrCMOSParam *param);
int32_t AG903_DSPMgrSetLVDSParam(AG903_DSPMgrHandle *handle, AG903_DSPMgrCtrlParam *ctrl, AG903_DSPMgrLVDSParam *param);
int32_t AG903_DSPMgrSetBPwrModeParam(AG903_DSPMgrHandle *handle, AG903_DSPMgrBPwrModeParam *param);
int32_t AG903_DSPMgrGetBPwrModeParam(AG903_DSPMgrHandle *handle, AG903_DSPMgrBPwrModeParam *param);



#ifdef __cplusplus
}
#endif

#endif/* __DSPMGR_H__ */
