/******************************************************************************* * モジュール名称 :APP03 Mission TLM (L&M) DPU tasks * * モジュールラベル :app03_DPU * * タスク区分 :Application-03 DPU task for Mission TLM (L&M) * * 機能 : * * コーリングシーケンス:void app03_DPU) * * 引数 :なし * * 戻り値 :なし * * 使用上の注意 :グローバル変数はアプリケーション01でまとめて初期化 * * エラー処理 :なし * * 注意 : EDIT権限は、core組 * * 作成日・作成者 :2016/2/26 Y.K. * *******************************************************************************/ #include "dpu_api.h" #include "dpu_api_proto.h" #include "app_core.h" // *** Macro - Local *** void app03_DPU1_SPIN ( unsigned int, unsigned int, unsigned int ); int app03_DPU1_sync ( void ); void app03_putDPU1 ( unsigned char, unsigned char, unsigned char, unsigned char, unsigned int, unsigned char, unsigned char [], int); // *********************************** // *** app03_DPU1 *** // *********************************** void app03_DPU1 ( unsigned int ui_sunpulseCnt ) { int i, j; int i_num = 0; int i_flag; for (i=0; i<3; i++) { if (i==2) { // ==== DPU1->DPU2 (32x4sec) ==== i_flag = 32; j = 0; if ( Guc_dpuRdn || Guc_HK_link[Gd_N_DPU1]==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_TRG1_SpTI[j]==0 || Guc_TLMm_enadis==0 ) continue; if ( Guc_TLMh_ScoreLen==0 && Guc_dpuHkMode==0 ) continue; } // ====DATA COPY ==== // 41B i_num = 0; // -------------------- memcpy( &(G03uc_packet[i_num]), &(Gs_TRG1_MGFO_Bx [j]), 2*i_flag); i_num += 2*i_flag; // 2B MGFO 8B memcpy( &(G03uc_packet[i_num]), &(Gs_TRG1_MGFO_By [j]), 2*i_flag); i_num += 2*i_flag; // 2B memcpy( &(G03uc_packet[i_num]), &(Gs_TRG1_MGFO_Bz [j]), 2*i_flag); i_num += 2*i_flag; // 2B memcpy( &(G03uc_packet[i_num]), &(Gus_TRG1_MGFO_Brms [j]), 2*i_flag); i_num += 2*i_flag; // 2B memcpy( &(G03uc_packet[i_num]), &(Gus_TRG1_MIA_N [j]), 2*i_flag); i_num += 2*i_flag; // 2B MIA 17B memcpy( &(G03uc_packet[i_num]), &(Gs_TRG1_MIA_Vx [j]), 2*i_flag); i_num += 2*i_flag; // 2B memcpy( &(G03uc_packet[i_num]), &(Gs_TRG1_MIA_Vy [j]), 2*i_flag); i_num += 2*i_flag; // 2B memcpy( &(G03uc_packet[i_num]), &(Gs_TRG1_MIA_Vz [j]), 2*i_flag); i_num += 2*i_flag; // 2B memcpy( &(G03uc_packet[i_num]), &(Gus_TRG1_MIA_T [j]), 2*i_flag); i_num += 2*i_flag; // 2B memcpy( &(G03uc_packet[i_num]), &(Guc_TRG1_MIA_Esp [j][0]), 7*i_flag); i_num += 7*i_flag; // 7B memcpy( &(G03uc_packet[i_num]), &(Gus_TRG1_MEA_T [j]), 2*i_flag); i_num += 2*i_flag; // 2B MEA 3B memcpy( &(G03uc_packet[i_num]), &(Gc_TRG1_MSA_HIon [j]), 1*i_flag); i_num += 1*i_flag; // 1B memcpy( &(G03uc_packet[i_num]), &(Gus_TRG1_HEPE_Flux [j]), 2*i_flag); i_num += 2*i_flag; // 2B HEP 6B->4B memcpy( &(G03uc_packet[i_num]), &(Gus_TRG1_HEPE_FluxH[j]), 2*i_flag); i_num += 2*i_flag; // 2B memcpy( &(G03uc_packet[i_num]), &(Gc_TRG1_ENA [j]), 1*i_flag); i_num += 1*i_flag; // 1B ENA 1B if (i<1) memcpy( &G2uc_packet[1000], G03uc_packet, 33); // **33B** memcpy( &(G03uc_packet[i_num]), &(Gui_TRG1_SpTI_s [j]), 4*i_flag); i_num += 4*i_flag; // 4B if (i<2) { memcpy( &(G03uc_packet[i_num]), &(Gui_TRG2_SpTI_s[j]), 4*i_flag); i_num += 4*i_flag; // 4B 8B if ( Guc_TLMh_ScoreLen ) { memcpy( &(G03uc_packet[i_num]),&(Gus_TRG1_Score [j]), 2*i_flag); i_num += 2*i_flag; // (2B) memcpy( &(G03uc_packet[i_num]),&(Gus_TRG2_Score [j]), 2*i_flag); i_num += 2*i_flag; // (2B) } app03_putDPU1( Gd_N_DPU1, 0, Gd_N_DPU1, i+Guc_TLMh_ScoreLen*0x10, Gui_TRG1_SpTI_s[j], 2+i, G03uc_packet, i_num ); } } // **** TRG-INFO **** // <<< 9B >>> G03uc_packet[i_num] = Guc_TLMh_storeId; i_num ++; // 1B G03uc_packet[i_num] = Guc_TLMh_DrNum; i_num ++; // 1B memcpy( &(G03uc_packet[i_num]), &Gus_TLMh_TIstart, 2); i_num += 2; // 2B memcpy( &(G03uc_packet[i_num]), &Gus_TLMh_TIlength, 2); i_num += 2; // 2B memcpy( &(G03uc_packet[i_num]), &Gui_TRG1_Cnt, 4); i_num += 4; // 4B G03uc_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( G03uc_packet, 0, Gd_TRG_DPU1_MAX, & Gi_shareBusy); // [0x570] if (i_flag) { Gi_shareBusy = 0; return; } while (1) { if (Gi_shareBusy == 0) break; dpu_delay(10); } Gi_shareBusy = 0; #endif return; } void app03_DPU1_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==0) { // Not-TRG-SLAVE mode app_TRG1_ScoreCalc(); // 1. TRIGGER-Calc: NOW --> INPUT to TRIGGER SCORE変数 at SPIN-#6(24sec後) app_TRG2_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); // *********************** // ***** Data update ***** // *********************** if ( ui_tiSunpulse2 > Gui_TRG1_SpTI [0] || (ui_tiSunpulse2 < 0x01000000 && Gui_TRG1_SpTI [0] > 0xFF000000) ) { // ---- Buffer Shift ---- memcpy( &(Gui_TRG1_SpTI [1]), &(Gui_TRG1_SpTI [0]), (Gd_TRG_MAX - 1) * 4); memcpy( &(Gui_TRG1_SpTI_s [1]), &(Gui_TRG1_SpTI_s [0]), (Gd_TRG_MAX - 1) * 4); // memcpy( &(Gs_TRG1_MGFO_Bx [1]), &(Gs_TRG1_MGFO_Bx [0]), (Gd_TRG_MAX - 1) * 2); memcpy( &(Gs_TRG1_MGFO_By [1]), &(Gs_TRG1_MGFO_By [0]), (Gd_TRG_MAX - 1) * 2); memcpy( &(Gs_TRG1_MGFO_Bz [1]), &(Gs_TRG1_MGFO_Bz [0]), (Gd_TRG_MAX - 1) * 2); memcpy( &(Gus_TRG1_MGFO_Brms[1]), &(Gus_TRG1_MGFO_Brms[0]), (Gd_TRG_MAX - 1) * 2); // memcpy( &(Gus_TRG1_MIA_N [1]), &(Gus_TRG1_MIA_N [0]), (Gd_TRG_MAX - 1) * 2); memcpy( &(Gs_TRG1_MIA_Vx [1]), &(Gs_TRG1_MIA_Vx [0]), (Gd_TRG_MAX - 1) * 2); memcpy( &(Gs_TRG1_MIA_Vy [1]), &(Gs_TRG1_MIA_Vy [0]), (Gd_TRG_MAX - 1) * 2); memcpy( &(Gs_TRG1_MIA_Vz [1]), &(Gs_TRG1_MIA_Vz [0]), (Gd_TRG_MAX - 1) * 2); memcpy( &(Gus_TRG1_MIA_T [1]), &(Gus_TRG1_MIA_T [0]), (Gd_TRG_MAX - 1) * 2); memcpy( &(Guc_TRG1_MIA_Esp [1][0]), &(Guc_TRG1_MIA_Esp [0][0]), (Gd_TRG_MAX - 1) * 7); // memcpy( &(Gus_TRG1_MEA_T [1]), &(Gus_TRG1_MEA_T [0]), (Gd_TRG_MAX - 1) * 2); memcpy( &(Gc_TRG1_MSA_HIon [1]), &(Gc_TRG1_MSA_HIon [0]), (Gd_TRG_MAX - 1)); // memcpy( &(Gus_TRG1_HEPE_Flux[1]), &(Gus_TRG1_HEPE_Flux[0]), (Gd_TRG_MAX - 1) * 2); memcpy( &(Gus_TRG1_HEPE_FluxH[1]), &(Gus_TRG1_HEPE_FluxH[0]), (Gd_TRG_MAX - 1) * 2); // memcpy( &(Gus_TRG1_HEPI_Flux[1]), &(Gus_TRG1_HEPI_Flux[0]), (Gd_TRG_MAX - 1) * 2); // memcpy( &(Gc_TRG1_ENA [1]), &(Gc_TRG1_ENA [0]), (Gd_TRG_MAX - 1)); // memcpy( &(Gus_TRG1_Score [1]), &(Gus_TRG1_Score [0]), (Gd_TRG_MAX - 1) * 2); if ( Guc_dpuRdn==0) memcpy( &(Gus_TRG2_Score[1]), &(Gus_TRG2_Score [0]), (Gd_TRG_MAX - 1) * 2); // ---- Trigger Buffer reset app_TRG_reset( 0, 0 ); // Gus_TRG1_Score [0] = Gus_TRG2_Score [0] = 0xFFFF; Gui_TRG1_Cnt ++; Gui_TRG1_SpTI [0] = ui_tiSunpulse2; // **** TI at Sun Pulse (LSB:31.25msec) Gui_TRG1_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 = app03_DPU1_sync(); return; } // *********************************** // *** app03_DPU1_sync *** // *********************************** int app03_DPU1_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( G03uc_packet, 0, Gd_TRG_DPU2_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; // TOTAL:40B x 32 + 9 = 1289B <<< // memcpy( &(Gs_TRG2_MGFI_Bx [0]), &(G03uc_packet[i_num]), 32 * 2); i_num += 32*2; // 2B MGFI 8B memcpy( &(Gs_TRG2_MGFI_By [0]), &(G03uc_packet[i_num]), 32 * 2); i_num += 32*2; // 2B memcpy( &(Gs_TRG2_MGFI_Bz [0]), &(G03uc_packet[i_num]), 32 * 2); i_num += 32*2; // 2B memcpy( &(Gus_TRG2_MGFI_Brms[0]), &(G03uc_packet[i_num]), 32 * 2); i_num += 32*2; // 2B // memcpy( &(Gs_TRG2_EFD_Pot [0]), &(G03uc_packet[i_num]), 32 * 2); i_num += 32*2; // 2B EFD 6B memcpy( &(Gus_TRG2_EFD_E [0]), &(G03uc_packet[i_num]), 32 * 2); i_num += 32*2; // 2B memcpy( &(Gus_TRG2_EFD_Erms [0]), &(G03uc_packet[i_num]), 32 * 2); i_num += 32*2; // 2B // memcpy( &(Guc_TRG2_EWO_Esp [0][0]), &(G03uc_packet[i_num]), 32 * 8); i_num += 32*8; // 8B EWO 16B memcpy( &(Guc_TRG2_EWO_Bsp [0][0]), &(G03uc_packet[i_num]), 32 * 8); i_num += 32*8; // 8B // memcpy( &(Guc_TRG2_SOR_N [0]), &(G03uc_packet[i_num]), 32 ); i_num += 32; // 2B SOR 4B memcpy( &(Guc_TRG2_SOR_T [0]), &(G03uc_packet[i_num]), 32 ); i_num += 32; // 2B // // memcpy( &(Gui_TRG2_SpTI [0]), &(G03uc_packet[i_num]), 32 * 4); i_num += 32*4; // 4B memcpy( &(Gui_TRG2_SpTI_s [0]), &(G03uc_packet[i_num]), 32 * 4); i_num += 32*4; // 4B // uc_TLMh_storeId = G03uc_packet[i_num]; i_num += 1; // 1B uc_TLMh_DrNum = G03uc_packet[i_num]; i_num += 1; // 1B memcpy( &us_TLMh_TIstart, &(G03uc_packet[i_num]), 2); i_num += 2; // 2B memcpy( &us_TLMh_TIlength, &(G03uc_packet[i_num]), 2); i_num += 2; // 2B memcpy( &(Gui_TRG2_Cnt), &(G03uc_packet[i_num]), 4); i_num += 4; // 4B uc_DrEmpty = G13uc_packet[i_num]; // 1B // --- Non-Sync --- if ( Gui_TRG2_SpTI_s[Gd_TRG_CALC] == 0xFFFFFFFF || Gui_TRG2_SpTI_s[Gd_TRG_CALC] == 0x00000000 ) { app_TRG_reset( 1, 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 **** // ******************* // --- Triger set --- if (Guc_dpuNo==0) { app_TRG_cntl( uc_TLMh_DrNum, uc_DrEmpty, uc_TLMh_storeId, us_TLMh_TIstart, us_TLMh_TIlength ); } return(0); } // =========================================================================== // app03_putDPU1 // [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 app03_putDPU1( 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( 3, // [INPUT] APP-NUM = 3 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; }