

#define RF_C
#include "all.h"

#define RF_SYN_MIN	6000
#define RF_SYN_MAX	18000

//假设最小脉宽为400us
#define RF_PULSE_MIN	200
#define RF_PULSE_MAX	1600
#define RF_PULSE_MID	600

u8 b_rx_start,b_rx_on;
u8 rf_rx_cnt ,rf_array;
u8 rf_dat[3];
u16 rf_us_mid;

//中断里对脉冲宽度进行检测
//假设最小脉宽为400us
void REC_RF_us_INT(void)
{
u16 rf_us;
if(p_rf_in==0)
	{TIM1->CNT=0;return;
	}
rf_us=TIM1->CNT;
TIM1->CNT=0;

if(b_rx_on)return;

if(rf_us>RF_SYN_MIN&&rf_us<RF_SYN_MAX)//????
	{b_rx_start=1;	
	rf_rx_cnt=0;rf_array=0;//RF_DEBUG????????
	return;
	}

if(b_rx_start==0)return;//??????????

//if(rf_us<rf_us_min||rf_us>rf_us_max)//????
if(rf_us<RF_PULSE_MIN||rf_us>RF_PULSE_MAX)//???????????
	{
	b_rx_start=0;return;	
	}

rf_dat[rf_array]<<=1;
if(rf_us<RF_PULSE_MID)rf_dat[rf_array]=rf_dat[rf_array]+1;
++rf_rx_cnt;
if((rf_rx_cnt)!=8)return;
rf_rx_cnt=0;

if(++rf_array<3)return;
b_rx_start=0;

if(rf_dat_buf[0]==rf_dat[0]&&rf_dat_buf[1]==rf_dat[1]&&rf_dat_buf[2]==rf_dat[2])//两次校验
	{b_rx_on=1;	
	LL_GPIO_TogglePin(p_led2);	
	}
else 
	{rf_dat_buf[0]=rf_dat[0];rf_dat_buf[1]=rf_dat[1];rf_dat_buf[2]=rf_dat[2];
	}

}







u8 lastDat2;
void CHK_RF_DECODE(void)
{u16 index,i;

if(b_rx_on==0)return;
b_rx_on=0;

if(rf_dat_buf[0]==0xff&&rf_dat_buf[1]==0xff&&rf_dat_buf[2]==0xff)return;
if(rf_dat_buf[0]==0   &&rf_dat_buf[1]==0   &&rf_dat_buf[2]==0)return ;

if(RF.active_10ms==0)
	printf("RF:%02X %02X %02X\r\n",rf_dat_buf[0],rf_dat_buf[1],rf_dat_buf[2]);
	
	RF.active_10ms=15;//20220701新增
}


#define PRINTF printf

void RF_TIM_10ms_CB(void)//每10ms中断一次
{
CHK_UART_rxTIMEOUT();
if(TIME.work_ms10>0)TIME.work_ms10--;

if(RF.active_10ms>0)
	{
	if(--RF.active_10ms==0)//清除校验字节  清除比对成功标记
		{rf_dat_buf[0]=0;rf_dat_buf[2]=0;		
		}	
	}
 
TIME.ms10++;
if(TIME.ms10>=100)
	{TIME.ms10=0;SYS.b_tick=1;	
	}		
	
}




void LED_FLASH(u8 t)
{
while(t)
	{LL_GPIO_TogglePin(p_led1);
	myDelay_ms(100);
	t--;
	}
LL_GPIO_ResetOutputPin(p_led1);
}


void WAIT_US(u16 t)
{
TIM1->CNT=0;
while(TIM1->CNT<t);
}


void TX_BYTE(u8 d)
{
u8 i;
for(i=0;i<8;i++)
	{
	if((d&0x80)!=0)
		{
		LL_GPIO_SetOutputPin(p_rf_tx);
		WAIT_US(1200);
		LL_GPIO_ResetOutputPin(p_rf_tx);
		WAIT_US(400);
		}
	else
		{
		LL_GPIO_SetOutputPin(p_rf_tx);
		WAIT_US(400);
		LL_GPIO_ResetOutputPin(p_rf_tx);
		WAIT_US(1200);
		}
	d<<=1;
	}
}
void TX_SYN(void)
{
LL_GPIO_SetOutputPin(p_rf_tx);
WAIT_US(400);
LL_GPIO_ResetOutputPin(p_rf_tx);
WAIT_US(400*31);
}


void TX1527(u8 d0,u8 d1,u8 d2)
{
u8 i;
printf("\r\n无线发射%02X%02X%02X",d0,d1,d2);
for(i=0;i<25;i++)//while(1)
	{
	LL_GPIO_TogglePin(p_led2);//闪烁	
	TX_SYN();
	TX_BYTE(d0);
	TX_BYTE(d1);
	TX_BYTE(d2);	
	}
printf("	发射结速",NULL);
LL_GPIO_ResetOutputPin(p_led2);//LED OFF
}


