/**
 * @brief           BMU Primitive Header
 * @author          AXELL CORPORATION
 * @description     BMU 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 _BMUPRM_H_
#define _BMUPRM_H_
/* DOM-IGNORE-END */

#ifdef __cplusplus
//extern "C" {
#endif

#include "register/AG903_bmureg.h"

#ifndef AG903_BMU_UNIT_NUM
	/** BMUの最大チャンネル数 */
	#define AG903_BMU_UNIT_NUM (16)
#endif

/** BMUnSTATレジスタの設定受け渡し用構造体 */
typedef struct _BMUPrmParamSTAT {
	uint32_t val;			/** バッファ書き込み状態 */
	uint32_t empty;		/** バッファが空かどうか */
	uint32_t rwa;			/** シンクモジュールのウェイト発生状態 */
	uint32_t rbsy;		/** リンクモジュールのバッファ使用状況 */
	uint32_t rnum;		/** シンクモジュールが使用中のバッファ番号 */
	uint32_t full;		/** バッファが満杯かどうか */
	uint32_t wwa;			/** ソースモジュールのウェイト発生状況 */
	uint32_t wbsy;		/** ソースモジュールのバッファ使用状況 */
	uint32_t wnum;		/** ソースモジュールが使用中のバッファ番号 */
}BMUPrmParamSTAT;


void AG903_BMUPrmSetCTRL(uint8_t unit, uint8_t en);
void AG903_BMUPrmGetCTRL(uint8_t unit, uint8_t *en);
void AG903_BMUPrmSetMOD(uint8_t unit, uint8_t ini, uint8_t mgr, uint8_t src);
void AG903_BMUPrmGetMOD(uint8_t unit, uint8_t *ini, uint8_t *mgr, uint8_t *src);
void AG903_BMUPrmSetSINKMODULE(uint8_t unit, uint32_t valid);
void AG903_BMUPrmGetSINKMODULE(uint8_t unit, uint32_t* valid);
void AG903_BMUPrmGetSINKSTAT(uint8_t unit, uint32_t* stat);
void AG903_BMUPrmSetBASEADR(uint8_t unit, uint32_t adr);
void AG903_BMUPrmGetBASEADR(uint8_t unit, uint32_t *adr);
void AG903_BMUPrmSetSTRIDE(uint8_t unit, uint32_t stride);
void AG903_BMUPrmGetSTRIDE(uint8_t unit, uint32_t *stride);
void AG903_BMUPrmSetBUFNUM(uint8_t unit, uint32_t num);
void AG903_BMUPrmGetBUFNUM(uint8_t unit, uint32_t *num);
void AG903_BMUPrmGetSTAT(uint8_t unit, BMUPrmParamSTAT *stat);

#ifdef __cplusplus
}
#endif
#endif
