/******************************************************************************* * モジュール名称 :Application Core関数定義 * * 機能 :Core部の共通routine * * モジュールラベル :Core App * * タスク区分 :Core Functions * * 使用上の注意 :特になし * * 作成日・作成者 :2015/10/8 Y.K. * *******************************************************************************/ #include "dpu_api.h" #include "app_core.h" #include "dpu_api_proto.h" //#include "app_rdn_core.h" // ***** MACRO ***** int app_TRG_ScoreCalc_scalar_uc ( unsigned char, unsigned char, int, int * ); int app_TRG_ScoreCalc_scalar_us ( unsigned short, unsigned short, int, int * ); int app_TRG_ScoreCalc_scalar_s ( short, short, int, int * ); int app_TRG_ScoreCalc_scalar_s_abs( short, short, int, int * ); int app_TRG_ScoreCalc_vector ( short, short, short, short, short, short, int, int * ); // int app_TlmH_Dump_each( unsigned char, unsigned char, unsigned char, unsigned char, unsigned short, unsigned short ); // ******************************** // ************* TRG ************** // ******************************** // =========================================================================== // app_TRG_reset **** Trigger関数のreset **** // [INPUT] unsigned char uc_dpuNo DPU Num (0:DPU1 1:DPU2) // int i_cnt Count番号 (19) // =========================================================================== void app_TRG_reset( unsigned char uc_dpuNo, // [INPUT] DPU-Num int i_cnt ) // [INPUT] Count番号 (0-59) { int j; if (uc_dpuNo == 0) { Gui_TRG1_SpTI [i_cnt] = // Trigger buffer: TI at Sun Pulse (LSB:1.953msec) Gui_TRG1_SpTI_s [i_cnt] = 0; // Trigger buffer: TI at Sun Pulse (LSB:1.953msec) Gus_TRG1_Score [i_cnt] = 0xFFFF; // DPU1 - SCORE Gs_TRG1_MGFO_Bx [i_cnt] = // MGFO - Bx Gs_TRG1_MGFO_By [i_cnt] = // MGFO - Bx Gs_TRG1_MGFO_Bz [i_cnt] = 0x7FFF; // MGFO - Bx Gus_TRG1_MGFO_Brms[i_cnt] = // MGFO - Bx Gus_TRG1_MIA_N [i_cnt] = 0xFFFF; // MIA - N Gs_TRG1_MIA_Vx [i_cnt] = // MIA - Vx Gs_TRG1_MIA_Vy [i_cnt] = // MIA - Vy Gs_TRG1_MIA_Vz [i_cnt] = 0x7FFF; // MIA - Vz Gus_TRG1_MIA_T [i_cnt] = 0xFFFF; // MIA - T for (j=0; j<7; j++) Guc_TRG1_MIA_Esp [i_cnt][j] = 0xFF; // MIA - ET Gus_TRG1_MEA_T [i_cnt] = 0xFFFF; // MEA - T Gc_TRG1_MSA_HIon [i_cnt] = 0xFF; // MEA - T Gc_TRG1_ENA [i_cnt] = 0; // ENA [Trigger: 0 reset] Gus_TRG1_HEPE_Flux[i_cnt] = // HEPE - FLUX Gus_TRG1_HEPE_FluxH[i_cnt]= 0xFFFF; // HEPE - FLUX // Gus_TRG1_HEPI_Flux[i_cnt] = 0xFFFF; // HEPI - FLUX } else { Gui_TRG2_SpTI [i_cnt] = // Trigger buffer: TI at Sun Pulse (LSB:1.953msec) Gui_TRG2_SpTI_s [i_cnt] = 0; // Trigger buffer: TI at Sun Pulse (LSB:1.953msec) Gus_TRG2_Score [i_cnt] = 0xFFFF; // DPU1 - SCORE Gs_TRG2_MGFI_Bx [i_cnt] = // MGFI - Bx Gs_TRG2_MGFI_By [i_cnt] = // MGFI - By Gs_TRG2_MGFI_Bz [i_cnt] = 0x7FFF; // MGFI - Bz Gus_TRG2_MGFI_Brms[i_cnt] = 0xFFFF; // MGFI - Brms Gs_TRG2_EFD_Pot [i_cnt] = 0x7FFF; // Trigger buffer: EFD - Potential Gus_TRG2_EFD_E [i_cnt] = // Trigger buffer: EFD - |E| Gus_TRG2_EFD_Erms [i_cnt] = 0xFFFF; // Trigger buffer: EFD - |E|rms for (j=0; j<8; j++) { Guc_TRG2_EWO_Esp [i_cnt][j] = // EWO - Spectrum (LOG dB) 0:-128dB FF:0dB (V/m/Hz) Guc_TRG2_EWO_Bsp [i_cnt][j] = 0xFF; // EWO - Spectrum (LOG dB) 0:-128dB FF:0dB (V/m/Hz) } Guc_TRG2_SOR_N [i_cnt] = // SORBET e- N Fp = (value) x 10Hz Guc_TRG2_SOR_T [i_cnt] = 0xFF; // SORBET e- Temp index QTN = (value) x 1dB } } // **************************** // *** app_TRG1_ScoreCalc *** // **************************** // 1. TRIGGER-Calc: NOW --> INPUT to TRIGGER SCORE変数 // // MD?U_TLM_H_TRG_SET (B1:Score-LEN) (B2:Score-th) (B3-4:Para-1) (B5-6:Para-2) (B7-8:Para-3) (B9-10:Para-4) // Guc_TLMh_ScoreLen // Guc_TLMh_ScoreTh // Guc_TLMh_trgID[i] = uc_Data[i*2+2]; // Guc_TLMh_trgTh[i] = uc_Data[i*2+3]; // ########################################################## // # MD?U_TLMH_TRG_SET [0132 03 0302] // # (def) TLM-H Trigger Threshold Parameter Set for the decision conditions // # // # (usage) MD2U_TLMH_TRG_SET (Score-LEN) (Score-th) (Para-1[2B]) (Para-2[2B]) (Para-3[2B]) (Para-4[2B]) // # Score-LEN b7 Score policy (0:Sum of count 1:Sum of (Value/Threshold) // # b0-6 Score length (x 4sec) // # Score-Th Score threshold (b4-7:signed) * 2^(b0-3) // # ------------------------------------------------------------ // # Para-X 0B b7 0:> 1:< // # b6 0:nrm 1:diff // # b0-5 Parameter ID // # Bx:1 By:2 Bz:3 Brms:4 |Bx|:5 |By|:6 |Bz|:7 |B|:8 // # Te:9 // # Nhi:A // # Ehe:B, Ihe:C D // # Ni:D Ti:E // # Energy-spectrum_Ch0-6:10-16 // # Vx:17 Vy:18 Vz:19 |Vx|:1A |Vy|:1B |Vz|:1C |V|:1D // # ENA:1F // # ---------------------------- // # Bx:21 By:22 Bz:23 Brms:24 |Bx|:25 |By|:26 |Bz|:27 |B|:28 // # Ne:29, Te:2A // # Pot:2B |E|:2C Erms:2D // # E-spectrum_Ch0-7:30-37 // # B-spectrum_Ch0-7:38-3F // # 1B Threshold sign b7 0:> 1:< // # value (b4-6) * 2^(b0-3) // # // # ***Initial*** N/A // ########################################################## void app_TRG1_ScoreCalc() { int i, j, i_cnt; int i_data = 0; int i_flag; int i_ID, i_sign, i_diff, i_threshold; if ( Guc_TLMh_trgID[0]==0 ) return; // no scoring parameters for (i_cnt = Gd_TRG_SET; i_cnt 0x1F ) continue; // DPU2 // i_sign = Guc_TLMh_trgID[i] & 0x80; // 0:> 80:< i_diff = Guc_TLMh_trgID[i] & 0x40; // 0:nrm 40:diff i_threshold = ( (Guc_TLMh_trgTh[i] & 0x70 ) >> 4 ) * (1 << ( Guc_TLMh_trgTh[i] & 0x0F )); if ( Guc_TLMh_trgTh[i] & 0x80 ) i_threshold *= -1; i_flag = -1; // ------------------------------------------------------------- // Bx:1 By:2 Bz:3 Brms:4 |Bx|:5 |By|:6 |Bz|:7 |B|:8 // ------------------------------------------------------------- if ( i_ID == 0x1 ) i_flag = app_TRG_ScoreCalc_scalar_s ( Gs_TRG1_MGFO_Bx [i_cnt], Gs_TRG1_MGFO_Bx[i_cnt+1], i_diff, & i_data ); else if ( i_ID == 0x2 ) i_flag = app_TRG_ScoreCalc_scalar_s ( Gs_TRG1_MGFO_By [i_cnt], Gs_TRG1_MGFO_By[i_cnt+1], i_diff, & i_data ); else if ( i_ID == 0x3 ) i_flag = app_TRG_ScoreCalc_scalar_s ( Gs_TRG1_MGFO_Bz [i_cnt], Gs_TRG1_MGFO_Bz[i_cnt+1], i_diff, & i_data ); else if ( i_ID == 0x4 ) i_flag = app_TRG_ScoreCalc_scalar_us ( Gus_TRG1_MGFO_Brms[i_cnt], Gus_TRG1_MGFO_Brms[i_cnt+1], i_diff, & i_data ); else if ( i_ID == 0x5 ) i_flag = app_TRG_ScoreCalc_scalar_s_abs( Gs_TRG1_MGFO_Bx [i_cnt], Gs_TRG1_MGFO_Bx[i_cnt+1], i_diff, & i_data ); else if ( i_ID == 0x6 ) i_flag = app_TRG_ScoreCalc_scalar_s_abs( Gs_TRG1_MGFO_By [i_cnt], Gs_TRG1_MGFO_By[i_cnt+1], i_diff, & i_data ); else if ( i_ID == 0x7 ) i_flag = app_TRG_ScoreCalc_scalar_s_abs( Gs_TRG1_MGFO_Bz [i_cnt], Gs_TRG1_MGFO_Bz[i_cnt+1], i_diff, & i_data ); else if ( i_ID == 0x8 ) i_flag = app_TRG_ScoreCalc_vector ( Gs_TRG1_MGFO_Bx [i_cnt], Gs_TRG1_MGFO_By[i_cnt], Gs_TRG1_MGFO_Bz[i_cnt], Gs_TRG1_MGFO_Bx [i_cnt+1], Gs_TRG1_MGFO_By[i_cnt+1], Gs_TRG1_MGFO_Bz[i_cnt+1], i_diff, & i_data ); // ------------------------------------------------------------- // # Te:9 // ------------------------------------------------------------- else if ( i_ID == 0x9 ) i_flag = app_TRG_ScoreCalc_scalar_us ( Gus_TRG1_MEA_T [i_cnt], Gus_TRG1_MEA_T [i_cnt+1], i_diff, & i_data ); // ------------------------------------------------------------- // # Nhi:A // ------------------------------------------------------------- else if ( i_ID == 0xA ) i_flag = app_TRG_ScoreCalc_scalar_uc ( Gc_TRG1_MSA_HIon [i_cnt], Gc_TRG1_MSA_HIon[i_cnt+1], i_diff, & i_data ); // ------------------------------------------------------------- // # Ehe:B, EheH:C Ihe:D // ------------------------------------------------------------- else if ( i_ID == 0xB ) i_flag = app_TRG_ScoreCalc_scalar_us ( Gus_TRG1_HEPE_Flux [i_cnt], Gus_TRG1_HEPE_Flux [i_cnt+1],i_diff, & i_data ); else if ( i_ID == 0xC ) i_flag = app_TRG_ScoreCalc_scalar_us ( Gus_TRG1_HEPE_FluxH[i_cnt], Gus_TRG1_HEPE_FluxH[i_cnt+1],i_diff, & i_data ); // else if ( i_ID == 0xD ) i_flag = app_TRG_ScoreCalc_scalar_us ( Gus_TRG1_HEPI_Flux [i_cnt], Gus_TRG1_HEPI_Flux [i_cnt+1],i_diff, & i_data ); // ------------------------------------------------------------- // # Ni:E Ti:F // ------------------------------------------------------------- else if ( i_ID == 0xE ) i_flag = app_TRG_ScoreCalc_scalar_us ( Gus_TRG1_MIA_N[i_cnt], Gus_TRG1_MIA_N[i_cnt+1], i_diff, & i_data ); else if ( i_ID == 0xF ) i_flag = app_TRG_ScoreCalc_scalar_us ( Gus_TRG1_MIA_T[i_cnt], Gus_TRG1_MIA_T[i_cnt+1], i_diff, & i_data ); // ------------------------------------------------------------- // # Vx:17 Vy:18 Vz:19 |Vx|:1A |Vy|:1B |Vz|:1C |V|:1D // ------------------------------------------------------------- else if ( i_ID ==0x17 ) i_flag = app_TRG_ScoreCalc_scalar_s ( Gs_TRG1_MIA_Vx[i_cnt], Gs_TRG1_MIA_Vx[i_cnt+1], i_diff, & i_data ); else if ( i_ID ==0x18 ) i_flag = app_TRG_ScoreCalc_scalar_s ( Gs_TRG1_MIA_Vy[i_cnt], Gs_TRG1_MIA_Vy[i_cnt+1], i_diff, & i_data ); else if ( i_ID ==0x19 ) i_flag = app_TRG_ScoreCalc_scalar_s ( Gs_TRG1_MIA_Vz[i_cnt], Gs_TRG1_MIA_Vz[i_cnt+1], i_diff, & i_data ); else if ( i_ID ==0x1A ) i_flag = app_TRG_ScoreCalc_scalar_s_abs( Gs_TRG1_MIA_Vx[i_cnt], Gs_TRG1_MIA_Vx[i_cnt+1], i_diff, & i_data ); else if ( i_ID ==0x1B ) i_flag = app_TRG_ScoreCalc_scalar_s_abs( Gs_TRG1_MIA_Vy[i_cnt], Gs_TRG1_MIA_Vy[i_cnt+1], i_diff, & i_data ); else if ( i_ID ==0x1C ) i_flag = app_TRG_ScoreCalc_scalar_s_abs( Gs_TRG1_MIA_Vz[i_cnt], Gs_TRG1_MIA_Vz[i_cnt+1], i_diff, & i_data ); else if ( i_ID ==0x1D ) i_flag = app_TRG_ScoreCalc_vector ( Gs_TRG1_MIA_Vx[i_cnt], Gs_TRG1_MIA_Vy[i_cnt], Gs_TRG1_MIA_Vz[i_cnt], Gs_TRG1_MIA_Vx[i_cnt+1],Gs_TRG1_MIA_Vy[i_cnt+1], Gs_TRG1_MIA_Vz[i_cnt+1], i_diff, & i_data ); // ------------------------------------------------------------- // # 1F // ------------------------------------------------------------- else if ( i_ID ==0x1F ) i_flag = app_TRG_ScoreCalc_scalar_uc ( Gc_TRG1_ENA [i_cnt], Gc_TRG1_ENA[i_cnt+1], i_diff, & i_data ); // ------------------------------------------------------------- // # Energy-spectrum_Ch0-6:10-16 // ------------------------------------------------------------- else if ( i_ID>=0x10 && i_ID<=0x16 ) { j = i_ID-0x10; i_flag = app_TRG_ScoreCalc_scalar_uc ( Guc_TRG1_MIA_Esp[i_cnt][j], Guc_TRG1_MIA_Esp[i_cnt+1][j],i_diff, & i_data ); } // ------------------------------------------------------------- // SCORE! // if (i_flag<0) continue; // else if (i_flag) { // Gus_TRG1_Score[i_cnt] = 0xFFFF; // } if (i_flag) continue; else if ( ( i_sign != 0 && i_data < i_threshold) || ( i_sign == 0 && i_data > i_threshold) ) { j = 1; if ( Guc_TLMh_ScoreLen & 0x80 ) { if ( i_sign != 0 ) j = i_threshold - i_data; else j = i_data - i_threshold; } if ( Gus_TRG1_Score[i_cnt] + j < 0x10000 ) Gus_TRG1_Score[i_cnt] += j; else { Gus_TRG1_Score[i_cnt] = 0xFFFE; } } } } return; } // **************************** // *** app_TRG2_ScoreCalc *** // **************************** // 1. TRIGGER-Calc: NOW --> INPUT to TRIGGER SCORE変数 // // MD?U_TLM_H_TRG_SET (B1:Score-LEN) (B2:Score-th) (B3-4:Para-1) (B5-6:Para-2) (B7-8:Para-3) (B9-10:Para-4) // Guc_TLMh_ScoreLen // Guc_TLMh_ScoreTh // Guc_TLMh_trgID[i] = uc_Data[i*2+2]; // Guc_TLMh_trgTh[i] = uc_Data[i*2+3]; // ########################################################## // # MD?U_TLMH_TRG_SET [0132 03 0302] // # (def) TLM-H Trigger Threshold Parameter Set for the decision conditions // # // # (usage) MD2U_TLMH_TRG_SET (Score-LEN) (Score-th) (Para-1[2B]) (Para-2[2B]) (Para-3[2B]) (Para-4[2B]) // # Score-LEN b7 Score policy (0:Sum of count 1:Sum of (Value/Threshold) // # b0-6 Score length (x 4sec) // # Score-Th Score threshold (b4-7:signed) * 2^(b0-3) // # ------------------------------------------------------------ // # Para-X 0B b7 0:> 1:< // # b6 0:nrm 1:diff // # b0-5 Parameter ID // # Bx:1 By:2 Bz:3 Brms:4 |Bx|:5 |By|:6 |Bz|:7 |B|:8 // # Te:9 // # Nhi:A // # Ehe:B, Ihe:C D // # Ni:D Ti:E // # Energy-spectrum_Ch0-6:10-16 // # Vx:17 Vy:18 Vz:19 |Vx|:1A |Vy|:1B |Vz|:1C |V|:1D // # ---------------------------- // # Bx:21 By:22 Bz:23 Brms:24 |Bx|:25 |By|:26 |Bz|:27 |B|:28 // # Ne:29, Te:2A // # Pot:2B |E|:2C Erms:2D // # E-spectrum_Ch0-7:30-37 // # B-spectrum_Ch0-7:38-3F // # 1B Threshold sign b7 0:> 1:< // # value (b4-6) * 2^(b0-3) // # // # ***Initial*** N/A // ########################################################## void app_TRG2_ScoreCalc() { int i, j, i_cnt; int i_data; int i_flag; int i_ID, i_sign, i_diff, i_threshold; if ( Guc_TLMh_trgID[0]==0 ) return; // no scoring parameters for (i_cnt = Gd_TRG_SET; i_cnt 0x3F) continue; // DPU1 i_sign = Guc_TLMh_trgID[i] & 0x80; // 0:> 80:< i_diff = Guc_TLMh_trgID[i] & 0x40; // 0:nrm 40:diff i_threshold = ( (Guc_TLMh_trgTh[i] & 0x70 ) >> 4 ) * (1 << ( Guc_TLMh_trgTh[i] & 0x0F )); if ( Guc_TLMh_trgTh[i] & 0x80 ) i_threshold *= -1; i_flag = 1; // ------------------------------------------------------------------------- // Bx:21 By:22 Bz:23 Brms:24 |Bx|:25 |By|:26 |Bz|:27 |B|:28 // ------------------------------------------------------------------------- if ( i_ID == 0x21) i_flag = app_TRG_ScoreCalc_scalar_s ( Gs_TRG2_MGFI_Bx[i_cnt], Gs_TRG2_MGFI_Bx[i_cnt+1], i_diff, & i_data ); else if ( i_ID == 0x22) i_flag = app_TRG_ScoreCalc_scalar_s ( Gs_TRG2_MGFI_By[i_cnt], Gs_TRG2_MGFI_By[i_cnt+1], i_diff, & i_data ); else if ( i_ID == 0x23) i_flag = app_TRG_ScoreCalc_scalar_s ( Gs_TRG2_MGFI_Bz[i_cnt], Gs_TRG2_MGFI_Bz[i_cnt+1], i_diff, & i_data ); else if ( i_ID == 0x24) i_flag = app_TRG_ScoreCalc_scalar_us ( Gus_TRG2_MGFI_Brms[i_cnt], Gus_TRG2_MGFI_Brms[i_cnt+1], i_diff, & i_data ); else if ( i_ID == 0x25) i_flag = app_TRG_ScoreCalc_scalar_s_abs( Gs_TRG2_MGFI_Bx[i_cnt], Gs_TRG2_MGFI_Bx[i_cnt+1], i_diff, & i_data ); else if ( i_ID == 0x26) i_flag = app_TRG_ScoreCalc_scalar_s_abs( Gs_TRG2_MGFI_By[i_cnt], Gs_TRG2_MGFI_By[i_cnt+1], i_diff, & i_data ); else if ( i_ID == 0x27) i_flag = app_TRG_ScoreCalc_scalar_s_abs( Gs_TRG2_MGFI_Bz[i_cnt], Gs_TRG2_MGFI_Bz[i_cnt+1], i_diff, & i_data ); else if ( i_ID == 0x28) i_flag = app_TRG_ScoreCalc_vector ( Gs_TRG2_MGFI_Bx[i_cnt], Gs_TRG2_MGFI_By[i_cnt], Gs_TRG2_MGFI_Bz[i_cnt], Gs_TRG2_MGFI_Bx[i_cnt+1], Gs_TRG2_MGFI_By[i_cnt+1], Gs_TRG2_MGFI_Bz[i_cnt+1], i_diff, & i_data ); // ------------------------------------------------------------------------- // Ne:29, Te:2A // ------------------------------------------------------------------------- else if ( i_ID == 0x29) i_flag = app_TRG_ScoreCalc_scalar_uc ( Guc_TRG2_SOR_N[i_cnt], Guc_TRG2_SOR_N[i_cnt+1], i_diff, & i_data ); else if ( i_ID == 0x2A) i_flag = app_TRG_ScoreCalc_scalar_uc ( Guc_TRG2_SOR_T[i_cnt], Guc_TRG2_SOR_T[i_cnt+1], i_diff, & i_data ); // ------------------------------------------------------------------------- // Pot:2B |E|:2C // ------------------------------------------------------------------------- else if ( i_ID == 0x2B) i_flag = app_TRG_ScoreCalc_scalar_s ( Gs_TRG2_EFD_Pot [i_cnt], Gs_TRG2_EFD_Pot [i_cnt+1], i_diff, & i_data ); else if ( i_ID == 0x2C) i_flag = app_TRG_ScoreCalc_scalar_us ( Gus_TRG2_EFD_E [i_cnt], Gus_TRG2_EFD_E [i_cnt+1], i_diff, & i_data ); else if ( i_ID == 0x2D) i_flag = app_TRG_ScoreCalc_scalar_us ( Gus_TRG2_EFD_Erms[i_cnt], Gus_TRG2_EFD_Erms[i_cnt+1], i_diff, & i_data ); // ------------------------------------------------------------------------- // E-spectrum_Ch0-7:30-37 // B-spectrum_Ch0-7:30-37 // ------------------------------------------------------------------------- else if ( i_ID >= 0x30 && i_ID <= 0x37 ) { j = i_ID-0x30; i_flag = app_TRG_ScoreCalc_scalar_uc ( Guc_TRG2_EWO_Esp[i_cnt][j],Guc_TRG2_EWO_Esp[i_cnt+1][j],i_diff, & i_data ); } else if ( i_ID >= 0x38 && i_ID <= 0x3F ) { j = i_ID-0x38; i_flag = app_TRG_ScoreCalc_scalar_uc ( Guc_TRG2_EWO_Bsp[i_cnt][j],Guc_TRG2_EWO_Bsp[i_cnt+1][j],i_diff, & i_data ); } // SCORE! // if (i_flag<0) continue; // else if (i_flag) { // Gus_TRG2_Score[i_cnt] = 0xFFFF; // } if (i_flag) continue; else if ( ( i_sign != 0 && i_data < i_threshold) || ( i_sign == 0 && i_data > i_threshold) ) { j = 1; if ( Guc_TLMh_ScoreLen & 0x80 ) { if ( i_sign != 0 ) j = i_threshold - i_data; else j = i_data - i_threshold; } if ( Gus_TRG2_Score[i_cnt] + j < 0x10000 ) Gus_TRG2_Score[i_cnt] += j; else { Gus_TRG2_Score[i_cnt] = 0xFFFE; } } } } return; } // ************************************************* // ************************************************* // ************************************************* int app_TRG_ScoreCalc_scalar_uc(unsigned char uc_x, unsigned char uc_x0, int i_diff, int *i_data ) { if ( uc_x != 0xFF && uc_x0 != 0xFF ) { * i_data = (int)uc_x; if (i_diff) * i_data -= (int)uc_x0; return( 0 ); } return( 1 ); } int app_TRG_ScoreCalc_scalar_us(unsigned short us_x, unsigned short us_x0, int i_diff, int *i_data ) { if ( us_x != 0xFFFF && us_x0 != 0xFFFF ) { * i_data = (int)us_x; if (i_diff) * i_data -= (int)us_x0; return( 0 ); } return( 1 ); } int app_TRG_ScoreCalc_scalar_s( short s_x, short s_x0, int i_diff, int *i_data ) { if ( s_x != 0x7FFF && s_x0 != 0x7FFF ) { * i_data = (int)s_x; if (i_diff) * i_data -= (int)s_x0; return( 0 ); } return( 1 ); } int app_TRG_ScoreCalc_scalar_s_abs( short s_x, short s_x0, int i_diff, int *i_data ) { int i_data1; if ( s_x != 0x7FFF && s_x0 != 0x7FFF ) { if (s_x>0) * i_data = (int)s_x; else * i_data = -(int)s_x; if (i_diff) { if (s_x>0) i_data1 = (int)s_x0; else i_data1 = -(int)s_x0; * i_data -= i_data1; } return( 0 ); } return( 1 ); } int app_TRG_ScoreCalc_vector( short s_x, short s_y, short s_z, short s_x0, short s_y0, short s_z0, int i_diff, int *i_data ) { int i_data1; if ( s_x != 0x7FFF && s_x0 != 0x7FFF && s_y != 0x7FFF && s_y0 != 0x7FFF && s_z != 0x7FFF && s_z0 != 0x7FFF ) { * i_data = (int)app_math_sqrt( s_x * s_x + s_y * s_y + s_z * s_z ); if (i_diff) { i_data1 = (int)app_math_sqrt( s_x0 * s_x0 + s_y0 * s_y0 + s_z0 * s_z0 ); * i_data -= i_data1; } return( 0 ); } return( 1 ); } // ************************************************* // ************************************************* // ************************************************* // =========================================================================== // int app_TRG_ScoreAnalysis **** Trigger関数の評価&TRG-GO **** // return: 0:triggered 1:Trigger-off 2:H-ENA 3:no-trigger 4:Already triggered // =========================================================================== // Guc_TLMh_storeId1 = uc_Data[0]; // Guc_TLMh_storeId2 = uc_Data[1]; // SEL1/SEL2 Data select DPU1 DPU2 // b0 MEA1 MGFI // b1 MEA2 ---- // b2 MIA ---- // b3 MSA EWOE // b4 HEPE ---- // b5 HEPI EFD // b6 ---- EWOB // b7 MGFO SOR // // Guc_TLMh_storeDrId = uc_Data[2] & 0x1F; // Guc_TLMh_storeDrOvw = uc_Data[2] & 0x80; // DR-ID b7 OverWrite to Lowest-SCORsE (ENA:1 DIS:0) // b0-4 Used Dr-ID(b0:H1 b1:H2 b2:H3 b3:H4 b4:H5 (ENA:1 DIS:0) // // Guc_TLMh_storeTimePre = uc_Data[3]; // TI-PRE(* 4sec) Data start-time before the trigger [0xFF: All data at the latch] // // Guc_TLMh_storeTimeLen = uc_Data[4]; // TI-AFT(* 4sec) Data end-time after the trigger [0xFF: All data in the SDRAM] // int app_TRG_ScoreAnalysis() { // *********************************************** // *** 2. Σ(TRG-SCORE) -- 長さ:ScoreLEN spin *** // *********************************************** // MD?U_TLM_H_TRG_SET (B1:Score-LEN) (B2:Score-th) (B3-4:Para-1) (B5-6:Para-2) (B7-8:Para-3) (B9-10:Para-4) // Guc_TLMh_ScoreLen // Guc_TLMh_ScoreTh int i, i_score = 0; unsigned int ui_threshold; int i_Hena = 0; // *** MD2U_TLMH_TRG_SET *** // B1 Guc_TLMh_ScoreLen // B2 Guc_TLMh_ScoreTh // B3-4/5-6/7-8/9-10 Guc_TLMh_trgID, Guc_TLMh_trgTh Gui_TRG_Score = 0; ui_threshold = ( Guc_TLMh_ScoreTh >> 4 ) * (1 << ( Guc_TLMh_ScoreTh & 0x0F )); for (i=Gd_TRG_CALC; i<(Guc_TLMh_ScoreLen & 0x7F)+Gd_TRG_CALC; i++) { if ( i>=Gd_TRG_MAX ) { Gui_TRG_Score=0; break; } // CALC fail if ( Gus_TRG1_Score[i] == 0xFFFF || Gus_TRG2_Score[i] == 0xFFFF ) { Gui_TRG_Score=0; break; } // CALC fail i_score = Gus_TRG1_Score[i] + Gus_TRG2_Score[i]; if (Guc_TLMh_trgID_num > 1) { if (i_score < Guc_TLMh_trgID_num) i_score = 0; else i_score = 1; } Gui_TRG_Score += i_score; } // *** MD?U_TLM_H_TRG_STRT *** // B1 Guc_TLMh_storeId1 = uc_Data[0]; // B2 Guc_TLMh_storeId2 = uc_Data[1]; // SEL1/SEL2 Data select DPU1 DPU2 // b0 MEA1 MGFI // b1 MEA2 ---- // b2 MIA ---- // b3 MSA EWOE // b4 HEPE ---- // b5 HEPI EFD // b6 ---- EWOB // b7 MGFO SOR // B3 Guc_TLMh_storeDrId = uc_Data[2] & 0x1F; // Guc_TLMh_storeDrOvw = uc_Data[2] & 0x80; // DR-ID b7 OverWrite to Lowest-SCORE (ENA:1 DIS:0) // b0-4 Used Dr-ID(b0:H1 b1:H2 b2:H3 b3:H4 b4:H5 (ENA:1 DIS:0) // B4 Guc_TLMh_storeTimePre = uc_Data[3]; // TI-PRE(* 4sec) Data start-time before the trigger [0xFF: All data at the latch] // B5 Guc_TLMh_storeTimeLen = uc_Data[4]; // TI-AFT(* 4sec) Data end-time after the trigger [0xFF: All data in the SDRAM] // ---- if ( Guc_TLMh_storeId1 == 0 && Guc_TLMh_storeId2 == 0) { Gui_TRG_ScoreTotal = 0; return(1); // Trigger-OFF } for (i=0; i<0x13; i++) i_Hena += Guc_TLMh_enadis[i]; if ( i_Hena || // H-ENA in This DPU (Guc_TLMh_DrNum & 0xC0) ) // H-ENA in Another DPU { return(4); // During H-mode enable (during DUMP) } Gus_TRG_ScoreTotal = Gui_TRG_Score; if ( Gui_TRG_Score > 0x7FFF ) Gus_TRG_ScoreTotal = 0x7FFF; if ( ui_threshold >= Gui_TRG_Score ) return(2); // No-Trigger if ( Gui_TRG_ScoreTotal >= Gui_TRG_Score ) return(3); // Already triggered // ---- Before START ---- Gus_TRG_ScoreTotal |= 0x8000; // *********************************************** // *** 3. if Σ(TRG-SCORE) > TH // *********************************************** // MD?U_TLM_H_TRG_STRT (B1:SEL-DPU1) (B2:SEL-DPU2) (B3:DR-ID) (B4:TI-PRE) (B5:TI-LEN) // Guc_TLMh_storeId1 = uc_Data[0]; // Guc_TLMh_storeId2 = uc_Data[1]; // Guc_TLMh_storeDrId = (uc_Data[2] >> 1) & 0x1F; // Guc_TLMh_storeDrOvw = (uc_Data[2] & 0x01); // Guc_TLMh_storeTimePre = uc_Data[3]; // Guc_TLMh_storeTimeLen = uc_Data[4]; M_T_TIME_INFO t_timeInfo; dpu_getTime( &t_timeInfo ); // ---- START TIME ---- if ( Guc_dpuNo == 0 ) Gui_TRG_TiStart = Gui_TRG1_SpTI[Gd_TRG_CALC]; else Gui_TRG_TiStart = Gui_TRG2_SpTI[Gd_TRG_CALC]; if ( Guc_TLMh_storeTimePre == 0xFF ) Gui_TRG_TiStart -= 0x9600; // 20min ago else Gui_TRG_TiStart -= Guc_TLMh_storeTimePre * 128; // (TimePre x 4sec) ago if ( Gui_TRG_TiStart < Gui_TRG_TiLAST ) { Gui_TRG_TiEnd = Gui_TRG_TiLAST - Gui_TRG_TiStart; Gui_TRG_TiStart = Gui_TRG_TiLAST; return(5); // DATA is not enough stored yet } // ---- END TIME ---- if ( Guc_TLMh_storeTimeLen == 0xFF ) Gui_TRG_TiEnd = t_timeInfo.ui_currentTime2; // current TI else Gui_TRG_TiEnd = Gui_TRG_TiStart + Guc_TLMh_storeTimeLen * 128; // (TimeLen x 4sec) length // ---- TRIGGER!!! ---- Gui_TRG_ScoreTotal = Gui_TRG_Score; Gus_TRG_ScoreTotal &= 0x7FFF; return(0); } // =========================================================================== // int app_TRG_ScoreDumpStart **** TriggerによるH-DUMP開始 **** // return: 0:triggered 1:Trigger-off 2:H-ENA 3:no-vacant DR sector // =========================================================================== int app_TRG_ScoreDumpStart() { int i; int i_flag; int i_Hena = 0; int i_DrNum = 0; unsigned int ui_DRscore = 0xFFFFFFFF; for (i=0; i<0x13; i++) i_Hena += Guc_TLMh_enadis[i]; if ( (Guc_TLMh_storeId1 == 0 && Guc_TLMh_storeId2 == 0) || i_Hena || // H-ENA in This DPU (Guc_TLMh_DrNum & 0xC0) ) // H-ENA in Another DPU { Gui_TRG_ScoreTotal = Gui_TRG_TiStart = Gui_TRG_TiEnd = 0; // Trigger-OFF return(2); // During H-mode enable (during DUMP) } // ********************** // ***** SET DR Num ***** // ********************** // MD?U_TLM_H_DR_SET (B1:H-DR1) (B2:H-DR2) (B3:H-DR3) (B4:H-DR4) (B5:H-DR5) // Guc_TLMh_DrEmpty[i] // Guc_TLMh_DrOvw [i] for (i=1; i<6; i++) { if ( (Guc_TLMh_storeDrId >> (i-1)) & 0x01 ) // if ( Guc_TLMh_DrEmpty[i] == 0 && Guc_TLMh_DrWrite[i] == 0 ) { i_DrNum = i; break; } // ***CHECK!:Normal-H-mode --- EMPTY&WRITE flag change if ( Guc_TLMh_DrEmpty[i] == 0 ) { i_DrNum = i; break; } // ***CHECK!:Normal-H-mode --- EMPTY flag change ***CHANGE!!!*** } if (i_DrNum == 0 && Guc_TLMh_storeDrOvw) { for (i=1; i<6; i++) { if ( (Guc_TLMh_storeDrId >> (i-1)) & 0x01 ) { if ( Guc_TLMh_DrOvw[i] == 1 ) if ( ui_DRscore > Gui_TLMh_DrScore[i] ) { i_DrNum = i; ui_DRscore = Gui_TLMh_DrScore[i]; } // Lowest score search? } } if ( Gui_TRG_ScoreTotal <= Gui_TLMh_DrScore[i_DrNum] ) { i_DrNum = 0; return(3); // No vacant DR sector - OVW } } if (i_DrNum == 0) { Gui_TRG_ScoreTotal = Gui_TRG_TiStart = Gui_TRG_TiEnd = 0; // Trigger-OFF Guc_TLMh_storeId1 = Guc_TLMh_storeId2 = Guc_TLMh_storeDrId = Guc_TLMh_storeDrOvw = Guc_TLMh_storeTimePre = Guc_TLMh_storeTimeLen = 0; return(4); // No vacant DR sector } // 4. IF TI == TRG-TI0end --> TI-DUMP-CMD set if ( Gui_TRG_TiEnd <= Gui_TRG1_SpTI[0] && Gui_TRG_TiEnd > 0 ) return(5); // ****************************** // ***** Start TRIGGER DUMP ***** // ****************************** // # (usage) MD1U_TLMH_TRG_STRT (SEL-DPU1) (SEL-DPU2) (DR-ID) (TI-PRE) (TI-LEN) // # SEL1/SEL2 Data select DPU1 DPU2 // # b0 MEA1 MGFI // # b1 MEA2 ---- // # b2 MIA ---- // # b3 MSA EWOE // # b4 HEPE ---- // # b5 HEPI EFD // # b6 ---- EWOB // # b7 MGFO SOR // # DR-ID b7 OverWrite to Lowest-SCORsE (ENA:1 DIS:0) // # b0-4 Used Dr-ID (ENA:1 DIS:0) // # TI-PRE(* 4sec) Data start-time before the trigger [0xFF: All data at the latch] // # TI-AFT(* 4sec) Data end-time after the trigger [0xFF: All data in the SDRAM] // Guc_TLMh_storeId1 = uc_Data[0]; // Guc_TLMh_storeId2 = uc_Data[1]; // Guc_TLMh_storeDrId = (uc_Data[2] >> 1) & 0x1F; // Guc_TLMh_storeDrOvw = (uc_Data[2] & 0x01); // Guc_TLMh_storeTimePre = uc_Data[3]; // Guc_TLMh_storeTimeLen = uc_Data[4]; // -- set -- // -- set -- // -- set -- Gui_TLMh_DrTI [i_DrNum] = Gui_TRG_TiEnd; Gui_TLMh_DrScore[i_DrNum] = Gui_TRG_ScoreTotal; Gui_TRG_ScoreTotal = 0; M_T_TIME_INFO t_timeInfo; i_flag = dpu_getTime( &t_timeInfo ); Gus_TLMh_TIstart = t_timeInfo.ui_currentTime2 - Gui_TRG_TiStart; // 連携用 Gus_TLMh_TIlength = Gui_TRG_TiEnd - Gui_TRG_TiStart; // 連携用 if (Guc_dpuNo==0) { for (i = Gd_N_MEA1; i<=Gd_N_MGFO; i++) { i_flag = app_TlmH_Dump_each( Guc_TLMh_storeId1, i, 0, i_DrNum, Gus_TLMh_TIstart, Gus_TLMh_TIlength); } Guc_TLMh_storeId = Guc_TLMh_storeId2; // 連携用 -- to DPU2 } if (Guc_dpuNo==1) { i_flag = app_TlmH_Dump_each( Guc_TLMh_storeId2, Gd_N_MGFI, 0, i_DrNum, Gus_TLMh_TIstart, Gus_TLMh_TIlength); for (i=0; i<=3; i++) { i_flag = app_TlmH_Dump_each( Guc_TLMh_storeId2, Gd_N_EWO, i, i_DrNum, Gus_TLMh_TIstart, Gus_TLMh_TIlength); } Guc_TLMh_storeId = Guc_TLMh_storeId1; // 連携用 -- to DPU1 } if ( Gi_shareStatus == 1 ) Guc_TLMh_DrNum = i_DrNum + 0x80; // 連携用 -- DR: 1-5 return(0); } int app_TlmH_Dump_each( unsigned char uc_TLMh_Id, unsigned char uc_nodeId, unsigned char uc_dataId, unsigned char uc_DrNum, unsigned short us_TiStart, unsigned short us_TiLen ) // unsigned char app01_TlmH_Dump ( unsigned char uc_nodeId, // unsigned char uc_dataId, // unsigned char uc_drID, // unsigned short us_TIstart, // unsigned short us_TIlen) { int i; int i_flag = 0; if ( uc_nodeId == Gd_N_ENA || uc_nodeId == Gd_N_MDM || uc_nodeId == Gd_N_MSAS || uc_nodeId == Gd_N_AM2P ) return(-1); if (Guc_dpuNo==0) i = (0x01 << (uc_nodeId - Gd_N_MEA1)); else { i = (0x01 << (uc_nodeId - Gd_N_MGFI)); if ( uc_dataId ) i = (0x08 << (uc_dataId) ); } if (uc_TLMh_Id & i) i_flag = app01_TlmH_Dump( uc_nodeId, uc_dataId, uc_DrNum, us_TiStart, us_TiLen); return ( i_flag ); } // =========================================================================== // int app_TRG_ScoreDumpStart_another(uc_TrgDump) **** Triggerによる別DPUでのH-DUMP開始 **** // =========================================================================== void app_TRG_ScoreDumpStart_another( unsigned char uc_TrgDump, unsigned char uc_DrNum, unsigned short us_TiStart, unsigned short us_TiLen ) { int i; int i_flag; int i_Hena = 0; for (i=0; i<0x13; i++) i_Hena += Guc_TLMh_enadis[i]; if ( i_Hena ) { // H-ENA in This DPU // (Guc_TLMh_DrNum & 0xC0) ) { // H-ENA in Another DPU Guc_TLMh_storeId = Gus_TLMh_TIstart = Gus_TLMh_TIlength = 0; Guc_TLMh_DrNum = (Guc_TLMh_DrNum & 0x1F) + 0x20; // During H-mode enable (during DUMP) return; } // -- set -- Gui_TLMh_DrTI [uc_DrNum] = Gui_TRG_TiEnd; Gui_TLMh_DrScore[uc_DrNum] = 0xFFFFFFFF; if (Guc_dpuNo==0) { for (i = Gd_N_MEA1; i<=Gd_N_MGFO; i++) { i_flag = app_TlmH_Dump_each( uc_TrgDump, i, 0, uc_DrNum, us_TiStart, us_TiLen ); } } else { i_flag = app_TlmH_Dump_each( uc_TrgDump, Gd_N_MGFI, 0, uc_DrNum, us_TiStart, us_TiLen ); for (i=0; i<=3; i++) { i_flag = app_TlmH_Dump_each( uc_TrgDump, Gd_N_EWO, i, uc_DrNum, us_TiStart, us_TiLen ); } } return; } // [0300] MD?U_TlmH_Dump // (N-ID [FF:all-exceptEWO, F0:EWO-E/B/EFD 00:cancel]) // (D-ID) // (DR:0-5) 0:CAL etc 1-5:Sync Trigger // (TI-BEFOUR[2]) FFFF: from OLDEST 0000: LATEST block/packet) // (TI-LEN[2]) 0000:1-packet 0001:1-block FFFF:All // // during DUMP BUF: SHORT // after DUMP BUF: LONG // unsigned char app01_TlmH_Dump ( unsigned char uc_nodeId, // unsigned char uc_dataId, // unsigned char uc_drID, // unsigned int ui_TIstart, // unsigned int ui_TIlen) // =========================================================================== // void app_TRG_cntl **** Trigger時におけるDPU1-2連携 **** // =========================================================================== void app_TRG_cntl( unsigned char uc_TLMh_DrNum, unsigned char uc_DrEmpty, unsigned char uc_TLMh_storeId, unsigned short us_TLMh_TIstart, unsigned short us_TLMh_TIlength ) { int i; int i_flag; unsigned char uc_DrNum; M_T_TIME_INFO t_timeInfo; // unsigned int ui_currentTime; :衛星時刻(1LSB=1.953ms) // unsigned int ui_currentTime2; :衛星時刻(1LSB=31.25ms) // unsigned int ui_sunpulseTime; :SUNPULSE 受信時刻(1LSB=1.953ms) i_flag = dpu_getTime( &t_timeInfo ); // ==== MASTER mode ==== // ==== MASTER mode ==== // ==== MASTER mode ==== if ( Guc_TLMh_ScoreLen ) { uc_DrNum = Guc_TLMh_DrNum & 0x1F; if ( uc_TLMh_DrNum & 0x40 ) { Guc_TLMh_DrNum = ( uc_DrNum & 0x1F ) + 0x40; // --- TRG-DUMP TRIGGER-STOP // ****CMD to another DPU**** // Master->Slave Slave->Master // b0-4 DR1-5 --> (answer back) 0x1F // b5 <-- 1:finish 0x20 // b6 --- <-- 1:Going 0x40 // b7 1:Start --> [Start] 0x80 Guc_TLMh_DrWrite[ uc_DrNum ] = 1; Gui_TRG_TiLAST = t_timeInfo.ui_currentTime2 + 0x80; } if ( uc_TLMh_DrNum & 0x20 ) { Guc_TLMh_storeId = Gus_TLMh_TIstart = Gus_TLMh_TIlength = 0; // --- TRG-DUMP CLEAR Guc_TLMh_DrNum &= 0x1F; Guc_TLMh_DrWrite[ uc_DrNum ] = 0; Guc_TLMh_DrEmpty[ uc_DrNum ] = 1; } return; } // ==== SLAVE mode ==== // ==== SLAVE mode ==== // ==== SLAVE mode ==== uc_DrNum = uc_TLMh_DrNum & 0x1F; if ( uc_TLMh_DrNum & 0x80 ) { Gui_TRG_TiStart = t_timeInfo.ui_currentTime2 - us_TLMh_TIstart - 0x100; // --- TIME-DELAY correction (2 spin) Gui_TRG_TiEnd = Gui_TRG_TiStart + us_TLMh_TIlength; app_TRG_ScoreDumpStart_another( uc_TLMh_storeId, uc_DrNum, us_TLMh_TIstart, us_TLMh_TIlength ); // --- TRG-DUMP START Guc_TLMh_DrNum = uc_DrNum + 0x40; } else if ( uc_TLMh_DrNum & 0x70 ) { i_flag = 0; for (i=0; i<0x13; i++) i_flag += Guc_TLMh_enadis[i]; if ( i_flag==0 ) { Guc_TLMh_storeId = Gus_TLMh_TIstart = Gus_TLMh_TIlength = 0; Guc_TLMh_DrNum = uc_DrNum + 0x20; // --- TRG-DUMP STOP } } else { Guc_TLMh_storeId = Gus_TLMh_TIstart = Gus_TLMh_TIlength = 0; // --- TRG-DUMP END Guc_TLMh_DrNum = uc_DrNum; } } // // ---------APP operation-------- // void app_START( unsigned char uc_appNum, // [INPUT] Application番号 unsigned int * ui_load ) // LOAD { M_T_TIME_INFO t_timeInfo; // unsigned int ui_currentTime; :衛星時刻(1LSB=1.953ms) // unsigned int ui_currentTime2; :衛星時刻(1LSB=31.25ms) int i_flag; if (uc_appNum > 6) return; // WDT-ENA if (Guc_WDTena) { dpu_setWDT( 800 ); dpu_WDTEna(1); } else dpu_WDTEna(0); // WDT: ENA(64sec) / DIS i_flag = dpu_getTime( &t_timeInfo ); // (no return) // OVERFLOW: 125msec interval -- 8cnt if ( uc_appNum == 0 ) { if ( t_timeInfo.ui_currentTime2 - Gui_hkApp_time[0] > 7 && Gui_hkApp_time[0] > 0 ) Gus_hkApp_overflow[0] ++; // OVERFLOW: 1sec interval -- 36cnt (1.125sec) } else if ( uc_appNum == 1 ) { if ( t_timeInfo.ui_currentTime2 - Gui_hkApp_time[1] > 35 && Gui_hkApp_time[1] > 0 ) Gus_hkApp_overflow[1] ++; // OVERFLOW: 4-5sec interval -- 160cnt ( } else if ( uc_appNum < 6 ) { if ( t_timeInfo.ui_currentTime2 - Gui_hkApp_time[uc_appNum] > 160 && Gui_hkApp_time[uc_appNum] > 0 ) Gus_hkApp_overflow[uc_appNum] ++; } Gus_hkApp_overflow[uc_appNum] &= 0x0F; Gus_hkApp_overflow[uc_appNum] += (t_timeInfo.ui_currentTime2 - Gui_hkApp_time[uc_appNum])<<4; Gui_hkApp_time [uc_appNum] = t_timeInfo.ui_currentTime2; // LSB:32msec * ui_load = t_timeInfo.ui_currentTime2; // LSB:32msec } // // ---------APP operation-------- // void app_END( unsigned char uc_appNum, // [INPUT] Application番号 unsigned int * ui_load ) // LOAD { M_T_TIME_INFO t_timeInfo; // unsigned int ui_currentTime; :衛星時刻(1LSB=1.953ms) // unsigned int ui_currentTime2; :衛星時刻(1LSB=31.25ms) int i_flag; if (uc_appNum > 6) return; i_flag = dpu_getTime( &t_timeInfo ); if (t_timeInfo.ui_currentTime2 >= *ui_load) Gui_hkApp_load[uc_appNum] = t_timeInfo.ui_currentTime2 - *ui_load; // LSB:32msec if (Gui_hkApp_load[uc_appNum] > Gui_hkApp_loadPeak[uc_appNum]) Gui_hkApp_loadPeak[uc_appNum] = Gui_hkApp_load[uc_appNum]; // LSB:32msec Gui_hkApp_counter[uc_appNum] ++; } // // ---------APP operation ****TMP**** -------- // unsigned int app_MONITOR( unsigned char uc_appNum, // APL-NUM unsigned char uc_nodeId, // NodeID unsigned int ui_time0, // Last TI unsigned int * ui_time ) // Current TI { M_T_TIME_INFO t_timeInfo; // unsigned int ui_currentTime; :衛星時刻(1LSB=1.953ms) // unsigned int ui_currentTime2; :衛星時刻(1LSB=31.25ms) int i_flag; i_flag = dpu_getTime( &t_timeInfo ); *ui_time = t_timeInfo.ui_currentTime2; if (uc_nodeId==0) return ( 0 ); i_flag = *ui_time - ui_time0; if ( uc_appNum>1 ) { if (i_flag > 0x3FF) Guc_hkApp_loadNID[uc_nodeId] = 0xFF; else Guc_hkApp_loadNID[uc_nodeId] = (i_flag << 2); } else { if (i_flag > 0xFF) Guc_hkApp_loadNID[uc_nodeId] = 0xFF; else Guc_hkApp_loadNID[uc_nodeId] = i_flag; } if ( Guc_hkApp_loadNID[uc_nodeId] > Guc_hkApp_loadNIDmax[uc_nodeId] ) Guc_hkApp_loadNIDmax[uc_nodeId] = Guc_hkApp_loadNID[uc_nodeId]; if ( uc_appNum<2 ) { if ( Guc_hkApp_who2[uc_appNum] < i_flag ) { Gui_hkApp_load2[uc_appNum] = i_flag; Guc_hkApp_who2 [uc_appNum] = uc_nodeId; } } return ( i_flag ); // LSB:32msec }