/**************************************************************************** * * NAME: bAppQApiInit * * DESCRIPTION: * Initialised the Application Queue API, Application API and stack. Creates * the queues used for passing information up to the application and fills * the 'spare buffers' queues with the spare buffer entries. Also registers * the callback handlers with the Application API layer so all upward * information comes through this module. * * PARAMETERS: Name RW Usage * prMlmeCallback R Optional callback when MLME received * prMcpsCallback R Optional callback when MCPS received * prHwCallback R Optional callback when HW int received * * RETURNS: * TRUE if initialisation was successful * ****************************************************************************/ PUBLIC uint32 u32AppQApiInit(PR_QIND_CALLBACK prMlmeCallback, PR_QMCPS_CALLBACK prMcpsCallback, PR_HWQINT_CALLBACK prHwCallback) { int i; /* Initialise 'spare buffers' queues and fill with spare buffers */ vFifoInit(&sMlmeIndBufferQueue, apvMlmeIndBufferData, APP_MAX_MLME_IND); for (i = 0; i < APP_MAX_MLME_IND; i++) { bFifoPush(&sMlmeIndBufferQueue, (void *)&asMlmeIndBuffer[i]); } vFifoInit(&sMcpsIndBufferQueue, apvMcpsIndBufferData, APP_MAX_MCPS_IND); for (i = 0; i < APP_MAX_MCPS_IND; i++) { bFifoPush(&sMcpsIndBufferQueue, (void *)&asMcpsIndBuffer[i]); } vFifoInit(&sHwIndBufferQueue, apvHwIndBufferData, APP_MAX_HW_IND); for (i = 0; i < APP_MAX_HW_IND; i++) { bFifoPush(&sHwIndBufferQueue, (void *)&asHwIndBuffer[i]); } /* Initialise 'used buffers' queues */ vFifoInit(&sMlmeIndQueue, apvMlmeIndData, APP_MAX_MLME_IND); vFifoInit(&sMcpsIndQueue, apvMcpsIndData, APP_MAX_MCPS_IND); vFifoInit(&sHwIndQueue, apvHwIndData, APP_MAX_HW_IND); /* Store callbacks */ prAppMlmeCallback = prMlmeCallback; prAppMcpsCallback = prMcpsCallback; prAppHwCallback = prHwCallback; /* Register peripheral callbacks */ vAHI_SysCtrlRegisterCallback(vAppQApiPostHwInt); vAHI_APRegisterCallback(vAppQApiPostHwInt); #ifndef GDB vAHI_Uart0RegisterCallback(vAppQApiPostHwInt); #endif vAHI_Uart1RegisterCallback(vAppQApiPostHwInt); vAHI_TickTimerInit(vAppQApiPostHwInt); vAHI_SpiRegisterCallback(vAppQApiPostHwInt); vAHI_SiRegisterCallback(vAppQApiPostHwInt); vAHI_Timer0RegisterCallback(vAppQApiPostHwInt); vAHI_Timer1RegisterCallback(vAppQApiPostHwInt); /* Register this layer with AppApi layer */ return u32AppApiInit(psAppQApiGetMlmeBuffer, vAppQApiPostMlme, NULL, psAppQApiGetMcpsBuffer, vAppQApiPostMcps, NULL); }
/**************************************************************************** * NAME: bButtonInitialize * * DESCRIPTION: * Button Initialization function, enables interrupts only on DK4 * * RETURNS: * void * ****************************************************************************/ bool bButtonInitialize(void) { #ifdef DK4 /* Set DIO lines to inputs with buttons connected */ vAHI_DioSetDirection(APP_BUTTONS_DIO_MASK, 0); vAHI_SysCtrlRegisterCallback(&vEH_ButtonCallback); /* Turn on pull-ups for DIO lines with buttons connected */ vAHI_DioSetPullup(APP_BUTTONS_DIO_MASK, 0); /* Set the edge detection for falling edges */ vAHI_DioInterruptEdge(0, APP_BUTTONS_DIO_MASK); /* Enable interrupts to occur on selected edge */ vAHI_DioInterruptEnable(APP_BUTTONS_DIO_MASK, 0); uint32 u32ButtonStatus = u32AHI_DioReadInput() ; if ((u32ButtonStatus & 0x100) == 0x00) { u32Button = APP_BUTTONS_BUTTON_1; bButtonPressed = TRUE; /* disable edge detection until handling of button press complete */ vAHI_DioInterruptEnable(0, APP_BUTTONS_DIO_MASK); return TRUE; } return FALSE; #else /* Disable internal pull-up */ vAHI_DioSetPullup ((uint32) 0x0, APP_BUTTONS_DIO_MASK); /* Make button DIO an input */ vAHI_DioSetDirection ((uint32) APP_BUTTONS_DIO_MASK, 0x0); return TRUE; #endif }