router.c
来自「JENNIC无线传感器网络 ZIGBEE 文件资料」· C语言 代码 · 共 319 行
C
319 行
/**************************************************************************** * * MODULE: Jenie Router Node * COMPONENT: $RCSfile: Router.c,v $ * * VERSION: * * REVISION: 0.0 * * DATED: 2007/05/29 15:40:19 * * STATUS: Exp * * AUTHOR: MM * * DESCRIPTION: * * * LAST MODIFIED BY: $Author: mroyc $ * $Modtime: $ * **************************************************************************** * * This software is owned by Jennic and/or its supplier and is protected * under applicable copyright laws. All rights are reserved. We grant You, * and any third parties, a license to use this software solely and * exclusively on Jennic products. You, and any third parties must reproduce * the copyright and warranty notice and any other legend of ownership on each * copy or partial copy of the software. * * THIS SOFTWARE IS PROVIDED "AS IS". JENNIC MAKES NO WARRANTIES, WHETHER * EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, * ACCURACY OR LACK OF NEGLIGENCE. JENNIC SHALL NOT, IN ANY CIRCUMSTANCES, * BE LIABLE FOR ANY DAMAGES, INCLUDING, BUT NOT LIMITED TO, SPECIAL, * INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON WHATSOEVER. * * Copyright Jennic Ltd 2005, 2006. All rights reserved * ****************************************************************************//****************************************************************************//*** Include files ***//****************************************************************************/#include <jendefs.h>#include <gdb.h>#include <string.h>#include "jenie.h"#include "utils.h"#include "config.h"/****************************************************************************//*** Macro Definitions ***//****************************************************************************//****************************************************************************//*** Type Definitions ***//****************************************************************************/typedef enum{ APP_STATE_WAITING_FOR_NETWORK, APP_STATE_NETWORK_UP, APP_STATE_SERVICE_REGISTERED, APP_STATE_WAITING_FOR_REQUEST_SERVICE, APP_STATE_SERVICE_REQUEST_RETURNED, APP_STATE_RUNNING} teAppState;typedef struct{ teAppState eAppState; uint64 u64ServiceAddress;} tsAppData;/****************************************************************************//*** Local Function Prototypes ***//****************************************************************************//****************************************************************************//*** Exported Variables ***//****************************************************************************//****************************************************************************//*** Local Variables ***//****************************************************************************/PRIVATE tsAppData sAppData;/**************************************************************************** * * NAME: gJenie_CbNetworkApplicationID * * DESCRIPTION: * Entry point for application from boot loader. Initialises system. * * RETURNS: * Nothing * ****************************************************************************/PUBLIC void vJenie_CbConfigureNetwork(void){ /* Change default network config */ gJenie_Channel = CHANNEL; gJenie_NetworkApplicationID = SERVICE_PROFILE_ID; gJenie_PanID = PAN_ID;}PUBLIC void vJenie_CbInit(bool_t bWarmStart){ /* Initialise utilities */ vUtils_Init(); memset(&sAppData, 0, sizeof(sAppData)); vUtils_Debug("Jenie Init Router"); if(eJenie_Start(E_JENIE_ROUTER) != E_JENIE_SUCCESS) { vUtils_Debug("!!Failed to start Jenie!!"); while(1); }}/**************************************************************************** * * NAME: gJenie_CbMain * * DESCRIPTION: * Main user routine. This is called by the Basic Operating System (BOS) * at regular intervals. * * RETURNS: * void * ****************************************************************************/PUBLIC void vJenie_CbMain(void){ static int i = 0; switch(sAppData.eAppState) { case APP_STATE_WAITING_FOR_NETWORK: break; case APP_STATE_NETWORK_UP: /* as we are a router, allow nodes to associate with us */ vUtils_Debug("enabling association"); eJenie_SetPermitJoin(TRUE); /* we provide FIRST_SERVICE */ vUtils_Debug("registering service"); eJenie_RegisterServices(FIRST_SERVICE); sAppData.eAppState = APP_STATE_SERVICE_REGISTERED; break; case APP_STATE_SERVICE_REGISTERED: /* we use service SECOND_SERVICE on a remote node */ vUtils_Debug("requesting service"); eJenie_RequestServices(SECOND_SERVICE, TRUE); sAppData.eAppState = APP_STATE_WAITING_FOR_REQUEST_SERVICE; i = 40000; break; case APP_STATE_WAITING_FOR_REQUEST_SERVICE: if(i == 0) { sAppData.eAppState = APP_STATE_SERVICE_REGISTERED; } i--; break; case APP_STATE_SERVICE_REQUEST_RETURNED: /* bind local FIRST_SERVICE to remote SECOND_SERVICE */ vUtils_Debug("binding service"); eJenie_BindService(FIRST_SERVICE, sAppData.u64ServiceAddress, SECOND_SERVICE); sAppData.eAppState = APP_STATE_RUNNING; break; case APP_STATE_RUNNING: /* do all necessary processing here */ break; default: vUtils_DisplayMsg("!!Unknown state!!", sAppData.eAppState); while(1); }} /**************************************************************************** * * NAME: vJenie_CbStackMgmtEvent * * DESCRIPTION: * Used to receive stack management events * * PARAMETERS: Name RW Usage * *psStackMgmtEvent R Pointer to event structure * * RETURNS: * void * ****************************************************************************/PUBLIC void vJenie_CbStackMgmtEvent(teEventType eEventType, void *pvEventPrim){ switch(eEventType) { case E_JENIE_NETWORK_UP: /* Indicates stack is up and running */ vUtils_Debug("network up"); if(sAppData.eAppState == APP_STATE_WAITING_FOR_NETWORK) { sAppData.eAppState = APP_STATE_NETWORK_UP; } break; case E_JENIE_SVC_REQ_RSP: vUtils_Debug("Service req response"); if(sAppData.eAppState == APP_STATE_WAITING_FOR_REQUEST_SERVICE) { if(((tsSvcReqRsp *)pvEventPrim)->u32Services & SECOND_SERVICE) { sAppData.u64ServiceAddress = ((tsSvcReqRsp *)pvEventPrim)->u64SrcAddress; sAppData.eAppState = APP_STATE_SERVICE_REQUEST_RETURNED; } else { vUtils_Debug("wrong service"); } } break; case E_JENIE_POLL_CMPLT: break; case E_JENIE_PACKET_SENT: vUtils_Debug("Packet sent"); break; case E_JENIE_PACKET_FAILED: vUtils_Debug("Packet failed"); break; case E_JENIE_CHILD_JOINED: vUtils_Debug("Child Joined"); break; default: /* Unknown data event type */ break; }}/**************************************************************************** * * NAME: vJenie_CbStackDataEvent * * DESCRIPTION: * Used to receive stack data events * * PARAMETERS: Name RW Usage * *psStackDataEvent R Pointer to data structure * RETURNS: * void * ****************************************************************************/PUBLIC void vJenie_CbStackDataEvent(teEventType eEventType, void *pvEventPrim){ switch(eEventType) { case E_JENIE_DATA: vUtils_Debug("Data event"); break; case E_JENIE_DATA_TO_SERVICE: vUtils_Debug("Data to service event"); break; case E_JENIE_DATA_ACK: vUtils_Debug("Data ack"); break; case E_JENIE_DATA_TO_SERVICE_ACK: vUtils_Debug("Data to service ack"); break; default: // Unknown data event type break; }}/**************************************************************************** * * NAME: vJenie_CbHwEvent * * DESCRIPTION: * Adds events to the hardware event queue. * * PARAMETERS: Name RW Usage * u32Device R Peripheral responsible for interrupt e.g DIO * u32ItemBitmap R Source of interrupt e.g. DIO bit map * * RETURNS: * void * ****************************************************************************/PUBLIC void vJenie_CbHwEvent(uint32 u32DeviceId,uint32 u32ItemBitmap){ /* Not used in this application */}/****************************************************************************//*** END OF FILE ***//****************************************************************************/
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?