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

#ifdef __cplusplus
extern "C" {
#endif

/** EQSシステムクロック */
#define	AG903_EQS_SYS_CLK		(200 * 1000 * 1000)

/** 通信モード */
enum AG903_EQS_MODE_ENUM{
	AG903_EQS_MODE_NORM = 0,	/** SPIモード	*/
	AG903_EQS_MODE_QUAD,		/** SQIモード	*/
};

/** エリア指定 */
enum AG903_EQS_AREA_ENUM{
	AG903_EQS_AREA_0 = 0,		/** アドレスオフセット 00000000h〜00FFFFFFh	*/
	AG903_EQS_AREA_1,			/** アドレスオフセット 01000000h〜01FFFFFFh */
	AG903_EQS_AREA_2,			/** アドレスオフセット 02000000h〜02FFFFFFh */
	AG903_EQS_AREA_3,			/** アドレスオフセット 03000000h〜03FFFFFFh */
	AG903_EQS_AREA_NUM,			/** エリア数 */
};

/** I/O方向 */
enum AG903_EQS_DIR_ENUM{
	AG903_EQS_DIR_READ = 0,		/** READ	*/
	AG903_EQS_DIR_WRITE,		/** WRITE	*/
};

/** フロー制御 */
enum AG903_EQS_FLOW_ENUM{
	AG903_EQS_FLOW_OFF = 0,		/** フロー制御なし	*/
	AG903_EQS_FLOW_ON,			/** フロー制御あり	*/
};

/** アドレス幅 */
enum AG903_EQS_WIDTH_ENUM{
	AG903_EQS_WIDTH_NONE = 0,	/** 出力なし	*/
	AG903_EQS_WIDTH_8BIT,		/** 8ビット		*/
	AG903_EQS_WIDTH_16BIT,		/** 16ビット	*/
	AG903_EQS_WIDTH_24BIT,		/** 24ビット	*/
};

/** データ幅 */
enum AG903_EQS_DATA_ENUM{
	AG903_EQS_DATA_NONE = 0,	/** データ部なし		*/
	AG903_EQS_DATA_BUS,			/** 内部バス幅に従う	*/
};

/** EQS設定パラメータ */
typedef struct _AG903_EQSCtlFormat {
	uint8_t	command;		/** コマンド */
	uint8_t	wait;			/** ウェイトサイクル */
	uint8_t	data_len;		/** データ長 (Write時) */
	uint8_t	addr_len;		/** アドレス長 */
	uint8_t	flow;			/** フロー制御有無 */
	uint8_t	reserve;		/** 予約 */
} AG903_EQSCtlFormat;

/*************************************************************************************
 * プロトタイプ定義
 ************************************************************************************/
int32_t AG903_EQSCtlInit(uint16_t div, uint16_t cnt);
int32_t AG903_EQSCtlSetMode(uint8_t mode);
int32_t AG903_EQSCtlGetAddress(uint8_t ch, uint32_t *addr);
int32_t AG903_EQSCtlSetup(uint8_t area, uint8_t dir, AG903_EQSCtlFormat *format);

#ifdef __cplusplus
}
#endif

#endif/* __OSPMGR_H__ */
