保留最近对码的五个遥控器
This commit is contained in:
@@ -105,18 +105,58 @@ uint8_t long_flag_s=0;
|
|||||||
|
|
||||||
void _433_fun(void);
|
void _433_fun(void);
|
||||||
|
|
||||||
// 在固定大小数组中添加新元素(滑动窗口)
|
// Keep paired addresses ordered from oldest to newest.
|
||||||
void addToFixedArray(uint8_t arr[], uint8_t newValue) {
|
static uint8_t Pairing_Address_IsEmpty(uint8_t high, uint8_t low)
|
||||||
uint8_t i;
|
{
|
||||||
// 所有元素向后移动一位
|
return ((high == 0U && low == 0U) ||
|
||||||
for( i = 4; i > 0; i--) {
|
(high == 0xffU && low == 0xffU));
|
||||||
arr[i] = arr[i - 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
// 在头部插入新值
|
|
||||||
arr[0] = newValue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void Pairing_Address_Touch(uint8_t high, uint8_t low)
|
||||||
|
{
|
||||||
|
uint8_t next_h[5];
|
||||||
|
uint8_t next_l[5];
|
||||||
|
uint8_t count = 0U;
|
||||||
|
uint8_t i;
|
||||||
|
|
||||||
|
for(i = 0U; i < 5U; i++)
|
||||||
|
{
|
||||||
|
if(Pairing_Address_IsEmpty(adress_H_array[i], adress_L_array[i])) continue;
|
||||||
|
if(adress_H_array[i] == high && adress_L_array[i] == low) continue;
|
||||||
|
|
||||||
|
next_h[count] = adress_H_array[i];
|
||||||
|
next_l[count] = adress_L_array[i];
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(count >= 5U)
|
||||||
|
{
|
||||||
|
for(i = 0U; i < 4U; i++)
|
||||||
|
{
|
||||||
|
next_h[i] = next_h[i + 1U];
|
||||||
|
next_l[i] = next_l[i + 1U];
|
||||||
|
}
|
||||||
|
count = 4U;
|
||||||
|
}
|
||||||
|
|
||||||
|
next_h[count] = high;
|
||||||
|
next_l[count] = low;
|
||||||
|
count++;
|
||||||
|
|
||||||
|
for(i = 0U; i < 5U; i++)
|
||||||
|
{
|
||||||
|
if(i < count)
|
||||||
|
{
|
||||||
|
adress_H_array[i] = next_h[i];
|
||||||
|
adress_L_array[i] = next_l[i];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
adress_H_array[i] = 0xffU;
|
||||||
|
adress_L_array[i] = 0xffU;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
static void Pairing_Feedback_Apply(uint8_t on)
|
static void Pairing_Feedback_Apply(uint8_t on)
|
||||||
{
|
{
|
||||||
Light_Transition_SetFeedback(1U, on);
|
Light_Transition_SetFeedback(1U, on);
|
||||||
@@ -206,7 +246,6 @@ static void Pairing_Candidate_Reset(void)
|
|||||||
|
|
||||||
|
|
||||||
static void Encoder_key_NoCode(){
|
static void Encoder_key_NoCode(){
|
||||||
uint8_t i=0,j=0,isok=0,updata=0;
|
|
||||||
uint16_t times_s=0;
|
uint16_t times_s=0;
|
||||||
|
|
||||||
if(pair_frame_silence_ticks < 0xffU) pair_frame_silence_ticks++;
|
if(pair_frame_silence_ticks < 0xffU) pair_frame_silence_ticks++;
|
||||||
@@ -271,52 +310,13 @@ static void Encoder_key_NoCode(){
|
|||||||
pair_deferred_command=0U;
|
pair_deferred_command=0U;
|
||||||
|
|
||||||
if(res_data==Brightness_H||res_data==B_Brightness_H||res_data==F_Brightness_10){
|
if(res_data==Brightness_H||res_data==B_Brightness_H||res_data==F_Brightness_10){
|
||||||
adress=receive_data >>8;
|
adress=receive_data >>8;
|
||||||
adress_H = (receive_data >> 16) & 0xff;
|
adress_H = (receive_data >> 16) & 0xff;
|
||||||
adress_L = (receive_data >> 8) & 0xff;
|
adress_L = (receive_data >> 8) & 0xff;
|
||||||
// 第一步:检查是否已存在
|
Pairing_Address_Touch(adress_H, adress_L);
|
||||||
for(j = 0; j <5; j++) {
|
times_s=300;
|
||||||
if(adress_H_array[j] == adress_H && adress_L_array[j] == adress_L) {
|
match_success=1;
|
||||||
isok=1;
|
Pairing_Feedback_Start(times_s);
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
// 如果不存在,找空位添加
|
|
||||||
if(j==5) { // 循环完整结束,说明不存在
|
|
||||||
// 寻找空位置(值为0的位置)
|
|
||||||
for(i = 0; i <=4; i++) {
|
|
||||||
if(adress_H_array[i] == 0 && adress_L_array[i] == 0) {
|
|
||||||
adress_H_array[i] = adress_H;
|
|
||||||
adress_L_array[i] = adress_L;
|
|
||||||
|
|
||||||
isok=1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if(i==4){
|
|
||||||
for(j = 0; j <5; j++) {
|
|
||||||
if(adress_H_array[j] == adress_H && adress_L_array[j] == adress_L) {
|
|
||||||
updata=1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(updata==0){
|
|
||||||
addToFixedArray(adress_H_array,adress_H);
|
|
||||||
addToFixedArray(adress_L_array,adress_L);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
times_s=300;
|
|
||||||
match_success=1;
|
|
||||||
|
|
||||||
/// EA=0;
|
|
||||||
isok=0;
|
|
||||||
Pairing_Feedback_Start(times_s);
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
else if(res_data==Brightness_L||res_data==B_Brightness_L||res_data==F_Brightness_100){
|
else if(res_data==Brightness_L||res_data==B_Brightness_L||res_data==F_Brightness_100){
|
||||||
adress_H_array[0] = 0xff;
|
adress_H_array[0] = 0xff;
|
||||||
|
|||||||
Reference in New Issue
Block a user