123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- #include "ZComDef.h"
- #include "hal_drivers.h"
- #include "hal_mcu.h"
- #include "OSAL.h"
- #include "OSAL_Clock.h"
- #include "OSAL_PwrMgr.h"
- #include "OSAL_Tasks.h"
- #include "MT.h"
- #include "MT_TASK.h"
- #include "nwk.h"
- #include "APS.h"
- #include "ZDApp.h"
- #if defined ( ZIGBEE_FREQ_AGILITY ) || defined ( ZIGBEE_PANID_CONFLICT )
- #include "ZDNwkMgr.h"
- #endif
- #if defined ( ZIGBEE_FRAGMENTATION )
- #include "aps_frag.h"
- #endif
- #if defined ( INTER_PAN )
- #include "stub_aps.h"
- #endif
- #include "sapi.h"
- #include "znp_app.h"
- #if defined ( ZCL_KEY_ESTABLISH )
- #include "zcl_key_establish.h"
- #endif
- const pTaskEventHandlerFn tasksArr[] = {
- znpEventLoop,
- macEventLoop,
- nwk_event_loop,
- APS_event_loop,
- #if defined ( ZIGBEE_FRAGMENTATION )
- APSF_ProcessEvent,
- #endif
- ZDApp_event_loop,
- #if defined ( ZIGBEE_FREQ_AGILITY ) || defined ( ZIGBEE_PANID_CONFLICT )
- ZDNwkMgr_event_loop,
- #endif
- #if defined( INTER_PAN )
- StubAPS_ProcessEvent,
- #endif
- SAPI_ProcessEvent,
- #if defined ( TC_LINKKEY_JOIN )
- zclKeyEstablish_event_loop,
- #endif
- Hal_ProcessEvent
- };
- const uint8 tasksCnt = sizeof( tasksArr ) / sizeof( tasksArr[0] );
- uint16 *tasksEvents;
- void osal_start_znp(void);
- static void osal_run_task(uint8 idx);
- void osalInitTasks( void )
- {
- uint8 taskID = 0;
- tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt);
- osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt));
- znpInit( taskID++ );
- macTaskInit( taskID++ );
- nwk_init( taskID++ );
- APS_Init( taskID++ );
- #if defined ( ZIGBEE_FRAGMENTATION )
- APSF_Init( taskID++ );
- #endif
- ZDApp_Init( taskID++ );
- #if defined ( ZIGBEE_FREQ_AGILITY ) || defined ( ZIGBEE_PANID_CONFLICT )
- ZDNwkMgr_Init( taskID++ );
- #endif
- #if defined( INTER_PAN )
- StubAPS_Init( taskID++ );
- #endif
- SAPI_Init( taskID++ );
- #if defined ( TC_LINKKEY_JOIN )
- zclGeneral_KeyEstablish_Init( taskID++ );
- #endif
- Hal_Init( taskID );
- }
- void osal_start_znp( void )
- {
- #if !defined ( ZBIT ) && !defined ( UBIT )
- for(;;)
- #endif
- {
- #if defined( POWER_SAVING )
- uint8 busy = FALSE;
- #endif
- uint8 idx;
- osalTimeUpdate();
- Hal_ProcessPoll();
- for (idx = 1; idx < tasksCnt; idx++)
- {
- if (tasksEvents[idx])
- {
- osal_run_task(idx);
- #if defined( POWER_SAVING )
- busy = TRUE;
- #endif
- break;
- }
- }
- if (tasksEvents[0])
- {
- osal_run_task(0);
- #if defined( POWER_SAVING )
- busy = TRUE;
- #endif
- }
- #if defined( POWER_SAVING )
- if (!busy)
- {
- osal_pwrmgr_powerconserve();
- }
- #endif
- }
- }
- static void osal_run_task(uint8 idx)
- {
- uint16 events;
- halIntState_t intState;
- HAL_ENTER_CRITICAL_SECTION(intState);
- events = tasksEvents[idx];
- tasksEvents[idx] = 0;
- HAL_EXIT_CRITICAL_SECTION(intState);
- events = (tasksArr[idx])( idx, events );
- HAL_ENTER_CRITICAL_SECTION(intState);
- tasksEvents[idx] |= events;
- HAL_EXIT_CRITICAL_SECTION(intState);
- }
|