学了这么久的协议栈,一直以来都是用官方提供的那些例子,还没有自己动手做过一个例子呢,最近有时间,刚好就可以动手开始自己的第一个例子。
这次这个例子很简单,主要让应用层能够通过按键来驱动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的状态,呵呵。。。 |