ESOS32
ESOSOn32-bitProcessors
esos_sui.h
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 
35 #ifndef ESOS_SUI_H
36 #define ESOS_SUI_H
37 
38 #include "esos.h"
39 
40 // STRUCTURES
41 typedef struct {
42  BOOL b_pressed;
43  BOOL b_doublePressed;
44  uint8_t u8_lastEvent;
45  uint32_t u32_lastEventTime;
46  uint8_t _u8_state;
47  uint32_t _u32_nextTickTime;
48  uint32_t u32_userData1;
49  uint32_t u32_userData2;
51 
52 typedef struct {
53  BOOL b_LEDOn;
54  uint8_t _u8_state;
55  uint16_t u16_LEDFlashPeriod;
56  uint8_t u8_lastEvent;
57  uint32_t u32_lastEventTime;
58  uint32_t u32_userData1;
59  uint32_t u32_userData2;
61 
62 typedef uint8_t ESOS_SUI_LED_HANDLE;
63 typedef uint8_t ESOS_SUI_SWITCH_HANDLE;
64 
65 // ENUMERATIONS
66 enum esos_sui_switchStates {
67  ESOS_SUI_SWSTATE_IDLE,
68  ESOS_SUI_SWSTATE_WAIT_SW_UP,
69  ESOS_SUI_SWSTATE_WAIT_CLICK_TIMEOUT,
70  ESOS_SUI_SWSTATE_WAIT_DCLICK_TIMEOUT,
71 };
72 
73 enum esos_sui_switchEvents {
74  ESOS_SUI_SWITCH_EVENT_NULL,
75  ESOS_SUI_SWITCH_EVENT_HOLD,
76  ESOS_SUI_SWITCH_EVENT_CLICK,
77  ESOS_SUI_SWITCH_EVENT_DOUBLE_CLICK
78 };
79 
80 enum esos_sui_LEDStates {
81  ESOS_SUI_LED_STATE_ALL_OFF = 0,
82  ESOS_SUI_LED_STATE_ON = 1,
83  ESOS_SUI_LED_STATE_FLASHING = 2,
84  ESOS_SUI_LED_STATE_ONE_SHOT = 4
85 };
86 
87 
88 enum esos_sui_LEDEvents {
89  ESOS_SUI_LED_EVENT_OFF = 1,
90  ESOS_SUI_LED_EVENT_ON = 2
91 };
92 
93 // DEFINEs and CONSTANTs
94 #define ESOS_SUI_NUM_MAX_SWITCHES 32
95 #define ESOS_SUI_NUM_MAX_LEDS 32
96 
97 #define CLICK_TICK 200 //
98 #define DOUBLE_CLICK_TICK 200 //
99 #define HOLD_TICK 500
100 
101 #define SWITCH_SINGLE_PRESS_LATENCY 100 // Time before single click is recognized, double click must first release before this time.
102 #define SWITCH_DOUBLE_PRESS_MAX_LATENCY 200 // Time before double click must be pressed after releasing the switch from first press
103 
104 // The time duration #DEFINES should be used from esos/include/all_generic.h
105 //#define __ESOS_TICKS_TO_MS(x) (x/1)
106 //#define __ESOS_MS_TO_TICKS(x) (x*1)
107 #define __ESOS_SUI_TASK_PERIOD (25*MILLISECONDS)
108 
109 // PRIVATE DATA
110 
111 // PRIVATE FUNCTION PROTOTYPES
112 ESOS_USER_TASK( __esos_sui_task );
113 
114 // PUBLIC API FUNCTION PROTOTYPES
115 void __esos_InitSUI(void);
116 ESOS_SUI_SWITCH_HANDLE esos_sui_registerSwitch(uint32_t u32_d1, uint32_t u32_d2);
117 uint8_t esos_sui_getNumberOfSwitches(void);
118 
119 BOOL esos_sui_isSWPressed ( ESOS_SUI_SWITCH_HANDLE h_sw );
120 BOOL esos_sui_isSWReleased ( ESOS_SUI_SWITCH_HANDLE h_sw );
121 BOOL esos_sui_isSWDoublePressed ( ESOS_SUI_SWITCH_HANDLE h_sw );
122 uint8_t esos_sui_getSwitchLastEvent (ESOS_SUI_SWITCH_HANDLE h_sw);
123 uint32_t esos_sui_getSwitchLastEventTime (ESOS_SUI_SWITCH_HANDLE h_sw);
124 uint32_t esos_sui_getSwitchUserData1 (ESOS_SUI_SWITCH_HANDLE h_sw);
125 uint32_t esos_sui_getSwitchUserData2 (ESOS_SUI_SWITCH_HANDLE h_sw);
126 
127 ESOS_SUI_LED_HANDLE esos_sui_registerLED(uint32_t u32_d1, uint32_t u32_d2);
128 uint8_t esos_sui_getNumberOfLEDs(void);
129 BOOL esos_sui_isLEDOn ( ESOS_SUI_LED_HANDLE h_sw );
130 BOOL esos_sui_isLEDOff ( ESOS_SUI_LED_HANDLE h_sw );
131 BOOL esos_sui_isLEDOneShot ( ESOS_SUI_LED_HANDLE h_sw );
132 BOOL esos_sui_isLEDFlashing ( ESOS_SUI_LED_HANDLE h_sw );
133 void esos_sui_turnLEDOn ( ESOS_SUI_LED_HANDLE h_sw );
134 void esos_sui_turnLEDOff ( ESOS_SUI_LED_HANDLE h_sw );
135 void esos_sui_toggleLED ( ESOS_SUI_LED_HANDLE h_sw );
136 void esos_sui_oneshotLED (ESOS_SUI_LED_HANDLE h_led, uint16_t u16_period);
137 void esos_sui_flashLED ( ESOS_SUI_LED_HANDLE h_sw, uint16_t u16_period);
138 void esos_sui_stopFlashLED (ESOS_SUI_LED_HANDLE h_led);
139 
140 uint16_t esos_sui_getLEDFlashPeriod (ESOS_SUI_LED_HANDLE h_led);
141 uint32_t esos_sui_getLEDLastEventTime (ESOS_SUI_LED_HANDLE h_led);
142 uint32_t esos_sui_getLEDUserData1 (ESOS_SUI_LED_HANDLE h_led);
143 uint32_t esos_sui_getLEDUserData2 (ESOS_SUI_LED_HANDLE h_led);
144 
145 // PUBLIC HARDWARE FUNCTION PROTOTYPES
146 extern void esos_hw_sui_turnLEDOn( ESOS_SUI_LED_HANDLE h_led );
147 extern void esos_hw_sui_turnLEDOff( ESOS_SUI_LED_HANDLE h_led );
148 extern BOOL esos_hw_sui_isSwitchPressed( ESOS_SUI_LED_HANDLE h_led );
149 extern BOOL esos_hw_sui_isSwitchReleased( ESOS_SUI_LED_HANDLE h_led );
150 extern void esos_hw_sui_configLED( ESOS_SUI_LED_HANDLE h_led );
151 extern void esos_hw_sui_configSwitch( ESOS_SUI_LED_HANDLE h_led );
152 
153 // PUBLIC API ESOS TASK MACROS
154 #define ESOS_TASK_WAIT_UNTIL_SUI_SW_PRESSED(x) ESOS_TASK_WAIT_UNTIL( esos_sui_isSWPressed((x)) )
155 #define ESOS_TASK_WAIT_UNTIL_SUI_SW_RELEASED(x) ESOS_TASK_WAIT_UNTIL( esos_sui_isSWReleased((x)) )
156 #define ESOS_TASK_WAIT_UNTIL_SUI_SW_PRESSED_AND_RELEASED(x) do { \
157  ESOS_TASK_WAIT_UNTIL_SUI_SW_PRESSED((x)); \
158  ESOS_TASK_WAIT_UNTIL_SUI_SW_RELEASED((x)); \
159  } while (0)
160 #define ESOS_TASK_WAIT_UNTIL_SUI_SW_PRESSED_TWICE(x) do { \
161  ESOS_TASK_WAIT_UNTIL_SUI_SW_PRESSED((x)); \
162  ESOS_TASK_WAIT_UNTIL_SUI_SW_RELEASED((x)); \
163  ESOS_TASK_WAIT_UNTIL_SUI_SW_PRESSED((x)); \
164  ESOS_TASK_WAIT_UNTIL_SUI_SW_RELEASED((x)); \
165  } while (0)
166 #define ESOS_TASK_WAIT_UNTIL_SUI_SW_EVENT(x) ESOS_TASK_WAIT_WHILE( esos_sui_getSwitchLastEvent((x)) == ESOS_SUI_SWITCH_EVENT_NULL )
167 #define ESOS_TASK_WAIT_UNTIL_SUI_SW_HOLD_EVENT(x) ESOS_TASK_WAIT_UNTIL( esos_sui_getSwitchLastEvent((x)) == ESOS_SUI_SWITCH_EVENT_HOLD )
168 #define ESOS_TASK_WAIT_UNTIL_SUI_SW_CLICK_EVENT(x) ESOS_TASK_WAIT_UNTIL( esos_sui_getSwitchLastEvent((x)) == ESOS_SUI_SWITCH_EVENT_CLICK )
169 #define ESOS_TASK_WAIT_UNTIL_SUI_SW_DOUBLE_CLICK_EVENT(x) ESOS_TASK_WAIT_UNTIL( esos_sui_getSwitchLastEvent((x)) == ESOS_SUI_SWITCH_EVENT_DOUBLE_CLICK )
170 
171 
172 #endif // ESOS_SUI
esos_sui_stopFlashLED
void esos_sui_stopFlashLED(ESOS_SUI_LED_HANDLE h_led)
Definition: esos_sui.c:450
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_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_hw_sui_isSwitchReleased
BOOL esos_hw_sui_isSwitchReleased(ESOS_SUI_SWITCH_HANDLE h_sw)
Definition: esos_hwxxxx_sui.c:148
esos_sui_getLEDFlashPeriod
uint16_t esos_sui_getLEDFlashPeriod(ESOS_SUI_LED_HANDLE h_led)
Definition: esos_sui.c:289
esos.h
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
__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
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_USER_TASK
#define ESOS_USER_TASK(taskname)
Definition: esos_task.h:227
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_sui_getLEDUserData1
uint32_t esos_sui_getLEDUserData1(ESOS_SUI_LED_HANDLE h_led)
Definition: esos_sui.c:320