§ Coverage
1/*2 * sc_debounce.c -- implementation. Blocks are tagged with the low-level3 * requirement they satisfy; see requirements/sc_debounce.md.4 */5#include "sc_debounce.h"673sc_status_t sc_debounce_config_valid(const sc_debounce_config_t *cfg)8{9 sc_status_t status;10113 if (cfg == NULL)condition outcomes covered 2/212 {131 status = SC_ERR_NULL; /* LLR-DB-6 */14 }152 else if (cfg->threshold == 0u)condition outcomes covered 2/216 {171 status = SC_ERR_PARAM; /* LLR-DB-7 */18 }19 else20 {211 status = SC_OK; /* LLR-DB-8 */22 }23243 return status;25}26276sc_status_t sc_debounce_init(sc_debounce_state_t *state, bool initial)28{29 sc_status_t status;30316 if (state == NULL)condition outcomes covered 2/232 {331 status = SC_ERR_NULL; /* LLR-DB-9 */34 }35 else36 {375 state->output = (uint8_t)(initial ? 1 : 0); /* LLR-DB-1 */condition outcomes covered 2/2385 state->counter = 0u;395 status = SC_OK;40 }41426 return status;43}444516bool sc_debounce_update(const sc_debounce_config_t *cfg,46 sc_debounce_state_t *state,47 bool raw)48{49 bool result;505116 if ((cfg == NULL) || (state == NULL))condition outcomes covered 4/452 {532 result = false; /* LLR-DB-5 */54 }55 else56 {5714 uint8_t raw_bit = (uint8_t)(raw ? 1 : 0);condition outcomes covered 2/2585914 if (raw_bit == state->output)condition outcomes covered 2/260 {614 state->counter = 0u; /* LLR-DB-2: agrees, reset run */62 }63 else64 {6510 state->counter = (uint8_t)(state->counter + 1u); /* LLR-DB-3: disagrees */6610 if (state->counter >= cfg->threshold)condition outcomes covered 2/267 {684 state->output = raw_bit; /* LLR-DB-4: accept the change */694 state->counter = 0u;70 }71 }727314 result = (state->output != 0u);74 }757616 return result;77}