#define SERIALAPP_MAX_CLUSTERS 2
#define SERIALAPP_CLUSTERID1 1 //数据传输
#define SERIALAPP_CLUSTERID2 2 //接收数据响应
将命令添加到命令列表
const cId_t SerialApp_ClusterList[SERIALAPP_MAX_CLUSTERS] =
{
SERIALAPP_CLUSTERID1,
SERIALAPP_CLUSTERID2
};
简单描述符定义
const SimpleDescriptionFormat_t SerialApp_SimpleDesc =
{
SERIALAPP_ENDPOINT, // int Endpoint; 端口号
SERIALAPP_PROFID, //uint16 AppProfId[2]; Profile ID
SERIALAPP_DEVICEID, // uint16 AppDeviceId[2]; 设备ID
SERIALAPP_DEVICE_VERSION, // int AppDevVer:4; 版本号
SERIALAPP_FLAGS, // int AppFlags:4; 程序标识
SERIALAPP_MAX_CLUSTERS,//byte AppNumInClusters; 输入命令数
// byte *pAppInClusterList; 输入命列表
(cId_t *)SerialApp_ClusterList,
SERIALAPP_MAX_CLUSTERS,
// byte *pAppOutClusterList; 输出命令列表
(cId_t *)SerialApp_ClusterList };
//端口描述符
const endPointDesc_t SerialApp_epDesc =
{
SERIALAPP_ENDPOINT, //端口号
&SerialApp_TaskID, //任务ID
(SimpleDescriptionFormat_t *)&SerialApp_SimpleDesc, //简单描述符
noLatencyReqs
};
SerialApp的初始化函数
void SerialApp_Init( uint8 task_id )
{
halUARTCfg_t uartConfig; //串口配置信息
SerialApp_MsgID = 0x00;
SerialApp_SeqRx = 0xC3; //接收序列号
SerialApp_TaskID = task_id;//任务ID
SerialApp_DstAddr.endPoint = 0; //目的设端口
SerialApp_DstAddr.addr.shortAddr = 0;//目的地址
SerialApp_DstAddr.addrMode = (afAddrMode_t)AddrNotPresent;//目的地址模式
SerialApp_RspDstAddr.endPoint = 0;
SerialApp_RspDstAddr.addr.shortAddr = 0;
SerialApp_RspDstAddr.addrMode = (afAddrMode_t)AddrNotPresent;
afRegister( (endPointDesc_t *)&SerialApp_epDesc ); //注册端口描述符
RegisterForKeys( task_id ); //注册按键事件
uartConfig.configured = TRUE; // 2430 don't care.
uartConfig.baudRate = SERIAL_APP_BAUD; //波特率
uartConfig.flowControl = TRUE; //流量控制
uartConfig.flowControlThreshold = SERIAL_APP_THRESH; //流控阈值
uartConfig.rx.maxBufSize = SERIAL_APP_RX_MAX; //最大接收量
uartConfig.tx.maxBufSize = SERIAL_APP_TX_MAX; //最大发送量
uartConfig.idleTimeout = SERIAL_APP_IDLE;//2430 don't care.
uartConfig.intEnable = TRUE; // 2430 don't care.
#if SERIAL_APP_LOOPBACK
uartConfig.callBackFunc = rxCB_Loopback; //接收回调函数
#else
uartConfig.callBackFunc = rxCB;
#endif
HalUARTOpen (SERIAL_APP_PORT, &uartConfig); //打开串口
#if defined ( LCD_SUPPORTED )
HalLcdWriteString( "SerialApp2", HAL_LCD_LINE_2 );
#endif
//注册绑定相关的事件
ZDO_RegisterForZDOMsg( SerialApp_TaskID, End_Device_Bind_rsp );
ZDO_RegisterForZDOMsg( SerialApp_TaskID, Match_Desc_rsp );
}
typedef struct
{
bool configured;
uint8 baudRate; //波特率 协议栈只有38400和115200两个波特率
//控制位,如果是1的话就说明是四线模式,0代表2线模式,默认的是4线模式
bool flowControl;
uint16 flowControlThreshold;
uint8 idleTimeout;
halUARTBufControl_t rx;
halUARTBufControl_t tx;
bool intEnable;
uint32 rxChRvdTime;
halUARTCBack_t callBackFunc;
}halUARTCfg_t;
说明:如果你的板子是采用2线模式的话,必须得在SearilApp中的SerialWsn_Init( uint8 task_id )把uartConfig.flowControl=TURE改成FALSE