/**
*   @copyright       © 2026 Microchip Technology Inc.
    Microchip Technology Inc. and its subsidiaries. You may use this
    software and any derivatives exclusively with Microchip products.

    THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES, WHETHER
    EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE, INCLUDING ANY IMPLIED
    WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY, AND FITNESS FOR A
    PARTICULAR PURPOSE, OR ITS INTERACTION WITH MICROCHIP PRODUCTS, COMBINATION
    WITH ANY OTHER PRODUCTS, OR USE IN ANY APPLICATION.

    IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
    INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
    WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS
    BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO THE
    FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN
    ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY,
    THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE.

    MICROCHIP PROVIDES THIS SOFTWARE CONDITIONALLY UPON YOUR ACCEPTANCE OF THESE
    TERMS. 
*
*************************************************************************/

/*************************************************************************
 *  @file           diag_crc_shared.h
 *  @version       	1.0
 *  @brief     		This file has the declarations for the common functions
 *					used by CRC diagnostics.
 *************************************************************************/

/**
 * @defgroup functions Functions
 */
#ifndef DIAG_CRC_SHARED_H
#define DIAG_CRC_SHARED_H

// ==============================================================================
// File Inclusions
// ==============================================================================
#include <xc.h>
#include <stdint.h>
#include <stdbool.h>


#define DIAG_CRC_DATA                   &CRCDAT
#define DIAG_CRC_CONTROL_REG            &CRCCON
#define DIAG_CRC_POLYNOMIAL             &CRCXOR
#define DIAG_CRC_RESULT                 &CRCWDAT
#define DIAG_CRC_GO_MASK                0x00000010U
#define DIAG_CRC_EN_MASK                0x00008000U
#define DIAG_CRC_RESULT_LOOP            4U

/*
 @ingroup functions 
 @brief **Software Requirement Reference ID : SW_CRC_FUNCTIONAL_TEST_01**\n
 Function to compute CRC result
 @param data - CRC data, poly - polynomial, 
 @return Computed CRC result
 */
uint32_t	DIAG_CRC_Compute(uint8_t *data, uint32_t poly, uint16_t polyWidth);

/**
 @ingroup functions
 @brief **Software Requirement Reference ID : SW_CRC_FUNCTIONAL_TEST_01**\n
 Implements the test mode for functional diagnostics.
 @param setTestMode - Test mode
 @return void
*/
void DIAG_CRC_SetTestModeFunctional(uint32_t setTestMode);

#endif /* DIAG_CRC_SHARED_H */
