44 if (pwm_percent > 100U) {
47 if (
s_ctx[
id].status.overcurrent) {
61 if (pwm_percent > 100U) {
64 if (
s_ctx[
id].status.overcurrent) {
99 if (current_sample_ma >
s_ctx[
id].status.peak_current_ma) {
105 if (
s_ctx[
id].over_ms < UINT16_MAX) {
120 const uint32_t force = ((uint32_t)
s_ctx[
id].status.peak_current_ma
123 (force > UINT16_MAX) ? UINT16_MAX : (uint16_t)force;
EpbStatus actuator_release(ActuatorId id, uint8_t pwm_percent)
static ActuatorCtx s_ctx[ACTUATOR_COUNT]
EpbStatus actuator_init(void)
ActuatorStatus actuator_get_status(ActuatorId id)
EpbStatus actuator_apply(ActuatorId id, uint8_t pwm_percent)
void actuator_isr_1khz(ActuatorId id, uint16_t current_sample_ma)
ISR hook for current sampling.
EpbStatus actuator_stop(ActuatorId id)
static bool is_valid_id(ActuatorId id)
Low-level control of the EPB actuators.
#define ACT_FORCE_PER_AMP_N
#define ACT_OVERCURRENT_WINDOW_MS
#define ACT_OVERCURRENT_LIMIT_MA
Current limit (spec) and time window for cutoff (spec).
uint16_t clamping_force_n
ActuatorDirection direction