本文将以在GenericApp项目的基础上,一步一步地建立一个应用;需要实现的任务目标:1、使用Zigbee终端设备捕获串口中的字符“silverze” 。2、当Zigbee终端设备捕获到该字符串后,触发一个Zstack协议栈OSAL的任务消息 Get_Name。3、Zigbee终端设备在OSAL任务处理函数中处理Get_Name消息,并发送“Hello,silverze!”至协调器,协调器通过串口输出接收到Zigbee终端设备发送的内容。
步骤一:Zigbee终端设备捕获字符串
首先,我们要让cc2530的串口在Zstack中使用起来,这一步骤可以参照我之前写的ZStack-CC2530-2.5.1a串口使用笔记一。
Zstack串口能够正常使用起来后,我们新建两个文件Silverze.c、Silverze.h保存在..\GenericApp\source\文件夹下并添加到IAR工程App虚拟目录下。
在MT_UART.c文件中,有一个串口接收数据的回调函数:
void MT_UartProcessZToolData ( uint8 port, uint8 event )
;为了减少对MT_UART.c文件的修改,我们将该回调函数指向到我们刚才新建立的Silverze.c文件中的函数:void Silverze_UartProcessZToolData ( uint8 port, uint8 event )
。
具体的函数代码:
/***************************************************************************************************
* @fn Silverze_UartProcessZToolData
*
* @brief 处理UART接收到的数据
*
* @param port - UART port
* event - Event that causes the callback
*
*
* @return None
***************************************************************************************************/
void Silverze_UartProcessZToolData ( uint8 port, uint8 event )
{
uint8 ch;
uint8 cnt = 0;
uint8* str = "silverze";
(void)event; // Intentionally unreferenced parameter
while (Hal_UART_RxBufLen(port))
{
HalUARTRead (port, &ch, 1);
if(ch == str[cnt])
cnt++;
else
cnt = 0;
if(cnt == strlen((char*)str))
{
HalLedSet( HAL_LED_3, HAL_LED_MODE_TOGGLE );//加入板子上LED toggle,便于调试
Silverze_SendGetNamdeOverMsg(); //接收到"silverze",发送OSAL任务消息
}
}
}
如果一切顺利,我们通过串口助手,发送包含“silverze”的字符串,就能看到开发板上(这个需要特定的开发板,根据使用的板子决定吧!)的LED3 Toggle。
步骤二:触发一个自定义的OSAL任务消息
完成步骤二的内容,后我们可以的应用已经能够通过串口捕获想要捕获的字符串了,而且我也将发送OSAL消息的函数结构给调用了。但这里还只是一个空壳,在完成该函数前;我们要先在Silverze.c文件中编写一个应用注册函数,这个函数很简单:
uint8 registTaskID;
/*****