/******************************************************************************* * モジュール名称 :APP13 Mission TLM (L&M) MDM tasks * * モジュールラベル :app13_MDM * * タスク区分 :Application-13 MDM task for Mission TLM (L) * * 機能 : * * コーリングシーケンス:void app13_MDM * * 引数 :なし * * 戻り値 :なし * * 使用上の注意 :グローバル変数はアプリケーション01でまとめて初期化 * * エラー処理 :なし * * 注意 : EDIT権限は、MDM(core)組 * * 作成日・作成者 :2012/1/2 Y.K. * *******************************************************************************/ #include "app_common.h" // *** MDM: local*** #define d_MDM_pacSize 120 // MDM Packet size // *** Local Macro *** //void app13_MDM_putTLM ( int, unsigned int, unsigned char *, int); // *** APP13 Common Grobal Variable (in app_common.h & app_common_variable.c) *** //#define d_dataRawLen 0x40000 //#define d_dataPacLen 0x2000 //extern unsigned char G13uc_data [d_dataRawLen]; // for RAW data: 262.11 kB [EWO:80packet, Others:more than 1Block] //extern unsigned char G13uc_packet[d_dataPacLen]; // for Packet data: 8kB - max [Packet size to DMC: 1kB-max] void app13_MDM( unsigned int ui_sunpulseCnt ) { int i; int i_flag; // === BLOCK read === int i_bufId; // Buffer ID int i_numNewBlock; // Num of blocks with new data unsigned int ui_timeData; // Processing data TI 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) // === MDM data output === int i_pacId; // ----------------------------------------------------------- // -- Set at the buffer with the oldest non-processed block -- // ----------------------------------------------------------- i_bufId = app_CheckNonProcBlock ( Gd_N_MDM, 0, // [INPUT] NodeID = Gd_N_MDM, Data ID = 0 Gui_TLMm_blockTime[Gd_N_MDM], // [INPUT] TI of Processed Block & ui_timeData); // [OUTPUT] TI of Newest Block in the selected buffer // (return) Buffer-ID (0:L, 1:S, -1:no data) if ( i_bufId < 0 ) return; // === No data === // ------------------------------------------- // -- Set at the oldest non-processed block -- // ------------------------------------------- // Newest Block i_numNewBlock = app_SetNonProcBlock( Gd_N_MDM, 0, // [INPUT] NodeID = Gd_N_MDM, Data ID = 0 i_bufId, // [INPUT] Buffer ID (0:L, 1:S) Gui_TLMm_blockTime[Gd_N_MDM], // [INPUT] TI of Processed Block &t_blockInfo); // [OUTPUT] Block Info // (return) >0:Num of blocks, <=0:No data (error) if ( i_numNewBlock < 1 ) { Gui_TLMm_blockTime[Gd_N_MDM] = ui_timeData; // === shift to newest data for SKIP === return; } // --------------------- // -- Read Block data -- // --------------------- for (i=0; i Gui_TLMm_blockTime[Gd_N_MDM] && // NEW data t_blockInfo.i_replyNum > 0 && // Data available t_blockInfo.c_invalidFlg == 0 && // Data correct i == i_numNewBlock-1 ) { // latest 2 packets [Max-packet production: 1 in 1-spin] // **************************** // **** Packet header read **** // **************************** // RMAP-read-header 12B // Contents ?B i_flag = app_GetBlock( 13, // [INPUT] App-No:13 Gd_N_MDM, 0, // [INPUT] NodeID = Gd_N_MDM, Data ID = 0 i_bufId, // [INPUT] Buffer ID &t_blockInfo, // [INPUT] Block Info G13uc_data ); // [OUTPUT] 1 Block Data - copied if ( i_flag ) continue; Gui_TLMm_blockTime[Gd_N_MDM] = t_blockInfo.ui_createTime; // !!! Successfuly Processed !!! // *********************** // **** Packet decode **** // *********************** // [RMAP-READ-HEADER - offset: 12B] // TI 12+ 0-3 サンパルスでのラッチデータ。更新周期4secごと memcpy( &Gui_MDM_data_TI, &(G13uc_data[12]), 4); if (Gui_MDM_data_TI != 0xFFFFFFFF) { // Status1 12+ 12 B3 CAL 1:ENA 0:DIS if ( G13uc_data[24] & 0x08 ) i_pacId = 0x40; // CAL: FMでは "event" とみなさない。 else i_pacId = 0x00; // Priority 12+ 10 ノイズorイベントのフラグ、及び波高値 * // B7(MSB) 1:event 0:noise // B6-B0 Peak if ( G13uc_data[22] & 0x80 ) { if ( i_pacId == 0) { // non-CAL時のみ「FMではeventとみなす」 memcpy( &Gus_MDM_data_dt, &(G13uc_data[16]), 2); // *** Triggered TI for EWO: "1-spin delay"後 Guc_MDM_data_priority = 0x80; } i_pacId |= 0x80; } // ***************** // **** Put TLM **** // ***************** // msec 12+ 4-5 1msec-CLKカウンター(16bit) if ( i == i_numNewBlock-1 ) { // TLM-packet formation memcpy( &(Guc_MDM_data[d_MDM_pacSize * Gi_MDM_numPacket]), &(G13uc_data[12]), d_MDM_pacSize ); Gi_MDM_numPacket ++; if ( ( i_bufId == 1 ) || // Short-packet ( Gi_MDM_numPacket >= 8 ) || // 8-packet蓄積 ( Guc_HK_link[Gd_N_MDM ] == 0 ) ) { // MDM = OFF i_pacId |= Gi_MDM_numPacket; /* app13_MDM_putTLM ( i_pacId, // [INPUT] PacID Gui_MDM_data_TI, // [INPUT] TI (lsb:1.953msec) Guc_MDM_data, // [INPUT] MDM data packet d_MDM_pacSize * Gi_MDM_numPacket); // [INPUT] Packet size */ i_flag = app_PutTlm( 13, // [INPUT] APP-NUM = 13 Gd_N_MDM, // [INPUT] Node-ID 0, // [INPUT] Data-ID Gd_N_MDM, // [INPUT] Header-ID (for PID-ID, CAT-ID setting) 2, // [INPUT] DR-ID (for CAT-ID) [0:HK 1:OS 2:L 3:M 4-9:H(0-5)] Guc_TLMm_cmp[Gd_N_MDM], // [INPUT] Comp mode [0:non 1:JPEG-rev 2:Math 3-7:After-User-COMP] i_pacId, // [INPUT] Packet ID <<<< USER-DEF: 0x00- 0xFF >>>> Gui_MDM_data_TI, // [INPUT] Data TI <<<< USER-DEF: 0x00000000-0xFFFFFFFF >>>> Guc_cmdDummy, // [INPUT] Comment <<<< USER-DEF: <128B >>>> 0, // [INPUT] Comment - Size <<<< USER-DEF: <128B >>>> Guc_MDM_data, // [INPUT] Data <<<< USER-DEF: <0x1E00 >>>> d_MDM_pacSize * Gi_MDM_numPacket); // [INPUT] Data - Size <<<< USER-DEF: <0x1E00 >>>> Gi_MDM_numPacket = 0; } } } } // To next block i_flag = app_NextBlock( Gd_N_MDM, 0, // [INPUT] NodeID = Gd_N_MDM, Data ID = 0 i_bufId, // [INPUT] Buffer ID &t_blockInfo); // [OUTPUT] Block Info if ( i_flag ) break; // no data } return; } /* // =========================================================================== // app13_MDM_putTLM // [INPUT] int i_pacId Packet Num (0x00-0x1F) // unsigned int ui_dataTi Header: TI // unsigned char uc_data[] Data // int i_dataSize Data Size // =========================================================================== void app13_MDM_putTLM( int i_pacId, // [INPUT] Packet ID unsigned int ui_dataTi, // [INPUT] TI unsigned char uc_data[], // [INPUT] Data int i_dataSize) // [INPUT] Data Size (Byte) { int i_flag; i_flag = app_PutTlm( 13, // [INPUT] APP-NUM = 13 Gd_N_MDM, // [INPUT] Node-ID 0, // [INPUT] Data-ID Gd_N_MDM, // [INPUT] Header-ID (for PID-ID, CAT-ID setting) 2, // [INPUT] DR-ID (for CAT-ID) [0:HK 1:OS 2:L 3:M 4-9:H(0-5)] Guc_TLMm_cmp[Gd_N_MDM], // [INPUT] Comp mode [0:non 1:JPEG-rev 2:Math 3-7:After-User-COMP] i_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; } */