//2013.10.24 /******************************************************************************* * モジュール名称 :アプリケーション02 - HK read & anaylses - MPPE/MSA * * 参考 : app02_DPU.c を参照 * * 注意 : EDIT権限は、MPPE/MSA組 * * 作成日・作成者 :2011/10/08 Y.K. * *******************************************************************************/ #include "app_common.h" #include "app_core.h" #include "app_MPPE-MIA.h" #include "app_MPPE-MSA.h" #define d_SIZEhk_MSA 128 // HK-size // ******************************************************************** // *** MSA : HK analyses, HW CMD production, HK packet production *** // ******************************************************************** int app02_MSA ( unsigned char uc_dataHK[], unsigned int ui_counter, unsigned char uc_link ) { unsigned char uc_dpuSwHk[0x100]; int i_dpuSwHK_size = 0; int i; int i_flag; unsigned char uc_setMode[6]; //M_T_TIME_INFO t_timeInfo; struct _s_MSA_CtrlParam *pCtrl; //制御用のフラグ及びパラメータ struct _s_MSA_Command *pCmd; //コマンド pCtrl = &Gst_MSA_ctrl; pCmd = &Gst_MSA_cmd; // ************************* // *** HW HK analyses *** // ************************* if ( uc_link ) { // --- HW-ON --- //MSA_OFF_TRIGGER(ラッチアップフラグ)の確認 if (pCtrl->uc_HKmon_ena) { if (uc_dataHK[2] >> 5 & 1) { //HV OFFはMSA CPUにて行われる //MDPではフラグ検出後、直ちにMSAのOFFを行う。 i_flag = app_DmcRequestCmd(0x0B); //MSA OFF if (!i_flag) { pCtrl->uc_HK_anmly = TRUE; //成功時はフラグを立てる。 pCtrl->uc_HKmon_ena = 0; } } } //mass情報による共用変数の取得 //(App03にて代入する) pCtrl->uc_Hmode_trg = (uc_dataHK[2] >> 6 & 1); //Send CMD for generating H-mode products uc_setMode[0] = 0x20; uc_setMode[1] = 0x00; uc_setMode[2] = 0x01; uc_setMode[3] = 0x00; uc_setMode[4] = 0x00; uc_setMode[5] = 0x00; if (pCtrl->uc_Hmode_run == 0 && Guc_TLMh_enadis[Gd_N_MSA]) { //M-mode番号を記録 pCtrl->uc_Mmode = uc_dataHK[2] >> 2 & 7; if (pCtrl->uc_Mmode == 0 || pCtrl->uc_Mmode > 5) pCtrl->uc_Mmode = 1; //Start H mode (and stop M mode) uc_setMode[2] = 0x00; i_flag = app_PiCmd(Gd_N_MSA, uc_setMode, 6); if (!i_flag) pCtrl->uc_Hmode_run = 1; } //Send CMD for going out of H mode if (pCtrl->uc_Hmode_run == 1 && !Guc_TLMh_enadis[Gd_N_MSA]) { //Stop H mode and start M mode uc_setMode[2] = pCtrl->uc_Mmode; i_flag = app_PiCmd(Gd_N_MSA, uc_setMode, 6); if (!i_flag) pCtrl->uc_Hmode_run = 0; } } else { // --- HW-OFF --- for (i=0; iuc_cnt;//コマンドカウンタ uc_dpuSwHk[1] = pCmd->uc_err_cnt;//エラーカウンタ uc_dpuSwHk[2] = pCmd->uc_ans[0];//コマンドアンサ0-3 uc_dpuSwHk[3] = pCmd->uc_ans[1]; uc_dpuSwHk[4] = pCmd->uc_ans[2]; uc_dpuSwHk[5] = pCmd->uc_ans[3]; uc_dpuSwHk[6] = (pCtrl->uc_eng_sci & 0x01) + (pCtrl->uc_mode << 1 & 0xfe); uc_dpuSwHk[7] = pCtrl->uc_HKmon_ena | (pCtrl->uc_HK_anmly << 1 & 0x02); uc_dpuSwHk[8] = pCtrl->uc_LMlm; uc_dpuSwHk[9] = 0; uc_dpuSwHk[10] = d_Lcl_MIA_TLMID0; uc_dpuSwHk[11] = d_Lcl_MSA_TLMID1; i_dpuSwHK_size = 12; } else { // --- HW-OFF --- } // ***************************** // *** HK Packet production *** // ***************************** if ( i_dpuSwHK_size > 0) memcpy( &uc_dataHK[d_SIZEhk_MSA], uc_dpuSwHk, i_dpuSwHK_size ); else i_dpuSwHK_size = 0; // ****************************** // *** HK Production in 'OFF *** // ****************************** if ( uc_link == 0 ) return( 0 ); else return( d_SIZEhk_MSA+i_dpuSwHK_size ); }