/****************************************3*************************************** * モジュール名称 :アプリケーション05 - Background Task * * モジュールラベル :dpu_app05 * * タスク区分 :アプリケーションタスク * * 機能 : * * コーリングシーケンス:void dpu_app05(int mode) * * 引数 :int mode 冗長機能ON/OFF (0:OFF/1:ON) * * 戻り値 :void * * 使用上の注意 :なし * * エラー処理 :なし * * 作成日・作成者 :2014/9/22 Y.K. * *******************************************************************************/ #include "dpu_api.h" #include "dpu_api_proto.h" #include "app_core.h" // ***Prototype: local*** int app05_TlmDump ( unsigned char, unsigned char, unsigned char, unsigned int, unsigned int, unsigned char); void app05_DPU ( unsigned int, unsigned short, unsigned char, int, unsigned int ); // start-TI, end-TI, DR-ID, busy-headID, TI-dumpStart // #ifdef _APP_DMY_ int app05_H_Dummy ( void ); // ***TMP!!*** #endif // _APP_DMY_ void dpu_app05(int mode) { int i_flag, i_flag1; unsigned int ui_TI; // TI unsigned short us_TIlen; // TI unsigned int ui_load; // msec M_T_TIME_INFO t_timeInfo; // unsigned int ui_currentTime; :衛星時刻(1LSB=1.953ms) int i; // ************ // *** MAIN *** // ************ dpu_waitProcessingSlot(32); for (;;) { // *** WAIT *** app_WhoWhere( 6, Gd_N_COM, 0x01 ); dpu_waitProcessingSlot(8); // 1 sec // ************* // *** START *** // ************* app_WhoWhere( 6, Gd_N_COM, 0x02 ); app_START( 6, &ui_load ); // *** CMD-buffer clear (for BroadCast) *** app_WhoWhere( 6, Gd_N_COM, 0x03 ); dpu_getCommand( Guc_cmdDummy, &i_flag); // *** TlmH Flag Check *** app_WhoWhere( 6, Gd_N_COM, 0x04 ); Guc_TLMh_enadis[ Gd_N_DPU1 ] = Guc_TLMh_enadis[ Gd_N_DPU2 ] = Guc_TLMh_enadis[ Gd_N_ENA ] = Guc_TLMh_enadis[ Gd_N_MDM ] = Guc_TLMh_enadis[ Gd_N_MSAS ] = 0; // ********************** // *** DUMP!: non-EWO *** // ********************** i_flag = 0; for (i=Gd_N_MEA1; i<=Gd_N_MGFI; i++) if (i!=Gd_N_ENA) i_flag += Guc_TLMh_enadis[ i ]; if (i_flag) { for (ui_TI = Gui_TLMh_TIstart[0]; ui_TI <= Gui_TLMh_TIstart[0] + Gus_TLMh_TIlen[0]; ui_TI += 30*32 ) { i_flag = 0; for (i=Gd_N_MEA1; i<=Gd_N_MGFI; i++) if (i!=Gd_N_ENA) i_flag += Guc_TLMh_enadis[ i ]; if (i_flag==0) break; if (ui_TI>0) { us_TIlen = 30*32; if ( Gus_TLMh_TIlen[0] < 2 ) us_TIlen = Gus_TLMh_TIlen[0]; else if ( ui_TI + us_TIlen > Gui_TLMh_TIstart[0] + Gus_TLMh_TIlen[0]) us_TIlen = Gui_TLMh_TIstart[0] + Gus_TLMh_TIlen[0] - ui_TI; } else { ui_TI = 0xFFFFFFFF; us_TIlen = Gus_TLMh_TIlen[0]; } for (i=Gd_N_MEA1; i<=Gd_N_MGFI; i++) { if ( Guc_TLMh_enadis[i] ) { app_WhoWhere( 6, i, 0x00 ); // ---FLAG up--- i_flag = dpu_getTime( &t_timeInfo ); Gui_TLMh_TIdump_start0[0] = t_timeInfo.ui_currentTime2; Gui_TLMh_TIdump_end0 [0] = 0xFFFFFFFF; Guc_TLMh_DrWrite[ Guc_TLMh_drID[0] ] = 1; i_flag1 = Gi_TLMh_BusyHeadId[0]; Gi_TLMh_BusyHeadId[0] = i; // ---DUMP--- i_flag = 0; if (Guc_dpuNo==0 || Guc_dpuRdn==2) { // *** RDN: OK if (i==Gd_N_MEA1) { i_flag = app05_MEA1 ( ui_TI, (unsigned int)us_TIlen, Guc_TLMh_drID[0] ); } else if (i==Gd_N_MEA2) { i_flag = app05_MEA2 ( ui_TI, (unsigned int)us_TIlen, Guc_TLMh_drID[0] ); } else if (i==Gd_N_MIA ) { i_flag = app05_MIA ( ui_TI, (unsigned int)us_TIlen, Guc_TLMh_drID[0] ); } else if (i==Gd_N_MSA ) { i_flag = app05_MSA ( ui_TI, (unsigned int)us_TIlen, Guc_TLMh_drID[0] ); } else if (i==Gd_N_HEPE) { i_flag = app05_HEPE ( ui_TI, (unsigned int)us_TIlen, Guc_TLMh_drID[0] ); } else if (i==Gd_N_HEPI) { i_flag = app05_HEPI ( ui_TI, (unsigned int)us_TIlen, Guc_TLMh_drID[0] ); } else if (i==Gd_N_MGFO) { i_flag = app05_MGFO ( ui_TI, (unsigned int)us_TIlen, Guc_TLMh_drID[0] ); } } if (Guc_dpuNo==1 || Guc_dpuRdn==2) { // *** RDN: OK if (i==Gd_N_MGFI) { i_flag = app05_MGFI ( ui_TI, (unsigned int)us_TIlen, Guc_TLMh_drID[0] ); } } if (i_flag) { app05_DPU ( ui_TI, us_TIlen, Guc_TLMh_drID[0], i, t_timeInfo.ui_currentTime2 ); } else { Gi_TLMh_BusyHeadId[0] = i_flag1; } // ---FLAG down--- i_flag = dpu_getTime( &t_timeInfo ); Gui_TLMh_TIdump_end0[0] = t_timeInfo.ui_currentTime2; Guc_TLMh_DrWrite[ Guc_TLMh_drID[0] ] = 0; } } } dpu_waitProcessingSlot(40); // 5 sec for (i=Gd_N_MEA1; i<=Gd_N_MGFI; i++) { if ( Guc_TLMh_enadis[ i ] ) { app01_BufChange( i, 0 ); Guc_TLMh_enadis[ i ] = 0; } } } // ****************** // *** DUMP!: EWO *** // ****************** i_flag = 0; for (i=0; i<=2; i++) i_flag += Guc_TLMh_enadis[ i ]; i_flag += Guc_TLMh_enadis[ Gd_N_EWO ]; if (i_flag) { for (ui_TI = Gui_TLMh_TIstart[1]; ui_TI <= Gui_TLMh_TIstart[1] + Gus_TLMh_TIlen[1]; ui_TI += 30*32 ) { i_flag = 0; for (i=0; i<=2; i++) i_flag += Guc_TLMh_enadis[ i ]; i_flag += Guc_TLMh_enadis[ Gd_N_EWO ]; if (i_flag==0) break; if (ui_TI>0) { us_TIlen = 30*32; if ( Gus_TLMh_TIlen[1] < 2 ) us_TIlen = Gus_TLMh_TIlen[1]; else if ( ui_TI + us_TIlen > Gui_TLMh_TIstart[1] + Gus_TLMh_TIlen[1]) us_TIlen = Gui_TLMh_TIstart[1] + Gus_TLMh_TIlen[1] - ui_TI; } else { ui_TI = 0xFFFFFFFF; us_TIlen = Gus_TLMh_TIlen[1]; } for (i=0; i<0x11; i++) { if ( Guc_TLMh_enadis[i] ) { app_WhoWhere( 6, i, 0x00 ); // ---FLAG up--- i_flag = dpu_getTime( &t_timeInfo ); Gui_TLMh_TIdump_start0[1] = t_timeInfo.ui_currentTime2; Gui_TLMh_TIdump_end0 [1] = 0xFFFFFFFF; Guc_TLMh_DrWrite[ Guc_TLMh_drID[1] ] = 1; i_flag1 = Gi_TLMh_BusyHeadId[1]; Gi_TLMh_BusyHeadId[1] = i; // ---DUMP--- i_flag = 0; if (Guc_dpuNo==1 || Guc_dpuRdn==2) { // *** RDN: OK if (i==Gd_N_EFD ) { i_flag = app05_EFD ( ui_TI+4*32, (unsigned int)us_TIlen, Guc_TLMh_drID[1] ); } if (i==Gd_N_EWOB) { i_flag = app05_EWOB ( ui_TI, (unsigned int)us_TIlen, Guc_TLMh_drID[1] ); } if (i==Gd_N_EWOE) { i_flag = app05_EWOE ( ui_TI, (unsigned int)us_TIlen, Guc_TLMh_drID[1] ); } } if (i_flag) { app05_DPU ( ui_TI, us_TIlen, Guc_TLMh_drID[1], i, t_timeInfo.ui_currentTime2 ); } else { Gi_TLMh_BusyHeadId[1] = i_flag1; } // ---FLAG down--- i_flag = dpu_getTime( &t_timeInfo ); Gui_TLMh_TIdump_end0[1] = t_timeInfo.ui_currentTime2; Guc_TLMh_DrWrite[ Guc_TLMh_drID[1] ] = 0; } } } for (i=0; i<0x3; i++) Guc_TLMh_enadis[i] = 0; Guc_TLMh_enadis[Gd_N_EWOE] = 0; dpu_waitProcessingSlot(40); // 8 sec app01_BufChange( Gd_N_EWO, 0 ); // back to LONG BUFFER } #ifdef _APP_DMY_ // --- DUMMY:H --- if ( Guc_Spec_Code & 0x08 ) { app_WhoWhere( 6, Gd_N_COM, 0x10 ); app05_H_Dummy(); } #endif // _APP_DMY_ // *** APP STATUS *** app_WhoWhere( 6, Gd_N_COM, 0x0F ); app_END( 6, &ui_load ); } // ************ // *** EXIT *** // ************ dpu_WDTEna(0); // WDT: DIS dpu_appStop(); // *** End *** } // ********************************************** // **** DPU DUMP: Trigger Information Dump **** // ********************************************** void app05_DPU ( unsigned int ui_TIstart, // [INPUT] Block-TI - Dump Start (0xFFFFFFFF: NEWEST) unsigned short us_TIlen, // [INPUT] Block-TI - Dump End (0x0000000: 1 Packet 0x00000001: 1 Block 0xFFFFFFFF: All) unsigned char uc_drID, // [INPUT] DR ID 0:CAL etc 1-5:Sync Trigger int i_BusyHeadId, // [INPUT] Head ID of Busy Task unsigned int ui_TIdump ) // [INPUT] TI at Dump start (32msec) { int i_flag; unsigned char uc_headId = Guc_dpuNo + Gd_N_DPU1; M_T_TIME_INFO t_timeInfo; // unsigned int ui_currentTime; :衛星時刻(1LSB=1.953ms) // unsigned int ui_currentTime2; :衛星時刻(1LSB=31.25ms) // unsigned int ui_sunpulseTime; :SUNPULSE 受信時刻(1LSB=1.953ms) while (1) { i_flag = dpu_getTime( &t_timeInfo ); if ( t_timeInfo.ui_currentTime2 < ui_TIdump + 160 ) dpu_waitProcessingSlot(8); // 1 sec else break; } // ------------ // Format // [HEADER] CCSDS 0D 19 C0 00 00 21 00 02 6C E5 5A 06 D1 00 // [DATA ] FM-Header 18 0C 00 26 CE 52 00 00 00 10 // FM-STORE 0C 02 00 02 6A B1 02 20 00 02 6C D9 00 02 6C E5 // B0 Header ID 0C // B1 Dr ID 02 // B2-5 TI_data 00 02 6A B1 // B6-7 TI_len 02 20 // B8-11 TI_dump_start 00 02 6C D9 // B12-15 TI_dump_end 00 02 6C E5 // ------------ G5uc_data[0] = i_BusyHeadId; G5uc_data[1] = uc_drID; memcpy( &(G5uc_data[ 2]), &(ui_TIstart), 4 ); G5uc_data[6] = (us_TIlen >> 8) & 0xFF; G5uc_data[7] = us_TIlen & 0xFF; memcpy( &(G5uc_data[ 8]), &(ui_TIdump), 4 ); memcpy( &(G5uc_data[12]), &(t_timeInfo.ui_currentTime2), 4 ); // --- HK --- Guc_TLMh_DrEmpty[ uc_drID ] = 1; Gi_TLMh_BusyHeadId [2] = i_BusyHeadId; Guc_TLMh_drID [2] = uc_drID; Gui_TLMh_TIstart [2] = ui_TIstart; Gus_TLMh_TIlen [2] = us_TIlen; Gui_TLMh_TIdump_start0[2] = ui_TIdump; Gui_TLMh_TIdump_end0 [2] = t_timeInfo.ui_currentTime2; // --- DUMP --- i_flag = app_PutTlm( 5, // [INPUT] APP-NUM = 5 uc_headId, // [INPUT] Node-ID 0, // [INPUT] Data-ID uc_headId, // [INPUT] Header-ID (for PID-ID, CAT-ID setting) 4, // [INPUT] DR-ID (for CAT-ID) [0:HK 1:OS 2:L 3:M 4-9:H(0-5)] Guc_TLMh_cmp[uc_headId]*2, // [INPUT] Comp mode [0:non 1:JPEG-rev 2:JPEG-nonrev 3:After-User-COMP] i_BusyHeadId, // [INPUT] Packet ID <<<< USER-DEF: 0x00- 0xFF >>>> t_timeInfo.ui_currentTime, // [INPUT] Data TI <<<< USER-DEF: 0x00000000-0xFFFFFFFF >>>> Guc_cmdDummy, // [INPUT] Comment <<<< USER-DEF: <128B >>>> 0, // [INPUT] Comment - Size <<<< USER-DEF: <128B >>>> G5uc_data, // [INPUT] Data <<<< USER-DEF: <0x1E00 >>>> 16); // [INPUT] Data - Size <<<< USER-DEF: <0x1E00 >>>> return; } // ******************** // **** TLM DUMP **** // ******************** int app05_TlmDump( unsigned char uc_nodeId, // [INPUT] Node-ID unsigned char uc_dataId, // [INPUT] Data-ID unsigned char uc_headId, // [INPUT] Head-ID unsigned int ui_TIstart, // [INPUT] TI - Dump Start (0xFFFFFFFF:LATEST) unsigned int ui_TIlen, // [INPUT] TI - Dump Length (0x0000: 1 Packet 0x0001: 1 Block 0xFFFF: All) unsigned char uc_drID) // [INPUT] DR ID 0:CAL etc 1-5:Sync Trigger { int i_DataAvailable = 0; // === BLOCK read === int i_numNewBlock; // Num of blocks with new data M_T_BLOCK_INFO t_blockInfo; // unsigned int ui_createTime Block 生成開始時衛星時刻(1LSB=31,25ms) // int i_replyNum Block 登録Read-Reply個数 // char c_invalidFlg Block 内データ異常 [0:異常なし 1:異常あり] // unsigned int ui_blockIndex LongBuffer/ShortBuffer 内Block特定番号 (先頭Block:0) int i_numPac; int i_headerLen, i_dataSize; int i, j; int i_flag; unsigned int ui_TIend; unsigned int ui_TI, ui_TIsun; //, ui; // ------------------------------------------------- // -- Set at the LONG buffer with the aimed block -- // ------------------------------------------------- i_numNewBlock = app_SetTlmHBlock( uc_nodeId, uc_dataId, // [INPUT] Node/Data ID ui_TIstart, // [INPUT] TI of Start Block [0xFFFFFFFF: NEWEST] &t_blockInfo); // [OUTPUT] Block Info *** // (return) >0:Num of blocks, <=0:No data (error) *** if ( i_numNewBlock < 1 ) return(i_DataAvailable); // No data // TI-END if ( ui_TIlen == 0 || ui_TIlen == 1 ) ui_TIend = t_blockInfo.ui_createTime + 1; // 1 Packet or 1 Block else { if ( ui_TIstart == 0xFFFFFFFF ) ui_TIend = t_blockInfo.ui_createTime + ui_TIlen; // from LATEST else ui_TIend = ui_TIstart + ui_TIlen; } // --------------------- // -- Read Block data -- // --------------------- i_numPac = Gi_SizeBlk[uc_headId] / Gus_SizePac[uc_headId]; // Num of Packets per Block if ( ui_TIlen == 0 || ui_TIlen == 1 ) i_numNewBlock = 1; if ( ui_TIlen == 0 ) i_numPac = 1; for (i=0; i 0 && // Data available t_blockInfo.c_invalidFlg == 0 ) { // Data correct for (j=0; j> 4 ); // 1-spin older } } if ( uc_nodeId == Gd_N_HEPE || uc_nodeId == Gd_N_HEPI ) { if( G5uc_data[12] == 0xFF && G5uc_data[13] == 0xFF && G5uc_data[14] == 0xFF && G5uc_data[15] == 0xFF ) continue; // HEPE/HEPI:no data *** 130219 revised by YK *** } i_flag = app_PutTlm( 5, // [INPUT] APP-NUM = 5 uc_nodeId, // [INPUT] Node-ID uc_dataId, // [INPUT] Data-ID uc_headId, // [INPUT] Header-ID (for PID-ID, CAT-ID setting) 4+uc_drID, // [INPUT] DR-ID (for CAT-ID) [0:HK 1:OS 2:L 3:M 4-9:H(0-5)] Guc_TLMh_cmp[uc_headId], // [INPUT] Comp mode [0:non 1:JPEG-rev 2:JPEG-nonrev 3:After-User-COMP] j & 0xFF, // [INPUT] Packet ID <<<< USER-DEF: 0x00- 0xFF >>>> ui_TI, // [INPUT] Data TI <<<< USER-DEF: 0x00000000-0xFFFFFFFF >>>> (32msec) Guc_cmdDummy, // [INPUT] Comment <<<< USER-DEF: <128B >>>> 0, // [INPUT] Comment - Size <<<< USER-DEF: <128B >>>> &G5uc_data[i_headerLen], // [INPUT] Data <<<< USER-DEF: <0x1E00 >>>> i_dataSize ); // [INPUT] Data - Size <<<< USER-DEF: <0x1E00 >>>> i_DataAvailable = 2; } } // To next block i_flag = app_NextBlock( uc_nodeId, uc_dataId, // [INPUT] Node/Data ID 0, // [INPUT] Buffer ID: 0 = LONG &t_blockInfo); // [OUTPUT] Block Info if ( i_flag ) break; // no data } return( i_DataAvailable ); } #ifdef _APP_DMY_ // ***************** // *** DUMMY-H *** // ***************** int app05_H_Dummy() { int i, j; int i_flag; unsigned char uc_drID, uc_nodeID, uc_dataID, uc_headID; // **** TI **** unsigned int ui_time; M_T_TIME_INFO t_timeInfo; // unsigned int ui_currentTime; :衛星時刻(1LSB=1.953ms) i_flag = dpu_getTime( &t_timeInfo ); ui_time = t_timeInfo.ui_currentTime; // **** Data load (dummy) **** for (i=0; i<1000; i++) G5uc_data[i] = ( (i>>4) & 0xFF ); // **** Data Put (DPU1 -> EWO) **** for (i=Gd_N_DPU1; i<=Gd_N_EWO; i++) { if (Guc_dpuNo==0) { if (i==Gd_N_DPU2 || i==Gd_N_ENA || i>Gd_N_MGFO) continue; } else { if (i!=Gd_N_DPU2 && i!=Gd_N_MGFI && i!=Gd_N_EWO) continue; } uc_nodeID = i; uc_dataID = 0; uc_headID = i; for (uc_drID=0; uc_drID<6; uc_drID++) { for (j=0; j<0x10; j++) { dpu_setWDT( 800 ); i_flag = app_PutTlm( 5, // [INPUT] APP-NUM = 5 uc_nodeID, // [INPUT] Node-ID uc_dataID, // [INPUT] Data-ID uc_headID, // [INPUT] Header-ID (for PID-ID, CAT-ID setting) 4+uc_drID, // [INPUT] DR-ID (for CAT-ID) [0:HK 1:OS 2:L 3:M 4-9:H(0-5)] (j%4), // [INPUT] Comp mode [0:non 1:Arith0 2:Arith1 3:After-User-COMP 4:RICE] j & 0xFF, // [INPUT] Packet ID <<<< USER-DEF: 0x00- 0xFF >>>> ui_time, // [INPUT] Data TI <<<< USER-DEF: 0x00000000-0xFFFFFFFF >>>> (2msec) Guc_cmdDummy, // [INPUT] Comment <<<< USER-DEF: <128B >>>> 0, // [INPUT] Comment - Size <<<< USER-DEF: <128B >>>> G5uc_data, // [INPUT] Data <<<< USER-DEF: <0x1E00 >>>> 1000 ); // [INPUT] Data - Size <<<< USER-DEF: <0x1E00 >>>> } } } // **** Data Put (EFD->EWOB) **** if (Guc_dpuNo==1) { for (i=Gd_D_EFD; i<=Gd_D_EWOB; i++) { uc_nodeID = Gd_N_EWO; uc_dataID = i; uc_headID = i-1; // for (uc_drID=0; uc_drID<6; uc_drID++) { for (j=0; j<0x10; j++) { dpu_setWDT( 800 ); i_flag = app_PutTlm( 5, // [INPUT] APP-NUM = 5 uc_nodeID, // [INPUT] Node-ID uc_dataID, // [INPUT] Data-ID uc_headID, // [INPUT] Header-ID (for PID-ID, CAT-ID setting) 4+uc_drID, // [INPUT] DR-ID (for CAT-ID) [0:HK 1:OS 2:L 3:M 4-9:H(0-5)] (j%4), // [INPUT] Comp mode [0:non 1:Arith0 2:Arith1 3:After-User-COMP 4:RICE] j & 0xFF, // [INPUT] Packet ID <<<< USER-DEF: 0x00- 0xFF >>>> ui_time, // [INPUT] Data TI <<<< USER-DEF: 0x00000000-0xFFFFFFFF >>>> (2msec) Guc_cmdDummy, // [INPUT] Comment <<<< USER-DEF: <128B >>>> 0, // [INPUT] Comment - Size <<<< USER-DEF: <128B >>>> G5uc_data, // [INPUT] Data <<<< USER-DEF: <0x1E00 >>>> 1000 ); // [INPUT] Data - Size <<<< USER-DEF: <0x1E00 >>>> } } } } return(0); } #endif // _APP_DMY_