/**

* @file    Gauges.h
* @details Gauges management.
* @author     TYW_YuTian
* @date       2021-2-22
* @version A001
* @par Copyright (c):
*   TIANYOUWEI
* @par History:
*   version: author, date, desc\n

*/
#ifndef _GAUGES_H_
#define _GAUGES_H_

#include "TYW_stdint.h"
/* --- Data  Type Define --- */
/*#define uint8_t unsigned char */
/*#define uint16_t unsigned short//3360 324 */
/*#define uint16_t unsigned int*/ /*Freesecale */
/*#define uint32_t unsigned long*/

/*??Struct*/

#define   GAUGES_TOTAL_NUM  9u
#define   GAUGES_INIT_TIME_MAX  3500u

typedef enum
{
    StepperMotor = 0u,
    MotorGasType,
    MotorTempType,
    LCDGasType,
    LEDOtherType,
    LEDGasType,
    LEDTempType,
    LEDBattery,
    IndicatTypeTOtal,
    FreeMoveType,

} _GaugesType;
/**@struct _GaugesInfoInit
*this is _GaugesInfoInit
*/

typedef struct
{

    uint8_t          SectorNum;
    uint8_t          GaugesType;
    uint16_t         ReferenceDataInUp[20];
    uint16_t         ReferenceDataInDown[20];
    uint16_t         ReferenceDataInOut[20];
    uint16_t         *GaugesDataIn;
    uint16_t         GaugesStartTime;
    uint8_t          GaugesTestFlag;

} _GaugesInfoInit;

extern uint16_t  DestPostion[GAUGES_TOTAL_NUM];
extern uint8_t  QuerySector(_GaugesInfoInit *GParam, uint8_t  DirecSignPara, uint8_t SubAscf, uint16_t  FunGaugesDataIn);
extern uint16_t GetGaugestargetPosSub( _GaugesInfoInit *GParam, uint8_t SubAscf, uint8_t SectorID, uint8_t DirecSignPara, uint16_t FunGaugesDataIn );
extern uint16_t GetGaugestargetPos( _GaugesInfoInit *GParam, uint8_t  DirecSignPara);
extern void GaugesForwardParaManage( _GaugesInfoInit *GParam, uint8_t DirecSignPara );
extern void GaugesInversionParaManage( _GaugesInfoInit *GParam, uint8_t DirecSignPara );
extern void GaugeMoveing(uint8_t GaugesNum);
extern void GetGaugesDisplayMode (uint8_t GaugesNum);
/*外部调用接口*/
/*仪表IGON调用*/
extern void GaugesK15Init_ON(void) ;
/*仪表IGOFF调用*/
extern void GaugesK15Init_OFF(void) ;
/*得到显示步*/
extern uint16_t GetGaugesCurrentPos(uint8_t GaugesNum) ;
/*表头处理函数*/
extern void GaugeSchedule(uint8_t GaugesNum, _GaugesInfoInit *GParam);
/*表头时间函数放在ms定时中*/
extern void Gauges_Time_Xms_Count(uint8_t Xms);
/*得到格的内部小步*/
extern uint16_t GetGaugesCurrentStep(uint8_t GaugesNum);
/*通过车速目标步得到实际车速*/
extern uint16_t GetVehDisVal(uint16_t VehCurPos, _GaugesInfoInit *GParam);
/*设置FreeMoveType模式仪表走动时间*/
extern void SetFreeMoveTimes(uint16_t GaugesMoveTimes);
/*得到上下行方向  返回值：1  2*/
extern uint8_t GetGaugesDirec(uint8_t GaugesNum) ;

extern void SeftTest_GaugeMoveing(uint8_t GaugesNum) ;
#endif