/**************************************************************************** DESCRIPTION Called after the configuration has been read and will trigger buttons events if a pio has been pressed or held whilst the configuration was still being loaded , i.e. the power on button press */ void ButtonsCheckForChangeAfterInit(void) { uint32 pio_state; ButtonsTaskData * lButtonsTask = theHeadset.theButtonsTask ; lButtonsTask->gBTime = B_INVALID ; { /* get 32 bit pio state for BC5 onwards chips */ pio_state = (((PIOGET() & 0xffff) | CHARGER_VREG_VALUE | CHARGER_CONNECT_VALUE)) ; /* perform a level detect looking for transistion of recently added button definition, mask pio's against level configured pios to prevent false butotn press indications */ ButtonsLevelDetect ( (pio_state & lButtonsTask->gPerformLevelCheck) , lButtonsTask ) ; /* perform an edge detect looking for transistion of recently added button definition, mask pio's against edge configured pios to prevent false button press indications */ ButtonsEdgeDetect ( (pio_state & lButtonsTask->gPerformEdgeCheck) , lButtonsTask) ; } /* store current set pio state in order to be able to detect the transition of a PIO in the button handler */ lButtonsTask->gOldPioState = pio_state; /* Debounce required PIO lines */ pio_state = PioDebounce32((0xFFFF & lButtonsTask->gButtonLevelMask), /* mask off upper 16 bits */ lButtonsTask->button_config->debounce_number, lButtonsTask->button_config->debounce_period_ms ); /* check whether it has been possible to select the use of PIOs specified, if it was not possible to use all the PIOs specified due to a PIO being assigned a different function by PSKEY then none of the PIOs will now work so mask out the unavailable PIO and assign the PIOs that are available for receiving change notifications */ if(pio_state) { /* mask out the unavailable PIOs and register those PIOs that are available for receiving change events */ PioDebounce32((0xFFFF & lButtonsTask->gButtonLevelMask & ~pio_state), /* mask off upper 16 bits */ lButtonsTask->button_config->debounce_number, lButtonsTask->button_config->debounce_period_ms ); B_DEBUG(("B: **** ERROR **** PIO NOT AVAILABLE = 0x%lx\n",pio_state)) ; #ifdef DEBUG_BUTTONS Panic(); #endif } #ifdef BHC612_ ChargerDebounce( (CHARGER_VREG_EVENT|CHARGER_CONNECT_EVENT), 4, 250 ); #else ChargerDebounce( (CHARGER_VREG_EVENT|CHARGER_CONNECT_EVENT), lButtonsTask->button_config->debounce_number, lButtonsTask->button_config->debounce_period_ms ); #endif }
int main(void) { /* Set app_handler() function to handle app's messages */ app.task.handler = app_handler; /* Set app task to receive PIO messages */ MessagePioTask(&app.task); /* Setup PIO interrupt messages */ PioDebounce32(BUTTON_A | BUTTON_B, /* PIO pins we are interested in */ 2, 20); /* 2 reads and 20ms between them */ MessageLoop(); return 0; }