/******************************************************************************* * モジュール名称 :APP01 - CMD from DMC for RDN mode * * モジュールラベル :app01_CmdRdn * * タスク区分 :called from APP01 (CMD-Rdn-mode) * * コーリングシーケンス:void app01_CmdRdn( void ) * * 戻り値 :void * * 使用上の注意 :なし * * エラー処理 :なし * * 作成日・作成者 :2013/2/15 Y.K. * ********************************************************************************/ #include "dpu_api.h" #include "dpu_api_proto.h" #include "app_core.h" #include "app_rdn_core.h" #ifdef _APP_RDN_ // *** Macro *** int app01_CmdRdnDpu ( unsigned char [], int ); int app01_CmdRdnMission ( unsigned char [], int ); // ************************* // *** CMD-Exec in RDN *** // ************************* int app01_CmdRdn( unsigned char uc_cmdBuff[], int i_dataSize) { unsigned char uc_cmdID; int i_flag; memcpy (&Guc_rdn_MwHK[21], &uc_cmdBuff[8], 4); // 21-24 SW_CMD_CODE ソフトCmd Channel-IDから4byte (filled in app01_CmdRdnDpu) Guc_rdn_MwHK[25] ++; // 25 7 0 SW_CMD_CNT ソフトCmd受信回数 回 !!!!! uc_cmdID = uc_cmdBuff[1]; // <<<< CMD in Redundancy >>>> // DPU1:18/20 MEA1:28 MEA2:30 MIA: 38 MSA:40 HEPE:48 HEPI:50 ENA:58 MGFO:60 // DPU2:19/21 MGFI:68 MDM: 70 MSAS:78 EWO:80 SOR: 90 MEF :98 MWE:A0 if ( (uc_cmdID & 0x7) == 0) { uc_cmdID = uc_cmdID >> 3; if ( uc_cmdID==Gd_N_DPU1 || uc_cmdID==Gd_N_DPU2 ) { i_flag=app01_CmdRdnDpu (uc_cmdBuff, i_dataSize); return(i_flag); } // DPU else if ( uc_cmdID>=Gd_N_MEA1 && uc_cmdID<=Gd_N_MWE && uc_cmdID!=Gd_N_EWO+1 ) { i_flag=app01_CmdRdnMission(uc_cmdBuff, i_dataSize); return(i_flag); } // Mission } // ERROR Guc_rdn_MwHK[26] ++; // 26 7 0 SW_CMD_REJ_CNT ソフトCmdRejct回数 回 Guc_rdn_MwHK[27] = uc_cmdBuff[1]; // 27 7 0 SW_CMD_REJ_CODE ソフトCmdRejctコード return( 1 ); } // ******************************* // *** CMD-Exec in RDN for DPU *** // ******************************* int app01_CmdRdnDpu( unsigned char uc_cmdBuff[], int i_dataSize) { unsigned int ui_ChID; // unsigned int ui_Size; unsigned int ui_Fmt1; unsigned int ui_Fmt2; // ------------------------------------------------------- // Check Data header ui_Fmt1 = uc_cmdBuff[6]; // 03:MEM-load(03/NodeID) 01:others(01/02) ui_Fmt2 = uc_cmdBuff[7]; // [MEM-load] Node-ID // # ### MDP-MIS-LOAD(APID=冗長側, LOAD_DATA:163byte) // [APID] [NODE XX=05から0C] (address) if ( ui_Fmt1 == 0x03 && (Guc_RDN_MemLoad_NID & 0x80) == 0 && uc_cmdBuff[5] > 5 && uc_cmdBuff[5] <= 178 && ui_Fmt2 >= Gd_N_MEA1 && ui_Fmt2 <= Gd_N_MWE ) { if ( Gi_RDN_MemLoad_Ena == 0 ) { Guc_RDN_MemLoad_NID = ui_Fmt2 + 0x80; memcpy( &Gui_RDN_MemLoad_Address, &(uc_cmdBuff[8]), 4 ); /* Gui_RDN_MemLoad_Address = uc_cmdBuff[8] * 0x1000000 + uc_cmdBuff[9] * 0x10000 + uc_cmdBuff[10] * 0x100 + uc_cmdBuff[11]; */ Guc_RDN_MemLoad_Size = uc_cmdBuff[5] - 5; memcpy( Guc_RDN_MemLoad_Data, &(uc_cmdBuff[12]), Guc_RDN_MemLoad_Size); } else { Guc_RDN_MemLoad_NID = 0x1E; } return( 0 ); } if (ui_Fmt1 == 0x01 && ui_Fmt2 == 0x02) { // ui_Size = uc_cmdBuff[5]; ui_ChID = uc_cmdBuff[8] * 0x100 + uc_cmdBuff[9]; // # ### MDP-MIS-DUMP(APID=冗長側) // [APID] [CHID] Times [NODE XX=05から0C] [address] [size:any???] // 1A 18 C0 00 00 0C 01 02 00 04 03 05 12 34 56 78 01 02 00 if ( ui_ChID == 0x0004 && (Guc_RDN_MemDump_NID & 0x80) == 0 && uc_cmdBuff[5] == 0x0C && uc_cmdBuff[11] >= Gd_N_MEA1 && uc_cmdBuff[11] <= Gd_N_MWE ) { if ( Gi_RDN_MemLoad_Ena == 0 ) { Guc_RDN_MemDump_Times = uc_cmdBuff[10]; Guc_RDN_MemDump_NID = ( uc_cmdBuff[11] & 0x7F ) + 0x80; memcpy( &Gui_RDN_MemDump_Address, &(uc_cmdBuff[12]), 4 ); Gui_RDN_MemDump_Address &= 0xFFFFFFF0; /* Gui_RDN_MemDump_Address = (uc_cmdBuff[12] << 24) + (uc_cmdBuff[13] << 16) + (uc_cmdBuff[14] << 8) + (uc_cmdBuff[15] & 0xF0); */ } else { Guc_RDN_MemDump_NID = 0x1F; } return( 0 ); } else if (ui_ChID == 0x0308) { // MDP-MIS-CLCT 0x0308 [ChID 0308] // (NoteID) 00 DIS? // (NoteID) FF ENA? // others N/A? if ( uc_cmdBuff[10] < 0x13 ) { if ( uc_cmdBuff[11]==0x00 ) { Guc_rdn_missionClct[ uc_cmdBuff[10] ] = 0; // **** REDUNDANCY **** return( 0 ); } if ( uc_cmdBuff[11]==0xFF ) { Guc_rdn_missionClct[ uc_cmdBuff[10] ] = 1; // **** REDUNDANCY **** return( 0 ); } } } else if (ui_ChID == 0x030A) { // MDP-OW-MODE [ChID 030A] // (NoteID) 00 00 LONG-OVW DIS (Shortには無関係?) --> OVW-DIS // (NoteID) 00 FF LONG-OVW ENA (Shortには無関係?) --> OVW-ENA // (NoteID) FF 00 SHRT-OVW DIS (Longには無関係?) --> OVW-ENA // (NoteID) FF FF SHRT-OVW ENA (Longには無関係?) --> OVW-ENA if ( uc_cmdBuff[10] < 0x13 ) { if ( uc_cmdBuff[11]==0x00 && uc_cmdBuff[12]==0x00 ) { Guc_rdn_missionOvw [ uc_cmdBuff[10] ] = 0; // OVW-DIS // **** REDUNDANCY **** } else { Guc_rdn_missionOvw [ uc_cmdBuff[10] ] = 1; // OVW-ENA // **** REDUNDANCY **** } return( 0 ); } } else if (ui_ChID == 0x030D) { // MDP-MEMLOAD-ENA/DIS [ChID 030D] // FF ENA // 00 DIS // others N/A if ( uc_cmdBuff[10] == 0xFF ) { Gi_RDN_MemLoad_Ena = 0; // ENA return( 0 ); } if ( uc_cmdBuff[10] == 0x00 ) { Gi_RDN_MemLoad_Ena = 1; // DIS return( 0 ); } // 19 3 - LOAD_DUMP_DIS メモリロード許可/禁止 0:Enable/1:Disable } } // ERROR Guc_rdn_MwHK[26] ++; // 26 7 0 SW_CMD_REJ_CNT ソフトCmdRejct回数 回 !!!!! Guc_rdn_MwHK[27] = 0xFF; // 27 7 0 SW_CMD_REJ_CODE ソフトCmdRejctコード !!!!! return( 0xFF ); } // *********************************** // *** CMD-Exec in RDN for Mission *** // *********************************** int app01_CmdRdnMission( unsigned char uc_cmdBuff[], int i_dataSize) { unsigned char uc_APID; unsigned char uc_Size; // Check Data header uc_APID = uc_cmdBuff[1]; // MEA1:28 MEA2:30 MIA: 38 MSA:40 HEPE:48 HEPI:50 ENA:58 MGFO:60 // MGFI:68 MDM: 70 MSAS:78 EWO:80 SOR: 90 MEF :98 MWE:A0 uc_Size = uc_cmdBuff[5]; // # ### MDP-MIS-CMD(APID=冗長側ミッション機器すべて, MissionCmd:163byte) if ( Gt_RDN_cmd.uc_Num >= Gd_CMDBUFF_NO ) { Gt_RDN_cmd.uc_GetErr |= 1; Guc_rdn_MwHK[26] ++; // 26 7 0 SW_CMD_REJ_CNT ソフトCmdRejct回数 回 !!!!! Guc_rdn_MwHK[27] = 0xF0; // 27 7 0 SW_CMD_REJ_CODE ソフトCmdRejctコード !!!!! return( 0xF0 ); } if (uc_cmdBuff[6] == 0x01 && uc_cmdBuff[7] == 0x02 && uc_Size<=166) { uc_APID = (uc_APID >> 3); if ( uc_APID>=Gd_N_MEA1 && uc_APID<=Gd_N_MWE && uc_APID!=Gd_N_EWO+1 ) { Gt_RDN_cmd.uc_NID [Gt_RDN_cmd.uc_Num] = uc_APID; Gt_RDN_cmd.uc_size[Gt_RDN_cmd.uc_Num] = uc_Size - 3; memcpy( &(Gt_RDN_cmd.uc_buff[Gt_RDN_cmd.uc_Num][0]), &(uc_cmdBuff[10]), uc_Size - 3); Gt_RDN_cmd.uc_Num ++; return( 0 ); } } Gt_RDN_cmd.uc_GetErr |= 2; Guc_rdn_MwHK[26] ++; // 26 7 0 SW_CMD_REJ_CNT ソフトCmdRejct回数 回 !!!!! Guc_rdn_MwHK[27] = 0xF1; // 27 7 0 SW_CMD_REJ_CODE ソフトCmdRejctコード !!!( 0xF1 ); return( 0xF1 ); } #endif // _APP_RDN_