/******************************************************************************* * モジュール名称 :app14 Mission TLM (L&M) EWO-MDM tasks * * モジュールラベル :app14_PIs * * タスク区分 :Application-14 EWO task for Mission TLM (L&M) * * 機能 : * * コーリングシーケンス:void app14_(PI) * * 引数 :なし * * 戻り値 :なし * * 使用上の注意 :グローバル変数はアプリケーション01でまとめて初期化 * * エラー処理 :なし * * 注意 : EDIT権限は、EWO組 * * 作成日・作成者 :2014/7/16 Y. Kasaba * *******************************************************************************/ #define __APP_WFC_OFA__ #define __APP_WFC_AM2P__ #include "app_core.h" #include "app_EWO.h" #include "dpu_api_proto.h" #ifndef _APP_RDN_ // #define d_pacEwoMdmData_before 2 // -2 packet = +15.6msec // #define d_pacEwoMdmData_after 8 // +8 packet = +62.5msec --> 合計11packet = #define d_RMAPwrite_header 16 // RMAP-Write header: 16B #define d_E_EwoMdmData 0x100 // threshold ---- 15mV/V // 関数プロトタイプ int app14_EWO_MDM_E( unsigned int ); // ---- corrected by YK 111127 ---- // void app14_EWO_putTLM( unsigned int, unsigned int, int, unsigned int, int, unsigned char *, int); // void app14_MDM_EWO_test( int, unsigned int, unsigned short ); // <要確認点 to 井町君> // ・長さ: "before = 2packet" "after = 8packet" でいいか? // --- CMDで制御可能とするか? // ・振幅: 0x100 (15mV/m???) より小さい場合には降ろすのをやめるか? // --- CMDで制御可能とするか? // ・書式: MEFISTO & EWO (EWOEは MEF->EWO 2Bずつ、の順番?)の双方を降ろすか? // "RMAP-Write header 16Bを切り飛ばして、残りを生波形でおろす"でよいか? // Packet IDは? 0xF0 でいいか? // DRは? "H0"とするか? // 波形圧縮は? // --- CMDで制御可能とするか? (2080 x 11 = 22kB程度?) void app14_EWO_MDM() { M_T_TIME_INFO t_timeInfo; unsigned int ui_tmp1; // int i_flag; // ============================================================= // MDM 連携 // ============================================================= if( Guc_MDM_data_priority != 0 ) { // 非動作設定時: MDM flag を非アクティブ if ( G14uc_WFC_MDM_eve_ena == 0 ) { Guc_MDM_data_priority = 0; } // AM2P か CAL が動いている時は,終わるまで待つ else if ( G14uc_AM2P_stage == 0 || G14uc_WFC_CAL_stage == 0 ) { // MDM event dpu_getTime(&t_timeInfo); // 現在時刻の取得 ui_tmp1 = ( t_timeInfo.ui_currentTime - Gui_MDM_data_TI ) >> 4; // 「MDMのtrigger TI」との時間差 (lsb:32msec) if ( ui_tmp1 > 0x280 && ui_tmp1 < 0x1E00 ) { // 上記から「20sec - 4min 経過後」 (lsb:32msec) if ( app14_EWO_MDM_E( Gui_MDM_data_TI + Gus_MDM_data_dt ) ) // Search開始時間を指定 G14uc_WFC_MDM_eve_cnt ++; // イベントカウンタ更新 } Guc_MDM_data_priority = 0; // MDM flag を非アクティブ } } } // ============================================================= // MDM 連携 // ============================================================= int app14_EWO_MDM_E( unsigned int ui_tiMDM ) { M_T_TIME_INFO t_timeInfo; unsigned int ui_TIstart, ui_TIend; 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_numNewBlock; // Num of blocks with new data int i, j, k=0; int i_flag; unsigned int ui_dataTi_pwi; unsigned short us_dataDt; unsigned short us_dataSize; // === Search start TI === dpu_getTime( &t_timeInfo ); // 現在時刻の取得 ui_TIstart = ( t_timeInfo.ui_currentTime - ui_tiMDM ) >> 4; // 「MDMのtrigger TI」との時間差 (lsb:32msec) ui_TIstart = t_timeInfo.ui_currentTime2 - ui_TIstart - 0x200; // Search開始時間: -16sec Block-TI: 中のデータはもっと古い。 ui_TIend = ui_TIstart + 0x600; // 終了時間: +32sec Block-TI: 中のデータはもっと古い。 // ------------------------------------------------- // -- Set at the LONG buffer with the aimed block -- // ------------------------------------------------- i_numNewBlock = app_SetTlmHBlock( Gd_N_EWO, 0, // [INPUT] Node/Data ID ui_TIstart, // [INPUT] TI of Start Block [0x0000000: OLDEST 0xFFFFFFFF: NEWEST] &t_blockInfo); // [OUTPUT] Block Info *** // (return) >0:Num of blocks, <=0:No data (error) *** if ( i_numNewBlock < 1 ) return(k); // No data // --------------------- // -- Read Block data -- // --------------------- for (i=0; i ui_TIend ) return(k); // END if ( t_blockInfo.i_replyNum > 0 && // Data available t_blockInfo.c_invalidFlg == 0 ) { // Data correct for (j=0; j> 4); // --- PAC-NUM calculation: 1packet: TI=4 step --- if ( ui_dataTi_pwi > ui_tiMDM + Guc_EwoMdmData_after *4 ) return(k); // Time over: finish (2x4/512 = 1/64sec) if ( ui_dataTi_pwi < ui_tiMDM - 5120 ) break; // Time before: "MDM-time - 10sec" [next block] if ( ui_dataTi_pwi < ui_tiMDM - Guc_EwoMdmData_before *4 ) continue; // Time before: MDM-time (8x4/512 = 1/16sec) [next packet] // **************************** // **** Packet read **** // **************************** i_flag = app_GetPacket( 14, // [INPUT] App-No: 3 Gd_N_EWO, 0, // [INPUT] EWO-EFD 0, // [INPUT] Buffer ID = 0 (LONG) &t_blockInfo, // [INPUT] Block Info j, // [INPUT] Packet Num = 0(先頭) d_RMAPwrite_header, // [INPUT] Offset(8の倍数) = 0(先頭) Gus_SizePac[Gd_N_EWOE], // [INPUT] 読出サイズ = Packetサイズ G14uc_packet ); // [OUTPUT] 1 Block Data - copied if ( i_flag ) break; // ---- to next block ---- memcpy( &us_dataSize, &(G14uc_packet[8]), 2); // B8-9: DATA SIZE if ( us_dataSize > Gd_dataPacLen) continue; // **** Packet dump **** i_flag = app_PutTlm( 14, // [INPUT] APP-NUM = 14 Gd_N_EWO, // [INPUT] Node-ID 0, // [INPUT] Data-ID Gd_N_EWOE, // [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_TLMm_cmp[Gd_N_EWOE], // [INPUT] Comp mode [0:non 1:JPEG-rev 2:Math 3-7:After-User-COMP] 0xF0 + k, // [INPUT] Packet ID <<<< 0xF0 >>>> ui_tiMDM, // [INPUT] Data TI <<<< USER-DEF: 0x00000000-0xFFFFFFFF >>>> Guc_cmdDummy, // [INPUT] Comment <<<< USER-DEF: <128B >>>> 0, // [INPUT] Comment - Size <<<< USER-DEF: <128B >>>> G14uc_packet, // [INPUT] Data <<<< USER-DEF: <0x1E00 >>>> // RMAP-header: skipped 10+us_dataSize); // [INPUT] Data - Size EWO-Header(10B) + us_dataSize k++; } } // To next block i_flag = app_NextBlock( Gd_N_EWO, 0, // [INPUT] Node/Data ID 0, // [INPUT] Buffer ID: 0 = LONG &t_blockInfo); // [OUTPUT] Block Info if ( i_flag ) break; // no data } return(k); } #endif // _APP_RDN_