42 #include "esos_stm32l4.h"
45 volatile uint8_t __u8_esosSuiNumLEDs = 0;
46 volatile uint8_t __u8_esosSuiNumSWs = 0;
62 return( __u8_esosSuiNumSWs);
76 return( __u8_esosSuiNumLEDs);
92 return (__ast_esosSuiSwitches[h_sw].b_pressed==
TRUE);
107 return (__ast_esosSuiSwitches[h_sw].b_pressed==
FALSE && __ast_esosSuiSwitches[h_sw].b_doublePressed==
FALSE);
122 return (__ast_esosSuiSwitches[h_sw].b_doublePressed==
TRUE);
141 u8_retval = __ast_esosSuiSwitches[h_sw].u8_lastEvent;
142 __ast_esosSuiSwitches[h_sw].u8_lastEvent = ESOS_SUI_SWITCH_EVENT_NULL;
162 return (__ast_esosSuiSwitches[h_sw].u32_lastEventTime);
179 return (__ast_esosSuiSwitches[h_sw].u32_userData1);
196 return (__ast_esosSuiSwitches[h_sw].u32_userData2);
214 return (__ast_esosSuiLEDs[h_led]._u8_state & ESOS_SUI_LED_STATE_ON);
245 if (__ast_esosSuiLEDs[h_led]._u8_state & ESOS_SUI_LED_STATE_FLASHING) {
246 if (__ast_esosSuiLEDs[h_led].u16_LEDFlashPeriod != 0) {
265 if (__ast_esosSuiLEDs[h_led]._u8_state & ESOS_SUI_LED_STATE_ONE_SHOT) {
266 if (__ast_esosSuiLEDs[h_led].u16_LEDFlashPeriod != 0) {
290 return (__ast_esosSuiLEDs[h_led].u16_LEDFlashPeriod);
304 return (__ast_esosSuiLEDs[h_led].u32_lastEventTime);
321 return (__ast_esosSuiLEDs[h_led].u32_userData1);
338 return (__ast_esosSuiLEDs[h_led].u32_userData2);
356 __ast_esosSuiLEDs[h_led]._u8_state |= ESOS_SUI_LED_STATE_ON;
372 __ast_esosSuiLEDs[h_led]._u8_state &= (~ESOS_SUI_LED_STATE_ON);
389 __ast_esosSuiLEDs[h_led]._u8_state ^= ESOS_SUI_LED_STATE_ON;
411 __ast_esosSuiLEDs[h_led]._u8_state &= (~ESOS_SUI_LED_STATE_FLASHING);
412 __ast_esosSuiLEDs[h_led]._u8_state |= ESOS_SUI_LED_STATE_ONE_SHOT;
413 __ast_esosSuiLEDs[h_led].u16_LEDFlashPeriod = u16_period;
434 __ast_esosSuiLEDs[h_led]._u8_state &= (~ESOS_SUI_LED_STATE_ONE_SHOT);
435 __ast_esosSuiLEDs[h_led]._u8_state |= ESOS_SUI_LED_STATE_FLASHING;
436 __ast_esosSuiLEDs[h_led].u16_LEDFlashPeriod = u16_period;
451 __ast_esosSuiLEDs[h_led]._u8_state = ESOS_SUI_LED_STATE_ALL_OFF;
452 __ast_esosSuiLEDs[h_led].u16_LEDFlashPeriod = 0;
482 u8_thisLED = __u8_esosSuiNumLEDs;
483 __u8_esosSuiNumLEDs++;
486 __ast_esosSuiLEDs[u8_thisLED].b_LEDOn =
FALSE;
487 __ast_esosSuiLEDs[u8_thisLED]._u8_state = ESOS_SUI_LED_STATE_ALL_OFF;
488 __ast_esosSuiLEDs[u8_thisLED].u16_LEDFlashPeriod = 0;
489 __ast_esosSuiLEDs[u8_thisLED].u8_lastEvent = ESOS_SUI_LED_EVENT_OFF;
490 __ast_esosSuiLEDs[u8_thisLED].u32_lastEventTime = 0;
492 __ast_esosSuiLEDs[u8_thisLED].u32_userData1 = u32_d1;
493 __ast_esosSuiLEDs[u8_thisLED].u32_userData2 = u32_d2;
495 return ((ESOS_SUI_LED_HANDLE)u8_thisLED);
518 uint8_t u8_thisSwitch;
520 u8_thisSwitch = __u8_esosSuiNumSWs;
521 __u8_esosSuiNumSWs++;
524 __ast_esosSuiSwitches[u8_thisSwitch].b_pressed =
FALSE;
525 __ast_esosSuiSwitches[u8_thisSwitch].b_doublePressed =
FALSE;
526 __ast_esosSuiSwitches[u8_thisSwitch]._u8_state = 0;
529 __ast_esosSuiSwitches[u8_thisSwitch].u32_userData1 = u32_d1;
530 __ast_esosSuiSwitches[u8_thisSwitch].u32_userData2 = u32_d2;
532 return ((ESOS_SUI_SWITCH_HANDLE) u8_thisSwitch);
544 ESOS_SUI_LED_HANDLE h_LED;
545 ESOS_SUI_SWITCH_HANDLE h_SW;
559 if (__ast_esosSuiLEDs[h_LED].u16_LEDFlashPeriod == 0 ) {
560 __ast_esosSuiLEDs[h_LED]._u8_state &= (~ESOS_SUI_LED_STATE_ONE_SHOT);
561 __ast_esosSuiLEDs[h_LED]._u8_state &= (~ESOS_SUI_LED_STATE_FLASHING);
566 if (__ast_esosSuiLEDs[h_LED]._u8_state == ESOS_SUI_LED_STATE_ALL_OFF ) {
568 if (__ast_esosSuiLEDs[h_LED].u8_lastEvent != ESOS_SUI_LED_EVENT_OFF ) {
570 __ast_esosSuiLEDs[h_LED].u32_lastEventTime = u32_now;
571 __ast_esosSuiLEDs[h_LED].u8_lastEvent = ESOS_SUI_LED_EVENT_OFF;
574 else if (__ast_esosSuiLEDs[h_LED]._u8_state & ESOS_SUI_LED_STATE_ONE_SHOT ) {
577 if (__ast_esosSuiLEDs[h_LED].u8_lastEvent != ESOS_SUI_LED_EVENT_ON ) {
578 __ast_esosSuiLEDs[h_LED].u32_lastEventTime = u32_now;
579 __ast_esosSuiLEDs[h_LED].u8_lastEvent = ESOS_SUI_LED_EVENT_ON;
586 if (u32_now >= __ast_esosSuiLEDs[h_LED].u32_lastEventTime + __ast_esosSuiLEDs[h_LED].u16_LEDFlashPeriod) {
589 __ast_esosSuiLEDs[h_LED].u32_lastEventTime = u32_now;
590 __ast_esosSuiLEDs[h_LED].u8_lastEvent = ESOS_SUI_LED_EVENT_OFF;
591 __ast_esosSuiLEDs[h_LED]._u8_state = ESOS_SUI_LED_STATE_ALL_OFF;
597 else if (__ast_esosSuiLEDs[h_LED]._u8_state & ESOS_SUI_LED_STATE_FLASHING ) {
600 if( (u32_now - __ast_esosSuiLEDs[h_LED].u32_lastEventTime) > (__ast_esosSuiLEDs[h_LED].u16_LEDFlashPeriod/2) ) {
601 __ast_esosSuiLEDs[h_LED].u32_lastEventTime = u32_now;
602 if (__ast_esosSuiLEDs[h_LED].u8_lastEvent == ESOS_SUI_LED_EVENT_ON ) {
604 __ast_esosSuiLEDs[h_LED].u8_lastEvent = ESOS_SUI_LED_EVENT_OFF;
607 __ast_esosSuiLEDs[h_LED].u8_lastEvent = ESOS_SUI_LED_EVENT_ON;
615 if (__ast_esosSuiLEDs[h_LED].u8_lastEvent != ESOS_SUI_LED_EVENT_ON ) {
616 __ast_esosSuiLEDs[h_LED].u32_lastEventTime = u32_now;
617 __ast_esosSuiLEDs[h_LED].u8_lastEvent = ESOS_SUI_LED_EVENT_ON;
621 if (__ast_esosSuiLEDs[h_LED].u8_lastEvent != ESOS_SUI_LED_EVENT_OFF ) {
622 __ast_esosSuiLEDs[h_LED].u32_lastEventTime = u32_now;
623 __ast_esosSuiLEDs[h_LED].u8_lastEvent = ESOS_SUI_LED_EVENT_OFF;
644 __ast_esosSuiSwitches[h_SW].b_pressed = b_swState;
649 switch( __ast_esosSuiSwitches[h_SW]._u8_state ) {
650 case ESOS_SUI_SWSTATE_IDLE: {
653 __ast_esosSuiSwitches[h_SW]._u8_state = ESOS_SUI_SWSTATE_WAIT_SW_UP;
654 __ast_esosSuiSwitches[h_SW]._u32_nextTickTime = u32_now + HOLD_TICK;
660 case ESOS_SUI_SWSTATE_WAIT_SW_UP: {
661 if(!b_swState && (__ast_esosSuiSwitches[h_SW]._u32_nextTickTime > u32_now)) {
663 __ast_esosSuiSwitches[h_SW]._u8_state = ESOS_SUI_SWSTATE_WAIT_CLICK_TIMEOUT;
664 __ast_esosSuiSwitches[h_SW]._u32_nextTickTime = u32_now + CLICK_TICK;
667 if(!b_swState && (__ast_esosSuiSwitches[h_SW]._u32_nextTickTime <= u32_now)) {
669 __ast_esosSuiSwitches[h_SW].u8_lastEvent = ESOS_SUI_SWITCH_EVENT_HOLD;
670 __ast_esosSuiSwitches[h_SW].u32_lastEventTime = u32_now;
671 __ast_esosSuiSwitches[h_SW]._u8_state = ESOS_SUI_SWSTATE_IDLE;
672 __ast_esosSuiSwitches[h_SW]._u32_nextTickTime = 0;
678 case ESOS_SUI_SWSTATE_WAIT_CLICK_TIMEOUT: {
680 if(b_swState && (__ast_esosSuiSwitches[h_SW]._u32_nextTickTime > u32_now)) {
681 __ast_esosSuiSwitches[h_SW]._u8_state = ESOS_SUI_SWSTATE_WAIT_DCLICK_TIMEOUT;
682 __ast_esosSuiSwitches[h_SW]._u32_nextTickTime = u32_now + DOUBLE_CLICK_TICK;
685 if( __ast_esosSuiSwitches[h_SW]._u32_nextTickTime <= u32_now) {
687 __ast_esosSuiSwitches[h_SW].u8_lastEvent = ESOS_SUI_SWITCH_EVENT_CLICK;
688 __ast_esosSuiSwitches[h_SW].u32_lastEventTime = u32_now;
689 __ast_esosSuiSwitches[h_SW]._u8_state = ESOS_SUI_SWSTATE_IDLE;
690 __ast_esosSuiSwitches[h_SW]._u32_nextTickTime = 0;
696 case ESOS_SUI_SWSTATE_WAIT_DCLICK_TIMEOUT: {
700 if(!b_swState && (__ast_esosSuiSwitches[h_SW]._u32_nextTickTime > u32_now)) {
702 __ast_esosSuiSwitches[h_SW].u8_lastEvent = ESOS_SUI_SWITCH_EVENT_DOUBLE_CLICK;
703 __ast_esosSuiSwitches[h_SW].u32_lastEventTime = u32_now;
704 __ast_esosSuiSwitches[h_SW]._u8_state = ESOS_SUI_SWSTATE_IDLE;
705 __ast_esosSuiSwitches[h_SW]._u32_nextTickTime = 0;
708 if( __ast_esosSuiSwitches[h_SW]._u32_nextTickTime <= u32_now) {
710 __ast_esosSuiSwitches[h_SW]._u8_state = ESOS_SUI_SWSTATE_IDLE;
711 __ast_esosSuiSwitches[h_SW]._u32_nextTickTime = 0;