微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > CC2530的coordinator怎样向endpoint发数据

CC2530的coordinator怎样向endpoint发数据

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

这样可以吗?求教!

if ( events & SYS_EVENT_MSG )
{
MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( GenericApp_TaskID );
while ( MSGpkt )
{
switch ( MSGpkt->hdr.event )
{

case ZDO_STATE_CHANGE:
GenericApp_NwkState = (devStates_t)(MSGpkt->hdr.status);
if ( GenericApp_NwkState == DEV_ZB_COORD )
{
// Start sending "the" message in a regular interval.
osal_start_timerEx( GenericApp_TaskID,
GENERICAPP_SEND_MSG_EVT,
GENERICAPP_SEND_MSG_TIMEOUT );
}
break;

default:
break;
}

// Release the memory
osal_msg_deallocate( (uint8 *)MSGpkt );

// Next
MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( GenericApp_TaskID );
}

// return unprocessed events
return (events ^ SYS_EVENT_MSG);
}

// Send a message out - This event is generated by a timer
// (setup in GenericApp_Init()).
if ( events & GENERICAPP_SEND_MSG_EVT )
{
// Send "the" message
GenericApp_SendTheMessage();

// Setup to send message again
osal_start_timerEx( GenericApp_TaskID,
GENERICAPP_SEND_MSG_EVT,
GENERICAPP_SEND_MSG_TIMEOUT );

// return unprocessed events
return (events ^ GENERICAPP_SEND_MSG_EVT);
}

主要有3种方式:广播 组播和单播

TI给出的例程都有的,网络上也有相关的教程 如 http://blog.csdn.net/xukai871105/article/details/9897695 以及  http://wenku.baidu.com/view/debf33e54afe04a1b071def8

您好,谢谢您的回答!您提供的网址,第一个不是用协议栈实现的,第二个实现的是广播通信。而我想要实现单播,所以遇到了以下几个问题:

(1)协调器向终端节点单播,单播地址该怎么写呢?

GenericApp_DstAddr.addrMode = (afAddrMode_t)Addr16Bit;
GenericApp_DstAddr.endPoint = GENERICAPP_ENDPOINT;
GenericApp_DstAddr.addr.shortAddr = 0;

也就是这里的shortAddr该怎么赋值呢?

(2)如果想要实现这样的功能:当串口有数据来的时候,协调器可以立即向终端节点发数据。有没这样的hdr.event可以触发

也就是这段代码里面的:

uint16 GenericApp_ProcessEvent( uint8 task_id, uint16 events )
{
 afIncomingMSGPacket_t *MSGpkt;

if ( events & SYS_EVENT_MSG )
{
MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( GenericApp_TaskID );
while ( MSGpkt )
{
switch ( MSGpkt->hdr.event )
{

case ZDO_STATE_CHANGE:

case AF_INCOMING_MSG_CMD:

类似于ZDO_STATE_CHANGE和AF_INCOMING_MSG_CMD的hdr.event,可以实现当串口有数据来的时候,调用GenericApp_SendTheMessage向终端节点发数据?

恳请赐教,不胜感激!

终端节点的短地址,

在节点入网的时候把,节点在加网成功以后会发出Device Announce,负责会广播这个Device Announce,然后协调器会收到这个Device Announce,这个消息里面带有入网节点的地址

串口发过去的数据,直接在底层串口收到了,然后解析就可以直接做事情了,为什么还需要产生event?

谢谢回复!关于串口的问题,我是想做到 协调器在某一时刻收到从串口来的数据 然后把数据发送给终端节点,也就是说串口何时来数据是不确定的。那么可不可以在串口来数据的时候产生一个event触发协调器向终端节点发数据呢?或者有什么其他的办法吗?请指教!

问题解决了,最后发现其实很简单,协议栈本身就有这个功能,当串口各种状态发生变化(如有数据进入)时,自动调用回调函数(如rxCB)处理!参考的是《ZigBee技术与实训教程--基于CC2530的无线传感网技术》,书写得一般,但是提到了这个细节。其实仔细去看手册(如HAL driver)并能理解也是可以知道的。谢谢各位!

问题解决了,协议栈串口配置时可以配置回调函数(如rxCB)就可以实现串口状态发生变化时调用回调函数进行处理!

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

网站地图

Top