/** 
 * @brief           BSC Primitive Header
 * @author          AXELL CORPORATION
 * @description     BSC Primitive提供ヘッダ。<p>BSC Primitive使用時にincludeして下さい。
 * @note            none
 * @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 _BSCPRM_H_
#define _BSCPRM_H_
/* DOM-IGNORE-END */

#include <stdint.h>
#include "lib_common/AG903_common.h"

#ifdef __cplusplus
extern "C" {
#endif

/** パラレルバス HOSTモード */
#define	AG903_BSC_PBMODE_HOST			(0)
/** パラレルバス DEVICEモード */
#define AG903_BSC_PBMODE_DEVICE 		(1)
/** パラレルバス データ幅16bit */
#define	AG903_BSC_DTWIDTH_16			(0)
/** パラレルバス データ幅32bit */
#define AG903_BSC_DTWIDTH_32			(1)
/** 制御対象コントローラ CF */
#define AG903_BSC_CFMODE_CF				(1)
/** 制御対象コントローラ ATA */
#define AG903_BSC_CFMODE_ATA			(2)
/** 端子極性 (負論理) */
#define AG903_BSC_POL_NEGATIVE			(0)
/** 端子極性 (正論理) */
#define AG903_BSC_POL_POSITIVE			(1)

/**
 * バスステータス
 */
typedef struct _AG903_BSCPrmPbstat{
	uint8_t		ata_ctr;	/** ATAコントローラの状態 */
	uint8_t		cf_ctr;		/** CFコントローラの状態 */
	uint8_t		bus_req;	/** バス権要求状態 */
	uint8_t		bus_grt;	/** バス権許可状態 */
	uint8_t		pbus_mode;	/** パラレルバスモード */
	uint8_t		bus_wid;	/** パラレルバス上のデータ幅 */
}AG903_BSCPrmPbstat;


void AG903_BSCPrmGetPbstat(AG903_BSCPrmPbstat* stat);
void AG903_BSCPrmSetIntMask(uint8_t mask);
void AG903_BSCPrmGetIntMask(uint8_t* mask);
void AG903_BSCPrmSetIntMode(uint8_t mode);
void AG903_BSCPrmGetIntMode(uint8_t* mode);
void AG903_BSCPrmSetIntPol(uint8_t pol);
void AG903_BSCPrmGetIntPol(uint8_t* pol);
void AG903_BSCPrmSetIntClr(uint8_t clr);
void AG903_BSCPrmSetCfMode(uint8_t mode);
void AG903_BSCPrmGetCfMode(uint8_t* mode);
void AG903_BSCPrmSetDmaPol(uint8_t req, uint8_t ack);
void AG903_BSCPrmGetDmaPol(uint8_t* req, uint8_t* ack);
void AG903_BSCPrmSetCfpmCmd(uint8_t slp, uint8_t act, uint8_t cmd);
void AG903_BSCPrmGetCfpmCmd(uint8_t* slp, uint8_t* act);
void AG903_BSCPrmGetCfpmStat(uint8_t* cd, uint8_t* stat);
void AG903_BSCPrmSetCfpmTon(uint32_t cycle);
void AG903_BSCPrmGetCfpmTon(uint32_t* cycle);
void AG903_BSCPrmSetCfpmTr0(uint32_t cycle);
void AG903_BSCPrmGetCfpmTr0(uint32_t* cycle);
void AG903_BSCPrmSetCfpmTr1(uint32_t cycle);
void AG903_BSCPrmGetCfpmTr1(uint32_t* cycle);
void AG903_BSCPrmSetCfpmTr2(uint32_t cycle);
void AG903_BSCPrmGetCfpmTr2(uint32_t* cycle);
void AG903_BSCPrmSetCfpmTpr(uint32_t cycle);
void AG903_BSCPrmGetCfpmTpr(uint32_t* cycle);

#ifdef __cplusplus
}
#endif
#endif /* _BSCPRM_H_ */

