请教用AF_DataRequest()发送信息问题?
CC2530构成的网络里通信必须进行绑定操作后才能进行通信吗?终端节点和协调器不进行绑定,利用AF_DataRequest函数可以直接向协调器发送信息吗?
我设想是协调器建立网络后,终端节点成功加入网络,但还没有进行绑定操作,这时通过按键触发终端节点,发送本终端节点的IEEE和网络地址。
一个网络中协调器的地址应该是固定的0吧
我的发送函数是
Addr.addrMode = afAddr16Bit; //单点发送
Addr.addr.shortAddr=0; //协调器网络地址
zclSampleLight_Send_Message(Addr, UartTxBuf.TxBuf, 32);
/*********************************************************************
* @fn zclSampleLight_Send_Message
*********************************************************************/
static void zclSampleLight_Send_Message(afAddrType_t dstAddr, uint8 *buff, int length )
{
if ( AF_DataRequest(&dstAddr,afFindEndPointDesc( (zclSampleLight_SimpleDesc.EndPoint) ),
SERIALAPP_CommandID, length, buff,
&ZCLSampleLight_TransID, AF_DISCV_ROUTE, AF_DEFAULT_RADIUS) == afStatus_SUCCESS )
{
HalLedSet( HAL_LED_3, HAL_LED_MODE_TOGGLE );
}
}
按键触发后LED3的等变化,但是协调器那边并没有接收到这个数据,我知道是哪里出错了。
协调器接收如下:
uint16 zclCoordinator_event_loop( uint8 task_id, uint16 events )
{
afIncomingMSGPacket_t *MSGpkt;
(void)task_id; // Intentionally unreferenced parameter
if ( events & SYS_EVENT_MSG )
{
while ( (MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( zclCoordinator_TaskID )) )
{
switch ( MSGpkt->hdr.event )
{
case ZCL_INCOMING_MSG:
// Incoming ZCL Foundation command/response messages
zclCoordinator_ProcessIncomingMsg( (zclIncomingMsg_t *)MSGpkt );
break;
case ZDO_CB_MSG:
zclCoordinator_ProcessZDOMsgs( (zdoIncomingMsg_t *)MSGpkt );
break;
case KEY_CHANGE:
zclCoordinator_HandleKeys( ((keyChange_t *)MSGpkt)->state, ((keyChange_t *)MSGpkt)->keys );
break;
case AF_INCOMING_MSG_CMD:
---> Coordinator__ProcessMSGCmd( MSGpkt ); //程序根本走不到这
break;
default:
break;
}
// Release the memory
osal_msg_deallocate( (uint8 *)MSGpkt );
}
// return unprocessed events
return (events ^ SYS_EVENT_MSG);
}
if ( events & COORDINATOR_IDENTIFY_TIMEOUT_EVT )
{
zclCoordinator_IdentifyTime = 10;
zclCoordinator_ProcessIdentifyTimeChange();
return ( events ^ COORDINATOR_IDENTIFY_TIMEOUT_EVT );
}
if ( events & UART_RX_CB_EVT )
{
SerialApp_CMD_Execute();
return ( events ^ UART_RX_CB_EVT );
}
// Discard unknown events
return 0;
}
看看.