完善一个通道最多对码5个遥控
This commit is contained in:
@@ -49,7 +49,7 @@
|
||||
}
|
||||
|
||||
/// Default Device Name
|
||||
#define APP_DFLT_DEVICE_NAME ("Hpw422")
|
||||
#define APP_DFLT_DEVICE_NAME ("HPW422")
|
||||
#define APP_DFLT_DEVICE_NAME_LEN (sizeof(APP_DFLT_DEVICE_NAME))//must not be greater than APP_DEVICE_NAME_MAX_LEN
|
||||
#define APP_SINGLEOTA_DEVICE_NAME "OTA_TEST"
|
||||
#define APP_SINGLEOTA_DEVICE_NAME_LEN (sizeof(APP_SINGLEOTA_DEVICE_NAME))
|
||||
@@ -64,8 +64,8 @@
|
||||
#define APP_ADV_INT_MAX (64)
|
||||
#define ADV_DATA_MAX_LENGTH 28
|
||||
|
||||
#define MANUFACTURER_DATA "\x09\xFF\x00\x60\x52\x57\x2D\x42\x4C\x45"
|
||||
#define MANUFACTURER_DATA_LEN (sizeof(MANUFACTURER_DATA))//10
|
||||
#define MANUFACTURER_DATA "\x09\xFF\x32\x60\x47\x99"
|
||||
#define MANUFACTURER_DATA_LEN (sizeof(MANUFACTURER_DATA)-1)//10
|
||||
|
||||
/// Advertising duration (in unit of 10ms). 0 means that advertising continues
|
||||
/// until the host disable it
|
||||
|
||||
@@ -111,22 +111,53 @@ void app_create_advertising(void)
|
||||
}
|
||||
}
|
||||
|
||||
//void app_set_adv_data(void)
|
||||
//{
|
||||
// if (app_env.adv_state == APP_ADV_STATE_STARTING) {
|
||||
// uint8_t adv_data[ADV_DATA_MAX_LENGTH] = {0};
|
||||
// adv_data[0] = APP_DFLT_DEVICE_NAME_LEN + 1;
|
||||
// adv_data[1] = GAP_AD_TYPE_COMPLETE_NAME;
|
||||
// memcpy(&adv_data[2], APP_DFLT_DEVICE_NAME, APP_DFLT_DEVICE_NAME_LEN);
|
||||
// xc_ble_set_adv_data(app_env.adv_actv_idx, APP_DFLT_DEVICE_NAME_LEN + 2,
|
||||
// adv_data);
|
||||
//
|
||||
// adv_info.name_length= APP_SINGLEOTA_DEVICE_NAME_LEN;
|
||||
// memcpy(&adv_info.name,APP_SINGLEOTA_DEVICE_NAME,APP_SINGLEOTA_DEVICE_NAME_LEN);
|
||||
// app_env.adv_state = APP_ADV_STATE_SETTING_ADV_DATA;
|
||||
// }
|
||||
//}
|
||||
|
||||
void app_set_adv_data(void)
|
||||
{
|
||||
if (app_env.adv_state == APP_ADV_STATE_STARTING) {
|
||||
uint8_t adv_data[ADV_DATA_MAX_LENGTH] = {0};
|
||||
adv_data[0] = APP_DFLT_DEVICE_NAME_LEN + 1;
|
||||
adv_data[1] = GAP_AD_TYPE_COMPLETE_NAME;
|
||||
memcpy(&adv_data[2], APP_DFLT_DEVICE_NAME, APP_DFLT_DEVICE_NAME_LEN);
|
||||
xc_ble_set_adv_data(app_env.adv_actv_idx, APP_DFLT_DEVICE_NAME_LEN + 2,
|
||||
adv_data);
|
||||
|
||||
adv_info.name_length= APP_SINGLEOTA_DEVICE_NAME_LEN;
|
||||
memcpy(&adv_info.name,APP_SINGLEOTA_DEVICE_NAME,APP_SINGLEOTA_DEVICE_NAME_LEN);
|
||||
uint8_t adv_data[ADV_DATA_MAX_LENGTH] = {0}; // 初始化广播数据数组
|
||||
uint8_t pos = 0; // 追踪广播数据的位置
|
||||
|
||||
// 添加设备名称
|
||||
adv_data[pos] = APP_DFLT_DEVICE_NAME_LEN + 1; // 设备名称长度 + 1 字节的类型字段
|
||||
pos++;
|
||||
adv_data[pos] = GAP_AD_TYPE_COMPLETE_NAME; // 设备名称类型
|
||||
pos++;
|
||||
memcpy(&adv_data[pos], APP_DFLT_DEVICE_NAME, APP_DFLT_DEVICE_NAME_LEN); // 复制设备名称
|
||||
pos += APP_DFLT_DEVICE_NAME_LEN;
|
||||
|
||||
// 添加制造商数据
|
||||
adv_data[pos] = MANUFACTURER_DATA_LEN + 1; // 制造商数据长度 + 1 字节的类型字段
|
||||
pos++;
|
||||
adv_data[pos] = GAP_AD_TYPE_MANU_SPECIFIC_DATA; // 制造商数据类型
|
||||
pos++;
|
||||
memcpy(&adv_data[pos], MANUFACTURER_DATA, MANUFACTURER_DATA_LEN); // 复制制造商数据
|
||||
pos += MANUFACTURER_DATA_LEN;
|
||||
|
||||
// 设置广播数据
|
||||
xc_ble_set_adv_data(app_env.adv_actv_idx, pos, adv_data);
|
||||
|
||||
// 更新广播状态
|
||||
app_env.adv_state = APP_ADV_STATE_SETTING_ADV_DATA;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void app_set_scan_rsp_data(void)
|
||||
{
|
||||
if (app_env.adv_state == APP_ADV_STATE_SETTING_ADV_DATA) {
|
||||
|
||||
@@ -24,26 +24,38 @@ static unsigned char get_checksum(unsigned char *ptrdata, unsigned char length)
|
||||
|
||||
void read_user_data(void)
|
||||
{
|
||||
if(r_data[20] == get_checksum(&r_data[2],18))
|
||||
if(r_data[26] == get_checksum(&r_data[2],24))
|
||||
{
|
||||
adress_H_array[0]=r_data[2];
|
||||
adress_H_array[1]=r_data[3];
|
||||
adress_H_array[2]=r_data[4];
|
||||
adress_H_array[3]=r_data[5];
|
||||
adress_H_array[4]=r_data[6];
|
||||
adress_L_array[0]=r_data[7];
|
||||
adress_L_array[1]=r_data[8];
|
||||
adress_L_array[2]=r_data[9];
|
||||
adress_L_array[3]=r_data[10];
|
||||
adress_L_array[4]=r_data[11];
|
||||
adress_ch_flag[0]=r_data[12];
|
||||
adress_ch_flag[1]=r_data[13];
|
||||
adress_ch_flag[2]=r_data[14];
|
||||
adress_ch_flag[3]=r_data[15];
|
||||
adress_ch_flag[4]=r_data[16];
|
||||
adress_index=r_data[17];
|
||||
flash_ch1_state=r_data[18];
|
||||
flash_ch2_state=r_data[19];
|
||||
adress_H_ch1[0]= r_data[2];
|
||||
adress_H_ch1[1]= r_data[3];
|
||||
adress_H_ch1[2]= r_data[4];
|
||||
adress_H_ch1[3]= r_data[5];
|
||||
adress_H_ch1[4]= r_data[6];
|
||||
|
||||
adress_L_ch1[0]= r_data[7];
|
||||
adress_L_ch1[1]= r_data[8];
|
||||
adress_L_ch1[2]= r_data[9];
|
||||
adress_L_ch1[3]= r_data[10];
|
||||
adress_L_ch1[4]= r_data[11];
|
||||
|
||||
|
||||
adress_H_ch2[0]= r_data[12];
|
||||
adress_H_ch2[1]= r_data[13];
|
||||
adress_H_ch2[2]= r_data[14];
|
||||
adress_H_ch2[3]= r_data[15];
|
||||
adress_H_ch2[4]= r_data[16];
|
||||
|
||||
adress_L_ch2[0]= r_data[17];
|
||||
adress_L_ch2[1]= r_data[18];
|
||||
adress_L_ch2[2]= r_data[19];
|
||||
adress_L_ch2[3]= r_data[20];
|
||||
adress_L_ch2[4]= r_data[21];
|
||||
|
||||
adress_ch1_index = r_data[22];
|
||||
adress_ch2_index = r_data[23];
|
||||
|
||||
flash_ch1_state=r_data[24];
|
||||
flash_ch2_state=r_data[25];
|
||||
}
|
||||
|
||||
}
|
||||
@@ -54,26 +66,38 @@ void wright_user_data(void)
|
||||
|
||||
app_data[0] = 0xAA;
|
||||
app_data[1] = 0x55;
|
||||
app_data[2] = adress_H_array[0];
|
||||
app_data[3] = adress_H_array[1];
|
||||
app_data[4] = adress_H_array[2];
|
||||
app_data[5] = adress_H_array[3];
|
||||
app_data[6] = adress_H_array[4];
|
||||
app_data[7] = adress_L_array[0];
|
||||
app_data[8] = adress_L_array[1];
|
||||
app_data[9] = adress_L_array[2];
|
||||
app_data[10] =adress_L_array[3];
|
||||
app_data[11] =adress_L_array[4];
|
||||
app_data[12] =adress_ch_flag[0];
|
||||
app_data[13] =adress_ch_flag[1];
|
||||
app_data[14] =adress_ch_flag[2];
|
||||
app_data[15] =adress_ch_flag[3];
|
||||
app_data[16] =adress_ch_flag[4];
|
||||
app_data[17] = adress_index;
|
||||
app_data[18] = flash_ch1_state;
|
||||
app_data[19] = flash_ch2_state;
|
||||
app_data[2] = adress_H_ch1[0];
|
||||
app_data[3] = adress_H_ch1[1];
|
||||
app_data[4] = adress_H_ch1[2];
|
||||
app_data[5] = adress_H_ch1[3];
|
||||
app_data[6] = adress_H_ch1[4];
|
||||
|
||||
app_data[20] = get_checksum(&app_data[2],18);
|
||||
app_data[7] = adress_L_ch1[0];
|
||||
app_data[8] = adress_L_ch1[1];
|
||||
app_data[9] = adress_L_ch1[2];
|
||||
app_data[10] = adress_L_ch1[3];
|
||||
app_data[11] = adress_L_ch1[4];
|
||||
|
||||
|
||||
app_data[12] = adress_H_ch2[0];
|
||||
app_data[13] = adress_H_ch2[1];
|
||||
app_data[14] = adress_H_ch2[2];
|
||||
app_data[15] = adress_H_ch2[3];
|
||||
app_data[16] = adress_H_ch2[4];
|
||||
|
||||
app_data[17] = adress_L_ch2[0];
|
||||
app_data[18] = adress_L_ch2[1];
|
||||
app_data[19] = adress_L_ch2[2];
|
||||
app_data[20] = adress_L_ch2[3];
|
||||
app_data[21] = adress_L_ch2[4];
|
||||
|
||||
app_data[22] = adress_ch1_index;
|
||||
app_data[23] = adress_ch2_index;
|
||||
app_data[24] = flash_ch1_state;
|
||||
app_data[25] = flash_ch2_state;
|
||||
|
||||
|
||||
app_data[26] = get_checksum(&app_data[2],24);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -8,45 +8,47 @@
|
||||
#include "timeslice.h"
|
||||
#include "dbg.h"
|
||||
#include "rf433_decoder.h"
|
||||
//用bit表示通道
|
||||
#define CH_GPIO2 0x01
|
||||
#define CH_GPIO5 0x10
|
||||
////用bit表示通道
|
||||
//#define CH_GPIO2 0x01
|
||||
//#define CH_GPIO5 0x10
|
||||
|
||||
Rf433DecoderFrame_t rf433_frame;
|
||||
|
||||
uint32_t receive_temp;
|
||||
uint32_t receive_data;
|
||||
uint8_t high_level_time;
|
||||
uint8_t low_level_time;
|
||||
uint8_t receive_data_cnt;
|
||||
|
||||
uint8_t adress_H=0;
|
||||
uint8_t adress_L=0;
|
||||
uint8_t key_state=0;
|
||||
uint8_t KEY_STATE_re=0; // 长按
|
||||
uint8_t long_flag_s=0;
|
||||
|
||||
uint8_t receive_finsh_flag=0;
|
||||
|
||||
|
||||
static uint8_t power=2;
|
||||
|
||||
uint8_t res_data=255; //433返回的最后一个控制字节(低八位)
|
||||
|
||||
static uint16_t long_time=0; //表示长按短按 该值一定要大于8,68是指68ms通过逻辑分析仪测量一帧433的时间
|
||||
static uint16_t time_300ms=1; //表示:当长按的时候要300ms执行一次
|
||||
|
||||
|
||||
uint8_t adress_ture_flag=0;
|
||||
uint8_t adress_H_array[5]={0,0,0,0,0};
|
||||
uint8_t adress_L_array[5]={0,0,0,0,0};
|
||||
uint8_t adress_ch_flag[5]={0,0,0,0,0};
|
||||
uint8_t adress_index_ture=0xFF;
|
||||
uint8_t adress_index=0; //地址下标
|
||||
|
||||
uint8_t adress_H_ch1[5] = {0}; // 通道1(GPIO5)高8位地址
|
||||
uint8_t adress_L_ch1[5] = {0}; // 通道1低8位地址
|
||||
uint8_t adress_ch1_index = 0; // 通道1地址索引(0-4)
|
||||
|
||||
uint8_t adress_H_ch2[5] = {0}; // 通道2(GPIO2)高8位地址
|
||||
uint8_t adress_L_ch2[5] = {0}; // 通道2低8位地址
|
||||
uint8_t adress_ch2_index = 0; // 通道2地址索引(0-4)
|
||||
|
||||
uint8_t match_ch = 0; // 匹配到的通道(1=GPIO5,2=GPIO2)
|
||||
|
||||
|
||||
#define MATCH_CH1 (1 << 0) // 通道1匹配标记
|
||||
#define MATCH_CH2 (1 << 1) // 通道2匹配标记
|
||||
|
||||
|
||||
uint8_t flash_ch1_state=0;
|
||||
uint8_t flash_ch2_state=0;
|
||||
|
||||
|
||||
union rf433_flag rf_flag = {0};
|
||||
|
||||
|
||||
#define rf433_long_time 500
|
||||
uint16_t long_timer=0;
|
||||
@@ -136,125 +138,12 @@ static void set_click(void)
|
||||
|
||||
|
||||
|
||||
void rf433_receive(void)//rf433接收,查询周期100us
|
||||
{
|
||||
|
||||
if (RF_DATA == LOW_LEVEL)
|
||||
{
|
||||
low_level_time++;//记录低电平时间
|
||||
rf_flag.rf_receive_flag.current_level = 0; //当前电平状态
|
||||
}
|
||||
else if (RF_DATA == HIGH_LEVEL)
|
||||
{
|
||||
high_level_time++;//记录高电平时间
|
||||
|
||||
if (!rf_flag.rf_receive_flag.current_level)//每个上升沿检测,0→1,一个完整的周期检测
|
||||
{
|
||||
|
||||
|
||||
if ((high_level_time > 1 && high_level_time < 7) && (low_level_time > 100 && low_level_time < 130)) //判同步码,时间间隔13ms以内 //1-7,115-130 12 15 115-130 100
|
||||
{
|
||||
//进来这里需要13ms
|
||||
rf_flag.rf_receive_flag.sync_code = 1;//同步码接收成功标志
|
||||
receive_data_cnt = 0;
|
||||
receive_temp = 0;
|
||||
long_time=frames_time;
|
||||
|
||||
|
||||
|
||||
}
|
||||
else if (rf_flag.rf_receive_flag.sync_code)//开始接收数据包
|
||||
{
|
||||
|
||||
if ((high_level_time >= 1 && high_level_time <= 7) && (low_level_time >= 7 && low_level_time <= 16)) //数据低电平
|
||||
{
|
||||
|
||||
receive_temp = receive_temp << 1;
|
||||
receive_data_cnt++;//接收24位位数
|
||||
if (receive_data_cnt == 24)//24位数据接收完成
|
||||
{
|
||||
//进来这个if需要40ms
|
||||
rf_flag.rf_receive_flag.receive_finish = 1;//24位数据接收完成标志
|
||||
rf_flag.rf_receive_flag.sync_code = 0;
|
||||
receive_data = receive_temp;//将接收到的编码复制到解码寄存器中
|
||||
res_data=receive_temp; //将接收到的编码复制到解码寄存器中
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
else if ((high_level_time >= 7 && high_level_time <= 16) && (low_level_time >= 2 && low_level_time<= 7)) //数据高电平
|
||||
{
|
||||
receive_temp = receive_temp << 1;
|
||||
receive_temp |= 1;
|
||||
receive_data_cnt++;
|
||||
if (receive_data_cnt == 24)
|
||||
{
|
||||
//进来这个if需要40ms3748f3
|
||||
rf_flag.rf_receive_flag.receive_finish = 1;//24位数据接收完成标志
|
||||
rf_flag.rf_receive_flag.sync_code = 0;
|
||||
receive_data = receive_temp;//将接收到的编码复制到解码寄存器中
|
||||
res_data=receive_temp;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
rf_flag.rf_receive_flag.sync_code = 0;//接收失败
|
||||
}
|
||||
|
||||
|
||||
long_time=frames_time;//该值一定要大与68,68是指68ms通过逻辑分析仪测量一帧的时间
|
||||
}
|
||||
|
||||
if(long_time>0)
|
||||
{ //一直按着会进入该if
|
||||
//P05=0; //433LED灯
|
||||
long_time--;
|
||||
long_flag_s=0;
|
||||
if( KEY_STATE_re==1)
|
||||
{
|
||||
if(time_300ms==0)
|
||||
{
|
||||
time_300ms=Short_time;
|
||||
long_flag_s=1;
|
||||
KEY_STATE_re=0;
|
||||
}
|
||||
else if(time_300ms>0)
|
||||
time_300ms--;
|
||||
}
|
||||
}
|
||||
else
|
||||
{ //松手
|
||||
time_300ms=LongPress_time;
|
||||
long_time=0;
|
||||
long_flag_s=0;
|
||||
Key_TypeDef.KEY_STATE_Click=0;
|
||||
KEY_STATE_re=0;
|
||||
}
|
||||
|
||||
low_level_time = 0;//清零低电平时间
|
||||
high_level_time = 1;//高电平时间开始计数
|
||||
|
||||
}
|
||||
rf_flag.rf_receive_flag.current_level = 1;//当前电平状态
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void app_key_callback_handler(uint16_t key_value) //按键回调函数
|
||||
{
|
||||
switch(key_value)
|
||||
{
|
||||
// case REC_KEY_UP_SHORT_UP: //短按
|
||||
//
|
||||
// key_state=KEY_SHORT;
|
||||
// power=4;
|
||||
// led_state=2;
|
||||
// break;
|
||||
|
||||
case REC_KEY_UP_LONG_DOWN: //长按
|
||||
|
||||
led_state=1;
|
||||
@@ -318,17 +207,17 @@ void _433_fun(void)
|
||||
// if(Key_TypeDef.KEY_STATE_Click==1||KEY_STATE_re==1) return;
|
||||
// set_click(); //设置单击长按
|
||||
|
||||
uint8_t ch_mask = adress_ch_flag[adress_index_ture];
|
||||
|
||||
|
||||
switch(res_data)
|
||||
{
|
||||
case 0x03: //如果是3键遥控或者是正方形白色遥控
|
||||
if(ch_mask & CH_GPIO2){
|
||||
if(match_ch & MATCH_CH2){
|
||||
xc_gpio_toggle_pin(GPIO_2);
|
||||
flash_ch2_state=xc_gpio_read_pin(GPIO_2);
|
||||
}
|
||||
|
||||
if(ch_mask & CH_GPIO5){
|
||||
if(match_ch & MATCH_CH1){
|
||||
xc_gpio_toggle_pin(GPIO_5);
|
||||
flash_ch1_state=xc_gpio_read_pin(GPIO_5);
|
||||
}
|
||||
@@ -338,13 +227,12 @@ void _433_fun(void)
|
||||
|
||||
|
||||
case 0x04: //如果是黑色长方形遥控或者椭圆遥控关闭按键
|
||||
if(ch_mask & CH_GPIO2)
|
||||
if(match_ch & MATCH_CH2)
|
||||
{
|
||||
xc_gpio_write_pin(GPIO_2,GPIO_PIN_RESET);
|
||||
flash_ch2_state=xc_gpio_read_pin(GPIO_2);
|
||||
}
|
||||
|
||||
if(ch_mask & CH_GPIO5)
|
||||
if(match_ch & MATCH_CH1)
|
||||
{
|
||||
xc_gpio_write_pin(GPIO_5,GPIO_PIN_RESET);
|
||||
flash_ch1_state=xc_gpio_read_pin(GPIO_5);
|
||||
@@ -354,13 +242,13 @@ void _433_fun(void)
|
||||
break;
|
||||
|
||||
case 0x02: //如果是黑色长方形遥控或者椭圆遥控打开按键
|
||||
if(ch_mask & CH_GPIO2)
|
||||
if(match_ch & MATCH_CH2)
|
||||
{
|
||||
xc_gpio_write_pin(GPIO_2,GPIO_PIN_SET);
|
||||
flash_ch2_state=xc_gpio_read_pin(GPIO_2);
|
||||
}
|
||||
|
||||
if(ch_mask & CH_GPIO5)
|
||||
if(match_ch & MATCH_CH1)
|
||||
{
|
||||
xc_gpio_write_pin(GPIO_5,GPIO_PIN_SET);
|
||||
flash_ch1_state=xc_gpio_read_pin(GPIO_5);
|
||||
@@ -391,14 +279,14 @@ void scan_433(void)
|
||||
if(rf433_sw_flag==1)
|
||||
{
|
||||
rf433_sw_flag=0;
|
||||
power=3;
|
||||
power=4;
|
||||
key_state=KEY_SHORT;
|
||||
led_state=2;
|
||||
}
|
||||
else if(rf433_sw_flag==2)
|
||||
{
|
||||
rf433_sw_flag=0;
|
||||
power=4;
|
||||
power=3;
|
||||
key_state=KEY_SHORT;
|
||||
led_state=2;
|
||||
}
|
||||
@@ -408,9 +296,9 @@ void scan_433(void)
|
||||
adress_H = rf433_frame.addr_h;
|
||||
adress_L = rf433_frame.addr_l;
|
||||
res_data = rf433_frame.key ;
|
||||
//LOGI("finsh finsh finsh\r\n");
|
||||
|
||||
}
|
||||
//LOGI("rf433_decoder_flag %d adress_H 0x%02x adress_L 0x%02x res_data 0x%02x\r\n",rf433_decoder_flag,adress_H,adress_L,res_data);
|
||||
|
||||
if(power==3 && rf433_decoder_flag==true && key_state==KEY_SHORT ) //双击对码GPIO2
|
||||
{
|
||||
|
||||
@@ -420,40 +308,31 @@ void scan_433(void)
|
||||
led_state=0;
|
||||
|
||||
|
||||
uint8_t ch_mask=CH_GPIO2; //对应位掩码
|
||||
|
||||
// adress_H=((receive_data>>16)&0xff); //读取高八位地址码
|
||||
// adress_L=((receive_data>>8)&0xff); //读取低八位地址码
|
||||
|
||||
if(adress_index>4)
|
||||
if(adress_ch2_index>4)
|
||||
{
|
||||
adress_index=0;
|
||||
adress_ch2_index=0;
|
||||
}
|
||||
|
||||
adress_ture_flag=0;
|
||||
|
||||
for(i=0;i<5;i++)
|
||||
{
|
||||
if(adress_H_array[i]==adress_H && adress_L_array[i]==adress_L)
|
||||
if(adress_H_ch2[i]==adress_H && adress_L_ch2[i]==adress_L)
|
||||
{
|
||||
adress_ture_flag=1;
|
||||
adress_index_ture=i; //存放找到的地址下标
|
||||
adress_ch_flag[i] |= ch_mask;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(adress_ture_flag==0)
|
||||
{
|
||||
uint8_t current_idx = adress_index ;
|
||||
adress_H_array[current_idx] = adress_H;
|
||||
adress_L_array[current_idx] = adress_L;
|
||||
adress_ch_flag[current_idx] = ch_mask; // 初始掩码
|
||||
adress_index++;
|
||||
|
||||
adress_H_ch2[adress_ch2_index] = adress_H;
|
||||
adress_L_ch2[adress_ch2_index] = adress_L;
|
||||
adress_ch2_index++; // 索引自增
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -466,34 +345,26 @@ void scan_433(void)
|
||||
power=2;
|
||||
led_state=0;
|
||||
|
||||
uint8_t ch_mask=CH_GPIO5; //对应位掩码
|
||||
|
||||
// adress_H=((receive_data>>16)&0xff); //读取高八位地址码
|
||||
// adress_L=((receive_data>>8)&0xff); //读取低八位地址码
|
||||
|
||||
if(adress_index>4)
|
||||
if(adress_ch1_index>4)
|
||||
{
|
||||
adress_index=0;
|
||||
adress_ch1_index=0;
|
||||
}
|
||||
|
||||
adress_ture_flag=0;
|
||||
for(i=0;i<5;i++)
|
||||
{
|
||||
if(adress_H_array[i]==adress_H && adress_L_array[i]==adress_L)
|
||||
if(adress_H_ch1[i]==adress_H && adress_L_ch1[i]==adress_L)
|
||||
{
|
||||
adress_ture_flag=1;
|
||||
adress_index_ture=i; //存放找到的地址下标
|
||||
adress_ch_flag[i] |= ch_mask;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(adress_ture_flag==0)
|
||||
{
|
||||
uint8_t current_idx = adress_index ;
|
||||
adress_H_array[current_idx] = adress_H;
|
||||
adress_L_array[current_idx] = adress_L;
|
||||
adress_ch_flag[current_idx] = ch_mask; // 初始掩码
|
||||
adress_index++;
|
||||
adress_H_ch1[adress_ch1_index] = adress_H;
|
||||
adress_L_ch1[adress_ch1_index] = adress_L;
|
||||
adress_ch1_index++; // 索引自增
|
||||
}
|
||||
|
||||
}
|
||||
@@ -511,19 +382,31 @@ void scan_433(void)
|
||||
{
|
||||
return;
|
||||
}
|
||||
adress_index_ture = 0xFF; // 默认无效
|
||||
|
||||
|
||||
// 初始化匹配状态
|
||||
match_ch = 0;
|
||||
|
||||
for(i=0; i<5; i++)
|
||||
{
|
||||
if( adress_H_array[i] == adress_H &&
|
||||
adress_L_array[i] == adress_L )
|
||||
{
|
||||
adress_index_ture = i; // 找到索引
|
||||
if( adress_H_ch1[i] == adress_H && adress_L_ch1[i] == adress_L )
|
||||
{
|
||||
match_ch|= MATCH_CH1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 找到有效索引执行
|
||||
if(adress_index_ture != 0xFF)
|
||||
|
||||
for(i=0; i<5; i++)
|
||||
{
|
||||
if(adress_H_ch2[i]==adress_H && adress_L_ch2[i]==adress_L)
|
||||
{
|
||||
match_ch|= MATCH_CH2; // 标记匹配到通道2
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(match_ch != 0)
|
||||
{
|
||||
_433_fun();
|
||||
flash_run();
|
||||
@@ -536,10 +419,12 @@ void scan_433(void)
|
||||
if( key_state==KEY_LONG )
|
||||
{
|
||||
key_state=0;
|
||||
memset(adress_H_array, 0, sizeof(adress_H_array));
|
||||
memset(adress_L_array, 0, sizeof(adress_L_array));
|
||||
memset(adress_ch_flag, 0, sizeof(adress_ch_flag));
|
||||
adress_index=0;
|
||||
memset(adress_H_ch1, 0, sizeof(adress_H_ch1));
|
||||
memset(adress_H_ch2, 0, sizeof(adress_H_ch2));
|
||||
memset(adress_L_ch1, 0, sizeof(adress_L_ch1));
|
||||
memset(adress_L_ch2, 0, sizeof(adress_L_ch2));
|
||||
adress_ch1_index=0;
|
||||
adress_ch2_index=0;
|
||||
flash_run();
|
||||
|
||||
}
|
||||
|
||||
@@ -45,33 +45,22 @@
|
||||
|
||||
extern uint8_t flash_ch1_state;
|
||||
extern uint8_t flash_ch2_state;
|
||||
extern uint8_t adress_H_array[5];
|
||||
extern uint8_t adress_L_array[5];
|
||||
extern uint8_t adress_ch_flag[5];
|
||||
extern uint8_t adress_index;
|
||||
extern uint8_t key_state;
|
||||
|
||||
extern uint8_t adress_H_ch1[5]; // 通道1(GPIO5)高8位地址
|
||||
extern uint8_t adress_L_ch1[5]; // 通道1低8位地址
|
||||
extern uint8_t adress_ch1_index; // 通道1地址索引(0-4)
|
||||
|
||||
extern uint8_t adress_H_ch2[5]; // 通道2(GPIO2)高8位地址
|
||||
extern uint8_t adress_L_ch2[5]; // 通道2低8位地址
|
||||
extern uint8_t adress_ch2_index; // 通道2地址索引(0-4)
|
||||
|
||||
enum
|
||||
{
|
||||
LOW_LEVEL, //0
|
||||
HIGH_LEVEL //1
|
||||
};
|
||||
|
||||
union rf433_flag
|
||||
{
|
||||
struct
|
||||
{
|
||||
unsigned char study: 1; //表示占用1位
|
||||
unsigned char long_press_flag:1;
|
||||
unsigned char short_press_flag:1;
|
||||
unsigned char current_level: 1;
|
||||
unsigned char sync_code: 1;
|
||||
unsigned char decode_success_flag:1; //松手检测标志
|
||||
unsigned char new_remote_flag:1;
|
||||
unsigned char receive_finish: 1;
|
||||
unsigned char raised_long_press_flag: 1;
|
||||
} rf_receive_flag;
|
||||
unsigned char flag;
|
||||
}; //联合体赋初值 rf_flag = {0}
|
||||
|
||||
|
||||
void flash_run(void);
|
||||
@@ -80,7 +69,6 @@ void rf433_gpio_init(void);
|
||||
|
||||
void chx_gpio_init(void);
|
||||
|
||||
void rf433_receive(void);
|
||||
|
||||
void app_key_callback_handler(uint16_t key_value);
|
||||
|
||||
|
||||
@@ -162,10 +162,9 @@ __RAM_CODE void timer1_callback(void *context)
|
||||
|
||||
__RAM_CODE void timer2_callback(void *context)
|
||||
{
|
||||
//rf433_receive();
|
||||
|
||||
rf433_decoder_sample(RF_DATA);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#include "uart_1.h"
|
||||
#include "xc_drv_gpio.h"
|
||||
#include "rf433.h"
|
||||
|
||||
//#include "dbg.h"
|
||||
ble_data_msg user_ble_data_msg;
|
||||
ble_data_msg *p_ble_data_msg = NULL;
|
||||
|
||||
@@ -24,7 +24,7 @@ void scan_uart(uint8_t *arr)
|
||||
checksum += user_rx_buf[i];
|
||||
}
|
||||
user_rx_buf[5] = checksum; // 校验位
|
||||
|
||||
//LOGI("%02x %02x %02x %02x %02x %02x\r\n",user_rx_buf[0],user_rx_buf[1],user_rx_buf[2],user_rx_buf[3],user_rx_buf[4],user_rx_buf[5]);
|
||||
switch(user_rx_buf[4])
|
||||
{
|
||||
case 0x01:
|
||||
|
||||
@@ -21,10 +21,10 @@
|
||||
#include "xc_gatt_server_api.h"
|
||||
|
||||
#define CUSTOM_SVC_UUID 0xFFF0
|
||||
#define CUSTOM_SVC_RX_CHAR_UUID 0xFFF3
|
||||
#define CUSTOM_SVC_RX_CHAR_UUID 0xFFE2
|
||||
#define CUSTOM_SVC_TX_CHAR_UUID 0xFFF4
|
||||
#define CUSTOM_SVC_RX_CHAR_VAL_MAX_LENGTH 20
|
||||
#define CUSTOM_SVC_TX_CHAR_VAL_MAX_LENGTH 20
|
||||
#define CUSTOM_SVC_RX_CHAR_VAL_MAX_LENGTH 120
|
||||
#define CUSTOM_SVC_TX_CHAR_VAL_MAX_LENGTH 120
|
||||
|
||||
enum cust_svc
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user