//2013.11.22 /******************************************************************************* * モジュール名称 :アプリケーション05 - Background Task - MIA * * モジュールラベル :app05_MIA * * タスク区分 :アプリケーションタスク * * 機能 : * * コーリングシーケンス:void app05_MIA * * 戻り値 :void * * 使用上の注意 :なし * * エラー処理 :なし * * 注意 :EDIT権限は、MPPE組 * * 作成日・作成者 :2011/06/09 Y.K. * ********************************************************************************/ #include "app_common.h" #include "app_MPPE-MIA.h" int app05_MIA_TlmDump( unsigned char, unsigned char, unsigned char, unsigned int, unsigned int, unsigned char); char app05_MIA_makeH(unsigned short*); //char app05_MIA_makeH0(unsigned char*, unsigned char*); int app05_MIA ( 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_MIA; // Node-ID: MIA unsigned char uc_dataId = 0; // Data-ID: MIA unsigned char uc_headId = Gd_N_MIA; // Head-ID: MIA i_flag = app05_MIA_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; //1: Ok; 0: No data } int app05_MIA_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 { // === 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_sizeBlk, i_sizePac, i_numPac; int i, j, n; int i_flag; unsigned int ui_TIend; unsigned char uc_modeNo, uc_segNo, uc_segNoEnd; unsigned char uc_find_pac0; unsigned char *puc_dat; unsigned short *pus_dat; unsigned short *pus_dat_cur; unsigned short us_dlen[8]; unsigned char us_Hnum = 0; unsigned short us_Hlen = 0; struct _s_MIA_CtrlParam *pCtrl; //制御用のフラグ及びパラメータ struct _s_MIA_Product *pDat; //プロダクト pCtrl = &Gst_MIA_ctrl; pDat = &Gst_MIA_dat; // このままプロダクトに使うためHK領域を空ける puc_dat = G5uc_data + d_Lcl_MIA_HK2B*2; pus_dat = (unsigned short*)puc_dat; uc_find_pac0 = FALSE; //先頭検出フラグの初期化 uc_modeNo=0; uc_segNo =0; uc_segNoEnd =0; for (i = 0; i < 8; ++i) us_dlen[i] = 2176; us_dlen[0] += d_Lcl_MIA_HK2B; // ------------------------------------------------- // -- 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 < 25; j++) { //先にMISSIONヘッダのみ読み込み、ダミーパケットの場合はスキップ i_flag = app_GetPacket( 5, // [INPUT] App-No:5 Gd_N_MIA, uc_dataId, // [INPUT] NodeID = Gd_N_MIA, Data ID = 0 0, // [INPUT] Buffer ID (LONG) &t_blockInfo, // [INPUT] Block Info j, // [INPUT] Packet No (先頭:0) 0, // [INPUT] OFFSET読出開始番地(8の倍数) 32, // [INPUT] 読出データ数: G5uc_packet); // [OUTPUT] 1 Block Data - copied if ( i_flag ) continue; uc_segNo = G5uc_packet[d_Lcl_MIA_SGN_ADRR];//セグメント番号がダミーを示した場合はスキップ if (uc_segNo == 0xff || uc_segNo > 0x0f) continue; //パケット全てを読み込み i_flag = app_GetPacket( 5, // [INPUT] App-No:5 uc_nodeId, uc_dataId, // [INPUT] Node/Data ID 0, // [INPUT] Buffer ID = 0 (LONG) &t_blockInfo, // [INPUT] Block Info j, // [INPUT] Packet Num = 0(先頭) 0, // [INPUT] Offset(8の倍数) = 0(先頭) d_Lcl_MIA_PAC_SIZE, // [INPUT] 読出サイズ = 1000B or Packetサイズ G5uc_packet); // [OUTPUT] 1 パケット Data - copied if ( i_flag ) continue; //頭出し if (uc_segNo == 0) { uc_find_pac0 = TRUE; //観測モードに応じてセグメント番号の末尾を定義 uc_modeNo = (G5uc_packet[d_Lcl_MIA_MOD_ADRR] >> 4) & 0x0f; if (uc_modeNo == 0) { uc_segNoEnd = 0x0b; us_Hnum = 5; us_dlen[4] = 2848;} //89*32 else if (uc_modeNo == 1) { uc_segNoEnd = 0x0f; us_Hnum = 8; } else if (uc_modeNo == 2) { uc_segNoEnd = 0x0f; us_Hnum = 4; us_dlen[0] = d_Lcl_MIA_HK2B + 2304; //8*9*32 us_dlen[1] = 2304; //8*9*32 us_dlen[2] = 2048; //8*9*32 us_dlen[3] = 2048; }//8*9*32 else uc_segNoEnd = 0; //SICヘッダの読み込み app03_MIA_readHDRPacket(G5uc_packet, //[INPUT] Raw Packet data TRUE); //[INPUT] H mode FLAG } //頭出し以後 //ScienceDataをuc_dataに再配置する if (uc_find_pac0 && uc_segNo <= uc_segNoEnd) { //H0 if (uc_drID == 0) { //最大データ長 us_Hlen = 1 + d_Lcl_MIA_MIS_SIZE + d_Lcl_MIA_SCI_SIZE + d_Lcl_MIA_HVB_SIZE; if (uc_modeNo == 0) us_Hlen += 4608; else if (uc_modeNo == 1) us_Hlen += 4352; else if (uc_modeNo == 2) us_Hlen += 1152; us_Hlen /= 2; app03_MIA_tlmout(Gd_N_MIA, //[INPUT] sensor ID pCtrl->uc_vet_cmp_ena, //[INPUT] 圧縮フラグ us_Hlen, //[INPUT] data長さ 0xff, //[INPUT] Comment2 uc_modeNo, //[INPUT] Comment3 (unsigned short*)(G5uc_packet + 12), //[INPUT] 圧縮前のプロダクト (unsigned short*)G5uc_data, //[MID] 圧縮後バッファ pDat->ui_TIH, //[INPUT] TI 4+uc_drID); //[INPUT] DR-ID } //H1-5 else { //カウントデータの読み込み app03_MIA_readSCIPacket(G5uc_packet, //[INPUT] Raw Packet data puc_dat); //[OUTPUT]Count data } } //お尻出し if (uc_find_pac0 && uc_segNo == uc_segNoEnd) { uc_find_pac0 = FALSE; if (pCtrl->uc_swcal_prm[0]) { //SW cal ON時: テスト用パルスでカウントデータを上書きする app03_MIA_makeSWcal(pus_dat, //[OUTPUT] Buffer for Count data uc_modeNo); //[INPUT] モード番号 } //H1-5 //H mode product作成 //H-modeではreadSCIPacket後のG5uc_packetはプロダクトとほぼ同等のもの if (uc_drID) { app05_MIA_makeH(pus_dat); //[INPUT]Count data pus_dat_cur = (unsigned short*)G5uc_data; memcpy(pus_dat_cur, pDat->uc_hdrH, d_Lcl_MIA_SCI_SIZE); for (n = 0; n < us_Hnum; ++n) { app03_MIA_tlmout(Gd_N_MIA, //[INPUT] sensor ID pCtrl->uc_vet_cmp_ena, //[INPUT] 圧縮フラグ us_dlen[n], //[INPUT] data長さ 0xfe, //[INPUT] Comment2 uc_modeNo + 0x10*n, //[INPUT] Comment3 pus_dat_cur, //[INPUT] 圧縮前のプロダクト (unsigned short*)G5uc_packet, //[MID] 圧縮後バッファ pDat->ui_TIH, //[INPUT] TI 4+uc_drID); //[INPUT] DR-ID pus_dat_cur += us_dlen[n]; } } } } Gui_TLMh_blockTime[Gd_N_MIA] = t_blockInfo.ui_createTime;// } // 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 1; } char app05_MIA_makeH(unsigned short *pus_inbuf) // [INPUT] RAW data //M1 [16sc][16+1][32en](SW) + [16sc][8+1ch][32en](Anti) --> (SW)そのまま、(Anti)[88+1ch][32en]に再配置 //M2 [32sc][16+1ch][32en](Anti) そのまま //M3 [16sc][8+1][32en](Anti) + [16sc][8ch][32en](SW) そのまま { // int i, j, k, n; int i_modeNo; struct _s_MIA_Product *pDat; //プロダクト pDat = &Gst_MIA_dat; unsigned short *pus_ALLCnt; i_modeNo = (pDat->uc_hdrH[8] >> 4) & 0x0f; //(0-2) データモード if (i_modeNo == 0) { //分析器のデータモード //M1 太陽風 pus_ALLCnt = pus_inbuf + d_Lcl_MIA_SW1_ADRR/2; //[16sc][8+1ch][32en] // pDat->us_Hlen = d_Lcl_MIA_HK2B + 32*89 + 17*16*32; //データ長 app03_MIA_88dir(pus_ALLCnt, //[INPUT] [16sc][8+1ch][32en](Anti) //Cellの節約配置 pus_ALLCnt, //[OUTPUT] [88+1dir][32en] //同じバッファでもOk FALSE); //TRUE:加算 FALSE:代入 } // else if (i_modeNo == 1) pDat->us_Hlen = d_Lcl_MIA_HK2B + 17*32*32;//M2 MG H // else if (i_modeNo == 2) pDat->us_Hlen = d_Lcl_MIA_HK2B + 17*16*32;//M3 MG L // else pDat->us_Hlen = 0; return TRUE; } /* char app05_MIA_makeH0(unsigned char *puc_inbuf, // [INPUT] Raw Packet data unsigned char *puc_outbuf) // [OUTPUT] カウントデータのみ取り出す // (return) TRUE { unsigned char uc_modeNo; //モード番号 struct _s_MIA_Product *pDat; //プロダクト pDat = &Gst_MIA_dat; uc_modeNo = pDat->uc_hdrH[8] >> 4 & 0x0f; //(0-2) データモード //M1 0: 4608B(72cell) + 11 + 28 + 24 // 1-8: 3840B(30cell) + 11 // 9-11: 4608B(72cell) + 11 //M2 0: 4352B(34ch) + 11 + 28 + 24 // 1-15: 4352B(34ch) + 11 //M3 0: 1152B(34ch) + 11 + 28 + 24 // 1-15: 1152B(34ch) + 11 pDat->us_Hlen = 1 + d_Lcl_MIA_MIS_SIZE + d_Lcl_MIA_SCI_SIZE + d_Lcl_MIA_HVB_SIZE);//データ長 if (uc_modeNo == 0) pDat->us_Hlen += 4608; else if (uc_modeNo == 1) pDat->us_Hlen += 4352; else if (uc_modeNo == 2) pDat->us_Hlen += 1152; pDat->us_Hlen /= 2; return TRUE; } */