dal-c library ← coverage

§ Coverage

src/sc_debounce.c

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}