隔离对码闪烁与灯光状态
This commit is contained in:
@@ -364,7 +364,7 @@ pfunc modefunctin[] = { //ģʽ
|
||||
Mode3,
|
||||
};
|
||||
void choice_mode(){
|
||||
if(Light_Transition_ModeActive) return;
|
||||
if(Light_Transition_ModeActive || Light_Transition_FeedbackActive()) return;
|
||||
if (!timer1.active && timer1.count == 0){
|
||||
if(Mode==mode0){
|
||||
startTimer(&timer1,1);
|
||||
|
||||
@@ -90,18 +90,18 @@ static uint8_t pairing_feedback_on;
|
||||
static uint8_t pairing_feedback_transitions;
|
||||
static uint16_t pairing_feedback_elapsed_ms;
|
||||
static uint16_t pairing_feedback_interval_ms;
|
||||
static uint8_t pairing_saved_status;
|
||||
static uint8_t pairing_saved_mode;
|
||||
static uint8_t pairing_saved_brightness;
|
||||
static uint16_t pairing_saved_w;
|
||||
static uint16_t pairing_saved_c;
|
||||
static uint16_t pairing_saved_w_duty;
|
||||
static uint16_t pairing_saved_c_duty;
|
||||
static uint8_t pair_deferred_command;
|
||||
static uint8_t pair_deferred_res_data;
|
||||
static uint32_t pair_deferred_receive_data;
|
||||
static uint8_t pair_command_replay;
|
||||
|
||||
#define PAIR_HOLD_FRAME_COUNT 4U
|
||||
#define PAIR_FRAME_SILENCE_TICKS 100U
|
||||
#define PAIRING_WINDOW_TICKS 50000UL
|
||||
uint8_t long_flag_s=0;
|
||||
|
||||
void _433_fun(void);
|
||||
|
||||
// 在固定大小数组中添加新元素(滑动窗口)
|
||||
void addToFixedArray(uint8_t arr[], uint8_t newValue) {
|
||||
uint8_t i;
|
||||
@@ -116,53 +116,16 @@ void addToFixedArray(uint8_t arr[], uint8_t newValue) {
|
||||
|
||||
static void Pairing_Feedback_Apply(uint8_t on)
|
||||
{
|
||||
Mode = mode0;
|
||||
W_PWM = 100U;
|
||||
C_PWM = 0U;
|
||||
Brightness = BRIGHTNESS_MAX_PERCENT;
|
||||
|
||||
if(on)
|
||||
{
|
||||
Start_PWM();
|
||||
Light_Transition_SyncBrightness(BRIGHTNESS_MAX_PERCENT);
|
||||
W_PWM_duty = 100U;
|
||||
C_PWM_duty = 0U;
|
||||
}
|
||||
else
|
||||
{
|
||||
Light_Transition_SyncBrightness(0U);
|
||||
W_PWM_duty = 0U;
|
||||
C_PWM_duty = 0U;
|
||||
Stop_PWM();
|
||||
Light_Transition_FadeActive = 0U;
|
||||
Bridge_Off();
|
||||
}
|
||||
Light_Transition_SetFeedback(1U, on);
|
||||
}
|
||||
|
||||
static void Pairing_Feedback_Restore(void)
|
||||
{
|
||||
W_PWM = pairing_saved_w;
|
||||
C_PWM = pairing_saved_c;
|
||||
Brightness = pairing_saved_brightness;
|
||||
Mode = pairing_saved_mode;
|
||||
Light_Transition_SyncBrightness(
|
||||
pairing_saved_status == POWERON ? pairing_saved_brightness : 0U);
|
||||
|
||||
W_PWM_duty = pairing_saved_w_duty;
|
||||
C_PWM_duty = pairing_saved_c_duty;
|
||||
|
||||
if(pairing_saved_status == POWERON)
|
||||
Light_Transition_SetFeedback(0U, 0U);
|
||||
if(deviceStatus == POWERON)
|
||||
{
|
||||
Start_PWM();
|
||||
}
|
||||
else
|
||||
{
|
||||
Stop_PWM();
|
||||
if(W_PWM_duty == 0U && C_PWM_duty == 0U)
|
||||
{
|
||||
Light_Transition_FadeActive = 0U;
|
||||
Bridge_Off();
|
||||
}
|
||||
Light_Transition_BeginModeChange();
|
||||
startTimer(&timer1, 1U);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -170,13 +133,7 @@ static void Pairing_Feedback_Start(uint16_t interval_ms)
|
||||
{
|
||||
if(pairing_feedback_active) return;
|
||||
|
||||
pairing_saved_status = deviceStatus;
|
||||
pairing_saved_mode = Mode;
|
||||
pairing_saved_brightness = Brightness;
|
||||
pairing_saved_w = W_PWM;
|
||||
pairing_saved_c = C_PWM;
|
||||
pairing_saved_w_duty = W_PWM_duty;
|
||||
pairing_saved_c_duty = C_PWM_duty;
|
||||
pair_deferred_command = 0U;
|
||||
|
||||
pairing_feedback_active = 1U;
|
||||
pairing_feedback_on = 1U;
|
||||
@@ -206,6 +163,32 @@ static void Pairing_Feedback_Task(void)
|
||||
pairing_feedback_on = pairing_feedback_on ? 0U : 1U;
|
||||
Pairing_Feedback_Apply(pairing_feedback_on);
|
||||
}
|
||||
static uint8_t Pairing_IsTriggerCommand(uint8_t command)
|
||||
{
|
||||
return command == Brightness_H || command == Brightness_L ||
|
||||
command == B_Brightness_H || command == B_Brightness_L ||
|
||||
command == F_Brightness_10 || command == F_Brightness_100;
|
||||
}
|
||||
|
||||
static void Pairing_Replay_Deferred(void)
|
||||
{
|
||||
uint8_t current_res_data;
|
||||
uint32_t current_receive_data;
|
||||
|
||||
if(!pair_deferred_command) return;
|
||||
|
||||
current_res_data = res_data;
|
||||
current_receive_data = receive_data;
|
||||
res_data = pair_deferred_res_data;
|
||||
receive_data = pair_deferred_receive_data;
|
||||
pair_deferred_command = 0U;
|
||||
pair_command_replay = 1U;
|
||||
_433_fun();
|
||||
pair_command_replay = 0U;
|
||||
res_data = current_res_data;
|
||||
receive_data = current_receive_data;
|
||||
}
|
||||
|
||||
static void Pairing_Candidate_Reset(void)
|
||||
{
|
||||
long_press_cnt = 0U;
|
||||
@@ -214,6 +197,7 @@ static void Pairing_Candidate_Reset(void)
|
||||
pair_candidate_valid = 0U;
|
||||
pair_alternate_count = 0U;
|
||||
pair_frame_silence_ticks = 0U;
|
||||
pair_deferred_command = 0U;
|
||||
}
|
||||
|
||||
|
||||
@@ -224,12 +208,17 @@ static void Encoder_key_NoCode(){
|
||||
|
||||
if(pair_frame_silence_ticks < 0xffU) pair_frame_silence_ticks++;
|
||||
if(pair_frame_silence_ticks > PAIR_FRAME_SILENCE_TICKS)
|
||||
Pairing_Candidate_Reset();
|
||||
{
|
||||
if(pair_candidate_valid &&
|
||||
long_press_cnt < PAIR_HOLD_FRAME_COUNT)
|
||||
Pairing_Replay_Deferred();
|
||||
Pairing_Candidate_Reset();
|
||||
}
|
||||
|
||||
if(rf_frame_sequence == pair_last_frame_sequence) return;
|
||||
pair_last_frame_sequence = rf_frame_sequence;
|
||||
|
||||
if(ssse != 0U || time_5s > 50000U) return;
|
||||
if(ssse != 0U || time_5s > PAIRING_WINDOW_TICKS) 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))
|
||||
@@ -273,9 +262,10 @@ static void Encoder_key_NoCode(){
|
||||
}
|
||||
|
||||
if(long_press_cnt>=PAIR_HOLD_FRAME_COUNT){
|
||||
time_5s=50011;
|
||||
ssse=1;
|
||||
long_press_cnt=0;
|
||||
time_5s=PAIRING_WINDOW_TICKS + 1U;
|
||||
ssse=1;
|
||||
long_press_cnt=0;
|
||||
pair_deferred_command=0U;
|
||||
|
||||
if(res_data==Brightness_H||res_data==B_Brightness_H||res_data==F_Brightness_10){
|
||||
adress=receive_data >>8;
|
||||
@@ -469,9 +459,9 @@ void rf433_receive(void)//rf433
|
||||
rf_flag.rf_receive_flag.current_level = 1;//当前电平状态
|
||||
}
|
||||
//
|
||||
if(time_5s<=40000){
|
||||
time_5s++;
|
||||
}
|
||||
if(time_5s<=PAIRING_WINDOW_TICKS){
|
||||
time_5s++;
|
||||
}
|
||||
}
|
||||
|
||||
uint16_t spee_dealy_time=0; //速度缓慢变换
|
||||
@@ -480,6 +470,16 @@ uint16_t spee_dealy_time=0; //
|
||||
#define REMOTE_MODE_MAX 9U
|
||||
|
||||
void _433_fun(){
|
||||
if(Light_Transition_FeedbackActive()) return;
|
||||
if(!pair_command_replay && ssse == 0U &&
|
||||
time_5s <= PAIRING_WINDOW_TICKS &&
|
||||
Pairing_IsTriggerCommand(res_data))
|
||||
{
|
||||
pair_deferred_command = 1U;
|
||||
pair_deferred_res_data = res_data;
|
||||
pair_deferred_receive_data = receive_data;
|
||||
return;
|
||||
}
|
||||
if(Key_TypeDef.KEY_STATE_Click==1||KEY_STATE_re==1) return;
|
||||
set_click();
|
||||
sss=1;//记忆标志位
|
||||
|
||||
@@ -86,6 +86,8 @@ static uint8_t transition_sync_pending;
|
||||
static uint16_t mode_transition_start_w;
|
||||
static uint16_t mode_transition_start_c;
|
||||
static uint8_t mode_transition_tick;
|
||||
static volatile uint8_t feedback_active;
|
||||
static volatile uint8_t feedback_on;
|
||||
|
||||
static uint16_t brightness_scale_for_level(uint8_t level)
|
||||
{
|
||||
@@ -262,6 +264,27 @@ void Light_Transition_BeginModeChange(void)
|
||||
Light_Transition_ModeActive = 1U;
|
||||
}
|
||||
|
||||
void Light_Transition_SetFeedback(uint8_t active, uint8_t on)
|
||||
{
|
||||
feedback_active = active ? 1U : 0U;
|
||||
feedback_on = (active && on) ? 1U : 0U;
|
||||
|
||||
if(feedback_active)
|
||||
{
|
||||
W_PWM_duty = feedback_on ? LIGHT_OUTPUT_SCALE : 0U;
|
||||
C_PWM_duty = 0U;
|
||||
Light_Transition_W_Output_Q12 =
|
||||
feedback_on ? ((uint32_t)LIGHT_OUTPUT_SCALE << 12) : 0U;
|
||||
Light_Transition_C_Output_Q12 = 0U;
|
||||
Light_Transition_FadeActive = 1U;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t Light_Transition_FeedbackActive(void)
|
||||
{
|
||||
return feedback_active;
|
||||
}
|
||||
|
||||
void Light_Transition_Task(void)
|
||||
{
|
||||
uint8_t powered_on = deviceStatus != POWEROFF;
|
||||
@@ -278,6 +301,21 @@ void Light_Transition_Task(void)
|
||||
uint32_t scaled_c_q12;
|
||||
uint8_t power_transitioning;
|
||||
|
||||
/*
|
||||
* Pairing/clear feedback is an output-only overlay. Keep all normal
|
||||
* brightness, color, mode and power state untouched while it is active.
|
||||
*/
|
||||
if(feedback_active)
|
||||
{
|
||||
W_PWM_duty = feedback_on ? LIGHT_OUTPUT_SCALE : 0U;
|
||||
C_PWM_duty = 0U;
|
||||
Light_Transition_W_Output_Q12 =
|
||||
feedback_on ? ((uint32_t)LIGHT_OUTPUT_SCALE << 12) : 0U;
|
||||
Light_Transition_C_Output_Q12 = 0U;
|
||||
Light_Transition_FadeActive = 1U;
|
||||
return;
|
||||
}
|
||||
|
||||
if(!powered_on)
|
||||
Light_Transition_ModeActive = 0U;
|
||||
|
||||
|
||||
@@ -14,5 +14,7 @@ extern volatile uint32_t Light_Transition_C_Output_Q12;
|
||||
void Light_Transition_Task(void);
|
||||
void Light_Transition_SyncBrightness(uint8_t level);
|
||||
void Light_Transition_BeginModeChange(void);
|
||||
void Light_Transition_SetFeedback(uint8_t active, uint8_t on);
|
||||
uint8_t Light_Transition_FeedbackActive(void);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user