From cf21efb3314e20e23e94096356b142ffca3f0f3a Mon Sep 17 00:00:00 2001 From: Taylor Date: Tue, 12 Oct 2021 17:22:51 +0800 Subject: [PATCH] reset avg_count and unmerge --- .../cc26xx/app/headstage/EliteADC.h | 3 +- .../cc26xx/app/headstage/EliteDAC.h | 22 +--- .../cc26xx/app/headstage/EliteEISMode.h | 3 +- .../cc26xx/app/headstage/EliteInstruction.h | 17 ++- .../cc26xx/app/headstage/EliteLED.h | 4 +- .../cc26xx/app/headstage/EliteReset.h | 4 +- .../cc26xx/app/headstage/EliteWorkData.h | 2 + .../cc26xx/app/headstage/Elite_def.h | 1 - .../cc26xx/app/headstage/Elite_mode_ADC_DAC.h | 88 ++++++++++----- .../cc26xx/app/headstage/headstage.h | 100 ++++++++---------- .../cc26xx/app/headstage/impedance_meter.h | 4 +- 11 files changed, 128 insertions(+), 120 deletions(-) diff --git a/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/EliteADC.h b/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/EliteADC.h index a244ed951..05b31f095 100644 --- a/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/EliteADC.h +++ b/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/EliteADC.h @@ -1121,7 +1121,6 @@ static void SetSamplingTime(uint32_t freq){ BpSINC3(1); SetADCDataRate(ADC1M6sps); SetDFTNUM(DFTNUM16384); -// SetCTIA(32); //disconncted instru.settingIndex = 1; } @@ -1132,7 +1131,6 @@ static void SetSamplingTime(uint32_t freq){ SetADCDataRate(ADC1M6sps); SetSinc3OSR(Sinc3OSR4); SetDFTNUM(DFTNUM8192); -// SetCTIA(0); //1pF // select_REG(0x2044); //0x2044 // w32_REG(0x00001010); //ADC data rate = 1.6MHz | SINC3 4 @@ -1231,3 +1229,4 @@ static void SetSamplingTime(uint32_t freq){ #endif + diff --git a/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/EliteDAC.h b/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/EliteDAC.h index c602dd1dd..0699889f3 100644 --- a/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/EliteDAC.h +++ b/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/EliteDAC.h @@ -140,7 +140,7 @@ static uint32_t CalcDelayTime(uint32_t freq){ // 1000Hz if (freq >= 100000) { - decadeSamplingTime = 500; + decadeSamplingTime = 1025; } // 100Hz @@ -169,7 +169,6 @@ static uint32_t CalcDelayTime(uint32_t freq){ } delayTime += decadeSamplingTime; //delay+reading time - time_tester += delayTime; return delayTime; } @@ -363,23 +362,4 @@ static int32_t cali_DAC_outputV(int32_t voltLV) { // LPDAC output, voltLV = Vb return vscan; } -static void Cali_DAC_output () { - static int32_t LPvolt = 0; - - if (instru.DAC_type == HSDACtype_DC) { - HS_cali_config(); - HSDAC_output(instru.VAmpSet); - } else if (instru.DAC_type == LPDACtype_DC) { - LP_cali_config(); - LPvolt = (int32_t)(instru.VAmpSet); - LPvolt = (LPvolt - 25000) * 4 * 4000; - cali_DAC_outputV(LPvolt); - } else if (instru.DAC_type == HSDACtype_AC) { - HS_cali_config(); - DAC_outputF(0x00000800); - SetWGAmp(instru.VAmpSet); // sine wave generation usage - } - -} - #endif diff --git a/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/EliteEISMode.h b/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/EliteEISMode.h index a73b7662d..fbfaee1c1 100644 --- a/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/EliteEISMode.h +++ b/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/EliteEISMode.h @@ -7,6 +7,7 @@ static void eis_fscan(void) struct wm_eis_ctx_t *eis = (struct wm_eis_ctx_t *)wm_get(); if (vscanReset) { + eis->_in_reset_flag = true; eis->_f1 = User2Freq(eis->_f1); eis->_f2 = User2Freq(eis->_f2); @@ -143,7 +144,7 @@ static void eis_fscan(void) SetSamplingTime(instru.fset); instru.sampleRate = 2000; - time_tester += 2000; } #endif + diff --git a/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/EliteInstruction.h b/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/EliteInstruction.h index c56783981..d0f1e0e96 100644 --- a/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/EliteInstruction.h +++ b/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/EliteInstruction.h @@ -101,15 +101,12 @@ struct HEADSTAGE_INSTRUCTION { /** Iin, Vin, Vout **/ #define EIS_HSTIA 0x00 #define EIS_LPTIA 0x01 -#define EIS_DAC 0x02 -#define HIGH_Z 0x03 -#define IIN_ADC 0x04 -#define VIN_ADC 0x05 -#define VOUT_DAC 0x06 - -#define HSDACtype_DC 0x00 -#define LPDACtype_DC 0x01 -#define HSDACtype_AC 0x02 +#define EIS_HSDAC 0x02 +#define EIS_LPDAC 0x03 +#define VOUT_DAC 0x04 +#define IIN_ADC 0x05 +#define VIN_ADC 0x06 +#define HIGH_Z 0x07 /** ADC Iin gain level **/ #define I_GAIN_3M 0x07 // largest gain @@ -291,7 +288,7 @@ static void InitEliteInstruction(){ // EIS DAC instru.VAmpSet = EIS_HSDAC_ZERO; - instru.DAC_type = HSDACtype_DC; + instru.DAC_type = EIS_HSDAC; // EIS ADC instru.HSTIAGainLv = 0; diff --git a/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/EliteLED.h b/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/EliteLED.h index 059cb288f..dfcb81a70 100644 --- a/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/EliteLED.h +++ b/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/EliteLED.h @@ -180,12 +180,14 @@ static void WorkModeLED() Elite_led_color(COLOR_ORANGE); } else if (instru.AdcChannel == VOUT_DAC) { Elite_led_color(COLOR_BLUE); - }else if (instru.AdcChannel == EIS_DAC) { + }else if (instru.AdcChannel == EIS_HSDAC) { Elite_led_color(COLOR_PURPLE_DARK); } else if (instru.AdcChannel == EIS_HSTIA) { Elite_led_color(COLOR_WHITE); } else if (instru.AdcChannel == EIS_LPTIA) { Elite_led_color(COLOR_RED); + } else if (instru.AdcChannel == EIS_LPDAC) { + Elite_led_color(COLOR_BLUE); } break; diff --git a/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/EliteReset.h b/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/EliteReset.h index 69a2570aa..8cf5ef600 100644 --- a/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/EliteReset.h +++ b/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/EliteReset.h @@ -54,8 +54,8 @@ static void Eliteinterrupt() { InitGPT(); initINSBuf(); initDATBuf(); -// AD5940_HWReset(); -// AD5940_init(); + AD5940_HWReset(); + AD5940_init(); // HSTIAGainCtrl(HSRTIA_200R); // LPTIAGainCtrl(LPRTIA_200R); diff --git a/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/EliteWorkData.h b/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/EliteWorkData.h index 6e9cc9863..8f6a0c875 100644 --- a/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/EliteWorkData.h +++ b/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/EliteWorkData.h @@ -70,6 +70,7 @@ struct wm_eis_ctx_t { bool _switchNeg; bool _switchPos; bool _firstSwitch; + bool _in_reset_flag; }; struct wm_vo_ctx_t { @@ -217,6 +218,7 @@ static int __eis_create(void) p->_switchPos = false; p->_switchNeg = false; p->_firstSwitch = true; + p->_in_reset_flag = false; *wm = p; diff --git a/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/Elite_def.h b/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/Elite_def.h index 8649583fe..9d5a2e52f 100644 --- a/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/Elite_def.h +++ b/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/Elite_def.h @@ -69,7 +69,6 @@ enum all_mode_e { #define cali_HSDAC_amp 0x49 #define cali_HSTIA_setGain 0x59 #define cali_HSDAC_DC 0x69 -#define cali_HSTIA_Iin 0x65 // mode parameter #define STEP_TO_VSETRATE(step) step2VsetRate(step) diff --git a/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/Elite_mode_ADC_DAC.h b/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/Elite_mode_ADC_DAC.h index 02a99d280..0f669636e 100644 --- a/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/Elite_mode_ADC_DAC.h +++ b/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/Elite_mode_ADC_DAC.h @@ -393,7 +393,14 @@ static void EIS_Plot(void) //real and imag impedance plot EnDFTnADC(1); instru.sampleRate = CalcDelayTime(instru.fset); fout_flag = false; - + if (eis->_in_reset_flag) { + avg_count = 0; + high_freq_cnt = 0; + realSum = 0; + imagSum = 0; + ADC_cnt = 0; + eis->_in_reset_flag = false; + } } else { if (ADC_cnt == 0){ HSTIA_change_gain(); @@ -411,7 +418,7 @@ static void EIS_Plot(void) //real and imag impedance plot else if (ADC_cnt == 1) { HSTIA_change_gain(); if (firstFreq_flag) { - if (instru.f1 >= 10000000) { + if (instru.fset >= 10000000) { if (high_freq_cnt == 3) { firstFreq_flag = false; } @@ -429,37 +436,39 @@ static void EIS_Plot(void) //real and imag impedance plot } } else if (ADC_cnt == 2) { - realSum += instru.real; - imagSum += instru.imag; - avg_count ++; - instru.sampleRate = CalcDelayTime(instru.fset); - if (avg_count == avgNumTable[instru.avgnum]){ - avg_real = realSum / avg_count; - avg_imag = imagSum / avg_count; - avg_count = 0; - realSum = 0; - imagSum = 0; - EnDFTnADC(0); - if(eis->_direction_up){ - if (instru.fset >= eis->_fmax) { - PeriodicEvent = false; - finishMode = 1; - } - } else { - if (instru.fset <= eis->_fmin) { - PeriodicEvent = false; - finishMode = 1; + realSum += instru.real; + imagSum += instru.imag; + avg_count++; + instru.sampleRate = CalcDelayTime(instru.fset); + if (avg_count == avgNumTable[instru.avgnum]){ + avg_real = (realSum + avg_count / 2) / avg_count; + avg_imag = (imagSum + avg_count / 2) / avg_count; + avg_count = 0; + realSum = 0; + imagSum = 0; + EnDFTnADC(0); + if(eis->_direction_up){ + if (instru.fset >= eis->_fmax) { + PeriodicEvent = false; + finishMode = 1; + } + } else { + if (instru.fset <= eis->_fmin) { + PeriodicEvent = false; + finishMode = 1; + } } + notify_flag = true; + high_freq_cnt = 0; } - notify_flag = true; - } - ADC_cnt = 0; + ADC_cnt = 0; } } InputNotify(NOTIFY_CURRENT, avg_imag); InputNotify(NOTIFY_VOLT, avg_real); InputNotify(NOTIFY_IMPEDANCE, instru.fset); + return; } @@ -604,6 +613,28 @@ static void cali_IT_plot(void) { temp = (ReadRealZ() & 0x0003FFFF); } +// switch (instru.AdcChannel) { +// case EIS_HSTIA: { +// if (instru.HSTIAGainLv == 0) { +// cali_count_max = 5000; +// } else { +// cali_count_max = 1000; +// } +// break; +// } +// case EIS_LPTIA: { +// if (instru.LPTIAGainLv == 0) { +// cali_count_max = 5000; +// } else { +// cali_count_max = 1000; +// } +// break; +// } +// default:{ +// cali_count_max = 1000; +// break; +// } +// } cali_count_max = 3000; if (record_flag == false) { @@ -618,9 +649,9 @@ static void cali_IT_plot(void) { uint8_t CIS_buf[9] = {0}; CIS_buf[0] = instru.chip_id; - CIS_buf[1] = (uint8_t) ((ADCValueAVG & 0xFF0000) >> 16); - CIS_buf[2] = (uint8_t) ((ADCValueAVG & 0x00FF00) >> 8); - CIS_buf[3] = (uint8_t) (ADCValueAVG & 0x0000FF); + CIS_buf[1] = (uint8_t) ((ADCValueAVG & 0xFF00) >> 8); + CIS_buf[2] = (uint8_t) (ADCValueAVG & 0x00FF); + CIS_buf[3] = 0x00; CIS_buf[4] = instru.HSTIAGainLv; SimpleProfile_SetParameter(BLE_CIS_BUFF_CHAR, 9, CIS_buf); @@ -752,3 +783,4 @@ static void cali_VT_plot(void) { } #endif + diff --git a/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/headstage.h b/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/headstage.h index 9aa74a5e0..af2a11048 100644 --- a/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/headstage.h +++ b/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/headstage.h @@ -584,7 +584,13 @@ static bool fset_flag; static bool fout_flag; static bool gainChange_flag; static bool firstFreq_flag; -static uint32_t time_tester = 0; +static uint32_t time0 = 0; +static uint32_t time1 = 0; +static uint32_t delta_time = 0; +static uint32_t time10 = 0; +static uint32_t time11 = 0; +static uint32_t delta_time1 = 0; +static uint32_t test_cnt = 0; //pulse mode variable static bool stiFirstTime; @@ -653,8 +659,6 @@ static void InitEliteFlag(); //EIS crap static void AD5940_HWReset(); -static void LP_cali_config (); -static void HS_cali_config (); #include "EliteInstruction.h" #include "EliteADC.h" @@ -1035,13 +1039,11 @@ static void update_ZM_instruction(uint8 *ins) { case HIGH_Z : { switch(ins[4]) { case 0x00 : { - AD5940_HWReset(); - AD5940_init(); -// SetEISHIGHZ(0); //open CE0 + SetEISHIGHZ(0); //open CE0 break; } case 0x01 : { -// SetEISHIGHZ(1); //close CE0 + SetEISHIGHZ(1); //close CE0 break; } default : { @@ -1050,7 +1052,16 @@ static void update_ZM_instruction(uint8 *ins) { } break; } - case EIS_HSTIA : { // 0x00 + case EIS_HSDAC : { + if(ins[4] == 0x00) { + instru.DAC_type = EIS_HSDAC; + } else if (ins[4] == 0x01) { + instru.DAC_type = EIS_LPDAC; + } + HSDAC_GainControl(0x00); // fix HSDAC gain at default + break; + } + case EIS_HSTIA : { instru.HSTIAGainLv = ins[4]; if (instru.HSTIAGainLv != HSRTIA_GAIN_AUTO) { instru.HSTIAAutoGainEnable = 0; @@ -1062,7 +1073,7 @@ static void update_ZM_instruction(uint8 *ins) { HSTIAGainCtrl(instru.HSTIAGainLv); break; } - case EIS_LPTIA : { // 0x01 + case EIS_LPTIA : { instru.LPTIAGainLv = ins[4]; if (instru.LPTIAGainLv != LPRTIA_GAIN_AUTO) { instru.LPTIAAutoGainEnable = 0; @@ -1074,17 +1085,6 @@ static void update_ZM_instruction(uint8 *ins) { LPTIAGainCtrl(instru.LPTIAGainLv); break; } - case EIS_DAC : { // 0x02 - if(ins[4] == 0x00) { - instru.DAC_type = HSDACtype_DC; - } else if (ins[4] == 0x01) { - instru.DAC_type = LPDACtype_DC; - } else if (ins[4] == 0x02) { - instru.DAC_type = HSDACtype_AC; - } - HSDAC_GainControl(0x00); // fix HSDAC gain at default - break; - } default :{ break; } @@ -1103,7 +1103,7 @@ static void update_ZM_instruction(uint8 *ins) { case CURVE_CALI_ADC: { switch(ins[3]) { - case IIN_ADC : { // 0x04 + case IIN_ADC : { // 0x05 instru.eliteFxn = CURVE_CALI_ADC; instru.AdcChannel = IIN_ADC; instru.notifyRate = 1000; @@ -1112,7 +1112,7 @@ static void update_ZM_instruction(uint8 *ins) { ModeLED(WORKING); break; } - case VIN_ADC : { // 0x05 + case VIN_ADC : { // 0x06 instru.eliteFxn = CURVE_CALI_ADC; instru.AdcChannel = VIN_ADC; instru.notifyRate = 1000; @@ -1121,7 +1121,7 @@ static void update_ZM_instruction(uint8 *ins) { ModeLED(WORKING); break; } - case VOUT_DAC : { // 0x03 + case VOUT_DAC : { // 0x04 instru.eliteFxn = CURVE_CALI_ADC; instru.AdcChannel = VOUT_DAC; instru.notifyRate = 1000; @@ -1133,22 +1133,38 @@ static void update_ZM_instruction(uint8 *ins) { ModeLED(WORKING); break; } + case EIS_HSDAC :{ // 0x02 + instru.eliteFxn = CURVE_CALI_ADC; + instru.notifyRate = 1000; + instru.sampleRate = 15; + static int32_t LPvolt = 0; + instru.VAmpSet = ((uint16_t)(ins[4]) << 8) | (uint16_t)(ins[5]); + + if (instru.DAC_type == EIS_HSDAC) { + instru.AdcChannel = EIS_HSDAC; + HS_cali_config(); + HSDAC_output(instru.VAmpSet); +// SetWGAmp(instru.VAmpSet); // sine wave generation usage + } else if (instru.DAC_type == EIS_LPDAC) { + instru.AdcChannel = EIS_LPDAC; + LP_cali_config(); + LPvolt = ((int32_t)(ins[4]) << 8) | (int32_t)(ins[5]); + LPvolt = (LPvolt - 25000) * 4 * 4000; + DAC_outputV(LPvolt); + } + ModeLED(WORKING); + break; + } case EIS_HSTIA :{ // 0x00 -// instru.VAmpSet = ((uint16_t)(ins[4]) << 8) | (uint16_t)(ins[5]); -// instru.DAC_type = HSDACtype_DC; -// Cali_DAC_output(); // HSDAC output DC bias instru.eliteFxn = CURVE_CALI_ADC; instru.AdcChannel = EIS_HSTIA; instru.notifyRate = 1000; instru.sampleRate = 15; -// HS_cali_config(); + HS_cali_config(); ModeLED(WORKING); break; } case EIS_LPTIA :{ // 0x01 -// instru.VAmpSet = ((uint16_t)(ins[4]) << 8) | (uint16_t)(ins[5]); -// instru.DAC_type = LPDACtype_DC; -// Cali_DAC_output(); // LPDAC output DC bias instru.eliteFxn = CURVE_CALI_ADC; instru.AdcChannel = EIS_LPTIA; instru.notifyRate = 1000; @@ -1158,16 +1174,6 @@ static void update_ZM_instruction(uint8 *ins) { ModeLED(WORKING); break; } - case EIS_DAC :{ // 0x02 - instru.eliteFxn = CURVE_CALI_ADC; - instru.AdcChannel = EIS_DAC; - instru.notifyRate = 1000; - instru.sampleRate = 15; - instru.VAmpSet = ((uint16_t)(ins[4]) << 8) | (uint16_t)(ins[5]); - Cali_DAC_output(); - ModeLED(WORKING); - break; - } default : { break; } @@ -1457,19 +1463,6 @@ static void update_ZM_instruction(uint8 *ins) { LED_color(DARKLED, 0x80, 0x00, 0x80); break; } - case cali_HSTIA_Iin: { // 0x65 - instru.VAmpSet = ((uint16_t)(ins[4]) << 8) | (uint16_t)(ins[5]); - instru.DAC_type = HSDACtype_DC; - Cali_DAC_output(); // HSDAC output DC bias - - instru.eliteFxn = CURVE_CALI_ADC; - instru.AdcChannel = EIS_HSTIA; - instru.notifyRate = 1000; - instru.sampleRate = 15; -// HS_cali_config(); - ModeLED(WORKING); - break; - } } break; } @@ -1500,6 +1493,7 @@ static void update_ZM_instruction(uint8 *ins) { } case VIS_STI: { + time0 = (Timestamp_get32()) / 31; for(int i = 0; i < 12; i++) { FlushNotify(); } diff --git a/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/impedance_meter.h b/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/impedance_meter.h index 03e744b67..71ef55548 100644 --- a/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/impedance_meter.h +++ b/simplelink/ble_sdk_2_02_02_25/src/examples/simple_peripheral/cc26xx/app/headstage/impedance_meter.h @@ -179,7 +179,9 @@ static void SimpleBLEPeripheral_performPeriodicTask(void) { SendNotify(); //send notify_flag = false; fset_flag = true; - time_tester = 0; + time0 = (Timestamp_get32()) / 31; + time1 = 0; + delta_time = 0; } mode_done(); //finishMode = 1, SendNotify(), Eliteinterrupt()