Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
LE19
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
时昊
LE19
Commits
0564a79d
Commit
0564a79d
authored
Jan 31, 2024
by
时昊
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
增加雷达报警
parent
0168f7cd
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
165 additions
and
3378 deletions
+165
-3378
Popup_Scheduler.c
le19源码/Source/Application/Alarm/Popup_Scheduler.c
+2
-2
Popups.c
le19源码/Source/Application/Alarm/Popups.c
+157
-61
Sound_List.h
le19源码/Source/Application/Alarm/Sound_List.h
+1
-1
Sound_Scheduler.c
le19源码/Source/Application/Alarm/Sound_Scheduler.c
+3
-3
Sound_Source.h
le19源码/Source/Application/Alarm/Sound_Source.h
+1
-1
Radar_R3.c
le19源码/Source/Application/Device/Radar_R3.c
+1
-1
Gauge_Display.c
utility/le19删除超速报警临时程序/Gauge_Display.c
+0
-842
Popup_List.h
utility/le19删除超速报警临时程序/Popup_List.h
+0
-63
Popup_Scheduler.c
utility/le19删除超速报警临时程序/Popup_Scheduler.c
+0
-1217
Popups.c
utility/le19删除超速报警临时程序/Popups.c
+0
-709
Sound_List.h
utility/le19删除超速报警临时程序/Sound_List.h
+0
-86
Sound_Scheduler.c
utility/le19删除超速报警临时程序/Sound_Scheduler.c
+0
-310
Sound_Source.h
utility/le19删除超速报警临时程序/Sound_Source.h
+0
-82
No files found.
le19源码/Source/Application/Alarm/Popup_Scheduler.c
View file @
0564a79d
...
...
@@ -23,9 +23,9 @@ const PopupAttributeStruct PopupAttributeTable_1[POPUP_NUMBER_TOTAL] =
/* 雷达2hz */
{
12u
,
POPUP_Radar_2HZ
,
NULL
,
1u
,
POPUP_MODE_LONG_HINT
,
SND_RADAR_2HZ
,
POPUP_MODE_MULTI
,
0xFFFFu
,
10u
,
},
/* 雷达4hz */
{
12u
,
POPUP_Radar_4HZ
,
NULL
,
1u
,
POPUP_MODE_LONG_HINT
,
SND_RADAR_4HZ
,
POPUP_MODE_MULTI
,
0xFFFFu
,
10u
,
},
/* 倒车雷达系统故障 */
{
12u
,
POPUP_RADAR_SYSTEM_FAILURE
,
NULL
,
1u
,
POPUP_MODE_SHORT_HINT
,
SND_RADAR_2S
,
POPUP_MODE_SINGLE
,
30u
,
10u
,
},
/* 倒车雷达传感器故障 */
{
12u
,
POPUP_RADAR_SENSOR_FAILURE
,
NULL
,
1u
,
POPUP_MODE_SHORT_HINT
,
SND_RADAR_2S
,
POPUP_MODE_SINGLE
,
3
0u
,
10u
,
},
/* 倒车雷达传感器故障 */
{
12u
,
POPUP_RADAR_SENSOR_FAILURE
,
NULL
,
1u
,
POPUP_MODE_SHORT_HINT
,
SND_RADAR_2S
,
POPUP_MODE_SINGLE
,
2
0u
,
10u
,
},
/* 雷达开关故障 */
{
0u
,
POPUP_RADAR_SWITCH_FAILURE
,
NULL
,
1u
,
POPUP_MODE_SHORT_HINT
,
SND_RADAR_0S
,
POPUP_MODE_SINGLE
,
30u
,
10u
,
},
/* 雷达
开关故障 */
{
0u
,
POPUP_RADAR_CHECK_OK
,
NULL
,
1u
,
POPUP_MODE_SHORT_HINT
,
SND_RADAR_OK0S
,
POPUP_MODE_SINGLE
,
30u
,
10
u
,
},
/* 雷达
自检ok长鸣0.5s */
{
12u
,
POPUP_RADAR_CHECK_OK
,
NULL
,
1u
,
POPUP_MODE_SHORT_HINT
,
SND_RADAR_OK0S
,
POPUP_MODE_SINGLE
,
5u
,
5
u
,
},
/* 制动液位低 */
{
2u
,
POPUP_EPB_Status
,
NULL
,
1u
,
POPUP_MODE_LONG_HINT
,
SND_EPB_Status
,
POPUP_MODE_SINGLE
,
11u
,
10u
,
},
/* 安全带未系 1HZ */
{
3u
,
POPUP_SEATBELT_DR_1HZ
,
NULL
,
1u
,
POPUP_MODE_LONG_HINT
,
SND_SEATBELT_DR_1HZ
,
POPUP_MODE_MULTI
,
0xFFFFu
,
10u
,
},
/* 安全带未系 2HZ */
{
3u
,
POPUP_SEATBELT_DR_2HZ
,
NULL
,
1u
,
POPUP_MODE_LONG_HINT
,
SND_SEATBELT_DR_2HZ
,
POPUP_MODE_MULTI
,
0xFFFFu
,
10u
,
},
...
...
le19源码/Source/Application/Alarm/Popups.c
View file @
0564a79d
...
...
@@ -96,6 +96,9 @@ void Popups_Polling(void)
if
(
SelfCheck_time
<
(
POWERON_SCAN_TIMER
/
100
)
+
5u
)
{
SelfCheck_time
++
;
PopupAndSound_Delete
(
POPUP_RADAR_CHECK_OK
);
PopupAndSound_Delete
(
POPUP_RADAR_SENSOR_FAILURE
);
PopupAndSound_Delete
(
POPUP_Radar_Changming
);
PopupAndSound_Delete
(
POPUP_Radar_1HZ
);
PopupAndSound_Delete
(
POPUP_Radar_2HZ
);
...
...
@@ -457,89 +460,182 @@ void Popups_Polling(void)
}
/*雷达距离声音提示*/
if
(
IGstPopup1
==
IGN_ON
)
if
(
/*EOL_GetF101() == */
2
)
//can雷达
{
if
(
Get_ID_0CFF1ADA_Sig_PDC_VirtualDisplaySts
()
==
1u
)
if
(
IGstPopup1
==
IGN_ON
)
{
switch
(
Get_ID_0CFF1ADA_Sig_PDC_Warning_Frq
()
)
if
(
Get_ID_0CFF1ADA_Sig_PDC_VirtualDisplaySts
()
==
1u
)
{
case
0
:
RADAR_SOUND
=
100
;
break
;
case
1
:
RADAR_SOUND
=
POPUP_Radar_1HZ
;
break
;
case
2
:
RADAR_SOUND
=
POPUP_Radar_2HZ
;
break
;
case
3
:
RADAR_SOUND
=
POPUP_Radar_4HZ
;
break
;
case
4
:
RADAR_SOUND
=
100
;
break
;
case
5
:
RADAR_SOUND
=
POPUP_Radar_Changming
;
break
;
default:
RADAR_SOUND
=
100
;
break
;
switch
(
Get_ID_0CFF1ADA_Sig_PDC_Warning_Frq
()
)
{
case
0
:
RADAR_SOUND
=
100
;
break
;
case
1
:
RADAR_SOUND
=
POPUP_Radar_1HZ
;
break
;
case
2
:
RADAR_SOUND
=
POPUP_Radar_2HZ
;
break
;
case
3
:
RADAR_SOUND
=
POPUP_Radar_4HZ
;
break
;
case
4
:
RADAR_SOUND
=
100
;
break
;
case
5
:
RADAR_SOUND
=
POPUP_Radar_Changming
;
break
;
default:
RADAR_SOUND
=
100
;
break
;
}
if
(
RADAR_SOUND
==
POPUP_Radar_1HZ
)
{
PopupAndSound_Delete
(
POPUP_Radar_2HZ
);
PopupAndSound_Delete
(
POPUP_Radar_4HZ
);
PopupAndSound_Delete
(
POPUP_Radar_Changming
);
Popup_Request
(
POPUP_Radar_1HZ
);
}
else
if
(
RADAR_SOUND
==
POPUP_Radar_2HZ
)
{
PopupAndSound_Delete
(
POPUP_Radar_1HZ
);
PopupAndSound_Delete
(
POPUP_Radar_4HZ
);
PopupAndSound_Delete
(
POPUP_Radar_Changming
);
Popup_Request
(
POPUP_Radar_2HZ
);
}
else
if
(
RADAR_SOUND
==
POPUP_Radar_4HZ
)
{
PopupAndSound_Delete
(
POPUP_Radar_2HZ
);
PopupAndSound_Delete
(
POPUP_Radar_1HZ
);
PopupAndSound_Delete
(
POPUP_Radar_Changming
);
Popup_Request
(
POPUP_Radar_4HZ
);
}
else
if
(
RADAR_SOUND
==
POPUP_Radar_Changming
)
{
PopupAndSound_Delete
(
POPUP_Radar_2HZ
);
PopupAndSound_Delete
(
POPUP_Radar_4HZ
);
PopupAndSound_Delete
(
POPUP_Radar_1HZ
);
Popup_Request
(
POPUP_Radar_Changming
);
}
else
{
PopupAndSound_Delete
(
POPUP_Radar_2HZ
);
PopupAndSound_Delete
(
POPUP_Radar_4HZ
);
PopupAndSound_Delete
(
POPUP_Radar_1HZ
);
PopupAndSound_Delete
(
POPUP_Radar_Changming
);
}
}
if
(
RADAR_SOUND
==
POPUP_Radar_1HZ
)
else
{
PopupAndSound_Delete
(
POPUP_Radar_2HZ
);
PopupAndSound_Delete
(
POPUP_Radar_4HZ
);
PopupAndSound_Delete
(
POPUP_Radar_
Changming
);
Popup
_Request
(
POPUP_Radar_1HZ
);
PopupAndSound_Delete
(
POPUP_Radar_
1HZ
);
Popup
AndSound_Delete
(
POPUP_Radar_Changming
);
}
else
if
(
RADAR_SOUND
==
POPUP_Radar_2HZ
)
}
else
{
PopupAndSound_Delete
(
POPUP_Radar_2HZ
);
PopupAndSound_Delete
(
POPUP_Radar_4HZ
);
PopupAndSound_Delete
(
POPUP_Radar_1HZ
);
PopupAndSound_Delete
(
POPUP_Radar_Changming
);
}
}
else
if
(
/*EOL_GetF101() ==*/
3
)
{
if
(
IGstPopup1
==
IGN_ON
)
{
switch
(
Radra_Get_Warning
(
))
{
case
1
:
RADAR_SOUND
=
RADAR_SND_2Hz
;
break
;
case
2
:
RADAR_SOUND
=
RADAR_SND_4Hz
;
break
;
case
3
:
RADAR_SOUND
=
RADAR_SND_CONTINUOUS
;
break
;
case
4
:
//长鸣0.5s
RADAR_SOUND
=
RADAR_SND_OK500MS
;
break
;
case
5
:
//雷达故障 长鸣2s
RADAR_SOUND
=
RADAR_SND_2S
;
break
;
case
6
:
//雷达数据超时 长鸣2s
RADAR_SOUND
=
RADAR_SND_2S
;
break
;
default:
RADAR_SOUND
=
RADAR_SND_MUTE
;
break
;
}
if
(
RADAR_SOUND
==
RADAR_SND_2Hz
)
{
PopupAndSound_Delete
(
POPUP_Radar_1HZ
);
PopupAndSound_Delete
(
POPUP_Radar_4HZ
);
PopupAndSound_Delete
(
POPUP_RADAR_CHECK_OK
);
PopupAndSound_Delete
(
POPUP_RADAR_SENSOR_FAILURE
);
PopupAndSound_Delete
(
POPUP_Radar_Changming
);
Popup_Request
(
POPUP_Radar_2HZ
);
}
else
if
(
RADAR_SOUND
==
POPUP_Radar_4HZ
)
else
if
(
RADAR_SOUND
==
RADAR_SND_4Hz
)
{
PopupAndSound_Delete
(
POPUP_Radar_2HZ
);
PopupAndSound_Delete
(
POPUP_Radar_1HZ
);
PopupAndSound_Delete
(
POPUP_Radar_Changming
);
PopupAndSound_Delete
(
POPUP_RADAR_CHECK_OK
);
PopupAndSound_Delete
(
POPUP_RADAR_SENSOR_FAILURE
);
Popup_Request
(
POPUP_Radar_4HZ
);
}
else
if
(
RADAR_SOUND
==
POPUP_Radar_Changming
)
else
if
(
RADAR_SOUND
==
RADAR_SND_CONTINUOUS
)
{
PopupAndSound_Delete
(
POPUP_Radar_2HZ
);
PopupAndSound_Delete
(
POPUP_Radar_4HZ
);
PopupAndSound_Delete
(
POPUP_Radar_1HZ
);
PopupAndSound_Delete
(
POPUP_RADAR_CHECK_OK
);
PopupAndSound_Delete
(
POPUP_RADAR_SENSOR_FAILURE
);
Popup_Request
(
POPUP_Radar_Changming
);
}
else
if
(
RADAR_SOUND
==
RADAR_SND_OK500MS
)
{
PopupAndSound_Delete
(
POPUP_Radar_2HZ
);
PopupAndSound_Delete
(
POPUP_Radar_4HZ
);
PopupAndSound_Delete
(
POPUP_Radar_Changming
);
PopupAndSound_Delete
(
POPUP_RADAR_SENSOR_FAILURE
);
Popup_Request
(
POPUP_RADAR_CHECK_OK
);
}
else
if
(
RADAR_SOUND
==
RADAR_SND_2S
)
{
PopupAndSound_Delete
(
POPUP_Radar_2HZ
);
PopupAndSound_Delete
(
POPUP_Radar_4HZ
);
PopupAndSound_Delete
(
POPUP_RADAR_CHECK_OK
);
PopupAndSound_Delete
(
POPUP_Radar_Changming
);
Popup_Request
(
POPUP_RADAR_SENSOR_FAILURE
);
}
else
{
PopupAndSound_Delete
(
POPUP_Radar_2HZ
);
PopupAndSound_Delete
(
POPUP_Radar_4HZ
);
PopupAndSound_Delete
(
POPUP_R
adar_1HZ
);
PopupAndSound_Delete
(
POPUP_R
ADAR_CHECK_OK
);
PopupAndSound_Delete
(
POPUP_Radar_Changming
);
PopupAndSound_Delete
(
POPUP_RADAR_SENSOR_FAILURE
);
}
}
else
{
PopupAndSound_Delete
(
POPUP_Radar_2HZ
);
PopupAndSound_Delete
(
POPUP_Radar_4HZ
);
PopupAndSound_Delete
(
POPUP_Radar_1HZ
);
PopupAndSound_Delete
(
POPUP_Radar_Changming
);
PopupAndSound_Delete
(
POPUP_RADAR_CHECK_OK
);
PopupAndSound_Delete
(
POPUP_Radar_Changming
);
PopupAndSound_Delete
(
POPUP_RADAR_SENSOR_FAILURE
);
}
}
else
{
PopupAndSound_Delete
(
POPUP_Radar_2HZ
);
PopupAndSound_Delete
(
POPUP_Radar_4HZ
);
PopupAndSound_Delete
(
POPUP_Radar_1HZ
);
PopupAndSound_Delete
(
POPUP_Radar_Changming
);
;
}
// OTA处理
...
...
@@ -654,31 +750,31 @@ void Popups_Sound_Playing(uint8_t PopupSnd)
case
SND_RADAR
:
if
(
RADAR_SOUND
==
RADAR_SND_CONTINUOUS
)
{
Sound_Delete
(
SND_RADAR_1HZ
);
Sound_Delete
(
SND_RADAR_2HZ
);
Sound_Delete
(
SND_RADAR_4HZ
);
Sound_Request
(
SND_RADAR_Changming
,
ReqCode
);
//
Sound_Delete(SND_RADAR_1HZ);
//
Sound_Delete(SND_RADAR_2HZ);
//
Sound_Delete(SND_RADAR_4HZ);
//
Sound_Request(SND_RADAR_Changming, ReqCode);
}
else
if
(
RADAR_SOUND
==
RADAR_SND_2Hz
)
{
Sound_Delete
(
SND_RADAR_1HZ
);
Sound_Delete
(
SND_RADAR_4HZ
);
Sound_Delete
(
SND_RADAR_Changming
);
Sound_Request
(
SND_RADAR_2HZ
,
ReqCode
);
//
Sound_Delete(SND_RADAR_1HZ);
//
Sound_Delete(SND_RADAR_4HZ);
//
Sound_Delete(SND_RADAR_Changming);
//
Sound_Request(SND_RADAR_2HZ, ReqCode);
}
else
if
(
RADAR_SOUND
==
RADAR_SND_4Hz
)
{
Sound_Delete
(
SND_RADAR_1HZ
);
Sound_Delete
(
SND_RADAR_2HZ
);
Sound_Delete
(
SND_RADAR_Changming
);
Sound_Request
(
SND_RADAR_4HZ
,
ReqCode
);
//
Sound_Delete(SND_RADAR_1HZ);
//
Sound_Delete(SND_RADAR_2HZ);
//
Sound_Delete(SND_RADAR_Changming);
//
Sound_Request(SND_RADAR_4HZ, ReqCode);
}
else
{
Sound_Delete
(
SND_RADAR_1HZ
);
Sound_Delete
(
SND_RADAR_2HZ
);
Sound_Delete
(
SND_RADAR_4HZ
);
Sound_Delete
(
SND_RADAR_Changming
);
//
Sound_Delete(SND_RADAR_1HZ);
//
Sound_Delete(SND_RADAR_2HZ);
//
Sound_Delete(SND_RADAR_4HZ);
//
Sound_Delete(SND_RADAR_Changming);
}
break
;
default:
...
...
le19源码/Source/Application/Alarm/Sound_List.h
View file @
0564a79d
...
...
@@ -21,7 +21,7 @@ enum SoundName
SND_RADAR_2S
,
/* 雷达 2S */
SND_RADAR_4S
,
/* 雷达 4S */
SND_RADAR_0S
,
/* 雷达 0.5S */
SND_RADAR_OK0S
,
/* 雷达
0.5S */
SND_RADAR_OK0S
,
/* 雷达 自检ok长鸣
0.5S */
SND_EPB_Status
,
/* 制动液位低 */
SND_SEATBELT_DR_1HZ
,
/* 安全带未系 1HZ */
SND_SEATBELT_DR_2HZ
,
/* 安全带未系 2HZ */
...
...
le19源码/Source/Application/Alarm/Sound_Scheduler.c
View file @
0564a79d
...
...
@@ -24,7 +24,7 @@ const SoundAttributeStruct SoundList [ SND_TOTAL_NUM ] = {
{
/*雷达 2S */
SND_SRC_Radar_2S
,
SND_TYPE_RADAR
,
},
{
/*雷达 4S */
SND_SRC_Radar_4S
,
SND_TYPE_RADAR
,
},
{
/*雷达 0.5S */
SND_SRC_Radar_0S
,
SND_TYPE_RADAR
,
},
{
/*雷达
0.5S
*/
SND_SRC_Radar_OK0S
,
SND_TYPE_RADAR
,
},
{
/*雷达
自检ok长鸣0.5S
*/
SND_SRC_Radar_OK0S
,
SND_TYPE_RADAR
,
},
{
/*制动液位低 */
SND_SRC_EPB_Status
,
SND_TYPE_NORMAL
,
},
{
/*安全带未系 */
SND_SRC_SEATBELT_DR_1HZ
,
SND_TYPE_NORMAL
,
},
{
/*安全带未系 */
SND_SRC_SEATBELT_DR_2HZ
,
SND_TYPE_NORMAL
,
},
...
...
@@ -78,10 +78,10 @@ const SndAttributeStruct SndAttributeTable [ SND_SRC_TOTAL_NUM ] = {
{
/* 雷达 1HZ */
0x03
,
12u
,
SND_CYCLE_NONSTOP
,
SND_MODE_SINGLE
,
1000u
,
},
{
/* 雷达 2HZ */
0x03
,
12u
,
SND_CYCLE_NONSTOP
,
SND_MODE_SINGLE
,
500u
,
},
{
/* 雷达 4HZ */
0x04
,
12u
,
SND_CYCLE_NONSTOP
,
SND_MODE_SINGLE
,
250u
,
},
{
/* 雷达 2S */
0x02
,
3
u
,
1u
,
SND_MODE_SINGLE
,
2000u
,
},
{
/* 雷达 2S */
0x02
,
12
u
,
1u
,
SND_MODE_SINGLE
,
2000u
,
},
{
/* 雷达 4S */
0x02
,
3u
,
1u
,
SND_MODE_SINGLE
,
4000u
,
},
{
/* 雷达 0.5S */
0x02
,
3u
,
1u
,
SND_MODE_SINGLE
,
500u
,
},
{
/* 雷达
0.5S */
0x02
,
3
u
,
1u
,
SND_MODE_SINGLE
,
500u
,
},
{
/* 雷达
自检ok长鸣0.5S */
0x02
,
12
u
,
1u
,
SND_MODE_SINGLE
,
500u
,
},
{
/* 制动液位低 */
0x07
,
2u
,
1u
,
SND_MODE_SINGLE
,
1000u
,
},
{
/* 安全带未系 1HZ */
0x03
,
3u
,
SND_CYCLE_NONSTOP
,
SND_MODE_SINGLE
,
1000u
,
},
{
/* 安全带未系 2HZ */
0x03
,
3u
,
SND_CYCLE_NONSTOP
,
SND_MODE_SINGLE
,
500u
,
},
...
...
le19源码/Source/Application/Alarm/Sound_Source.h
View file @
0564a79d
...
...
@@ -21,7 +21,7 @@ enum
SND_SRC_Radar_2S
,
/* 雷达 2S */
SND_SRC_Radar_4S
,
/* 雷达 4S */
SND_SRC_Radar_0S
,
/* 雷达 0S */
SND_SRC_Radar_OK0S
,
/* 雷达 0
S */
SND_SRC_Radar_OK0S
,
/* 雷达自检ok长鸣0.5
S */
SND_SRC_EPB_Status
,
/* 制动液位低 */
SND_SRC_SEATBELT_DR_1HZ
,
/* 安全带未系 1HZ */
SND_SRC_SEATBELT_DR_2HZ
,
/* 安全带未系 2HZ */
...
...
le19源码/Source/Application/Device/Radar_R3.c
View file @
0564a79d
...
...
@@ -109,7 +109,7 @@ static void Recv_Byte(void)
/*DataDecoding*/
void
Recv_New
(
void
)
{
uint8_t
Condition_EOL
=
0x0
7
u
;
// Val_EOL_F101_Radar();
uint8_t
Condition_EOL
=
0x0
6
u
;
// Val_EOL_F101_Radar();
uint8_t
Condition_Frame
=
(
PDC_R3
.
Frame_T
>
2U
)
?
1U
:
0U
;
/*PDC_Standby */
if
(
Condition_Frame
==
1U
)
...
...
utility/le19删除超速报警临时程序/Gauge_Display.c
deleted
100644 → 0
View file @
0168f7cd
#include "Communication_Over_CAN.h"
#include "System_Status_Monitor.h"
#include "SEG_DISPLAY.h"
#include "CAN_APP.h"
#include "Gauge_Display.h"
#include "Flash_synchronizer.h"
#include "RTE_TIME.h"
#include "RTC.h"
#include "Key.h"
#include "Services_TripA.h"
#include "Services_ODO.h"
#include "Common_Interface.h"
#include "Telltales_user.h"
RTC_Time_st_t
RTCTimeCurrent
;
extern
uint32_t
Factory_ClearOdo_Display_Flag
;
BattCurr_st_t
BattCurr
;
const
PowerSegMap_st_t
PositivePowerSegMap
[]
=
{
{
0u
,
0u
},
{
12u
,
1u
},
{
25u
,
2u
},
{
37u
,
3u
},
{
50u
,
4u
},
{
62u
,
5u
},
{
75u
,
6u
},
{
87u
,
7u
},
{
100u
,
8u
},
{
200u
,
8u
},
{
0xffffu
,
0xffu
},
};
const
PowerSegMap_st_t
NegativePowerSegMap
[]
=
{
{
0u
,
0x80u
},
{
50u
,
0x81u
},
{
100u
,
0x82u
},
{
200u
,
0x82u
},
{
0xffffu
,
0xffu
},
};
const
BatterySegMap_st_t
batterySegMap
[]
=
{
{
5u
,
0u
},
{
15u
,
1u
},
{
25u
,
2u
},
{
35u
,
3u
},
{
45u
,
4u
},
{
55u
,
5u
},
{
65u
,
6u
},
{
75u
,
7u
},
{
85u
,
8u
},
{
95u
,
9u
},
{
0xFEu
,
10u
},
{
0xffffu
,
0xffu
},
};
uint16_t
PowerDisplayValue
=
0
;
uint8_t
PowerDisplaySeg
=
0
;
uint16_t
BatteryDisplayValue
=
0
;
uint8_t
BatteryDisplaySeg
=
0
;
//�ⲿ�¶�
uint16_t
TEMPInvalidTime
=
0xffffu
;
uint8_t
TEMPDisplayStatus
=
0u
;
uint8_t
TEMPDisplaySymbol
=
0u
;
uint8_t
TEMPDisplayValue
=
0u
;
//��λ��˸����
uint8_t
Gear_Flash_Count
=
0
;
static
uint8_t
Gear_keep_current
=
0
;
//�ϵ�ɨ�̿���
uint16_t
PowerOn_Scan_Timing
=
0
;
uint16_t
PowerOn_Scan_Flag
=
1
;
//uint16_t Gauge_VSpeed_Display_Flag = 0;
//uint16_t Gauge_VSpeed_Display_Flag = 0;
/**************************************************************************
* \brief ���ٱ���ʾ����
* \attention �÷��������뱻ʵʱ����
* \retval ��
******************************************************************************/
void
Gauge_VSpeed_Display
(
void
)
{
uint16_t
VSpeedDisplayValue
=
0
;
// static uint16_t refresh_timer=0;
if
(
SYS_OPR_STAT_IGN_ON
)
{
if
(
Common_Get_Disp_V_Speed_Valid
(
)
==
1u
)
{
//��ʾ����
VSpeedDisplayValue
=
Common_Get_Disp_V_Speed
(
);
if
(
Factory_ClearOdo_Display_Flag
==
0
)
{
SEG_SET_VSpeed_NUM
(
1u
,
VSpeedDisplayValue
/
10
);
// if(Common_Get_Disp_V_Speed( ) >= 810)
// {
// SEG_SET_VSpeed_NUM(FLASH_SYNC_1Hz, VSpeedDisplayValue/10);
// Gauge_VSpeed_Display_Flag = 1;
// }
// else
// {
// if(Gauge_VSpeed_Display_Flag == 1)
// {
// if(Common_Get_Disp_V_Speed( ) < 780)
// {
// SEG_SET_VSpeed_NUM(1u, VSpeedDisplayValue/10);
// Gauge_VSpeed_Display_Flag = 0;
// }
// else
// {
// SEG_SET_VSpeed_NUM(FLASH_SYNC_1Hz, VSpeedDisplayValue/10);
// }
// }
// else
// {
// SEG_SET_VSpeed_NUM(1u, VSpeedDisplayValue/10);
// Gauge_VSpeed_Display_Flag = 0;
// }
// }
}
}
else
{
//�����������
VSpeedDisplayValue
=
0u
;
SEG_SET_VSpeed_NUM
(
2u
,
0u
);
//Gauge_VSpeed_Display_Flag = 0;
}
}
else
{
// IGOFFʱ����
VSpeedDisplayValue
=
0u
;
SEG_SET_VSpeed_NUM
(
0u
,
0u
);
//Gauge_VSpeed_Display_Flag = 0;
}
}
/**************************************************************************
* \brief ���ʱ���ʾ����
* \attention �÷��������뱻ʵʱ����
* \retval ��
******************************************************************************/
void
Gauge_Power_Display
(
void
)
{
uint8_t
powerSegNum
;
uint16_t
powerDisplayValue
;
uint8_t
powerDisplaySign
;
uint32_t
powerCurrentValue
;
uint32_t
powerRemainingAvailableValue
;
uint8_t
i
;
uint32_t
Batt_Curr
=
0
;
if
(
SYS_OPR_STAT_IGN_ON
)
{
if
(
Factory_ClearOdo_Display_Flag
==
0
)
{
Batt_Curr
=
Get_ID_18FA40F4_Sig_BMSBattCurr
();
if
((
CAN_MSG_Status
(
ID_can0x18FA40F4_Msg_Count
)
!=
0u
)
||
(
Batt_Curr
==
0XFFFF
))
{
// 0格和--%
BattCurr
.
Valid
=
0
;
BattCurr
.
Value
=
0
;
SEG_SET_PowerDial
(
1u
,
0u
,
0u
,
255u
);
}
else
{
if
(
CAN_MSG_Status
(
ID_can0x18FAB027_Msg_Count
)
==
0u
)
{
if
(
Get_ID_18FAB027_Sig_VCUPTModeInd
()
!=
1
)
//+
{
if
(
CAN_MSG_Status
(
ID_can0x18FAB327_Msg_Count
)
==
0u
)
{
if
((
Get_ID_18FAB027_Sig_VCUPTSysElecPwrInd
()
/
2u
)
==
0
)
{
SEG_SET_PowerDial
(
1u
,
0u
,
0u
,
0u
);
}
else
{
powerCurrentValue
=
Get_ID_18FAB027_Sig_VCUPTSysElecPwrInd
(
)
/
2u
;
powerDisplaySign
=
Get_ID_18FAB027_Sig_VCUPTModeInd
();
powerRemainingAvailableValue
=
Get_ID_18FAB327_Sig_VCU_PTResiduePwrInd
(
)
/
10u
;
if
(
(
powerCurrentValue
==
0u
)
&&
(
powerRemainingAvailableValue
==
0u
)
)
{
powerDisplayValue
=
0
;
powerSegNum
=
0
;
}
else
{
if
(
powerDisplaySign
!=
1u
)
{
powerDisplayValue
=
powerCurrentValue
*
100u
/
(
powerCurrentValue
+
powerRemainingAvailableValue
);
for
(
i
=
0
;
i
<
POSITIVE_POWER_SEG_MAP_MAX
;
i
++
)
{
if
(
powerDisplayValue
<=
PositivePowerSegMap
[
i
].
value
)
{
powerSegNum
=
PositivePowerSegMap
[
i
].
segNum
;
break
;
}
}
}
}
if
(
(
powerSegNum
!=
0xffu
)
&&
(
powerDisplayValue
<=
100u
)
)
{
if
(
Common_Get_Act_V_Speed
()
<
20u
)
{
SEG_SET_PowerDial
(
1u
,
0u
,
0u
,
0u
);
}
else
{
SEG_SET_PowerDial
(
1u
,
powerSegNum
,
0
,
powerDisplayValue
);
}
}
else
{
SEG_SET_PowerDial
(
1u
,
0u
,
0u
,
0u
);
}
}
}
else
{
SEG_SET_PowerDial
(
1u
,
0u
,
0u
,
255u
);
}
}
else
//-
{
if
(
Batt_Curr
<
0xFB00
)
{
BattCurr
.
Valid
=
1
;
Batt_Curr
=
(
Batt_Curr
*
5
);
if
(
Batt_Curr
>=
160000
)
{
Batt_Curr
-=
160000
;
BattCurr
.
Symbol
=
0
;
}
else
{
Batt_Curr
=
160000
-
Batt_Curr
;
BattCurr
.
Symbol
=
1
;
}
BattCurr
.
Value
=
Batt_Curr
/
100
;
}
else
{
BattCurr
.
Symbol
=
0
;
BattCurr
.
Valid
=
0
;
BattCurr
.
Value
=
0
;
}
if
((
Common_Get_Act_V_Speed
()
>=
20u
)
&&
(
Common_Get_Act_V_Speed
()
<
70u
)
||
(
Common_Get_Act_V_Speed
()
<
20u
))
{
//0格和0%
SEG_SET_PowerDial
(
1u
,
0u
,
0u
,
0u
);
}
else
{
if
(
BattCurr
.
Symbol
==
1
)
{
if
((
BattCurr
.
Value
<=
100
)
&&
(
BattCurr
.
Value
>
0
))
{
//-1格和-50%
SEG_SET_PowerDial
(
1u
,
0x81u
,
1u
,
50u
);
}
else
if
(
BattCurr
.
Value
>
100
)
{
//-1 -2格和-100%
SEG_SET_PowerDial
(
1u
,
0x82u
,
1u
,
100u
);
}
}
else
{
if
(
BattCurr
.
Value
>=
0
)
{
//0格和0%
SEG_SET_PowerDial
(
1u
,
0u
,
0u
,
0u
);
}
}
}
}
}
else
{
BattCurr
.
Valid
=
0
;
BattCurr
.
Value
=
0
;
SEG_SET_PowerDial
(
1u
,
0u
,
0u
,
255u
);
}
}
}
}
else
{
// IGOFF����
SEG_SET_PowerDial
(
0u
,
0u
,
0u
,
0u
);
BattCurr
.
Symbol
=
0
;
BattCurr
.
Valid
=
0
;
BattCurr
.
Value
=
0
;
}
}
/**************************************************************************
* \brief ��������ʾ����
* \attention �÷��������뱻ʵʱ����
* \retval ��
******************************************************************************/
void
Gauge_Battery_Display
(
void
)
{
//uint16_t m_val;
if
(
SYS_OPR_STAT_IGN_ON
)
{
if
(
Factory_ClearOdo_Display_Flag
==
0
)
{
if
(
(
CAN_MSG_Status
(
ID_can0x18FA40F4_Msg_Count
)
==
0u
)
&&
(
Get_ID_18FA40F4_Sig_BMSBattSOC
(
)
!=
0xff
)
)
{
//��ȡ����ʵ��ֵ
BatteryDisplayValue
=
Get_ID_18FA40F4_Sig_BMSBattSOC
(
)
*
4u
/
10u
;
//�������������??
//����
if
(
BatteryDisplayValue
>=
(
batterySegMap
[
BatteryDisplaySeg
].
value
+
2u
)
)
{
BatteryDisplaySeg
++
;
}
//�½�
if
(
BatteryDisplaySeg
>
0u
)
{
if
(
BatteryDisplayValue
<=
(
batterySegMap
[
BatteryDisplaySeg
-
1
].
value
/* -2u*/
)
)
{
BatteryDisplaySeg
--
;
}
}
if
(
BatteryDisplayValue
>=
100
)
{
BatteryDisplayValue
=
100
;
}
//������ʾ
if
(
BatteryDisplaySeg
!=
0xffu
)
{
if
(
BatteryDisplaySeg
==
1
)
{
SEG_SET_EleDial
(
1u
,
FLASH_SYNC_1Hz
?
BatteryDisplaySeg
:
0
,
BatteryDisplayValue
);
}
else
{
SEG_SET_EleDial
(
1u
,
BatteryDisplaySeg
,
BatteryDisplayValue
);
}
}
else
{
//�źŴ�����
SEG_SET_EleDial
(
1u
,
0u
,
0u
);
}
}
else
{
//���ĵ��ߴ���
SEG_SET_EleDial
(
1u
,
FLASH_SYNC_05Hz
?
BatteryDisplaySeg
:
0
,
BatteryDisplayValue
);
}
}
}
else
{
// IGOFF����
SEG_SET_EleDial
(
0u
,
0u
,
0u
);
}
}
/**************************************************************************
* \brief ʱ����ʾ����
* \attention �÷��������뱻ʵʱ����
* \retval ��
******************************************************************************/
void
Gauge_Clock_Display
(
void
)
{
if
(
SYS_OPR_STAT_IGN_ON
)
{
//��ȡʱ��
RTCTimeCurrent
.
Hour
=
Get_RTC_HOUR
(
);
RTCTimeCurrent
.
Minute
=
Get_RTC_MINUTE
(
);
//ʱ����ʾ
if
(
Factory_ClearOdo_Display_Flag
==
0
)
{
SEG_SET_Clock
(
RTCTimeCurrent
.
Hour
,
RTCTimeCurrent
.
Minute
,
FLASH_SYNC_1Hz
,
1
,
1
);
}
}
else
{
SEG_SET_Clock
(
0
,
0
,
0
,
0
,
0
);
}
// //����ʱ��
// RTE_RTC_Set_Hour ( RTCTimeCurrent.Hour );
// RTE_RTC_Set_Minute( RTCTimeCurrent.Minute );
// RTE_RTC_Confirm_Overwrite();
}
/**************************************************************************
* \brief ��ʻ�����ʾ����??
* \attention �÷��������뱻ʵʱ����
* \retval ��
******************************************************************************/
void
Gauge_DrivingRange_Display
(
void
)
{
uint16_t
m_DTE
;
if
(
SYS_OPR_STAT_IGN_ON
)
{
if
(
Factory_ClearOdo_Display_Flag
==
0
)
{
if
(
(
CAN_MSG_Status
(
ID_can0x18FAB327_Msg_Count
)
==
0u
)
&&
(
Get_ID_18FAB327_Sig_VCU_Cruisingdistance
(
)
<=
0xFAFFFFFF
)
)
{
m_DTE
=
Get_ID_18FAB327_Sig_VCU_Cruisingdistance
(
)
>>
3
;
if
(
m_DTE
>=
999
)
{
m_DTE
=
999
;
}
if
(
m_DTE
<
10
)
{
SEG_SET_DTE_NUM
(
2u
,
0u
);
}
else
{
SEG_SET_DTE_NUM
(
1u
,
m_DTE
);
}
}
else
{
//�쳣�źŴ���
SEG_SET_DTE_NUM
(
2u
,
0u
);
}
}
}
else
{
SEG_SET_DTE_NUM
(
0u
,
0u
);
}
}
/**************************************************************************
* \brief С�������ʾ����??
* \attention �÷��������뱻ʵʱ����
* \retval ��
******************************************************************************/
void
Gauge_Trip_Display
(
void
)
{
if
(
SYS_OPR_STAT_IGN_ON
)
{
if
(
CAN_MSG_Status
(
ID_can0x18FEBF0B_Msg_Count
)
==
0u
)
{
if
(
Factory_ClearOdo_Display_Flag
==
0
)
{
SEG_SET_TRIP_NUM
(
1u
,
Data_Read_TripA
(
));
}
}
else
{
SEG_SET_TRIP_NUM
(
2u
,
0u
);
}
}
else
{
SEG_SET_TRIP_NUM
(
0u
,
0u
);
}
}
/**************************************************************************
* \brief ��������ʾ����
* \attention �÷��������뱻ʵʱ����
* \retval ��
******************************************************************************/
void
Gauge_ODO_Display
(
void
)
{
if
(
SYS_OPR_STAT_IGN_ON
)
{
if
(
Factory_ClearOdo_Display_Flag
==
0
)
{
SEG_SET_ODO_NUM
(
1u
,
Data_ODO_Read
(
)
/
10u
);
}
}
else
SEG_SET_ODO_NUM
(
0u
,
0u
);
}
/**************************************************************************
* \brief ��λ��ʾ����
* \attention �÷��������뱻ʵʱ����
* \retval ��
******************************************************************************/
void
Gauge_Gear_Display
(
void
)
{
uint8_t
DisplayGear
=
0u
;
if
(
SYS_OPR_STAT_IGN_ON
)
{
//�źŵ����ж�
if
(
CAN_MSG_Status
(
ID_can0x18FAB027_Msg_Count
)
==
0u
)
{
//��ʾ��λ����
switch
(
Get_ID_18FAB027_Sig_VCUGearPositionInd
(
)
)
{
case
0xFCu
:
DisplayGear
=
3u
;
Gear_keep_current
=
3
;
break
;
case
0xDFu
:
DisplayGear
=
1u
;
Gear_keep_current
=
1
;
break
;
case
0xFDu
:
DisplayGear
=
0xFDu
;
Gear_keep_current
=
0xFDu
;
break
;
case
0x7Du
:
DisplayGear
=
2u
;
Gear_keep_current
=
2
;
break
;
case
0xFAu
:
DisplayGear
=
4u
;
Gear_keep_current
=
4
;
break
;
default:
DisplayGear
=
0u
;
Gear_keep_current
=
0
;
break
;
}
//�źţ��������� �ж�
//if ( Get_ID_18FAB027_Sig_PMS_GearOperateErr( ) == 1u )
//{
// if ( Gear_Flash_Count < 6 )
// {
// if ( (Gear_Flash_Count & 1u) == FLASH_SYNC_1Hz )
// Gear_Flash_Count++;
// }
//}
//else
//{
// Gear_Flash_Count = 0;
//}
//��ʾ��λ
//if ( (Gear_Flash_Count == 0u) || (Gear_Flash_Count >= 6u) )
if
(
Factory_ClearOdo_Display_Flag
==
0
)
{
if
((
DisplayGear
!=
0xFDu
)
&&
(
DisplayGear
!=
0
))
{
SEG_SET_GEAR
(
1u
,
DisplayGear
);
}
else
if
(
DisplayGear
==
0xFDu
)
{
SEG_SET_GEAR
(
1u
,
Gear_keep_current
);
}
else
{
SEG_SET_GEAR
(
0u
,
0u
);
}
}
}
else
{
//�źŵ��ߴ���
SEG_SET_GEAR
(
0u
,
0u
);
}
}
else
{
SEG_SET_GEAR
(
0u
,
0u
);
}
}
/**************************************************************************
* \brief ���������ʾ����??
* \attention �÷��������뱻ʵʱ����
* \retval ��
******************************************************************************/
void
Gauge_MaintenanceMileage_Display
(
void
)
{
}
/**************************************************************************
* \brief �������յȼ���ʾ����
* \attention �÷��������뱻ʵʱ����
* \retval ��
******************************************************************************/
void
Gauge_EnergyRecoveryLevel_Display
(
void
)
{
if
(
SYS_OPR_STAT_IGN_ON
)
{
if
(
Factory_ClearOdo_Display_Flag
==
0
)
{
EnergyRecovery_Key_val
();
EnergyRecovery0_Key_val
();
SEG_SET_L8_NUM
(
1u
,
EnergyRecovery_Level
);
}
}
else
{
SEG_SET_L8_NUM
(
0u
,
0u
);
}
}
// 30���ʼ��??
void
Gauge_KL30_Init
(
void
)
{
TEMPInvalidTime
=
0xffffu
;
TEMPDisplayStatus
=
0u
;
TEMPDisplaySymbol
=
0u
;
TEMPDisplayValue
=
0u
;
}
// 15���ʼ��??
void
Gauge_KL15_Init
(
void
)
{
TEMPInvalidTime
=
0xffffu
;
TEMPDisplayStatus
=
0u
;
TEMPDisplaySymbol
=
0u
;
TEMPDisplayValue
=
0u
;
PowerOn_Scan_Timing
=
0
;
PowerOn_Scan_Flag
=
1
;
}
//����������
// 20ms����
void
Gauge_Service
(
void
)
{
static
uint16_t
VSpeed_Count
=
0u
;
if
(
SYS_OPR_STAT_IGN_ON
)
{
if
(
Factory_ClearOdo_Display_Flag
==
0
)
{
//�Լ�ɨ��
if
(
PowerOn_Scan_Flag
==
1u
)
{
//�Լ�ʱ���ۼ�
PowerOn_Scan_Timing
+=
20
;
SEG_SET_Frame
(
1u
);
SEG_SET_GEAR
(
0u
,
0u
);
SEG_SET_DTE_NUM
(
0u
,
0u
);
SEG_SET_VSpeed_NUM
(
0u
,
0u
);
SEG_SET_L8_NUM
(
0u
,
0u
);
SEG_SET_ODO_NUM
(
0u
,
0u
);
SEG_SET_TRIP_NUM
(
0u
,
0u
);
SEG_SET_Clock
(
0u
,
0u
,
0u
,
0u
,
0u
);
if
(
PowerOn_Scan_Timing
<=
(
POWERON_SCAN_TIMER
-
1000ul
)
/
2
)
{
SEG_Scan_SET_EleDial
(
PowerOn_Scan_Timing
*
10
/
((
POWERON_SCAN_TIMER
-
1000ul
)
/
2
));
SEG_Scan_SET_PowerDial
(
PowerOn_Scan_Timing
*
10
/
((
POWERON_SCAN_TIMER
-
1000ul
)
/
2
));
}
else
if
(
PowerOn_Scan_Timing
<=
(
POWERON_SCAN_TIMER
-
1000ul
)
)
{
SEG_Scan_SET_EleDial
(
10
-
(
PowerOn_Scan_Timing
-
((
POWERON_SCAN_TIMER
-
1000ul
)
/
2
))
*
10
/
((
POWERON_SCAN_TIMER
-
1000ul
)
/
2
));
SEG_Scan_SET_PowerDial
(
10
-
(
PowerOn_Scan_Timing
-
((
POWERON_SCAN_TIMER
-
1000ul
)
/
2
))
*
10
/
((
POWERON_SCAN_TIMER
-
1000ul
)
/
2
));
}
else
if
(
PowerOn_Scan_Timing
<=
POWERON_SCAN_TIMER
)
{
SEG_Scan_SET_EleDial
(
0u
);
SEG_Scan_SET_PowerDial
(
0u
);
}
else
{
PowerOn_Scan_Flag
=
0
;
}
}
else
{
//�߿�
SEG_SET_Frame
(
1u
);
VSpeed_Count
++
;
if
(
VSpeed_Count
>=
10u
)
{
Gauge_VSpeed_Display
(
);
VSpeed_Count
=
0u
;
}
Gauge_Power_Display
(
);
Gauge_Battery_Display
(
);
Gauge_Clock_Display
(
);
Gauge_DrivingRange_Display
(
);
Gauge_Trip_Display
(
);
Gauge_ODO_Display
(
);
Gauge_Gear_Display
(
);
Gauge_MaintenanceMileage_Display
(
);
Gauge_EnergyRecoveryLevel_Display
(
);
}
}
}
else
{
SEG_SET_Frame
(
0u
);
Gauge_VSpeed_Display
(
);
Gauge_Power_Display
(
);
Gauge_Battery_Display
(
);
Gauge_Clock_Display
(
);
Gauge_DrivingRange_Display
(
);
Gauge_Trip_Display
(
);
Gauge_ODO_Display
(
);
Gauge_Gear_Display
(
);
Gauge_MaintenanceMileage_Display
(
);
Gauge_EnergyRecoveryLevel_Display
(
);
}
}
typedef
struct
{
uint16_t
Tempval
;
uint16_t
ResVal
;
}
st_TempTab
;
const
st_TempTab
TempTab
[]
=
{
{
200
,
1427
,},
//0
{
250
,
1081
,},
//1
{
300
,
822
,},
//2
{
350
,
632
,},
//3
{
400
,
489
,},
//4
{
420
,
437
,},
//5
{
425
,
427
,},
//6
{
430
,
416
,},
//7
{
440
,
396
,},
//8
{
445
,
391
,},
//9
{
450
,
380
,},
//10
{
500
,
298
,},
//11
{
550
,
234
,},
//12
{
600
,
186
,},
//13
{
650
,
150
,},
//14
{
700
,
120
,},
//15
{
750
,
98
,},
//16
{
800
,
80
,},
//17
{
850
,
66
,},
//18
{
900
,
54
,},
//19
{
950
,
45
,},
//20
{
1000
,
38
,},
//21
{
1050
,
32
,},
//22
{
1100
,
27
,},
//23
{
1150
,
26
,},
//24
{
1200
,
23
,},
//25
};
uint32_t
TempResBuffer
[
20
];
uint32_t
TempResPtr
;
uint32_t
TempResult
;
uint32_t
TempOut
;
void
Temp_Calc_Init
(
void
)
{
memset
(
TempResBuffer
,
0u
,
sizeof
(
TempResBuffer
));
TempResPtr
=
0u
;
TempResult
=
255u
;
TempOut
=
255u
;
}
void
Temp_Calc_Send
(
void
)
{
uint8_t
i
,
j
;
uint8_t
ret
;
//uint32_t tempTmpVal;
//uint32_t tempResVal;
if
(
ADC_Read_Signal_Valid
(
ADC_CH_28_R
)
==
1u
)
{
TempResBuffer
[
TempResPtr
]
=
ADC_Conv_Single_Channel
(
ADC_CH_28_R
);
TempResPtr
++
;
if
(
TempResPtr
>=
20u
)
{
TempResult
=
0u
;
for
(
i
=
0
;
i
<=
20
;
i
++
)
{
TempResult
+=
TempResBuffer
[
i
];
}
TempResult
=
TempResult
/
20
;
TempResPtr
=
0u
;
}
if
(
TempResult
>
TempTab
[
0
].
ResVal
)
{
TempOut
=
200u
;
}
else
if
(
TempResult
<=
TempTab
[
25
].
ResVal
)
{
TempOut
=
1200u
;
}
else
{
j
=
0
;
ret
=
0U
;
for
(
;;
)
{
if
(
TempResult
>
TempTab
[
j
].
ResVal
)
{
ret
=
1U
;
break
;
}
else
{
j
++
;
}
if
(
j
>
25
)
{
ret
=
0U
;
break
;
}
}
if
(
ret
==
1u
)
{
//tempResVal=TempTab [ j-1 ].ResVal -TempTab [ j ].ResVal;
//tempTmpVal=TempTab [ j ].Tempval -TempTab [ j-1 ].Tempval;
//TempOut =TempTab [ j-1 ].Tempval+((tempTmpVal*(TempResult-TempTab [ j ].ResVal))/tempResVal);
TempOut
=
TempTab
[
j
].
Tempval
;
}
}
}
}
uint32_t
Get_Temp_Calc
(
void
)
{
return
TempOut
/
10u
;
}
utility/le19删除超速报警临时程序/Popup_List.h
deleted
100644 → 0
View file @
0168f7cd
#ifndef _POPUP_LIST_H_
#define _POPUP_LIST_H_
#include "stdint.h"
/*限制最大254个*/
enum
PopupName
{
POPUP_Radar_Changming
=
0
,
POPUP_Radar_1HZ
,
POPUP_Radar_2HZ
,
POPUP_Radar_4HZ
,
POPUP_RADAR_SYSTEM_FAILURE
,
POPUP_RADAR_SENSOR_FAILURE
,
POPUP_RADAR_SWITCH_FAILURE
,
POPUP_RADAR_CHECK_OK
,
POPUP_EPB_Status
,
POPUP_SEATBELT_DR_1HZ
,
POPUP_SEATBELT_DR_2HZ
,
POPUP_DoorOpen
,
POPUP_DoorOpen_1HZ
,
POPUP_EBD_fault
,
POPUP_ABS
,
POPUP_EPS
,
POPUP_Park_Brak
,
POPUP_MotorFault
,
POPUP_SOC_Fault
,
POPUP_InsulationFault
,
POPUP_SOC_HT
,
POPUP_Energy_Recovery
,
POPUP_Energy_Recovery_1
,
POPUP_ECO
,
POPUP_READY
,
POPUP_PowerLimit
,
POPUP_SOC_LP
,
POPUP_SOC_CF
,
POPUP_SystemFault
,
POPUP_SystemFault1
,
POPUP_GearFault
,
POPUP_WeightOverload
,
POPUP_WeightOverload2
,
POPUP_RemoteLocking
,
POPUP_PositionNotClosed
,
POPUP_DepartureReminder
,
POPUP_OTA_0
,
POPUP_OTA_1
,
POPUP_OTA_2
,
POPUP_OTA_3
,
POPUP_OTA_4
,
POPUP_OTA_5
,
POPUP_ESC
,
//POPUP_Over_Speed,
POPUP_NUMBER_TOTAL
,
/*报警总数*/
};
#endif
utility/le19删除超速报警临时程序/Popup_Scheduler.c
deleted
100644 → 0
View file @
0168f7cd
#include "Popup_Scheduler.h"
#include "Sound_Scheduler.h"
#include "EOL_Para.h"
void
UpdateClassMbFirst
(
void
);
void
UpdateClassMbLoop
(
void
);
void
UpdateCurrentPopup
(
void
);
/*指向报警属性表,根据声音或报警的配置选择不同的属性 (和弦音/真人语音)*/
const
PopupAttributeStruct
*
PopupAttributeTable
;
/******************************************************************************
报警属性表
******************************************************************************/
const
PopupAttributeStruct
PopupAttributeTable_1
[
POPUP_NUMBER_TOTAL
]
=
{
/* 910101-8*/
/*============================================================================================================================================================================================================================
| 报警序号 |优先级 | 报警类 | 成员 | 数量| 播放模式 | 报警音 | 声音模式:持续/单周期| 保持时间*100ms |最小保持时间*100ms |
============================================================================================================================================================================================================================*/
/* 雷达长鸣 */
{
12u
,
POPUP_Radar_Changming
,
NULL
,
1u
,
POPUP_MODE_LONG_HINT
,
SND_RADAR_Changming
,
POPUP_MODE_MULTI
,
0xFFFFu
,
10u
,
},
/* 雷达1hz */
{
12u
,
POPUP_Radar_1HZ
,
NULL
,
1u
,
POPUP_MODE_LONG_HINT
,
SND_RADAR_1HZ
,
POPUP_MODE_MULTI
,
0xFFFFu
,
10u
,
},
/* 雷达2hz */
{
12u
,
POPUP_Radar_2HZ
,
NULL
,
1u
,
POPUP_MODE_LONG_HINT
,
SND_RADAR_2HZ
,
POPUP_MODE_MULTI
,
0xFFFFu
,
10u
,
},
/* 雷达4hz */
{
12u
,
POPUP_Radar_4HZ
,
NULL
,
1u
,
POPUP_MODE_LONG_HINT
,
SND_RADAR_4HZ
,
POPUP_MODE_MULTI
,
0xFFFFu
,
10u
,
},
/* 倒车雷达系统故障 */
{
12u
,
POPUP_RADAR_SYSTEM_FAILURE
,
NULL
,
1u
,
POPUP_MODE_SHORT_HINT
,
SND_RADAR_2S
,
POPUP_MODE_SINGLE
,
30u
,
10u
,
},
/* 倒车雷达传感器故障 */
{
12u
,
POPUP_RADAR_SENSOR_FAILURE
,
NULL
,
1u
,
POPUP_MODE_SHORT_HINT
,
SND_RADAR_2S
,
POPUP_MODE_SINGLE
,
30u
,
10u
,
},
/* 雷达开关故障 */
{
0u
,
POPUP_RADAR_SWITCH_FAILURE
,
NULL
,
1u
,
POPUP_MODE_SHORT_HINT
,
SND_RADAR_0S
,
POPUP_MODE_SINGLE
,
30u
,
10u
,
},
/* 雷达开关故障 */
{
0u
,
POPUP_RADAR_CHECK_OK
,
NULL
,
1u
,
POPUP_MODE_SHORT_HINT
,
SND_RADAR_OK0S
,
POPUP_MODE_SINGLE
,
30u
,
10u
,
},
/* 制动液位低 */
{
2u
,
POPUP_EPB_Status
,
NULL
,
1u
,
POPUP_MODE_LONG_HINT
,
SND_EPB_Status
,
POPUP_MODE_SINGLE
,
11u
,
10u
,
},
/* 安全带未系 1HZ */
{
3u
,
POPUP_SEATBELT_DR_1HZ
,
NULL
,
1u
,
POPUP_MODE_LONG_HINT
,
SND_SEATBELT_DR_1HZ
,
POPUP_MODE_MULTI
,
0xFFFFu
,
10u
,
},
/* 安全带未系 2HZ */
{
3u
,
POPUP_SEATBELT_DR_2HZ
,
NULL
,
1u
,
POPUP_MODE_LONG_HINT
,
SND_SEATBELT_DR_2HZ
,
POPUP_MODE_MULTI
,
0xFFFFu
,
10u
,
},
/* 车门开报警 */
{
4u
,
POPUP_DoorOpen
,
NULL
,
1u
,
POPUP_MODE_SHORT_HINT
,
SND_DoorOpen
,
POPUP_MODE_SINGLE
,
11u
,
10u
,
},
/* 车门开报警 1HZ */
{
4u
,
POPUP_DoorOpen_1HZ
,
NULL
,
1u
,
POPUP_MODE_LONG_HINT
,
SND_DoorOpen_1HZ
,
POPUP_MODE_MULTI
,
0xFFFFu
,
10u
,
},
/* EBD故障 */
{
6u
,
POPUP_EBD_fault
,
NULL
,
1u
,
POPUP_MODE_SHORT_HINT
,
SND_EBD_fault
,
POPUP_MODE_SINGLE
,
11u
,
10u
,
},
/* ABS故障 */
{
7u
,
POPUP_ABS
,
NULL
,
1u
,
POPUP_MODE_SHORT_HINT
,
SND_ABS
,
POPUP_MODE_SINGLE
,
11u
,
10u
,
},
/* EPS故障 */
{
8u
,
POPUP_EPS
,
NULL
,
1u
,
POPUP_MODE_SHORT_HINT
,
SND_EPS
,
POPUP_MODE_SINGLE
,
11u
,
10u
,
},
/* 驻车制动 */
{
5u
,
POPUP_Park_Brak
,
NULL
,
1u
,
POPUP_MODE_SHORT_HINT
,
SND_Park_Brak
,
POPUP_MODE_SINGLE
,
11u
,
10u
,
},
/* 电机故障 */
{
9u
,
POPUP_MotorFault
,
NULL
,
1u
,
POPUP_MODE_SHORT_HINT
,
SND_MotorFault
,
POPUP_MODE_SINGLE
,
11u
,
10u
,
},
/* 动力电池报警 */
{
10u
,
POPUP_SOC_Fault
,
NULL
,
1u
,
POPUP_MODE_SHORT_HINT
,
SND_SOC_Fault
,
POPUP_MODE_SINGLE
,
11u
,
10u
,
},
/* 高压绝缘故障 */
{
11u
,
POPUP_InsulationFault
,
NULL
,
1u
,
POPUP_MODE_SHORT_HINT
,
SND_InsulationFault
,
POPUP_MODE_SINGLE
,
11u
,
10u
,
},
/* 电池热失控 */
{
1u
,
POPUP_SOC_HT
,
NULL
,
1u
,
POPUP_MODE_LONG_HINT
,
SND_SOC_HT
,
POPUP_MODE_MULTI
,
0xFFFFu
,
10u
,
},
/* 单踏板功能激活 */
{
13u
,
POPUP_Energy_Recovery
,
NULL
,
1u
,
POPUP_MODE_SHORT_HINT
,
SND_Energy_Recovery
,
POPUP_MODE_SINGLE
,
11u
,
10u
,
},
/* 单踏板功能激活 1HZ 3次 1.4变更新增 */
{
13u
,
POPUP_Energy_Recovery_1
,
NULL
,
1u
,
POPUP_MODE_SHORT_HINT
,
SND_Energy_Recovery_1
,
POPUP_MODE_MULTI
,
0xFFFFu
,
10u
,
},
/* ECO状态激活 */
{
14u
,
POPUP_ECO
,
NULL
,
1u
,
POPUP_MODE_SHORT_HINT
,
SND_ECO
,
POPUP_MODE_SINGLE
,
11u
,
10u
,
},
/* READY状态激活 */
{
15u
,
POPUP_READY
,
NULL
,
1u
,
POPUP_MODE_SHORT_HINT
,
SND_READY
,
POPUP_MODE_SINGLE
,
11u
,
10u
,
},
/* 限功率报警 */
{
16u
,
POPUP_PowerLimit
,
NULL
,
1u
,
POPUP_MODE_LONG_HINT
,
SND_PowerLimit
,
POPUP_MODE_SINGLE
,
11u
,
10u
,
},
/* 蓄电池电量低 */
{
17u
,
POPUP_SOC_LP
,
NULL
,
1u
,
POPUP_MODE_SHORT_HINT
,
SND_SOC_LP
,
POPUP_MODE_SINGLE
,
11u
,
10u
,
},
/* 蓄电池充电故障 */
{
17u
,
POPUP_SOC_CF
,
NULL
,
1u
,
POPUP_MODE_LONG_HINT
,
SND_SOC_CF
,
POPUP_MODE_MULTI
,
11u
,
10u
,
},
/* 动力系统故障 */
{
18u
,
POPUP_SystemFault
,
NULL
,
1u
,
POPUP_MODE_SHORT_HINT
,
SND_SystemFault
,
POPUP_MODE_SINGLE
,
11u
,
10u
,
},
/* 动力系统故障 */
{
18u
,
POPUP_SystemFault1
,
NULL
,
1u
,
POPUP_MODE_SHORT_HINT
,
SND_SystemFault1
,
POPUP_MODE_SINGLE
,
11u
,
10u
,
},
/* 换挡错误 */
{
17u
,
POPUP_GearFault
,
NULL
,
1u
,
POPUP_MODE_SHORT_HINT
,
SND_GearFault
,
POPUP_MODE_SINGLE
,
11u
,
10u
,
},
/* 高压报警 */
{
20u
,
POPUP_WeightOverload
,
NULL
,
1u
,
POPUP_MODE_SHORT_HINT
,
SND_WeightOverload
,
POPUP_MODE_SINGLE
,
11u
,
10u
,
},
/* 高压报警 */
{
20u
,
POPUP_WeightOverload2
,
NULL
,
1u
,
POPUP_MODE_SHORT_HINT
,
SND_WeightOverload2
,
POPUP_MODE_SINGLE
,
11u
,
10u
,
},
/* 远程锁车 */
{
21u
,
POPUP_RemoteLocking
,
NULL
,
1u
,
POPUP_MODE_SHORT_HINT
,
SND_RemoteLocking
,
POPUP_MODE_SINGLE
,
11u
,
10u
,
},
/* 小灯未关 */
{
22u
,
POPUP_PositionNotClosed
,
NULL
,
1u
,
POPUP_MODE_SHORT_HINT
,
SND_PositionNotClosed
,
POPUP_MODE_SINGLE
,
600u
,
10u
,
},
/* 驾驶员离车提醒 */
{
23u
,
POPUP_DepartureReminder
,
NULL
,
1u
,
POPUP_MODE_SHORT_HINT
,
SND_DepartureReminder
,
POPUP_MODE_SINGLE
,
30u
,
10u
,
},
/* OTA 报警0 */
{
22u
,
POPUP_OTA_0
,
NULL
,
1u
,
POPUP_MODE_SHORT_HINT
,
SND_OTA_0
,
POPUP_MODE_SINGLE
,
11u
,
10u
,
},
/* OTA 报警1 */
{
22u
,
POPUP_OTA_1
,
NULL
,
1u
,
POPUP_MODE_SHORT_HINT
,
SND_OTA_1
,
POPUP_MODE_SINGLE
,
11u
,
10u
,
},
/* OTA 报警2 */
{
22u
,
POPUP_OTA_2
,
NULL
,
1u
,
POPUP_MODE_SHORT_HINT
,
SND_OTA_2
,
POPUP_MODE_SINGLE
,
11u
,
10u
,
},
/* OTA 报警3 */
{
22u
,
POPUP_OTA_3
,
NULL
,
1u
,
POPUP_MODE_SHORT_HINT
,
SND_OTA_3
,
POPUP_MODE_SINGLE
,
11u
,
10u
,
},
/* OTA 报警4 */
{
22u
,
POPUP_OTA_4
,
NULL
,
1u
,
POPUP_MODE_SHORT_HINT
,
SND_OTA_4
,
POPUP_MODE_SINGLE
,
11u
,
10u
,
},
/* OTA 报警5 */
{
22u
,
POPUP_OTA_5
,
NULL
,
1u
,
POPUP_MODE_SHORT_HINT
,
SND_OTA_5
,
POPUP_MODE_SINGLE
,
11u
,
10u
,
},
/* OTA 报警5 */
{
22u
,
POPUP_ESC
,
NULL
,
1u
,
POPUP_MODE_SHORT_HINT
,
SND_ESC
,
POPUP_MODE_SINGLE
,
11u
,
10u
,
},
///* 超速报警 */{ 13u, POPUP_Over_Speed, NULL, 1u, POPUP_MODE_SHORT_HINT, SND_Over_Speed, POPUP_MODE_MULTI, 11u, 10u, },
/*==========================================================================================================================================================================================================================================*/
};
/*** 弹出信息状态(链)表 ***/
#pragma location ="BACKUP_RAM_CONTENT"
PopupStatusStruct
PopupStatus
[
POPUP_NUMBER_TOTAL
];
/*=====================================================
弹出信息调度链表
-------------------------------------------------------
序号 | 链表名称
(链表控制数组下标) |
-------------------------------------------------------
0 | POPUP_LINK_LIST_NEW_WARNING
1 | POPUP_LINK_LIST_WARNING
2 | POPUP_LINK_LIST_MASKED_WARNING
=====================================================*/
#pragma location ="BACKUP_RAM_CONTENT"
PopupLinkListCtrlStruct
PopupLinkList
[
3u
];
/*** 弹出信息调度管理 ***/
#pragma location ="BACKUP_RAM_CONTENT"
PopupSchedulingStruct
PopupScheduling
;
/******************************************************************************
函数名:Popup_Scheduler_Init
功 能:初始化弹出信息调度器
参 数:无
返回值:无
******************************************************************************/
void
Popup_Scheduler_Init
(
void
)
{
uint8_t
i
;
PopupAttributeTable
=
PopupAttributeTable_1
;
for
(
i
=
0u
;
i
<
(
uint8_t
)
POPUP_NUMBER_TOTAL
;
i
++
)
{
PopupStatus
[
i
].
Status
=
POPUP_STATUS_OFF
;
PopupStatus
[
i
].
LinkList
=
POPUP_LINK_LIST_NONE
;
PopupStatus
[
i
].
Prev
=
i
;
PopupStatus
[
i
].
Next
=
i
;
PopupStatus
[
i
].
SndReqCode
=
1u
;
}
Popup_Link_List_Init
(
POPUP_LINK_LIST_NEW_WARNING
,
POPUP_PRIORITY_NUMBER_WARNING
);
Popup_Link_List_Init
(
POPUP_LINK_LIST_WARNING
,
POPUP_PRIORITY_NUMBER_WARNING
);
Popup_Link_List_Init
(
POPUP_LINK_LIST_MASKED_WARNING
,
POPUP_PRIORITY_NUMBER_WARNING
);
PopupScheduling
.
Timer
=
0u
;
PopupScheduling
.
Current
=
POPUP_NONE
;
PopupScheduling
.
NewSnd
=
0u
;
PopupScheduling
.
WarningExist
=
0u
;
PopupScheduling
.
MaskReq
=
0u
;
PopupScheduling
.
LastMasked
=
POPUP_NONE
;
PopupScheduling
.
MaskedPolling
=
0u
;
};
/******************************************************************************
函数名:Popup_Scheduling_Service
功 能:调度弹出信息,更新当前应播放的弹出信息与应播放的报警音
可能导致播放的弹出信息发生切换的条件: 1.当前播放的弹出信息被删除
或 2.当前播放的弹出信息被屏蔽
或 3.有新弹出信息到来
或 4.当前弹出信息播放时间到
参 数:无
返回值:无
*******************************************************************************
注 意:该服务函数必须每100ms被调用一次
******************************************************************************/
void
Popup_Scheduling_Service
(
void
)
{
if
(
PopupScheduling
.
Timer
<
0xFFFFu
)
/*910101-1*/
{
PopupScheduling
.
Timer
++
;
}
/*===========================================================================
1.当前播放的弹出信息被删除
============================================================================*/
if
(
PopupScheduling
.
Current
<
(
uint8_t
)
POPUP_NUMBER_TOTAL
)
{
if
(
PopupStatus
[
PopupScheduling
.
Current
].
Status
==
POPUP_STATUS_DELETE
)
{
if
(
PopupStatus
[
PopupScheduling
.
Current
].
LinkList
==
POPUP_LINK_LIST_NEW_WARNING
)
/*首次播放*/
{
if
(((
PopupScheduling
.
Timer
>=
POPUP_DISP_TIME_MIN
)
&&
(
PopupScheduling
.
Timer
<
POPUP_DISP_TIME_NORMAL
)
)
||
(
PopupScheduling
.
Timer
==
0xFFFFu
)
)
/*超过最小播放时间,可以删除状态置为OFF*/
{
Popup_Link_List_Remove
(
PopupScheduling
.
Current
);
PopupStatus
[
PopupScheduling
.
Current
].
Status
=
POPUP_STATUS_OFF
;
if
(
PopupLinkList
[
POPUP_LINK_LIST_NEW_WARNING
].
Cur
!=
POPUP_NONE
)
/* 还有等待的报警需要播放*/
{
UpdateCurrentPopup
();
}
else
/* 没有报警要播放了*/
{
PopupScheduling
.
Current
=
POPUP_NONE
;
PopupScheduling
.
Timer
=
POPUP_DISP_TIME_NORMAL
;
}
}
}
else
/*循环播放可以直接删除*/
{
Popup_Link_List_Remove
(
PopupScheduling
.
Current
);
PopupStatus
[
PopupScheduling
.
Current
].
Status
=
POPUP_STATUS_OFF
;
if
(
PopupLinkList
[
POPUP_LINK_LIST_WARNING
].
Cur
!=
POPUP_NONE
)
{
PopupScheduling
.
Current
=
PopupLinkList
[
POPUP_LINK_LIST_WARNING
].
Cur
;
}
else
{
PopupScheduling
.
Current
=
POPUP_NONE
;
PopupScheduling
.
Timer
=
POPUP_DISP_TIME_NORMAL
;
}
}
}
else
if
(
PopupStatus
[
PopupScheduling
.
Current
].
Status
==
POPUP_STATUS_CLEAR
)
{
Popup_Link_List_Remove
(
PopupScheduling
.
Current
);
PopupStatus
[
PopupScheduling
.
Current
].
Status
=
POPUP_STATUS_OFF
;
PopupScheduling
.
Current
=
POPUP_NONE
;
PopupScheduling
.
Timer
=
POPUP_DISP_TIME_NORMAL
;
}
else
{}
}
/*===========================================================================
4.有新弹出信息到来
============================================================================*/
/*** #4.3:处理新到来的报警信息 ***/
if
((
PopupLinkList
[
POPUP_LINK_LIST_NEW_WARNING
].
Cur
!=
POPUP_NONE
)
&&
\
(
PopupStatus
[
PopupLinkList
[
POPUP_LINK_LIST_NEW_WARNING
].
Cur
].
Status
==
POPUP_STATUS_NEW
))
{
if
(
PopupScheduling
.
Current
!=
POPUP_NONE
)
/*当前有报警在播放*/
{
if
(
PopupScheduling
.
Current
<
(
uint8_t
)
POPUP_NUMBER_TOTAL
)
/*有效性检查*/
{
switch
(
PopupStatus
[
PopupScheduling
.
Current
].
LinkList
)
{
case
POPUP_LINK_LIST_NEW_WARNING
:
/*当前是报警信息在首次播放*/
/*报警信息可以打断报警信息,但被打断的报警信息必须至少播放达到或超过最小播放时间*/
if
(((
PopupScheduling
.
Timer
>=
POPUP_DISP_TIME_MIN
)
&&
(
PopupScheduling
.
Timer
<
POPUP_DISP_TIME_NORMAL
)
)
||
(
PopupScheduling
.
Timer
==
0xFFFFu
)
/*持续类报警解除*/
)
{
if
(
PopupScheduling
.
Current
!=
PopupLinkList
[
POPUP_LINK_LIST_NEW_WARNING
].
Cur
)
{
if
((
PopupAttributeTable
[
PopupScheduling
.
Current
].
DispMode
==
POPUP_MODE_SHORT_HINT
))
/*非持续播放的这类报警*/
{
/*Popup_Link_List_Remove(PopupScheduling.Current);从列表移除*/
/*PopupStatus[PopupScheduling.Current].Status = POPUP_STATUS_MASKED;.*/
/*************只报一次就屏蔽(不需要查询)的处理方式:改状态就行了*/
PopupStatus
[
PopupScheduling
.
Current
].
Status
=
POPUP_STATUS_NEW
;
/*改为新触发的报警,高优先级结束后重新报警*/
UpdateClassMbFirst
();
/*报警类的成员状态更新为首次*/
}
else
if
(
PopupAttributeTable
[
PopupScheduling
.
Current
].
DispMode
==
POPUP_MODE_LONG_WARNING
)
/*被打断的是要循环播放的*/
{
Popup_Link_List_Remove
(
PopupScheduling
.
Current
);
/*从列表移除*/
Popup_Link_List_Insert
(
POPUP_LINK_LIST_WARNING
,
PopupScheduling
.
Current
);
PopupStatus
[
PopupScheduling
.
Current
].
Status
=
POPUP_STATUS_LOOP
;
/*标记原信息进入循环播放*/
UpdateClassMbLoop
();
/*报警类的成员状态更新为循环*/
}
else
{}
}
UpdateCurrentPopup
();
/*更新当前报警 重置播放时间*/
}
break
;
/*910101-7 910101-5 */
case
POPUP_LINK_LIST_WARNING
:
/*当前是报警信息在循环播放*/
default
:
/*意外情况*/
UpdateCurrentPopup
();
/*更新当前报警*/
break
;
}
}
}
else
/*此信息到来时并无其他信息播放*/
{
UpdateCurrentPopup
();
/*更新当前报警*/
}
}
/*===========================================================================
6.当前弹出信息播放时间到
============================================================================*/
/*只在播放时间到的那个时间点做处理,超出时间认为当前无弹出信息播放,持续得报警不处理 */
if
(
(
PopupScheduling
.
Timer
==
POPUP_DISP_TIME_NORMAL
)
&&
(
POPUP_DISP_TIME_NORMAL
!=
0xFFFFu
)
)
/*910101-1*/
{
/*** #6.1:处理播放完的报警 ***/
if
(
PopupScheduling
.
Current
<
(
uint8_t
)
POPUP_NUMBER_TOTAL
)
{
switch
(
PopupStatus
[
PopupScheduling
.
Current
].
LinkList
)
{
case
POPUP_LINK_LIST_NEW_WARNING
:
/*首次报警链表*/
Popup_Link_List_Remove
(
PopupScheduling
.
Current
);
/*将当前报警移除报警列表*/
if
(
PopupAttributeTable
[
PopupScheduling
.
Current
].
DispMode
==
POPUP_MODE_SHORT_HINT
)
{
/*播放一次就隐藏且不要查询*/
PopupStatus
[
PopupScheduling
.
Current
].
Status
=
POPUP_STATUS_MASKED
;
}
else
if
(
PopupAttributeTable
[
PopupScheduling
.
Current
].
DispMode
==
POPUP_MODE_LONG_WARNING
)
{
/*循环显示的处理根据需要添加*/
Popup_Link_List_Insert
(
POPUP_LINK_LIST_WARNING
,
PopupScheduling
.
Current
);
/*将原信息转移至循环报警列表中*/
PopupStatus
[
PopupScheduling
.
Current
].
Status
=
POPUP_STATUS_LOOP
;
/*标记原信息进入循环播放*/
UpdateClassMbLoop
();
/*报警类的成员状态更新为循环*/
PopupLinkList
[
POPUP_LINK_LIST_WARNING
].
Cur
=
PopupStatus
[
PopupScheduling
.
Current
].
Next
;
}
else
{
/*其他类型需求需*/
}
break
;
case
POPUP_LINK_LIST_WARNING
:
/*循环报警链表*/
PopupLinkList
[
POPUP_LINK_LIST_WARNING
].
Cur
=
PopupStatus
[
PopupScheduling
.
Current
].
Next
;
break
;
default
:
break
;
}
}
/*** #6.2:查找下一个播放的报警 ***/
if
(
PopupLinkList
[
POPUP_LINK_LIST_NEW_WARNING
].
Cnt
)
{
/*有未播放过的报警*/
PopupScheduling
.
Current
=
PopupLinkList
[
POPUP_LINK_LIST_NEW_WARNING
].
Cur
;
}
else
if
(
PopupLinkList
[
POPUP_LINK_LIST_WARNING
].
Cnt
)
{
/*有循环播放的报警*/
PopupScheduling
.
Current
=
PopupLinkList
[
POPUP_LINK_LIST_WARNING
].
Cur
;
}
else
{
/*无报警需要播放*/
PopupScheduling
.
Current
=
POPUP_NONE
;
}
if
(
PopupScheduling
.
Current
<
(
uint8_t
)
POPUP_NUMBER_TOTAL
)
{
PopupScheduling
.
Timer
=
0u
;
if
(
PopupStatus
[
PopupScheduling
.
Current
].
Status
==
POPUP_STATUS_NEW
)
{
PopupStatus
[
PopupScheduling
.
Current
].
Status
=
POPUP_STATUS_FIRST
;
UpdateClassMbFirst
();
/*报警类的成员状态更新为首次*/
}
else
{
PopupStatus
[
PopupScheduling
.
Current
].
Status
=
POPUP_STATUS_LOOP
;
}
}
}
/*===========================================================================
7.更新报警存在状态
============================================================================*/
if
((
PopupLinkList
[
POPUP_LINK_LIST_NEW_WARNING
].
Cnt
!=
0u
)
||
\
(
PopupLinkList
[
POPUP_LINK_LIST_WARNING
].
Cnt
!=
0u
)
||
\
(
PopupLinkList
[
POPUP_LINK_LIST_MASKED_WARNING
].
Cnt
!=
0u
))
{
PopupScheduling
.
WarningExist
=
1u
;
}
else
{
PopupScheduling
.
WarningExist
=
0u
;
}
}
void
UpdateClassMbFirst
(
void
)
{
uint8_t
i
;
uint8_t
PopupMbr
;
if
(
PopupScheduling
.
Current
<
(
uint8_t
)
POPUP_NUMBER_TOTAL
)
{
if
(
PopupAttributeTable
[
PopupScheduling
.
Current
].
pMbrList
!=
NULL
)
/*如果是一个报警类*/
{
for
(
i
=
0u
;
i
<
PopupAttributeTable
[
PopupScheduling
.
Current
].
MbrCnt
;
i
++
)
/*更新该类下所有成员的状态*/
{
PopupMbr
=
PopupAttributeTable
[
PopupScheduling
.
Current
].
pMbrList
[
i
];
if
(
PopupStatus
[
PopupMbr
].
Status
==
POPUP_STATUS_NEW
)
{
PopupStatus
[
PopupMbr
].
Status
=
POPUP_STATUS_FIRST
;
/*标记成员进入首次播放*/
}
}
if
(
PopupStatus
[
PopupScheduling
.
Current
].
SndReqCode
==
0xFFu
)
/*更新声音请求码*/
{
PopupStatus
[
PopupScheduling
.
Current
].
SndReqCode
=
0x01u
;
}
else
{
PopupStatus
[
PopupScheduling
.
Current
].
SndReqCode
++
;
}
}
}
}
void
UpdateClassMbLoop
(
void
)
{
uint8_t
i
;
uint8_t
PopupMbr
;
if
(
PopupScheduling
.
Current
<
(
uint8_t
)
POPUP_NUMBER_TOTAL
)
{
if
(
PopupAttributeTable
[
PopupScheduling
.
Current
].
pMbrList
!=
NULL
)
/*如果原信息是一个报警类*/
{
for
(
i
=
0u
;
i
<
PopupAttributeTable
[
PopupScheduling
.
Current
].
MbrCnt
;
i
++
)
/*更新该类下所有成员的状态*/
{
PopupMbr
=
PopupAttributeTable
[
PopupScheduling
.
Current
].
pMbrList
[
i
];
if
(
PopupStatus
[
PopupMbr
].
Status
==
POPUP_STATUS_FIRST
)
{
PopupStatus
[
PopupMbr
].
Status
=
POPUP_STATUS_LOOP
;
/*标记成员进入循环播放*/
}
}
}
}
}
void
UpdateCurrentPopup
(
void
)
{
PopupScheduling
.
Current
=
PopupLinkList
[
POPUP_LINK_LIST_NEW_WARNING
].
Cur
;
/*新到来的报警进入当前播放*/
if
(
PopupScheduling
.
Current
<
(
uint8_t
)
POPUP_NUMBER_TOTAL
)
/*合法性检擦*/
{
PopupStatus
[
PopupScheduling
.
Current
].
Status
=
POPUP_STATUS_FIRST
;
/*标记此信息进入首次播放*/
PopupScheduling
.
Timer
=
0u
;
/*重置播放时间*/
/*910101-4*/
UpdateClassMbFirst
();
/*报警类的成员状态更新为首次*/
/*910101-6*/
}
}
/******************************************************************************
函数名:Popup_Request
功 能:请求播放一个弹出信息
参 数:PopupID:请求播放的弹出信息
返回值:无
******************************************************************************/
void
Popup_Request
(
uint8_t
PopupID
)
{
if
(
PopupID
<
(
uint8_t
)
POPUP_NUMBER_TOTAL
)
{
if
(
PopupStatus
[
PopupID
].
Status
==
POPUP_STATUS_OFF
)
{
if
(
PopupAttributeTable
[
PopupID
].
MbrCnt
==
0u
)
/*申请的报警是某报警类的成员*/
{
PopupStatus
[
PopupID
].
Status
=
POPUP_STATUS_NEW
;
/*置该弹出信息状态为新信息状态*/
PopupID
=
PopupAttributeTable
[
PopupID
].
Class
;
/*类成员不进入链表,获取该报警对应的报警类进行调度*/
Popup_Link_List_Remove
(
PopupID
);
/*将该报警类移出原报警列表*/
}
PopupStatus
[
PopupID
].
Status
=
POPUP_STATUS_NEW
;
Popup_Link_List_Insert
(
POPUP_LINK_LIST_NEW_WARNING
,
PopupID
);
}
else
if
(
PopupStatus
[
PopupID
].
Status
==
POPUP_STATUS_DELETE
)
{
/*有POPUP_STATUS_DELETE标志的一定是正在播放的信息
直接根据所在链表恢复状态即可*/
if
(
PopupStatus
[
PopupID
].
LinkList
==
POPUP_LINK_LIST_NEW_WARNING
)
{
PopupStatus
[
PopupID
].
Status
=
POPUP_STATUS_FIRST
;
}
else
if
(
PopupStatus
[
PopupID
].
LinkList
==
POPUP_LINK_LIST_WARNING
)
{
PopupStatus
[
PopupID
].
Status
=
POPUP_STATUS_LOOP
;
}
else
if
(
PopupStatus
[
PopupID
].
LinkList
==
POPUP_LINK_LIST_MASKED_WARNING
)
{
PopupStatus
[
PopupID
].
Status
=
POPUP_STATUS_MASKED
;
}
else
{
}
}
else
{
}
}
}
/******************************************************************************
函数名:Popup_Delete
功 能:请求解除播放一个弹出信息
参 数:PopupID:请求解除播放的弹出信息
返回值:无
******************************************************************************/
void
Popup_Delete
(
uint8_t
PopupID
)
{
uint8_t
i
;
uint8_t
PopupCls
;
uint8_t
PopupMbr
;
uint8_t
dis
=
0u
;
if
(
PopupID
<
(
uint8_t
)
POPUP_NUMBER_TOTAL
)
{
if
(
!
((
PopupStatus
[
PopupID
].
Status
==
POPUP_STATUS_OFF
)
||
\
(
PopupStatus
[
PopupID
].
Status
==
POPUP_STATUS_DELETE
)
||
\
(
PopupStatus
[
PopupID
].
Status
==
POPUP_STATUS_CLEAR
)))
{
if
(
PopupAttributeTable
[
PopupID
].
MbrCnt
==
0u
)
/*要删除的报警是某报警类的成员*/
{
Popup_Link_List_Remove
(
PopupID
);
PopupStatus
[
PopupID
].
Status
=
POPUP_STATUS_OFF
;
PopupCls
=
PopupAttributeTable
[
PopupID
].
Class
;
/*获取该报警对应的报警类*/
for
(
i
=
0u
;
i
<
PopupAttributeTable
[
PopupCls
].
MbrCnt
;
i
++
)
/*检查该类报警下的成员*/
{
PopupMbr
=
PopupAttributeTable
[
PopupCls
].
pMbrList
[
i
];
if
((
PopupStatus
[
PopupMbr
].
Status
==
POPUP_STATUS_NEW
)
||
\
(
PopupStatus
[
PopupMbr
].
Status
==
POPUP_STATUS_FIRST
)
||
\
(
PopupStatus
[
PopupMbr
].
Status
==
POPUP_STATUS_LOOP
)
||
\
(
PopupStatus
[
PopupMbr
].
Status
==
POPUP_STATUS_MASKED
))
{
dis
=
1u
;
}
}
if
(
dis
==
0u
)
{
PopupID
=
PopupCls
;
}
}
if
(
dis
==
0u
)
{
if
(
PopupScheduling
.
Current
==
PopupID
)
/*正在播放中的报警不能立即删除,置标志,由调度程序删除*/
{
PopupStatus
[
PopupID
].
Status
=
POPUP_STATUS_DELETE
;
}
else
{
Popup_Link_List_Remove
(
PopupID
);
PopupStatus
[
PopupID
].
Status
=
POPUP_STATUS_OFF
;
}
}
}
}
}
/******************************************************************************
函数名:Popup_Clear
功 能:请求立即清除播放一个弹出信息,无论该信息是否达到最小播放时间
用于IGN OFF时,立即清除弹出信息播放
参 数:PopupID:请求解除播放的弹出信息
返回值:无
******************************************************************************/
void
Popup_Clear
(
uint8_t
PopupID
)
{
uint8_t
i
;
uint8_t
PopupCls
;
uint8_t
PopupMbr
;
uint8_t
dis
=
0u
;
if
(
PopupID
<
(
uint8_t
)
POPUP_NUMBER_TOTAL
)
{
if
(
!
((
PopupStatus
[
PopupID
].
Status
==
POPUP_STATUS_OFF
)
||
\
(
PopupStatus
[
PopupID
].
Status
==
POPUP_STATUS_CLEAR
)))
{
if
(
PopupAttributeTable
[
PopupID
].
MbrCnt
==
0u
)
/*要删除的报警是某报警类的成员*/
{
Popup_Link_List_Remove
(
PopupID
);
PopupStatus
[
PopupID
].
Status
=
POPUP_STATUS_OFF
;
PopupCls
=
PopupAttributeTable
[
PopupID
].
Class
;
/*获取该报警对应的报警类*/
for
(
i
=
0u
;
i
<
PopupAttributeTable
[
PopupCls
].
MbrCnt
;
i
++
)
/*检查该类报警下的成员*/
{
PopupMbr
=
PopupAttributeTable
[
PopupCls
].
pMbrList
[
i
];
if
((
PopupStatus
[
PopupMbr
].
Status
==
POPUP_STATUS_NEW
)
||
\
(
PopupStatus
[
PopupMbr
].
Status
==
POPUP_STATUS_FIRST
)
||
\
(
PopupStatus
[
PopupMbr
].
Status
==
POPUP_STATUS_LOOP
)
||
\
(
PopupStatus
[
PopupMbr
].
Status
==
POPUP_STATUS_MASKED
))
{
dis
=
1u
;
}
}
if
(
dis
==
0u
)
{
PopupID
=
PopupCls
;
}
}
if
(
dis
==
0u
)
{
if
(
PopupScheduling
.
Current
==
PopupID
)
/*正在播放中的报警不能立即删除,置标志,由调度程序删除*/
{
PopupStatus
[
PopupID
].
Status
=
POPUP_STATUS_CLEAR
;
}
else
{
Popup_Link_List_Remove
(
PopupID
);
PopupStatus
[
PopupID
].
Status
=
POPUP_STATUS_OFF
;
}
}
}
}
}
/******************************************************************************
函数名:Popup_Mask_Request
功 能:请求屏蔽报警信息
可以在任意时刻发出屏蔽请求,只有满足屏蔽条件时,报警信息才会被屏蔽
参 数:无
返回值:无
******************************************************************************/
void
Popup_Mask_Request
(
void
)
{
PopupScheduling
.
MaskReq
=
1u
;
}
/******************************************************************************
函数名:Popup_Mask_Request
功 能:请求屏蔽报警信息
可以在任意时刻发出屏蔽请求,只有满足屏蔽条件时,报警信息才会被屏蔽
参 数:无
返回值:无
******************************************************************************/
void
Popup_Hint_Mask_Request
(
uint8_t
PopupID
)
{
if
(
PopupID
<
(
uint8_t
)
POPUP_NUMBER_TOTAL
)
{
if
(
PopupScheduling
.
Current
==
PopupID
)
/*正在播放中的提示信息不能立即屏蔽,置标志,由调度程序屏蔽*/
{
PopupStatus
[
PopupID
].
Status
=
POPUP_STATUS_MASKED
;
}
else
{
PopupStatus
[
PopupID
].
Status
=
POPUP_STATUS_LOOP
;
Popup_Link_List_Remove
(
PopupScheduling
.
Current
);
}
}
}
/******************************************************************************
函数名:Popup_Get_Status
功 能:获取弹出信息的当前状态
参 数:PopupID:弹出信息名称
返回值:弹出信息的当前状态
******************************************************************************/
uint8_t
Popup_Get_Status
(
uint8_t
PopupID
)
{
uint8_t
Status
;
if
(
PopupID
<
(
uint8_t
)
POPUP_NUMBER_TOTAL
)
{
Status
=
PopupStatus
[
PopupID
].
Status
;
}
else
{
Status
=
POPUP_STATUS_OFF
;
}
return
Status
;
}
/******************************************************************************
函数名:Popup_Get_Current_Type
功 能:获取当前播放的弹出信息的类型
参 数:无
返回值:当前播放的弹出信息的类型
******************************************************************************/
uint8_t
Popup_Get_Current_Type
(
void
)
{
uint8_t
m8
;
if
(
PopupScheduling
.
Current
<
(
uint8_t
)
POPUP_NUMBER_TOTAL
)
{
m8
=
PopupAttributeTable
[
PopupScheduling
.
Current
].
DispMode
;
}
else
{
m8
=
POPUP_NONE
;
}
return
m8
;
}
/******************************************************************************
函数名:Popup_Get_Current_Message
功 能:获取当前应播放的弹出信息
参 数:无
返回值:当前应播放的弹出信息
******************************************************************************/
uint8_t
Popup_Get_Current_Message
(
void
)
{
uint8_t
m8
;
if
(
PopupScheduling
.
Current
<
(
uint8_t
)
POPUP_NUMBER_TOTAL
)
{
m8
=
PopupAttributeTable
[
PopupScheduling
.
Current
].
Class
;
}
else
{
m8
=
POPUP_NONE
;
}
return
m8
;
}
/******************************************************************************
函数名:Popup_Get_Current_Sound
功 能:获取当前应播放的声音
参 数:无
返回值:当前应播放的声音
******************************************************************************/
uint8_t
Popup_Get_Current_Sound
(
void
)
{
uint8_t
m8
;
if
(
PopupScheduling
.
Current
<
(
uint8_t
)
POPUP_NUMBER_TOTAL
)
{
m8
=
PopupAttributeTable
[
PopupScheduling
.
Current
].
Snd
;
}
else
{
m8
=
SND_NONE
;
}
return
m8
;
}
/******************************************************************************
函数名:Popup_Get_Current_Sound_Req_Code
功 能:获取当前应播放的声音的请求码
参 数:无
返回值:请求码
******************************************************************************/
uint8_t
Popup_Get_Current_Sound_Req_Code
(
void
)
{
uint8_t
m8
;
if
(
PopupScheduling
.
Current
<
(
uint8_t
)
POPUP_NUMBER_TOTAL
)
{
if
(
PopupAttributeTable
[
PopupScheduling
.
Current
].
SndMode
==
POPUP_MODE_MULTI
)
{
m8
=
PopupStatus
[
PopupScheduling
.
Current
].
SndReqCode
;
}
else
{
if
(
PopupStatus
[
PopupScheduling
.
Current
].
Status
==
POPUP_STATUS_FIRST
)
{
m8
=
PopupStatus
[
PopupScheduling
.
Current
].
SndReqCode
;
}
else
{
m8
=
0u
;
}
}
}
else
{
m8
=
0u
;
}
return
m8
;
}
/******************************************************************************
函数名:Popup_Get_Warning_Status
功 能:获取报警信息的状态,用于惊叹号标志的播放
参 数:无
返回值:0 - 当前没有报警信息
1 - 当前有报警信息(新报警信息 或 循环播放报警信息 或 已屏蔽的报警信息)
******************************************************************************/
uint8_t
Popup_Get_Warning_Status
(
void
)
{
return
PopupScheduling
.
WarningExist
;
}
/******************************************************************************
函数名:Popup_Get_First_Masked_Warning
功 能:获取屏蔽的报警信息中的第一个报警信息
当前没有已屏蔽的报警信息时,返回 POPUP_NONE
参 数:无
返回值:已屏蔽的第一个报警信息
******************************************************************************/
uint8_t
Popup_Get_First_Masked_Warning
(
void
)
{
uint8_t
i
,
m8
;
uint8_t
PopupID
;
m8
=
POPUP_NONE
;
if
(
PopupLinkList
[
POPUP_LINK_LIST_MASKED_WARNING
].
Cnt
)
{
i
=
0u
;
while
(
i
<
PopupLinkList
[
POPUP_LINK_LIST_MASKED_WARNING
].
PrioNum
)
{
PopupID
=
PopupLinkList
[
POPUP_LINK_LIST_MASKED_WARNING
].
Prio
[
i
].
First
;
if
(
PopupID
!=
POPUP_NONE
)
{
m8
=
PopupID
;
}
i
++
;
}
}
else
{
m8
=
POPUP_NONE
;
}
return
m8
;
}
/******************************************************************************
函数名:Popup_Get_Last_Masked_Warning
功 能:获取屏蔽的报警信息中的最后一个报警信息
当前没有已屏蔽的报警信息时,返回 POPUP_NONE
参 数:无
返回值:已屏蔽的最后一个报警信息
******************************************************************************/
uint8_t
Popup_Get_Last_Masked_Warning
(
void
)
{
uint8_t
i
,
m8
;
uint8_t
j
;
uint8_t
PopupID
;
m8
=
POPUP_NONE
;
if
(
PopupLinkList
[
POPUP_LINK_LIST_MASKED_WARNING
].
Cnt
)
{
i
=
0u
;
while
(
i
<
PopupLinkList
[
POPUP_LINK_LIST_MASKED_WARNING
].
PrioNum
)
{
i
++
;
j
=
PopupLinkList
[
POPUP_LINK_LIST_MASKED_WARNING
].
PrioNum
-
i
;
PopupID
=
PopupLinkList
[
POPUP_LINK_LIST_MASKED_WARNING
].
Prio
[
j
].
Last
;
if
(
PopupID
!=
POPUP_NONE
)
{
m8
=
PopupID
;
}
}
}
else
{
m8
=
POPUP_NONE
;
}
return
m8
;
}
/******************************************************************************
函数名:Popup_Get_Masked_Warning_Msg
功 能:获取屏蔽的报警信息
当前没有已屏蔽的报警信息时,返回 POPUP_NONE
参 数:无
返回值:已屏蔽的报警信息
******************************************************************************/
uint8_t
Popup_Get_Masked_Warning_Msg
(
void
)
{
uint8_t
PopupID
,
m8
;
PopupID
=
PopupLinkList
[
POPUP_LINK_LIST_MASKED_WARNING
].
Cur
;
if
(
PopupID
<
(
uint8_t
)
POPUP_NUMBER_TOTAL
)
{
m8
=
PopupAttributeTable
[
PopupID
].
Class
;
}
else
{
m8
=
POPUP_NONE
;
}
return
m8
;
}
/******************************************************************************
函数名:Popup_Masked_Warning_Polling_Reset
功 能:重置已屏蔽的报警查询起点
参 数:Mode:查询模式 POPUP_POLLING_FORWARD - 正向查找模式
POPUP_POLLING_REVERSE - 逆向查找模式
返回值:无
******************************************************************************/
void
Popup_Masked_Warning_Polling_Reset
(
uint8_t
Mode
)
{
uint8_t
PopupID
;
if
(
Mode
==
POPUP_POLLING_FORWARD
)
{
PopupID
=
Popup_Get_First_Masked_Warning
();
}
else
{
PopupID
=
Popup_Get_Last_Masked_Warning
();
}
PopupLinkList
[
POPUP_LINK_LIST_MASKED_WARNING
].
Cur
=
PopupID
;
}
/******************************************************************************
函数名:Popup_Masked_Warning_Polling
功 能:查询已屏蔽的报警
每调用一次此函数,已屏蔽报警指针会按指定方向移动一位,当指针已移指定方向
上的最后一个报警信息时,再次向同一方向查询,当前的已屏蔽报警信息会变为
POPUP_NONE 表示报警查询已结束
例如:当前有已屏蔽报警 A、B、C、D,调用Popup_Masked_Warning_Polling_Reset
函数,设定方向为 POPUP_POLLING_FORWARD 时,已屏蔽报警指针会指向报警A,而后,
调用该函数设定方向为 POPUP_POLLING_FORWARD 时已屏蔽报警指针即指向报警B.
重复调用此函数且方向不变至已屏蔽报警指针指向报警D后,再以相同方向调用此函
数则返回 POPUP_NONE,表示查询已结束
通过调用Popup_Get_Masked_Warning可读出当前已屏蔽报警指针指向的报警
参 数:Mode:查询模式 POPUP_POLLING_FORWARD - 正向查找模式
POPUP_POLLING_REVERSE - 逆向查找模式
返回值:无
******************************************************************************/
void
Popup_Masked_Warning_Polling
(
uint8_t
Mode
)
{
uint8_t
PopupEnd
;
uint8_t
PopupID
;
PopupID
=
PopupLinkList
[
POPUP_LINK_LIST_MASKED_WARNING
].
Cur
;
if
(
PopupID
!=
POPUP_NONE
)
{
if
(
Mode
==
POPUP_POLLING_FORWARD
)
{
PopupEnd
=
Popup_Get_Last_Masked_Warning
();
if
(
PopupEnd
!=
POPUP_NONE
)
{
if
(
PopupID
==
PopupEnd
)
{
PopupLinkList
[
POPUP_LINK_LIST_MASKED_WARNING
].
Cur
=
POPUP_NONE
;
}
else
{
PopupLinkList
[
POPUP_LINK_LIST_MASKED_WARNING
].
Cur
=
PopupStatus
[
PopupID
].
Next
;
}
}
}
else
{
PopupEnd
=
Popup_Get_First_Masked_Warning
();
if
(
PopupEnd
!=
POPUP_NONE
)
{
if
(
PopupID
==
PopupEnd
)
{
PopupLinkList
[
POPUP_LINK_LIST_MASKED_WARNING
].
Cur
=
POPUP_NONE
;
}
else
{
PopupLinkList
[
POPUP_LINK_LIST_MASKED_WARNING
].
Cur
=
PopupStatus
[
PopupID
].
Prev
;
}
}
}
}
}
/******************************************************************************
函数名:Popup_Link_List_Init
功 能:初始化链表
参 数:LinkListID:链表名称
PrioNum :该链表下优先级数
返回值:无
******************************************************************************/
void
Popup_Link_List_Init
(
uint8_t
LinkListID
,
uint8_t
PrioNum
)
{
uint8_t
i
;
PopupLinkList
[
LinkListID
].
Cnt
=
0u
;
PopupLinkList
[
LinkListID
].
Cur
=
POPUP_NONE
;
PopupLinkList
[
LinkListID
].
PrioNum
=
PrioNum
;
for
(
i
=
0u
;
i
<
PrioNum
;
i
++
)
{
PopupLinkList
[
LinkListID
].
Prio
[
i
].
First
=
POPUP_NONE
;
PopupLinkList
[
LinkListID
].
Prio
[
i
].
Last
=
POPUP_NONE
;
}
}
/******************************************************************************
函数名:Popup_Link_List_Insert
功 能:向链表中插入弹出信息
参 数:LinkListID:链表名称
PopupID :弹出信息名称
返回值:无
******************************************************************************/
void
Popup_Link_List_Insert
(
uint8_t
LinkListID
,
uint8_t
PopupID
)
/*823008-8*/
{
uint8_t
i
;
uint8_t
FoundID
;
uint8_t
Prio
;
uint8_t
InsResult
;
uint8_t
SemeType_Pirod
;
/*报警类型相同(PEPS,SHORT_HINT,LONG_HINT)*/
SemeType_Pirod
=
0u
;
if
(
PopupID
<
(
uint8_t
)
POPUP_NUMBER_TOTAL
)
{
if
(
PopupStatus
[
PopupID
].
LinkList
!=
LinkListID
)
/*弹出信息已经不在前链表中*/
{
Prio
=
PopupAttributeTable
[
PopupID
].
Priority
;
/*获取弹出信息优先级*/
if
(
PopupLinkList
[
LinkListID
].
Cnt
==
0u
)
/*当前链表下没有任何弹出信息*/
{
PopupStatus
[
PopupID
].
Prev
=
PopupID
;
/*因只有一个弹出信息,前后弹出信息均指向自己*/
PopupStatus
[
PopupID
].
Next
=
PopupID
;
PopupLinkList
[
LinkListID
].
Cur
=
PopupID
;
/*当前此链表指针指向该弹出信息*/
PopupLinkList
[
LinkListID
].
Prio
[
Prio
].
First
=
PopupID
;
/*优先级维护*/
PopupLinkList
[
LinkListID
].
Prio
[
Prio
].
Last
=
PopupID
;
}
else
/*当前链表已有弹出信息*/
{
InsResult
=
0u
;
/*清插入成功标示*/
for
(
i
=
0u
;
i
<=
Prio
;
i
++
)
/*从当前优先级起前向查找新弹出信息的接入点*/
{
FoundID
=
PopupLinkList
[
LinkListID
].
Prio
[
Prio
-
i
].
Last
;
if
(
FoundID
!=
POPUP_NONE
)
/*找到插入点*/
{
/*需要插入的报警ID的优先级==找到的插入点优先级 && 类型相同(SHORT_HINT,LONG_HINT)*/
if
(
(
PopupAttributeTable
[
PopupID
].
Priority
==
PopupAttributeTable
[
FoundID
].
Priority
)
&&
(
((
PopupAttributeTable
[
PopupID
].
DispMode
==
POPUP_MODE_SHORT_HINT
)
&&
(
PopupAttributeTable
[
FoundID
].
DispMode
==
POPUP_MODE_SHORT_HINT
))
||
((
PopupAttributeTable
[
PopupID
].
DispMode
==
POPUP_MODE_LONG_HINT
)
&&
(
PopupAttributeTable
[
FoundID
].
DispMode
==
POPUP_MODE_LONG_HINT
))
)
)
{
SemeType_Pirod
=
1u
;
/*符合相同优先级打断规则*/
}
if
(
SemeType_Pirod
==
1u
)
{
FoundID
=
PopupLinkList
[
LinkListID
].
Prio
[
Prio
].
First
;
PopupStatus
[
PopupStatus
[
FoundID
].
Prev
].
Next
=
PopupID
;
/*链接前一个*/
PopupStatus
[
PopupID
].
Prev
=
PopupStatus
[
FoundID
].
Prev
;
/*插到此类型的最前面*/
PopupStatus
[
PopupID
].
Next
=
FoundID
;
PopupStatus
[
FoundID
].
Prev
=
PopupID
;
/* PopupStatus[FoundID].Next 保持不变*/
InsResult
=
1u
;
/*插入成功*/
}
else
/*其他情况按照优先级排队规则插入*/
{
PopupStatus
[
PopupID
].
Prev
=
FoundID
;
/*插入弹出信息,维护链表*/
PopupStatus
[
PopupID
].
Next
=
PopupStatus
[
FoundID
].
Next
;
PopupStatus
[
PopupStatus
[
FoundID
].
Next
].
Prev
=
PopupID
;
PopupStatus
[
FoundID
].
Next
=
PopupID
;
InsResult
=
1u
;
/*插入成功*/
}
break
;
}
}
if
(
InsResult
==
0u
)
/*前向查找时未能成功插入新弹出信息则转入后向查找*/
{
for
(
i
=
Prio
+
1u
;
i
<
PopupLinkList
[
LinkListID
].
PrioNum
;
i
++
)
{
FoundID
=
PopupLinkList
[
LinkListID
].
Prio
[
i
].
First
;
if
(
FoundID
!=
POPUP_NONE
)
/*找到插入点*/
{
PopupStatus
[
PopupID
].
Next
=
FoundID
;
/*插入弹出信息,维护链表*/
PopupStatus
[
PopupID
].
Prev
=
PopupStatus
[
FoundID
].
Prev
;
PopupStatus
[
PopupStatus
[
FoundID
].
Prev
].
Next
=
PopupID
;
PopupStatus
[
FoundID
].
Prev
=
PopupID
;
break
;
}
}
}
if
(
Prio
<
PopupAttributeTable
[
PopupLinkList
[
LinkListID
].
Cur
].
Priority
)
/*910101-2 910101-3 */
{
PopupLinkList
[
LinkListID
].
Cur
=
PopupID
;
/*将当前此链表指针指向更高优先级弹出信息*/
}
if
(
(
Prio
<
PopupAttributeTable
[
PopupLinkList
[
LinkListID
].
Cur
].
Priority
)
||
((
PopupAttributeTable
[
PopupLinkList
[
LinkListID
].
Cur
].
DispMode
==
POPUP_MODE_SHORT_HINT
)
&&
/*短时提示类相同优先级可以打断*/
(
Prio
<=
PopupAttributeTable
[
PopupLinkList
[
LinkListID
].
Cur
].
Priority
))
||
((
PopupAttributeTable
[
PopupLinkList
[
LinkListID
].
Cur
].
DispMode
==
POPUP_MODE_LONG_HINT
)
&&
/*长时提示类相同优先级可以打断*/
(
Prio
<=
PopupAttributeTable
[
PopupLinkList
[
LinkListID
].
Cur
].
Priority
))
/*此时没有报警触发的情况*/
)
{
PopupLinkList
[
LinkListID
].
Cur
=
PopupID
;
/*将当前此链表指针指向更高优先级弹出信息*/
}
if
(
PopupLinkList
[
LinkListID
].
Prio
[
Prio
].
First
==
POPUP_NONE
)
/*当前优先级下尚无弹出信息*/
{
PopupLinkList
[
LinkListID
].
Prio
[
Prio
].
First
=
PopupID
;
/*则当前优先级下的首末弹出信息均为此新弹出信息*/
PopupLinkList
[
LinkListID
].
Prio
[
Prio
].
Last
=
PopupID
;
}
else
/*当前优先级下有弹出信息*/
{
if
(
SemeType_Pirod
==
1u
)
{
PopupLinkList
[
LinkListID
].
Prio
[
Prio
].
First
=
PopupID
;
}
else
{
PopupLinkList
[
LinkListID
].
Prio
[
Prio
].
Last
=
PopupID
;
/*依照插入规则,新弹出信息排列于此优先级下的末位*/
}
}
}
PopupLinkList
[
LinkListID
].
Cnt
++
;
PopupStatus
[
PopupID
].
LinkList
=
LinkListID
;
/*标记弹出信息所在链表*/
}
}
}
/******************************************************************************
函数名:Popup_Link_List_Remove
功 能:从弹出信息所在链表中移除弹出信息
参 数:PopupID :弹出信息名称
返回值:无
******************************************************************************/
void
Popup_Link_List_Remove
(
uint8_t
PopupID
)
{
uint8_t
Prio
;
uint8_t
LinkListID
;
if
(
PopupID
<
(
uint8_t
)
POPUP_NUMBER_TOTAL
)
{
LinkListID
=
PopupStatus
[
PopupID
].
LinkList
;
if
(
LinkListID
!=
POPUP_LINK_LIST_NONE
)
{
if
(
PopupLinkList
[
LinkListID
].
Cnt
)
{
PopupLinkList
[
LinkListID
].
Cnt
--
;
}
Prio
=
PopupAttributeTable
[
PopupID
].
Priority
;
/*获取弹出信息优先级*/
if
(
PopupLinkList
[
LinkListID
].
Cnt
==
0u
)
/*删除后当前链表已下没有任何弹出信息*/
{
PopupLinkList
[
LinkListID
].
Prio
[
Prio
].
First
=
POPUP_NONE
;
/*优先级维护*/
PopupLinkList
[
LinkListID
].
Prio
[
Prio
].
Last
=
POPUP_NONE
;
PopupLinkList
[
LinkListID
].
Cur
=
POPUP_NONE
;
/*重置当前此链表指针*/
}
else
{
if
(
PopupID
==
PopupLinkList
[
LinkListID
].
Prio
[
Prio
].
First
)
/*lmj报警在当前队列中优先级第一*/
{
if
(
PopupLinkList
[
LinkListID
].
Prio
[
Prio
].
First
==
PopupLinkList
[
LinkListID
].
Prio
[
Prio
].
Last
)
/*lmj如果当前就自己*/
{
PopupLinkList
[
LinkListID
].
Prio
[
Prio
].
First
=
POPUP_NONE
;
/*lmj当前优先级中没有报警了*/
PopupLinkList
[
LinkListID
].
Prio
[
Prio
].
Last
=
POPUP_NONE
;
/*lmj当前优先级中没有报警了*/
}
else
{
PopupLinkList
[
LinkListID
].
Prio
[
Prio
].
First
=
PopupStatus
[
PopupID
].
Next
;
/*lmj下一个提升为最高优先级*/
}
}
else
if
(
PopupID
==
PopupLinkList
[
LinkListID
].
Prio
[
Prio
].
Last
)
{
PopupLinkList
[
LinkListID
].
Prio
[
Prio
].
Last
=
PopupStatus
[
PopupID
].
Prev
;
/*lmj倒数第二优先级改为最低优先级*/
}
else
{}
if
(
PopupLinkList
[
LinkListID
].
Cur
==
PopupID
)
{
PopupLinkList
[
LinkListID
].
Cur
=
PopupStatus
[
PopupID
].
Next
;
/*下一个立刻变为当前*/
}
PopupStatus
[
PopupStatus
[
PopupID
].
Prev
].
Next
=
PopupStatus
[
PopupID
].
Next
;
/*lmj 上下衔接*/
PopupStatus
[
PopupStatus
[
PopupID
].
Next
].
Prev
=
PopupStatus
[
PopupID
].
Prev
;
}
PopupStatus
[
PopupID
].
Prev
=
PopupID
;
/*弹出信息被删除,前后弹出信息均指向自己*/
PopupStatus
[
PopupID
].
Next
=
PopupID
;
PopupStatus
[
PopupID
].
LinkList
=
POPUP_LINK_LIST_NONE
;
/*弹出信息已不在任何链表中*/
}
}
}
void
PopupAndSound_Delete
(
uint8_t
PopupID
)
{
if
(
PopupID
<
(
uint8_t
)
POPUP_NUMBER_TOTAL
)
{
Popup_Delete
(
PopupID
);
Sound_Delete
(
PopupAttributeTable
[
PopupID
].
Snd
);
}
}
\ No newline at end of file
utility/le19删除超速报警临时程序/Popups.c
deleted
100644 → 0
View file @
0168f7cd
#include "Popups.h"
#include "Popup_Interface.h"
#include "Common_Interface.h"
#include "Communication_Over_CAN.h"
#include "Services_ODO.h"
#include "Line_In.h"
#include "Services_Interval.h"
#include "Telltales_Lib.h"
#include "Telltales_user.h"
#include "Gauge_Display.h"
#include "Radar_R3.h"
uint8_t
OverSpeed
;
uint8_t
OIL_Low_popup_flag
;
uint8_t
RADAR_SOUND
;
/*雷达声音*/
uint8_t
LowBrakeFluid_Clock
=
0u
;
uint8_t
AirBagError_Clock
=
0u
;
uint16_t
ODO_last
=
0u
;
uint8_t
TCU_FAILURE_Sts
=
0u
;
uint8_t
TCU_FAILURE_Sts_last
=
0u
;
uint8_t
ParkBrake_NoRreleased_Clock
=
0u
;
uint16_t
TCU_OVT_5MIN_Clock
=
0u
;
uint16_t
TCU_OVT_STOP_Clock
=
0u
;
uint8_t
FUEL_Low_Check
=
0u
;
uint8_t
CPDWarningSts
=
0u
;
uint8_t
CPDWarning_Clock
=
0u
;
uint8_t
CPDWarning_Valid
=
0u
;
uint8_t
Engine_Status_Delay_Flag
=
0u
;
uint8_t
POP_LowOilPressure_Clock
=
0u
;
uint8_t
POP_3S_Clock
=
0u
;
uint8_t
IGstPopup
=
0u
;
uint8_t
TurnTo_Flag
=
0
;
uint16_t
SelfCheck_time
=
50
;
uint16_t
Door_Warningtimer
;
void
SetRADAR_SOUND
(
uint8_t
Level
)
{
if
(
Level
==
RADAR_SND_2Hz
)
{
RADAR_SOUND
=
RADAR_SND_2Hz
;
}
else
if
(
Level
==
RADAR_SND_4Hz
)
{
RADAR_SOUND
=
RADAR_SND_4Hz
;
}
else
if
(
Level
==
RADAR_SND_CONTINUOUS
)
{
RADAR_SOUND
=
RADAR_SND_CONTINUOUS
;
}
else
{
RADAR_SOUND
=
255u
;
/*未知取消*/
}
}
void
Popups_KL15_Init
(
void
)
{
SelfCheck_time
=
0
;
}
void
Popups_IG_OFF_Init
(
void
)
{
SelfCheck_time
=
50u
;
}
void
Popups_Management_Service
(
void
)
{
uint8_t
PopupSnd
;
/*报警触发*/
Popups_Polling
(
);
/*获取调度的声音报警*/
PopupSnd
=
Popup_Get_Current_Sound
(
);
/*根据报警PopupScheduling.Current取出声音音源*/
/*执行调度声音*/
Popups_Sound_Playing
(
PopupSnd
);
}
void
Popups_Polling
(
void
)
{
// uint8_t ReqCode;
uint8_t
IGstPopup1
;
uint16_t
m_Vspeed
;
m_Vspeed
=
Common_Get_Disp_V_Speed
(
);
IGstPopup1
=
Common_Get_IG_Sts
(
);
if
(
SelfCheck_time
<
(
POWERON_SCAN_TIMER
/
100
)
+
5u
)
{
SelfCheck_time
++
;
PopupAndSound_Delete
(
POPUP_Radar_Changming
);
PopupAndSound_Delete
(
POPUP_Radar_1HZ
);
PopupAndSound_Delete
(
POPUP_Radar_2HZ
);
PopupAndSound_Delete
(
POPUP_Radar_4HZ
);
PopupAndSound_Delete
(
POPUP_EPB_Status
);
PopupAndSound_Delete
(
POPUP_SEATBELT_DR_1HZ
);
PopupAndSound_Delete
(
POPUP_SEATBELT_DR_2HZ
);
//PopupAndSound_Delete(POPUP_DoorOpen);
PopupAndSound_Delete
(
POPUP_DoorOpen_1HZ
);
PopupAndSound_Delete
(
POPUP_EBD_fault
);
PopupAndSound_Delete
(
POPUP_ABS
);
PopupAndSound_Delete
(
POPUP_EPS
);
PopupAndSound_Delete
(
POPUP_Park_Brak
);
PopupAndSound_Delete
(
POPUP_MotorFault
);
PopupAndSound_Delete
(
POPUP_SOC_Fault
);
PopupAndSound_Delete
(
POPUP_InsulationFault
);
PopupAndSound_Delete
(
POPUP_SOC_HT
);
PopupAndSound_Delete
(
POPUP_Energy_Recovery
);
PopupAndSound_Delete
(
POPUP_Energy_Recovery_1
);
PopupAndSound_Delete
(
POPUP_ECO
);
PopupAndSound_Delete
(
POPUP_READY
);
PopupAndSound_Delete
(
POPUP_PowerLimit
);
PopupAndSound_Delete
(
POPUP_SOC_LP
);
PopupAndSound_Delete
(
POPUP_SOC_CF
);
PopupAndSound_Delete
(
POPUP_SystemFault
);
PopupAndSound_Delete
(
POPUP_SystemFault1
);
PopupAndSound_Delete
(
POPUP_GearFault
);
PopupAndSound_Delete
(
POPUP_WeightOverload
);
PopupAndSound_Delete
(
POPUP_RemoteLocking
);
PopupAndSound_Delete
(
POPUP_PositionNotClosed
);
PopupAndSound_Delete
(
POPUP_DepartureReminder
);
PopupAndSound_Delete
(
POPUP_OTA_0
);
PopupAndSound_Delete
(
POPUP_OTA_1
);
PopupAndSound_Delete
(
POPUP_OTA_2
);
PopupAndSound_Delete
(
POPUP_OTA_3
);
PopupAndSound_Delete
(
POPUP_OTA_4
);
PopupAndSound_Delete
(
POPUP_OTA_5
);
PopupAndSound_Delete
(
POPUP_ESC
);
//PopupAndSound_Delete(POPUP_Over_Speed);
if
(
Get_LINE_IN_Sts
(
LINE_IN_DOOROPEN
)
==
1u
)
{
Popup_Request
(
POPUP_DoorOpen
);
}
}
else
{
//制动液位低
if
(
Get_TelltalesLedSts
(
m_LED_BrakeSystemFault
)
==
1u
)
{
Popup_Request
(
POPUP_EPB_Status
);
}
else
{
PopupAndSound_Delete
(
POPUP_EPB_Status
);
}
//驻车制动
if
((
Get_ID_18FAB027_Sig_VCUHandbrakeSts
()
==
1
)
&&
(
Get_DispVechileSpeed
()
>
50u
))
{
Popup_Request
(
POPUP_Park_Brak
);
}
else
{
PopupAndSound_Delete
(
POPUP_Park_Brak
);
}
// EBD故障
if
(
CAN_MSG_Status
(
ID_can0x18F0010B_Msg_Count
)
==
CAN_SIG_NORMAL
)
{
if
(
Get_TelltalesLedSts
(
m_LED_EBD_fault
)
==
1u
)
{
Popup_Request
(
POPUP_EBD_fault
);
}
else
{
PopupAndSound_Delete
(
POPUP_EBD_fault
);
}
}
else
{
PopupAndSound_Delete
(
POPUP_EBD_fault
);
}
if
(
CAN_MSG_Status
(
ID_can0x18F0010B_Msg_Count
)
==
CAN_SIG_NORMAL
)
{
// ABS故障
if
(
Get_TelltalesLedSts
(
m_LED_ABS
)
==
1u
)
{
Popup_Request
(
POPUP_ABS
);
}
else
{
PopupAndSound_Delete
(
POPUP_ABS
);
}
}
else
{
PopupAndSound_Delete
(
POPUP_ABS
);
}
if
(
Common_Get_IG_Sts
()
==
1u
)
{
if
(
CAN_MSG_Status
(
ID_can0x18FECA10_Msg_Count
)
==
CAN_SIG_NORMAL
)
{
// EPS故障
if
(
Get_ID_18FECA10_Sig_EPSMalfunctionIndicatorLamp
(
)
==
1u
)
{
Popup_Request
(
POPUP_EPS
);
}
else
{
PopupAndSound_Delete
(
POPUP_EPS
);
}
}
else
{
PopupAndSound_Delete
(
POPUP_EPS
);
}
}
else
{
PopupAndSound_Delete
(
POPUP_EPS
);
}
//电机故障
if
(
Get_TelltalesLedSts
(
m_LED_MotorFault
)
==
1u
)
{
Popup_Request
(
POPUP_MotorFault
);
}
else
{
PopupAndSound_Delete
(
POPUP_MotorFault
);
}
//动力电池故障
if
(
(
Get_TelltalesLedSts
(
m_LED_SOC_Fault
)
==
1u
)
)
{
Popup_Request
(
POPUP_SOC_Fault
);
}
else
{
PopupAndSound_Delete
(
POPUP_SOC_Fault
);
}
//高压绝缘故障
if
(
Get_TelltalesLedSts
(
m_LED_InsulationFault
)
==
1u
)
{
Popup_Request
(
POPUP_InsulationFault
);
}
else
{
PopupAndSound_Delete
(
POPUP_InsulationFault
);
}
//电池热失控
if
(
Get_TelltalesLedSts
(
m_LED_SOC_HT
)
==
1u
)
{
Popup_Request
(
POPUP_SOC_HT
);
}
else
{
PopupAndSound_Delete
(
POPUP_SOC_HT
);
}
//门开报警
if
(
Get_LINE_IN_Sts
(
LINE_IN_DOOROPEN
)
==
1u
)
{
Popup_Request
(
POPUP_DoorOpen
);
if
(
m_Vspeed
>=
100u
)
{
if
(
Door_Warningtimer
<=
600u
)
{
Door_Warningtimer
++
;
Popup_Request
(
POPUP_DoorOpen_1HZ
);
}
else
{
PopupAndSound_Delete
(
POPUP_DoorOpen_1HZ
);
}
}
else
{
PopupAndSound_Delete
(
POPUP_DoorOpen_1HZ
);
}
}
else
{
Door_Warningtimer
=
0u
;
PopupAndSound_Delete
(
POPUP_DoorOpen_1HZ
);
PopupAndSound_Delete
(
POPUP_DoorOpen
);
}
//Energy_Recovery
//if ( Get_TelltalesLedSts(m_LED_Energy_Recovery) == 1u )
//{
// Popup_Request(POPUP_Energy_Recovery);
//}
//else
//{
// PopupAndSound_Delete(POPUP_Energy_Recovery);
//}
// ECO状态激活
if
(
Get_TelltalesLedSts
(
m_LED_ECO
)
==
1u
)
{
Popup_Request
(
POPUP_ECO
);
}
else
{
PopupAndSound_Delete
(
POPUP_ECO
);
}
// READY状态激活
if
(
Get_TelltalesLedSts
(
m_LED_READY
)
==
1u
)
{
Popup_Request
(
POPUP_READY
);
}
else
{
PopupAndSound_Delete
(
POPUP_READY
);
}
//限功率报警
if
(
Get_TelltalesLedSts
(
m_LED_PowerLimit
)
==
1u
)
{
Popup_Request
(
POPUP_PowerLimit
);
}
else
{
PopupAndSound_Delete
(
POPUP_PowerLimit
);
}
//蓄电池电量低
if
(
Get_TelltalesLedSts
(
m_LED_SOC_LP
)
==
1u
)
{
Popup_Request
(
POPUP_SOC_LP
);
}
else
{
PopupAndSound_Delete
(
POPUP_SOC_LP
);
}
//蓄电池充电故障
if
(
Get_TelltalesLedSts
(
m_LED_SOC_CF
)
==
1u
)
// if(Get_ID_18FAB027_Sig_VCUDCDCWorkSts( ) == 0)
{
Popup_Request
(
POPUP_SOC_CF
);
}
else
{
PopupAndSound_Delete
(
POPUP_SOC_CF
);
}
//高压互锁指示灯
if
(
Get_TelltalesLedSts
(
m_LED_HighPressureInterlock
)
==
1u
)
{
Popup_Request
(
POPUP_WeightOverload
);
}
else
{
PopupAndSound_Delete
(
POPUP_WeightOverload
);
}
//整车动力系统故障
if
((
Get_TelltalesLedSts
(
m_LED_SystemFault
)
==
1u
)
&&
((
Get_ID_18FAB027_Sig_VCUVehicleSysErrorLevel
()
==
2u
)))
{
Popup_Request
(
POPUP_SystemFault
);
}
else
{
PopupAndSound_Delete
(
POPUP_SystemFault
);
}
if
((
Get_TelltalesLedSts
(
m_LED_SystemFault
)
==
1u
)
&&
((
Get_ID_18FAB027_Sig_VCUVehicleSysErrorLevel
()
==
3u
)))
{
Popup_Request
(
POPUP_SystemFault1
);
}
else
{
PopupAndSound_Delete
(
POPUP_SystemFault1
);
}
//换挡错误
// if ( (CAN_MSG_Status(ID_PMS_PTInfoIndicate_Msg_Count) == 0u)
// && (Get_ID_18FAB027_Sig_PMS_GearOperateErr( ) == 1u) )
//{
// Popup_Request(POPUP_GearFault);
//}
//else
//{
// PopupAndSound_Delete(POPUP_GearFault);
//}
//远程锁车
if
(
Common_Get_IG_Sts
()
==
1u
)
{
if
((
Get_ID_18FA1727_Sig_VCU_LockVehPerFlag
()
==
1
)
&&
(
Get_ID_18FA1727_Sig_VCU_VersionConversionFlag
()
==
1
)
&&
(
Get_ID_18FA1727_Sig_VCU_SpdLmtLevel
()
==
0
))
{
Popup_Request
(
POPUP_RemoteLocking
);
}
else
if
(
Get_ID_18FF5D27_Sig_VCU_LockVehSts
()
==
1u
)
{
Popup_Request
(
POPUP_RemoteLocking
);
}
else
{
PopupAndSound_Delete
(
POPUP_RemoteLocking
);
}
}
else
{
PopupAndSound_Delete
(
POPUP_RemoteLocking
);
}
//小灯未关
if
(
(
IGstPopup1
==
IGN_OFF
)
&&
(
Get_LINE_IN_Sts
(
LINE_IN_DOOROPEN
)
==
1u
)
&&
(
Get_LINE_IN_Sts
(
LINE_IN_POSITION
)
==
1u
)
)
{
Popup_Request
(
POPUP_PositionNotClosed
);
}
else
{
PopupAndSound_Delete
(
POPUP_PositionNotClosed
);
}
//驾驶员离车提醒
if
(
(
Get_TelltalesLedSts
(
m_LED_READY
)
==
1u
)
&&
(
Get_LINE_IN_Sts
(
LINE_IN_DOOROPEN
)
==
1u
)
)
{
Popup_Request
(
POPUP_DepartureReminder
);
}
else
{
PopupAndSound_Delete
(
POPUP_DepartureReminder
);
}
//超速报警
/*if(IGstPopup1 == IGN_ON)
{
if ( m_Vspeed >= 810 )
{
Popup_Request(POPUP_Over_Speed);
}
if(m_Vspeed < 780)
{
PopupAndSound_Delete(POPUP_Over_Speed);
}
}
else
{
PopupAndSound_Delete(POPUP_Over_Speed);
}*/
/*雷达距离声音提示*/
if
(
IGstPopup1
==
IGN_ON
)
{
if
(
Get_ID_0CFF1ADA_Sig_PDC_VirtualDisplaySts
()
==
1u
)
{
switch
(
Get_ID_0CFF1ADA_Sig_PDC_Warning_Frq
()
)
{
case
0
:
RADAR_SOUND
=
100
;
break
;
case
1
:
RADAR_SOUND
=
POPUP_Radar_1HZ
;
break
;
case
2
:
RADAR_SOUND
=
POPUP_Radar_2HZ
;
break
;
case
3
:
RADAR_SOUND
=
POPUP_Radar_4HZ
;
break
;
case
4
:
RADAR_SOUND
=
100
;
break
;
case
5
:
RADAR_SOUND
=
POPUP_Radar_Changming
;
break
;
default:
RADAR_SOUND
=
100
;
break
;
}
if
(
RADAR_SOUND
==
POPUP_Radar_1HZ
)
{
PopupAndSound_Delete
(
POPUP_Radar_2HZ
);
PopupAndSound_Delete
(
POPUP_Radar_4HZ
);
PopupAndSound_Delete
(
POPUP_Radar_Changming
);
Popup_Request
(
POPUP_Radar_1HZ
);
}
else
if
(
RADAR_SOUND
==
POPUP_Radar_2HZ
)
{
PopupAndSound_Delete
(
POPUP_Radar_1HZ
);
PopupAndSound_Delete
(
POPUP_Radar_4HZ
);
PopupAndSound_Delete
(
POPUP_Radar_Changming
);
Popup_Request
(
POPUP_Radar_2HZ
);
}
else
if
(
RADAR_SOUND
==
POPUP_Radar_4HZ
)
{
PopupAndSound_Delete
(
POPUP_Radar_2HZ
);
PopupAndSound_Delete
(
POPUP_Radar_1HZ
);
PopupAndSound_Delete
(
POPUP_Radar_Changming
);
Popup_Request
(
POPUP_Radar_4HZ
);
}
else
if
(
RADAR_SOUND
==
POPUP_Radar_Changming
)
{
PopupAndSound_Delete
(
POPUP_Radar_2HZ
);
PopupAndSound_Delete
(
POPUP_Radar_4HZ
);
PopupAndSound_Delete
(
POPUP_Radar_1HZ
);
Popup_Request
(
POPUP_Radar_Changming
);
}
else
{
PopupAndSound_Delete
(
POPUP_Radar_2HZ
);
PopupAndSound_Delete
(
POPUP_Radar_4HZ
);
PopupAndSound_Delete
(
POPUP_Radar_1HZ
);
PopupAndSound_Delete
(
POPUP_Radar_Changming
);
}
}
else
{
PopupAndSound_Delete
(
POPUP_Radar_2HZ
);
PopupAndSound_Delete
(
POPUP_Radar_4HZ
);
PopupAndSound_Delete
(
POPUP_Radar_1HZ
);
PopupAndSound_Delete
(
POPUP_Radar_Changming
);
}
}
else
{
PopupAndSound_Delete
(
POPUP_Radar_2HZ
);
PopupAndSound_Delete
(
POPUP_Radar_4HZ
);
PopupAndSound_Delete
(
POPUP_Radar_1HZ
);
PopupAndSound_Delete
(
POPUP_Radar_Changming
);
}
// OTA处理
if
(
(
CAN_MSG_Status
(
ID_TBOX_OTAStatus_Msg_Count
)
==
0u
)
&&
(
IGstPopup1
==
IGN_ON
)
)
{
if
(
Get_ID_18FF639F_Sig_TBOX_OTA_DownloadRequest
(
)
==
0x1u
)
{
}
if
(
(
Get_ID_18FF639F_Sig_TBOX_OTA_DownloadState
(
)
==
0x01u
)
&&
(
Get_ID_18FF639F_Sig_TBOX_OTA_DownloadProgress
(
)
<=
0x64u
)
)
{
}
if
(
Get_ID_18FF639F_Sig_TBOX_OTA_DownloadState
(
)
==
0x03u
)
{
Popup_Request
(
POPUP_OTA_0
);
}
else
{
PopupAndSound_Delete
(
POPUP_OTA_0
);
}
if
(
Get_ID_18FF639F_Sig_TBOX_OTA_UpdateRequest
(
)
==
0x01u
)
{
Popup_Request
(
POPUP_OTA_1
);
}
else
{
PopupAndSound_Delete
(
POPUP_OTA_1
);
}
if
(
Get_ID_18FF639F_Sig_TBOX_OTA_DisclaimerWarning
(
)
==
0x01u
)
{
Popup_Request
(
POPUP_OTA_2
);
}
else
{
PopupAndSound_Delete
(
POPUP_OTA_2
);
}
if
(
(
Get_ID_18FF639F_Sig_TBOX_OTA_PreConditionDetect
(
)
==
0x01u
)
&&
((
Get_ID_18FF639F_Sig_TBOX_OTA_FailedReason_PowerMode
(
)
==
0x01u
)
||
(
Get_ID_18FF639F_Sig_TBOX_OTA_FailedReason_GearPos
(
)
==
0x01u
)
||
(
Get_ID_18FF639F_Sig_TBOX_OTA_FailedReason_VehicleSpd
(
)
==
0x01u
)
||
(
Get_ID_18FF639F_Sig_TBOX_OTA_FailedReason_BattVol
(
)
==
0x01u
)
||
(
Get_ID_18FF639F_Sig_TBOX_OTA_FailedReason_HandBrake
(
)
==
0x01u
)
||
(
Get_ID_18FF639F_Sig_TBOX_OTA_FailedReason_ChgStatus
(
)
==
0x01u
))
)
{
}
if
(
Get_ID_18FF639F_Sig_TBOX_OTA_UpdateState
(
)
==
0x01u
)
{
}
if
(
Get_ID_18FF639F_Sig_TBOX_OTA_UpdateState
(
)
==
0x02u
)
{
Popup_Request
(
POPUP_OTA_3
);
}
else
{
PopupAndSound_Delete
(
POPUP_OTA_3
);
}
if
(
Get_ID_18FF639F_Sig_TBOX_OTA_UpdateState
(
)
==
0x06u
)
{
Popup_Request
(
POPUP_OTA_4
);
}
else
{
PopupAndSound_Delete
(
POPUP_OTA_4
);
}
if
(
Get_ID_18FF639F_Sig_TBOX_OTA_UpdateState
(
)
==
0x05u
)
{
Popup_Request
(
POPUP_OTA_5
);
}
else
{
PopupAndSound_Delete
(
POPUP_OTA_5
);
}
}
else
{
PopupAndSound_Delete
(
POPUP_OTA_0
);
PopupAndSound_Delete
(
POPUP_OTA_1
);
PopupAndSound_Delete
(
POPUP_OTA_2
);
PopupAndSound_Delete
(
POPUP_OTA_3
);
PopupAndSound_Delete
(
POPUP_OTA_4
);
PopupAndSound_Delete
(
POPUP_OTA_5
);
}
}
}
uint8_t
Get_POP_3S_Clock
(
void
)
{
return
POP_3S_Clock
;
}
uint8_t
Get_CPDWarning_Valid
(
void
)
{
return
CPDWarning_Valid
;
}
uint8_t
Get_CPDWarningSts
(
void
)
{
return
CPDWarningSts
;
}
void
Popups_Sound_Playing
(
uint8_t
PopupSnd
)
{
uint8_t
ReqCode
;
ReqCode
=
Popup_Get_Current_Sound_Req_Code
(
);
// PopupSnd =SND_RADAR;
// RADAR_SOUND=RADAR_SND_CONTINUOUS;
switch
(
PopupSnd
)
{
case
SND_RADAR
:
if
(
RADAR_SOUND
==
RADAR_SND_CONTINUOUS
)
{
Sound_Delete
(
SND_RADAR_1HZ
);
Sound_Delete
(
SND_RADAR_2HZ
);
Sound_Delete
(
SND_RADAR_4HZ
);
Sound_Request
(
SND_RADAR_Changming
,
ReqCode
);
}
else
if
(
RADAR_SOUND
==
RADAR_SND_2Hz
)
{
Sound_Delete
(
SND_RADAR_1HZ
);
Sound_Delete
(
SND_RADAR_4HZ
);
Sound_Delete
(
SND_RADAR_Changming
);
Sound_Request
(
SND_RADAR_2HZ
,
ReqCode
);
}
else
if
(
RADAR_SOUND
==
RADAR_SND_4Hz
)
{
Sound_Delete
(
SND_RADAR_1HZ
);
Sound_Delete
(
SND_RADAR_2HZ
);
Sound_Delete
(
SND_RADAR_Changming
);
Sound_Request
(
SND_RADAR_4HZ
,
ReqCode
);
}
else
{
Sound_Delete
(
SND_RADAR_1HZ
);
Sound_Delete
(
SND_RADAR_2HZ
);
Sound_Delete
(
SND_RADAR_4HZ
);
Sound_Delete
(
SND_RADAR_Changming
);
}
break
;
default:
if
(
ReqCode
)
{
Sound_Request
(
PopupSnd
,
ReqCode
);
}
else
{
Sound_Delete
(
PopupSnd
);
}
break
;
}
}
uint8_t
Get_OIL_LOW_Sts
(
void
)
{
return
OIL_Low_popup_flag
;
}
uint8_t
Get_OverSpeed_Sts
(
void
)
{
return
OverSpeed
;
}
uint8_t
PopupGetIGst
(
void
)
{
return
IGstPopup
;
}
\ No newline at end of file
utility/le19删除超速报警临时程序/Sound_List.h
deleted
100644 → 0
View file @
0168f7cd
#ifndef _SOUND_LIST_H_
#define _SOUND_LIST_H_
#include "Sound_Source.h"
/*#define SND_TOTAL_NUMBER 89*/
/******************************************************************************
声音列表
******************************************************************************/
enum
SoundName
{
SND_TICK
,
/* tick */
SND_TOCK
,
/* tock */
SND_RADAR_Changming
,
/* 雷达 长鸣 */
SND_RADAR_1HZ
,
/* 雷达 1HZ */
SND_RADAR_2HZ
,
/* 雷达 2HZ */
SND_RADAR_4HZ
,
/* 雷达 4HZ */
SND_RADAR_2S
,
/* 雷达 2S */
SND_RADAR_4S
,
/* 雷达 4S */
SND_RADAR_0S
,
/* 雷达 0.5S */
SND_RADAR_OK0S
,
/* 雷达 0.5S */
SND_EPB_Status
,
/* 制动液位低 */
SND_SEATBELT_DR_1HZ
,
/* 安全带未系 1HZ */
SND_SEATBELT_DR_2HZ
,
/* 安全带未系 2HZ */
SND_DoorOpen
,
/* 车门开报警 */
SND_DoorOpen_1HZ
,
/* 车门开报警 1HZ */
SND_EBD_fault
,
/* EBD故障 */
SND_ABS
,
/* ABS故障 */
SND_EPS
,
/* EPS故障 */
SND_Park_Brak
,
/* 驻车制动故障 */
SND_MotorFault
,
/* 电机故障 */
SND_SOC_Fault
,
/* 动力电池报警 */
SND_InsulationFault
,
/* 高压绝缘故障 */
SND_SOC_HT
,
/* 电池热失控 */
SND_Energy_Recovery
,
/* 单踏板功能激活 */
SND_Energy_Recovery_1
,
/* 单踏板功能激活 1 */
SND_ECO
,
/* ECO状态激活 */
SND_READY
,
/* READY状态激活 */
SND_PowerLimit
,
/* 限功率报警 */
SND_SOC_LP
,
/* 蓄电池电量低 */
SND_SOC_CF
,
/* 蓄电池充电故障 */
SND_SystemFault
,
/* 动力系统故障 */
SND_SystemFault1
,
/* 动力系统故障 */
SND_GearFault
,
/* 换挡错误 */
SND_WeightOverload
,
/* 超载报警 */
SND_WeightOverload2
,
/* 超载报警 */
SND_RemoteLocking
,
/* 远程锁车 */
SND_PositionNotClosed
,
/* 小灯未关 */
SND_DepartureReminder
,
/* 驾驶员离车提醒 */
SND_OTA_0
,
/* OTA 报警0 */
SND_OTA_1
,
/* OTA 报警1 */
SND_OTA_2
,
/* OTA 报警2 */
SND_OTA_3
,
/* OTA 报警3 */
SND_OTA_4
,
/* OTA 报警4 */
SND_OTA_5
,
/* OTA 报警5 */
SND_ESC
,
//SND_Over_Speed, /*超速报警*/
SND_TOTAL_NUM
,
};
enum
{
RADAR_SND_MUTE
=
0u
,
RADAR_SND_2Hz
,
RADAR_SND_4Hz
,
RADAR_SND_CONTINUOUS
,
RADAR_SND_500MS
,
RADAR_SND_OK500MS
,
RADAR_SND_2S
,
RADAR_SND_Fault
,
};
/******************************************************************************
伪声音列表
******************************************************************************/
#define SND_NONE 0xFFu
/*无报警 */
#define SND_RADAR SND_RADAR_2HZ
/*雷达音*/
#define SND_TYPE_NORMAL 0x00u
/*普通声音类型 */
#define SND_TYPE_MULTI 0x01u
/*可多次触发的声音 */
#define SND_TYPE_RADAR 0x02u
/*雷达声音 */
#endif
\ No newline at end of file
utility/le19删除超速报警临时程序/Sound_Scheduler.c
deleted
100644 → 0
View file @
0168f7cd
#include "Sound_List.h"
#include "Sound_Player.h"
#include "Sound_Scheduler.h"
#define SND_PLAYER_IDLE 0x00u
#define SND_PLAYER_PLAY_REQ 0x01u
#define SND_PLAYER_PLAYING 0x02u
#define SND_PLAYER_STOP_REQ 0x03u
/******************************************************************************
声音属性列表
******************************************************************************/
const
SoundAttributeStruct
SoundList
[
SND_TOTAL_NUM
]
=
{
/*=====================================================================================
声音名称 | 音源 | 模式
-------------------------------------------------------------------------------------*/
{
/*tick */
SND_SRC_TICK
,
SND_TYPE_NORMAL
,
},
{
/*tock */
SND_SRC_TOCK
,
SND_TYPE_NORMAL
,
},
{
/*雷达长鸣 */
SND_SRC_Radar_Changming
,
SND_TYPE_RADAR
,
},
{
/*雷达 1HZ */
SND_SRC_Radar_1HZ
,
SND_TYPE_RADAR
,
},
{
/*雷达 2HZ */
SND_SRC_Radar_2HZ
,
SND_TYPE_RADAR
,
},
{
/*雷达 4HZ */
SND_SRC_Radar_4HZ
,
SND_TYPE_RADAR
,
},
{
/*雷达 2S */
SND_SRC_Radar_2S
,
SND_TYPE_RADAR
,
},
{
/*雷达 4S */
SND_SRC_Radar_4S
,
SND_TYPE_RADAR
,
},
{
/*雷达 0.5S */
SND_SRC_Radar_0S
,
SND_TYPE_RADAR
,
},
{
/*雷达 0.5S */
SND_SRC_Radar_OK0S
,
SND_TYPE_RADAR
,
},
{
/*制动液位低 */
SND_SRC_EPB_Status
,
SND_TYPE_NORMAL
,
},
{
/*安全带未系 */
SND_SRC_SEATBELT_DR_1HZ
,
SND_TYPE_NORMAL
,
},
{
/*安全带未系 */
SND_SRC_SEATBELT_DR_2HZ
,
SND_TYPE_NORMAL
,
},
{
/*车门开报警 */
SND_SRC_DoorOpen
,
SND_TYPE_NORMAL
,
},
{
/*车门开报警 1HZ */
SND_SRC_DoorOpen_1HZ
,
SND_TYPE_NORMAL
,
},
{
/*EBD故障 */
SND_SRC_EBD_fault
,
SND_TYPE_NORMAL
,
},
{
/*ABS故障 */
SND_SRC_ABS
,
SND_TYPE_NORMAL
,
},
{
/*EPS故障 */
SND_SRC_EPS
,
SND_TYPE_NORMAL
,
},
{
/*驻车制动 */
SND_SRC_Park_Brak
,
SND_TYPE_NORMAL
,
},
{
/*电机故障 */
SND_SRC_MotorFault
,
SND_TYPE_NORMAL
,
},
{
/*动力电池报警 */
SND_SRC_SOC_Fault
,
SND_TYPE_NORMAL
,
},
{
/*高压绝缘故障 */
SND_SRC_InsulationFault
,
SND_TYPE_NORMAL
,
},
{
/*电池热失控 */
SND_SRC_SOC_HT
,
SND_TYPE_NORMAL
,
},
{
/*单踏板功能激活 */
SND_SRC_Energy_Recovery
,
SND_TYPE_NORMAL
,
},
{
/*单踏板功能激活1 */
SND_SRC_Energy_Recovery_1
,
SND_TYPE_NORMAL
,
},
{
/*ECO状态激活 */
SND_SRC_ECO
,
SND_TYPE_NORMAL
,
},
{
/*READY状态激活 */
SND_SRC_READY
,
SND_TYPE_NORMAL
,
},
{
/*限功率报警 */
SND_SRC_PowerLimit
,
SND_TYPE_NORMAL
,
},
{
/*蓄电池电量低 */
SND_SRC_SOC_LP
,
SND_TYPE_NORMAL
,
},
{
/*蓄电池充电故障 */
SND_SRC_SOC_CF
,
SND_TYPE_NORMAL
,
},
{
/*动力系统故障 */
SND_SRC_SystemFault
,
SND_TYPE_NORMAL
,
},
{
/*动力系统故障 */
SND_SRC_SystemFault1
,
SND_TYPE_NORMAL
,
},
{
/*换挡错误 */
SND_SRC_GearFault
,
SND_TYPE_NORMAL
,
},
{
/*超载报警 */
SND_SRC_WeightOverload
,
SND_TYPE_NORMAL
,
},
{
/*超载报警 */
SND_SRC_WeightOverload2
,
SND_TYPE_NORMAL
,
},
{
/*远程锁车 */
SND_SRC_RemoteLocking
,
SND_TYPE_NORMAL
,
},
{
/*小灯未关 */
SND_SRC_PositionNotClosed
,
SND_TYPE_NORMAL
,
},
{
/*驾驶员离车提醒 */
SND_SRC_DepartureReminder
,
SND_TYPE_NORMAL
,
},
{
/*OTA 报警0 */
SND_SRC_OTA_0
,
SND_TYPE_NORMAL
,
},
{
/*OTA 报警1 */
SND_SRC_OTA_1
,
SND_TYPE_NORMAL
,
},
{
/*OTA 报警2 */
SND_SRC_OTA_2
,
SND_TYPE_NORMAL
,
},
{
/*OTA 报警3 */
SND_SRC_OTA_3
,
SND_TYPE_NORMAL
,
},
{
/*OTA 报警4 */
SND_SRC_OTA_4
,
SND_TYPE_NORMAL
,
},
{
/*OTA 报警5 */
SND_SRC_OTA_5
,
SND_TYPE_NORMAL
,
},
{
/*EPS 报警5 */
SND_SRC_ESC
,
SND_TYPE_NORMAL
,
},
//{/*超速报警 */ SND_SRC_Over_Speed, SND_TYPE_NORMAL, },
/*====================================================================================*/
};
/******************************************************************************
音源属性表 组合音
******************************************************************************/
const
SndAttributeStruct
SndAttributeTable
[
SND_SRC_TOTAL_NUM
]
=
{
/*============================================================================================================================================
音源名称 | 音源 | 优先级 | 循环次数 | 播放模式 | 周期(ms)
---------------------------------------------------------------------------------------------------------------------------------------------*/
{
/* tock */
0x05
,
1u
,
1u
,
SND_MODE_SINGLE
,
100
,
},
{
/* tick */
0x06
,
2u
,
1u
,
SND_MODE_SINGLE
,
100
,
},
{
/* 雷达长鸣 */
0x02
,
12u
,
SND_CYCLE_NONSTOP
,
SND_MODE_LOOP
,
0u
,
},
{
/* 雷达 1HZ */
0x03
,
12u
,
SND_CYCLE_NONSTOP
,
SND_MODE_SINGLE
,
1000u
,
},
{
/* 雷达 2HZ */
0x03
,
12u
,
SND_CYCLE_NONSTOP
,
SND_MODE_SINGLE
,
500u
,
},
{
/* 雷达 4HZ */
0x04
,
12u
,
SND_CYCLE_NONSTOP
,
SND_MODE_SINGLE
,
250u
,
},
{
/* 雷达 2S */
0x02
,
3u
,
1u
,
SND_MODE_SINGLE
,
2000u
,
},
{
/* 雷达 4S */
0x02
,
3u
,
1u
,
SND_MODE_SINGLE
,
4000u
,
},
{
/* 雷达 0.5S */
0x02
,
3u
,
1u
,
SND_MODE_SINGLE
,
500u
,
},
{
/* 雷达 0.5S */
0x02
,
3u
,
1u
,
SND_MODE_SINGLE
,
500u
,
},
{
/* 制动液位低 */
0x07
,
2u
,
1u
,
SND_MODE_SINGLE
,
1000u
,
},
{
/* 安全带未系 1HZ */
0x03
,
3u
,
SND_CYCLE_NONSTOP
,
SND_MODE_SINGLE
,
1000u
,
},
{
/* 安全带未系 2HZ */
0x03
,
3u
,
SND_CYCLE_NONSTOP
,
SND_MODE_SINGLE
,
500u
,
},
{
/* 车门开报警 */
0x07
,
4u
,
1u
,
SND_MODE_SINGLE
,
1000u
,
},
{
/* 车门开报警 1HZ */
0x07
,
4u
,
SND_CYCLE_NONSTOP
,
SND_MODE_SINGLE
,
1000u
,
},
{
/* EBD故障 */
0x07
,
6u
,
1u
,
SND_MODE_SINGLE
,
1000u
,
},
{
/* ABS故障 */
0x07
,
7u
,
1u
,
SND_MODE_SINGLE
,
1000u
,
},
{
/* EPS故障 */
0x07
,
8u
,
1u
,
SND_MODE_SINGLE
,
1000u
,
},
{
/* 驻车制动 */
0x07
,
5u
,
1u
,
SND_MODE_SINGLE
,
1000u
,
},
{
/* 电机故障 */
0x07
,
9u
,
1u
,
SND_MODE_SINGLE
,
1000u
,
},
{
/* 动力电池报警 */
0x07
,
10u
,
1u
,
SND_MODE_SINGLE
,
1000u
,
},
{
/* 高压绝缘故障 */
0x07
,
11u
,
1u
,
SND_MODE_SINGLE
,
1000u
,
},
{
/* 电池热失控 */
13
,
1u
,
SND_CYCLE_NONSTOP
,
SND_MODE_SINGLE
,
500u
,
},
{
/* 单踏板功能激活 */
0x07
,
13u
,
1u
,
SND_MODE_SINGLE
,
1000u
,
},
{
/* 单踏板功能激活 1 */
0x07
,
13u
,
3u
,
SND_MODE_SINGLE
,
1000u
,
},
{
/* ECO状态激活 */
0x07
,
14u
,
1u
,
SND_MODE_SINGLE
,
1000u
,
},
{
/* READY状态激活 */
0x07
,
15u
,
1u
,
SND_MODE_SINGLE
,
1000u
,
},
{
/* 限功率报警 */
0x07
,
16u
,
1u
,
SND_MODE_SINGLE
,
1000u
,
},
{
/* 蓄电池电量低 */
0x07
,
17u
,
1u
,
SND_MODE_SINGLE
,
1000u
,
},
{
/* 蓄电池充电故障 */
0x07
,
17u
,
1u
,
SND_MODE_SINGLE
,
1000u
,
},
{
/* 动力系统故障 */
0x07
,
18u
,
10u
,
SND_MODE_SINGLE
,
1000u
,
},
{
/* 动力系统故障 */
0x07
,
18u
,
SND_CYCLE_NONSTOP
,
SND_MODE_SINGLE
,
1000u
,
},
{
/* 换挡错误 */
0x07
,
20u
,
1u
,
SND_MODE_SINGLE
,
1000u
,
},
{
/* 超载报警 */
0x07
,
20u
,
1u
,
SND_MODE_SINGLE
,
1000u
,
},
{
/* 超载报警2 */
0x07
,
20u
,
1u
,
SND_MODE_SINGLE
,
1000u
,
},
{
/* 远程锁车 */
0x07
,
21u
,
1u
,
SND_MODE_SINGLE
,
1000u
,
},
{
/* 小灯未关 */
0x07
,
22u
,
10u
,
SND_MODE_SINGLE
,
1000u
,
},
{
/* 驾驶员离车提醒 */
13
,
23u
,
3u
,
SND_MODE_SINGLE
,
500u
,
},
{
/* OTA 报警0 */
0x07
,
4u
,
SND_CYCLE_NONSTOP
,
SND_MODE_SINGLE
,
1000u
,
},
{
/* OTA 报警1 */
0x07
,
4u
,
1u
,
SND_MODE_SINGLE
,
1000u
,
},
{
/* OTA 报警2 */
0x07
,
4u
,
3u
,
SND_MODE_SINGLE
,
1000u
,
},
{
/* OTA 报警3 */
0x07
,
4u
,
1u
,
SND_MODE_SINGLE
,
1000u
,
},
{
/* OTA 报警4 */
0x07
,
4u
,
1u
,
SND_MODE_SINGLE
,
1000u
,
},
{
/* OTA 报警5 */
0x07
,
4u
,
240u
,
SND_MODE_SINGLE
,
250u
,
},
{
/* ESC 报警4 */
0x07
,
4u
,
1u
,
SND_MODE_SINGLE
,
1000u
,
},
//{ /* 超速报警 1HZ */ 0x07, 13u, 4, SND_MODE_SINGLE, 1000u, },
/*===========================================================================================================================================*/
};
/******************************************************************************
伪音源名称列表
******************************************************************************/
#define SND_SRC_NONE 0xFFu
/*没有声音*/
#define SND_SRC_CURRENT 0xFEu
/*当前播放的声音*/
/******************************************************************************
音源循环次数
******************************************************************************/
#define SND_CYCLE_NONSTOP 0xFFu
/*不停播放*/
/******************************************************************************
音源播放模式
******************************************************************************/
#define SND_MODE_SINGLE 0x00u
/*使用ISD_Play_Vp方法播放*/
#define SND_MODE_LOOP 0x01u
/*使用ISD_Play_Vp_Loop方法播放*/
uint8_t
SoundEnableCode
[
SND_TOTAL_NUM
];
SoundSchedulingStruct
SoundScheduling
;
void
Sound_Scheduler_Init
(
void
)
{
uint8_t
i
;
for
(
i
=
0u
;
i
<
SND_TOTAL_NUM
;
i
++
)
{
SoundEnableCode
[
i
]
=
0u
;
}
Sound_Clear
();
SoundScheduling
.
Current
=
SND_NONE
;
SoundScheduling
.
Next
=
SND_NONE
;
SoundScheduling
.
ReqCode
=
0u
;
SoundScheduling
.
StopReq
=
0u
;
}
/*****************************************************************************
ReqCode:请求码,0 - 表示无效请求,不请求播放声音
非0值 - 请求播放声音,该请求码将被记录,对于只播放一次的声音,
如果与上一次请求播放该声音的请求码相同声音就不会再被重复播放
*****************************************************************************/
void
Sound_Request
(
uint8_t
Sound
,
uint8_t
ReqCode
)
{
uint8_t
PriorityRef
;
uint8_t
PriorityNew
;
if
((
Sound
<
SND_TOTAL_NUM
)
&&
(
ReqCode
))
{
if
((
SoundEnableCode
[
Sound
]
!=
ReqCode
)
||
(
SoundList
[
Sound
].
Type
!=
SND_TYPE_NORMAL
))
{
if
(
SoundScheduling
.
Next
<
SND_TOTAL_NUM
)
/*如果已有即将要播放的声音*/
{
if
(
Sound
!=
SoundScheduling
.
Next
)
{
PriorityRef
=
Sound_Priority_Query
(
SoundList
[
SoundScheduling
.
Next
].
Src
);
PriorityNew
=
Sound_Priority_Query
(
SoundList
[
Sound
].
Src
);
if
(
PriorityNew
<
PriorityRef
)
{
SoundScheduling
.
Next
=
Sound
;
/*请求的声音具有更高的优先级*/
SoundScheduling
.
ReqCode
=
ReqCode
;
}
else
if
(
PriorityNew
==
PriorityRef
)
{
if
(
SoundList
[
Sound
].
Type
==
SND_TYPE_RADAR
)
{
SoundScheduling
.
Next
=
Sound
;
/*同优先级雷达声可相互打断*/
SoundScheduling
.
ReqCode
=
ReqCode
;
}
}
else
{}
}
}
else
/*如果没有即将要播放的声音*/
{
if
(
Sound
!=
SoundScheduling
.
Current
)
{
PriorityRef
=
Sound_Priority_Query
(
SND_SRC_CURRENT
);
PriorityNew
=
Sound_Priority_Query
(
SoundList
[
Sound
].
Src
);
if
(
PriorityNew
<
PriorityRef
)
{
SoundScheduling
.
Next
=
Sound
;
/*请求的声音具有更高的优先级*/
SoundScheduling
.
ReqCode
=
ReqCode
;
if
(
SoundScheduling
.
Current
<
SND_TOTAL_NUM
)
{
if
(
SoundEnableCode
[
SoundScheduling
.
Current
]
>
0u
)
{
SoundEnableCode
[
SoundScheduling
.
Current
]
=
0U
;
/*lmj:20200821不加报警被打断后无法重播,只需要不同不需要准数*/
}
}
}
else
if
(
PriorityNew
==
PriorityRef
)
{
if
(
SoundList
[
Sound
].
Type
==
SND_TYPE_RADAR
)
{
SoundScheduling
.
Next
=
Sound
;
/*同优先级雷达声可相互打断*/
SoundScheduling
.
ReqCode
=
ReqCode
;
}
}
else
{}
}
}
}
}
}
void
Sound_Delete
(
uint8_t
Sound
)
{
if
(
Sound
<
SND_TOTAL_NUM
)
{
if
(
SoundEnableCode
[
Sound
])
/*是已播放过的声音*/
{
if
(
Sound
==
SoundScheduling
.
Current
)
{
SoundScheduling
.
StopReq
=
1u
;
}
else
{
if
(
Sound
==
SoundScheduling
.
Next
)
{
SoundScheduling
.
Next
=
SND_NONE
;
}
SoundEnableCode
[
Sound
]
=
0u
;
}
}
}
}
/*50ms*/
void
Sound_Scheduling_Service
(
void
)
{
/*处理声音停止请求*/
if
(
SoundScheduling
.
StopReq
)
{
if
(
SoundScheduling
.
Current
<
SND_TOTAL_NUM
)
{
if
(
Sound_Stop
(
SoundList
[
SoundScheduling
.
Current
].
Src
)
==
0u
)
{
SoundScheduling
.
StopReq
=
0u
;
SoundEnableCode
[
SoundScheduling
.
Current
]
=
0u
;
SoundScheduling
.
Current
=
SND_NONE
;
}
}
}
/*使用查询优先级方法查看当前声音是否还在播放*/
if
(
SoundScheduling
.
Current
<
SND_TOTAL_NUM
)
{
if
(
Sound_Priority_Query
(
SND_SRC_CURRENT
)
==
0xFFu
)
{
SoundScheduling
.
Current
=
SND_NONE
;
}
}
/*播放请求的声音*/
if
(
SoundScheduling
.
Next
<
SND_TOTAL_NUM
)
{
if
(
SoundScheduling
.
Current
<
SND_TOTAL_NUM
)
/*如果当前有声音正在播放,则停止播放该声音*/
{
Sound_Stop
(
SoundList
[
SoundScheduling
.
Current
].
Src
);
}
if
(
Sound_Play
(
SoundList
[
SoundScheduling
.
Next
].
Src
)
==
0u
)
/*如果请求的声音播放成功*/
{
SoundEnableCode
[
SoundScheduling
.
Next
]
=
SoundScheduling
.
ReqCode
;
/*声音已播放*/
SoundScheduling
.
Current
=
SoundScheduling
.
Next
;
SoundScheduling
.
Next
=
SND_NONE
;
}
}
}
uint8_t
Get_SoundScheduling_Current
(
void
)
{
return
SoundScheduling
.
Current
;
}
utility/le19删除超速报警临时程序/Sound_Source.h
deleted
100644 → 0
View file @
0168f7cd
#ifndef _SOUND_SOURCE_H_
#define _SOUND_SOURCE_H_
#include "stdint.h"
/******************************************************************************
音源名称列表
注意:音源名称所指代的序号应与该声音位于声音属性表中的序号一一对应
******************************************************************************/
enum
{
SND_SRC_TICK
=
0x00u
,
/* tick */
SND_SRC_TOCK
,
/* tock */
SND_SRC_Radar_Changming
,
/* 雷达长鸣 */
SND_SRC_Radar_1HZ
,
/* 雷达 1HZ */
SND_SRC_Radar_2HZ
,
/* 雷达 2HZ */
SND_SRC_Radar_4HZ
,
/* 雷达 4HZ */
SND_SRC_Radar_2S
,
/* 雷达 2S */
SND_SRC_Radar_4S
,
/* 雷达 4S */
SND_SRC_Radar_0S
,
/* 雷达 0S */
SND_SRC_Radar_OK0S
,
/* 雷达 0S */
SND_SRC_EPB_Status
,
/* 制动液位低 */
SND_SRC_SEATBELT_DR_1HZ
,
/* 安全带未系 1HZ */
SND_SRC_SEATBELT_DR_2HZ
,
/* 安全带未系 2HZ */
SND_SRC_DoorOpen
,
/* 车门开报警 */
SND_SRC_DoorOpen_1HZ
,
/* 车门开报警 1HZ */
SND_SRC_EBD_fault
,
/* EBD故障 */
SND_SRC_ABS
,
/* ABS故障 */
SND_SRC_EPS
,
/* EPS故障 */
SND_SRC_Park_Brak
,
/* 驻车制动 */
SND_SRC_MotorFault
,
/* 电机故障 */
SND_SRC_SOC_Fault
,
/* 动力电池报警 */
SND_SRC_InsulationFault
,
/* 高压绝缘故障 */
SND_SRC_SOC_HT
,
/* 电池热失控 */
SND_SRC_Energy_Recovery
,
/* 单踏板功能激活 */
SND_SRC_Energy_Recovery_1
,
/* 单踏板功能激活 1HZ 3次 1.4变更新增*/
SND_SRC_ECO
,
/* ECO状态激活 */
SND_SRC_READY
,
/* READY状态激活 */
SND_SRC_PowerLimit
,
/* 限功率报警 */
SND_SRC_SOC_LP
,
/* 蓄电池电量低 */
SND_SRC_SOC_CF
,
/* 蓄电池充电故障 */
SND_SRC_SystemFault
,
/* 动力系统故障 */
SND_SRC_SystemFault1
,
/* 动力系统故障 */
SND_SRC_GearFault
,
/* 换挡错误 */
SND_SRC_WeightOverload
,
/* 超载报警 */
SND_SRC_WeightOverload2
,
/* 超载报警 */
SND_SRC_RemoteLocking
,
/* 远程锁车 */
SND_SRC_PositionNotClosed
,
/* 小灯未关 */
SND_SRC_DepartureReminder
,
/* 驾驶员离车提醒 */
SND_SRC_OTA_0
,
/* OTA 报警0 */
SND_SRC_OTA_1
,
/* OTA 报警1 */
SND_SRC_OTA_2
,
/* OTA 报警2 */
SND_SRC_OTA_3
,
/* OTA 报警3 */
SND_SRC_OTA_4
,
/* OTA 报警4 */
SND_SRC_OTA_5
,
/* OTA 报警5 */
SND_SRC_ESC
,
/* OTA 报警5 */
//SND_SRC_Over_Speed, /* 超速报警 */
SND_SRC_TOTAL_NUM
,
};
/******************************************************************************
伪音源名称列表
******************************************************************************/
#define SND_SRC_NONE 0xFFu
/*没有声音*/
#define SND_SRC_CURRENT 0xFEu
/*当前播放的声音*/
/******************************************************************************
音源循环次数
******************************************************************************/
#define SND_CYCLE_NONSTOP 0xFFu
/*不停播放*/
/******************************************************************************
音源播放模式
******************************************************************************/
#define SND_MODE_SINGLE 0x00u
/*使用ISD_Play_Vp方法播放*/
#define SND_MODE_LOOP 0x01u
/*使用ISD_Play_Vp_Loop方法播放*/
#endif
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment