Commit 07819f7b authored by 高士达's avatar 高士达

Merge branch 'lgh_from_dev' into 'dev'

Lgh from dev

See merge request !26
parents bb5bff99 0aecf20c
......@@ -56,7 +56,18 @@ uint8_t Get_BackLight_En(void)
}
else
{
#if(PART_NUMBER == G54_A01)
if ((Get_CAN_Power_State() == PKEY_ON) && (Get_Soc1_Valid() == 1U))
{
return 1;
}
else
{
return 0;
}
#else
return 0;
#endif
}
}
/**
......
......@@ -606,7 +606,7 @@ const st_CANMsgAttribute CAN_CH0_CAN_MSG_CONST_ARRAY[CAN_CH0_ID_TOTAL_MAX] =
500ul,
0x17Aul,
(( void * )0),
(( void * )0),
(CAN_0x17A_Receive),
(( void * )0),
},
{
......
......@@ -667,3 +667,8 @@ void CAN_0x339_Receive(uint8_t CopyData [])
{
g_u8ID339flag = 1U;
}
void CAN_0x17A_Receive(uint8_t CopyData [])
{
g_Msg0x17AFlag = 1U;
}
......@@ -46,5 +46,6 @@ extern void CAN_0x16B_Receive(uint8_t CopyData []);
extern void CAN_0x22F_Receive(uint8_t CopyData []);
extern void CAN_0x170_Receive(uint8_t CopyData []);
extern void CAN_0x339_Receive(uint8_t CopyData []);
extern void CAN_0x17A_Receive(uint8_t CopyData []);
#endif
......@@ -5,6 +5,8 @@
#include "can.h"
#include "RTE.h"
uint16_t EnterDeepSleepCount = 0U;
__align(4)
uint32_t pRXBuff[CAN_RX_MSG_Block * CAN_CH0_ID_TOTAL_MAX];
uint32_t pTXBuff[CAN_TX_MSG_Block * CAN_CH0_ID_SEND_TOTAL];
......@@ -341,6 +343,7 @@ void Can_Tx_Apply_Buff(void)
*/
void Can_Rx_Cak(CanTxRxMsg *Msg)
{
EnterDeepSleepCount = 0U;
Co_Can_Buff_Set(&CAN_CH0_CanMsgOp, Co_Can_ConvertSubID_CAN_CH0(Msg->Id), Msg->DLC, Msg->Data);
if ((Msg->Id == DIAG_ID_Rx_FUN) || (Msg->Id == DIAG_ID_Rx_PHY))
......@@ -348,6 +351,20 @@ void Can_Rx_Cak(CanTxRxMsg *Msg)
DoCAN_L_Data_Indication(Msg->Id, Msg->DLC, Msg->Data);
}
}
/*放到哪个任务中调用,就传入time的值是多少,如:100ms任务中就传入100*/
void CAN_Offline_Count(uint8_t time)
{
if(Get_CAN_Power_State() < KEY_ACC)
{
EnterDeepSleepCount += time;
}
else
{
EnterDeepSleepCount = 0U;
}
}
/**
* @brief CAN库初始化TX/RX
*
......
......@@ -30,7 +30,7 @@ typedef struct
uint8_t RecoverTimer;
} RSCAN0BusoffMonitorStruct;
extern uint16_t EnterDeepSleepCount;
extern void CAN_TX_Init(void);
extern void Can_Tx_Apply_Buff(void);
......@@ -39,6 +39,7 @@ extern void Can_BusOff_Recover(uint8_t deltaTime);
extern void COM_CAN_Init(void);
extern void Can_Init(void);
extern void Can_Rx_Cak(CanTxRxMsg *Msg);
extern void CAN_Offline_Count(uint8_t time);
extern uint8_t COM_APP_Process(st_CAN_Msg *Msg);
extern void Can_Write(st_CAN_Msg *Msg);
......
......@@ -115,6 +115,7 @@ void Common_Input_Para(void)
}
else
{
#if (PART_NUMBER == RMR42E_60)
PowerIgnOnTimeLine = 0ul;
if (PowerIgnOffTimeLine < 0x7ffffffful)
{
......@@ -132,6 +133,18 @@ void Common_Input_Para(void)
Common_Set_IG_Sts(COMMON_POWER_OFF);
Common_Set_IG_Sts_Valid(COMMON_Valid);
#else
if (Get_CAN_Power_State() == KEY_OFF)
{
PowerIgnOnTimeLine = 0ul;
if (PowerIgnOffTimeLine < 0x7ffffffful)
{
PowerIgnOffTimeLine += 2u;
}
}
Common_Set_IG_Sts(COMMON_POWER_OFF);
Common_Set_IG_Sts_Valid(COMMON_Valid);
#endif
}
#endif
......
......@@ -4,6 +4,7 @@
SocStruct_st_t Soc;
uint8_t SOC_Count_Time = 0;
uint8_t g_Msg0x17AFlag = 0U;
uint16_t SocPoweroffTime = 0;
static void Data_Soc_Battery_Level_Service(void);
......@@ -26,6 +27,7 @@ void Data_Soc_KL30_Init(void)
Soc.AllSocValue = 0U;
Soc.AllSocValid = 0U;
SocPoweroffTime = 0U;
g_Msg0x17AFlag = 0U;
}
void Data_Soc_KL15_Init(void)
......@@ -117,16 +119,11 @@ static void Data_Soc_Battery_Level_Service(void)
if (Get_CAN_Power_State() > KEY_OFF)
{
if (CAN_MSG_Status(&CAN_CH0_CanMsgOp, Co_Can_ConvertSubID_CAN_CH0(CAN_CH0_ID_CAN_0x17A_Msg)) == CAN_SIG_NORMAL)
if ((CAN_MSG_Status(&CAN_CH0_CanMsgOp, Co_Can_ConvertSubID_CAN_CH0(CAN_CH0_ID_CAN_0x17A_Msg)) == CAN_SIG_NORMAL) && (g_Msg0x17AFlag == 1U))
{
Soc.Value1 = Get_CAN_CH0_ID_17A_Sig_MBMS_StatSoc();
Soc.Valid1 = 1U;
}
else
{
Soc.Value1 = 0U;
Soc.Valid1 = 0U;
}
if (Soc.Valid1 != 0U)
{
......@@ -376,7 +373,6 @@ static void Data_Soc_DisplayEffect_Service(void)
}
else
{
Soc.Valid1 = 1U;
SocPoweroffTime ++;
}
}
......@@ -384,17 +380,12 @@ static void Data_Soc_DisplayEffect_Service(void)
{
Soc.Valid1 = 0U;
}
else
{
Soc.Valid1 = 1U;
}
}
else
{
if (Get_CAN_Power_State() == KEY_ACC)
{
Soc.Dis_Seg1 = Soc.Act_Seg1;
Soc.Valid1 = 1U;
}
else
{
......@@ -512,19 +503,20 @@ static void Data_Soc_All_Soc_Service(void)
Soc.AllSocValid = 0U;
}
#else
uint8_t MBMSStatSoc = Get_CAN_CH0_ID_17A_Sig_MBMS_StatSoc();
uint8_t VCUChgMode = Get_CAN_CH0_ID_220_Sig_VCU_ChgMode();
if (MBMSStatSoc > 100U)
if ((CAN_MSG_Status(&CAN_CH0_CanMsgOp, Co_Can_ConvertSubID_CAN_CH0(CAN_CH0_ID_CAN_0x17A_Msg)) == CAN_SIG_NORMAL) && (g_Msg0x17AFlag == 1U))
{
MBMSStatSoc = 100u;
Soc.AllSocValue = Get_CAN_CH0_ID_17A_Sig_MBMS_StatSoc();
if (Soc.AllSocValue > 100U)
{
Soc.AllSocValue = 100u;
}
}
if (VCUChgMode == 1U)
{
if (Get_CAN_Power_State() > KEY_OFF)
{
Soc.AllSocValue = MBMSStatSoc;
Soc.AllSocValid = 1U;
}
else
......@@ -542,7 +534,6 @@ static void Data_Soc_All_Soc_Service(void)
}
else
{
Soc.AllSocValue = MBMSStatSoc;
Soc.AllSocValid = 1U;
}
}
......
......@@ -35,6 +35,7 @@ typedef struct //__attribute__((aligned(4)))
}SocStruct_st_t;
extern uint8_t g_Msg0x17AFlag;
extern void Data_Soc_KL30_Init(void);
extern void Data_Soc_KL15_Init(void);
......
......@@ -6,6 +6,8 @@
uint8_t Charge_OFF_Flag = 0;
void Clear_Bu98_Conditions(DoNot_Close_Seg_en_t closeType);
void TYW_Clear_Eeprom_Service(void)
{
#if (PART_NUMBER == RMR42E_60)
......@@ -162,10 +164,88 @@ void Clear_Bu98(void)
}
}
void Clear_Bu98_Conditions(DoNot_Close_Seg_en_t closeType)
{
uint8_t i = 0;
uint8_t transitionData = 0U;
if(closeType == ONLY_TEL)
{
for (i = 0; i < BU98R10_DDRAM_SIZE; i++)
{
if(i == 74U)
{
transitionData = ((BU98R10Chip0DDRAM.Byte[75] >> 4U) & 0xFU);
BU98R10Chip0DDRAM.Byte[75] = ((transitionData << 4U) + 0);
transitionData = 0;
}
else
{
BU98R10Chip0DDRAM.Byte[i] = 0;
}
if(i == 46U)
{
transitionData = ((BU98R10Chip1DDRAM.Byte[46]) & 0xFU);
BU98R10Chip1DDRAM.Byte[46] = transitionData;
transitionData = 0;
}
else
{
BU98R10Chip1DDRAM.Byte[i] = 0;
}
}
}
else if (closeType == TEL_AND_SOC)
{
for (i = 0; i < BU98R10_DDRAM_SIZE; i++)
{
if((i == 26) || (i == 28) || (i == 74U))
{
transitionData = ((BU98R10Chip0DDRAM.Byte[i] >> 4U) & 0xFU);
BU98R10Chip0DDRAM.Byte[i] = ((transitionData << 4U) + 0);
transitionData = 0;
}
else if ((i == 29U) || (i == 30U) || (i == 31U) || (i == 32U) || (i == 33U) || (i == 34U) || (i == 35U) ||
(i == 60U) || (i == 67U) || (i == 68U) ||(i == 71U) || (i == 72U) || (i == 73U))
{
;
}
else
{
BU98R10Chip0DDRAM.Byte[i] = 0;
}
if(i == 46U)
{
transitionData = ((BU98R10Chip1DDRAM.Byte[46]) & 0xFU);
BU98R10Chip1DDRAM.Byte[46] = transitionData;
transitionData = 0;
}
else
{
BU98R10Chip1DDRAM.Byte[i] = 0;
}
}
}
else
{
for (i = 0; i < BU98R10_DDRAM_SIZE; i++)
{
BU98R10Chip0DDRAM.Byte[i] = 0;
BU98R10Chip1DDRAM.Byte[i] = 0;
}
}
}
void Gauge_Service(void)
{
uint8_t i = 0;
#if(PART_NUMBER == G54_A01)
if ((Common_Get_IG_Sts() == COMMON_POWER_ON) && (Get_CAN_Power_State() == KEY_ACC))
#else
if (Common_Get_IG_Sts() == COMMON_POWER_ON)
#endif
{
if ((Get_CAN_Power_State() != PKEY_ON) && (Get_CAN_Power_State() != KEY_OFF) && (Get_CAN_Power_State() != POWER_CHECK_NULL))
{
......@@ -226,12 +306,47 @@ void Gauge_Service(void)
}
else
{
#if(PART_NUMBER == G54_A01)
if(Get_CAN_Power_State() == PKEY_ON)
{
if ((Get_CAN_Power_State() == PKEY_ON) && (Get_Soc1_Valid() == 1U))
{
Gauge_Power_SOC_pull_Display();
Gauge_EleDial_AllSOC_Display();
Clear_Bu98_Conditions(TEL_AND_SOC);
}
else
{
Clear_Bu98_Conditions(ONLY_TEL);
}
for (i = 0; i < LampCh0_MAX; i++)
{
if ((i == LampCh0_08_Battery_Charging_W) || (i == LampCh0_32_Charging_Connection_R))
{
;
}
else
{
LED_Driver_Channel_Set(LampChannel_0, i, LED_OFF);
}
}
}
else
{
Clear_Bu98();
for (i = 0; i < LampCh0_MAX; i++)
{
LED_Driver_Channel_Set(LampChannel_0, i, LED_OFF);
}
}
#else
Clear_Bu98();
interact_PWM_Low_Duty = 100;
for (i = 0; i < LampCh0_MAX; i++)
{
LED_Driver_Channel_Set(LampChannel_0, i, LED_OFF);
}
#endif
}
}
......
......@@ -5,6 +5,13 @@
#define EEPROM_BLOCK_00 0
typedef enum
{
ONLY_TEL, /*只保持充电中指示灯和充电线不连接指示灯不关闭*/
TEL_AND_SOC, /*保持充电中指示灯和充电线不连接指示灯以及电量表和总电量值显示不关闭*/
}DoNot_Close_Seg_en_t;
typedef struct
{
uint16_t value;
......
......@@ -663,7 +663,7 @@ _Fun_Res SEG_SET_EleDial_1SOC(uint8_t m_Flag, uint8_t m_SEG)
#if (PART_NUMBER == RMR42E_60)
if (((m_Flag == 1u) && (CAN_MSG_Status(&CAN_CH0_CanMsgOp, Co_Can_ConvertSubID_CAN_CH0(CAN_CH0_ID_CAN_0x18200A20_Msg)) == CAN_SIG_NORMAL)) || (checkself_seg_Flag == 1))
#else
if (((m_Flag == 1u) && (CAN_MSG_Status(&CAN_CH0_CanMsgOp, Co_Can_ConvertSubID_CAN_CH0(CAN_CH0_ID_CAN_0x17A_Msg)) == CAN_SIG_NORMAL)) || (checkself_seg_Flag == 1))
if ((m_Flag == 1u) || (checkself_seg_Flag == 1))
#endif
{
IC1_SEG136 = IC_SEG_GREY;
......
......@@ -71,7 +71,7 @@ static void Power_KL30_Init(void)
g_stRTCInformation.u8RTCMonth = 1;
g_stRTCInformation.u8RTCYear = 20;
RTE_RTC_Init(g_stRTCInformation);
RTE_DEEPSLEEP_GPIO_Interrupt_Enable(KL15_AD_IN,Trigger_Rising);
// RTE_DEEPSLEEP_GPIO_Interrupt_Enable(KL15_AD_IN,Trigger_Rising);
Data_Soc_KL30_Init();
Data_Time_KL30_Init();
Data_Gear_KL30_Init();
......@@ -84,6 +84,7 @@ extern uint32_t PowerIgnOffTimeLine;
static void Power_Wakeup_Init(void)
{
PowerIgnOffTimeLine = 0;
g_u8CanrxSleepstate = 0U;
Simulated_IIC_2_Init();
Gpio_Init(Gpio_WakeUp_Init);
Can_Init();
......@@ -100,7 +101,7 @@ static void Power_Wakeup_Init(void)
TimerM_PWM_CH_Output_init(TIMERM_COUNTER0, TIMERM_CHD, ActiveLevel_High);
TimerM_PWM_CH_Output_init(TIMERM_COUNTER1, TIMERM_CHB, ActiveLevel_High);
Telltales_Init();
RTE_DEEPSLEEP_GPIO_Interrupt_Enable(KL15_AD_IN,Trigger_Rising);
// RTE_DEEPSLEEP_GPIO_Interrupt_Enable(KL15_AD_IN,Trigger_Rising);
}
static void Power_LVP_Init(void)
......@@ -125,6 +126,7 @@ static void Power_IG_ON_Init(void)
LED_Driver_Service_Immediate();
Fault_Code_KL15_Init();
Data_Time_KL15_Init();
Data_Soc_KL15_Init();
}
static void Power_Sleep_Init(void)
......@@ -145,7 +147,9 @@ static void Power_Sleep_Init(void)
LED_Driver_Init_Sleep();
LED_Driver_Service();
Analog_Signal_Conv_Stop();
RTE_DEEPSLEEP_Enable();
// RTE_DEEPSLEEP_Enable();
RTE_DEEPSLEEP_GPIO_Interrupt_Enable(CAN_MCU_RXD,Trigger_Falling);
g_u8CanrxSleepstate = 0U;
}
static Power_Status_em Power_Stay_ON(void)
......@@ -169,8 +173,8 @@ static Power_Status_em Power_Stay_OFF(void)
{
Power_Status_em u8PowerSts;
u8PowerSts = EM_IGN_OFF;
if (SYS_OPR_STAT_IGN_ON)
#if (PART_NUMBER == RMR42E_60)
if (Common_Get_IG_Sts( ) == COMMON_POWER_ON)
{
u8PowerSts = EM_IGN_ON_Init;
}
......@@ -185,7 +189,38 @@ static Power_Status_em Power_Stay_OFF(void)
// u8PowerSts = EM_IGN_Sleep_Init;
// }
}
#else
if (Get_CAN_Power_State() == KEY_ACC)
{
u8PowerSts = EM_IGN_ON_Init;
}
else
{
if (Get_CAN_Power_State() == PKEY_ON)
{
if (EnterDeepSleepCount >= 5000)
{
u8PowerSts = EM_IGN_Sleep_Init;
}
else
{
u8PowerSts = EM_IGN_OFF;
}
}
else
{
if ((Common_GetIgnOffTime() < 5000))
{
u8PowerSts = EM_IGN_OFF;
}
else
{
u8PowerSts = EM_IGN_Sleep_Init;
}
}
}
#endif
return u8PowerSts;
}
......@@ -261,7 +296,7 @@ static Power_Status_em Power_Stay_Protect(void)
static Power_Status_em Power_Stay_Sleep(void)
{
Power_Status_em u8PowerSts = EM_IGN_Sleep;
#if (PART_NUMBER == RMR42E_60)
while (1)
{
RTE_WDT_Clear();
......@@ -271,7 +306,22 @@ static Power_Status_em Power_Stay_Sleep(void)
break;
}
}
#else
while (1)
{
RTE_WDT_Clear();
if ((Get_CAN_Power_State() == PKEY_ON) && (g_u8CanrxSleepstate == 1U))/*当电源状态出于PKEY_ON,且接到CAN信号时,才能触发唤醒*/
{
u8PowerSts = EM_IGN_Wakeup;
g_u8CanrxSleepstate = 0U;
break;
}
else
{
RTE_DEEPSLEEP_Enable();
}
}
#endif
return u8PowerSts;
}
......
......@@ -102,7 +102,7 @@ const LED_Attribute_st LED_Attribute[LED_Max] =
{em_LED_READY_G, NoSelfCheck, ExterNalCheck, LED_IGN_ON, 0u, 3000ul, LED_READY_Judgement, LED_READY_Execution },
{em_LED_Seat_Detection_W, NoSelfCheck, ExterNalCheck, LED_IGN_ON, 0u, 3000ul, LED_Seat_Detection_Judgement, LED_Seat_Detection_Execution },
{em_LED_Key_Access_W, NoSelfCheck, ExterNalCheck, LED_IGN_ON, 0u, 3000ul, LED_Key_Access_Judgement, LED_Key_Access_Execution },
{em_LED_Battery_Charging_W, NoSelfCheck, ExterNalCheck, LED_IGN_ON, 0u, 3000ul, LED_Battery_Charging_Judgement, LED_Battery_Charging_Execution },
{em_LED_Battery_Charging_W, NoSelfCheck, ExterNalCheck, LED_IGN_ON_OFF, 0u, 3000ul, LED_Battery_Charging_Judgement, LED_Battery_Charging_Execution },
{em_LED_Cutterhead_Switch_W, NoSelfCheck, ExterNalCheck, LED_IGN_ON, 0u, 3000ul, LED_Cutterhead_Switch_Judgement, LED_Cutterhead_Switch_Execution },
{em_LED_GEAR_W, NoSelfCheck, ExterNalCheck, LED_IGN_ON, 0u, 3000ul, LED_GEAR_Judgement, LED_GEAR_Execution },
{em_LED_External_Discharge_W, NoSelfCheck, ExterNalCheck, LED_IGN_ON, 0u, 3000ul, LED_External_Discharge_Judgement, LED_External_Discharge_Execution },
......@@ -118,7 +118,7 @@ const LED_Attribute_st LED_Attribute[LED_Max] =
{em_LED_System_Indicator_R, NoSelfCheck, ExterNalCheck, LED_IGN_ON, 0u, 3000ul, LED_SystIndicator_R_Judgement, LED_SystIndicator_R_Execution },
{em_LED_P_GEAR_G, NoSelfCheck, ExterNalCheck, LED_IGN_ON, 0u, 3000ul, LED_P_GEAR_G_Judgement, LED_P_GEAR_G_Execution },
{em_LED_Fuel_Alarm_W, NoSelfCheck, ExterNalCheck, LED_IGN_ON, 0u, 3000ul, LED_Fuel_Alarm_W_Judgement, LED_Fuel_Alarm_W_Execution },
{em_LED_Charging_Connection_R, NoSelfCheck, ExterNalCheck, LED_IGN_ON, 0u, 3000ul, LED_Charging_Connection_R_Judgement, LED_Charging_Connection_R_Execution },
{em_LED_Charging_Connection_R, NoSelfCheck, ExterNalCheck, LED_IGN_ON_OFF, 0u, 3000ul, LED_Charging_Connection_R_Judgement, LED_Charging_Connection_R_Execution },
{em_LED_Power_Battery_Failure_R, NoSelfCheck, ExterNalCheck, LED_IGN_ON, 0u, 3000ul, LED_Power_Battery_Failure_R_Judgement, LED_Power_Battery_Failure_R_Execution },
};
......@@ -978,26 +978,28 @@ static void LED_Working_Hours_One_Execution(Tellib_uint16_t led_status)
static Tellib_uint16_t LED_Fault_Codes_Judgement(void)
{
Tellib_uint16_t LED_STATE = 0u;
// if (Line_In_Get_Status(LINE_IN_HighBeam))
// {
// LED_STATE = 1;
// }
// else
// {
// LED_STATE = 0;
// }
#if (PART_NUMBER == G54_A01)
if (Get_FaultCode_Valid() == 1U)
{
LED_STATE = 1U;
}
else
{
LED_STATE = 0U;
}
#endif
return LED_STATE;
}
static void LED_Fault_Codes_Execution(Tellib_uint16_t led_status)
{
if (led_status == 1u)
{
// LED_Driver_Channel_Set(LampChannel_0, LampCh0_07_Key_ISTOP, LED_ON);
LED_Driver_Channel_Set(LampChannel_0, LampCh0_19_Fault_Codes_W, LED_ON);
// SEG_SET_LED_STS(1,1);
}
else
{
// LED_Driver_Channel_Set(LampChannel_0, LampCh0_07_Key_ISTOP, LED_OFF);
LED_Driver_Channel_Set(LampChannel_0, LampCh0_19_Fault_Codes_W, LED_OFF);
// SEG_SET_LED_STS(1,0);
}
}
......
......@@ -177,10 +177,13 @@ void DEEPSLEEP_EXTI0_IRQHandler(void *msg)
* @warning None
* @since 1.0.0
*/
unsigned char g_u8CanrxSleepstate = 0U;
void DEEPSLEEP_EXTI1_IRQHandler(void *msg)
{
/* ����жϱ�־ */
INTC_ClearPendingIRQ(INTP1_IRQn);
g_u8CanrxSleepstate = 1U;
}
/**
......
......@@ -5,6 +5,7 @@
#include "gpio.h"
#include "intp.h"
extern unsigned char g_u8CanrxSleepstate;
extern void RTE_DEEPSLEEP_GPIO_Interrupt_Enable(uint16_t u16Pin, Trigger_TypeDef EXTI_Trigger);
extern void RTE_DEEPSLEEP_Enable(void);
......
......@@ -36,6 +36,7 @@ void Sys_10ms_Tasks(void)
Data_CumulativeWorkHours_EEPROM_Write();
BackLight_Service();
Fault_Code_Service();
CAN_Offline_Count(10U);
}
void Sys_20ms_Tasks(void)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment