2
3
4
5
6
10#include "../types/evmu_typedefs.h"
12#define EVMU_LOGIC_HIGH 1
13#define EVMU_LOGIC_LOW 0
15#define EVMU_WAVE_LOGIC_BITS 2
16#define EVMU_WAVE_LOGIC_CURRENT_MASK (0x3
)
17#define EVMU_WAVE_LOGIC_PREVIOUS_MASK (0x70
)
19#define GBL_SELF_TYPE GblEnum
24GBL_DECLARE_ENUM(EVMU_LOGIC) {
29 GY_LOGIC_COUNT = EVMU_LOGIC_Z + 1
32#define EVMU_DECLARE_SUBWAVE_ENUMS_(L)
38GBL_DECLARE_ENUM(EvmuWave) {
46EVMU_INLINE void EvmuWave_reset (GBL_SELF) GBL_NOEXCEPT;
47EVMU_INLINE void EvmuWave_fill (GBL_SELF, EVMU_LOGIC values) GBL_NOEXCEPT;
48EVMU_INLINE void EvmuWave_set (GBL_SELF, EVMU_LOGIC prevValue, EVMU_LOGIC curValue) GBL_NOEXCEPT;
49EVMU_INLINE void EvmuWave_update (GBL_SELF, EVMU_LOGIC value) GBL_NOEXCEPT;
51EVMU_INLINE EVMU_LOGIC EvmuWave_logicCurrent (GBL_CSELF) GBL_NOEXCEPT;
62EVMU_INLINE EVMU_LOGIC EvmuWave_logicPrevious (GBL_CSELF) GBL_NOEXCEPT;
85EVMU_INLINE GblBool EvmuWave_hasChangedLogic (GBL_CSELF, EVMU_LOGIC value) GBL_NOEXCEPT;
101EVMU_INLINE void EvmuWave_logicPreviousSet_(GBL_SELF, EVMU_LOGIC value) GBL_NOEXCEPT {
105EVMU_INLINE void EvmuWave_logicCurrentSet_(GBL_SELF, EVMU_LOGIC value) GBL_NOEXCEPT {
109EVMU_INLINE void EvmuWave_reset(GBL_SELF) GBL_NOEXCEPT {
110 *pSelf = EVMU_WAVE_X_X;
112EVMU_INLINE void EvmuWave_fill(GBL_SELF, EVMU_LOGIC values) GBL_NOEXCEPT {
113 EvmuWave_set(pSelf, values, values);
115EVMU_INLINE void EvmuWave_set(GBL_SELF, EVMU_LOGIC prevValue, EVMU_LOGIC curValue) GBL_NOEXCEPT {
116 EvmuWave_logicPreviousSet_(pSelf, prevValue);
117 EvmuWave_logicCurrentSet_(pSelf, curValue);
119EVMU_INLINE EVMU_LOGIC EvmuWave_logicCurrent(GBL_CSELF) GBL_NOEXCEPT {
122EVMU_INLINE EVMU_LOGIC EvmuWave_logicPrevious(GBL_CSELF) GBL_NOEXCEPT {
125EVMU_INLINE void EvmuWave_update(GBL_SELF, EVMU_LOGIC value) GBL_NOEXCEPT {
130 return EvmuWave_logicCurrent(pSelf) == EvmuWave_logicPrevious(pSelf);
132EVMU_INLINE GblBool EvmuWave_hasStayedLogic(GBL_CSELF, EVMU_LOGIC value) GBL_NOEXCEPT {
133 return EvmuWave_isLogic(pSelf, value) && EvmuWave_wasLogic(pSelf, value);
136 return EvmuWave_hasStayedLogic(pSelf, EVMU_LOGIC_0);
139 return EvmuWave_hasStayedLogic(pSelf, EVMU_LOGIC_1);
142 return EvmuWave_hasStayedLogic(pSelf, EVMU_LOGIC_Z);
145 return EvmuWave_hasStayedLogic(pSelf, EVMU_LOGIC_X);
148 return EvmuWave_wasLogicActive(pSelf) && EvmuWave_isLogicActive(pSelf);
151 return EvmuWave_wasLogicKnown(pSelf) && EvmuWave_isLogicKnown(pSelf);
154 return EvmuWave_wasLogicValid(pSelf) && EvmuWave_isLogicValid(pSelf);
157 return EvmuWave_wasLogicInvalid(pSelf) && EvmuWave_isLogicInvalid(pSelf);
160 return !EvmuWave_hasStayed(pSelf);
162EVMU_INLINE GblBool EvmuWave_hasChangedLogic(GBL_CSELF, EVMU_LOGIC value) GBL_NOEXCEPT {
163 return !EvmuWave_wasLogic(pSelf, value) && EvmuWave_isLogic(pSelf, value);
166 return EvmuWave_hasChangedEdgeRising(pSelf) || EvmuWave_hasChangedEdgeFalling(pSelf);
169 return EvmuWave_wasLogicLow(pSelf) && EvmuWave_isLogicHigh(pSelf);
172 return EvmuWave_wasLogicHigh(pSelf) && EvmuWave_isLogicLow(pSelf);
175 return EvmuWave_wasLogicInactive(pSelf) && EvmuWave_isLogicActive(pSelf);
178 return EvmuWave_wasLogicActive(pSelf) && EvmuWave_isLogicInactive(pSelf);
181 return EvmuWave_wasLogicUnknown(pSelf) && EvmuWave_isLogicKnown(pSelf);
184 return EvmuWave_wasLogicKnown(pSelf) && EvmuWave_isLogicUnknown(pSelf);
187 return EvmuWave_wasLogicInvalid(pSelf) && EvmuWave_isLogicValid(pSelf);
190 return EvmuWave_wasLogicValid(pSelf) && EvmuWave_isLogicInvalid(pSelf);
193 return EvmuWave_logicCurrent(pSelf) == value;
196 return EvmuWave_isLogic(pSelf, EVMU_LOGIC_1);
199 return EvmuWave_isLogic(pSelf, EVMU_LOGIC_0);
202 return EvmuWave_isLogic(pSelf, EVMU_LOGIC_Z);
205 return EvmuWave_isLogic(pSelf, EVMU_LOGIC_X);
208 return !EvmuWave_isLogicInactive(pSelf);
211 return !EvmuWave_isLogicUnknown(pSelf);
214 return EvmuWave_isLogicActive(pSelf) && EvmuWave_isLogicKnown(pSelf);
217 return EvmuWave_isLogicInactive(pSelf) || EvmuWave_isLogicUnknown(pSelf);
220 return EvmuWave_logicPrevious(pSelf) == value;
223 return EvmuWave_wasLogic(pSelf, EVMU_LOGIC_1);
226 return EvmuWave_wasLogic(pSelf, EVMU_LOGIC_0);
229 return EvmuWave_wasLogic(pSelf, EVMU_LOGIC_Z);
232 return EvmuWave_wasLogic(pSelf, EVMU_LOGIC_X);
235 return !EvmuWave_wasLogicInactive(pSelf);
238 return !EvmuWave_wasLogicUnknown(pSelf);
241 return EvmuWave_wasLogicActive(pSelf) && EvmuWave_wasLogicKnown(pSelf);
244 return EvmuWave_wasLogicInactive(pSelf) || EvmuWave_wasLogicUnknown(pSelf);
247#undef EVMU_WAVE_LOGIC_MASK_
#define EVMU_INLINE
Define used for inlining a funcion within a C header file.
#define EVMU_WAVE_LOGIC_PREVIOUS_MASK
#define EVMU_WAVE_LOGIC_MASK_
#define EVMU_DECLARE_SUBWAVE_ENUMS_(L)
#define EVMU_WAVE_LOGIC_BITS
#define EVMU_WAVE_LOGIC_CURRENT_MASK