/****************************************3************************************** * モジュール名称 :アプリケーション05 - Background Task - EWO * * モジュールラベル :dpu_app05 * * タスク区分 :アプリケーションタスク * * 機能 : * * コーリングシーケンス:void dpu_app05_EWO(int mode) * * 引数 :int mode 冗長機能ON/OFF (0:OFF/1:ON) * * 戻り値 :void * * 使用上の注意 :なし * * エラー処理 :なし * * 注意 :EDIT権限は、EWO組 * * 作成日・作成者 :2014/9/15 T.Imachi * ********************************************************************************/ #define __APP_WFC_OFA__ #define __APP_WFC_AM2P__ #include "app_common.h" #include "app_EWO.h" int app05_EWO_compWaveDump( unsigned char uc_nodeId, unsigned char uc_dataDd, unsigned char uc_headId, unsigned int ui_TIstart, unsigned int ui_TIlen, unsigned char uc_drId ); int app05_EWOE ( 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; if( ( G5uc_WFCE_H_ch & 0x03 ) == 0x00 ) return 0; Guc_EWO_WFCH_stat = 0x01; i_flag = app05_EWO_compWaveDump( Gd_N_EWO, // [INPUT] Node-ID Gd_D_EWOE, // [INPUT] Data-ID Gd_N_EWOE, // [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) ); Guc_EWO_WFCH_stat = 0x00; return( i_flag ); // 1: DATA is available 0: no data } int app05_EWOB ( 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; if( ( G5uc_WFCB_H_ch & 0x07 ) == 0x00 ) return 0; Guc_EWO_WFCH_stat = 0x02; i_flag = app05_EWO_compWaveDump( Gd_N_EWO, // [INPUT] Node-ID Gd_D_EWOB, // [INPUT] Data-ID Gd_N_EWOB, // [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) ); Guc_EWO_WFCH_stat = 0x00; return( i_flag ); // 1: DATA is available 0: no data } int app05_AM2P ( 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; Guc_EWO_WFCH_stat = 0x03; i_flag = app05_EWO_compWaveDump( Gd_N_EWO, // [INPUT] Node-ID Gd_D_AM2P, // [INPUT] Data-ID Gd_N_AM2P, // [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) ); Guc_EWO_WFCH_stat = 0x00; return( i_flag ); // 1: DATA is available 0: no data } // =================================================================== // 圧縮された波形をダンプする // 戻り値:: 0:正常終了 -1:データ無し // =================================================================== int app05_EWO_compWaveDump( unsigned char uc_nodeId, unsigned char uc_dataId, unsigned char uc_headId, unsigned int ui_TIstart, unsigned int ui_TIlen, unsigned char uc_drId ) { // TI unsigned int ui_TIend; // Block int i_numNewBlock; M_T_BLOCK_INFO t_blockInfo; int i_bufId; int i_replyNum; // Mission data int i_nCh; int i_pos; int i_packetSize; int i_readSize; int i_num_read; int i_num_packet; short *s_wp_org; unsigned short *us_rp_data; int i_dataSize; int i_totalDataSize; unsigned char uc_pac_dataId; unsigned int ui_TI, ui_TIsun; unsigned char uc_TI1[4], uc_TI2[2]; unsigned char uc_WFCB_LF; unsigned char uc_WFCH_ch; // Mission Packet int i_tlmSize; unsigned char *uc_wp_packet; // Block skip unsigned char uc_skip_count; // General int i_flag; int i, j, k, l, m; unsigned char uc_cmp = Guc_TLMh_cmp[uc_headId]; // パケットサイズ,チャンネル数の設定(E/B で区別) if( uc_headId == Gd_N_EWOE || uc_headId == Gd_N_AM2P ){ i_packetSize = Gd_Pac_EWOE; i_nCh = 2; uc_WFCH_ch = G5uc_WFCE_H_ch; } else if( uc_headId == Gd_N_EWOB ){ i_packetSize = Gd_Pac_EWOB; i_nCh = 3; uc_WFCH_ch = G5uc_WFCB_H_ch; } else return( 0 ); // ------------------------------------------------- // -- Set at the LONG buffer with the aimed block -- // ------------------------------------------------- i_bufId = 0; // Long buffer 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 } // 再処理用バッファの初期化 for( i=0; i 0 && // Data available t_blockInfo.c_invalidFlg == 0 ) { // Data correct i_replyNum = t_blockInfo.i_replyNum; // ブロック内のパケット数 i_flag = app_GetPacket( 5, // [INPUT] App-No. uc_nodeId, // [INPUT] Node ID uc_dataId, // [INPUT] Data ID i_bufId, // [INPUT] Buffer ID &t_blockInfo, // [INPUT] Block info 0, // [INPUT] Packet No. (0:先頭) 0, // [INPUT] OFFSET 読み出し開始番地 32, // [INPUT] 読み出しデータ長 G5uc_data // [OUTPUT] 読み出しデータ収納バッファ ); // DataID の取得 // EWO-Header::DataID (EWO-Head::B6-7) uc_pac_dataId = G5uc_data[22]; // WFC-B LF の場合 if( uc_pac_dataId == 0x30 ){ uc_WFCB_LF = 1; i_readSize = 128; i_num_read = 8; } else{ uc_WFCB_LF = 0; i_readSize = 512; i_num_read = 2; } // パケット毎の処理(2パケット=1024点づつ処理) if( ui_TIlen == 0 ) i_num_packet = i_num_read; // TIlen == 0 -> make 1 tlm packet 20120827 imachi // else i_num_packet = i_replyNum; else i_num_packet = (int)( ( (double)i_replyNum / 0x40 ) * G5uc_EWO_WFCH_rate ); // 20131118 imachi if( i_num_packet > i_replyNum ) i_num_packet = i_replyNum; for( j=0; j> 4 ); // "1-spin older" time uc_TI1[0] = G5uc_data[16]; uc_TI1[1] = G5uc_data[17]; uc_TI1[2] = G5uc_data[18]; uc_TI1[3] = G5uc_data[19]; uc_TI2[0] = G5uc_data[20]; uc_TI2[1] = G5uc_data[21]; // ミッションパケット準備 uc_wp_packet = &G5uc_packet[0]; // EWO counter 書き込み (Byte 0-1) *uc_wp_packet++ = uc_TI2[0]; // EWO counter *uc_wp_packet++ = uc_TI2[1]; i_tlmSize = 2; // EWO counter:2B *uc_wp_packet++ = uc_WFCH_ch; *uc_wp_packet++ = Guc_TLMh_cmp[uc_headId]; *uc_wp_packet++ = (unsigned char)( G5ui_EWO_WFCH_prec & 0xff ); // 2012.11.21 Imachi // i_tlmSize++; // WFC-H CMP STAT:1B i_tlmSize+=3; // WFC-H CH:1B, WFC-H CMP STAT:1B, WFC-H PREC:1B // 2012.11.21 Imachi // パケットを波形に分離(512点 * 2) → テレメトリ送出 for( k=0; k> 8 ); *uc_wp_packet++ = (unsigned char)( i_dataSize & 0xff ); i_tlmSize += 2; // データサイズ:2B for( l=0; l> 8 ); *uc_wp_packet++ = (unsigned char)( us_rp_data[l] & 0xff ); } if( Guc_TLMh_cmp[uc_headId] == 0 ) i_dataSize *= 2; // Write High Byte when compress is off. i_tlmSize += i_dataSize; i_totalDataSize += i_dataSize; } // ミッションパケット送出 Gui_TLMh_blockTime[ uc_headId] = t_blockInfo.ui_createTime; // DUMP TI monitor 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) uc_drId+4, // [INPUT] DR-ID (for CAT-ID) [0:HK 1:OS 2:L 3:M 4-9:H(0-5)] uc_cmp, // Guc_TLMh_cmp[uc_headId] [INPUT] Comp mode [0:non 1(/2):ARITH0 3:User-COMP] uc_pac_dataId, // [INPUT] Packet ID <<<< USER-DEF: 0x00- 0xFF >>>> ui_TI, // [INPUT] Data TI <<<< USER-DEF: 0x00000000-0xFFFFFFFF >>>> Guc_cmdDummy, // [INPUT] Comment <<<< USER-DEF: <128B >>>> 0, // [INPUT] Comment - Size <<<< USER-DEF: <128B >>>> G5uc_packet, // [INPUT] Data <<<< USER-DEF: <0x1E00 >>>> i_tlmSize // [INPUT] Data - Size <<<< USER-DEF: <0x1E00 >>>> ); } // End of for } // End of if // 次のブロック 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 ) return i_totalDataSize; // no data } // End of for return i_totalDataSize; }