diff --git a/Makefile b/Makefile index 7ad421ab..caefea3f 100644 --- a/Makefile +++ b/Makefile @@ -88,6 +88,8 @@ COMPS += shared/comps/idx_home.c COMPS += shared/comps/move.c COMPS += shared/comps/ac.c COMPS += shared/comps/not.c +COMPS += shared/comps/and.c +COMPS += shared/comps/or.c COMPS += shared/comps/jog.c SOURCES += $(COMPS) diff --git a/shared/comps/and.c b/shared/comps/and.c new file mode 100644 index 00000000..316a160f --- /dev/null +++ b/shared/comps/and.c @@ -0,0 +1,31 @@ +#include "hal.h" + +HAL_COMP(and); + +HAL_PIN(in0); +HAL_PIN(in1); +HAL_PIN(in2); +HAL_PIN(in3); + +HAL_PIN(out); + +static void rt_func(float period, volatile void *ctx_ptr, volatile hal_pin_inst_t *pin_ptr) { + struct and_pin_ctx_t *pins = (struct and_pin_ctx_t *)pin_ptr; + + PIN(out) = (PIN(in0) > 0.0) & (PIN(in1) > 0.0) & (PIN(in2) > 0.0) & (PIN(in3) > 0.0); +} + +const hal_comp_t and_comp_struct = { + .name = "and", + .nrt = 0, + .rt = rt_func, + .frt = 0, + .nrt_init = 0, + .hw_init = 0, + .rt_start = 0, + .frt_start = 0, + .rt_stop = 0, + .frt_stop = 0, + .ctx_size = 0, + .pin_count = sizeof(struct and_pin_ctx_t) / sizeof(struct hal_pin_inst_t), +}; diff --git a/shared/comps/or.c b/shared/comps/or.c new file mode 100644 index 00000000..76de38e7 --- /dev/null +++ b/shared/comps/or.c @@ -0,0 +1,31 @@ +#include "hal.h" + +HAL_COMP(or); + +HAL_PIN(in0); +HAL_PIN(in1); +HAL_PIN(in2); +HAL_PIN(in3); + +HAL_PIN(out); + +static void rt_func(float period, volatile void *ctx_ptr, volatile hal_pin_inst_t *pin_ptr) { + struct or_pin_ctx_t *pins = (struct or_pin_ctx_t *)pin_ptr; + + PIN(out) = (PIN(in0) > 0.0) | (PIN(in1) > 0.0) | (PIN(in2) > 0.0) | (PIN(in3) > 0.0); +} + +const hal_comp_t or_comp_struct = { + .name = "or", + .nrt = 0, + .rt = rt_func, + .frt = 0, + .nrt_init = 0, + .hw_init = 0, + .rt_start = 0, + .frt_start = 0, + .rt_stop = 0, + .frt_stop = 0, + .ctx_size = 0, + .pin_count = sizeof(struct or_pin_ctx_t) / sizeof(struct hal_pin_inst_t), +};