ESOS32
ESOSOn32-bitProcessors
esos_sui.c
Go to the documentation of this file.
1 /*
2  * "Copyright (c) 2019 J. W. Bruce ("AUTHOR(S)")"
3  * All rights reserved.
4  * (J. W. Bruce, jwbruce_AT_tntech.edu, Tennessee Tech University)
5  *
6  * Permission to use, copy, modify, and distribute this software and its
7  * documentation for any purpose, without fee, and without written agreement is
8  * hereby granted, provided that the above copyright notice, the following
9  * two paragraphs and the authors appear in all copies of this software.
10  *
11  * IN NO EVENT SHALL THE "AUTHORS" BE LIABLE TO ANY PARTY FOR
12  * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
13  * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE "AUTHORS"
14  * HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
15  *
16  * THE "AUTHORS" SPECIFICALLY DISCLAIMS ANY WARRANTIES,
17  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
18  * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
19  * ON AN "AS IS" BASIS, AND THE "AUTHORS" HAS NO OBLIGATION TO
20  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS."
21  *
22  * Please maintain this header in its entirety when copying/modifying
23  * these files.
24  *
25  *
26  */
27 
40 // INCLUDES
41 #include "esos_sui.h"
42 #include "esos_stm32l4.h"
43 
44 // PRIVATE ESOS SUI SERVICE VARIABLES
45 volatile uint8_t __u8_esosSuiNumLEDs = 0;
46 volatile uint8_t __u8_esosSuiNumSWs = 0;
47 volatile _st_esos_sui_Switch __ast_esosSuiSwitches[ ESOS_SUI_NUM_MAX_SWITCHES];
48 volatile _st_esos_sui_LED __ast_esosSuiLEDs[ ESOS_SUI_NUM_MAX_LEDS];
49 
50 // PRIVATE FUNCTIONS
61 inline uint8_t esos_sui_getNumberOfSwitches(void){
62  return( __u8_esosSuiNumSWs);
63 }
64 
75 inline uint8_t esos_sui_getNumberOfLEDs(void){
76  return( __u8_esosSuiNumLEDs);
77 }
78 
79 // PUBLIC SWITCH QUERIES (also GETTERs and SETTERs) ******************
91 inline BOOL esos_sui_isSWPressed (ESOS_SUI_SWITCH_HANDLE h_sw) {
92  return (__ast_esosSuiSwitches[h_sw].b_pressed==TRUE);
93 }
94 
106 inline BOOL esos_sui_isSWReleased (ESOS_SUI_SWITCH_HANDLE h_sw) {
107  return (__ast_esosSuiSwitches[h_sw].b_pressed==FALSE && __ast_esosSuiSwitches[h_sw].b_doublePressed==FALSE);
108 }
109 
121 inline BOOL esos_sui_isSWDoublePressed (ESOS_SUI_SWITCH_HANDLE h_sw) {
122  return (__ast_esosSuiSwitches[h_sw].b_doublePressed==TRUE);
123 }
124 
139 inline uint8_t esos_sui_getSwitchLastEvent (ESOS_SUI_SWITCH_HANDLE h_sw) {
140  uint8_t u8_retval;
141  u8_retval = __ast_esosSuiSwitches[h_sw].u8_lastEvent;
142  __ast_esosSuiSwitches[h_sw].u8_lastEvent = ESOS_SUI_SWITCH_EVENT_NULL;
143  return u8_retval;
144 }
145 
161 inline uint32_t esos_sui_getSwitchLastEventTime (ESOS_SUI_SWITCH_HANDLE h_sw) {
162  return (__ast_esosSuiSwitches[h_sw].u32_lastEventTime);
163 }
164 
178 inline uint32_t esos_sui_getSwitchUserData1 (ESOS_SUI_SWITCH_HANDLE h_sw) {
179  return (__ast_esosSuiSwitches[h_sw].u32_userData1);
180 }
181 
195 inline uint32_t esos_sui_getSwitchUserData2 (ESOS_SUI_SWITCH_HANDLE h_sw) {
196  return (__ast_esosSuiSwitches[h_sw].u32_userData2);
197 }
198 
199 // PUBLIC LED FUNCTIONS
200 
201 //LED QUERIES (also GETTERs and SETTERs) ***************************
213 inline BOOL esos_sui_isLEDOn (ESOS_SUI_LED_HANDLE h_led) {
214  return (__ast_esosSuiLEDs[h_led]._u8_state & ESOS_SUI_LED_STATE_ON);
215 }
216 
229 inline BOOL esos_sui_isLEDOff (ESOS_SUI_LED_HANDLE h_led) {
230  return (!esos_sui_isLEDOn(h_led));
231 }
232 
244 inline BOOL esos_sui_isLEDFlashing (ESOS_SUI_LED_HANDLE h_led) {
245  if (__ast_esosSuiLEDs[h_led]._u8_state & ESOS_SUI_LED_STATE_FLASHING) {
246  if (__ast_esosSuiLEDs[h_led].u16_LEDFlashPeriod != 0) {
247  return TRUE;
248  }
249  else return FALSE;
250  } else return FALSE;
251 }
252 
264 inline BOOL esos_sui_isLEDOneShot (ESOS_SUI_LED_HANDLE h_led) {
265  if (__ast_esosSuiLEDs[h_led]._u8_state & ESOS_SUI_LED_STATE_ONE_SHOT) {
266  if (__ast_esosSuiLEDs[h_led].u16_LEDFlashPeriod != 0) {
267  return TRUE;
268  }
269  }
270  return FALSE;
271 }
272 
289 inline uint16_t esos_sui_getLEDFlashPeriod (ESOS_SUI_LED_HANDLE h_led) {
290  return (__ast_esosSuiLEDs[h_led].u16_LEDFlashPeriod);
291 }
292 
303 inline uint32_t esos_sui_getLEDLastEventTime (ESOS_SUI_LED_HANDLE h_led) {
304  return (__ast_esosSuiLEDs[h_led].u32_lastEventTime);
305 }
306 
320 inline uint32_t esos_sui_getLEDUserData1 (ESOS_SUI_LED_HANDLE h_led) {
321  return (__ast_esosSuiLEDs[h_led].u32_userData1);
322 }
323 
337 inline uint32_t esos_sui_getLEDUserData2 (ESOS_SUI_LED_HANDLE h_led) {
338  return (__ast_esosSuiLEDs[h_led].u32_userData2);
339 }
340 
341 //END LED QUERIES ***************************
342 
343 //LED ACTUATION *****************************
355 inline void esos_sui_turnLEDOn (ESOS_SUI_LED_HANDLE h_led) {
356  __ast_esosSuiLEDs[h_led]._u8_state |= ESOS_SUI_LED_STATE_ON;
357  return;
358 }
359 
371 inline void esos_sui_turnLEDOff (ESOS_SUI_LED_HANDLE h_led) {
372  __ast_esosSuiLEDs[h_led]._u8_state &= (~ESOS_SUI_LED_STATE_ON);
373  return;
374 }
375 
388 inline void esos_sui_toggleLED (ESOS_SUI_LED_HANDLE h_led) {
389  __ast_esosSuiLEDs[h_led]._u8_state ^= ESOS_SUI_LED_STATE_ON;
390  return;
391 }
392 
409 inline void esos_sui_oneshotLED (ESOS_SUI_LED_HANDLE h_led, uint16_t u16_period) {
410  // ONE-SHOT and FLASHING are MUTEX (as of right now)
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;
414  return;
415 }
416 
417 
432 inline void esos_sui_flashLED (ESOS_SUI_LED_HANDLE h_led, uint16_t u16_period) {
433  // ONE-SHOT and FLASHING are MUTEX (as of right now)
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;
437  return;
438 }
439 
450 inline void esos_sui_stopFlashLED (ESOS_SUI_LED_HANDLE h_led) {
451  __ast_esosSuiLEDs[h_led]._u8_state = ESOS_SUI_LED_STATE_ALL_OFF;
452  __ast_esosSuiLEDs[h_led].u16_LEDFlashPeriod = 0;
453  return;
454 }
455 
456 //END LED ACTUATION******************************
457 
479 ESOS_SUI_LED_HANDLE esos_sui_registerLED(uint32_t u32_d1, uint32_t u32_d2) {
480  uint8_t u8_thisLED;
481 
482  u8_thisLED = __u8_esosSuiNumLEDs; // "handle" to the new LED
483  __u8_esosSuiNumLEDs++;
484 
485  // setup our LED as being off and no flashing
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;
491  // save the user-provided data
492  __ast_esosSuiLEDs[u8_thisLED].u32_userData1 = u32_d1;
493  __ast_esosSuiLEDs[u8_thisLED].u32_userData2 = u32_d2;
494  // and return the LED "handle"
495  return ((ESOS_SUI_LED_HANDLE)u8_thisLED);
496 } // end esos_sui_registerLED()
497 
517 ESOS_SUI_SWITCH_HANDLE esos_sui_registerSwitch(uint32_t u32_d1, uint32_t u32_d2) {
518  uint8_t u8_thisSwitch;
519 
520  u8_thisSwitch = __u8_esosSuiNumSWs; // "handle" to the new switch
521  __u8_esosSuiNumSWs++;
522 
523  // setup our switches structures
524  __ast_esosSuiSwitches[u8_thisSwitch].b_pressed = FALSE;
525  __ast_esosSuiSwitches[u8_thisSwitch].b_doublePressed = FALSE;
526  __ast_esosSuiSwitches[u8_thisSwitch]._u8_state = 0;
527 
528  // save the user-provided data
529  __ast_esosSuiSwitches[u8_thisSwitch].u32_userData1 = u32_d1;
530  __ast_esosSuiSwitches[u8_thisSwitch].u32_userData2 = u32_d2;
531  // and return the switch "handle"
532  return ((ESOS_SUI_SWITCH_HANDLE) u8_thisSwitch);
533 } // end esos_sui_registerSwitch()
534 
542 // SUI task to periodically manage the simple user-interface elements
543 ESOS_USER_TASK( __esos_sui_task ){
544  ESOS_SUI_LED_HANDLE h_LED;
545  ESOS_SUI_SWITCH_HANDLE h_SW;
546  uint32_t u32_now;
547  BOOL b_swState;
548 
549  ESOS_TASK_BEGIN();
550  while(TRUE) {
551  u32_now = esos_GetSystemTick();
552  // process the LEDS
553  for (h_LED=0; h_LED<esos_sui_getNumberOfLEDs(); h_LED++) {
554  // process the state information for each LED, in turn.
555  // At the conclusion of each LED, actually change the hardware.
556 
557  // if this LED has a flashPeriod == 0, then we can NOT be
558  // flashing or one-shot, so update the LEDs state.
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);
562  }
563 
564  // check state of LEDs and act. First let's make sure LEDs that
565  // are OFF are really off
566  if (__ast_esosSuiLEDs[h_LED]._u8_state == ESOS_SUI_LED_STATE_ALL_OFF ) {
567  esos_sui_turnLEDOff( h_LED );
568  if (__ast_esosSuiLEDs[h_LED].u8_lastEvent != ESOS_SUI_LED_EVENT_OFF ) {
569  // record the LED off EVENT if it hasn't been done yet.
570  __ast_esosSuiLEDs[h_LED].u32_lastEventTime = u32_now;
571  __ast_esosSuiLEDs[h_LED].u8_lastEvent = ESOS_SUI_LED_EVENT_OFF;
572  }
573  }
574  else if (__ast_esosSuiLEDs[h_LED]._u8_state & ESOS_SUI_LED_STATE_ONE_SHOT ) {
575  // we are in ONE-SHOT mode, make sure the start of the ONE-SHOT
576  // event was recorded
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;
580  }
581  if( esos_sui_isLEDOff( h_LED )) {
582  // LED is off, so turn it on for the ONE-SHOT
583  esos_sui_turnLEDOn( h_LED );
584  } else {
585  // LED is on, so check to see if ONE-SHOT duration has expired
586  if (u32_now >= __ast_esosSuiLEDs[h_LED].u32_lastEventTime + __ast_esosSuiLEDs[h_LED].u16_LEDFlashPeriod) {
587  // ONE-SHOT duration has expired, so turn the LED off
588  // and restore to normal mode
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;
592  esos_sui_turnLEDOff( h_LED );
593  }
594  }
595  }
596  // Now, deal with FLASHING LEDs
597  else if (__ast_esosSuiLEDs[h_LED]._u8_state & ESOS_SUI_LED_STATE_FLASHING ) {
598  // compare lastEvent time versus now time to see if we need
599  // to change the LED state
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 ) {
603  esos_sui_turnLEDOff( h_LED );
604  __ast_esosSuiLEDs[h_LED].u8_lastEvent = ESOS_SUI_LED_EVENT_OFF;
605  } else {
606  esos_sui_turnLEDOn( h_LED );
607  __ast_esosSuiLEDs[h_LED].u8_lastEvent = ESOS_SUI_LED_EVENT_ON;
608  } // end if-else
609  }
610  }
611  // Now, we have the plain-jane ON/OFF LEDs
612  else {
613  // if LED flash period is ZERO, then we are ON/OFF
614  if( esos_sui_isLEDOn( h_LED )) {
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;
618  }
619  }
620  if( esos_sui_isLEDOff( h_LED )) {
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;
624  }
625  }
626  } // end else
627 
628  // Now the state for thhs (h_LED) should be correct, so set
629  // the hardware LED accordingly
630  if (esos_sui_isLEDOn( h_LED )) {
631  esos_hw_sui_turnLEDOn( h_LED );
632  } else {
633  esos_hw_sui_turnLEDOff( h_LED );
634  }
635  } // end for(h_LED) loop
636 
637  // ***********************************************************
638  // Now, let's process the SWITCHES
639  // ***********************************************************
640  for (h_SW=0; h_SW<esos_sui_getNumberOfSwitches(); h_SW++) {
641  b_swState = esos_hw_sui_isSwitchPressed(h_SW);
642  // update the instantaneous state of the switch's structure
643  // for apps that want to use that info
644  __ast_esosSuiSwitches[h_SW].b_pressed = b_swState;
645  // we case use the switch-case statement here because it
646  // will be completely executed in the current context
647  // WARNING: Do not add any ESOS_TASK_WAIT_xxxx statements
648  // within this switch-case statement
649  switch( __ast_esosSuiSwitches[h_SW]._u8_state ) {
650  case ESOS_SUI_SWSTATE_IDLE: {
651  // Waiting for the "button" to be pressed.
652  if(b_swState) {
653  __ast_esosSuiSwitches[h_SW]._u8_state = ESOS_SUI_SWSTATE_WAIT_SW_UP;
654  __ast_esosSuiSwitches[h_SW]._u32_nextTickTime = u32_now + HOLD_TICK;
655  }
656  break;
657  }
658 
659  // waiting for the button to be released.
660  case ESOS_SUI_SWSTATE_WAIT_SW_UP: {
661  if(!b_swState && (__ast_esosSuiSwitches[h_SW]._u32_nextTickTime > u32_now)) {
662  // Detected that button was released (quickly), before our HOLD_TICK duration
663  __ast_esosSuiSwitches[h_SW]._u8_state = ESOS_SUI_SWSTATE_WAIT_CLICK_TIMEOUT;
664  __ast_esosSuiSwitches[h_SW]._u32_nextTickTime = u32_now + CLICK_TICK;
665  break;
666  }
667  if(!b_swState && (__ast_esosSuiSwitches[h_SW]._u32_nextTickTime <= u32_now)) {
668  // Detected that button was released (slowly), after our HOLD_TICK duration
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;
673  break;
674  }
675  break;
676  }
677 
678  case ESOS_SUI_SWSTATE_WAIT_CLICK_TIMEOUT: {
679  // Waiting for a button to be pressed the second time or 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;
683  break;
684  }
685  if( __ast_esosSuiSwitches[h_SW]._u32_nextTickTime <= u32_now) {
686  // Detected a Click event
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;
691  break;
692  }
693  break;
694  }
695 
696  case ESOS_SUI_SWSTATE_WAIT_DCLICK_TIMEOUT: {
697  // If logic Level = HIGH (release Button) => we got double-click
698  // If we timeout, leave switch event at CLICK
699  // Either way, change state to IDLE
700  if(!b_swState && (__ast_esosSuiSwitches[h_SW]._u32_nextTickTime > u32_now)) {
701  // quick release, so generate a double click event.
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;
706  break;
707  }
708  if( __ast_esosSuiSwitches[h_SW]._u32_nextTickTime <= u32_now) {
709  // second click timed-out, so reset switch internal state to IDLE
710  __ast_esosSuiSwitches[h_SW]._u8_state = ESOS_SUI_SWSTATE_IDLE;
711  __ast_esosSuiSwitches[h_SW]._u32_nextTickTime = 0;
712  break;
713  }
714  break;
715  }
716  } // end switch
717  } // end for(h_SW) loop
718  // END SWITCHES *************************************************
719 
720  ESOS_TASK_WAIT_TICKS( __ESOS_SUI_TASK_PERIOD );
721  } // end while(TRUE)
722  ESOS_TASK_END();
723 } // end __esos_sui_task() TASK
724 
725 
741 void __esos_InitSUI(void) {
742  uint8_t u8_i;
743 
744  // call the user hardware functions to configure the LEDs
745  // start the LEDs in the "off" state
746  for (u8_i=0; u8_i<esos_sui_getNumberOfLEDs(); u8_i++) {
747  esos_hw_sui_configLED( u8_i );
748  esos_hw_sui_turnLEDOff( u8_i );
749  }
750  // call the user hardware functions to configure the switches
751  for (u8_i=0; u8_i<esos_sui_getNumberOfSwitches(); u8_i++) {
752  esos_hw_sui_configSwitch( u8_i );
753  }
754 
755  // finally, register the hidden ESOS SUI task
756  esos_RegisterTask( __esos_sui_task );
757 }
ESOS_TASK_WAIT_TICKS
#define ESOS_TASK_WAIT_TICKS(u32_duration)
Definition: esos_task.h:375
esos_sui_stopFlashLED
void esos_sui_stopFlashLED(ESOS_SUI_LED_HANDLE h_led)
Definition: esos_sui.c:450
ESOS_USER_TASK
ESOS_USER_TASK(__esos_sui_task)
Definition: esos_sui.c:543
esos_sui_isSWReleased
BOOL esos_sui_isSWReleased(ESOS_SUI_SWITCH_HANDLE h_sw)
Definition: esos_sui.c:106
esos_sui_getSwitchLastEvent
uint8_t esos_sui_getSwitchLastEvent(ESOS_SUI_SWITCH_HANDLE h_sw)
Definition: esos_sui.c:139
esos_sui_isSWDoublePressed
BOOL esos_sui_isSWDoublePressed(ESOS_SUI_SWITCH_HANDLE h_sw)
Definition: esos_sui.c:121
esos_sui_turnLEDOn
void esos_sui_turnLEDOn(ESOS_SUI_LED_HANDLE h_led)
Definition: esos_sui.c:355
_st_esos_sui_Switch
Definition: esos_sui.h:41
esos_sui_registerSwitch
ESOS_SUI_SWITCH_HANDLE esos_sui_registerSwitch(uint32_t u32_d1, uint32_t u32_d2)
Definition: esos_sui.c:517
esos_sui_oneshotLED
void esos_sui_oneshotLED(ESOS_SUI_LED_HANDLE h_led, uint16_t u16_period)
Definition: esos_sui.c:409
esos_hw_sui_isSwitchPressed
BOOL esos_hw_sui_isSwitchPressed(ESOS_SUI_SWITCH_HANDLE h_sw)
Definition: esos_hwxxxx_sui.c:132
esos_hw_sui_turnLEDOff
void esos_hw_sui_turnLEDOff(ESOS_SUI_LED_HANDLE h_led)
Definition: esos_hwxxxx_sui.c:100
esos_sui_isSWPressed
BOOL esos_sui_isSWPressed(ESOS_SUI_SWITCH_HANDLE h_sw)
Definition: esos_sui.c:91
esos_GetSystemTick
#define esos_GetSystemTick()
Definition: esos.h:418
esos_hw_sui_configSwitch
void esos_hw_sui_configSwitch(ESOS_SUI_SWITCH_HANDLE h_sw)
Definition: esos_hwxxxx_sui.c:116
esos_sui_getLEDUserData2
uint32_t esos_sui_getLEDUserData2(ESOS_SUI_LED_HANDLE h_led)
Definition: esos_sui.c:337
esos_sui_getSwitchUserData2
uint32_t esos_sui_getSwitchUserData2(ESOS_SUI_SWITCH_HANDLE h_sw)
Definition: esos_sui.c:195
esos_sui_getLEDLastEventTime
uint32_t esos_sui_getLEDLastEventTime(ESOS_SUI_LED_HANDLE h_led)
Definition: esos_sui.c:303
esos_sui_toggleLED
void esos_sui_toggleLED(ESOS_SUI_LED_HANDLE h_led)
Definition: esos_sui.c:388
esos_sui_registerLED
ESOS_SUI_LED_HANDLE esos_sui_registerLED(uint32_t u32_d1, uint32_t u32_d2)
Definition: esos_sui.c:479
esos_sui_getNumberOfSwitches
uint8_t esos_sui_getNumberOfSwitches(void)
Definition: esos_sui.c:61
esos_sui_isLEDFlashing
BOOL esos_sui_isLEDFlashing(ESOS_SUI_LED_HANDLE h_led)
Definition: esos_sui.c:244
esos_sui_isLEDOneShot
BOOL esos_sui_isLEDOneShot(ESOS_SUI_LED_HANDLE h_led)
Definition: esos_sui.c:264
esos_sui_getLEDFlashPeriod
uint16_t esos_sui_getLEDFlashPeriod(ESOS_SUI_LED_HANDLE h_led)
Definition: esos_sui.c:289
ESOS_TASK_END
#define ESOS_TASK_END()
Definition: esos_task.h:271
esos_sui_isLEDOff
BOOL esos_sui_isLEDOff(ESOS_SUI_LED_HANDLE h_led)
Definition: esos_sui.c:229
esos_sui_getNumberOfLEDs
uint8_t esos_sui_getNumberOfLEDs(void)
Definition: esos_sui.c:75
BOOL
enum _BOOL BOOL
TRUE
@ TRUE
Definition: all_generic.h:410
__esos_InitSUI
void __esos_InitSUI(void)
Definition: esos_sui.c:741
esos_sui_turnLEDOff
void esos_sui_turnLEDOff(ESOS_SUI_LED_HANDLE h_led)
Definition: esos_sui.c:371
esos_sui_flashLED
void esos_sui_flashLED(ESOS_SUI_LED_HANDLE h_led, uint16_t u16_period)
Definition: esos_sui.c:432
FALSE
@ FALSE
Definition: all_generic.h:408
esos_hw_sui_turnLEDOn
void esos_hw_sui_turnLEDOn(ESOS_SUI_LED_HANDLE h_led)
Definition: esos_hwxxxx_sui.c:83
esos_sui_isLEDOn
BOOL esos_sui_isLEDOn(ESOS_SUI_LED_HANDLE h_led)
Definition: esos_sui.c:213
ESOS_TASK_BEGIN
#define ESOS_TASK_BEGIN()
Definition: esos_task.h:259
esos_hw_sui_configLED
void esos_hw_sui_configLED(ESOS_SUI_LED_HANDLE h_led)
Definition: esos_hwxxxx_sui.c:65
_st_esos_sui_LED
Definition: esos_sui.h:52
esos_sui_getSwitchUserData1
uint32_t esos_sui_getSwitchUserData1(ESOS_SUI_SWITCH_HANDLE h_sw)
Definition: esos_sui.c:178
esos_sui_getSwitchLastEventTime
uint32_t esos_sui_getSwitchLastEventTime(ESOS_SUI_SWITCH_HANDLE h_sw)
Definition: esos_sui.c:161
esos_RegisterTask
ESOS_TASK_HANDLE esos_RegisterTask(uint8_t(*taskname)(ESOS_TASK_HANDLE pstTask))
Definition: esos.c:126
esos_sui_getLEDUserData1
uint32_t esos_sui_getLEDUserData1(ESOS_SUI_LED_HANDLE h_led)
Definition: esos_sui.c:320