volatile uint32_t pin9_counter = 0; typedef enum SysState { System_Start = 0, System_Idle, System_Confirm, System_Occupy, System_Vacant } SysState; void PIOINT0_IRQHandler(void) { uint32_t regVal; if (GPIOIntStatus( PORT0, 9 )) { pin9_counter = 1; } else pin9_counter = 0; GPIOIntClear( PORT0, 9); return; } void DALI_Thread(void) { bool dali_cmd; uint16_t forwardFrame; uint8_t busy_led_state = 0; int lastTicks; DALI_Init(); GPIOInit(); GPIOSetDir (PORT0, 9, 0 ); GPIOSetInterrupt( PORT0, 9, 0, 0, 1 ); GPIOIntEnable( PORT0, 9); State = System_Start; while(1) { switch (State) { case System_Start: pin9_counter = 1; DALI_Send((0xFE << 8 ) + 0xFE); // Turn on the light 100% brightness printf("System Start State\n"); if (pin9_counter == 0) State = System_Idle; break; /*========================================================================================================================*/ case System_Idle: DALI_Send((0xFE << 8 ) + 0x00); printf("System Idle State\n"); if (pin9_counter == 1) { State = System_Start; break; } |