#ifndef __AVAC_DATA_H__
#define __AVAC_DATA_H__
//*****************************************************************************
// (C) Automotive Lighting Reutlingen GmbH
// Tuebinger Strasse 123, 72762 Reutlingen, Germany
//
// Automotive Lighting Reutlingen GmbH owns all the rights to this work.
// This work shall not be copied, reproduced, used, modified, transferred
// or its information shall not be disclosed without the prior written
// authorization of Automotive Lighting Reutlingen GmbH.
//*****************************************************************************
//-----------------------------------------------------------------------------
/// \file AvacData.h
///
/// \brief
///
/// \descr
///
/// Additional information can be found in the design description (Link:
/// MDDD)
///
/// \author Alf Traulsen (taf2rt)
/// mailTo:alf.traulsen@al-lighting.com
//-----------------------------------------------------------------------------
#include "Std_Types.h"
//#include "Nvm.h"
#include
#include
#include "Nvm_Para_Avac.h"
#define LEVELING_SENSER_OFFSET (-127) /* accoding to DBC,SigPrep_LevelingInfo offset is -127*/
//The parameter has a negative value, and only unsigned can be stored in Cod, so the read value needs an offset
#define UINT8_TO_SINT8 128u
typedef uint8 tieSigQty0;
// pitch angle
typedef struct
{
sint16 Angle; ///< [1/10 mrad] front side up --> positive value
sint16 HeightErr; ///< [1/10 mrad] headlights up --> positive value
tieSigQty0 eSigQty; ///< Signal Quality.
} tPitchCan;
typedef struct
{
sint16 Speed; ///< [1/10 km/h] forward --> positive value
sint16 Acceleration; ///< [1/10 m/s^2] acceleration --> positive value
boolean AccStatusX;
tieSigQty0 eSigQty;
} tSpeedMsg;
// ----------------------------------------------------------------------------
// Variables
// ----------------------------------------------------------------------------
//extern const tNvmPara_CodingArea* AvacData_pCodingArea;
extern boolean AvacData_boCodingValid;
extern boolean AvacData_boPitchConfigValid;
extern uint8 AvacData_ucFilterStatic;
extern uint8 AvacData_ucGradientLimiterUp;
extern uint8 AvacData_ucGradientLimiterDown;
extern const tRomPara_AvacAlgoDynCfg* CodBlockDavacPara;
extern const tRomPara_AvacAlgoGenCfg* CodBlockAvacGenGfg;
// ----------------------------------------------------------------------------
// Function prototypes
// ----------------------------------------------------------------------------
#if 0u
void AvacData_ParaFct0(const tParaFct0_Cmd eCmd, const tNvmPara_CodingArea* const pData);
#endif
void AvacData_Init(void);
boolean AvacData_GetLowBeamOn(void);
boolean AvacData_GetAvacD_Ok(void);
boolean AvacData_GetAvacD_En(void);
boolean AvacData_GetAvacS_Ok(void);
boolean AvacData_GetAvacS_En(void);
void AvacData_ReadPitch(tAvac_Pitch* pPitch);
void AvacData_ReadSpeed(tAvac_Speed* pSpeed);
void AvacData_ReadAccelPreDetect(tAvac_AccelPreDetect* pAccelPreDetect);
void AvacData_ReadBrakePreDetect(tAvac_BrakePreDetect* pBrakePreDetect);
void Avac_GetInput(void);
void AvacData_WriteAvacOut(const tAvac_Out* pAvacOut);
void UaApplSensorCali(uint8 fl, uint8 fr, uint8 rl, uint8 rr);
// ----------------------------------------------------------------------------
// AvacCodingData
// ----------------------------------------------------------------------------
INLINE boolean AvacData_GetCodingValid(void) {return AvacData_boCodingValid;}
INLINE boolean AvacData_GetPitchConfigValid(void) {return AvacData_boPitchConfigValid;}
INLINE uint8 Cod_AvacFilterUpMax(void) { return CodBlockDavacPara->FilterUpMax; }
INLINE uint8 Cod_AvacFilterUpMid(void) { return CodBlockDavacPara->FilterUpMid; }
INLINE uint8 Cod_AvacFilterUpMin(void) { return CodBlockDavacPara->FilterUpMin; }
INLINE uint8 Cod_AvacFilterDownMax(void) { return CodBlockDavacPara->FilterDownMax; }
INLINE uint8 Cod_AvacFilterDownMid(void) { return CodBlockDavacPara->FilterDownMid; }
INLINE uint8 Cod_AvacFilterDownMin(void) { return CodBlockDavacPara->FilterDownMin; }
INLINE uint8 Cod_AvacBadStreetTolerance() { return CodBlockDavacPara->BadStreetTolerance; }
INLINE uint8 Cod_AvacHighDynamicLimit() { return CodBlockDavacPara->HighDynamicLimit; }
INLINE sint8 Cod_AvacAccelPreDetectThresholdUp(void) { return (sint8)(CodBlockDavacPara->AccelPreDetectThresholdUp - UINT8_TO_SINT8); }
INLINE sint8 Cod_AvacAccelPreDetectThresholdDown(void) { return (sint8)(CodBlockDavacPara->AccelPreDetectThresholdDown - UINT8_TO_SINT8); }
INLINE sint8 Cod_AvacBrakePreDetectThresholdUp(void) { return (sint8)(CodBlockDavacPara->BrakePreDetectThresholdUp - UINT8_TO_SINT8); }
INLINE sint8 Cod_AvacBrakePreDetectThresholdDown(void) { return (sint8)(CodBlockDavacPara->BrakePreDetectThresholdDown - UINT8_TO_SINT8); }
INLINE uint8 Cod_AvacFilterStatic(void) { return AvacData_ucFilterStatic; }
INLINE uint8 Cod_AvacGradientLimiterUp(void) { return AvacData_ucGradientLimiterUp; }
INLINE uint8 Cod_AvacGradietnLimiterDown(void) { return AvacData_ucGradientLimiterDown; }
INLINE uint8 Cod_AvacAngleMinChange(void) { return CodBlockAvacGenGfg->AngleMinChange; } // [(1/10) mrad]
INLINE uint8 Cod_AvacAngleRemainingError(void) { return CodBlockAvacGenGfg->AngleRemainingError; } // [(1/10) mrad]
INLINE uint8 Cod_AvacAngleMinChangeZero(void) { return CodBlockAvacGenGfg->AngleMinChangeZero; } // [(1/10) mrad]
INLINE uint8 Cod_AvacAngleRemainingErrorZero(void) { return CodBlockAvacGenGfg->AngleRemainingErrorZero; } // [(1/10) mrad]
INLINE uint16 Cod_AvacOutputAngleMax(void) { return CodBlockAvacGenGfg->OutputAngleMax; } // [(1/10) mrad] 5 degree max. regulation output (dyn + stat)
#endif // __AVAC_DATA_H__