預設路徑:
C:\Texas Instruments\ZStack-1.4.3\Projects\zstack\Samples\Location\CC2430DB\SampleApp.eww
2.首先要先找到程式最先執行的地方
Zmain→Zmain.c裡面有main
所以程式執行的開端就在這裡
它裡面就是init一些zstack所寫好的函數
不過最重要的就是它有init OSAL
什麼是OSAL??
它是IT在Zstack下所開發的小型OS
它會自己分配時間
所以有很多內部事件可以不需要再另外寫程式處理
所以去OSAL裡面看就可以知道有什麼事件
App→OSAL_SampleApp.c
在這個tasksArr的變數
裡面可以發現好幾個事件的函數
也就是說可以在這裡加入自己想要新增的事件
在這個osalInitTasks的函式裡面
你可以輸入自己想要Init事件的函數
3.接下來知道程式裡面有執行到App→SampleApp.c
這裡是Zstack預設用來給開發者開發的區域
所以先看
SampleApp_Init的函數
SampleApp_TaskID是用來記錄這個事件在OSAL裡面的編號
是可以用來註冊其他中斷發生需要啟動事件的編號
SampleApp_NwkState是用來記錄發生什麼事件
zStack有內涵這些事件
typedef enum
{
DEV_HOLD, // Initialized - not started automatically
DEV_INIT, // Initialized - not connected to anything
DEV_NWK_DISC, // Discovering PAN's to join
DEV_NWK_JOINING, // Joining a PAN
DEV_NWK_REJOIN, // ReJoining a PAN, only for end devices
DEV_END_DEVICE_UNAUTH, // Joined but not yet authenticated by trust center
DEV_END_DEVICE, // Started as device after authentication
DEV_ROUTER, // Device joined, authenticated and is a router
DEV_COORD_STARTING, // Started as Zigbee Coordinator
DEV_ZB_COORD, // Started as Zigbee Coordinator
DEV_NWK_ORPHAN // Device has lost information about its parent..
} devStates_t;
不過我也不太懂裡面的所有狀態SampleApp_TransID我也不知道宣告來幹麻的後面會有用到
但是我看過有沒有都可以執行
SampleApp_Periodic_DstAddr
SampleApp_Flash_DstAddr
是用來記錄要zigbee傳送的方式
裡面的變數有
typedef struct {
union {
uint16 shortAddr;
} addr;
afAddrMode_t addrMode;
byte endPoint;
} afAddrType_t;
typedef enum {
afAddrNotPresent = AddrNotPresent,
afAddr16Bit = Addr16Bit,
afAddrGroup = AddrGroup,
afAddrBroadcast = AddrBroadcast
} afAddrMode_t;
在addrMode的表示下
也就是說在Zstack的zigbee傳送方式有4種
AddrNotPresent→沒動作
Addr16Bit→用指定位置傳送
AddrGroup→用指定群組傳送
AddrBroadcast→廣播
endPoint是zigbee用來認領的ID
所以SampleApp_Periodic_DstAddr是設定為廣播的狀態
SampleApp_Flash_DstAddr是設定為對群組傳送
SampleApp_epDesc
就是設定接收的ID和事件的編號
typedef struct {
byte endPoint;
byte *task_id;
SimpleDescriptionFormat_t *simpleDesc;
afNetworkLatencyReq_t latencyReq;
} endPointDesc_t;
也就是說要輸入要接收的ID和事件的編號
其他我就不太知道了....
afRegister( &SampleApp_epDesc );
這是將上面設定的註冊到另一個專門用來接收zigbee的事件
RegisterForKeys( SampleApp_TaskID );
是將按鍵的硬體事件註冊到自訂的事件
SampleApp_Group.ID = 0x0001;
osal_memcpy( SampleApp_Group.name, "Group 1", 7 );
aps_AddGroup( SAMPLEAPP_ENDPOINT, &SampleApp_Group );
是將ID再劃分其他的區域
SampleApp_ProcessEvent的函數
afIncomingMSGPacket_t *MSGpkt
是用來取回OSAL傳來的信號
typedef struct {
osal_event_hdr_t hdr;
uint16 groupId;
uint16 clusterId;
afAddrType_t srcAddr;
byte endPoint;
byte wasBroadcast;
byte LinkQuality;
byte SecurityUse;
uint32 timestamp;
afMSGCommandFormat_t cmd;
} afIncomingMSGPacket_t;
typedef struct {
byte TransSeqNumber;
uint16 DataLength;
byte *Data;
} afMSGCommandFormat_t;
typedef struct {
uint8 event;
uint8 status;
} osal_event_hdr_t;
裡面有很多設定就用原來的來修改比較快
KEY_CHANGE
就是有按鍵動作所要做的事
AF_INCOMING_MSG_CMD
就是有接收到zigbee的訊息所要做的事
ZDO_STATE_CHANGE
有接上zigbee的連接時所要做的事
osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_INFO_EVT, 30000 );
這是設定時間到就會執行這個事件
也就是會有SAMPLEAPP_SEND_INFO_EVT的訊號出來
SampleApp_HandleKeys的函數
SampleApp_SendFlashMessage( SAMPLEAPP_FLASH_DURATION )
這是用來傳送閃燈的訊號出去
aps_FindGroup( SAMPLEAPP_ENDPOINT, SAMPLEAPP_FLASH_GROUP )
找有沒有這個GROUP
aps_RemoveGroup( SAMPLEAPP_ENDPOINT, SAMPLEAPP_FLASH_GROUP )
移除這個GROUP
aps_AddGroup( SAMPLEAPP_ENDPOINT, &SampleApp_Group )
增加這個GROUP
SampleApp_MessageMSGCB的函數
這是用來處理從zigbee接收過來的訊息
HalLedBlink( HAL_LED_4, 4, 50, (flashTime / 4) )
這是用來閃燈用的
也就是說有訊號接收到LED就會閃
SampleApp_SendPeriodicMessage( void ) 的函數
SampleApp_SendFlashMessage( uint16 flashTime ) 的函數
就是傳送zigbee的訊號
0 意見:
張貼留言