diff --git a/project/example/ble/ble_peripheral/app/src/Rf433.c b/project/example/ble/ble_peripheral/app/src/Rf433.c index 59d99c4..0c05e30 100644 --- a/project/example/ble/ble_peripheral/app/src/Rf433.c +++ b/project/example/ble/ble_peripheral/app/src/Rf433.c @@ -79,6 +79,10 @@ static uint8_t ssse=0; static volatile uint16_t rf_frame_sequence; static uint16_t pair_last_frame_sequence; static uint32_t pair_candidate_data; +static uint32_t pair_alternate_data; +static uint8_t pair_candidate_valid; +static uint8_t pair_alternate_count; + static uint8_t pair_frame_silence_ticks; static uint8_t pairing_feedback_active; @@ -94,8 +98,8 @@ static uint16_t pairing_saved_c; static uint16_t pairing_saved_w_duty; static uint16_t pairing_saved_c_duty; -#define PAIR_HOLD_FRAME_COUNT 8U -#define PAIR_FRAME_SILENCE_TICKS 50U +#define PAIR_HOLD_FRAME_COUNT 4U +#define PAIR_FRAME_SILENCE_TICKS 100U uint8_t long_flag_s=0; // 在固定大小数组中添加新元素(滑动窗口) @@ -197,35 +201,70 @@ static void Pairing_Feedback_Task(void) pairing_feedback_on = pairing_feedback_on ? 0U : 1U; Pairing_Feedback_Apply(pairing_feedback_on); } +static void Pairing_Candidate_Reset(void) +{ + long_press_cnt = 0U; + pair_candidate_data = 0U; + pair_alternate_data = 0U; + pair_candidate_valid = 0U; + pair_alternate_count = 0U; + pair_frame_silence_ticks = 0U; +} + static void Encoder_key_NoCode(){ uint8_t i=0,j=0,isok=0,updata=0; uint16_t times_s=0; - if(rf_frame_sequence == pair_last_frame_sequence){ - if(pair_frame_silence_ticks < 0xffU) pair_frame_silence_ticks++; - if(pair_frame_silence_ticks > PAIR_FRAME_SILENCE_TICKS){ - long_press_cnt = 0U; - pair_candidate_data = 0U; - } - return; - } + if(pair_frame_silence_ticks < 0xffU) pair_frame_silence_ticks++; + if(pair_frame_silence_ticks > PAIR_FRAME_SILENCE_TICKS) + Pairing_Candidate_Reset(); + if(rf_frame_sequence == pair_last_frame_sequence) return; pair_last_frame_sequence = rf_frame_sequence; - pair_frame_silence_ticks = 0U; - if(!((res_data==Brightness_H||res_data==Brightness_L||res_data==B_Brightness_H||res_data==B_Brightness_L||res_data==F_Brightness_10||res_data==F_Brightness_100)&&time_5s<=50000&&ssse==0)){ - long_press_cnt = 0U; - pair_candidate_data = 0U; + if(ssse != 0U || time_5s > 50000U) return; + if(!(res_data==Brightness_H||res_data==Brightness_L|| + res_data==B_Brightness_H||res_data==B_Brightness_L|| + res_data==F_Brightness_10||res_data==F_Brightness_100)) + { return; } - if(pair_candidate_data == receive_data){ - long_press_cnt++; - }else{ + if(!pair_candidate_valid) + { pair_candidate_data = receive_data; + pair_candidate_valid = 1U; long_press_cnt = 1U; + pair_alternate_count = 0U; + pair_frame_silence_ticks = 0U; + } + else if(pair_candidate_data == receive_data) + { + long_press_cnt++; + pair_alternate_count = 0U; + pair_frame_silence_ticks = 0U; + } + else + { + if(pair_alternate_data == receive_data) + { + pair_alternate_count++; + } + else + { + pair_alternate_data = receive_data; + pair_alternate_count = 1U; + } + + if(pair_alternate_count >= 2U) + { + pair_candidate_data = pair_alternate_data; + long_press_cnt = pair_alternate_count; + pair_alternate_count = 0U; + pair_frame_silence_ticks = 0U; + } } if(long_press_cnt>=PAIR_HOLD_FRAME_COUNT){