uint8 HAL_KEY_SW_7_PRESS_COUNT = 0; //global variable to count the number of key press #define KEY_PRESS_COUNT_WAIT_TIME 10000 #define KEY_PRESS_COUNT_EVENT 0x0100 #define RESET_TO_FACTORY_EVENT 0x0200 HAL_ISR_FUNCTION( halKeyPort0Isr, P0INT_VECTOR ) { HAL_ENTER_ISR(); if (HAL_KEY_SW_7_PXIFG & HAL_KEY_SW_7_BIT) //sw7 connected to P0.0 { if(HAL_KEY_SW_7_PRESS_COUNT == 0) { //start event to calculate and process the key press count osal_start_timerEx (zclSampleDoorLock_TaskID, KEY_PRESS_COUNT_EVENT, KEY_PRESS_COUNT_WAIT_TIME); } HAL_KEY_SW_7_PRESS_COUNT++; //increment count on key press } HAL_KEY_SW_7_PXIFG = 0; HAL_KEY_CPU_PORT_0_IF = 0; . . } //defined in zcl_sampledoorlock.c file void zb_HandleOsalEvent( uint16 event ) { if( event & KEY_PRESS_COUNT_EVENT) { osal_stop_timerEx (zclSampleDoorLock_TaskID, KEY_PRESS_COUNT_EVENT); Process_Key_Press_Event(); event &= (~KEY_PRESS_COUNT_EVENT); } if( event & RESET_TO_FACTORY_EVENT) //factory reset microcontroller { event &= (~RESET_TO_FACTORY_EVENT); zgWriteStartupOptions(ZG_STARTUP_SET, (ZCD_STARTOPT_DEFAULT_NETWORK_STATE | ZCD_STARTOPT_DEFAULT_CONFIG_STATE)); ZDApp_ResetTimerStart(3000); } } void Process_Key_Press_Event( void ) { if(HAL_KEY_SW_7_PRESS_COUNT == 3) //set event to factory reset microcontroller when key is pressed 3 times { osal_set_event ( zclSampleDoorLock_TaskID, RESET_TO_FACTORY_EVENT); //set event to factory reset microcontroller HAL_KEY_SW_7_PRESS_COUNT=0; //reset key press count } if(HAL_KEY_SW_7_PRESS_COUNT == 5) { //do some process } }