Clean up crc16.[ch]

This commit is contained in:
László Monda
2017-04-12 19:20:10 +02:00
parent 97195b474f
commit d3b6d127f7
2 changed files with 4 additions and 102 deletions

View File

@@ -1,70 +1,6 @@
#include "bootloader_common.h"
#include "crc16.h"
#if !defined(BOOTLOADER_HOST)
#include "fsl_device_registers.h"
#include "utilities/fsl_rtos_abstraction.h"
#endif // !BOOTLOADER_HOST
#if !defined(BOOTLOADER_HOST) && FSL_FEATURE_SOC_CRC_COUNT && !defined(BL_TARGET_RAM)
#include "fsl_crc.h"
/* Table of base addresses for crc instances. */
static CRC_Type *const g_crcBase[1] = CRC_BASE_PTRS;
void crc16_init(crc16_data_t *crc16Config)
{
assert(crc16Config);
crc16Config->currentCrc = 0x0000U;
}
void crc16_update(crc16_data_t *crc16Config, const uint8_t *src, uint32_t lengthInBytes)
{
assert(crc16Config);
assert(src);
crc_config_t crcUserConfigPtr;
CRC_GetDefaultConfig(&crcUserConfigPtr);
crcUserConfigPtr.crcBits = kCrcBits16;
crcUserConfigPtr.seed = crc16Config->currentCrc;
crcUserConfigPtr.polynomial = 0x1021U;
crcUserConfigPtr.complementChecksum = false;
crcUserConfigPtr.reflectIn = false;
crcUserConfigPtr.reflectOut = false;
// Init CRC module and then run it
//! Note: We must init CRC module here, As we may seperate one crc calculation into several times
//! Note: It is better to use lock to ensure the integrity of current updating operation of crc calculation
// in case crc module is shared by multiple crc updating requests at the same time
if (lengthInBytes)
{
lock_acquire();
CRC_Init(g_crcBase[0], &crcUserConfigPtr);
CRC_WriteData(g_crcBase[0], src, lengthInBytes);
crcUserConfigPtr.seed = CRC_Get16bitResult(g_crcBase[0]);
lock_release();
}
crc16Config->currentCrc = crcUserConfigPtr.seed;
}
void crc16_finalize(crc16_data_t *crc16Config, uint16_t *hash)
{
assert(crc16Config);
assert(hash);
*hash = crc16Config->currentCrc;
// De-init CRC module when we complete a full crc calculation
CRC_Deinit(g_crcBase[0]);
}
#else
////////////////////////////////////////////////////////////////////////////////
// Code
////////////////////////////////////////////////////////////////////////////////
void crc16_init(crc16_data_t *crc16Config)
{
assert(crc16Config);
@@ -107,4 +43,3 @@ void crc16_finalize(crc16_data_t *crc16Config, uint16_t *hash)
*hash = crc16Config->currentCrc;
}
#endif

View File

@@ -1,56 +1,23 @@
#ifndef _CRC16_H_
#define _CRC16_H_
#ifndef __CRC16_H__
#define __CRC16_H__
#include <stdint.h>
//! @addtogroup crc16
//! @{
////////////////////////////////////////////////////////////////////////////////
// Definitions
////////////////////////////////////////////////////////////////////////////////
//! @brief State information for the CRC16 algorithm.
typedef struct Crc16Data
{
uint16_t currentCrc; //!< Current CRC value.
typedef struct Crc16Data {
uint16_t currentCrc;
} crc16_data_t;
////////////////////////////////////////////////////////////////////////////////
// API
////////////////////////////////////////////////////////////////////////////////
#if __cplusplus
extern "C" {
#endif
//! @name CRC16
//@{
//! @brief Initializes the parameters of the crc function, must be called first.
//!
//! @param crc16Config Instantiation of the data structure of type crc16_data_t.
void crc16_init(crc16_data_t *crc16Config);
//! @brief A "running" crc calculator that updates the crc value after each call.
//!
//! @param crc16Config Instantiation of the data structure of type crc16_data_t.
//! @param src Pointer to the source buffer of data.
//! @param lengthInBytes The length, given in bytes (not words or long-words).
void crc16_update(crc16_data_t *crc16Config, const uint8_t *src, uint32_t lengthInBytes);
//! @brief Calculates the final crc value, padding with zeros if necessary, must be called last.
//!
//! @param crc16Config Instantiation of the data structure of type crc16_data_t.
//! @param hash Pointer to the value returned for the final calculated crc value.
void crc16_finalize(crc16_data_t *crc16Config, uint16_t *hash);
//@}
#if __cplusplus
}
#endif
//! @}
#endif