#ifndef _PRO_PHY_H
#define _PRO_PHY_H

#include "stm32f10x.h"
#include "pro_data.h"

u8 NRF_UpdateHeartTime(u8 node);
u8 NRF_HeartTableFindValidNode(u8 node);//查找节点
u8 NRF_CmpMultiPack(/*const u8 the_addr,*/const u8 src_addr,const u8 dst_addr,const u8 pack_type,const u16 ID);
u8 NRF_SearchHandlTimeoutId(void);
u8 NRF_AppropriateChannelDetect(void);//检测拥挤程度最低的信道
u8 NRF_MallocIdleDataBufId(void);//得到一个空闲DATABUF
u8 NRF_SearchDataBuf(const u8 status);//查找状态为status的DataBuf
u8 NRF_SearchDataByPackType(u8 addr,u8 type);//查找待发送的type类型数据包
u8 NRF_AddNodeToRoutrTable(LPayload pPayLoad);//添加1个节点到路由表
u8 NRF_GetNodeNumber(void);
u8 PrintRouteTable(void);
u8 PrintNode(void);
u8 PrintLost(void);
u8 NRF_GetThreadLockState(void);
void NRF_DelNodePath(u8 node);//删除节点路径
void NRF_SetThreadLockState(u8 val);
void NRF_Init(void);//初始化协议
void NRF_InitRoutrTable(void);//初始化路由表
void NRF_FreeDataBuf(u8 id);//释放被使用的DATABUF,仅改变为空闲状态
void NRF_ClearNodeData(void);
void NRF_StoreNrfParam(void);
void NRF_HandleBuf(void);//根据缓冲区状态处理缓冲区
void NRF_RecvData(void);
void NRF_Thread(void);//定时线程,执行协议
void NRF_SendData(const u8 dst_addr,const u8 type,const u8 *buf,HANDLESENDCALLBACK fun);//发送数据接口
void NRF_SendCallBack(u8 src_addr,u8 dst_addr,u8 pack_type,u16 ID,u8 *buf,u8 status);
void NRF_HeartCallBack(u8 src_addr,u8 dst_addr,u8 pack_type,u16 pwd,u8 *buf,u8 status);
void NRF_SetDefaultRecvHandler(HANDLERECECALLBACK pFun);//设置接收数据处理函数
void NRF_SetDefaultSendHandler(HANDLESENDCALLBACK pFun);
void NRF_GetMacAddr(u8 *mac,const u8 addr);//获取mac地址
void NRF_SetPipe1Mac(u8 *addr);
//void NRF_SetPipe2Mac(u8 *addr);
//void NRF_SetPipe5_mac(u8 *addr);
void NRF_UpdateHearTable(void);
static void NRF_SendHeartPack(void);
static void NRF_ReadNrfParam(void);
static void NRF_RelayPackage(LPayload pPayLoad);
static void NRF_NrfSendData(void);//根据缓冲区状态发送数据,发送前先检测干扰

extern NODESTATUS NodeStatus;

#endif
