/******************************************************************************* * モジュール名称 :アプリケーション02 - HK read & anaylses - EWO * * 参考 : app02_DPU.c を参照 * * 注意 : EDIT権限は、EWO組 * * 作成日・作成者 :2018/1/12 Y. Kasaba * *******************************************************************************/ #define __APP_WFC_OFA__ #define __APP_WFC_AM2P__ #include "app_common.h" #include "dpu_api_proto.h" // rev. by Y.K. #include "app_EWO.h" #define d_SIZEhk_EWO 0x54 // HW-HK size: 83B (0x53) // void app02_EWOE_freq_set( unsigned char param ); void app02_EWOE_input_set( unsigned char param ); void app02_EWOE_gain_set( unsigned char param ); void app02_EWO_WPTP_gain_set( unsigned char param ); void app02_EWO_MEF_mode_set( unsigned char *param ); void app02_EWO_MEF_BIAS_set( unsigned char *param, unsigned char sensor ); void app02_EWO_relay_init(); void app02_EWO_AM2P_set(); void app02_EWO_AM2P(); void app02_EWO_CAL(); void app02_EWO_AGC( unsigned char uc_OFA_EB, // EWO-E: Gd_EWO_OFA_E, EWO-B: Gd_EWO_OFA_B char *u_act, // 0:NOP, 1:Gain up, -1:Gain down unsigned char *uc_HK // HK ); // ******************************************************************** // *** EWO : HK analyses, HW CMD production, HK packet production *** // ******************************************************************** int app02_EWO ( unsigned char uc_dataHK[], unsigned int ui_counter, unsigned char uc_link) { // unsigned char uc_dpuSwHk[0x100]; // ----- corrected by YK: G2uc_packetに差し替え ----- int i_dpuSwHK_size = 0; unsigned char uc_cmdbuff[3]; int i; int i_flag = 0; // ************************* // *** CMD Actions *** // ************************* if ( G1uc_EWO_E2PROM ) { if ( G1uc_EWO_E2PROM == 0x01) { // EWO: E2PROM operation: 1:start -> EFD-LPF(1) // ROM read: EFD-LPF(1) [EFD-ROM領域: 先頭から0, size:160B) TOTAL:260B i_flag = app_readROM( Gd_EWOEFD_RomAdr, 160, G2uc_packet); // ----- corrected by YK: G2uc_packetに差し替え ----- // // MEM-LOAD: 0x800F1000 から 230Byte i_flag = app_PiMemLoad( Gd_N_EWO, 0x800F1000, G2uc_packet, 160 ); // ----- corrected by YK: G2uc_packetに差し替え ----- // G1uc_EWO_E2PROM = 0x02; } else if ( G1uc_EWO_E2PROM == 0x02) { // EWO: E2PROM operation: 2:EFD-LPF(1) -> EFD-LPF(2) // ROM read: EFD-LPF(2) [EFD-ROM領域: 先頭から160, size:100B) TOTAL:260B i_flag = app_readROM( Gd_EWOEFD_RomAdr+160, 100, G2uc_packet); // ----- corrected by YK: G2uc_packetに差し替え ----- // // MEM-LOAD: 0x800F1000+230から 30Byte i_flag = app_PiMemLoad( Gd_N_EWO, 0x800F1000+160, G2uc_packet, 100 ); // ----- corrected by YK: G2uc_packetに差し替え ----- // G1uc_EWO_E2PROM = 0x03; } else if ( G1uc_EWO_E2PROM == 0x03) { // EWO: E2PROM operation: 3:EFD-LPF(2) -> SWEEP // ROM read: EFD-SWEEP [EFD-ROM領域: 先頭から388, size:64B) [TBL:0/1/2/3] i_flag = app_readROM( Gd_EWOEFD_RomAdr+260 + Guc_EFD_SweepTbl*64, 64, &(G2uc_packet[2]) ); // ----- corrected by YK: G2uc_packetに差し替え ----- Guc_EFD_SweepTbl_sum = 0; for (i=2; i<66; i++) Guc_EFD_SweepTbl_sum += G2uc_packet[i]; // *** rev 121227 by Y.K. *** G2uc_packet[0x00] = 0x20; G2uc_packet[0x01] = 0x10; // ----- corrected by YK: G2uc_packetに差し替え ----- i_flag = app_PiCmd( Gd_N_EWO, G2uc_packet, 66 ); // ----- corrected by YK: G2uc_packetに差し替え ----- // G1uc_EWO_E2PROM = 0x04; } else if ( G1uc_EWO_E2PROM == 0x04) { // EWO: E2PROM operation: 4:EFD-SWEEP -> EWOB-LPF(1) // ROM read: EWOB-LPF [EWOB-ROM領域: 先頭から0, size:104B) TOTAL:204B i_flag = app_readROM( Gd_EWO_RomAdr, 104, G2uc_packet); // ----- corrected by YK: G2uc_packetに差し替え ----- // // MEM-LOAD: 0x800F0000 から 204Byte i_flag = app_PiMemLoad( Gd_N_EWO, 0x800F0000, G2uc_packet, 104 ); // ----- corrected by YK: G2uc_packetに差し替え ----- // G1uc_EWO_E2PROM = 0x05; } else if ( G1uc_EWO_E2PROM == 0x05) { // EWO: E2PROM operation: 5:EFD-LPF(1) -> EWOB-LPF(2) // ROM read: EWOB-LPF [EWOB-ROM領域: 先頭から104, size:100B) TOTAL:204B i_flag = app_readROM( Gd_EWO_RomAdr+104, 100, G2uc_packet); // ----- corrected by YK: G2uc_packetに差し替え ----- // // MEM-LOAD: 0x800F0000 から 204Byte i_flag = app_PiMemLoad( Gd_N_EWO, 0x800F0000+104, G2uc_packet, 100 ); // ----- corrected by YK: G2uc_packetに差し替え ----- // G1uc_EWO_E2PROM = 0x06; } else if ( G1uc_EWO_E2PROM == 0x06) { // EWO: E2PROM operation: 6:EWOB-LPF(2) -> Hungary-table // ROM read: Hungary [EFD-ROM領域: 先頭から204, size:5048B -> 74B) //i_flag = app_readROM( Gd_EWO_RomAdr+204, 5048, Guc_EWO_ISDM_tbl); i_flag = app_readROM( Gd_EWO_RomAdr+204, 74, Guc_EWO_ISDM_tbl); // サイズ変更 2012.11.27 Imachi memcpy( G14uc_ISDM_table, Guc_EWO_ISDM_tbl, 74 ); // コマンドからの書き換えを想定したバッファにコピー 2012.11.27 Imachi // G1uc_EWO_E2PROM = 0x07; } else if ( G1uc_EWO_E2PROM == 0x07) { // EWO: Hardware init: 1: EWO_SCAL_ALL_OFF uc_cmdbuff[0] = 0x23; uc_cmdbuff[1] = 0x01; uc_cmdbuff[2] = 0x00; i_flag = app_PiCmd( Gd_N_EWO, uc_cmdbuff, 3 ); G1uc_EWO_E2PROM = 0x08; } else if ( G1uc_EWO_E2PROM == 0x08) { // EWO: Hardware init: 2: EWO_WPTP_L_SEL uc_cmdbuff[0] = 0x24; uc_cmdbuff[1] = 0x02; uc_cmdbuff[2] = 0x00; i_flag = app_PiCmd( Gd_N_EWO, uc_cmdbuff, 3 ); G1uc_EWO_E2PROM = 0x09; } else if ( G1uc_EWO_E2PROM == 0x09) { // EWO: Hardware init: 3: EWO_WPTP_IMP_H_SEL uc_cmdbuff[0] = 0x24; uc_cmdbuff[1] = 0x03; uc_cmdbuff[2] = 0x03; i_flag = app_PiCmd( Gd_N_EWO, uc_cmdbuff, 3 ); G1uc_EWO_E2PROM = 0x0A; } else if ( G1uc_EWO_E2PROM == 0x0A) { // EWO: Hardware init: 4: EWO_WPTP_BIAS_SEL uc_cmdbuff[0] = 0x24; uc_cmdbuff[1] = 0x04; uc_cmdbuff[2] = 0x02; i_flag = app_PiCmd( Gd_N_EWO, uc_cmdbuff, 3 ); // オーバライドコマンド初期値実行 Guc_EWOE_freq = 0x00; // 65kHz sample Guc_EWOE_freq_set = 1; Guc_EWOE_input = 0x04; // Diff Guc_EWOE_input_set = 1; Guc_EWOE_gain = 0x01; // Low gain Guc_EWOE_gain_set = 1; Guc_EWO_WPTP_gain = 0x00; // Low gain Guc_EWO_WPTP_gain_set = 1; Guc_EWO_MEF_mode[0] = 0x21; // +6dB, signal off Guc_EWO_MEF_mode[1] = 0x1a; Guc_EWO_MEF_mode_set = 1; Guc_EWO_MEF_BIAS1[0] = 0x80; // 0V, BIAS and GUARD Guc_EWO_MEF_BIAS1[1] = 0x00; Guc_EWO_MEF_BIAS1[2] = 0x80; Guc_EWO_MEF_BIAS1_set = 1; Guc_EWO_MEF_BIAS2[0] = 0x80; // 0V, BIAS and GUARD Guc_EWO_MEF_BIAS2[1] = 0x00; Guc_EWO_MEF_BIAS2[2] = 0x80; Guc_EWO_MEF_BIAS2_set = 1; // モードプリセット値初期化 Guc_AM2P_EWOE_freq = Guc_EWOE_freq; Guc_AM2P_EWOE_input = Guc_EWOE_input; Guc_AM2P_EWOE_gain = Guc_EWOE_gain; Guc_AM2P_WPTP_gain = Guc_EWO_WPTP_gain; memcpy( Guc_AM2P_MEF_mode, Guc_EWO_MEF_mode, 2 ); memcpy( Guc_AM2P_MEF_BIAS1, Guc_EWO_MEF_BIAS1, 3 ); memcpy( Guc_AM2P_MEF_BIAS2, Guc_EWO_MEF_BIAS2, 3 ); G1uc_EWO_E2PROM = 0x0B; } else { G1uc_EWO_E2PROM = 0x00; } } /* 2013.03.18 E2PROM operation へ移動 (T.Imachi) // === EWO リレー初期化,エラーフラグ解除 === i_flag = 0; if( G1uc_EWO_relay_init != 0 ){ app02_EWO_relay_init(); G1uc_EWO_relay_init = 0; i_flag = 1; // オーバライドコマンド初期値実行 Guc_EWOE_freq = 0x00; // 65kHz sample Guc_EWOE_freq_set = 1; Guc_EWOE_input = 0x04; // Diff Guc_EWOE_input_set = 1; Guc_EWOE_gain = 0x01; // Low gain Guc_EWOE_gain_set = 1; Guc_EWO_WPTP_gain = 0x00; // Low gain Guc_EWO_WPTP_gain_set = 1; Guc_EWO_MEF_mode[0] = 0x21; // +6dB, signal off Guc_EWO_MEF_mode[1] = 0x1a; Guc_EWO_MEF_mode_set = 1; Guc_EWO_MEF_BIAS1[0] = 0x80; // 0V, BIAS and GUARD Guc_EWO_MEF_BIAS1[1] = 0x00; Guc_EWO_MEF_BIAS1[2] = 0x80; Guc_EWO_MEF_BIAS1_set = 1; Guc_EWO_MEF_BIAS2[0] = 0x80; // 0V, BIAS and GUARD Guc_EWO_MEF_BIAS2[1] = 0x00; Guc_EWO_MEF_BIAS2[2] = 0x80; Guc_EWO_MEF_BIAS2_set = 1; // モードプリセット値初期化 Guc_AM2P_EWOE_freq = Guc_EWOE_freq; Guc_AM2P_EWOE_input = Guc_EWOE_input; Guc_AM2P_EWOE_gain = Guc_EWOE_gain; Guc_AM2P_WPTP_gain = Guc_EWO_WPTP_gain; memcpy( Guc_AM2P_MEF_mode, Guc_EWO_MEF_mode, 2 ); memcpy( Guc_AM2P_MEF_BIAS1, Guc_EWO_MEF_BIAS1, 3 ); memcpy( Guc_AM2P_MEF_BIAS2, Guc_EWO_MEF_BIAS2, 3 ); } */ // === System command override === if( Guc_EWOE_freq_set != 0 ) app02_EWOE_freq_set( Guc_EWOE_freq ); if( Guc_EWOE_input_set != 0 ) app02_EWOE_input_set( Guc_EWOE_input ); if( Guc_EWOE_gain_set != 0 ) app02_EWOE_gain_set( Guc_EWOE_gain ); if( Guc_EWO_WPTP_gain_set != 0 ) app02_EWO_WPTP_gain_set( Guc_EWO_WPTP_gain ); if( Guc_EWO_MEF_mode_set != 0 ) app02_EWO_MEF_mode_set( Guc_EWO_MEF_mode ); if( Guc_EWO_MEF_BIAS1_set != 0 ) app02_EWO_MEF_BIAS_set( Guc_EWO_MEF_BIAS1, 0 ); if( Guc_EWO_MEF_BIAS2_set != 0 ) app02_EWO_MEF_BIAS_set( Guc_EWO_MEF_BIAS2, 1 ); // === EFD SWEEP-TBL load === if( G1uc_EFD_Sweep_Load != 0 ){ // ROM read: EFD-SWEEP [EFD-ROM領域: 先頭から388, size:64B) [TBL:0/1/2/3] i_flag = app_readROM( Gd_EWOEFD_RomAdr+260 + Guc_EFD_SweepTbl*64, 64, &(G2uc_packet[2]) ); // ----- corrected by YK: G2uc_packetに差し替え ----- Guc_EFD_SweepTbl_sum = 0; for (i=2; i<66; i++) Guc_EFD_SweepTbl_sum += G2uc_packet[i]; // *** rev 121227 by Y.K. *** G2uc_packet[0x00] = 0x20; G2uc_packet[0x01] = 0x10; // ----- corrected by YK: G2uc_packetに差し替え ----- i_flag = app_PiCmd( Gd_N_EWO, G2uc_packet, 66 ); // ----- corrected by YK: G2uc_packetに差し替え ----- G1uc_EFD_Sweep_Load = 0; } // === AM2P TC word set === if( G14s_AM2P_TCWord_reserve != -1 ){ // -1 = 0xffff // AM2P が停止状態になるのを待って書き換え if( G14uc_AM2P_stage == 0 ){ G14s_AM2P_TCWord = G14s_AM2P_TCWord_preset = G14s_AM2P_TCWord_reserve; G14uc_AM2P_shift = G14uc_AM2P_shift_preset = G14uc_AM2P_shift_reserve; app02_EWO_AM2P_set(); // Initialize G14s_AM2P_TCWord_reserve = 0xffff; G14uc_AM2P_shift_reserve = 0xff; } } // === AM2P 定期実行 === // Suspend if( G14uc_AM2P_suspend == 0 ){ // 2013.08.12 Imachi G14ui_AM2P_interval = G14ui_AM2P_interval_preset; G14s_AM2P_TCWord = G14s_AM2P_TCWord_preset; G14uc_AM2P_shift = G14uc_AM2P_shift_preset; } else{ // AM2P 処理シーケンス中は、インターバルを0にしない if( G14uc_AM2P_stage == 0 || G14uc_AM2P_stage > 6 ){ G14ui_AM2P_interval = 0; } } // Disable if( G14uc_AM2P_disable != 0 ){ // AM2P 処理シーケンス中は、インターバルを0にしない if( G14uc_AM2P_stage == 0 || G14uc_AM2P_stage > 6 ){ // G14uc_AM2P_interval = 0; G14ui_AM2P_interval = 0; G14ui_AM2P_interval_preset = 0; // 2013.08.12 Imachi G14uc_AM2P_disable = 0; } } // One shot // if( G14uc_AM2P_interval == 0xff ){ if( G14ui_AM2P_interval == 0xffff ){ G14uc_AM2P_stage = 2; // AM2P observation G14uc_AM2P_disable = 1; // AM2P disable フラグを立てる // G14uc_AM2P_interval = 0xfe; // インターバルを一時的に 0xfe にする G14ui_AM2P_interval = 0xfffe; // インターバルを一時的に 0xfffe にする G14ui_AM2P_interval_preset = 0xfffe; // 2013.08.12 Imachi } // === AM2P 自動処理 === // インターバルが0の時は disable とみなす。 // ただしステージが7以上の場合は強制実行 // if( G14uc_AM2P_ready == 1 && // ( G14uc_AM2P_interval != 0 || G14uc_AM2P_stage > 6 ) ){ if( G14uc_AM2P_ready == 1 && ( G14ui_AM2P_interval != 0 || G14uc_AM2P_stage > 6 ) ){ app02_EWO_AM2P(); } // === WFC CAL === if(G14uc_WFC_CAL_ready == 1){ app02_EWO_CAL(); } // === AGC === app02_EWO_AGC( Gd_EWO_OFA_E, &G13c_EWO_WFCE_AGC_act, uc_dataHK ); app02_EWO_AGC( Gd_EWO_OFA_B, &G13c_EWO_WFCB_AGC_act, uc_dataHK ); // ************************* // *** HW HK analyses *** // ************************* if ( uc_link ) { // -------------- // --- HW-ON --- // -------------- // STATUS-variable: for SOR & EFD // EFD SOR // b7 (Guc_AM2P_act:0-dis 1-ena ---) // b6 EFD-DPB-L 0:8Hz 1:4Hz Guc_AM2P_act:0-dis 1-ena // b5 (MEF-CAL B19 b7 MEF-CAL B19 b7) // b4 (MEF-Pre-PWR B19 b6 MEF-BIAS B19 b6) // b3 WPT-SlowSweep MEF-GAIN B19 b3 // b2 WPT-Bias & Loop B0 b6 / B1 b7 WPT-CAL // b1 WPT-Cal B0 b3 WPT-BIAS // b0 WPT-Pre-PWR B0 b1 WPT-GAIN B0 b2 if ( Guc_EFD_mode & 0x10 ) {Guc_EFD_data_status |= 0x40; } else { Guc_EFD_data_status &= 0xBF; } if ( G14uc_AM2P_stage==4 ) { Guc_SOR_data_status |= 0x40; } // AM2P else { Guc_SOR_data_status &= 0xBF; } if ( Guc_EFD_SlowSweep ) { Guc_EFD_data_status |= 0x08; } // SlowSweep // 20180112 else { Guc_EFD_data_status &= 0xF7; } // 20180112 if ((uc_dataHK[0]& 0x40) && (uc_dataHK[1]& 0x80 )) { Guc_EFD_data_status |= 0x04; Guc_SOR_data_status |= 0x02; } // WPT-BIAS B0 b6 / WPT-LOOP B1 b7 // 20180112 else { Guc_EFD_data_status &= 0xFB; Guc_SOR_data_status &= 0xFD; } if ( uc_dataHK[0]& 0x08) { Guc_EFD_data_status |= 0x02; Guc_SOR_data_status |= 0x04; } // WPT-CAL B0 b3 else { Guc_EFD_data_status &= 0xFD; Guc_SOR_data_status &= 0xFB; } if ( uc_dataHK[0]& 0x04) { Guc_SOR_data_status |= 0x01; } // WPT-GAIN B0 b2 else { Guc_SOR_data_status &= 0xFE; } if ( uc_dataHK[0]& 0x02) { Guc_EFD_data_status |= 0x01; } // WPT-PRE B0 b1 else { Guc_EFD_data_status &= 0xFE; } Guc_EFD_Bias1 = uc_dataHK[3]; Guc_EFD_Bias2 = uc_dataHK[4]; } else { // -------------- // --- HW-OFF --- // -------------- // STATUS-variable: for SOR & EFD Guc_SOR_data_status = 0; Guc_EFD_data_status = 0; Guc_EFD_Bias1 = 0; Guc_EFD_Bias2 = 0; } // ************************* // *** SW/HK production *** // ************************* if ( uc_link ) { // -------------- // --- HW-ON --- // -------------- G2uc_packet[0] = ( ( G13uc_WFC_OFA_interval & 0x03 ) << 6 ) // EWO_WFC_OFA_INTERVA | ( ( G13uc_WFCE_L_channel & 0x03 ) << 4 ) // EWO_WFCE_OFAL_CH | ( ( G13uc_WFCE_M1_channel & 0x03 ) << 2 ) // EWO_WFCE_OFAM_CH1 | ( ( G13uc_WFCE_M2_channel & 0x03 ) ); // EWO_WFCE_OFAM_CH2 G2uc_packet[1] = ( ( G13uc_WFCB_L_channel & 0x03 ) << 6 ) // EWO_WFCB_OFAL_CH | ( ( G13uc_WFCB_M1_channel & 0x07 ) << 3 ) // EWO_WFCB_OFAM_CH1 | ( ( G13uc_WFCB_M2_channel & 0x07 ) ); // EWO_WFCB_OFAM_CH2 G2uc_packet[2] = ( ( G14uc_AM2P_stage & 0x0f ) << 4 ) // EWO_WFC_AM2P_STAGE | ( G14uc_WFC_CAL_stage & 0x0f ); // EWO_WFC_CAL_STAGE G2uc_packet[3] = (unsigned char)( G14s_AM2P_TCWord >> 8 ); // EWO_WFC_AM2P_TCWORD[0] G2uc_packet[4] = (unsigned char)( G14s_AM2P_TCWord & 0xff ); // EWO_WFC_AM2P_TCWORD[1] G2uc_packet[5] = ( ( G14uc_WFCE_VL_ch & 0x03 ) << 6 ) // EWO_WFCE_VL_STAT | ( ( G14uc_WFCB_VL_ch & 0x07 ) << 3 ) // EWO_WFCB_VL_STAT | ( ( Guc_TLMh_cmp[Gd_N_EWOE] & 0x01 ) << 2 ) // EWO_WFCH_COMP_STAT | ( ( Guc_EWO_WFCH_stat & 0x03 ) ); // EWO_WFCH_STAT G2uc_packet[6] = (unsigned char)( G5ui_EWO_WFCH_prec & 0xff ); // EWO_WFCH_PREC; G2uc_packet[7] = ( ( Guc_TLMm_cmp[Gd_N_EWOE] & 0x03 ) << 6 ) // EWO_WFC_ISDM_ENADIS | ( ( G14uc_WFC_MDM_eve_ena & 0x01 ) << 4 ) // EWO_WFC_MDM_ENADIS | ( ( G14uc_WFC_MDM_eve_cnt & 0x0f ) ); // EWO_WFC_MDM_CNT G2uc_packet[8] = (unsigned char)( (G14ui_AM2P_interval_preset & 0xff00 ) >> 8 ); // EWO_AM2P_INT // 2013.08.12 Imachi G2uc_packet[9] = (unsigned char)( G14ui_AM2P_interval_preset & 0xff ); // EWO_AM2P_INT // 2013.08.12 Imachi G2uc_packet[10] = (unsigned char)( (G14ui_WFC_VL_interval & 0xff00 ) >> 8 ); // EWO_WFC_VL_INT G2uc_packet[11] = (unsigned char)( G14ui_WFC_VL_interval & 0xff ); // EWO_WFC_VL_INT G2uc_packet[12] = (unsigned char)( (G14ui_ISDM_interval & 0xff00 ) >> 8 ); // EWO_ISDM_INT G2uc_packet[13] = (unsigned char)( G14ui_ISDM_interval & 0xff ); // EWO_ISDM_INT G2uc_packet[14] = G13uc_EWO_AGC_interval; // EWO_WFC_AGC_INT G2uc_packet[15] = ( ( G5uc_WFCE_H_ch & 0x03 ) << 6 ) // EWO_WFCE_H_STAT | ( ( G5uc_WFCB_H_ch & 0x07 ) << 3 ) // EWO_WFCB_H_STAT | ( ( G13uc_EWOE_AGC_ena & 0x01 ) << 1 ) // EWO_WFCE_AGC_ENADIS | ( G13uc_EWOB_AGC_ena & 0x01 ); // EWO_WFCB_AGC_ENADIS G2uc_packet[16] = (unsigned char)( ( G13i_EWO_WFCE_upper_limit & 0xff00 ) >> 8 ); // EWO_WFCE_AGC_U_LIM // 2012.12.17 Imachi G2uc_packet[17] = (unsigned char)( G13i_EWO_WFCE_upper_limit & 0xff ); // 2012.12.17 Imachi G2uc_packet[18] = (unsigned char)( ( G13i_EWO_WFCE_lower_limit & 0xff00 ) >> 8 ); // EWO_WFCE_AGC_L_LIM // 2012.12.17 Imachi G2uc_packet[19] = (unsigned char)( G13i_EWO_WFCE_lower_limit & 0xff ); // 2012.12.17 Imachi G2uc_packet[20] = (unsigned char)( ( G13i_EWO_WFCB_upper_limit & 0xff00 ) >> 8 ); // EWO_WFCE_AGC_U_LIM // 2012.12.17 Imachi G2uc_packet[21] = (unsigned char)( G13i_EWO_WFCB_upper_limit & 0xff ); // 2012.12.17 Imachi G2uc_packet[22] = (unsigned char)( ( G13i_EWO_WFCB_lower_limit & 0xff00 ) >> 8 ); // EWO_WFCE_AGC_L_LIM // 2012.12.17 Imachi G2uc_packet[23] = (unsigned char)( G13i_EWO_WFCB_lower_limit & 0xff ); G2uc_packet[24] = G14uc_AM2P_trg_num; // EWO_AM2P_TRG_CNT G2uc_packet[25] = ( ( Guc_AM2P_EWOE_freq & 0x0f ) << 4 ) // EWO_AM2P_FREQ_PRST | ( Guc_AM2P_EWOE_input & 0x0f ); // EWO_AM2P_INPUT_PRST G2uc_packet[26] = ( ( Guc_AM2P_WPTP_gain & 0x0f ) << 4 ) // EWO_AM2P_WPTP_GAIN_PRST | ( Guc_AM2P_EWOE_gain & 0xff ); // EWO_AM2P_EWOE_GAIN_PRST memcpy( &G2uc_packet[27], &Guc_AM2P_MEF_mode[0], 2 ); // EWO_AM2P_MEF_MODE_PRST memcpy( &G2uc_packet[29], &Guc_AM2P_MEF_BIAS1[0], 3 ); // EWO_AM2P_MEF_BIAS1_PRST memcpy( &G2uc_packet[32], &Guc_AM2P_MEF_BIAS2[0], 3 ); // EWO_AM2P_MEF_BIAS2_PRST G2uc_packet[35] = Guc_WFC_VL_cnt; // EWO_WFC_VL_CNT G2uc_packet[36] = Guc_AM2P_cnt; // EWO_AM2P_CNT G2uc_packet[37] = Guc_ISDM_cnt; // EWO_ISDM_CNT G2uc_packet[38] = ( ( G14uc_WFCE_VL_M_ena & 0x01 ) << 7 ) // EWO_WFC_VL_M_ENA // 2013.12.17 T.Imachi | ( ( G14uc_WFCE_VL_L_ena & 0x01 ) << 6 ) // EWO_WFC_VL_M_ENA // 2013.12.17 T.Imachi | ( ( G14uc_WFCB_VL_M_ena & 0x01 ) << 5 ) // EWO_WFC_VL_M_ENA // 2013.12.17 T.Imachi | ( ( G14uc_WFCB_VL_L_ena & 0x01 ) << 4 ) // EWO_WFC_VL_M_ENA // 2013.12.17 T.Imachi | ( ( G14uc_AM2P_suspend & 0x01 ) << 1 ) // EWO_AM2P_SUSPND // 2013.11.20 T.Imachi | ( ( G14uc_ISDM_dump_ena & 0x01 ) ); // EWO_ISDM_DMP_ENA G2uc_packet[39] = G5uc_EWO_WFCH_rate; // EWO_WFCH_RATE // 2013.11.20 T.Imachi // --- EFD --- // Modified by T.Imachi, 2012.11.15 (配列番号のみ) G2uc_packet[40] = G1uc_EWO_E2PROM + // b0-3 EWO-INIT status (i_flag << 4); // b4 Relay-INIT // (Guc_EWO_specmode << 5); // b5-6 SPEC-MODE G2uc_packet[41] = Gus_EWO_Ec_X1ang / 5; // X1(WPT-S1: 0) eclipse angle Spin-Phase = 45deg (=0x09) << HK N(0-72)x5 >> G2uc_packet[42] = Guc_EFD_SPB_ena; // ENA/DIS for SPB M: B4:WPT-S1 B5:WPT-S2 B6:MEF-S1 B7:MEF-S2 // L&TRG: B0:WPT-S1 B1:WPT-S2 B2:MEF-S1 B3:MEF-S2 G2uc_packet[43] = Guc_EFD_DPB_ena; // ENA/DIS for DPB M: b4:WPT-Wave b5:MEF-Wave b6:WPT-Spec b7:MEF-Spec // L: b0:WPT-Wave(TRG) b1:MEF-Wave(TRG) b2:WPT-Spec b0:MEF-Spec G2uc_packet[44] = ((Guc_EFD_SweepTbl & 0x03) ) + // b0-2 EFD SWEEP TBL ((Guc_EwoMdmData_before & 0x07) << 2) + // **rev** 20150210 ((Guc_EwoMdmData_after & 0x07) << 5); // **rev** 20150210 G2uc_packet[45] = Guc_EFD_SweepTbl_sum; // EFD-SWEEP TBL check-sum *** rev. Y.K. 2012.12.27 *** // memcpy( &(G2uc_packet[46]), &(G6uc_packet[0x800]), 4); // SORBET HK // G2uc_packet[50] = Guc_EFD_mode; // EFD-mode i_dpuSwHK_size = 51; // *** rev. Y.K. 2012.12.27 *** } // ***************************** // *** HK Packet production *** // ***************************** if ( i_dpuSwHK_size ) memcpy( &(uc_dataHK[d_SIZEhk_EWO]), G2uc_packet, i_dpuSwHK_size ); // ****************************** // *** HK Production in 'OFF *** // ****************************** if ( uc_link == 0 ) return( 0 ); else return( d_SIZEhk_EWO+i_dpuSwHK_size ); } // =========================================== // System command override // =========================================== // EWO-E サンプリング周波数切替 void app02_EWOE_freq_set( unsigned char param ){ unsigned char uc_cmdbuff[3]; int i_flag; uc_cmdbuff[0] = 0x21; uc_cmdbuff[1] = 0x02; uc_cmdbuff[2] = param; i_flag = app_PiCmd( Gd_N_EWO, uc_cmdbuff, 3 ); Guc_EWOE_freq_set = 0; } // EWO-E 入力切替 void app02_EWOE_input_set( unsigned char param ){ unsigned char uc_cmdbuff[3]; int i_flag; uc_cmdbuff[0] = 0x21; uc_cmdbuff[1] = 0x01; uc_cmdbuff[2] = param; i_flag = app_PiCmd( Gd_N_EWO, uc_cmdbuff, 3 ); Guc_EWOE_input_set = 0; } // EWO-E ゲイン切替 void app02_EWOE_gain_set( unsigned char param ){ unsigned char uc_cmdbuff[3]; int i_flag; uc_cmdbuff[0] = 0x21; uc_cmdbuff[1] = 0x03; uc_cmdbuff[2] = param; i_flag = app_PiCmd( Gd_N_EWO, uc_cmdbuff, 3 ); Guc_EWOE_gain_set = 0; } // WPTP ゲイン切替 void app02_EWO_WPTP_gain_set( unsigned char param ){ unsigned char uc_cmdbuff[3]; int i_flag; uc_cmdbuff[0] = 0x24; uc_cmdbuff[1] = 0x02; uc_cmdbuff[2] = param; i_flag = app_PiCmd( Gd_N_EWO, uc_cmdbuff, 3 ); Guc_EWO_WPTP_gain_set = 0; } // MEFISTO モード切替 void app02_EWO_MEF_mode_set( unsigned char *param ){ unsigned char uc_cmdbuff[4]; int i_flag; uc_cmdbuff[0] = 0x06; uc_cmdbuff[1] = 0x00; uc_cmdbuff[2] = param[0]; uc_cmdbuff[3] = param[1]; i_flag = app_PiCmd( Gd_N_MEF, uc_cmdbuff, 4 ); // Clear SpaceWire link errors のビットは無効化しておく param[0] &= 0xfd; // Mask: 1111 1101 Guc_EWO_MEF_mode_set = 0; } // MEFISTO バイアス電圧設定 void app02_EWO_MEF_BIAS_set( unsigned char *param, unsigned char sensor ){ unsigned char uc_cmdbuff[4]; int i_flag; if( sensor != 0 && sensor != 1 ) return; if( sensor == 0 ) uc_cmdbuff[0] = 0x00; else uc_cmdbuff[0] = 0x01; uc_cmdbuff[1] = 0x00; uc_cmdbuff[2] = param[0]; uc_cmdbuff[3] = param[1]; i_flag = app_PiCmd( Gd_N_MEF, uc_cmdbuff, 4 ); uc_cmdbuff[0] = 0x05; uc_cmdbuff[1] = 0x00; uc_cmdbuff[2] = param[2]; uc_cmdbuff[3] = 0x00; i_flag = app_PiCmd( Gd_N_MEF, uc_cmdbuff, 4 ); if( sensor == 0 ) Guc_EWO_MEF_BIAS1_set = 0; else Guc_EWO_MEF_BIAS2_set = 0; } /* 2013.03.18 E2PROM operation へ移動 (T.Imachi) // =========================================== // リレー初期化,エラーフラグ初期化 // =========================================== void app02_EWO_relay_init(){ unsigned char uc_cmdbuff[3]; int i_flag; // EWO_SCAL_ALL_OFF uc_cmdbuff[0] = 0x23; uc_cmdbuff[1] = 0x01; uc_cmdbuff[2] = 0x00; i_flag = app_PiCmd( Gd_N_EWO, uc_cmdbuff, 3 ); // EWO_WPTP_L_SEL uc_cmdbuff[0] = 0x24; uc_cmdbuff[1] = 0x02; uc_cmdbuff[2] = 0x00; i_flag = app_PiCmd( Gd_N_EWO, uc_cmdbuff, 3 ); // EWO_WPTP_IMP_H_SEL uc_cmdbuff[0] = 0x24; uc_cmdbuff[1] = 0x03; uc_cmdbuff[2] = 0x03; i_flag = app_PiCmd( Gd_N_EWO, uc_cmdbuff, 3 ); // EWO_WPTP_BIAS_SEL uc_cmdbuff[0] = 0x24; uc_cmdbuff[1] = 0x04; uc_cmdbuff[2] = 0x02; i_flag = app_PiCmd( Gd_N_EWO, uc_cmdbuff, 3 ); // EWO_SRAM_FUL_CLR uc_cmdbuff[0] = 0x26; uc_cmdbuff[1] = 0x03; uc_cmdbuff[2] = 0x00; i_flag = app_PiCmd( Gd_N_EWO, uc_cmdbuff, 3 ); // EWO_AD_STS_CLR uc_cmdbuff[0] = 0x26; uc_cmdbuff[1] = 0x09; uc_cmdbuff[2] = 0x00; i_flag = app_PiCmd( Gd_N_EWO, uc_cmdbuff, 3 ); // EWO_EDAC_STS_CLR1 uc_cmdbuff[0] = 0x26; uc_cmdbuff[1] = 0x0A; uc_cmdbuff[2] = 0x00; i_flag = app_PiCmd( Gd_N_EWO, uc_cmdbuff, 3 ); // EWO_EDAC_STS_CLR2 uc_cmdbuff[0] = 0x26; uc_cmdbuff[1] = 0x0B; uc_cmdbuff[2] = 0x00; i_flag = app_PiCmd( Gd_N_EWO, uc_cmdbuff, 3 ); // EWO_EDAC_STS_CLR3 uc_cmdbuff[0] = 0x26; uc_cmdbuff[1] = 0x0C; uc_cmdbuff[2] = 0x00; i_flag = app_PiCmd( Gd_N_EWO, uc_cmdbuff, 3 ); // EWO_EDAC_STS_CLR4 uc_cmdbuff[0] = 0x26; uc_cmdbuff[1] = 0x0D; uc_cmdbuff[2] = 0x00; i_flag = app_PiCmd( Gd_N_EWO, uc_cmdbuff, 3 ); return; } */ // =========================================== // AM2P 観測処理 // =========================================== // TC word set void app02_EWO_AM2P_set(){ unsigned char uc_cmdbuff[4]; int i_flag; if(G14uc_AM2P_shift != 0xff){ uc_cmdbuff[0] = 0x25; uc_cmdbuff[1] = 0x00; uc_cmdbuff[2] = (unsigned char)( ( G14s_AM2P_TCWord & 0xff00 ) >> 8 ); uc_cmdbuff[3] = (unsigned char)( ( G14s_AM2P_TCWord & 0x00ff ) ); i_flag = app_PiCmd( Gd_N_EWO, uc_cmdbuff, 4 ); // AM2P TCWord set } } // AM2P OBS void app02_EWO_AM2P(){ unsigned char uc_cmdbuff[5]; M_T_TIME_INFO t_timeInfo; int i_flag; i_flag = dpu_getTime(&t_timeInfo); if ( G14uc_AM2P_stage ) { G2uc_AM2P_stage_cnt++; if ( G14uc_AM2P_stage==1 ) { // AM2P TCWord set app02_EWO_AM2P_set(); // TC word set // ステージ更新 G14uc_AM2P_stage ++; G14uc_AM2P_ready = 0; G2uc_AM2P_stage_cnt = 0; } else if ( G14uc_AM2P_stage==2 ) { if( G2uc_AM2P_stage_cnt == 1 ){ // EWO-E STBY uc_cmdbuff[0] = 0x21; uc_cmdbuff[1] = 0x00; uc_cmdbuff[2] = 0x00; i_flag = app_PiCmd( Gd_N_EWO, uc_cmdbuff, 3 ); // MEFISTO モード遷移時刻 Gui_AM2P_start_TI = t_timeInfo.ui_currentTime; // MEFISTO BIAS1 変更 app02_EWO_MEF_BIAS_set( Guc_AM2P_MEF_BIAS1, 0 ); // AGC disable // 2013.05.23. T.Imachi G13uc_EWOE_AGC_ena_bak = G13uc_EWOE_AGC_ena; G13uc_EWOB_AGC_ena_bak = G13uc_EWOB_AGC_ena; G13uc_EWOE_AGC_ena = 0; G13uc_EWOB_AGC_ena = 0; } else if( G2uc_AM2P_stage_cnt == 3 ){ // MEFISTO BIAS2 変更 app02_EWO_MEF_BIAS_set( Guc_AM2P_MEF_BIAS2, 1 ); // EWO-E サンプリング周波数変更 app02_EWOE_freq_set( Guc_AM2P_EWOE_freq ); } else if( G2uc_AM2P_stage_cnt == 4 ){ // EWO-E 入力選択変更 app02_EWOE_input_set( Guc_AM2P_EWOE_input ); // ステージ更新 G14uc_AM2P_stage ++; G14uc_AM2P_ready = 0; G2uc_AM2P_stage_cnt = 0; } } else if ( G14uc_AM2P_stage==3 ) { if( G2uc_AM2P_stage_cnt == 1 ){ // トリガ回数更新 if( G14c_AM2P_trg_count <= 0 ){ G14c_AM2P_trg_count = G14uc_AM2P_trg_num; } // MEFISTO リレー設定変更 app02_EWO_MEF_mode_set( Guc_AM2P_MEF_mode ); // EWO-E AM2P uc_cmdbuff[0] = 0x21; uc_cmdbuff[1] = 0x00; uc_cmdbuff[2] = 0x03; i_flag = app_PiCmd( Gd_N_EWO, uc_cmdbuff, 3 ); } else if( G2uc_AM2P_stage_cnt == 2 ){ // TRTRG uc_cmdbuff[0] = 0x25; uc_cmdbuff[1] = 0x02; uc_cmdbuff[2] = 0x01; G14uc_AM2P_finished = 0; // AM2P 処理完了フラグを下ろす i_flag = app_PiCmd( Gd_N_EWO, uc_cmdbuff, 3 ); // TMTRG send out // ステージ更新 G14c_AM2P_trg_count--; G14uc_AM2P_stage ++; G14uc_AM2P_ready = 0; G2uc_AM2P_stage_cnt = 0; } } else if ( G14uc_AM2P_stage==4 ) { // Sun pulse と同時に TRTRG.最長 2.2 秒 G14uc_AM2P_stage ++; G14uc_AM2P_ready = 0; G2uc_AM2P_stage_cnt = 0; } else if ( G14uc_AM2P_stage==5 ) { if( G2uc_AM2P_stage_cnt == 1 ){ // EWO-E STBY uc_cmdbuff[0] = 0x21; uc_cmdbuff[1] = 0x00; uc_cmdbuff[2] = 0x00; i_flag = app_PiCmd( Gd_N_EWO, uc_cmdbuff, 3 ); if( G14c_AM2P_trg_count > 0 ){ // 必要時、TRTRG 繰り返し G14uc_AM2P_stage = 2; G2uc_AM2P_stage_cnt = 1; } else { // MEFISTO リレー設定復旧 app02_EWO_MEF_mode_set( Guc_EWO_MEF_mode ); } } else if( G2uc_AM2P_stage_cnt == 2 ){ // MEFISTO BIAS1 復旧 app02_EWO_MEF_BIAS_set( Guc_EWO_MEF_BIAS1, 0 ); // EWO-E サンプリング周波数復旧 app02_EWOE_freq_set( Guc_EWOE_freq ); } else if( G2uc_AM2P_stage_cnt == 4 ){ // MEFISTO BIAS2 復旧 app02_EWO_MEF_BIAS_set( Guc_EWO_MEF_BIAS2, 1 ); // MEFISTO モード復旧時刻 Gui_AM2P_end_TI = t_timeInfo.ui_currentTime; // EWO-E 入力選択復旧 app02_EWOE_input_set( Guc_EWOE_input ); // ステージ更新 G14uc_AM2P_stage ++; G2uc_AM2P_stage_cnt = 0; G14uc_AM2P_ready = 0; } } else if ( G14uc_AM2P_stage==6 ) { // EWO-E WFC-E uc_cmdbuff[0] = 0x21; uc_cmdbuff[1] = 0x00; uc_cmdbuff[2] = 0x01; i_flag = app_PiCmd( Gd_N_EWO, uc_cmdbuff, 3 ); // ステージ更新 G14uc_AM2P_stage ++; G2uc_AM2P_stage_cnt = 0; G14uc_AM2P_ready = 0; // AGC restore // 2013.05.23 T.Imachi G13uc_EWOE_AGC_ena = G13uc_EWOE_AGC_ena_bak; G13uc_EWOB_AGC_ena = G13uc_EWOB_AGC_ena_bak; } else { // G14uc_AM2P_stage -> 0 if( G14uc_AM2P_finished != 0 || G2uc_AM2P_stage_cnt > 0x10 ){ // 2014.09.05 Imachi G14uc_AM2P_stage = 0; G2uc_AM2P_stage_cnt = 0; G14uc_AM2P_finished = 0; } // One shot の場合、一度実行した後 NOP にする // if( G14uc_AM2P_interval == 0xff ){ if( G14ui_AM2P_interval == 0xffff ){ // G14uc_AM2P_interval = 0; G14ui_AM2P_interval = 0; } } } return; } // =========================================== // WFC CAL // =========================================== void app02_EWO_CAL(){ unsigned char uc_cmdbuff[5]; int i_flag; if ( G14uc_WFC_CAL_stage ) { if ( G14uc_WFC_CAL_stage==1 ) { uc_cmdbuff[0] = 0x25; uc_cmdbuff[1] = 0x00; uc_cmdbuff[2] = (unsigned char)( ( G14s_AM2P_TCWord & 0xff00 ) >> 8 ); uc_cmdbuff[3] = (unsigned char)( ( G14s_AM2P_TCWord & 0x00ff ) ); i_flag = app_PiCmd( Gd_N_EWO, uc_cmdbuff, 4 ); // AM2P TCWord set /* uc_cmdbuff[0] = 0x21; uc_cmdbuff[1] = 0x00; uc_cmdbuff[2] = 0x00; i_flag = app_PiCmd( Gd_N_EWO, uc_cmdbuff, 3 ); // EWO-E STBY */ G14uc_WFC_CAL_stage ++; G14uc_WFC_CAL_ready = 0; } else if ( G14uc_WFC_CAL_stage==2 ) { uc_cmdbuff[0] = 0x21; uc_cmdbuff[1] = 0x00; uc_cmdbuff[2] = 0x00; i_flag = app_PiCmd( Gd_N_EWO, uc_cmdbuff, 3 ); // EWO-E STBY G14uc_WFC_CAL_stage ++; G14uc_WFC_CAL_ready = 0; } else if ( G14uc_WFC_CAL_stage==3 ) { // EWO AM2P mode, Transmission Trigger uc_cmdbuff[0] = 0x21; uc_cmdbuff[1] = 0x00; uc_cmdbuff[2] = 0x03; i_flag = app_PiCmd( Gd_N_EWO, uc_cmdbuff, 3 ); // EWO-E AM2P mode uc_cmdbuff[0] = 0x25; uc_cmdbuff[1] = 0x02; uc_cmdbuff[2] = 0x01; i_flag = app_PiCmd( Gd_N_EWO, uc_cmdbuff, 3 ); // TMTRG send out G14uc_WFC_CAL_stage ++; G14uc_WFC_CAL_ready = 0; } else if ( G14uc_WFC_CAL_stage==4 ) { G14uc_WFC_CAL_stage ++; G14uc_WFC_CAL_ready = 0; } else if ( G14uc_WFC_CAL_stage==5 ) { // EWO STBY uc_cmdbuff[0] = 0x21; uc_cmdbuff[1] = 0x00; uc_cmdbuff[2] = 0x00; i_flag = app_PiCmd( Gd_N_EWO, uc_cmdbuff, 3 ); // EWO-E STBY G14uc_WFC_CAL_stage ++; G14uc_WFC_CAL_ready = 0; } else if ( G14uc_WFC_CAL_stage==6 ) { // EWO-E NOMINAL uc_cmdbuff[0] = 0x21; uc_cmdbuff[1] = 0x00; uc_cmdbuff[2] = 0x01; i_flag = app_PiCmd( Gd_N_EWO, uc_cmdbuff, 3 ); // EWO-E WFC-E //G14uc_WFC_CAL_stage = 0; G14uc_WFC_CAL_stage ++; G14uc_WFC_CAL_ready = 0; G14uc_WFC_CAL_stage_cnt = 0; // 2015.02.23 T.Imachi } else { G14uc_WFC_CAL_stage_cnt++; // 2015.02.23 T.Imachi if( G14uc_WFC_CAL_stage_cnt > 0x0a ){ G14uc_WFC_CAL_stage = 0; } } } return; } /* *********************************************************************** # WFC-E Gain L RMAP 23 01 6C 00 21 01 2C 00 04 00 00 00 00 00 0D 1A 80 C0 00 00 06 01 02 FF FF 21 03 01 # WFC-E Gain ML RMAP 23 01 6C 00 21 01 2D 00 04 00 00 00 00 00 0D 1A 80 C0 00 00 06 01 02 FF FF 21 03 05 # WFC-E Gain MH RMAP 23 01 6C 00 21 01 2E 00 04 00 00 00 00 00 0D 1A 80 C0 00 00 06 01 02 FF FF 21 03 09 # WFC-E Gain H RMAP 23 01 6C 00 21 01 2F 00 04 00 00 00 00 00 0D 1A 80 C0 00 00 06 01 02 FF FF 21 03 0A // WFC_E_PGA_STS (Byte:02, Bit:01, Size:02) uc_WFCE_gain = ( uc_HK[0x02] & 0x60 ) >> 5; // WFC_B_PGA_STS (Byte:01, Bit:05, Size:01) uc_WFCB_gain = ( uc_HK[0x01] & 0x04 ) >> 2; *********************************************************************** */ void app02_EWO_AGC( unsigned char uc_OFA_EB, // EWO-E: Gd_EWO_OFA_E, EWO-B: Gd_EWO_OFA_B char *c_act, // 0:NOP, 1:Gain up, -1:Gain down unsigned char *uc_HK // HK ) { // unsigned char uc_HK[0x80]; unsigned char uc_cmdbuff[3]; unsigned char uc_cur_gain; int i_flag; if( *c_act == 0 ) return; // ========================================================= // 現在のゲイン情報を取得 // ========================================================= // HK 読み込み // i_flag = app_HkRead( Gd_N_EWO, uc_HK ); // if( i_flag != 0 ) return; // EWO-E if( uc_OFA_EB == Gd_EWO_OFA_E ){ uc_cur_gain = ( uc_HK[0x02] & 0x60 ) >> 5; } // EWO-B else{ uc_cur_gain = ( uc_HK[0x01] & 0x04 ) >> 2; } // ========================================================= // ゲインの増減 // ========================================================= if( uc_OFA_EB == Gd_EWO_OFA_E ){ // ゲインアップ if( *c_act > 0 ){ if( uc_cur_gain == 0 ){ // EWO-E Gain ML uc_cmdbuff[0] = 0x21; uc_cmdbuff[1] = 0x03; uc_cmdbuff[2] = 0x05; i_flag = app_PiCmd( Gd_N_EWO, uc_cmdbuff, 3 ); } else if( uc_cur_gain == 1 ){ // EWO-B Gain MH uc_cmdbuff[0] = 0x21; uc_cmdbuff[1] = 0x03; uc_cmdbuff[2] = 0x09; i_flag = app_PiCmd( Gd_N_EWO, uc_cmdbuff, 3 ); } else if( uc_cur_gain == 2 ){ // EWO-B Gain High uc_cmdbuff[0] = 0x21; uc_cmdbuff[1] = 0x03; uc_cmdbuff[2] = 0x0a; i_flag = app_PiCmd( Gd_N_EWO, uc_cmdbuff, 3 ); } } // ゲインダウン if( *c_act < 0 ){ if( uc_cur_gain == 1 ){ // EWO-E Gain L uc_cmdbuff[0] = 0x21; uc_cmdbuff[1] = 0x03; uc_cmdbuff[2] = 0x01; i_flag = app_PiCmd( Gd_N_EWO, uc_cmdbuff, 3 ); } if( uc_cur_gain == 2 ){ // EWO-E Gain ML uc_cmdbuff[0] = 0x21; uc_cmdbuff[1] = 0x03; uc_cmdbuff[2] = 0x05; i_flag = app_PiCmd( Gd_N_EWO, uc_cmdbuff, 3 ); } else if( uc_cur_gain == 3 ){ // EWO-B Gain MH uc_cmdbuff[0] = 0x21; uc_cmdbuff[1] = 0x03; uc_cmdbuff[2] = 0x09; i_flag = app_PiCmd( Gd_N_EWO, uc_cmdbuff, 3 ); } } } else{ // ゲインアップ if( *c_act > 0 ){ if( uc_cur_gain == 0 ){ // EWO-B Gain High uc_cmdbuff[0] = 0x22; uc_cmdbuff[1] = 0x02; uc_cmdbuff[2] = 0x01; i_flag = app_PiCmd( Gd_N_EWO, uc_cmdbuff, 3 ); } } // ゲインダウン if( *c_act < 0 ){ if( uc_cur_gain == 1 ){ // EWO-B Gain Low // EWO-B Gain High uc_cmdbuff[0] = 0x22; uc_cmdbuff[1] = 0x02; uc_cmdbuff[2] = 0x00; i_flag = app_PiCmd( Gd_N_EWO, uc_cmdbuff, 3 ); } } } *c_act = 0; }