微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > 射频无线通信设计 > 请教用AF_DataRequest()发送信息问题?

请教用AF_DataRequest()发送信息问题?

时间:10-02 整理:3721RD 点击:

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;
}

看看.

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top