/******************************************************************************* * * * モジュール名称 :リプライアドレス計算 * * モジュールラベル :rap_mm_calcReplyAddr * * タスク区分 :冗長ライブラリ * * 機能 :ミッションデータ受信領域開始アドレスを基準として、 * * 指定されたブロックのうち、指定されたリプライ番号の * * リプライ開始アドレスを計算する * * * * コーリングシーケンス:int rap_mm_calcReplyAddr( nodeID, misshonDataID, * * startAddr, blockNo, replyNo, &replyAddr )* * 引数 :int nodeID :ミッション機器ID * * int missionDataID :ミッションデータID * * unsigned int startAddr :ミッションデータ受信領域開始* * アドレス * * (0x08100000〜0x17FFFFFF) * * int blockNo :ブロック番号 * * int replyNo :取得するReply 番号 * * unsigned int replyAddr :【出力】Reply 開始アドレス * * 戻り値 :処理結果 ( <0 :異常 , 0:正常) * * 0 :正常終了 * * -1 :nodeIDがミッション機器IDでない * * -2 :ミッションデータ領域開始アドレスがSDRAM領域外 * * -3 :ブロック番号の領域がSDRAM領域外 * * 使用上の注意 :なし * * エラー処理 :なし * * * *******************************************************************************/ #include "dpu_api.h" #include "dpu_api_proto.h" #include "rap_api.h" #include "rap_define.h" /* define定義 */ #include "rap_variable.h" /* グローバル変数宣言 */ #include "rap_func.h" /* 関数プロトタイプ宣言 */ 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; /* 戻り値 */ M_T_MIS_DATA_PLAN info; /* ブロックサイズ取得(兼nodeIDチェック) */ i_ret = rap_mm_getMisDataPlan( nodeID, missionDataID, &info ); /* 開始アドレスチェック */ if( startAddr < RA_d_SDRAM_SADDR ) { /* アドレスが範囲外 */ i_ret = -2; } /* リプライ開始アドレス計算 */ ui_blockAddr = startAddr + info.ui_blockSize * blockNo; *replyAddr = ui_blockAddr + info.ui_replySize * replyNo; /* ブロックアドレスチェック */ if( RA_d_SDRAM_EADDR > *replyAddr || RA_d_SDRAM_EADDR < (*replyAddr + info.ui_replySize - 1) ) { /* アドレスが範囲外 */ i_ret = -3; } return 0; }