/*******************************************************************************
*                                                                              *
*   ���W���[������      �F���v���C�A�h���X�v�Z                                 *
*   ���W���[�����x��    �Frap_mm_calcReplyAddr                                 *
*   �^�X�N�敪          �F�璷���C�u����                                       *
*   �@�\                �F�~�b�V�����f�[�^��M�̈�J�n�A�h���X����Ƃ��āA   *
*                         �w�肳�ꂽ�u���b�N�̂����A�w�肳�ꂽ���v���C�ԍ���   *
*                         ���v���C�J�n�A�h���X���v�Z����                       *
*                                                                              *
*   �R�[�����O�V�[�P���X�Fint rap_mm_calcReplyAddr( nodeID, misshonDataID,     *
*                                     startAddr, blockNo, replyNo, &replyAddr )*
*   ����                �Fint nodeID �F�~�b�V�����@��ID                        *
*                         int missionDataID �F�~�b�V�����f�[�^ID               *
*                         unsigned int startAddr �F�~�b�V�����f�[�^��M�̈�J�n*
*                                                  �A�h���X                    *
*                                                   (0x08100000�`0x17FFFFFF)   *
*                         int blockNo �F�u���b�N�ԍ�                           *
*                         int replyNo �F�擾����Reply �ԍ�                     *
*                         unsigned int replyAddr �F�y�o�́zReply �J�n�A�h���X  *
*   �߂�l              �F�������� ( <0 :�ُ� , 0:����)                        *
*                          0 �F����I��                                        *
*                         -1 �FnodeID���~�b�V�����@��ID�łȂ�                  *
*                         -2 �F�~�b�V�����f�[�^�̈�J�n�A�h���X��SDRAM�̈�O   *
*                         -3 �F�u���b�N�ԍ��̗̈悪SDRAM�̈�O                 *
*   �g�p��̒���        �F�Ȃ�                                                 *
*   �G���[����          �F�Ȃ�                                                 *
*                                                                              *
*******************************************************************************/
#include "dpu_api.h"
#include "dpu_api_proto.h"
#include "rap_api.h"
#include "rap_define.h"             /* define��`               */
#include "rap_variable.h"           /* �O���[�o���ϐ��錾       */
#include "rap_func.h"               /* �֐��v���g�^�C�v�錾     */

int rap_mm_calcReplyAddr( int nodeID,
                          int missionDataID,
                          unsigned int startAddr,
                          int blockNo,
                          int replyNo,
                          unsigned int *replyAddr )
{
    unsigned int    ui_blockAddr;
    int             i_ret = 0;      /* �߂�l */
    
    M_T_MIS_DATA_PLAN info;


    /* �u���b�N�T�C�Y�擾�i��nodeID�`�F�b�N�j */
    i_ret = rap_mm_getMisDataPlan( nodeID, missionDataID, &info );
    
    /* �J�n�A�h���X�`�F�b�N */
    if( startAddr < RA_d_SDRAM_SADDR )
    {
        /* �A�h���X���͈͊O */
        i_ret = -2;
    }
    
    /* ���v���C�J�n�A�h���X�v�Z */
    ui_blockAddr =    startAddr + info.ui_blockSize * blockNo;
    *replyAddr   = ui_blockAddr + info.ui_replySize * replyNo;
    
    /* �u���b�N�A�h���X�`�F�b�N */
    if( RA_d_SDRAM_EADDR >  *replyAddr                          ||
        RA_d_SDRAM_EADDR < (*replyAddr + info.ui_replySize - 1) )
    {
        /* �A�h���X���͈͊O */
        i_ret = -3;
    }
    

    return 0;
}