/**************************************************************************** * * 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: LAMP_vInit * * DESCRIPTION: Initialises the lamp drive system * * PARAMETERS: Name RW Usage * * * RETURNS: * void * ****************************************************************************/ PUBLIC void DriverBulb_vInit(void) { bool_t bLampTimerInt = FALSE; static bool_t bInit = FALSE; if (bInit == FALSE) { /* Configure DIO pins */ vAHI_DioSetDirection(0, (LAMP_ON_OFF_MASK | (1 <<LAMP_BLEEDER_PIN))); /* Turn CFL lamp off */ vAHI_DioSetOutput(0, LAMP_ON_OFF_MASK); /* Mimic PWM to led ? */ #if (LAMP_LED_PIN < 21) { /* Configure as output */ vAHI_DioSetDirection(0, (1 << LAMP_LED_PIN)); /* Turn CFL lamp off */ vAHI_DioSetOutput(0, (1 << LAMP_LED_PIN)/*, 0*/); /* Register interrupt callback */ vAHI_Timer0RegisterCallback(vCbTimer0); /* Note we want to generate interrupts */ bLampTimerInt = TRUE; } #endif /* Configure timer 0 to generate a PWM output on its output pin */ vAHI_TimerEnable(LAMP_TIMER, LAMP_TIMER_PRESCALE, bLampTimerInt, bLampTimerInt, TRUE); vAHI_TimerConfigureOutputs(LAMP_TIMER, FALSE, TRUE); vAHI_TimerClockSelect(LAMP_TIMER, FALSE, TRUE); /* turn on lamp - this is the default state */ vAHI_DioSetOutput((1 << LAMP_BLEEDER_PIN),0); vAHI_DioSetOutput(LAMP_ON_OFF_MASK,0); vAHI_ApConfigure(E_AHI_AP_REGULATOR_ENABLE, E_AHI_AP_INT_DISABLE, E_AHI_AP_SAMPLE_8, E_AHI_AP_CLOCKDIV_500KHZ, E_AHI_AP_INTREF); while (!bAHI_APRegulatorEnabled()); /* spin on reg not enabled */ vAHI_AdcEnable(E_AHI_ADC_SINGLE_SHOT, E_AHI_AP_INPUT_RANGE_2, ADC_USED); do { vAHI_AdcStartSample(); while(bAHI_AdcPoll()); gu32BusVoltage = ((uint32)u16AHI_AdcRead()*VBUS_MAXIMUM) >> ADC_BITS; } while (gu32BusVoltage< VBUS_TRIP_LO); vAHI_AdcDisable(); vAHI_ApConfigure(E_AHI_AP_REGULATOR_DISABLE, E_AHI_AP_INT_DISABLE, E_AHI_AP_SAMPLE_8, E_AHI_AP_CLOCKDIV_500KHZ, E_AHI_AP_INTREF); vAHI_TimerStartRepeat(LAMP_TIMER, PWM_COUNT, PWM_COUNT ); bInit = TRUE; bIsOn = TRUE; }