//2013.11.22 /******************************************************************************* * モジュール名称 :アプリケーション05 - Background Task - MSA * * モジュールラベル :app05_MSA * * タスク区分 :アプリケーションタスク * * 機能 : * * コーリングシーケンス:void app05_MSA * * 戻り値 :void * * 使用上の注意 :なし * * エラー処理 :なし * * 注意 :EDIT権限は、MPPE組 * * 作成日・作成者 :2011/06/09 Y.K. * ********************************************************************************/ #include "app_common.h" #include "app_MPPE-MSA.h" #include "app_MPPE-MIA.h" // ***Prototype: dpu_app05.c*** int app05_MSA_TlmDump( unsigned char, unsigned char, unsigned char, unsigned int, unsigned int, unsigned char); int app05_MSA ( unsigned int ui_TIstart, // [INPUT] TI - Dump Start (0x00000000:OLDEST 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_flag; unsigned char uc_nodeId = Gd_N_MSA; // Node-ID: MSA unsigned char uc_dataId = 0; // Data-ID: MSA unsigned char uc_headId = Gd_N_MSA; // Head-ID: MSA i_flag = app05_MSA_TlmDump( uc_nodeId, // [INPUT] Node-ID uc_dataId, // [INPUT] Data-ID uc_headId, // [INPUT] Head-ID ui_TIstart, // [INPUT] TI - Dump Start (0x00000000:OLDEST 0xFFFFFFFF:LATEST) ui_TIlen, // [INPUT] TI - Dump Length (0x0000: 1 Packet 0x0001: 1 Block 0xFFFF: All) uc_drID); // [INPUT] DR ID (0:CAL etc 1-5:Sync Trigger) return i_flag; } int app05_MSA_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 (0x00000000:OLDEST 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, j; int i_flag = 1; unsigned int ui_TIend, ui_TI; unsigned short us_len = 0; unsigned short us_Hlen = 0; // // === BLOCK read === 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=1,953ms) unsigned char uc_datID; //データID(L:0x10, M:1-5; H: 0) struct _s_MSA_CtrlParam *pCtrl; //制御用のフラグ及びパラメータ struct _s_MSA_Product *pDat; pCtrl = &Gst_MSA_ctrl; pDat = &Gst_MSA_dat; // ------------------------------------------------- // -- 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 [0x0000000: OLDEST 0xFFFFFFFF: NEWEST] &t_blockInfo); // [OUTPUT] Block Info *** // (return) >0:Num of blocks, <=0:No data (error) *** if ( i_numNewBlock < 1 ) return(0); // 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 == 0x00000000 || ui_TIstart == 0xFFFFFFFF ) ui_TIend = t_blockInfo.ui_createTime + ui_TIlen; // from OLDEST or LATEST else ui_TIend = ui_TIstart + ui_TIlen; // from OLDEST or LATEST } // TI-LEN special 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 < 34; ++j) { //64Bのみ取得 i_flag = app_GetPacket( 5, // [INPUT] App-No:5 Gd_N_MSA, 0, // [INPUT] Node/Data ID 0, // [INPUT] Buffer ID (0:LONG) &t_blockInfo, // [INPUT] Block Info j, // [INPUT] Packet No (先頭:0) 0, // [INPUT] OFFSET読出開始番地(8の倍数) 64, // [INPUT] 読出データ数: G5uc_packet ); // [OUTPUT] 1 Block Data - copied if ( i_flag ) continue; //FrameID uc_datID = G5uc_packet[d_Lcl_MSA_DAT_ADRR]; if (uc_datID != 0x00) continue; //H mode以外(ダミーも)スキップ us_len = app03_MSA_GetPcktLen(G5uc_packet + 12); //データ長取得 //短いパケットの場合、パケット全てを読まない if (us_len + 9 + 12 > 64) { i_flag = app_GetPacket( 5, // [INPUT] App-No:5 Gd_N_MSA, 0, // [INPUT] Node/Data ID 0, // [INPUT] Buffer ID (0:LONG) &t_blockInfo, // [INPUT] Block Info j, // [INPUT] Packet No (先頭:0) 0, // [INPUT] OFFSET読出開始番地(8の倍数) d_Lcl_MSA_PAC_SIZE, // [INPUT] 読出データ数: G5uc_packet ); // [OUTPUT] 1 Block Data - copied if ( i_flag ) continue; us_len = app03_MSA_GetPcktLen(G5uc_packet + 12); //データ長取得 } //データ配置 memcpy(G5uc_data + us_Hlen, G5uc_packet + 12, us_len); us_Hlen += us_len; if (us_Hlen > 6600) { memcpy(&ui_TI, G5uc_data, 4); //TI app03_MIA_tlmout(Gd_N_MSA, TRUE, //[INPUT] 圧縮: TRUE(しない) us_Hlen/2, //[INPUT] data長さ US換算 0xfe, //[INPUT] Comment2 0, //[INPUT] Comment3 (unsigned short*)G5uc_data, // [INPUT]プロダクト (unsigned short*)G5uc_data, // [MID] 圧縮後バッファ:未使用 ui_TI, //[INPUT] TI 4+uc_drID); // [INPUT]H-mode data flag //データ長のリセット us_Hlen = 0; } } Gui_TLMh_blockTime[Gd_N_MSA] = t_blockInfo.ui_createTime;// } // To next block i_flag = app_NextBlock( Gd_N_MSA, 0, // [INPUT] Node/Data ID 0, // [INPUT] Buffer ID (LONG) &t_blockInfo); // [OUTPUT] Block Info if ( i_flag ) break; // no data } memcpy(&ui_TI, G5uc_data, 4); //TI app03_MIA_tlmout(Gd_N_MSA, TRUE, //[INPUT] 圧縮: TRUE(しない) us_Hlen/2, //[INPUT] data長さ US換算 0xfe, //[INPUT] Comment2 0, //[INPUT] Comment3 (unsigned short*)G5uc_data, // [INPUT]プロダクト (unsigned short*)G5uc_data, // [MID] 圧縮後バッファ:未使用 ui_TI, //[INPUT] TI 4+uc_drID); // [INPUT]H-mode data flag return 1; }