/******************************************************************************* * モジュール名称 :APP13 Mission TLM (L&M) DPU tasks * * モジュールラベル :app13_DPU * * タスク区分 :Application-13 DPU task for Mission TLM (L&M) * * 機能 : * * コーリングシーケンス:void app13_DPU2 * * 引数 :なし * * 戻り値 :なし * * 使用上の注意 :グローバル変数はアプリケーション01でまとめて初期化 * * エラー処理 :なし * * 注意 : EDIT権限は、core組 * * 作成日・作成者 :2016/2/26 Y.K. * ********************************************************************************/ #include "dpu_api.h" #include "dpu_api_proto.h" #include "app_core.h" // *** Macro - Local *** void app13_DPU2_SPIN ( unsigned int, unsigned int, unsigned int ); int app13_DPU2_sync ( void ); void app13_putDPU2 ( unsigned char, unsigned char, unsigned char, unsigned char, unsigned int, unsigned char, unsigned char [], int); // *********************************** // *** app13_DPU2 *** // *********************************** void app13_DPU2 ( unsigned int ui_sunpulseCnt ) { int i, j; int i_num = 0; int i_flag; for (i=0; i<3; i++) { if (i==2) { // ==== DPU2->DPU1 (32x4sec) ==== i_flag = 32; j = 0; if ( Guc_dpuRdn>0 || Guc_HK_link[Gd_N_DPU2]==0 ) { // ==== No Requirement to send CMD to SLAVE ==== Guc_TLMh_storeId = Gus_TLMh_TIstart = Gus_TLMh_TIlength = 0; Guc_TLMh_DrNum &= 0x1F; return; // ****CMD to another DPU**** // Master->Slave Slave->Master // b0-4 DR1-5 --> (answer back) 0x1F // b5 <-- 1:finish 0x20 // b6 --- <-- 1:Going 0x40 // b7 1:Start --> [Start] 0x80 } } else { // ==== L/M data production ==== i_flag = 1+i*15; j = Gd_TRG_CALC; if ( (ui_sunpulseCnt & 0x0F) != 0 || Gui_TRG2_SpTI[j]==0 || Guc_TLMm_enadis==0 ) continue; if ( Guc_TLMh_ScoreLen==0 && Guc_dpuHkMode==0 ) continue; } // ====DATA COPY ==== // 40B (受渡し:36B) i_num = 0; // ------ memcpy( &(G13uc_packet[i_num]), &(Gs_TRG2_MGFI_Bx [j]), 2*i_flag); i_num += 2*i_flag; // 2B MGFI 8B memcpy( &(G13uc_packet[i_num]), &(Gs_TRG2_MGFI_By [j]), 2*i_flag); i_num += 2*i_flag; // 2B memcpy( &(G13uc_packet[i_num]), &(Gs_TRG2_MGFI_Bz [j]), 2*i_flag); i_num += 2*i_flag; // 2B memcpy( &(G13uc_packet[i_num]), &(Gus_TRG2_MGFI_Brms [j]), 2*i_flag); i_num += 2*i_flag; // 2B memcpy( &(G13uc_packet[i_num]), &(Gs_TRG2_EFD_Pot [j]), 2*i_flag); i_num += 2*i_flag; // 2B EFD 6B memcpy( &(G13uc_packet[i_num]), &(Gus_TRG2_EFD_E [j]), 2*i_flag); i_num += 2*i_flag; // 2B memcpy( &(G13uc_packet[i_num]), &(Gus_TRG2_EFD_Erms [j]), 2*i_flag); i_num += 2*i_flag; // 2B memcpy( &(G13uc_packet[i_num]), &(Guc_TRG2_EWO_Esp [j][0]), 8*i_flag); i_num += 8*i_flag; // 8B EWO 16B memcpy( &(G13uc_packet[i_num]), &(Guc_TRG2_EWO_Bsp [j][0]), 8*i_flag); i_num += 8*i_flag; // 8B memcpy( &(G13uc_packet[i_num]), &(Guc_TRG2_SOR_N [j]), i_flag); i_num += i_flag; // 1B SOR 2B memcpy( &(G13uc_packet[i_num]), &(Guc_TRG2_SOR_T [j]), i_flag); i_num += i_flag; // 1B if (i<1) memcpy( &G2uc_packet[1100], G13uc_packet, 32); // 32B memcpy( &(G13uc_packet[i_num]), &(Gui_TRG2_SpTI_s [j]), 4*i_flag); i_num += 4*i_flag; // 4B if (i<2) { memcpy( &(G13uc_packet[i_num]), &(Gui_TRG1_SpTI_s[j]), 4*i_flag); i_num += 4*i_flag; // 4B if ( Guc_TLMh_ScoreLen ) { memcpy( &(G13uc_packet[i_num]),&(Gus_TRG1_Score [j]), 2*i_flag); i_num += 2*i_flag; // (2B) memcpy( &(G13uc_packet[i_num]),&(Gus_TRG2_Score [j]), 2*i_flag); i_num += 2*i_flag; // (2B) } app13_putDPU2( Gd_N_DPU2, 0, Gd_N_DPU2, i+Guc_TLMh_ScoreLen*0x10, Gui_TRG2_SpTI_s[j], 2+i, G13uc_packet, i_num ); } } // **** TRG-INFO **** // ***9B*** G13uc_packet[i_num] = Guc_TLMh_storeId; i_num ++; // 1B G13uc_packet[i_num] = Guc_TLMh_DrNum; i_num ++; // 1B memcpy( &(G13uc_packet[i_num]), &Gus_TLMh_TIstart, 2); i_num += 2; // 2B memcpy( &(G13uc_packet[i_num]), &Gus_TLMh_TIlength, 2); i_num += 2; // 2B memcpy( &(G13uc_packet[i_num]), &Gui_TRG2_Cnt, 4); i_num += 4; // 4B G13uc_packet[i_num] = (Guc_TLMh_DrEmpty[1] & 0x01) + // 1B (Guc_TLMh_DrEmpty[2] & 0x01) * 2 + (Guc_TLMh_DrEmpty[3] & 0x01) * 4 + (Guc_TLMh_DrEmpty[4] & 0x01) * 8 + (Guc_TLMh_DrEmpty[5] & 0x01) * 16; i_num ++; // **** DATA SEND : **** #ifndef _APP_RDN_ while (1) { if (Gi_shareBusy == 0) break; dpu_delay(10); } i_flag = dpu_sendDpuMessage( G13uc_packet, 0, Gd_TRG_DPU2_MAX, & Gi_shareBusy); if (i_flag) { Gi_shareBusy = 0; return; } while (1) { if (Gi_shareBusy == 0) break; dpu_delay(10); } Gi_shareBusy = 0; #endif return; } void app13_DPU2_SPIN( unsigned int ui_cntSunpulse, // SunPulse Counter unsigned int ui_tiSunpulse, // SunPulse TI LSB:1.953msec unsigned int ui_ti2 ) // TI LSB:31.25msec { int i; int i_flag; unsigned int ui_tiSunpulse2; // LSB: 31.25msec // ********************** // ***** SCORE-CALC ***** // ********************** if ( Guc_TLMh_ScoreLen && Guc_dpuNo==1) { // Not-TRG-SLAVE mode app_TRG2_ScoreCalc(); // 1. TRIGGER-Calc: NOW --> INPUT to TRIGGER SCORE変数 at SPIN-#6(24sec後) app_TRG1_ScoreCalc(); // 1. TRIGGER-Calc: NOW --> INPUT to TRIGGER SCORE変数 at SPIN-#6(24sec後) if ( Gui_TRG_ScoreTotal == 0 ) { i_flag = app_TRG_ScoreAnalysis(); // 2. Σ(TRG-SCORE) -- 長さ:ScoreLEN spin // 3. if Σ(TRG-SCORE) > TH // TRG-TI0start: TI - Guc_TLMh_storeTimePre * 4sec // TRG-TI0end: TIstart + Guc_TLMh_storeTimeLen * 4sec } if ( Gui_TRG_ScoreTotal ) { i_flag = app_TRG_ScoreDumpStart(); // 4. IF TI == TRG-TI0end // TI-DUMP-CMD set } } // *************************************************** // ***** Creation of SunPulse TI @ LSB:31.95msec ***** // *************************************************** ui_tiSunpulse2 = (ui_tiSunpulse >> 4); // LSB: 31.25msec if ( ui_tiSunpulse2 > 0x0F000000 && (ui_ti2 & 0x0FFFFFFF) < 0x01000000 ) ui_tiSunpulse2 += (ui_ti2 & 0xF0000000) - 0x01000000; else if ( ui_tiSunpulse2 < 0x01000000 && (ui_ti2 & 0x0FFFFFFF) > 0x0F000000 ) ui_tiSunpulse2 += (ui_ti2 & 0xF0000000) + 0x01000000; else ui_tiSunpulse2 += (ui_ti2 & 0xF0000000); // ********************** // ***** MSASI cntl ***** // ********************** if (Guc_MSAS_BufClct) { Guc_MSAS_BufClct --; if (Guc_MSAS_BufClct==0) app01_BufCollectSet( Gd_N_MSAS, 0); } // *********************** // ***** Data update ***** // *********************** if ( ui_tiSunpulse2 > Gui_TRG2_SpTI [0] || (ui_tiSunpulse2 < 0x01000000 && Gui_TRG1_SpTI [0] > 0xFF000000) ) { // ---- Buffer Shift ---- memcpy( &(Gui_TRG2_SpTI [1]), &(Gui_TRG2_SpTI [0]), (Gd_TRG_MAX - 1) * 4); memcpy( &(Gui_TRG2_SpTI_s [1]), &(Gui_TRG2_SpTI_s [0]), (Gd_TRG_MAX - 1) * 4); // memcpy( &(Gs_TRG2_MGFI_Bx [1]), &(Gs_TRG2_MGFI_Bx [0]), (Gd_TRG_MAX - 1) * 2); memcpy( &(Gs_TRG2_MGFI_By [1]), &(Gs_TRG2_MGFI_By [0]), (Gd_TRG_MAX - 1) * 2); memcpy( &(Gs_TRG2_MGFI_Bz [1]), &(Gs_TRG2_MGFI_Bz [0]), (Gd_TRG_MAX - 1) * 2); memcpy( &(Gus_TRG2_MGFI_Brms[1]), &(Gus_TRG2_MGFI_Brms[0]), (Gd_TRG_MAX - 1) * 2); memcpy( &(Gs_TRG2_EFD_Pot [1]), &(Gs_TRG2_EFD_Pot [0]), (Gd_TRG_MAX - 1) * 2); memcpy( &(Gus_TRG2_EFD_E [1]), &(Gus_TRG2_EFD_E [0]), (Gd_TRG_MAX - 1) * 2); memcpy( &(Gus_TRG2_EFD_Erms [1]), &(Gus_TRG2_EFD_Erms [0]), (Gd_TRG_MAX - 1) * 2); // memcpy( &(Guc_TRG2_EWO_Esp [1][0]), &(Guc_TRG2_EWO_Esp [0][0]), (Gd_TRG_MAX - 1) * 8); memcpy( &(Guc_TRG2_EWO_Bsp [1][0]), &(Guc_TRG2_EWO_Bsp [0][0]), (Gd_TRG_MAX - 1) * 8); // memcpy( &(Guc_TRG2_SOR_N [1]), &(Guc_TRG2_SOR_N [0]), (Gd_TRG_MAX - 1) ); memcpy( &(Guc_TRG2_SOR_T [1]), &(Guc_TRG2_SOR_T [0]), (Gd_TRG_MAX - 1) ); // memcpy( &(Gus_TRG2_Score [1]), &(Gus_TRG2_Score [0]), (Gd_TRG_MAX - 1) * 2); if ( Guc_dpuRdn==0) memcpy( &(Gus_TRG1_Score[1]), &(Gus_TRG1_Score [0]), (Gd_TRG_MAX - 1) * 2); // ---- Trigger Buffer reset app_TRG_reset( 1, 0 ); // Gus_TRG1_Score [0] = Gus_TRG2_Score [0] = 0xFFFF; Gui_TRG2_Cnt ++; Gui_TRG2_SpTI [0] = ui_tiSunpulse2; // **** TI at Sun Pulse (LSB:31.25msec) Gui_TRG2_SpTI_s [0] = ui_tiSunpulse; // **** TI at Sun Pulse (LSB:1.953msec) } else { for (i=0; i0 || Guc_HK_link[Gd_N_DPU1]==0 ) { Gi_shareStatus = 0; return; } i = app13_DPU2_sync(); return; } // *********************************** // *** app13_DPU2_sync *** // *********************************** int app13_DPU2_sync() { int i_flag; int i_num; unsigned char uc_TLMh_storeId, uc_TLMh_DrNum, uc_DrEmpty; unsigned short us_TLMh_TIstart, us_TLMh_TIlength; // ------------------------------------------------------------- // --- READ // ------------------------------------------------------------- // DPU1: 39B x 16 = 624B DPU2: 42B x 16 = 672B i_flag = dpu_recvDpuMessage( G13uc_packet, 0, Gd_TRG_DPU1_MAX, & Gi_shareBusy); if (i_flag) { Gi_shareBusy = 0; Gi_shareStatus = 2; Guc_TLMh_storeId = Gus_TLMh_TIstart = Gus_TLMh_TIlength = 0; Guc_TLMh_DrNum &= 0x1F; return(i_flag); } while (1) { if (Gi_shareBusy == 0) break; dpu_delay(10); } Gi_shareBusy = 0; Gi_shareStatus = 1; // **** Data copy **** i_num = 0; // 41B x 32 + 9 = 1385B // memcpy( &(Gs_TRG1_MGFO_Bx [0]), &(G13uc_packet[i_num]), 32 * 2); i_num += 32*2; // 2B MGFO 8B memcpy( &(Gs_TRG1_MGFO_By [0]), &(G13uc_packet[i_num]), 32 * 2); i_num += 32*2; // 2B memcpy( &(Gs_TRG1_MGFO_Bz [0]), &(G13uc_packet[i_num]), 32 * 2); i_num += 32*2; // 2B memcpy( &(Gus_TRG1_MGFO_Brms[0]), &(G13uc_packet[i_num]), 32 * 2); i_num += 32*2; // 2B memcpy( &(Gus_TRG1_MIA_N [0]), &(G13uc_packet[i_num]), 32 * 2); i_num += 32*2; // 2B MIA 17B memcpy( &(Gs_TRG1_MIA_Vx [0]), &(G13uc_packet[i_num]), 32 * 2); i_num += 32*2; // 2B memcpy( &(Gs_TRG1_MIA_Vy [0]), &(G13uc_packet[i_num]), 32 * 2); i_num += 32*2; // 2B memcpy( &(Gs_TRG1_MIA_Vz [0]), &(G13uc_packet[i_num]), 32 * 2); i_num += 32*2; // 2B memcpy( &(Gus_TRG1_MIA_T [0]), &(G13uc_packet[i_num]), 32 * 2); i_num += 32*2; // 2B memcpy( &(Guc_TRG1_MIA_Esp [0][0]), &(G13uc_packet[i_num]), 32 * 7); i_num += 32*7; // 7B memcpy( &(Gus_TRG1_MEA_T [0]), &(G13uc_packet[i_num]), 32 * 2); i_num += 32*2; // 2B MEA 3B memcpy( &(Gc_TRG1_MSA_HIon [0]), &(G13uc_packet[i_num]), 32 ); i_num += 32; // 1B memcpy( &(Gus_TRG1_HEPE_Flux [0]), &(G13uc_packet[i_num]), 32 * 2); i_num += 32*2; // 2B HEP 4B memcpy( &(Gus_TRG1_HEPE_FluxH[0]), &(G13uc_packet[i_num]), 32 * 2); i_num += 32*2; // 2B memcpy( &(Gc_TRG1_ENA [0]), &(G13uc_packet[i_num]), 32 ); i_num += 32; // 1B // memcpy( &(Gui_TRG1_SpTI_s [0]), &(G13uc_packet[i_num]), 32 * 4); i_num += 32*4; // 4B // memcpy( &(Gui_TRG1_SpTI [0]), &(G13uc_packet[i_num]), 32 * 4); i_num += 32*4; // 4B 10B // uc_TLMh_storeId = G13uc_packet[i_num]; i_num ++; // 1B uc_TLMh_DrNum = G13uc_packet[i_num]; i_num ++; // 1B memcpy( &us_TLMh_TIstart, &(G13uc_packet[i_num]), 2); i_num += 2; // 2B memcpy( &us_TLMh_TIlength, &(G13uc_packet[i_num]), 2); i_num += 2; // 2B memcpy( &(Gui_TRG1_Cnt), &(G13uc_packet[i_num]), 4); i_num += 4; // 4B uc_DrEmpty = G13uc_packet[i_num]; // 1B // --- Non-Sync --- if ( Gui_TRG1_SpTI_s[0] == 0xFFFFFFFF || Gui_TRG1_SpTI_s[0] == 0x00000000 ) { app_TRG_reset( 0, 0 ); // Trigger Buffer reset Guc_TLMh_storeId = Gus_TLMh_TIlength = 0; // --- TRG-DUMP-START CMD - finished Guc_TLMh_DrNum &= 0x1F; Gi_shareStatus = 3; return(3); } // ******************* // **** TRG-INFO **** // ******************* if (Guc_dpuNo==1) { app_TRG_cntl( uc_TLMh_DrNum, uc_DrEmpty, uc_TLMh_storeId, us_TLMh_TIstart, us_TLMh_TIlength ); } return(0); } // =========================================================================== // app13_putDPU2 // [INPUT] unsigned char uc_nodeId Node ID // unsigned char uc_dataId Data ID // unsigned char uc_headId Head ID // unsigned char uc_pacId Packet ID // unsigned int ui_dataTi Header: TI // unsigned char uc_drId, DR-ID = L or H0 (for CAT-ID) [0:HK 1:OS 2:L 3:M 4-9:H(0-5)] // unsigned char uc_data[] Data // int i_dataSize Data Size // =========================================================================== void app13_putDPU2( unsigned char uc_nodeId, // [INPUT] Node ID unsigned char uc_dataId, // [INPUT] Data ID unsigned char uc_headId, // [INPUT] Head ID unsigned char uc_pacId, // [INPUT] Packet ID (user defined) unsigned int ui_dataTi, // [INPUT] TI unsigned char uc_drId, // [INPUT] DR-ID L/M/H0 (for CAT-ID) [0:HK 1:OS 2:L 3:M 4-9:H(0-5)] unsigned char uc_data[], // [INPUT] Data int i_dataSize) // [INPUT] Data Size (Byte) { int i_flag; unsigned char uc_TLMm_cmp = Guc_TLMm_cmp[uc_headId]; // --------------------------------------------------- // --- Non-Comp / JPEG-Rev / Pre-Compressed Packet --- // --------------------------------------------------- i_flag = app_PutTlm( 13, // [INPUT] APP-NUM = 13 uc_nodeId, // [INPUT] Node-ID uc_dataId, // [INPUT] Data-ID uc_headId, // [INPUT] Header-ID (for PID-ID, CAT-ID setting) uc_drId, // [INPUT] DR-ID (for CAT-ID) [0:HK 1:OS 2:L 3:M 4-9:H(0-5)] uc_TLMm_cmp, // [INPUT] Comp mode [0:non 1:JPEG-rev 2:JPEG-nonrev 3:After-User-COMP] uc_pacId, // [INPUT] Packet ID <<<< USER-DEF: 0x00- 0xFF >>>> ui_dataTi, // [INPUT] Data TI <<<< USER-DEF: 0x00000000-0xFFFFFFFF >>>> Guc_cmdDummy, // [INPUT] Comment <<<< USER-DEF: <128B >>>> 0, // [INPUT] Comment - Size <<<< USER-DEF: <128B >>>> uc_data, // [INPUT] Data <<<< USER-DEF: <0x1E00 >>>> i_dataSize); // [INPUT] Data - Size <<<< USER-DEF: <0x1E00 >>>> return; }