/**
|
******************************************************************************
|
* @file : KWireLess.c
|
* @brief : K-WireLess Protocol program body
|
******************************************************************************
|
*/
|
#include "KWireLess.h"
|
#include "functions.h"
|
#include "string.h"
|
#include "PLCFunctions.h"
|
#include "stm32f0xx_hal.h"
|
|
|
/**************************************************************************************************************************************
|
Demo 程序流程 RadioEnableMaster=true 为主机端,主机端发送一个"PING"数据后切换到接收,等待从机返回的应答"PONG"数据LED闪烁
|
|
RadioEnableMaster=false 为从机端,从机端接收到主机端发过来的"PING"数据后LED闪烁并发送一个"PONG"数据作为应答
|
***************************************************************************************************************************************/
|
|
#define USE_MODEM_LORA
|
//#define USE_MODEM_FSK
|
|
#define REGION_CN779
|
|
#if defined( REGION_AS923 )
|
|
#define RF_FREQUENCY 923000000 // Hz
|
|
#elif defined( REGION_AU915 )
|
|
#define RF_FREQUENCY 915000000 // Hz
|
|
#elif defined( REGION_CN779 )
|
|
#define RF_FREQUENCY 430620000 // Hz
|
|
#elif defined( REGION_EU868 )
|
|
#define RF_FREQUENCY 868000000 // Hz
|
|
#elif defined( REGION_KR920 )
|
|
#define RF_FREQUENCY 920000000 // Hz
|
|
#elif defined( REGION_IN865 )
|
|
#define RF_FREQUENCY 865000000 // Hz
|
|
#elif defined( REGION_US915 )
|
|
#define RF_FREQUENCY 915000000 // Hz
|
|
#elif defined( REGION_US915_HYBRID )
|
|
#define RF_FREQUENCY 915000000 // Hz
|
|
#else
|
|
#error "Please define a frequency band in the compiler options."
|
|
#endif
|
|
#define nChannelSpacing 530000 // Hz
|
#define TX_OUTPUT_POWER 16 // 22 dBm
|
|
extern bool IrqFired;
|
|
bool RadioEnableMaster=true;//主从选择
|
uchar nRadioChannel = 0;
|
uchar nRadioAddr = 1;
|
uint16_t crc_value;
|
|
#define MixAddr(x,y) ((x<<4)|(y))
|
/*!
|
* Radio events function pointer
|
*/
|
|
static RadioEvents_t RadioEvents;
|
|
stWLRunStat KwRunStat;
|
|
#if defined( USE_MODEM_LORA )
|
|
#define LORA_BANDWIDTH 1 // [0: 125 kHz,
|
// 1: 250 kHz,
|
// 2: 500 kHz,
|
// 3: Reserved]
|
#define LORA_SPREADING_FACTOR 8 // [SF7..SF12]
|
#define LORA_CODINGRATE 4 // [1: 4/5,
|
// 2: 4/6,
|
// 3: 4/7,
|
// 4: 4/8]
|
#define LORA_PREAMBLE_LENGTH 4 // Same for Tx and Rx
|
#define LORA_SYMBOL_TIMEOUT 0 // Symbols
|
#define LORA_FIX_LENGTH_PAYLOAD_ON false
|
#define LORA_IQ_INVERSION_ON false
|
|
#elif defined( USE_MODEM_FSK )
|
|
#define FSK_FDEV 20e3 // Hz
|
#define FSK_DATARATE 19.2e3 // bps
|
#define FSK_BANDWIDTH 60e3 // Hz >> DSB in sx126x
|
#define FSK_AFC_BANDWIDTH 200e3 // Hz
|
#define FSK_PREAMBLE_LENGTH 5 // Same for Tx and Rx
|
#define FSK_FIX_LENGTH_PAYLOAD_ON false
|
|
#else
|
#error "Please define a modem in the compiler options."
|
#endif
|
|
typedef enum
|
{
|
LOWPOWER,
|
RX,
|
RX_TIMEOUT,
|
RX_ERROR,
|
TX,
|
TX_TIMEOUT,
|
}States_t;
|
|
#define MASTER_RX_TIMEOUT_VALUE 80 //mS
|
#define SLAVE_RX_TIMEOUT_VALUE 250 //mS
|
#define CYCLE_TIME 200 //mS
|
|
#define BUFFER_SIZE 32 // Define the payload size here
|
|
const uint8_t PingMsg[] = "PING";
|
const uint8_t PongMsg[] = "PONG";
|
|
//uint16_t BufferSize = BUFFER_SIZE;
|
uint8_t TX_Buffer[BUFFER_SIZE];
|
uint8_t RX_Buffer[BUFFER_SIZE];
|
|
|
States_t State = LOWPOWER;
|
|
int8_t RssiValue = 0;
|
int8_t SnrValue = 0;
|
|
KWStates KW_State=KW_PON;
|
|
void LedToggle(void)
|
{
|
// GPIO_WriteBit( LED1_PORT, LED1_PIN,Bit_RESET);//LED闪烁
|
// HAL_Delay_nMS(10);
|
// GPIO_WriteBit( LED1_PORT, LED1_PIN,Bit_SET);
|
|
LL_GPIO_TogglePin(GPIOC,LL_GPIO_PIN_13);
|
}
|
|
int KWireLessInit(bool bRadioEnableMaster, uint32_t nChn)
|
{
|
|
RadioEnableMaster = bRadioEnableMaster;
|
// Radio initialization
|
RadioEvents.TxDone = OnTxDone;
|
RadioEvents.RxDone = OnRxDone;
|
RadioEvents.TxTimeout = OnTxTimeout;
|
RadioEvents.RxTimeout = OnRxTimeout;
|
RadioEvents.RxError = OnRxError;
|
RadioEvents.CadDone = OnCadDone;
|
|
Radio.Init( &RadioEvents );
|
nRadioChannel = nChn;
|
Radio.SetChannel( RF_FREQUENCY + nRadioChannel * nChannelSpacing );
|
|
// Radio.WriteBuffer(0x06C0,data,2);
|
// Radio.ReadBuffer(0x06C0,test,2);
|
|
#if defined( USE_MODEM_LORA )
|
/*
|
Radio.SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH,
|
LORA_SPREADING_FACTOR, LORA_CODINGRATE,
|
LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON,
|
true, 0, 0, LORA_IQ_INVERSION_ON, 3000 );
|
|
Radio.SetRxConfig( MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR,
|
LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH,
|
LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON,
|
0, true, 0, 0, LORA_IQ_INVERSION_ON, false );
|
//*/
|
|
Radio.SetTxConfig( MODEM_LORA, TX_OUTPUT_POWER, 0, LORA_BANDWIDTH,
|
LORA_SPREADING_FACTOR, LORA_CODINGRATE,
|
LORA_PREAMBLE_LENGTH, LORA_FIX_LENGTH_PAYLOAD_ON,
|
true, 0, 0, LORA_IQ_INVERSION_ON, 3000 );
|
|
Radio.SetRxConfig( MODEM_LORA, LORA_BANDWIDTH, LORA_SPREADING_FACTOR,
|
LORA_CODINGRATE, 0, LORA_PREAMBLE_LENGTH,
|
LORA_SYMBOL_TIMEOUT, LORA_FIX_LENGTH_PAYLOAD_ON,
|
0, true, 0, 0, LORA_IQ_INVERSION_ON, false );
|
|
Radio.SetMaxPayloadLength(MODEM_LORA,32);
|
|
#elif defined( USE_MODEM_FSK )
|
|
Radio.SetTxConfig( MODEM_FSK, TX_OUTPUT_POWER, FSK_FDEV, 0,
|
FSK_DATARATE, 0,
|
FSK_PREAMBLE_LENGTH, FSK_FIX_LENGTH_PAYLOAD_ON,
|
true, 0, 0, 0, 3000 );
|
|
Radio.SetRxConfig( MODEM_FSK, FSK_BANDWIDTH, FSK_DATARATE,
|
0, FSK_AFC_BANDWIDTH, FSK_PREAMBLE_LENGTH,
|
0, FSK_FIX_LENGTH_PAYLOAD_ON, 0, true,
|
0, 0,false, false );
|
#else
|
#error "Please define a frequency band in the compiler options."
|
#endif
|
SX126xSetRxTxFallbackMode(0x40); // 0x40-> FS 0x30 -> SD_XOSC 0x20 -> SD_RC
|
|
SX126xSetCadParams(2,0,1,0,1);
|
|
|
KwRunStat.runStep=RS_IDEL;
|
return 0;
|
}
|
|
int KWireLessStart(void)
|
{
|
if(RadioEnableMaster)
|
{
|
KWLMasterSendReqPkt(1);
|
}
|
else
|
{
|
Radio.Rx( SLAVE_RX_TIMEOUT_VALUE );
|
KwRunStat.runStep=RS_RECVING;
|
|
KwRunStat.lastActTime = GetTick();
|
KwRunStat.lastRecvtime = GetTick();
|
}
|
|
// while( 1 )
|
// {
|
// Radio.IrqProcess( ); // Process Radio IRQ
|
// }
|
return 0;
|
}
|
|
void OnTxDone( void )
|
{
|
KwRunStat.runStep=RS_IDEL;
|
KMem.WDT[42]++;
|
KwRunStat.lastSenttime = GetTick();
|
KwRunStat.lastAckTime = GetTick();
|
Radio.Standby();
|
if (RadioEnableMaster) {
|
Radio.Rx( MASTER_RX_TIMEOUT_VALUE ); //进入接收
|
} else {
|
Radio.Rx( SLAVE_RX_TIMEOUT_VALUE ); //进入接收
|
}
|
KwRunStat.runStep=RS_RECVING;
|
|
KwRunStat.lastActTime = GetTick();
|
KwRunStat.lastRecvtime = GetTick();
|
LL_GPIO_TogglePin(GPIOC,LL_GPIO_PIN_14);
|
int us2=GetTick();
|
KMem.ScanTimeuS=us2-KMem.LastScanTime;
|
KMem.LastScanTime = us2;
|
if (KMem.ScanTimeuS < KMem.MinScanTimeuS) {KMem.MinScanTimeuS = KMem.ScanTimeuS;}
|
if (KMem.ScanTimeuS > KMem.MaxScanTimeuS) {KMem.MaxScanTimeuS = KMem.ScanTimeuS;}
|
|
}
|
|
void OnTxTimeout( void )
|
{
|
KwRunStat.runStep=RS_IDEL;
|
KwRunStat.lastAckTime = GetTick();
|
KwRunStat.TXErr++;
|
Radio.Standby();
|
// KMem.WDT[44]++;
|
}
|
bool bThisRxError=0;
|
|
void OnRxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr )
|
{
|
KMem.WDT[44] = size;
|
|
memcpy( RX_Buffer, payload, size );
|
memcpy(&KMem.WDT[64],payload,size);
|
Radio.Standby();
|
|
if (bThisRxError) {
|
bThisRxError=0;
|
// return;
|
}
|
|
KwRunStat.curStat = 0;
|
KwRunStat.latancy = GetTick() - KwRunStat.lastSendtime;
|
|
RssiValue = rssi;
|
SnrValue = snr;
|
|
KwRunStat.RSSI = RssiValue;
|
KwRunStat.SNR = SnrValue;
|
|
KwRunStat.recvCount++;
|
// KwRunStat.CtnLstPkts=0;
|
|
if(RadioEnableMaster)
|
{
|
KWLMasterParsePkt(nRadioChannel,size);
|
//KWLMasterSendReqPkt(1);
|
}
|
else //slave
|
{
|
KWLSlaveParsePkt(nRadioChannel,size);
|
|
}
|
}
|
|
void OnRxTimeout( void )
|
{
|
KwRunStat.runStep=RS_IDEL;
|
|
Radio.Standby();
|
KwRunStat.lastErrTime = GetTick() - KwRunStat.lastAckTime;
|
KwRunStat.lastAckTime = GetTick();
|
|
KMem.WDT[45]++;
|
KwRunStat.LostPackets++;
|
KwRunStat.CtnLstPkts++;
|
if (KwRunStat.CtnLstPkts > KwRunStat.MaxCtnLstPkts) {KwRunStat.MaxCtnLstPkts = KwRunStat.CtnLstPkts;}
|
// KMem.ErrStat=500;
|
if (KwRunStat.CtnLstPkts > 1) { KMem.ErrStat=500;}
|
if (KwRunStat.CtnLstPkts == 2) {KwRunStat.Err1Count++;}
|
if (KwRunStat.CtnLstPkts > 3) { KMem.ErrStat=5000;}
|
if (KwRunStat.CtnLstPkts == 4) {KwRunStat.Err2Count++;}
|
if (KwRunStat.CtnLstPkts > 6) { KMem.ErrStat=5000; KMem.WFX[1]=0; }
|
if (KwRunStat.CtnLstPkts == 7) {KwRunStat.Err3Count++;}
|
|
if(RadioEnableMaster)
|
{
|
//KWLMasterSendReqPkt(1);
|
}
|
else
|
{
|
Radio.Rx( SLAVE_RX_TIMEOUT_VALUE );
|
KwRunStat.runStep=RS_RECVING;
|
KwRunStat.lastActTime = GetTick();
|
KwRunStat.lastRecvtime = GetTick();
|
}
|
}
|
|
|
void OnRxError( void )
|
{
|
|
// Radio.Standby();
|
KwRunStat.RXErr++;
|
KMem.WDT[46]++;
|
bThisRxError=1;
|
KwRunStat.lastErrTime = GetTick() - KwRunStat.lastAckTime;
|
|
if(RadioEnableMaster)
|
{
|
// SendPingMsg();
|
}
|
else
|
{
|
// Radio.Rx( RX_TIMEOUT_VALUE );
|
//KwRunStat.lastActTime = GetTick();
|
KwRunStat.LostPackets++;
|
KwRunStat.CtnLstPkts++;
|
if (KwRunStat.CtnLstPkts > KwRunStat.MaxCtnLstPkts) {KwRunStat.MaxCtnLstPkts = KwRunStat.CtnLstPkts;}
|
// KMem.ErrStat=500;
|
if (KwRunStat.CtnLstPkts > 1) { KMem.ErrStat=500; }
|
if (KwRunStat.CtnLstPkts == 2) {KwRunStat.Err1Count++;}
|
if (KwRunStat.CtnLstPkts > 3) { KMem.ErrStat=5000;}
|
if (KwRunStat.CtnLstPkts == 4) {KwRunStat.Err2Count++;}
|
if (KwRunStat.CtnLstPkts > 6) { KMem.ErrStat=5000; KMem.WFX[1]=0; }
|
if (KwRunStat.CtnLstPkts == 7) {KwRunStat.Err3Count++;}
|
}
|
}
|
|
void OnCadDone( bool channelActivityDetected)
|
{
|
KwRunStat.CADDoneCount++;
|
return;
|
}
|
int KWLMasterParsePkt(int nChn,int size)
|
{
|
bool CRC_OK =1;
|
///*
|
crc_value=RadioComputeCRC(RX_Buffer,size-2,CRC_TYPE_IBM);//计算得出要发送数据包CRC值
|
if (RX_Buffer[size-2] != (crc_value&0xff) && RX_Buffer[size-1] != (crc_value >> 8))
|
{
|
KwRunStat.CRCErr++;
|
KMem.ErrStat=500;
|
CRC_OK = 0;
|
}else {
|
CRC_OK = 1;
|
}
|
//*/
|
pstKLPacket p1 = (pstKLPacket) RX_Buffer;
|
if(CRC_OK && p1->STSign == enRplySign ) //memcmp(RX_Buffer,PongMsg,4)==0
|
{
|
if (p1->DstAddr == MixAddr(nRadioChannel,nRadioAddr))
|
{
|
LedToggle();//LED闪烁
|
KwRunStat.lastRecvdtime=GetTick();
|
KwRunStat.lastAckTime = GetTick();
|
KwRunStat.CtnLstPkts=0;
|
|
if (p1->Stat==0) {
|
KwRunStat.tRSSI = RX_Buffer[10];
|
KwRunStat.tSNR = RX_Buffer[11];
|
}else if (p1->Stat==1){
|
KwRunStat.targetSentCount = RX_Buffer[8] + (RX_Buffer[9]<<8) + (RX_Buffer[10]<<16) + (RX_Buffer[11]<<24);
|
}else if (p1->Stat==2) {
|
KwRunStat.targetRecvdCount = RX_Buffer[8] + (RX_Buffer[9]<<8) + (RX_Buffer[10]<<16) + (RX_Buffer[11]<<24);
|
}else if (p1->Stat==3) {
|
}
|
|
KMem.WDT[41]=(-KwRunStat.tRSSI) + ((-KwRunStat.tSNR)<<8);
|
|
KMem.WFX[1]=(RX_Buffer[4]) + (RX_Buffer[5]<<8);
|
// KMem.WFX[1]=(RX_Buffer[4]) + (indicator3<<8);
|
|
KMem.WFX[2]=(RX_Buffer[6]) + (RX_Buffer[7]<<8);
|
}
|
}
|
|
return 0;
|
}
|
int KWLSlaveParsePkt(int nChn,int size)
|
{
|
bool CRC_OK =1;
|
pstKLPacket p1 = (pstKLPacket) RX_Buffer;
|
///*
|
crc_value=RadioComputeCRC(RX_Buffer,size-2,CRC_TYPE_IBM);//计算得出要发送数据包CRC值
|
if (RX_Buffer[size-2] != (crc_value&0xff) && RX_Buffer[size-1] != (crc_value >> 8))
|
{
|
KwRunStat.CRCErr++;
|
KMem.ErrStat=500;
|
CRC_OK = 0;
|
}else {
|
CRC_OK = 1;
|
}
|
//*/
|
if(CRC_OK && p1->STSign == enReqSign && p1->DstAddr == MixAddr(nRadioChannel,nRadioAddr))// memcmp(RX_Buffer,PingMsg,4)==0 && )
|
{
|
|
LedToggle();//LED闪烁
|
KwRunStat.lastRecvdtime=GetTick();
|
KwRunStat.lastAckTime = GetTick();
|
KwRunStat.CtnLstPkts=0;
|
|
if (p1->Stat==0) {
|
KwRunStat.tRSSI = RX_Buffer[10];
|
KwRunStat.tSNR = RX_Buffer[11];
|
}else if (p1->Stat==1){
|
KwRunStat.targetSentCount = RX_Buffer[8] + (RX_Buffer[9]<<8) + (RX_Buffer[10]<<16) + (RX_Buffer[11]<<24);
|
}else if (p1->Stat==2) {
|
KwRunStat.targetRecvdCount = RX_Buffer[8] + (RX_Buffer[9]<<8) + (RX_Buffer[10]<<16) + (RX_Buffer[11]<<24);
|
}else if (p1->Stat==3) {
|
}
|
KMem.WFX[1]=(RX_Buffer[4]) + (RX_Buffer[5]<<8);
|
// KMem.WFX[1]=(RX_Buffer[4]) + (indicator3<<8);
|
|
KMem.WFX[2]=(RX_Buffer[6]) + (RX_Buffer[7]<<8);
|
|
KWLSlaveSendRplyPkt(1);
|
// KMem.WFY[0]=(RX_Buffer[4]<<8) + RX_Buffer[5];
|
// KMem.WFY[1]=(RX_Buffer[6]<<8) + RX_Buffer[7];
|
}
|
else
|
{
|
Radio.Rx( SLAVE_RX_TIMEOUT_VALUE );
|
KwRunStat.runStep=RS_RECVING;
|
KwRunStat.lastActTime = GetTick();
|
KwRunStat.lastRecvtime = GetTick();
|
|
}
|
return 0;
|
}
|
|
int KWLMasterSendReqPkt(int nChn)
|
{
|
int len1=12;
|
pstKLPacket p1 = (pstKLPacket) TX_Buffer;
|
p1->STSign = enReqSign;
|
p1->DstAddr = MixAddr(nRadioChannel,nRadioAddr);
|
p1->Func = 0x3;
|
p1->Stat = (p1->Stat + 1) &0x03; //0x00;
|
p1->Data[0]=KMem.WFY[1];
|
p1->Data[1]=KMem.WFY[1]>>8;
|
p1->Data[2]=KMem.WFY[2];
|
p1->Data[3]=KMem.WFY[2]>>8;
|
|
/*
|
TX_Buffer[0] = 'P';
|
TX_Buffer[1] = 'I';
|
TX_Buffer[2] = 'N';
|
TX_Buffer[3] = 'G';
|
TX_Buffer[4] = KMem.WFY[1];
|
TX_Buffer[5] = KMem.WFY[1]>>8;
|
TX_Buffer[6] = KMem.WFY[2];
|
TX_Buffer[7] = KMem.WFY[2]>>8;
|
*/
|
|
if (p1->Stat == 0)
|
{
|
TX_Buffer[10] = RssiValue;
|
TX_Buffer[11] = SnrValue;
|
}else if (p1->Stat == 1){
|
memcpy(TX_Buffer+8,&KwRunStat.sentCount,4);
|
}else if (p1->Stat == 2) {
|
memcpy(TX_Buffer+8,&KwRunStat.recvCount,4);
|
}else if (p1->Stat == 3) {
|
|
}
|
crc_value=RadioComputeCRC(TX_Buffer,len1,CRC_TYPE_IBM);//计算得出要发送数据包CRC值
|
TX_Buffer[len1]=crc_value;
|
TX_Buffer[len1+1]=crc_value>>8;
|
|
KMem.WDT[56]=crc_value;
|
|
KwRunStat.sentCount++;
|
KwRunStat.cycleTime = GetTick()- KwRunStat.lastSendtime ;
|
KwRunStat.lastSendtime = GetTick();
|
Radio.Send( TX_Buffer, len1+2);
|
KwRunStat.runStep=RS_SENDING;
|
KwRunStat.lastActTime = GetTick();
|
|
return 0;
|
}
|
|
int KWLSlaveSendRplyPkt(int nChn)
|
{
|
int len1=12;
|
pstKLPacket p1 = (pstKLPacket) TX_Buffer;
|
p1->STSign = enRplySign;
|
p1->DstAddr = MixAddr(nRadioChannel,nRadioAddr);
|
p1->Func = 0x3;
|
p1->Stat = (p1->Stat + 1) &0x03; //0x00;
|
p1->Data[0]=KMem.WFY[1];
|
p1->Data[1]=KMem.WFY[1]>>8;
|
p1->Data[2]=KMem.WFY[2];
|
p1->Data[3]=KMem.WFY[2]>>8;
|
/*
|
TX_Buffer[0] = 'P';
|
TX_Buffer[1] = 'O';
|
TX_Buffer[2] = 'N';
|
TX_Buffer[3] = 'G';
|
TX_Buffer[4] = KMem.WFY[1];
|
TX_Buffer[5] = KMem.WFY[1]>>8;
|
TX_Buffer[6] = KMem.WFY[2];
|
TX_Buffer[7] = KMem.WFY[2]>>8;
|
*/
|
if (p1->Stat == 0)
|
{
|
TX_Buffer[10] = RssiValue;
|
TX_Buffer[11] = SnrValue;
|
}else if (p1->Stat == 1){
|
memcpy(TX_Buffer+8,&KwRunStat.sentCount,4);
|
}else if (p1->Stat == 2) {
|
memcpy(TX_Buffer+8,&KwRunStat.recvCount,4);
|
}else if (p1->Stat == 3) {
|
|
}
|
|
crc_value=RadioComputeCRC(TX_Buffer,len1,CRC_TYPE_IBM);//计算得出要发送数据包CRC值
|
TX_Buffer[len1]=crc_value;
|
TX_Buffer[len1+1]=crc_value>>8;
|
Radio.Send( TX_Buffer, len1+2);
|
KwRunStat.runStep=RS_SENDING;
|
|
KwRunStat.lastActTime = GetTick();
|
KwRunStat.sentCount++;
|
KwRunStat.lastSendtime = GetTick();
|
return 0;
|
}
|
|
|
int KWLMasterProc(int nChn)
|
{
|
return 0;
|
}
|
|
int KWLSlaveProc(int nChn)
|
{
|
return 0;
|
}
|
|
int KWL_Process(int nChn)
|
{
|
RadioState_t stat = Radio.GetStatus();
|
KMem.WDT[32]=stat;
|
// KMem.WDT[38]=Radio.Rssi(MODEM_FSK);
|
if (RadioEnableMaster){
|
if (GetTick() - KwRunStat.lastSendtime > CYCLE_TIME *10 && KwRunStat.curStat == 0 ) //&& stat == RF_IDLE ) //200mS
|
{
|
KWireLessStart();
|
}
|
}else //slave
|
{
|
if (stat == RF_IDLE){
|
KMem.WDT[48]++;
|
Radio.Standby();
|
KWireLessStart();
|
}
|
if (stat == RF_RX_RUNNING ){
|
if (GetTick() - KwRunStat.lastRecvtime > ((SLAVE_RX_TIMEOUT_VALUE + 10 )*10)){
|
KwRunStat.lastRecvtime = GetTick();
|
KwRunStat.StepErr1++;
|
KMem.WDT[49]++;
|
Radio.Standby();
|
KWireLessStart();
|
}
|
}
|
if (stat == RF_CAD && GetTick() - KwRunStat.lastRecvtime > ((1 )*10)){
|
KwRunStat.StepErr2++;
|
KMem.WDT[50]++;
|
Radio.Standby();
|
KWireLessStart();
|
}
|
if (GetTick() - KwRunStat.lastRecvdtime > 4000){ // 200mS
|
// KMem.ErrStat=500;
|
KMem.ErrStat=500;
|
}
|
if (GetTick() - KwRunStat.lastRecvdtime > 12000){ // 1200mS
|
KMem.ErrStat=5000; KMem.WFX[1]=0;
|
}
|
}
|
return 0;
|
}
|