dal-c library ← coverage

§ Coverage

src/sc_crc.c

1/*2 * sc_crc.c -- implementation. Blocks are tagged with the low-level3 * requirement they satisfy; see requirements/sc_crc.md.4 */5#include "sc_crc.h"677uint8_t sc_crc8_smbus(const uint8_t *data, uint32_t len)8{97    uint8_t  crc = 0x00u;10    uint32_t i;11    uint8_t  bit;12137    if (data == NULL)condition outcomes covered 2/214    {152        len = 0u;                                   /* LLR-CRC-7 */16    }171827    for (i = 0u; i < len; i++)                       /* LLR-CRC-1 */condition outcomes covered 2/219    {2020        crc ^= data[i];21180        for (bit = 0u; bit < 8u; bit++)             /* LLR-CRC-2 */condition outcomes covered 2/222        {23160            if ((crc & 0x80u) != 0u)                /* LLR-CRC-3 */condition outcomes covered 2/224            {2585                crc = (uint8_t)((uint8_t)(crc << 1) ^ 0x07u);26            }27            else28            {2975                crc = (uint8_t)(crc << 1);30            }31        }32    }33347    return crc;                                      /* LLR-CRC-4 */35}36374uint16_t sc_crc16_ccitt_false(const uint8_t *data, uint32_t len)38{394    uint16_t crc = 0xFFFFu;40    uint32_t i;41    uint8_t  bit;42434    if (data == NULL)condition outcomes covered 2/244    {451        len = 0u;                                   /* LLR-CRC-7 */46    }474822    for (i = 0u; i < len; i++)                       /* LLR-CRC-1 */condition outcomes covered 2/249    {5018        crc ^= (uint16_t)((uint16_t)data[i] << 8);51162        for (bit = 0u; bit < 8u; bit++)             /* LLR-CRC-2 */condition outcomes covered 2/252        {53144            if ((crc & 0x8000u) != 0u)              /* LLR-CRC-3 */condition outcomes covered 2/254            {5566                crc = (uint16_t)((uint16_t)(crc << 1) ^ 0x1021u);56            }57            else58            {5978                crc = (uint16_t)(crc << 1);60            }61        }62    }63644    return crc;                                      /* LLR-CRC-5 */65}66675uint32_t sc_crc32(const uint8_t *data, uint32_t len)68{695    uint32_t crc = 0xFFFFFFFFu;70    uint32_t i;71    uint8_t  bit;72735    if (data == NULL)condition outcomes covered 2/274    {751        len = 0u;                                   /* LLR-CRC-7 */76    }777824    for (i = 0u; i < len; i++)                       /* LLR-CRC-1 */condition outcomes covered 2/279    {8019        crc ^= (uint32_t)data[i];81171        for (bit = 0u; bit < 8u; bit++)             /* LLR-CRC-2 */condition outcomes covered 2/282        {83152            if ((crc & 0x00000001u) != 0u)          /* LLR-CRC-6: reflected */condition outcomes covered 2/284            {8568                crc = (crc >> 1) ^ 0xEDB88320u;86            }87            else88            {8984                crc = (crc >> 1);90            }91        }92    }93945    return crc ^ 0xFFFFFFFFu;                        /* LLR-CRC-8: final XOR */95}