/*******************************************************************************
 * (c) Copyright 2008 Actel Corporation.  All rights reserved.
 * 
 *  Manufacturing Test Data data structures.
 *  This header files specified the layout of the various data structures used
 *  to store manaufacturing test data within eNVM.
 *
 * SVN $Revision: 700 $
 * SVN $Date: 2009-03-13 13:22:03 +0000 (Fri, 13 Mar 2009) $
 */
#ifndef MTD_DATA_H
#define MTD_DATA_H

#include <stdint.h>

#ifdef __cplusplus
extern "C" {
#endif 

/*
 * Analog block specifications
 */
#define NB_OF_QUADS                     6
#define NB_OF_ABPS_PER_QUAD             2
#define TOTAL_NB_OF_ABPS                (NB_OF_QUADS * NB_OF_ABPS_PER_QUAD)
#define NB_OF_ABPS_RANGES               4
#define NB_OF_ANALOG_MODULES            3
#define NB_OF_OBD_MODES                 2
#define NB_OF_QUADS_PER_MODULE          2
#define NB_OF_CHOPPING_OPTIONS          2
#define NB_OF_DIRECT_INPUTS_PER_ADC     4

#define NB_OF_ADC_CHANNELS      13

/*------------------------------------------------------------------------------
 * mtd_global_settings_t
 *------------------------------------------------------------------------------
 * This typedef specifies the layout of the data structure holding the 
 * manufacturing test data global settings.
 */
typedef struct __mtd_global_settings_t
{
    uint16_t    crc16;
    uint8_t     serial[6];
    uint32_t    revision;
    uint16_t    sram_repair[8];
    uint16_t    varef_m;
    uint16_t    spare;
    uint8_t     big_dec;
    uint8_t     reserved0;
    uint16_t    reserved1;
} mtd_global_settings_t;

/*------------------------------------------------------------------------------
 * mtd_abps_trim_t
 *------------------------------------------------------------------------------
 * The following data structure is used to store ABPS trimming information.
 */
typedef struct __mtd_abps_trim_t
{
    uint8_t dacdec;
    uint8_t negtrim_per4_per3b_gtdec;
} mtd_abps_trim_t;


/*------------------------------------------------------------------------------
 * mtd_calibration_mc_t
 *------------------------------------------------------------------------------
 * The following data structure is used to store M and C calibration
 * coefficients.
 */
typedef struct __mtd_calibration_mc_t
{
    uint16_t m;
    uint16_t c;
} mtd_calibration_mc_t;


/*------------------------------------------------------------------------------
 * mtd_data_t
 *------------------------------------------------------------------------------
 * The following data structure is used to hold the full set of manufacturing
 * test data.
 */
typedef struct __mtd_data_t
{
    mtd_global_settings_t   global_settings;
    mtd_abps_trim_t         abps_trimming[NB_OF_QUADS][NB_OF_ABPS_PER_QUAD][NB_OF_ABPS_RANGES];
    uint8_t                 odb_trimming[NB_OF_ANALOG_MODULES][NB_OF_OBD_MODES][NB_OF_CHOPPING_OPTIONS];
    mtd_calibration_mc_t    abps_calibration[NB_OF_QUADS][NB_OF_ABPS_PER_QUAD][NB_OF_ABPS_RANGES];
    mtd_calibration_mc_t    obd_calibration[NB_OF_ANALOG_MODULES][NB_OF_OBD_MODES][NB_OF_CHOPPING_OPTIONS];
    mtd_calibration_mc_t    cm_calibration[NB_OF_QUADS];
    mtd_calibration_mc_t    tm_calibration[NB_OF_QUADS];
    mtd_calibration_mc_t    quads_direct_input_cal[NB_OF_QUADS][2];
    mtd_calibration_mc_t    adc_direct_input_cal[NB_OF_ANALOG_MODULES][NB_OF_DIRECT_INPUTS_PER_ADC];
    uint16_t                comparators_offsets[NB_OF_QUADS];
    uint32_t                ccc_delays_cal;
} mtd_data_t;

#ifdef __cplusplus
}
#endif

#endif
