Commit 16c637fa authored by 崔立宝's avatar 崔立宝

变更项4,增加LDWS指示灯及声音

parent e6a39d2e
......@@ -78,6 +78,8 @@ uint8_t PositionLightSts;
uint8_t DriveDoorSts;
uint8_t PsngrDoorSts;
extern SoundPlayCtrlStruct SoundPlayCtrl;
void Telltales_Management(void)
{
uint8_t Edge;
......@@ -1660,9 +1662,9 @@ void Telltales_Management(void)
TelltaleLCDFlag.Sig.LCD10 = 0;
#endif
if ((AEBS_AdvancedEmergencyBrakingSysState != 0xE) && (AEBS_AdvancedEmergencyBrakingSysState != 0x2))
if ((AEBS_AdvancedEmergencyBrakingSysState != 0xE) /*&& (AEBS_AdvancedEmergencyBrakingSysState != 0x2)*/)
{
if ((AEBS_CollisionWarningLevel == 0x1) || (AEBS_CollisionWarningLevel == 0x4))
if (((AEBS_CollisionWarningLevel == 0x1) || (AEBS_CollisionWarningLevel == 0x4)) && (AEBS_AdvancedEmergencyBrakingSysState != 0x2))
{
Sound_Request(SND_AEB_2Hz, 1);
Sound_Delete(SND_AEB_4Hz);
......@@ -1694,6 +1696,40 @@ void Telltales_Management(void)
Sound_Delete(SND_AEB_8Hz);
}
if (((FLI1_STATUS & CAN_MSG_LOST) && (FLI2_STATUS & CAN_MSG_LOST)) ||\
(AEBS_LaneDepartureWarningSystemState == 0xE) ||\
((AEBS_LaneDepartureWarningSystemState == 0x0) && ((FLI2_STATUS & CAN_MSG_LOST) == 0)))
{
if (SoundPlayCtrl.Playing == SND_LDW_4Hz)
{
if (SoundPlayCtrl.Cycle < 9)
Sound_Delete(SND_LDW_4Hz);
}
else
{
Sound_Delete(SND_LDW_4Hz);
}
}
else
{
if ((AEBS_LaneDepartureImminentRight == 0x1) || (AEBS_LaneDepartureImminentLeft == 0x1))
{
Sound_Request(SND_LDW_4Hz, 1);
}
else
{
if (SoundPlayCtrl.Playing == SND_LDW_4Hz)
{
if (SoundPlayCtrl.Cycle < 9)
Sound_Delete(SND_LDW_4Hz);
}
else
{
Sound_Delete(SND_LDW_4Hz);
}
}
}
//小锟斤拷 KL15锟斤拷KL30 48
if (PositionLightSts == 1)
TelltaleLCDFlag.Sig.LCD11 = 1;
......
......@@ -4,7 +4,7 @@
#include "Sound_Source.h"
#define SND_TOTAL_NUMBER 34
#define SND_TOTAL_NUMBER 35
/******************************************************************************
声音列表
......@@ -45,6 +45,7 @@ enum SoundName
SND_CNG_GasLeak ,
SND_AEB_4Hz ,
SND_AEB_8Hz ,
SND_LDW_4Hz ,
};
/******************************************************************************
......@@ -110,6 +111,7 @@ static const SoundAttributeStruct SoundList[] =
{ /* SND_CNG_GasLeak 31*/ SND_SRC_CNG_GasLeak , SND_TYPE_NORMAL,},
{ /* SND_AEB_4Hz 32*/ SND_SRC_AEB_4Hz , SND_TYPE_NORMAL,},
{ /* SND_AEB_8Hz 33*/ SND_SRC_AEB_8Hz , SND_TYPE_NORMAL,},
{ /* SND_LDW_4Hz 34*/ SND_SRC_LDW_4Hz , SND_TYPE_NORMAL,},
/*====================================================================================*/
};
......
......@@ -724,6 +724,7 @@ void Gauges_GAS2_LCD_Status(void)
uint8_t Overspeed_RVM = 0;
uint8_t AutoHold_HillHold = 0;
uint8_t Maintain_LDWS = 0;
void Telltale_LCD_Display(void)
{
......@@ -944,14 +945,90 @@ void Telltale_LCD_Display(void)
TFT_LCD_Display_Sprite(LAYER_LED20, SN_zhishideng_21_png, 130, 227, 64);
else
TFT_LCD_Clear_Layer(LAYER_LED20);
//保养指示灯(按里程)47
if (TelltaleLCDFlag.Sig.LCD21 == 1)
//保养指示灯(按里程)47 及 LDWS
if ((TelltaleLCDFlag.Sig.LCD21 == 0x1) &&
(((FLI1_STATUS & CAN_MSG_LOST) && (FLI2_STATUS & CAN_MSG_LOST)) ||
(AEBS_LaneDepartureImminentRight == 0x1) ||
(AEBS_LaneDepartureImminentLeft == 0x1) ||
(AEBS_LaneDepartureWarningSystemState == 0xE) ||
(AEBS_LaneDepartureWarningSystemState == 0x2) ||
((AEBS_LaneDepartureWarningSystemState == 0x0) && ((FLI2_STATUS & CAN_MSG_LOST) == 0))))
{
/* 同时报警 */
if (Maintain_LDWS <= 40) //4s
{
Maintain_LDWS ++;
}
else
{
Maintain_LDWS = 0;
}
if (Maintain_LDWS <= 20)
{
TFT_LCD_Display_Sprite(LAYER_LED21, SN_zhishideng_22_png, 130, 266, 64);
}
else
{
if (((FLI1_STATUS & CAN_MSG_LOST) && (FLI2_STATUS & CAN_MSG_LOST)) ||\
(AEBS_LaneDepartureWarningSystemState == 0xE) ||\
((AEBS_LaneDepartureWarningSystemState == 0x0) && ((FLI2_STATUS & CAN_MSG_LOST) == 0)))
{
TFT_LCD_Display_Sprite(LAYER_LED21, SN_zz_Road_Red_x132_y266_png, 132, 266, 64); //红色
}
else if (AEBS_LaneDepartureImminentLeft == 0x1)
{
TFT_LCD_Display_Sprite(LAYER_LED21, SN_zz_Road_L_x132y266_png, 132, 266, 64);
}
else if (AEBS_LaneDepartureImminentRight == 0x1)
{
TFT_LCD_Display_Sprite(LAYER_LED21, SN_zz_Road_R_x132y266_png, 132, 266, 64);
}
else
{
TFT_LCD_Display_Sprite(LAYER_LED21, SN_zz_Road_Yellow_x132_y266_png, 132, 266, 64); //黄色
}
}
}
else if (TelltaleLCDFlag.Sig.LCD21 == 1)
{
Maintain_LDWS = 0;
TFT_LCD_Display_Sprite(LAYER_LED21, SN_zhishideng_22_png, 130, 266, 64);
else
}
else if (((FLI1_STATUS & CAN_MSG_LOST) && (FLI2_STATUS & CAN_MSG_LOST)) ||
(AEBS_LaneDepartureImminentRight == 0x1) ||
(AEBS_LaneDepartureImminentLeft == 0x1) ||
(AEBS_LaneDepartureWarningSystemState == 0xE) ||
(AEBS_LaneDepartureWarningSystemState == 0x2) ||
((AEBS_LaneDepartureWarningSystemState == 0x0) && ((FLI2_STATUS & CAN_MSG_LOST) == 0)))
{
Maintain_LDWS = 0;
if (((FLI1_STATUS & CAN_MSG_LOST) && (FLI2_STATUS & CAN_MSG_LOST)) ||\
(AEBS_LaneDepartureWarningSystemState == 0xE) ||\
((AEBS_LaneDepartureWarningSystemState == 0x0) && ((FLI2_STATUS & CAN_MSG_LOST) == 0)))
{
TFT_LCD_Display_Sprite(LAYER_LED21, SN_zz_Road_Red_x132_y266_png, 132, 266, 64); //红色
}
else if (AEBS_LaneDepartureImminentLeft == 0x1)
{
TFT_LCD_Display_Sprite(LAYER_LED21, SN_zz_Road_L_x132y266_png, 132, 266, 64);
}
else if (AEBS_LaneDepartureImminentRight == 0x1)
{
TFT_LCD_Display_Sprite(LAYER_LED21, SN_zz_Road_R_x132y266_png, 132, 266, 64);
}
else
{
TFT_LCD_Display_Sprite(LAYER_LED21, SN_zz_Road_Yellow_x132_y266_png, 132, 266, 64); //黄色
}
}
else
{
Maintain_LDWS = 0;
TFT_LCD_Clear_Layer(LAYER_LED21);
}
//Auto hold 指示灯绿色 20 && HAS
//Auto hold 指示灯绿色 20 HAS
if (((AutoHold == 6) || (AutoHold == 5)) && ((ESC_HillHolderMode == 0x2) || (ESC_HillHolderMode == 0x1)))
{
/* 同时报警 */
......
......@@ -43,6 +43,7 @@
#define SND_SRC_CNG_GasLeak 0x1F //
#define SND_SRC_AEB_4Hz 0x20 //AEBS报警4Hz
#define SND_SRC_AEB_8Hz 0x21 //AEBS报警8Hz
#define SND_SRC_LDW_4Hz 0x22 //LDWS报警4Hz
/******************************************************************************
伪音源名称列表
......@@ -115,6 +116,7 @@ static const SndAttributeStruct SndAttributeTable[] =
{/* SND_SRC_CNG_GasLeak 32 */ 0x01, 0, SND_CYCLE_NONSTOP, SND_MODE_SINGLE , 1000,},
{/* SND_SRC_AEB_4Hz 33 */ 0x0D, 0, SND_CYCLE_NONSTOP, SND_MODE_SINGLE , 250,},
{/* SND_SRC_AEB_8Hz 34 */ 0x0E, 0, SND_CYCLE_NONSTOP, SND_MODE_SINGLE , 125,},
{/* SND_SRC_AEB_4Hz 35 */ 0x0D, 0, 12, SND_MODE_SINGLE , 250,},
/*==============================================================================================*/
};
......
......@@ -2,7 +2,7 @@
Map Data
Filename : mapData.h
Format Ver : 1.1.0.27
Date : 2025/10/24 13:01:13 +08:00
Date : 2025/11/11 19:47:34 +08:00
*******************************/
#ifndef _MAPDATA_H_
......@@ -41,10 +41,10 @@ typedef struct
} T_VC1H_PALETTEDATA; /*--------------------------*/
#define ROMDATA_STARTADDR (0x00000000)
#define ROMDATA_ENDADDR (0x00B7BA97)
#define ROMDATA_CHECKSUM (0x26A2)
#define ROMDATA_ENDADDR (0x00B7D31F)
#define ROMDATA_CHECKSUM (0xFBE9)
#define PATTERN_DATA_NUMBER (628)
#define PATTERN_DATA_NUMBER (635)
enum SpriteName
{
......@@ -673,9 +673,16 @@ enum SpriteName
SN_zz_CarPeopleY_x451y17_png, /* zz_CarPeopleY_x451y17.png - S623 */
SN_zz_HSA_x132y304_png, /* zz_HSA_x132y304.png - S624 */
SN_zz_Road_L_x132y266_png, /* zz_Road_L_x132y266.png - S625 */
SN_zz_Road_M_x132y266_png, /* zz_Road_M_x132y266.png - S626 */
SN_zz_Road_R_x132y266_png, /* zz_Road_R_x132y266.png - S627 */
SN_zz_zhishideng_10_png /* zz_zhishideng_10.png - S628 */
SN_zz_Road_LY_x132y266_png, /* zz_Road_LY_x132y266.png - S626 */
SN_zz_Road_M_x132y266_png, /* zz_Road_M_x132y266.png - S627 */
SN_zz_Road_R_x132y266_png, /* zz_Road_R_x132y266.png - S628 */
SN_zz_Road_Red_x132_y266_png, /* zz_Road_Red_x132_y266.png - S629 */
SN_zz_Road_RY_x132y266_png, /* zz_Road_RY_x132y266.png - S630 */
SN_zz_Road_Yellow_x132_y266_png, /* zz_Road_Yellow_x132_y266.png - S631 */
SN_zz_zhishideng_10_png, /* zz_zhishideng_10.png - S632 */
SN_zz_zhishideng_31X592Y230_png, /* zz_zhishideng_31X592Y230.png - S633 */
SN_zz_zhishideng_32X123Y190_png, /* zz_zhishideng_32X123Y190.png - S634 */
SN_zz_zhishideng_32X592Y190_png /* zz_zhishideng_32X592Y190.png - S635 */
};
#pragma CONST_SEG __GPAGE_SEG MAPDATA_ROM
static const T_VC1H_PATTERNDATA tVc1hPatternData[] =
......@@ -1301,14 +1308,21 @@ static const T_VC1H_PATTERNDATA tVc1hPatternData[] =
{{0xA0,0x00,0x00,0x00,0x2E,0x4F,0x10,0x96,0xDE,0x88,0x40,0x40}, -1}, /* zuoqiya14.png - S618 */
{{0xA0,0x00,0x00,0x00,0x2E,0x4F,0x00,0x96,0xE7,0x55,0x40,0x40}, -1}, /* zuoqiya15.png - S619 */
{{0xA0,0x00,0x00,0x00,0x24,0x46,0x30,0x96,0xF0,0x85,0x40,0x40}, -1}, /* zuoqiyashuzi.png - S620 */
{{0xA0,0x00,0x00,0x00,0x03,0x5D,0x10,0x96,0xF2,0xBC,0x40,0x40}, -1}, /* zz_ALARM_88.png - S621 */
{{0xA0,0x00,0x00,0x00,0x04,0x44,0x00,0x96,0xF4,0x23,0x40,0x40}, -1}, /* zz_CarPeopleR_x451y17.png - S622 */
{{0xA0,0x00,0x00,0x00,0x04,0x44,0x00,0x96,0xF4,0x79,0x40,0x40}, -1}, /* zz_CarPeopleY_x451y17.png - S623 */
{{0xA0,0x00,0x00,0x00,0x04,0x44,0x00,0x96,0xF4,0xCE,0x40,0x40}, -1}, /* zz_HSA_x132y304.png - S624 */
{{0xA0,0x00,0x00,0x00,0x04,0x44,0x10,0x96,0xF5,0x4F,0x40,0x40}, -1}, /* zz_Road_L_x132y266.png - S625 */
{{0xA0,0x00,0x00,0x00,0x04,0x44,0x10,0x96,0xF5,0xBD,0x40,0x40}, -1}, /* zz_Road_M_x132y266.png - S626 */
{{0xA0,0x00,0x00,0x00,0x04,0x44,0x00,0x96,0xF6,0x1B,0x40,0x40}, -1}, /* zz_Road_R_x132y266.png - S627 */
{{0xA0,0x00,0x00,0x00,0x45,0x45,0x00,0x16,0xF6,0x89,0x40,0x40}, -1} /* zz_zhishideng_10.png - S628 */
{{0xA0,0x00,0x00,0x00,0x03,0x5D,0x00,0x96,0xF2,0xBC,0x40,0x40}, -1}, /* zz_ALARM_88.png - S621 */
{{0xA0,0x00,0x00,0x00,0x04,0x44,0x00,0x96,0xF4,0x2B,0x40,0x40}, -1}, /* zz_CarPeopleR_x451y17.png - S622 */
{{0xA0,0x00,0x00,0x00,0x04,0x44,0x00,0x96,0xF4,0x81,0x40,0x40}, -1}, /* zz_CarPeopleY_x451y17.png - S623 */
{{0xA0,0x00,0x00,0x00,0x04,0x44,0x00,0x96,0xF4,0xD6,0x40,0x40}, -1}, /* zz_HSA_x132y304.png - S624 */
{{0xA0,0x00,0x00,0x00,0x04,0x44,0x10,0x96,0xF5,0x57,0x40,0x40}, -1}, /* zz_Road_L_x132y266.png - S625 */
{{0xA0,0x00,0x00,0x00,0x04,0x44,0x00,0x96,0xF5,0xC5,0x40,0x40}, -1}, /* zz_Road_LY_x132y266.png - S626 */
{{0xA0,0x00,0x00,0x00,0x04,0x44,0x10,0x96,0xF6,0x30,0x40,0x40}, -1}, /* zz_Road_M_x132y266.png - S627 */
{{0xA0,0x00,0x00,0x00,0x04,0x44,0x00,0x96,0xF6,0x8E,0x40,0x40}, -1}, /* zz_Road_R_x132y266.png - S628 */
{{0xA0,0x00,0x00,0x00,0x04,0x44,0x10,0x96,0xF6,0xFC,0x40,0x40}, -1}, /* zz_Road_Red_x132_y266.png - S629 */
{{0xA0,0x00,0x00,0x00,0x04,0x44,0x00,0x96,0xF7,0x89,0x40,0x40}, -1}, /* zz_Road_RY_x132y266.png - S630 */
{{0xA0,0x00,0x00,0x00,0x04,0x44,0x00,0x96,0xF7,0xEF,0x40,0x40}, -1}, /* zz_Road_Yellow_x132_y266.png - S631 */
{{0xA0,0x00,0x00,0x00,0x45,0x45,0x00,0x16,0xF8,0x87,0x40,0x40}, -1}, /* zz_zhishideng_10.png - S632 */
{{0xA0,0x00,0x00,0x00,0x05,0x44,0x30,0x96,0xF9,0x51,0x40,0x40}, -1}, /* zz_zhishideng_31X592Y230.png - S633 */
{{0xA0,0x00,0x00,0x00,0x05,0x44,0x00,0x96,0xF9,0xAC,0x40,0x40}, -1}, /* zz_zhishideng_32X123Y190.png - S634 */
{{0xA0,0x00,0x00,0x00,0x05,0x44,0x00,0x96,0xFA,0x19,0x40,0x40}, -1} /* zz_zhishideng_32X592Y190.png - S635 */
};
#pragma CONST_SEG DEFAULT
......
......@@ -2397,6 +2397,72 @@ extern volatile uint8_t CANMsg18A92A17Status;
static const uint8_t CANMsg18A92A17Init[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
static const uint8_t CANMsg18A92A17Timeout[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
static const uint8_t CANMsg18A92A17Mask[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
/******************************************************************************
FLI1
ID:0x10F0072A
******************************************************************************/
typedef union
{
uint8_t Msg[8];
struct
{
uint8_t b00_03 : 4; //
uint8_t b04_05 : 2; //AEBS_LaneDepartureImminentRight
uint8_t b06_07 : 2; //AEBS_LaneDepartureImminentLeft
uint8_t b08_15 : 8; //
uint8_t b16_23 : 8; //
uint8_t b24_31 : 8; //
uint8_t b32_39 : 8; //
uint8_t b40_47 : 8; //
uint8_t b48_55 : 8; //
uint8_t b56_63 : 8; //
} Sig;
} CANMsg10F0072AUnion;
extern volatile CANMsg10F0072AUnion CANMsg10F0072A;
extern volatile uint8_t CANMsg10F0072AStatus;
#define FLI1 0x10F0072A
#define FLI1_STATUS CANMsg10F0072AStatus
#define AEBS_LaneDepartureImminentRight CANMsg10F0072A.Sig.b04_05
#define AEBS_LaneDepartureImminentLeft CANMsg10F0072A.Sig.b06_07
static const uint8_t CANMsg10F0072AInit[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
static const uint8_t CANMsg10F0072ATimeout[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
static const uint8_t CANMsg10F0072AMask[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
/******************************************************************************
FLI12
ID:0x18FE5B2A
******************************************************************************/
typedef union
{
uint8_t Msg[8];
struct
{
uint8_t b00_07 : 8; //
uint8_t b08_15 : 8; //
uint8_t b16_23 : 8; //
uint8_t b24_31 : 8; //
uint8_t b32_39 : 8; //
uint8_t b40_47 : 8; //
uint8_t b48_51 : 4; //AEBS_LaneDepartureWarningSystemState
uint8_t b52_55 : 4; //
uint8_t b56_63 : 8; //
} Sig;
} CANMsg18FE5B2AUnion;
extern volatile CANMsg18FE5B2AUnion CANMsg18FE5B2A;
extern volatile uint8_t CANMsg18FE5B2AStatus;
#define FLI2 0x18FE5B2A
#define FLI2_STATUS CANMsg18FE5B2AStatus
#define AEBS_LaneDepartureWarningSystemState CANMsg18FE5B2A.Sig.b48_51
static const uint8_t CANMsg18FE5B2AInit[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
static const uint8_t CANMsg18FE5B2ATimeout[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
static const uint8_t CANMsg18FE5B2AMask[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
/*****************************************************************************************************************************************************************************
报文属性预定义
*****************************************************************************************************************************************************************************/
......@@ -2521,9 +2587,11 @@ static const CANMsgAttrStruct CANMsgAttrTable[] =
{ EMS_51C, CANMsg18FEC600.Msg, 8, 8, CAN_MSG_Rx, CAN_MSG_CYCLE, 5000, 0, &CANMsg18FEC600Status, CANMsg18FEC600Init, CANMsg18FEC600Timeout, CANMsg18FEC600Mask,},
{ LLM_EB4E, CANMsg18FFEB4E.Msg, 8, 8, CAN_MSG_Rx, CAN_MSG_CYCLE, 5000, 0, &CANMsg18FFEB4EStatus, CANMsg18FFEB4EInit, CANMsg18FFEB4ETimeout, CANMsg18FFEB4EMask,},
{ EBS5, CANMsg18FDC40B.Msg, 8, 8, CAN_MSG_Rx, CAN_MSG_CYCLE, 1000, 0, &CANMsg18FDC40BStatus, CANMsg18FDC40BInit, CANMsg18FDC40BTimeout, CANMsg18FDC40BMask,},
{ FLI1, CANMsg10F0072A.Msg, 8, 8, CAN_MSG_Rx, CAN_MSG_CYCLE, 500, 0, &CANMsg10F0072AStatus, CANMsg10F0072AInit, CANMsg10F0072ATimeout, CANMsg10F0072AMask,},
{ FLI2, CANMsg18FE5B2A.Msg, 8, 8, CAN_MSG_Rx, CAN_MSG_CYCLE, 1000, 0, &CANMsg18FE5B2AStatus, CANMsg18FE5B2AInit, CANMsg18FE5B2ATimeout, CANMsg18FE5B2AMask,},
/*==========================================================================================================================================================================*/
};
#define CAN_TX_MSG_NUM 10
#define CAN_RX_MSG_NUM 44
#define CAN_RX_MSG_NUM 46
#endif
......@@ -244,3 +244,11 @@ volatile uint8_t CANMsg0C0B2A17Status;
//ICM6
volatile CANMsg18A92A17Union CANMsg18A92A17;
volatile uint8_t CANMsg18A92A17Status;
//FLI1
volatile CANMsg10F0072AUnion CANMsg10F0072A;
volatile uint8_t CANMsg10F0072AStatus;
//FLI2
volatile CANMsg18FE5B2AUnion CANMsg18FE5B2A;
volatile uint8_t CANMsg18FE5B2AStatus;
\ No newline at end of file
......@@ -550,6 +550,11 @@ void Power_On_Memory_Init ( void )
** Version: 1.0
** Be careful:
*****************************************************************/
extern uint8_t Overspeed_RVM;
extern uint8_t AutoHold_HillHold;
extern uint8_t Maintain_LDWS;
extern uint8_t POPUP_LDW_Time;
void Power_IGN_On_Init ( void )
{
//CounterWarning = 0; //定时
......@@ -580,7 +585,11 @@ void Power_IGN_On_Init ( void )
//SEG_LCD_Init(); //--hyq-20180923
Line_In_Enable ( 1 );
Retarder_Request_BreakLight_KANG = 0;
Retarder_Request_BreakLight_KANG = 0;
Overspeed_RVM = 0;
AutoHold_HillHold = 0;
Maintain_LDWS = 0;
POPUP_LDW_Time = 0;
}
/*****************************************************************
** Function name: Power_Sleep_Init()
......
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