/*
 * Copyright 2021 MindMotion Microelectronics Co., Ltd.
 * All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#include "board_init.h"

/*
 * Macros.
 */
#define APP_CRC_POLYNOMIAL  0x19  /* When the bit width of the polynomial is 8 bits, the polynomial is: x^8+x^4+x^3+1. */
#define APP_CRC_SEED        0xff  /* Initial value of polynomial. */

/*
 * Variables.
 */
uint32_t app_crc_in_buf[3] = {0x11, 0x22, 0x33};
uint32_t app_crc_expout = 0x33;  /* Expected result calculated by CRC. */
CRC_Init_Type app_init;

/*
 * Declerations.
 */

/*
 * Functions.
 */
int main(void)
{
    uint32_t app_crc_result;

    BOARD_Init();
    printf("crc examples.\r\n");

    /* CRC initialization. */
    app_init.Polynomial       =  APP_CRC_POLYNOMIAL;
    app_init.PolynomialWidth  =  CRC_PolynomialWidth_8b;
    app_init.InEndian         =  CRC_DataEndian_LittleEndian;
    app_init.OutEndian        =  CRC_DataEndian_LittleEndian;
    app_init.InRev            =  CRC_Rev_Normal;
    app_init.OutRev           =  CRC_Rev_Normal;
    CRC_Init(BOARD_DEBUG_CRC_PORT, &app_init);

    CRC_SetSeed(BOARD_DEBUG_CRC_PORT, APP_CRC_SEED);  /* Set the value in CRC calculation unit as the initial value. */
    for (uint8_t i = 0u; i < 3u; i++)
    {
        CRC_SetData(BOARD_DEBUG_CRC_PORT, app_crc_in_buf[i]);  /* Set data for CRC calculation. */
    }
    app_crc_result = CRC_GetResult(BOARD_DEBUG_CRC_PORT);  /* Get the final calculation result. */

    if (app_crc_result == app_crc_expout)  /* Whether the current calculation result is the same as the theoretical calculation value. */
    {
        printf("matched.\r\n");
    }
    else
    {
        printf("mismatched.\r\n");
    }

    while (1)
    {
    }
}

/* EOF. */

