打印

ZIGBEE Serial例子改造

[复制链接]
1723|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
真诚星君|  楼主 | 2011-12-21 16:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
学了这么久的协议栈,一直以来都是用官方提供的那些例子,还没有自己动手做过一个例子呢,最近有时间,刚好就可以动手开始自己的第一个例子。
这次这个例子很简单,主要让应用层能够通过按键来驱动LED的切换,废话少说,直接切入主题吧。
手把手搭建一个空的工程,这里提供两种方法:、
1.自己新建一个工程,然后按照SERIAL里的设置选项,一个个地去添加;
2.直接拷贝SERIAL工程,然后用文本文件打开这个工程的工程文件,将文件名替换为你想要的文件名,具体操作可以参考TI提供的那个文档:

file:///C:/Users/ADMINI~1/AppData/Local/Temp/ksohtml/wps_clip_image-5036.png
右击上面这个图标。
点击option选项,出现如上界面:

file:///C:/Users/ADMINI~1/AppData/Local/Temp/ksohtml/wps_clip_image-5147.png

上面那个OSAL_SerialApp1.c里的内容基本不需要改动的。。
SerialApp1.h里的内容:
#ifndef SERIALAPP1_H
#define SERIALAPP1_H

#ifdef __cplusplus
extern "C"
{
#endif

#include "ZComDef.h"
extern byte SerialApp1_TaskID;

extern void SerialApp1_Init( byte task_id );

extern UINT16 SerialApp1_ProcessEvent( byte task_id, UINT16 events );

#ifdef __cplusplus
}
#endif

#endif /* SERIALAPP_H */

然后再改动SerialApp1.c
#include "AF.h"
#include "OnBoard.h"
#include "OSAL_Tasks.h"
#include "ZDApp.h"
#include "ZDObject.h"
#include "ZDProfile.h"

#include "hal_drivers.h"
#include "hal_key.h"
#include "hal_led.h"
#include "hal_uart.h"

#if defined ( LCD_SUPPORTED )
  #include "hal_lcd.h"
#endif

#include "SerialApp1.h"
这些头文件基本可以不用动。。


uint8 SerialApp_TaskID;
static void SerialApp_HandleKeys( uint8 shift, uint8 keys );

void SerialApp1_Init( uint8 task_id )
{
  SerialApp1_TaskID = task_id;
  RegisterForKeys( task_id );
}

UINT16 SerialApp1_ProcessEvent( uint8 task_id, UINT16 events )
{
  (void)task_id;  // Intentionally unreferenced parameter


  if ( events & SYS_EVENT_MSG )
  {
    afIncomingMSGPacket_t *MSGpkt;

    while ( (MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SerialApp1_TaskID )) )
    {
      switch ( MSGpkt->hdr.event )
      {
      case KEY_CHANGE:
        SerialApp1_HandleKeys( ((keyChange_t *)MSGpkt)->state, ((keyChange_t *)MSGpkt)->keys );
        break;

      default:
        break;
      }

      osal_msg_deallocate( (uint8 *)MSGpkt );
    }

    return ( events ^ SYS_EVENT_MSG );
  }
return ( 0 );
}

void SerialApp1_HandleKeys( uint8 shift, uint8 keys )
{


  if ( shift )
  {
    if ( keys & HAL_KEY_SW_1 )
    {
    }
    if ( keys & HAL_KEY_SW_2 )
    {
    }
    if ( keys & HAL_KEY_SW_3 )
    {
    }
    if ( keys & HAL_KEY_SW_4 )
    {
    }
  }
  else
  {
    if ( keys & HAL_KEY_SW_1 )
    {
      HalLedSet(HAL_LED_4,HAL_LED_MODE_TOGGLE);
    }

    if ( keys & HAL_KEY_SW_2 )
    {
    }

    if ( keys & HAL_KEY_SW_3 )
    {
    }

    if ( keys & HAL_KEY_SW_4 )
    {
    }
  }
}
到这里就弄完了,什么功能也没用到,你就试试将导航键向上按一下,然后观察LED1的状态,呵呵。。。

相关帖子

沙发
真诚星君|  楼主 | 2011-12-21 16:44 | 只看该作者
不知道这里有没有ZIGBEE的专题啊。。

使用特权

评论回复
板凳
airwill| | 2011-12-22 08:21 | 只看该作者
顶, 鼓励一下,
推荐通信技术版块更合适

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:天天学习,天天向上。!

0

主题

4

帖子

1

粉丝