/**
 * @brief       INT Manager
 * @author      AXELL CORPORATION
 * @description INT Manager 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.
 */
/* DOM-IGNORE-END */

#include "AG903_errno.h"
#include "osw/oswrapper.h"
#include "int/intmgr.h"

/**
 * @brief           割込みモジュール初期化
 * @param           none
 * @return          初期化結果
 * @retval          AG903_ENONE    正常終了
 * @description     内部状態の初期化を行います。
 *                  （AG903_OSWprIniInt を呼び出します。）
*/
int32_t AG903_INTMgrInit (void)
{
	int32_t retval;
	retval = AG903_OSWprIniInt();
	return retval;
}

/**
 * @brief           割込みの禁止
 * @param           intno [in] 割込み番号
 * @return          割込み禁止結果
 * @retval          AG903_ENONE    正常終了
 * @retval          -AG903_EINVAL  引数異常
 * @description     割込みの禁止設定をします。
 *                  （AG903_OSWprDisInt を呼び出します。）
*/
int32_t AG903_INTMgrDisableInt (uint32_t intno)
{
	int32_t retval;
	retval = AG903_OSWprDisInt(intno);
	return retval;
}

/**
 * @brief           割込みの許可
 * @param           intno [in] 割込み番号
 * @return          割込みの許可結果
 * @retval          AG903_ENONE    正常終了
 * @retval          -AG903_EINVAL  引数異常
 * @description     割込みの許可設定をします。
 *                  （AG903_OSWprEnaInt を呼び出します。）
*/
int32_t AG903_INTMgrEnableInt (uint32_t intno)
{
	int32_t retval;
	retval = AG903_OSWprEnaInt(intno);
	return retval;
}

/**
 * @brief           割込みマスク設定
 * @param           intmsk [in] マスク値 (1以上：mask, 0：unmask)
 * @return          割込みマスク設定結果
 * @retval          AG903_ENONE    正常終了
 * @retval          -AG903_EINVAL  引数異常
 * @description     割込みのマスク設定をします。
 *                  （AG903_OSWprChgIms を呼び出します。）
*/
int32_t AG903_INTMgrSetMask (uint32_t intmsk)
{
	int32_t retval;
	retval = AG903_OSWprChgIms(intmsk);
	return retval;
}

/**
 * @brief           割込みのマスク状態取得
 * @param           intmsk [out] マスク状態 (1以上：mask, 0：unmask)
 * @return          割込みのマスク状態取得結果
 * @retval          AG903_ENONE    正常終了
 * @retval          -AG903_EINVAL  引数異常
 * @description     割込みのマスク状態を取得します。
 *                  （AG903_OSWprGetIms を呼び出します。）
*/
int32_t AG903_INTMgrGetMask (uint32_t* intmsk)
{
	int32_t retval;
	retval = AG903_OSWprGetIms(intmsk);
	return retval;
}

/**
 * @brief           割込み優先度の設定
 * @param           intno [in] 割込み番号
 * @param           intpri [in] 割込み優先度（0〜31）
 * @return          割込み優先度の設定結果
 * @retval          AG903_ENONE    正常終了
 * @retval          -AG903_EINVAL  引数異常
 * @description     割込み優先度を設定します。
 *                  （AG903_OSWprSetIpri を呼び出します。）
 * @note            ハンドラ登録前に実行して下さい。
*/
int32_t AG903_INTMgrSetPriority (uint32_t intno, uint8_t intpri)
{
	int32_t retval;
	retval = AG903_OSWprSetIpri(intno, intpri);
	return retval;
}

/**
 * @brief           割込みハンドラの登録
 * @param           hdrprm [in] ハンドラ情報
 * @return          割り込みハンドラ登録結果
 * @retval          ハンドラID番号（正の値）
 * @retval          -AG903_EINVAL  引数異常
 * @retval          -AG903_EPERM   不正使用(割り込みからのCALLなど)
 * @retval          -AG903_EFAULT  処理失敗(メモリ不足)
 * @retval          -AG903_ENOID   空ID無し
 * @retval          -AG903_ESYS    システムエラー(想定外エラー)
 * @description     割込みハンドラの登録をします。
 *                  （AG903_OSWprCreIsrAuto を呼び出します。）
*/
int32_t AG903_INTMgrSetHandler (AG903_INTMgrHdrPrm * hdrprm)
{
	int32_t retval;
	retval = AG903_OSWprCreIsrAuto((AG903_OSWCIsr*)hdrprm);
	return retval;
}

/**
 * @brief           割込みハンドラの削除
 * @param           hdrid [in] ハンドラID番号
 * @return          割込みハンドラの削除結果
 * @retval          AG903_ENONE    正常終了
 * @retval          -AG903_EINVAL  引数異常
 * @retval          -AG903_EPERM   不正使用(割り込みからのCALLなど)
 * @description     割込みハンドラの削除をします。
 *                  （AG903_OSWprDelIsr を呼び出します。）
*/
int32_t AG903_INTMgrDeleteHandler (uint32_t hdrid)
{
	int32_t retval;
	retval = AG903_OSWprDelIsr(hdrid);
	return retval;
}

/**
 * @brief           割込みハンドラの状態参照
 * @param           hdrid [in] ハンドラID番号
 * @param           status [out] 状態情報返却アドレス
 * @return          割込みハンドラの状態参照結果
 * @retval          AG903_ENONE    正常終了
 * @retval          -AG903_EINVAL  引数異常
 * @retval          -AG903_EPERM   不正使用(割り込みからのCALLなど)
 * @description     割込みハンドラの状態を参照します。
 *                  （AG903_OSWprRefIsr を呼び出します。）
*/
int32_t AG903_INTMgrReferHandler (uint32_t hdrid, AG903_INTMgrHdrStat* status)
{
	int32_t retval;
	retval = AG903_OSWprRefIsr(hdrid, (AG903_OSWRIsr*)status);
	return retval;
}


