#ifndef _VPDECC_H_
#define _VPDECC_H_

#pragma GCC diagnostic ignored "-Wunused-variable"
#pragma GCC diagnostic ignored "-Wunused-parameter"

#include <stdlib.h>

#define VPD_ECC_OK 0
#define VPD_ECC_NOT_ENOUGH_BUFFER 1
#define VPD_ECC_WRONG_ECC_SIZE 2
#define VPD_ECC_WRONG_BUFFER_SIZE 9
#define VPD_ECC_UNCORRECTABLE_DATA 90
#define VPD_ECC_CORRECTABLE_DATA 91

#ifdef __cplusplus
extern "C"
{
#endif

/* TODO  doxygen !!!!!!!! */

/******************************************************************************/
/* vpdecc_create_ecc */
/*                                                                            */
/* For a given data block (together with the length of the data block */
/* this function creates the ECC */
/*                                                                            */
/* @param     pData           In-Buffer containing the raw VPD data */
/*                                            (won't be changed) */
/*                                                                            */
/* @param     vDataLength     In        should contain the length of the
 * Data */
/*                                      in the buffer given to vData */
/*                                                                            */
/* @param     pEcc            Out-Buffer after execution this will be the */
/*                                      buffer for the calculated Ecc */
/*                                                                            */
/* @param     pEccLenght      In/Out    In : size of buffer */
/*                                      Out: contains the length of the Ecc
 */
/*                                                                            */
/* @return Error returncode */
/******************************************************************************/
int vpdecc_create_ecc(const unsigned char* data, size_t datalength,
                      unsigned char* ecc, size_t* ecc_buffersize);

/******************************************************************************/
/* vpdecc_check_data */
/*                                                                            */
/* For a given data block (together with the ecc) */
/* this function checks the data for validness */
/*                                                                            */
/* @param     pData           In-Buffer containing the raw VPD data */
/*                            Out-Buffer containing the raw VPD data */
/*                                      No error           : data unchanged
 */
/*                                      Correctable error  : data corrected
 */
/*                                      Uncorrectable error: data unchanged
 */
/*                                                                            */
/* @param     vDataLength     In        should contain the length of the
 * Data */
/*                                      in the buffer given to vData */
/*                                                                            */
/* @param     pEcc            In-Buffer should contain the Ecc for the data
 */
/*                                                                            */
/*                                                                            */
/* @param     vEccLenght      In        should contain the length of the Ecc
 */
/*                                                                            */
/* @return Error returncode */
/******************************************************************************/
int vpdecc_check_data(unsigned char* data, size_t data_length,
                      const unsigned char* ecc, size_t ecc_length);

#ifdef __cplusplus
} /* end extern "C" */
#endif

#endif /* endif _VPDECC_H_ */
