Maintenance.c 4.55 KB
Newer Older
hu's avatar
hu committed
1 2 3 4 5 6 7
#include "Maintenance.h"

/*** 保养里程 ***/
uint32_t DataServiceInterval = 0xFFFFu;

#pragma ghs section bss=".myNonInitArea"

hu's avatar
hu committed
8
uint32_t NVM_USER_SETTINGS_SERVICE ;
hu's avatar
hu committed
9 10 11 12 13 14 15 16 17 18 19 20 21 22
uint32_t MainTimer ;                /*****100ms累加器****/
#pragma ghs section bss=default

MaintenanceStruct MaintenanceTime;


/******************************************************************************
函数名:Data_ODO_Service_KL30_Init
功  能: 首次上电初始化
参  数: 无
返回值:无
******************************************************************************/
void Data_Maintenance_Service_KL30_Init(void)
{
hu's avatar
hu committed
23 24 25 26 27 28 29 30 31 32 33 34
    uint32_t TempBuf[1] = {0};
    if (EEPROM_Get_Block_Status(EEPROM_BLOCK_SERVICE_INFO) == EEPROM_STAT_BLANK)
    {
        NVM_USER_SETTINGS_SERVICE = 50000u;
        TempBuf[0] = NVM_USER_SETTINGS_SERVICE;
        Data_User_EEPROM_Write(EEPROM_BLOCK_SERVICE_INFO, TempBuf, 1);
    }
    else
    {
        Data_User_EEPROM_Read(EEPROM_BLOCK_SERVICE_INFO, TempBuf, 1);
        NVM_USER_SETTINGS_SERVICE = TempBuf[0];
    }
hu's avatar
hu committed
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64

    /*保养里程*/
    DataServiceInterval = 0xFFFFu;
    /*保养时间*/
    uint32_t MainTimer = 0u;
}

/******************************************************************************
函数名:Data_Service_Interval_Processing
功  能: 剩余保养里程处理
参  数: 无
返回值:无
******************************************************************************/

uint32_t Get_Data_Maintenace_Interval_Processing(void)
{
    uint32_t MileageDev;
    uint32_t Servicekm;
    uint32_t ODO_Data;
    ODO_Data = Data_ODO_Read();
    if (Common_Get_IG_Sts() == COMMON_POWER_ON)
    {
        if (ODO_Data >= NVM_USER_SETTINGS_SERVICE)
        {
            Servicekm = 0u;
        }
        else
        {
            MileageDev = NVM_USER_SETTINGS_SERVICE - ODO_Data;
            Servicekm  = (uint32_t)MileageDev;
hu's avatar
hu committed
65
            Servicekm  += 9;
hu's avatar
hu committed
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
            Servicekm /= 10u;
        }
        DataServiceInterval = Servicekm;
    }
    return DataServiceInterval;

}

/******************************************************************************
函数名:Data_Service_Interval_Reset
功  能: 重置保养里程
参  数: 无
返回值:无
******************************************************************************/
void Data_Maintenance_Interval_Reset(uint32_t Maintenance_def)
{
    uint32_t ODO_Data;
    uint32_t TempBuf[1] = {0};
    ODO_Data = Data_ODO_Read();
    NVM_USER_SETTINGS_SERVICE = ODO_Data + Maintenance_def;
hu's avatar
hu committed
86 87
    TempBuf[0] = NVM_USER_SETTINGS_SERVICE;
    Data_User_EEPROM_Write(EEPROM_BLOCK_SERVICE_INFO, TempBuf, 1);
hu's avatar
hu committed
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
    //DataServiceInterval = Maintenance_def;
}

/******************************************************************************
函数名:Data_Service_Time_Procesing
功  能: 剩余保养天数处理
参  数: 无
返回值:无
******************************************************************************/
uint16_t  Get_Calc_Service_Time_Procesing(void)/*ON*/
{
    uint16_t   Maintenance_Day ;
    uint16_t   MainDay;
    uint32_t   second;

    Maintenance_Day = 0u;
    MainDay = 0u;
    second = 0u;

    second = MaintenanceTime.u32second - MaintenanceTime.u32Lastsecond;

    Maintenance_Day = (uint16_t)(MainTimer / 864000u);
    Maintenance_Day = Maintenance_Day + (uint16_t)(second / 86400u);
    if (Maintenance_Set_Days <= Maintenance_Day)
    {
        MainDay = 0u;
    }
    else
    {
        MainDay = Maintenance_Set_Days - Maintenance_Day;
    }
    return MainDay;
}
/******************************************************************************
函数名:ON到OFF存储当次的秒数
功  能: 唤醒获取上次的RTC秒数
参  数: 无
返回值:无
******************************************************************************/
void Maintenance_KL15_OFF_Init(void)
{
    MaintenanceTime.u32Lastsecond = Get_RTC_SECOND();
}
/******************************************************************************
函数名:Main_WakeUp_Init
功  能: 唤醒获取上次的RTC秒数
参  数: 无
返回值:无
******************************************************************************/
void Maintenance_WakeUp_Init(void)
{
    MaintenanceTime.u32second = Get_RTC_SECOND();
}

/******************************************************************************
函数名:Data_Service_Time_Reset
功  能: 重置保养时间
参  数: 无
返回值:无
******************************************************************************/
void Data_Service_Time_Reset(void)
{
    /*NVM_Data_Update(NVM_USER_SETTINGS);*/
    //Data_User_EEPROM_Write(EEPROM_BLOCK_SERVICE_INFO, uint32_t u32Data[], uint16_t u16Len)
    MainTimer = 0u;
}