Init
This commit is contained in:
commit
564e99a78d
|
|
@ -0,0 +1,57 @@
|
|||
//
|
||||
// Created by xemon on 15.12.22.
|
||||
//
|
||||
#include "ControllableSwitch.h"
|
||||
|
||||
#include "stdint.h"
|
||||
|
||||
|
||||
void ControllableSwitch_Init(
|
||||
tControllableSwitch *env,
|
||||
void *invalidatorEnv,
|
||||
void *invalidator
|
||||
) {
|
||||
env->env = invalidatorEnv;
|
||||
env->invalidator = invalidator;
|
||||
env->hasCurrentState = false;
|
||||
env->hasHardTarget = false;
|
||||
env->hasSoftTarget = false;
|
||||
}
|
||||
|
||||
#define ControllableSwitch_Invalidate(STATE, TARGET) (STATE)->invalidator((STATE)->env,(STATE)->currentState,TARGET)
|
||||
|
||||
|
||||
uint32_t ControllableSwitch_Check(tControllableSwitch *env) {
|
||||
|
||||
if (env->hasHardTarget) {
|
||||
if ((env->hardTarget != env->currentState) || !env->hasCurrentState) {
|
||||
return ControllableSwitch_Invalidate(env, env->hardTarget);
|
||||
}
|
||||
} else if (env->hasSoftTarget) {
|
||||
if ((env->softTarget != env->currentState) || !env->hasCurrentState) {
|
||||
return ControllableSwitch_Invalidate(env, env->softTarget);
|
||||
}
|
||||
}
|
||||
|
||||
return env->currentState;
|
||||
}
|
||||
|
||||
|
||||
void ControllableSwitch_Set(tControllableSwitch *env, bool value) {
|
||||
env->softTarget = value;
|
||||
env->hasSoftTarget = true;
|
||||
env->currentState = ControllableSwitch_Check(env);
|
||||
env->hasCurrentState = true;
|
||||
}
|
||||
|
||||
void ControllableSwitch_SetHard(tControllableSwitch *env, int32_t value) {
|
||||
env->hardTarget = value;
|
||||
env->hasHardTarget = true;
|
||||
env->currentState = ControllableSwitch_Check(env);
|
||||
env->hasCurrentState = true;
|
||||
}
|
||||
|
||||
void ControllableSwitch_ClearHard(tControllableSwitch *env) {
|
||||
env->hasHardTarget = false;
|
||||
env->currentState = ControllableSwitch_Check(env);
|
||||
}
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
//
|
||||
// Created by xemon on 15.12.22.
|
||||
//
|
||||
|
||||
#ifndef UVEOS_ON_NATION_CONTROLLABLESWITCH_H
|
||||
#define UVEOS_ON_NATION_CONTROLLABLESWITCH_H
|
||||
|
||||
#include "stdbool.h"
|
||||
#include "stdint.h"
|
||||
|
||||
typedef struct {
|
||||
bool hasCurrentState;
|
||||
uint32_t currentState;
|
||||
bool hasSoftTarget;
|
||||
uint32_t softTarget;
|
||||
bool hasHardTarget;
|
||||
uint32_t hardTarget;
|
||||
void *env;
|
||||
|
||||
uint32_t (*invalidator)(void *env, uint32_t currentState, bool targetState);
|
||||
} tControllableSwitch;
|
||||
|
||||
void ControllableSwitch_Init(
|
||||
tControllableSwitch *env,
|
||||
void *invalidatorEnv,
|
||||
void *invalidator
|
||||
);
|
||||
|
||||
|
||||
void ControllableSwitch_Set(tControllableSwitch *env, bool value);
|
||||
|
||||
void ControllableSwitch_SetHard(tControllableSwitch *env, int32_t value);
|
||||
|
||||
void ControllableSwitch_ClearHard(tControllableSwitch *env);
|
||||
|
||||
|
||||
#endif //UVEOS_ON_NATION_CONTROLLABLESWITCH_H
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"dep": [
|
||||
],
|
||||
"cmake": {
|
||||
"inc_dirs": [
|
||||
"./"
|
||||
],
|
||||
"srcs": [
|
||||
"*.c"
|
||||
]
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue