Commit 253ca20f authored by 耨义强's avatar 耨义强

Merge branch 'zhengping' of http://tyw-server.synology.me:12345/shihao/rt_rmr42e into nou

parents 1ebd3cc5 e4dd577a
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
<Targets> <Targets>
<Target> <Target>
<TargetName>HaoJin232</TargetName> <TargetName>RMR42E</TargetName>
<ToolsetNumber>0x4</ToolsetNumber> <ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName> <ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>5060960::V5.06 update 7 (build 960)::.\ARMCC</pCCUsed> <pCCUsed>5060960::V5.06 update 7 (build 960)::.\ARMCC</pCCUsed>
...@@ -49,7 +49,7 @@ ...@@ -49,7 +49,7 @@
<InvalidFlash>1</InvalidFlash> <InvalidFlash>1</InvalidFlash>
</TargetStatus> </TargetStatus>
<OutputDirectory>.\Objects\</OutputDirectory> <OutputDirectory>.\Objects\</OutputDirectory>
<OutputName>HaoJin</OutputName> <OutputName>RMR42E</OutputName>
<CreateExecutable>1</CreateExecutable> <CreateExecutable>1</CreateExecutable>
<CreateLib>0</CreateLib> <CreateLib>0</CreateLib>
<CreateHexFile>1</CreateHexFile> <CreateHexFile>1</CreateHexFile>
...@@ -383,16 +383,6 @@ ...@@ -383,16 +383,6 @@
<Group> <Group>
<GroupName>Application</GroupName> <GroupName>Application</GroupName>
<Files> <Files>
<File>
<FileName>Data_Fuel.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\Source\Application\Fuel\Data_Fuel.c</FilePath>
</File>
<File>
<FileName>Data_Fuel.h</FileName>
<FileType>5</FileType>
<FilePath>..\..\..\..\Source\Application\Fuel\Data_Fuel.h</FilePath>
</File>
<File> <File>
<FileName>BackLight.c</FileName> <FileName>BackLight.c</FileName>
<FileType>1</FileType> <FileType>1</FileType>
...@@ -618,26 +608,6 @@ ...@@ -618,26 +608,6 @@
<FileType>5</FileType> <FileType>5</FileType>
<FilePath>..\..\..\..\Source\Component\Analog\Analog_Signals.h</FilePath> <FilePath>..\..\..\..\Source\Component\Analog\Analog_Signals.h</FilePath>
</File> </File>
<File>
<FileName>Light_Sensor.h</FileName>
<FileType>5</FileType>
<FilePath>..\..\..\..\Source\Component\Light_Sensor\Light_Sensor.h</FilePath>
</File>
<File>
<FileName>Light_Sensor_Interface.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\Source\Component\Light_Sensor\Light_Sensor_Interface.c</FilePath>
</File>
<File>
<FileName>Light_Sensor_Interface.h</FileName>
<FileType>5</FileType>
<FilePath>..\..\..\..\Source\Component\Light_Sensor\Light_Sensor_Interface.h</FilePath>
</File>
<File>
<FileName>Light_Sensor_V1.0.lib</FileName>
<FileType>4</FileType>
<FilePath>..\..\..\..\Source\Component\Light_Sensor\Light_Sensor_V1.0.lib</FilePath>
</File>
<File> <File>
<FileName>CAN_Lib.h</FileName> <FileName>CAN_Lib.h</FileName>
<FileType>5</FileType> <FileType>5</FileType>
...@@ -678,26 +648,6 @@ ...@@ -678,26 +648,6 @@
<FileType>4</FileType> <FileType>4</FileType>
<FilePath>..\..\..\..\Source\Component\Line_In\Line_In.lib</FilePath> <FilePath>..\..\..\..\Source\Component\Line_In\Line_In.lib</FilePath>
</File> </File>
<File>
<FileName>System_Monitor.h</FileName>
<FileType>5</FileType>
<FilePath>..\..\..\..\Source\Component\System_Monitor\System_Monitor.h</FilePath>
</File>
<File>
<FileName>System_Monitor_User.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\Source\Component\System_Monitor\System_Monitor_User.c</FilePath>
</File>
<File>
<FileName>System_Monitor_User.h</FileName>
<FileType>5</FileType>
<FilePath>..\..\..\..\Source\Component\System_Monitor\System_Monitor_User.h</FilePath>
</File>
<File>
<FileName>eepromManage_20240305.lib</FileName>
<FileType>4</FileType>
<FilePath>..\..\..\..\Source\Component\Eeprom\eepromManage_20240305.lib</FilePath>
</File>
<File> <File>
<FileName>CAN_Signal.lib</FileName> <FileName>CAN_Signal.lib</FileName>
<FileType>4</FileType> <FileType>4</FileType>
...@@ -713,11 +663,6 @@ ...@@ -713,11 +663,6 @@
<FileType>4</FileType> <FileType>4</FileType>
<FilePath>..\..\..\..\Source\Component\Mileage\libMileage_BAT32_V1.07.lib</FilePath> <FilePath>..\..\..\..\Source\Component\Mileage\libMileage_BAT32_V1.07.lib</FilePath>
</File> </File>
<File>
<FileName>System_Monitor.lib</FileName>
<FileType>4</FileType>
<FilePath>..\..\..\..\Source\Component\System_Monitor\System_Monitor.lib</FilePath>
</File>
<File> <File>
<FileName>PowerManagement.lib</FileName> <FileName>PowerManagement.lib</FileName>
<FileType>4</FileType> <FileType>4</FileType>
...@@ -728,6 +673,21 @@ ...@@ -728,6 +673,21 @@
<FileType>4</FileType> <FileType>4</FileType>
<FilePath>..\..\..\..\Source\Component\LED_Driver\LED_Driver_V1.3.lib</FilePath> <FilePath>..\..\..\..\Source\Component\LED_Driver\LED_Driver_V1.3.lib</FilePath>
</File> </File>
<File>
<FileName>System_Monitor.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\Source\Component\System_Monitor\System_Monitor.c</FilePath>
</File>
<File>
<FileName>System_Monitor_User.c</FileName>
<FileType>1</FileType>
<FilePath>..\..\..\..\Source\Component\System_Monitor\System_Monitor_User.c</FilePath>
</File>
<File>
<FileName>eepromManage_20240305.lib</FileName>
<FileType>4</FileType>
<FilePath>..\..\..\..\Source\Component\Eeprom\eepromManage_20240305.lib</FilePath>
</File>
</Files> </Files>
</Group> </Group>
<Group> <Group>
...@@ -1096,19 +1056,19 @@ ...@@ -1096,19 +1056,19 @@
<component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.5.0" condition="ARMv6_7_8-M Device"> <component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.5.0" condition="ARMv6_7_8-M Device">
<package name="CMSIS" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="ARM" version="5.8.0"/> <package name="CMSIS" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="ARM" version="5.8.0"/>
<targetInfos> <targetInfos>
<targetInfo name="HaoJin232"/> <targetInfo name="RMR42E"/>
</targetInfos> </targetInfos>
</component> </component>
<component Cclass="Device" Cgroup="ISR" Cvendor="Cmsemicon" Cversion="1.0.0" condition="BAT32A239 CMSIS-CORE"> <component Cclass="Device" Cgroup="ISR" Cvendor="Cmsemicon" Cversion="1.0.0" condition="BAT32A239 CMSIS-CORE">
<package name="BAT32A239" schemaVersion="1.4" url="http://www.mcu.com.cn/pack/" vendor="Cmsemicon" version="1.0.5"/> <package name="BAT32A239" schemaVersion="1.4" url="http://www.mcu.com.cn/pack/" vendor="Cmsemicon" version="1.0.5"/>
<targetInfos> <targetInfos>
<targetInfo name="HaoJin232"/> <targetInfo name="RMR42E"/>
</targetInfos> </targetInfos>
</component> </component>
<component Cclass="Device" Cgroup="Startup" Cvendor="Cmsemicon" Cversion="1.0.0" condition="BAT32A239 CMSIS-CORE"> <component Cclass="Device" Cgroup="Startup" Cvendor="Cmsemicon" Cversion="1.0.0" condition="BAT32A239 CMSIS-CORE">
<package name="BAT32A239" schemaVersion="1.4" url="http://www.mcu.com.cn/pack/" vendor="Cmsemicon" version="1.0.5"/> <package name="BAT32A239" schemaVersion="1.4" url="http://www.mcu.com.cn/pack/" vendor="Cmsemicon" version="1.0.5"/>
<targetInfos> <targetInfos>
<targetInfo name="HaoJin232"/> <targetInfo name="RMR42E"/>
</targetInfos> </targetInfos>
</component> </component>
</components> </components>
...@@ -1118,7 +1078,7 @@ ...@@ -1118,7 +1078,7 @@
<component Cclass="Device" Cgroup="ISR" Cvendor="Cmsemicon" Cversion="1.0.0" condition="BAT32A239 CMSIS-CORE"/> <component Cclass="Device" Cgroup="ISR" Cvendor="Cmsemicon" Cversion="1.0.0" condition="BAT32A239 CMSIS-CORE"/>
<package name="BAT32A239" schemaVersion="1.4" url="http://www.mcu.com.cn/pack/" vendor="Cmsemicon" version="1.0.5"/> <package name="BAT32A239" schemaVersion="1.4" url="http://www.mcu.com.cn/pack/" vendor="Cmsemicon" version="1.0.5"/>
<targetInfos> <targetInfos>
<targetInfo name="HaoJin232"/> <targetInfo name="RMR42E"/>
</targetInfos> </targetInfos>
</file> </file>
<file attr="config" category="source" condition="Startup ARM" name="Device\Source\ARM\startup_BAT32A239.s" version="1.0.0"> <file attr="config" category="source" condition="Startup ARM" name="Device\Source\ARM\startup_BAT32A239.s" version="1.0.0">
...@@ -1126,7 +1086,7 @@ ...@@ -1126,7 +1086,7 @@
<component Cclass="Device" Cgroup="Startup" Cvendor="Cmsemicon" Cversion="1.0.0" condition="BAT32A239 CMSIS-CORE"/> <component Cclass="Device" Cgroup="Startup" Cvendor="Cmsemicon" Cversion="1.0.0" condition="BAT32A239 CMSIS-CORE"/>
<package name="BAT32A239" schemaVersion="1.4" url="http://www.mcu.com.cn/pack/" vendor="Cmsemicon" version="1.0.5"/> <package name="BAT32A239" schemaVersion="1.4" url="http://www.mcu.com.cn/pack/" vendor="Cmsemicon" version="1.0.5"/>
<targetInfos> <targetInfos>
<targetInfo name="HaoJin232"/> <targetInfo name="RMR42E"/>
</targetInfos> </targetInfos>
</file> </file>
<file attr="config" category="source" name="Device\Source\system_BAT32A239.c" version="1.0.0"> <file attr="config" category="source" name="Device\Source\system_BAT32A239.c" version="1.0.0">
...@@ -1134,7 +1094,7 @@ ...@@ -1134,7 +1094,7 @@
<component Cclass="Device" Cgroup="Startup" Cvendor="Cmsemicon" Cversion="1.0.0" condition="BAT32A239 CMSIS-CORE"/> <component Cclass="Device" Cgroup="Startup" Cvendor="Cmsemicon" Cversion="1.0.0" condition="BAT32A239 CMSIS-CORE"/>
<package name="BAT32A239" schemaVersion="1.4" url="http://www.mcu.com.cn/pack/" vendor="Cmsemicon" version="1.0.5"/> <package name="BAT32A239" schemaVersion="1.4" url="http://www.mcu.com.cn/pack/" vendor="Cmsemicon" version="1.0.5"/>
<targetInfos> <targetInfos>
<targetInfo name="HaoJin232"/> <targetInfo name="RMR42E"/>
</targetInfos> </targetInfos>
</file> </file>
<file attr="config" category="header" name="Device\Source\userdefine.h" version="1.0.0"> <file attr="config" category="header" name="Device\Source\userdefine.h" version="1.0.0">
...@@ -1142,7 +1102,7 @@ ...@@ -1142,7 +1102,7 @@
<component Cclass="Device" Cgroup="Startup" Cvendor="Cmsemicon" Cversion="1.0.0" condition="BAT32A239 CMSIS-CORE"/> <component Cclass="Device" Cgroup="Startup" Cvendor="Cmsemicon" Cversion="1.0.0" condition="BAT32A239 CMSIS-CORE"/>
<package name="BAT32A239" schemaVersion="1.4" url="http://www.mcu.com.cn/pack/" vendor="Cmsemicon" version="1.0.5"/> <package name="BAT32A239" schemaVersion="1.4" url="http://www.mcu.com.cn/pack/" vendor="Cmsemicon" version="1.0.5"/>
<targetInfos> <targetInfos>
<targetInfo name="HaoJin232"/> <targetInfo name="RMR42E"/>
</targetInfos> </targetInfos>
</file> </file>
<file attr="config" category="source" name="Device\Source\isr_BAT32A239.c" version="1.0.0"> <file attr="config" category="source" name="Device\Source\isr_BAT32A239.c" version="1.0.0">
......
/*
* Auto generated Run-Time-Environment Configuration File
* *** Do not modify ! ***
*
* Project: 'RMR42E'
* Target: 'RMR42E'
*/
#ifndef RTE_COMPONENTS_H
#define RTE_COMPONENTS_H
/*
* Define the Device Header File:
*/
#define CMSIS_device_header "BAT32A239.h"
#endif /* RTE_COMPONENTS_H */
#ifndef APPLICATION_H__ #ifndef APPLICATION_H__
#define APPLICATION_H__ #define APPLICATION_H__
#include "Fuel\Data_Fuel.h"
#include "GPIO_USER\GpioUser.h" #include "GPIO_USER\GpioUser.h"
#include "BackLight\BackLight.h" #include "BackLight\BackLight.h"
//#include "Data_VSpeed\Data_VSpeed.h"
//#include "Data_ESpeed\Data_ESpeed.h"
#include "CommonInterface\CommonInterface.h" #include "CommonInterface\CommonInterface.h"
#include "SEG_DISPLAY\SEG_DISPLAY.h" #include "SEG_DISPLAY\SEG_DISPLAY.h"
#include "SEG_DISPLAY\SEG_Ref.h" #include "SEG_DISPLAY\SEG_Ref.h"
......
...@@ -6,51 +6,15 @@ ...@@ -6,51 +6,15 @@
#define BACK_LIGHT_DAY 50 #define BACK_LIGHT_DAY 50
#define BACK_LIGHT_NIGHT 200
_Light g_Light;
_Light interact_Light;
uint8_t interact_PWM_Low_Duty = 0; uint8_t interact_PWM_Low_Duty = 0;
void BackLight_Init(void)
{
g_Light.Light_Day = 0XFFFF;
g_Light.Light_Night = 0XFFFF;
interact_Light.Light_Day = 0XFFFF;
interact_Light.Light_Night = 0XFFFF;
}
void BackLight_Process(void) void BackLight_Process(void)
{ {
if (SYS_OPR_STAT_IGN_ON) if (SYS_OPR_STAT_IGN_ON)
{ {
if(ALS_Get_Data1() > 200)//data1 500以内,data0 3000以内 TimerM_PWM_set_duty(TIMERM_COUNTER1, TIMERM_CHB, BACK_LIGHT_DAY);
{
if (g_Light.Light_Day < 15)//1.5s 1500ms
{
g_Light.Light_Day++;//100ms
}
else
{
g_Light.Light_Night = 0;
TimerM_PWM_set_duty(TIMERM_COUNTER1, TIMERM_CHB, BACK_LIGHT_DAY);
}
}
else
{
if (g_Light.Light_Night < 15)
{
g_Light.Light_Night++;
}
else
{
g_Light.Light_Day = 0;
TimerM_PWM_set_duty(TIMERM_COUNTER1, TIMERM_CHB, BACK_LIGHT_NIGHT);
}
}
} }
else else
{ {
g_Light.Light_Day = 0;
g_Light.Light_Night = 0;
TimerM_PWM_set_duty(TIMERM_COUNTER1, TIMERM_CHB, 0); TimerM_PWM_set_duty(TIMERM_COUNTER1, TIMERM_CHB, 0);
} }
} }
...@@ -59,35 +23,10 @@ void Interact_Light_Process(void) ...@@ -59,35 +23,10 @@ void Interact_Light_Process(void)
{ {
if (SYS_OPR_STAT_IGN_ON) if (SYS_OPR_STAT_IGN_ON)
{ {
if(ALS_Get_Data1() > 200)//data1 500以内,data0 3000以内 TimerM_PWM_set_duty(TIMERM_COUNTER0, TIMERM_CHD, interact_PWM_Low_Duty * 10);
{
if (interact_Light.Light_Day < 15)//1.5s 1500ms
{
interact_Light.Light_Day++;//100ms
}
else
{
interact_Light.Light_Night = 0;
TimerM_PWM_set_duty(TIMERM_COUNTER0, TIMERM_CHD, interact_PWM_Low_Duty * 10);
}
}
else
{
if (interact_Light.Light_Night < 15)
{
interact_Light.Light_Night++;
}
else
{
interact_Light.Light_Day = 0;
TimerM_PWM_set_duty(TIMERM_COUNTER0, TIMERM_CHD, BACK_LIGHT_NIGHT);
}
}
} }
else else
{ {
interact_Light.Light_Day = 0;
interact_Light.Light_Night = 0;
TimerM_PWM_set_duty(TIMERM_COUNTER0, TIMERM_CHD, 0); TimerM_PWM_set_duty(TIMERM_COUNTER0, TIMERM_CHD, 0);
} }
} }
...@@ -2,17 +2,7 @@ ...@@ -2,17 +2,7 @@
#define _BACKLIGHT_H_ #define _BACKLIGHT_H_
#include "common.h" #include "common.h"
typedef struct
{
uint8_t Duty;
uint8_t Cycle;
uint16_t Light_Night;
uint16_t Light_Day;
} _Light;
extern _Light g_Light;
extern uint8_t interact_PWM_Low_Duty; extern uint8_t interact_PWM_Low_Duty;
void BackLight_Init(void);
void BackLight_Process(void); void BackLight_Process(void);
void Interact_Light_Process(void); void Interact_Light_Process(void);
......
#include "Data_Fuel.h"
#include "Application.h"
#define FUEL_DATA_TIME 25u /*这里填写多长时间采集一个数据,单位ms*/
#define FUEL_DATA_NUM 20u /*燃油电阻采集数据总数 最大255*/
#define FUEL_CAL_START 5u /*数据排序后取中间部分计算平均:起始*/
#define FUEL_CAL_END 15u /*数据排序后取中间部分计算平均:结束*/
#define RETURN_DIFFERENCE 25u /*判断上升或下降的回差,精度0.1*/
#define FUEL_SEG_UP 0u
#define FUEL_SEG_DOWN 1u
uint16_t FuelData[FUEL_DATA_NUM];
uint8_t FuelDataCount = 0u;
uint16_t FuelR = 0u; /*滤波后的燃油电阻,精度0.1*/
static uint16_t FuelRBak = 0;
uint8_t DesFuelSetp = 0u;
uint8_t CurFuelSetp = 0u;
uint8_t FuelInitFlag = 0u;
uint8_t FuelStateInitFlag = 0u;
uint8_t FuelDir = FUEL_SEG_UP;
FuelSensorSts_t FuelSensorState = FuelSensorNormal;
uint16_t FuelSensorNormalTime = 0u;
uint16_t FuelSensorShortTime = 0u;
uint16_t FuelSensorOpenTime = 0u;
uint8_t FuelADCompleteFlg = 0u;
void Fuel_KL30_Init(void)
{
DesFuelSetp = 0u;
CurFuelSetp = 0u;
FuelInitFlag = 1u;
FuelStateInitFlag = 1u;
FuelDir = FUEL_SEG_UP;
FuelSensorState = FuelSensorNormal;
FuelSensorNormalTime = 0u;
FuelSensorShortTime = 0u;
FuelSensorOpenTime = 0u;
FuelADCompleteFlg = 0u;
// PORT_ClrBit(Fuel_Vcc_en);
}
void Fuel_KL15_Init(void)
{
// PORT_SetBit(Fuel_Vcc_en);
DesFuelSetp = 0u;
CurFuelSetp = 0u;
FuelInitFlag = 1u;
FuelStateInitFlag = 1u;
FuelDir = FUEL_SEG_UP;
FuelSensorState = FuelSensorNormal;
FuelSensorNormalTime = 0u;
FuelSensorShortTime = 0u;
FuelSensorOpenTime = 0u;
FuelADCompleteFlg = 0u;
}
uint16_t TestFuelR = 1100u;
void Fuel_R_Cal(uint8_t deltaTime)
{
uint16_t FuelRes = 0;
uint8_t i, j;
uint32_t temp32;
static uint16_t timeCount = 0;
if(FuelStateInitFlag)
{
FuelR = ADC_Read_Signal(ADC_CH_FUEL1);
}
if (timeCount >= FUEL_DATA_TIME)
{
timeCount = 0;
if (FuelDataCount < FUEL_DATA_NUM)
{
/*获取燃油电阻*/
FuelRes = ADC_Read_Signal(ADC_CH_FUEL1);; // ADC_Read_Signal(ADC_CH_FUEL1);
/*四舍五入*/
//if (FuelRes < 32000)
//{
if (FuelRes % 10 >= 5)
{
FuelRes += 5;
}
//}
//else
//{
// FuelRes = 32000;
//}
/*由小到大插入数据*/
for (i = 0; i < FuelDataCount; i++)
{
if (FuelRes < FuelData[i])
{
break;
}
}
for (j = FuelDataCount; j > i; j--)
{
FuelData[j] = FuelData[j - 1];
}
FuelData[i] = FuelRes;
FuelDataCount++;
}
else
{
/*一组数据采集完毕,取中间部分计算平均值*/
temp32 = 0;
for (i = FUEL_CAL_START; i < FUEL_CAL_END; i++)
{
temp32 += FuelData[i];
}
FuelR = temp32 / (FUEL_CAL_END - FUEL_CAL_START);
FuelDataCount = 0;
FuelADCompleteFlg = 1;
}
}
timeCount += deltaTime;
}
void Fuel_State_Check(uint8_t deltaTime)
{
// if (FuelR < 20)
//{ /*短路 1*/
// FuelSensorOpenTime = 0;
// FuelSensorNormalTime = 0;
// if ((FuelSensorShortTime > 3000) || ((FuelStateInitFlag) && (FuelSensorShortTime > 3000)))
// {
// FuelSensorState = FuelSensorShortCircuit;
// DesFuelSetp = 0;
// CurFuelSetp = 0;
// FuelStateInitFlag = 0;
// FuelInitFlag = 1;
// FuelDir = FUEL_SEG_UP;
// }
// else
// {
// FuelSensorShortTime += deltaTime;
// }
// }
// else
if (FuelR >= 1100)
{ /*断路 320*/
FuelSensorShortTime = 0;
FuelSensorNormalTime = 0;
if ((FuelSensorOpenTime > 2800) || ((FuelStateInitFlag) && (FuelSensorOpenTime > 2800)))
{
FuelSensorState = FuelSensorOpenCircuit;
DesFuelSetp = 0;
CurFuelSetp = 5;
FuelStateInitFlag = 0;
FuelInitFlag = 1;
FuelDir = FUEL_SEG_UP;
}
else
{
FuelSensorOpenTime += deltaTime;
}
}
else
{
FuelSensorShortTime = 0;
FuelSensorOpenTime = 0;
if (FuelSensorNormalTime > 3000)
{
FuelSensorState = FuelSensorNormal;
FuelStateInitFlag = 0;
}
else
{
FuelSensorNormalTime += deltaTime;
}
}
}
void Fuel_Gauges_Cal(uint8_t deltaTime)
{
static uint16_t time = 0;
if ((FuelSensorState == FuelSensorNormal) && (FuelR < 1100))
{ // 32000 //FuelR >10 change FuelR >20
/*采集完第一组数据后,开始计算燃油格数*/
if (FuelADCompleteFlg)
{
if (FuelInitFlag)
{
FuelRBak = FuelR;
}
/*根据回差计算走动方向*/
if (FuelDir == FUEL_SEG_UP)
{
if (FuelR >= FuelRBak + RETURN_DIFFERENCE)
{
FuelDir = FUEL_SEG_DOWN;
FuelRBak = FuelR;
}
if (FuelR < FuelRBak)
{
FuelRBak = FuelR;
}
}
else
{
if (FuelRBak >= FuelR + RETURN_DIFFERENCE)
{
FuelDir = FUEL_SEG_UP;
FuelRBak = FuelR;
}
if (FuelR > FuelRBak)
{
FuelRBak = FuelR;
}
}
/*计算目标格数*/
if (FuelDir == FUEL_SEG_UP)
{
if (((DesFuelSetp == 4) || FuelInitFlag) && (FuelR < 240))
{
DesFuelSetp = 5;
}
else if (((DesFuelSetp == 3) || FuelInitFlag) && (FuelR < 430))
{
DesFuelSetp = 4;
}
else if (((DesFuelSetp == 2) || FuelInitFlag) && (FuelR < 610))
{
DesFuelSetp = 3;
}
else if (((DesFuelSetp == 1) || FuelInitFlag) && (FuelR < 790))
{
DesFuelSetp = 2;
}
else if (((DesFuelSetp == 0) || FuelInitFlag) && (FuelR < 970))
{
DesFuelSetp = 1;
}
}
else if (FuelDir == FUEL_SEG_DOWN)
{
if (((DesFuelSetp == 1) || FuelInitFlag) && (FuelR >= 970))
{
DesFuelSetp = 0;
}
else if (((DesFuelSetp == 2) || FuelInitFlag) && (FuelR >= 790))
{
DesFuelSetp = 1;
}
else if (((DesFuelSetp == 3) || FuelInitFlag) && (FuelR >= 610))
{
DesFuelSetp = 2;
}
else if (((DesFuelSetp == 4) || FuelInitFlag) && (FuelR >= 430))
{
DesFuelSetp = 3;
}
else if (((DesFuelSetp == 5) || FuelInitFlag) && (FuelR >= 240))
{
DesFuelSetp = 4;
}
}
}
/*IGN ON 1秒/故障恢复后,开始走格 立即指向当前格 20220704*/
if (Common_GetIgnOnTime() >= 3000)
{
time += deltaTime;
if (FuelInitFlag)
{
FuelInitFlag = 0;
time = 0;
CurFuelSetp = DesFuelSetp;
}
if (time >= 10000)
{ /* 10S变化一格 */
time = 0;
if (CurFuelSetp < DesFuelSetp)
{
CurFuelSetp++;
}
else if (CurFuelSetp > DesFuelSetp)
{
CurFuelSetp--;
}
}
if (CurFuelSetp == DesFuelSetp)
{
time = 0;
}
}
}
}
uint8_t Get_Fuel_Disp_Byte(void)
{
uint8_t FuelDispByte = 0u;
FuelDispByte = CurFuelSetp;
// if (FuelSensorState == FuelSensorShortCircuit)
//{
// //Short
// FuelDispByte = FLASH_SYNC_1Hz ? 7 : 0;
// }
// else if (FuelSensorState == FuelSensorOpenCircuit)
//{
// //Open
// FuelDispByte = FLASH_SYNC_1Hz ? 6 : 0;
// }
// else if (CurFuelSetp == 1)
//{
// FuelDispByte = FLASH_SYNC_1Hz ? 1 : 0;
// }
//
// else if(CurFuelSetp == 0)
//{
// FuelDispByte = 0;
// }
return FuelDispByte;
}
void Fuel_Cal_Sevice(uint8_t deltaTime)
{
/*检测燃油电阻状态*/
Fuel_State_Check(deltaTime);
/*显示燃油格*/
Fuel_Gauges_Cal(deltaTime);
}
uint8_t Get_CurFuelSetp(void)
{
return CurFuelSetp;
}
FuelSensorSts_t Get_Fuel_Sensor_State(void)
{
return FuelSensorState;
}
#ifndef DATA_FUEL_H
#define DATA_FUEL_H
#include "Components.h"
typedef enum{
FuelSensorNormal = 0,
FuelSensorShortCircuit,
FuelSensorOpenCircuit,
}FuelSensorSts_t;
extern void Fuel_KL15_Init(void);
extern void Fuel_KL30_Init(void);
extern void Fuel_Cal_Sevice(uint8_t deltaTime);
extern uint8_t Get_Fuel_Disp_Byte(void);
extern uint8_t Get_CurFuelSetp(void);
extern FuelSensorSts_t Get_Fuel_Sensor_State(void);
#endif
...@@ -169,18 +169,6 @@ void Gauge_ODO_Display(void) ...@@ -169,18 +169,6 @@ void Gauge_ODO_Display(void)
SEG_SET_ODO_NUM(0u, 0u); SEG_SET_ODO_NUM(0u, 0u);
} }
} }
void Gauge_FuelDial_Display(void)
{
if ( Common_Get_IG_Sts( ) == COMMON_POWER_ON )
{
SEG_SET_FuelDial(1, Get_CurFuelSetp());
}
else
{
SEG_SET_FuelDial(0, 0);
}
}
void Gauge_EspeedDial_Display(void) void Gauge_EspeedDial_Display(void)
{ {
if ( Common_Get_IG_Sts( ) == COMMON_POWER_ON ) if ( Common_Get_IG_Sts( ) == COMMON_POWER_ON )
...@@ -236,8 +224,6 @@ void Gauge_Service(void) ...@@ -236,8 +224,6 @@ void Gauge_Service(void)
// LED_Driver_Channel_Set(LampChannel_0, LampCh0_07_Key_ISTOP, 0); // LED_Driver_Channel_Set(LampChannel_0, LampCh0_07_Key_ISTOP, 0);
// LED_Driver_Channel_Set(LampChannel_0, LampCh0_02_Normal_Voltage, 0); // LED_Driver_Channel_Set(LampChannel_0, LampCh0_02_Normal_Voltage, 0);
// LED_Driver_Channel_Set(LampChannel_0, LampCh0_03_High_Low_Voltage, 0); // LED_Driver_Channel_Set(LampChannel_0, LampCh0_03_High_Low_Voltage, 0);
// LED_Driver_Channel_Set(LampChannel_0, LampCh0_04_Fuel_W, 0);
// LED_Driver_Channel_Set(LampChannel_0, LampCh0_05_Fuel_Y, 0);
// LED_Driver_Channel_Set(LampChannel_0, LampCh0_06_Screen_Time, 0); // LED_Driver_Channel_Set(LampChannel_0, LampCh0_06_Screen_Time, 0);
} }
} }
...@@ -252,7 +238,6 @@ void Gauge_Service(void) ...@@ -252,7 +238,6 @@ void Gauge_Service(void)
Gauge_ODO_Display(); Gauge_ODO_Display();
Gauge_Clock_Display(); Gauge_Clock_Display();
Gauge_Trip_Display(); Gauge_Trip_Display();
Gauge_FuelDial_Display();
Gauge_EspeedDial_Display(); Gauge_EspeedDial_Display();
SEG_SET_Clock(22,22,1,1,1); SEG_SET_Clock(22,22,1,1,1);
SEG_SET_Fault_Code(1,2222); SEG_SET_Fault_Code(1,2222);
...@@ -296,8 +281,6 @@ void Gauge_Service(void) ...@@ -296,8 +281,6 @@ void Gauge_Service(void)
// LED_Driver_Channel_Set(LampChannel_0, LampCh0_07_Key_ISTOP, 0); // LED_Driver_Channel_Set(LampChannel_0, LampCh0_07_Key_ISTOP, 0);
// LED_Driver_Channel_Set(LampChannel_0, LampCh0_02_Normal_Voltage, 0); // LED_Driver_Channel_Set(LampChannel_0, LampCh0_02_Normal_Voltage, 0);
// LED_Driver_Channel_Set(LampChannel_0, LampCh0_03_High_Low_Voltage, 0); // LED_Driver_Channel_Set(LampChannel_0, LampCh0_03_High_Low_Voltage, 0);
// LED_Driver_Channel_Set(LampChannel_0, LampCh0_04_Fuel_W, 0);
// LED_Driver_Channel_Set(LampChannel_0, LampCh0_05_Fuel_Y, 0);
// LED_Driver_Channel_Set(LampChannel_0, LampCh0_06_Screen_Time, 0); // LED_Driver_Channel_Set(LampChannel_0, LampCh0_06_Screen_Time, 0);
} }
} }
......
...@@ -49,7 +49,6 @@ void Gauge_DrivingRange_Display(void); ...@@ -49,7 +49,6 @@ void Gauge_DrivingRange_Display(void);
void Gauge_Trip_Display(void); void Gauge_Trip_Display(void);
void Gauge_ODO_Display(void); void Gauge_ODO_Display(void);
//void Gauge_Gear_Display(void); //void Gauge_Gear_Display(void);
void Gauge_FuelDial_Display(void);
void Gauge_EspeedDial_Display(void); void Gauge_EspeedDial_Display(void);
void Gauge_Frame_Display(void); void Gauge_Frame_Display(void);
void Gauge_MaintenanceMileage_Display(void); void Gauge_MaintenanceMileage_Display(void);
......
...@@ -2687,21 +2687,6 @@ _Fun_Res SEG_SET_Clock(uint8_t m_hour, uint8_t m_minute, uint8_t m_icon, uint8_t ...@@ -2687,21 +2687,6 @@ _Fun_Res SEG_SET_Clock(uint8_t m_hour, uint8_t m_minute, uint8_t m_icon, uint8_t
return m_Res; return m_Res;
} }
uint8_t fuel_check_SEG_step = 0;
void SEG_Scan_SET_FuelDial(void)
{
uint8_t a = 0;
a = fuel_check_SEG_step / 10u;
SEG_SET_FuelDial(1, a);
if (fuel_check_SEG_step < 59)
{
fuel_check_SEG_step++;
}
else
{
fuel_check_SEG_step = 0;
}
}
uint8_t Espeed_check_SEG_step = 0; uint8_t Espeed_check_SEG_step = 0;
...@@ -2735,15 +2720,12 @@ uint8_t check_SEG_step = 0; ...@@ -2735,15 +2720,12 @@ uint8_t check_SEG_step = 0;
// LED_Driver_Channel_Set(LampChannel_0, LampCh0_07_Key_ISTOP, LED_ON); // LED_Driver_Channel_Set(LampChannel_0, LampCh0_07_Key_ISTOP, LED_ON);
// LED_Driver_Channel_Set(LampChannel_0, LampCh0_02_Normal_Voltage, LED_ON); // LED_Driver_Channel_Set(LampChannel_0, LampCh0_02_Normal_Voltage, LED_ON);
// LED_Driver_Channel_Set(LampChannel_0, LampCh0_03_High_Low_Voltage, LED_ON); // LED_Driver_Channel_Set(LampChannel_0, LampCh0_03_High_Low_Voltage, LED_ON);
// LED_Driver_Channel_Set(LampChannel_0, LampCh0_05_Fuel_Y, LED_ON);
// LED_Driver_Channel_Set(LampChannel_0, LampCh0_04_Fuel_W, LED_ON);
// LED_Driver_Channel_Set(LampChannel_0, LampCh0_06_Screen_Time, LED_ON); // LED_Driver_Channel_Set(LampChannel_0, LampCh0_06_Screen_Time, LED_ON);
// LED_Driver_Channel_Set(LampChannel_0, LampCh0_29_MPH, LED_ON); // LED_Driver_Channel_Set(LampChannel_0, LampCh0_29_MPH, LED_ON);
// LED_Driver_Channel_Set(LampChannel_0, LampCh0_30_KM_H, LED_ON); // LED_Driver_Channel_Set(LampChannel_0, LampCh0_30_KM_H, LED_ON);
// RTE_GPIO_Set_Level(VSPEED_TEN_OUT, 1); // RTE_GPIO_Set_Level(VSPEED_TEN_OUT, 1);
// RTE_GPIO_Set_Level(VSPEED_HUNDREDS_OUT, 1); // RTE_GPIO_Set_Level(VSPEED_HUNDREDS_OUT, 1);
// SEG_Scan_SET_FuelDial();
// SEG_Scan_SET_EspeedDial(); // SEG_Scan_SET_EspeedDial();
// //
//} //}
...@@ -2756,21 +2738,17 @@ void Checkself_Init(void) ...@@ -2756,21 +2738,17 @@ void Checkself_Init(void)
Checkself_SEG_step_count = 0; Checkself_SEG_step_count = 0;
check_SEG_step = 0; check_SEG_step = 0;
Espeed_check_SEG_step = 0; Espeed_check_SEG_step = 0;
fuel_check_SEG_step = 0;
} }
void Checkself_SEG_Display(void) void Checkself_SEG_Display(void)
{ {
uint16_t Vspeed = 0; uint16_t Vspeed = 0;
uint16_t Espeed = 0; uint16_t Espeed = 0;
uint16_t Fuel = 0;
uint16_t Trip = 0; uint16_t Trip = 0;
uint16_t hour = 0; uint16_t hour = 0;
uint16_t min = 0; uint16_t min = 0;
uint32_t ODO = 0; uint32_t ODO = 0;
Fuel = Checkself_SEG_step / 5u;
SEG_SET_FuelDial(1, Fuel);
Espeed = (Checkself_SEG_step * 2 / 5) * 1000; Espeed = (Checkself_SEG_step * 2 / 5) * 1000;
//SEG_SET_EspeedDial(1, Espeed / 1000, Espeed); //SEG_SET_EspeedDial(1, Espeed / 1000, Espeed);
......
...@@ -49,8 +49,8 @@ _Fun_Res SEG_SET_GEAR(uint8_t m_Gear_Flag,uint8_t m_Gear); ...@@ -49,8 +49,8 @@ _Fun_Res SEG_SET_GEAR(uint8_t m_Gear_Flag,uint8_t m_Gear);
/**@brief 电量表盘显示函数*/ /**@brief 电量表盘显示函数*/
_Fun_Res SEG_SET_EleDial(uint8_t m_Flag,uint8_t m_SEG,uint16_t m_NUM); _Fun_Res SEG_SET_EleDial(uint8_t m_Flag,uint8_t m_SEG,uint16_t m_NUM);
/**@brief 燃油表盘显示函数*/ // /**@brief 燃油表盘显示函数*/
_Fun_Res SEG_SET_FuelDial(uint8_t m_Flag,uint8_t m_SEG); // _Fun_Res SEG_SET_FuelDial(uint8_t m_Flag,uint8_t m_SEG);
/**@brief 转速表盘显示函数*/ /**@brief 转速表盘显示函数*/
//_Fun_Res SEG_SET_EspeedDial(uint8_t m_Flag, uint8_t m_SEG, uint16_t m_NUM); //_Fun_Res SEG_SET_EspeedDial(uint8_t m_Flag, uint8_t m_SEG, uint16_t m_NUM);
...@@ -99,7 +99,6 @@ _Fun_Res SEG_Scan_SET_PowerDial(uint8_t m_SEG); ...@@ -99,7 +99,6 @@ _Fun_Res SEG_Scan_SET_PowerDial(uint8_t m_SEG);
/**@brief 刀盘显示函数*/ /**@brief 刀盘显示函数*/
_Fun_Res SEG_SET_Cutterhead(uint16_t LED_NUM, uint8_t m_Flag); _Fun_Res SEG_SET_Cutterhead(uint16_t LED_NUM, uint8_t m_Flag);
void SEG_Scan_SET_FuelDial(void);
void SEG_Scan_SET_EspeedDial(void); void SEG_Scan_SET_EspeedDial(void);
//void SEG_Scan_SET_FuelDial_Checkself(void); //void SEG_Scan_SET_FuelDial_Checkself(void);
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* \attention * \attention
* *
* This file is automatically generated by analog signals configuration tool. * This file is automatically generated by analog signals configuration tool.
* Date : 2024/3/31 13:14:40 * Date : 2024/6/16 16:49:27
* Cfg Tool Ver : 1.1.0 * Cfg Tool Ver : 1.1.0
* Engineer : ShiHao * Engineer : ShiHao
* (c) Heilongjiang TYW electronics co., LTD * (c) Heilongjiang TYW electronics co., LTD
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
#include "Analog_Signals.h" #include "Analog_Signals.h"
/* Private typedef ----------------------------------------------------------*/ /* Private typedef ----------------------------------------------------------*/
typedef struct typedef struct __attribute__((aligned(4)))
{ {
uint8_t u8Ch; uint8_t u8Ch;
uint8_t u8RefType; uint8_t u8RefType;
...@@ -26,7 +26,7 @@ typedef struct ...@@ -26,7 +26,7 @@ typedef struct
ADC_Circuit_Calc_Func pfProcFunc; ADC_Circuit_Calc_Func pfProcFunc;
}ADC_Ch_Cfg_st_t; }ADC_Ch_Cfg_st_t;
typedef enum ASigConvStat typedef __attribute__((aligned(4))) enum ASigConvStat
{ {
ADC_STAT_IDLE = 0, ADC_STAT_IDLE = 0,
ADC_STAT_INIT, ADC_STAT_INIT,
...@@ -36,7 +36,7 @@ typedef enum ASigConvStat ...@@ -36,7 +36,7 @@ typedef enum ASigConvStat
ADC_STAT_ERR, ADC_STAT_ERR,
}ADC_Stat_en_t; }ADC_Stat_en_t;
typedef struct typedef struct __attribute__((aligned(4)))
{ {
ADC_Stat_en_t enStatus; ADC_Stat_en_t enStatus;
uint8_t u8CurrentCh; uint8_t u8CurrentCh;
...@@ -44,7 +44,7 @@ typedef struct ...@@ -44,7 +44,7 @@ typedef struct
uint8_t u8Timer; uint8_t u8Timer;
}ADC_Ctrl_st_t; }ADC_Ctrl_st_t;
typedef struct typedef struct __attribute__((aligned(4)))
{ {
uint8_t u8Valid; uint8_t u8Valid;
uint8_t u8Rsvd; uint8_t u8Rsvd;
...@@ -72,25 +72,21 @@ ADC_Ctrl_st_t stADCCtrl; ...@@ -72,25 +72,21 @@ ADC_Ctrl_st_t stADCCtrl;
uint16_t u16ADCSample[ADC_CONV_CH_NUMBER]; uint16_t u16ADCSample[ADC_CONV_CH_NUMBER];
ADC_Data_st_t stADCData[ADC_SIGNAL_CH_NUMBER]; ADC_Data_st_t stADCData[ADC_SIGNAL_CH_NUMBER];
const uint8_t u8ADCChList[ADC_CONV_CH_NUMBER] = const uint8_t __attribute__((aligned(4))) u8ADCChList[ADC_CONV_CH_NUMBER] =
{ {
2U, 3U, 7U, 5U, 2U, 3U,
}; };
const ADC_Ch_Cfg_st_t stADCChCfg[ADC_SIGNAL_CH_NUMBER] = const __attribute__((aligned(4))) ADC_Ch_Cfg_st_t stADCChCfg[ADC_SIGNAL_CH_NUMBER] =
{ {
{ 0U, 0U, 0U, 0U, 700U, 1U, ADC_Voltage_Calc_Circuit102,}, { 0U, 0U, 0U, 0U, 0U, 1U, ADC_Voltage_Calc_Circuit102,},
{ 1U, 0U, 0U, 0U, 0U, 1U, ADC_Voltage_Calc_Circuit102,}, { 1U, 0U, 0U, 0U, 0U, 1U, ADC_Voltage_Calc_Circuit102,},
{ 2U, 0U, 0U, 0U, 0U, 1U, ADC_Voltage_Calc_Circuit101,},
{ 3U, 2U, 0U, 2U, 18U, 1U, ADC_Res_Calc_Circuit101,},
}; };
const ADC_Res_List_st_t stADCResList[ADC_SIGNAL_CH_NUMBER] = const __attribute__((aligned(4))) ADC_Res_List_st_t stADCResList[ADC_SIGNAL_CH_NUMBER] =
{ {
{ 3300000U, 1000000U, 0U, 0U,}, { 3300000U, 1000000U, 0U, 0U,},
{ 3300000U, 1000000U, 0U, 0U,}, { 3300000U, 1000000U, 0U, 0U,},
{ 0U, 0U, 0U, 0U,},
{ 0U, 0U, 670U, 300U,},
}; };
/* Private function prototypes ----------------------------------------------*/ /* Private function prototypes ----------------------------------------------*/
...@@ -115,10 +111,11 @@ void Analog_Signal_Conv_Init(void) ...@@ -115,10 +111,11 @@ void Analog_Signal_Conv_Init(void)
} }
} }
RTE_ADC_Init(0,2);
RTE_ADC_Init(0,3); for (i = 0U; i < ADC_CONV_CH_NUMBER; i++)
RTE_ADC_Init(0,5); {
RTE_ADC_Init(0,7); RTE_ADC_Init(0, u8ADCChList[i]);
}
for (i = 0U; i < ADC_SIGNAL_CH_NUMBER; i++) for (i = 0U; i < ADC_SIGNAL_CH_NUMBER; i++)
{ {
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* \attention * \attention
* *
* This file is automatically generated by analog signals configuration tool. * This file is automatically generated by analog signals configuration tool.
* Date : 2024/3/31 13:14:40 * Date : 2024/6/16 16:49:27
* Cfg Tool Ver : 1.1.0 * Cfg Tool Ver : 1.1.0
* Engineer : ShiHao * Engineer : ShiHao
* (c) Heilongjiang TYW electronics co., LTD * (c) Heilongjiang TYW electronics co., LTD
...@@ -30,13 +30,11 @@ enum ADCChName ...@@ -30,13 +30,11 @@ enum ADCChName
{ {
ADC_CH_KL30_VOLTAGE = 0, ADC_CH_KL30_VOLTAGE = 0,
ADC_CH_KL15_VOLTAGE, ADC_CH_KL15_VOLTAGE,
ADC_CH_FUEL_VREF,
ADC_CH_FUEL1,
}; };
/* Exported macro ------------------------------------------------------------*/ /* Exported macro ------------------------------------------------------------*/
#define ADC_TOTAL_CH_NUMBER (4U) #define ADC_TOTAL_CH_NUMBER (2U)
#define ADC_SIGNAL_CH_NUMBER (4U) #define ADC_SIGNAL_CH_NUMBER (2U)
#define ADC_REF_VOLTAGE u16ADCRefVoltage #define ADC_REF_VOLTAGE u16ADCRefVoltage
/* Exported variables --------------------------------------------------------*/ /* Exported variables --------------------------------------------------------*/
......
...@@ -16,12 +16,9 @@ ...@@ -16,12 +16,9 @@
#include "Eeprom\eeManager_Interface.h" #include "Eeprom\eeManager_Interface.h"
#include "Eeprom\eepromManage.h" #include "Eeprom\eepromManage.h"
#include "BU98R10\BU98R10.h" #include "BU98R10\BU98R10.h"
//#include "Key\Key_user.h"
#include "LED_Driver\Simulated_IIC_2_Master.h" #include "LED_Driver\Simulated_IIC_2_Master.h"
#include "LED_Driver\LED_Driver_Interface.h" #include "LED_Driver\LED_Driver_Interface.h"
#include "LED_Driver\LED_Driver.h" #include "LED_Driver\LED_Driver.h"
#include "Light_Sensor\Light_Sensor.h"
#include "Light_Sensor\Light_Sensor_Interface.h"
#include "Analog\Analog_Signals.h" #include "Analog\Analog_Signals.h"
#include "Analog\Analog_Circuits.h" #include "Analog\Analog_Circuits.h"
#include "common.h" #include "common.h"
......
#ifndef LIGHT_SENSOR_H__
#define LIGHT_SENSOR_H__
/*-------------------------------------------------------------------------------------------*/
// #define LIGHT_SENSOR_PLATFORM_16BIT
#ifdef LIGHT_SENSOR_PLATFORM_16BIT
typedef unsigned char ALS_uint8_t;
typedef unsigned int ALS_uint16_t;
typedef unsigned long ALS_uint32_t;
#else
typedef unsigned char ALS_uint8_t;
typedef unsigned short ALS_uint16_t;
typedef unsigned int ALS_uint32_t;
#endif
/*-------------------------------------------------------------------------------------------*/
#define ALS_VERSIONS 0X01U
typedef void (*ALS_Hanle)(void);
typedef void (*ALS_Hanle_Write)(ALS_uint8_t u8ALSData);
typedef ALS_uint8_t (*ALS_Hanle_Read)(void);
typedef struct
{
ALS_Hanle_Write pfnALSDelay100usCB; /*100us 延时函数*/
ALS_Hanle pfnALSIICStartCB; /*start 函数接口*/
ALS_Hanle pfnALSIICStopCB; /*stop 函数接口*/
ALS_Hanle_Write pfnALSIICTxDataCB; /*发送数据 函数接口*/
ALS_Hanle_Write pfnALSIICTxACKCB; /*发送ACK 函数接口*/
ALS_Hanle_Read pfnALSIICRxDataCB; /*接收数据 函数接口*/
ALS_Hanle_Read pfnALSIICRxACKCB; /*接收ACK 函数接口*/
} Light_Sensor_Par_st_t;
/*-------------------------------------------------------------------------------------------*/
/*
返回0:初始化成功
返回1:初始化失败
*/
extern ALS_uint8_t ALS_Init(Light_Sensor_Par_st_t *pstALSInitPar);
/*根据需要的数据更新频率进行调用*/
extern void ALS_Service(void);
extern ALS_uint16_t ALS_Get_Data0(void);
extern ALS_uint16_t ALS_Get_Data1(void);
/*-------------------------------------------------------------------------------------------*/
#endif
#include "Light_Sensor.h"
#include "Light_Sensor_Interface.h"
#include "Simulated_IIC_2_Master.h"
void ALS_Delay_100us(ALS_uint8_t u8ALSData)
{
ALS_uint32_t ALSDelayCount = 0;
ALS_uint32_t i = 0;
ALS_uint32_t j = 0;
for (j = 0; j < u8ALSData; j++)
{
for (i = 0; i < 1000; i++)
{
ALSDelayCount++;
}
}
}
/****************初始化函数调用示例*************/
void Light_Sensor_Init_Example(void)
{
Light_Sensor_Par_st_t stALSInitPar;
stALSInitPar.pfnALSDelay100usCB = ALS_Delay_100us;
stALSInitPar.pfnALSIICStartCB = Simulated_IIC_2_Start;
stALSInitPar.pfnALSIICStopCB = Simulated_IIC_2_Stop;
stALSInitPar.pfnALSIICTxDataCB = Simulated_IIC_2_Transmit_Data;
stALSInitPar.pfnALSIICTxACKCB = Simulated_IIC_2_Transmit_ACK;
stALSInitPar.pfnALSIICRxDataCB = Simulated_IIC_2_Receive_Data;
stALSInitPar.pfnALSIICRxACKCB = Simulated_IIC_2_Receive_ACK;
ALS_Init(&stALSInitPar);
}
#ifndef LIGHT_SENSOR_INTERFACE_H__
#define LIGHT_SENSOR_INTERFACE_H__
/*-----------------------------------------------------------*/
extern void Light_Sensor_Init_Example(void);
#endif
...@@ -49,28 +49,18 @@ static void Power_KL30_Init(void) ...@@ -49,28 +49,18 @@ static void Power_KL30_Init(void)
DFlash_init(); DFlash_init();
Analog_Signal_Conv_Init(); Analog_Signal_Conv_Init();
BU98R10_Init(); BU98R10_Init();
BackLight_Init();
Sys_KL30_Init(); Sys_KL30_Init();
Checkself_Init(); Checkself_Init();
// Data_Vehicle_Speed_KL30_Init();
// Data_Engine_Speed_KL30_Wakeup_Init();
LINE_IN_Init(); LINE_IN_Init();
// Key_KL30_Init_EXample();
Light_Sensor_Init_Example();//注意顺序1
LED_Driver_Init_Example();//注意顺序2 LED_Driver_Init_Example();//注意顺序2
Data_User_Mileage_KL30Init(); Data_User_Mileage_KL30Init();
Fuel_KL30_Init();
TimerM_PWM_counter_Output_Init(TIMERM_COUNTER0, 400, 64000000); TimerM_PWM_counter_Output_Init(TIMERM_COUNTER0, 400, 64000000);
TimerM_PWM_counter_Output_Init(TIMERM_COUNTER1, 400, 64000000); TimerM_PWM_counter_Output_Init(TIMERM_COUNTER1, 400, 64000000);
// TimerM_PWM_counter_Output_Init(TIMERM_COUNTER0, 400);
// TimerM_PWM_counter_Output_Init(TIMERM_COUNTER1, 400);
TimerM_PWM_CH_Output_init(TIMERM_COUNTER0, TIMERM_CHB, ActiveLevel_High); TimerM_PWM_CH_Output_init(TIMERM_COUNTER0, TIMERM_CHB, ActiveLevel_High);
TimerM_PWM_CH_Output_init(TIMERM_COUNTER0, TIMERM_CHC, ActiveLevel_High); TimerM_PWM_CH_Output_init(TIMERM_COUNTER0, TIMERM_CHC, ActiveLevel_High);
TimerM_PWM_CH_Output_init(TIMERM_COUNTER0, TIMERM_CHD, ActiveLevel_High); TimerM_PWM_CH_Output_init(TIMERM_COUNTER0, TIMERM_CHD, ActiveLevel_High);
TimerM_PWM_CH_Output_init(TIMERM_COUNTER1, TIMERM_CHB, ActiveLevel_High); TimerM_PWM_CH_Output_init(TIMERM_COUNTER1, TIMERM_CHB, ActiveLevel_High);
// Telltales_Auto_Start_Stop();
Telltales_Init(); Telltales_Init();
// MenuData_Unit_Init();
g_stRTCInformation.u8RTCSecond = 0; g_stRTCInformation.u8RTCSecond = 0;
g_stRTCInformation.u8RTCMinute = 0; g_stRTCInformation.u8RTCMinute = 0;
g_stRTCInformation.u8RTCHour = 0; g_stRTCInformation.u8RTCHour = 0;
...@@ -92,21 +82,11 @@ static void Power_Wakeup_Init(void) ...@@ -92,21 +82,11 @@ static void Power_Wakeup_Init(void)
Analog_Signal_Conv_Init(); Analog_Signal_Conv_Init();
Data_User_Mileage_WakeupInit(); Data_User_Mileage_WakeupInit();
BU98R10_Init(); BU98R10_Init();
BackLight_Init();
Sys_WakeUp_Init(); Sys_WakeUp_Init();
// Data_Vehicle_Speed_KL30_Init();
// Data_Vehicle_Speed_Wakeup_Init();
// Data_Engine_Speed_KL30_Wakeup_Init();
LINE_IN_Init(); LINE_IN_Init();
// Key_KL30_Init_EXample();
Line_In_KL15_ON_Init(); Line_In_KL15_ON_Init();
Light_Sensor_Init_Example();//注意顺序1
LED_Driver_Init_Example();//注意顺序2
Fuel_KL30_Init();
TimerM_PWM_counter_Output_Init(TIMERM_COUNTER0, 400, 64000000); TimerM_PWM_counter_Output_Init(TIMERM_COUNTER0, 400, 64000000);
TimerM_PWM_counter_Output_Init(TIMERM_COUNTER1, 400, 64000000); TimerM_PWM_counter_Output_Init(TIMERM_COUNTER1, 400, 64000000);
// TimerM_PWM_counter_Output_Init(TIMERM_COUNTER0, 400);
// TimerM_PWM_counter_Output_Init(TIMERM_COUNTER1, 400);
TimerM_PWM_CH_Output_init(TIMERM_COUNTER0, TIMERM_CHB, ActiveLevel_High); TimerM_PWM_CH_Output_init(TIMERM_COUNTER0, TIMERM_CHB, ActiveLevel_High);
TimerM_PWM_CH_Output_init(TIMERM_COUNTER0, TIMERM_CHC, ActiveLevel_High); TimerM_PWM_CH_Output_init(TIMERM_COUNTER0, TIMERM_CHC, ActiveLevel_High);
TimerM_PWM_CH_Output_init(TIMERM_COUNTER0, TIMERM_CHD, ActiveLevel_High); TimerM_PWM_CH_Output_init(TIMERM_COUNTER0, TIMERM_CHD, ActiveLevel_High);
...@@ -132,12 +112,9 @@ static void Power_IG_OFF_Init(void) ...@@ -132,12 +112,9 @@ static void Power_IG_OFF_Init(void)
static void Power_IG_ON_Init(void) static void Power_IG_ON_Init(void)
{ {
BackLight_Init();
Checkself_Init(); Checkself_Init();
Line_In_KL15_ON_Init(); Line_In_KL15_ON_Init();
Telltales_KL15_Init(); Telltales_KL15_Init();
Fuel_KL15_Init();
// Telltales_Auto_Start_Stop();
} }
static void Power_Sleep_Init(void) static void Power_Sleep_Init(void)
......
#include "System_Monitor.h"
#include <stdio.h>
typedef struct
{
monitorlib_uint8_t SumCnt;
monitorlib_uint16_t DebounceTimer;
monitorlib_uint32_t ActVoltage;
monitorlib_uint8_t FinalSts;
monitorlib_uint8_t ActSts;
} MonitorStruct;
MonitorStruct SysFun_KL30Monitor;
MonitorStruct SysFun_KL15Monitor;
MonitorStruct SysNM_KL30Monitor;
MonitorStruct SysNM_KL15Monitor;
#define Base_Vol 0u
#define ENTER_LOW_N_RANGE 6500U
#define EXIT_LOW_N_RANGE 7000U
#define ENTER_LOW_Y_RANGE 9000U
#define EXIT_LOW_Y_RANGE 9500U
#define EXIT_HIGH_Y_RANGE 16000U
#define ENTER_HIGH_Y_RANGE 16500U
#define EXIT_HIGH_N_RANGE 18500U
#define ENTER_HIGH_N_RANGE 19000U
#define Top_Vol 0xffffu
static monitorlib_uint8_t System_Calc_NMRange(monitorlib_uint16_t u16Vol);
static monitorlib_uint8_t System_Calc_FunRange(monitorlib_uint16_t u16Vol);
static void System_Fast_WakeUp(void);
static void System_Fun_Process(void);
static void System_NM_Process(void);
MonitorExt_st pfunction;
monitorlib_uint8_t SysWakeUpMode = 0u;
monitorlib_uint8_t SetVolFlag = 0u;
monitorlib_uint16_t FUNSysVol_Range [ 10u ] = {
Base_Vol,
ENTER_LOW_N_RANGE,
EXIT_LOW_N_RANGE,
ENTER_LOW_Y_RANGE,
EXIT_LOW_Y_RANGE,
EXIT_HIGH_Y_RANGE,
ENTER_HIGH_Y_RANGE,
EXIT_HIGH_N_RANGE,
ENTER_HIGH_N_RANGE,
Top_Vol,
};
monitorlib_uint16_t NMSysVol_Range [ 10u ] = {
Base_Vol,
ENTER_LOW_N_RANGE,
EXIT_LOW_N_RANGE,
ENTER_LOW_Y_RANGE,
EXIT_LOW_Y_RANGE,
EXIT_HIGH_Y_RANGE,
ENTER_HIGH_Y_RANGE,
EXIT_HIGH_N_RANGE,
ENTER_HIGH_N_RANGE,
Top_Vol,
};
monitorlib_uint16_t t_FUN_KL30_Debounce;
monitorlib_uint16_t t_FUN_KL15_Debounce;
monitorlib_uint16_t t_NM_KL30_Debounce;
monitorlib_uint16_t t_NM_KL15_Debounce;
monitorlib_uint16_t t_NM_KL30_Debounce_Cancel;
monitorlib_uint16_t t_NM_KL15_Debounce_Cancel;
monitorlib_uint16_t t_FUN_KL30_Debounce_Cancel;
monitorlib_uint16_t t_FUN_KL15_Debounce_Cancel;
monitorlib_uint16_t t_NM_KL30_timer;
monitorlib_uint16_t t_FUN_KL30_timer;
monitorlib_uint8_t Read_KL30_ConvertFinish(void)
{
return SysWakeUpMode;
}
static monitorlib_uint8_t System_Calc_FunRange(monitorlib_uint16_t u16Vol)
{
monitorlib_uint8_t i;
for ( i = 0u; i < (sizeof(FUNSysVol_Range) / sizeof(FUNSysVol_Range [ 0 ])); i++ )
{
if ( u16Vol < FUNSysVol_Range [ i ] )
{
break;
}
}
return i;
}
static monitorlib_uint8_t System_Calc_NMRange(monitorlib_uint16_t u16Vol)
{
monitorlib_uint8_t i;
for ( i = 0u; i < (sizeof(NMSysVol_Range) / sizeof(NMSysVol_Range [ 0 ])); i++ )
{
if ( u16Vol < NMSysVol_Range [ i ] )
{
break;
}
}
return i;
}
void Sys_Set_Pata(const monitorlib_uint16_t FUN_Vol [], MonitorExt_st *pfunc)
{
FUNSysVol_Range [ 0 ] = FUN_Vol [ 0 ];
FUNSysVol_Range [ 1 ] = FUN_Vol [ 1 ];
FUNSysVol_Range [ 2 ] = FUN_Vol [ 2 ];
FUNSysVol_Range [ 3 ] = FUN_Vol [ 3 ];
FUNSysVol_Range [ 4 ] = FUN_Vol [ 4 ];
FUNSysVol_Range [ 5 ] = FUN_Vol [ 5 ];
FUNSysVol_Range [ 6 ] = FUN_Vol [ 6 ];
FUNSysVol_Range [ 7 ] = FUN_Vol [ 7 ];
FUNSysVol_Range [ 8 ] = FUN_Vol [ 8 ];
FUNSysVol_Range [ 9 ] = FUN_Vol [ 9 ];
t_FUN_KL30_Debounce = FUN_Vol [ 10 ];
t_FUN_KL15_Debounce = FUN_Vol [ 11 ];
NMSysVol_Range [ 0 ] = FUN_Vol [ 12 ];
NMSysVol_Range [ 1 ] = FUN_Vol [ 13 ];
NMSysVol_Range [ 2 ] = FUN_Vol [ 14 ];
NMSysVol_Range [ 3 ] = FUN_Vol [ 15 ];
NMSysVol_Range [ 4 ] = FUN_Vol [ 16 ];
NMSysVol_Range [ 5 ] = FUN_Vol [ 17 ];
NMSysVol_Range [ 6 ] = FUN_Vol [ 18 ];
NMSysVol_Range [ 7 ] = FUN_Vol [ 19 ];
NMSysVol_Range [ 8 ] = FUN_Vol [ 20 ];
NMSysVol_Range [ 9 ] = FUN_Vol [ 21 ];
t_NM_KL30_Debounce = FUN_Vol [ 22 ];
t_NM_KL15_Debounce = FUN_Vol [ 23 ];
t_NM_KL30_Debounce_Cancel = FUN_Vol [ 24 ];
t_FUN_KL30_Debounce_Cancel = FUN_Vol [ 25 ];
pfunction.SysGet_KL30_Valid = pfunc->SysGet_KL30_Valid;
pfunction.SysGet_KL15_Valid = pfunc->SysGet_KL15_Valid;
pfunction.SysGet_KL30_value_Force = pfunc->SysGet_KL30_value_Force;
pfunction.SysGet_KL15_value_Force = pfunc->SysGet_KL15_value_Force;
pfunction.SysGet_KL30_value = pfunc->SysGet_KL30_value;
pfunction.SysGet_KL15_value = pfunc->SysGet_KL15_value;
pfunction.SysGet_KL15Line = pfunc->SysGet_KL15Line;
pfunction.COM_Delay = pfunc->COM_Delay;
pfunction.SysMonitorLogic = pfunc->SysMonitorLogic;
SetVolFlag = 0x55u;
}
void System_Monitor_KL30Init(void)
{
SysWakeUpMode = 0u;
SysFun_KL30Monitor.SumCnt = 0u;
SysFun_KL30Monitor.DebounceTimer = 0u;
SysFun_KL30Monitor.ActVoltage = 0u;
SysFun_KL30Monitor.FinalSts = 0u;
SysFun_KL30Monitor.ActSts = 0u;
SysFun_KL15Monitor.SumCnt = 0u;
SysFun_KL15Monitor.DebounceTimer = 0u;
SysFun_KL15Monitor.ActVoltage = 0u;
SysFun_KL15Monitor.FinalSts = 0u;
SysFun_KL15Monitor.ActSts = 0u;
SysNM_KL30Monitor.SumCnt = 0u;
SysNM_KL30Monitor.DebounceTimer = 0u;
SysNM_KL30Monitor.ActVoltage = 0u;
SysNM_KL30Monitor.FinalSts = 0u;
SysNM_KL30Monitor.ActSts = 0u;
SysNM_KL15Monitor.SumCnt = 0u;
SysNM_KL15Monitor.DebounceTimer = 0u;
SysNM_KL15Monitor.ActVoltage = 0u;
SysNM_KL15Monitor.FinalSts = 0u;
SysNM_KL15Monitor.ActSts = 0u;
if ( SetVolFlag != 0x55u )
{
t_NM_KL30_Debounce = 1000u;
t_NM_KL15_Debounce = 2u;
t_FUN_KL30_Debounce = 1000u;
t_FUN_KL15_Debounce = 2u;
t_NM_KL30_Debounce_Cancel = 1000U;
t_NM_KL15_Debounce_Cancel = 2U;
t_FUN_KL30_Debounce_Cancel = 1000U;
t_FUN_KL15_Debounce_Cancel = 2U;
FUNSysVol_Range [ 0 ] = Base_Vol;
FUNSysVol_Range [ 1 ] = ENTER_LOW_N_RANGE;
FUNSysVol_Range [ 2 ] = EXIT_LOW_N_RANGE;
FUNSysVol_Range [ 3 ] = ENTER_LOW_Y_RANGE;
FUNSysVol_Range [ 4 ] = EXIT_LOW_Y_RANGE;
FUNSysVol_Range [ 5 ] = EXIT_HIGH_Y_RANGE;
FUNSysVol_Range [ 6 ] = ENTER_HIGH_Y_RANGE;
FUNSysVol_Range [ 7 ] = EXIT_HIGH_N_RANGE;
FUNSysVol_Range [ 8 ] = ENTER_HIGH_N_RANGE;
FUNSysVol_Range [ 9 ] = Top_Vol;
NMSysVol_Range [ 0 ] = Base_Vol;
NMSysVol_Range [ 1 ] = ENTER_LOW_N_RANGE;
NMSysVol_Range [ 2 ] = EXIT_LOW_N_RANGE;
NMSysVol_Range [ 3 ] = ENTER_LOW_Y_RANGE;
NMSysVol_Range [ 4 ] = EXIT_LOW_Y_RANGE;
NMSysVol_Range [ 5 ] = EXIT_HIGH_Y_RANGE;
NMSysVol_Range [ 6 ] = ENTER_HIGH_Y_RANGE;
NMSysVol_Range [ 7 ] = EXIT_HIGH_N_RANGE;
NMSysVol_Range [ 8 ] = ENTER_HIGH_N_RANGE;
NMSysVol_Range [ 9 ] = Top_Vol;
SetVolFlag = 0x55u;
}
if ( pfunction.COM_Delay != (( void * )0) )
{
pfunction.COM_Delay(260U);
}
System_Fast_WakeUp( );
}
void System_Monitor_WakeupInit(void)
{
SysWakeUpMode = 0u;
SysFun_KL30Monitor.SumCnt = 0u;
SysFun_KL30Monitor.DebounceTimer = 0u;
SysFun_KL30Monitor.ActVoltage = 0u;
SysFun_KL30Monitor.FinalSts = 0u;
SysFun_KL30Monitor.ActSts = 0u;
SysFun_KL15Monitor.SumCnt = 0u;
SysFun_KL15Monitor.DebounceTimer = 0u;
SysFun_KL15Monitor.ActVoltage = 0u;
SysFun_KL15Monitor.FinalSts = 0u;
SysFun_KL15Monitor.ActSts = 0u;
SysNM_KL30Monitor.SumCnt = 0u;
SysNM_KL30Monitor.DebounceTimer = 0u;
SysNM_KL30Monitor.ActVoltage = 0u;
SysNM_KL30Monitor.FinalSts = 0u;
SysNM_KL30Monitor.ActSts = 0u;
SysNM_KL15Monitor.SumCnt = 0u;
SysNM_KL15Monitor.DebounceTimer = 0u;
SysNM_KL15Monitor.ActVoltage = 0u;
SysNM_KL15Monitor.FinalSts = 0u;
SysNM_KL15Monitor.ActSts = 0u;
if ( SetVolFlag != 0x55u )
{
t_NM_KL30_Debounce = 1000u;
t_NM_KL15_Debounce = 2u;
t_FUN_KL30_Debounce = 1000u;
t_FUN_KL15_Debounce = 2u;
t_NM_KL30_Debounce_Cancel = 1000U;
t_NM_KL15_Debounce_Cancel = 2U;
t_FUN_KL30_Debounce_Cancel = 1000U;
t_FUN_KL15_Debounce_Cancel = 2U;
FUNSysVol_Range [ 0 ] = Base_Vol;
FUNSysVol_Range [ 1 ] = ENTER_LOW_N_RANGE;
FUNSysVol_Range [ 2 ] = EXIT_LOW_N_RANGE;
FUNSysVol_Range [ 3 ] = ENTER_LOW_Y_RANGE;
FUNSysVol_Range [ 4 ] = EXIT_LOW_Y_RANGE;
FUNSysVol_Range [ 5 ] = EXIT_HIGH_Y_RANGE;
FUNSysVol_Range [ 6 ] = ENTER_HIGH_Y_RANGE;
FUNSysVol_Range [ 7 ] = EXIT_HIGH_N_RANGE;
FUNSysVol_Range [ 8 ] = ENTER_HIGH_N_RANGE;
FUNSysVol_Range [ 9 ] = Top_Vol;
NMSysVol_Range [ 0 ] = Base_Vol;
NMSysVol_Range [ 1 ] = ENTER_LOW_N_RANGE;
NMSysVol_Range [ 2 ] = EXIT_LOW_N_RANGE;
NMSysVol_Range [ 3 ] = ENTER_LOW_Y_RANGE;
NMSysVol_Range [ 4 ] = EXIT_LOW_Y_RANGE;
NMSysVol_Range [ 5 ] = EXIT_HIGH_Y_RANGE;
NMSysVol_Range [ 6 ] = ENTER_HIGH_Y_RANGE;
NMSysVol_Range [ 7 ] = EXIT_HIGH_N_RANGE;
NMSysVol_Range [ 8 ] = ENTER_HIGH_N_RANGE;
NMSysVol_Range [ 9 ] = Top_Vol;
SetVolFlag = 0x55u;
}
System_Fast_WakeUp( );
}
void Sys_Status_Update_Service(void)
{
System_Fun_Process( );
System_NM_Process( );
if ( pfunction.SysMonitorLogic != (( void * )0) )
{
pfunction.SysMonitorLogic( );
}
}
static void System_Fast_WakeUp(void)
{
monitorlib_uint16_t KL30_Voltage;
monitorlib_uint16_t KL15_Voltage;
monitorlib_uint16_t Voltage;
monitorlib_uint8_t NormalKL30Cnt = 0U;
monitorlib_uint8_t abnormalKL30Cnt = 0U;
monitorlib_uint8_t AttemptCnt = 0U;
AttemptCnt = 0u;
while ( SysNM_KL30Monitor.FinalSts == 0u )
{
if ( pfunction.COM_Delay != (( void * )0) )
{
pfunction.COM_Delay(2U);
}
/*KL30 KL15 voltage */
if ( pfunction.SysGet_KL30_value_Force != ( void * )0 )
{
KL30_Voltage = pfunction.SysGet_KL30_value_Force( );
}
else
{
KL30_Voltage = 0u;
}
if ( pfunction.SysGet_KL15_value_Force != ( void * )0 )
{
KL15_Voltage = pfunction.SysGet_KL15_value_Force( );
}
else
{
KL15_Voltage = 0u;
}
if ( KL30_Voltage > KL15_Voltage )
{
Voltage = KL30_Voltage;
}
else
{
Voltage = KL15_Voltage;
}
if ( (Voltage <= NMSysVol_Range [ 2 ]) || (Voltage >= NMSysVol_Range [ 7 ]) )
{
NormalKL30Cnt = 0U;
abnormalKL30Cnt++;
}
else
{
NormalKL30Cnt++;
abnormalKL30Cnt = 0U;
}
AttemptCnt++;
if ( AttemptCnt >= 10u )
{
break;
}
if ( NormalKL30Cnt >= 5U )
{
SysNM_KL30Monitor.FinalSts = 5u;
}
if ( abnormalKL30Cnt >= 5U )
{
SysNM_KL30Monitor.FinalSts = 9u;
}
}
if ( (SysNM_KL30Monitor.FinalSts != 0u) )
{
SysWakeUpMode = 0x55U;
if ( pfunction.SysGet_KL15Line != (( void * )0) )
{
SysNM_KL15Monitor.FinalSts = pfunction.SysGet_KL15Line( );
SysNM_KL15Monitor.ActSts = pfunction.SysGet_KL15Line( );
}
else
{
SysNM_KL15Monitor.FinalSts = 0u;
SysNM_KL15Monitor.ActSts = 0u;
}
if ( pfunction.SysMonitorLogic != ( void * )0 )
{
pfunction.SysMonitorLogic( );
}
}
}
static void System_NM_Process(void)
{
monitorlib_uint8_t m8;
static monitorlib_uint16_t DebpounceTimer;
monitorlib_uint16_t Voltage;
monitorlib_uint8_t VoltageKL30Valid;
monitorlib_uint8_t VoltageKL15Valid;
monitorlib_uint16_t Voltage_KL15;
monitorlib_uint16_t Voltage_KL30;
if ( pfunction.SysGet_KL15Line != (( void * )0) )
{
if ( SysNM_KL15Monitor.ActSts == pfunction.SysGet_KL15Line( ) )
{
if ( SysNM_KL15Monitor.DebounceTimer < t_NM_KL15_Debounce )
{
SysNM_KL15Monitor.DebounceTimer++;
}
else
{
SysNM_KL15Monitor.FinalSts = SysNM_KL15Monitor.ActSts;
}
}
else
{
SysNM_KL15Monitor.DebounceTimer = 0u;
SysNM_KL15Monitor.ActSts = pfunction.SysGet_KL15Line( );
}
}
else
{
SysNM_KL15Monitor.FinalSts = 0u;
SysNM_KL15Monitor.ActSts = 0u;
SysNM_KL15Monitor.DebounceTimer = 0u;
}
if ( pfunction.SysGet_KL30_Valid != ( void * )0 )
{
VoltageKL30Valid = pfunction.SysGet_KL30_Valid( );
}
else
{
VoltageKL30Valid = 0u;
}
if ( pfunction.SysGet_KL15_Valid != ( void * )0 )
{
VoltageKL15Valid = pfunction.SysGet_KL15_Valid( );
}
else
{
VoltageKL15Valid = 0u;
}
if ( (VoltageKL30Valid == 1U) && (VoltageKL15Valid == 1U) )
{
if ( pfunction.SysGet_KL15_value != (( void * )0) )
{
Voltage_KL15 = pfunction.SysGet_KL15_value( );
}
else
{
Voltage_KL15 = 0u;
}
if ( pfunction.SysGet_KL15_value != (( void * )0) )
{
Voltage_KL30 = pfunction.SysGet_KL30_value( );
}
else
{
Voltage_KL30 = 0u;
}
if ( Voltage_KL30 > Voltage_KL15 )
{
Voltage = Voltage_KL30;
}
else
{
Voltage = Voltage_KL15;
}
if ( SysNM_KL30Monitor.SumCnt < 50u )
{
SysNM_KL30Monitor.ActVoltage += Voltage;
SysNM_KL30Monitor.SumCnt += 1u;
Voltage = ( monitorlib_uint16_t )(SysNM_KL30Monitor.ActVoltage / SysNM_KL30Monitor.SumCnt);
}
else
{
SysNM_KL30Monitor.SumCnt = 0u;
SysNM_KL30Monitor.ActVoltage = 0u;
SysNM_KL30Monitor.ActVoltage += Voltage;
SysNM_KL30Monitor.SumCnt += 1u;
Voltage = ( monitorlib_uint16_t )(SysNM_KL30Monitor.ActVoltage / SysNM_KL30Monitor.SumCnt);
}
m8 = System_Calc_NMRange(Voltage);
if ( SysNM_KL30Monitor.ActSts == m8 )
{
switch ( SysNM_KL30Monitor.FinalSts )
{
case 0:
case 1:
case 9:
t_NM_KL30_timer = t_NM_KL30_Debounce_Cancel;
break;
default:
t_NM_KL30_timer = t_NM_KL30_Debounce;
break;
}
if ( SysNM_KL30Monitor.DebounceTimer < t_NM_KL30_timer ) /*40202-8*/
{
SysNM_KL30Monitor.DebounceTimer++;
}
else
{
DebpounceTimer = 0u;
if ( SysNM_KL30Monitor.FinalSts == 9u ) /* 高压 */
{
if ( (m8 == 9u) || (m8 == 8u) )
{
SysNM_KL30Monitor.FinalSts = 9u; /** 维持不变 **/
}
else
{
SysNM_KL30Monitor.FinalSts = m8; /**退�?*/
}
}
if ( SysNM_KL30Monitor.FinalSts == 1u ) /* 低压 */
{
if ( (m8 == 1u) || (m8 == 2u) )
{
SysNM_KL30Monitor.FinalSts = 1u; /** 维持不变 */
}
else
{
SysNM_KL30Monitor.FinalSts = m8; /**退�?*/
}
}
/* 非高低压 */
if ( (SysNM_KL30Monitor.FinalSts != 1u) && (SysNM_KL30Monitor.FinalSts != 9u) )
{
SysNM_KL30Monitor.FinalSts = m8; /** 进入*/
}
}
}
else
{
/* 计时时间清除 */
SysNM_KL30Monitor.DebounceTimer = 0U;
DebpounceTimer++;
if ( DebpounceTimer >= 5u )
{
DebpounceTimer = 0u;
SysNM_KL30Monitor.ActSts = m8;
}
}
}
}
static void System_Fun_Process(void)
{
monitorlib_uint8_t m8;
monitorlib_uint8_t VoltageKL30Valid;
monitorlib_uint8_t VoltageKL15Valid;
monitorlib_uint16_t Voltage;
monitorlib_uint16_t Voltage_KL15;
monitorlib_uint16_t Voltage_KL30;
static monitorlib_uint16_t DebpounceTimer;
if ( pfunction.SysGet_KL15Line != (( void * )0) )
{
if ( SysFun_KL15Monitor.ActSts == pfunction.SysGet_KL15Line( ) )
{
if ( SysFun_KL15Monitor.DebounceTimer < t_FUN_KL15_Debounce )
{
SysFun_KL15Monitor.DebounceTimer++;
}
else
{
SysFun_KL15Monitor.FinalSts = SysFun_KL15Monitor.ActSts;
}
if(SysFun_KL15Monitor.ActSts)
{
SysFun_KL15Monitor.FinalSts = SysFun_KL15Monitor.ActSts;
}
}
else
{
SysFun_KL15Monitor.DebounceTimer = 0u;
SysFun_KL15Monitor.ActSts = pfunction.SysGet_KL15Line( );
}
}
else
{
SysFun_KL15Monitor.DebounceTimer = 0u;
SysFun_KL15Monitor.FinalSts = 0u;
SysFun_KL15Monitor.ActSts = 0u;
}
if ( pfunction.SysGet_KL30_Valid != (( void * )0) )
{
VoltageKL30Valid = pfunction.SysGet_KL30_Valid( );
}else
{
VoltageKL30Valid = 0u;
}
if ( pfunction.SysGet_KL15_Valid != (( void * )0) )
{
VoltageKL15Valid = pfunction.SysGet_KL15_Valid( );
}else
{
VoltageKL15Valid = 0u;
}
if ( (VoltageKL30Valid == 1U) && (VoltageKL15Valid == 1U) )
{
if ( pfunction.SysGet_KL15_value != (( void * )0) )
{
Voltage_KL15 = pfunction.SysGet_KL15_value( );
}
else
{
Voltage_KL15 = 0u;
}
if ( pfunction.SysGet_KL30_value != (( void * )0) )
{
Voltage_KL30 = pfunction.SysGet_KL30_value( );
}
else
{
Voltage_KL30 = 0u;
}
if ( Voltage_KL30 > Voltage_KL15 )
{
Voltage = Voltage_KL30;
}
else
{
Voltage = Voltage_KL15;
}
if ( SysFun_KL30Monitor.SumCnt < 50u )
{
SysFun_KL30Monitor.ActVoltage += Voltage;
SysFun_KL30Monitor.SumCnt += 1u;
Voltage = ( monitorlib_uint16_t )(SysFun_KL30Monitor.ActVoltage / SysFun_KL30Monitor.SumCnt);
}
else
{
SysFun_KL30Monitor.SumCnt = 0u;
SysFun_KL30Monitor.ActVoltage = 0u;
SysFun_KL30Monitor.ActVoltage += Voltage;
SysFun_KL30Monitor.SumCnt += 1u;
Voltage = ( monitorlib_uint16_t )(SysFun_KL30Monitor.ActVoltage / SysFun_KL30Monitor.SumCnt);
}
m8 = System_Calc_FunRange(Voltage);
// //printf("1 is %d, 2 is %d\r\n", m8, SysFun_KL30Monitor.FinalSts);
if ( SysFun_KL30Monitor.ActSts == m8 )
{
DebpounceTimer = 0u;
switch ( SysFun_KL30Monitor.FinalSts )
{
case 0:
case 1:
case 9:
t_FUN_KL30_timer = t_FUN_KL30_Debounce_Cancel;
break;
default:
t_FUN_KL30_timer = t_FUN_KL30_Debounce;
break;
}
/* 计时�?计时�?1000*2ms */
if ( SysFun_KL30Monitor.DebounceTimer < t_FUN_KL30_timer ) /*40202-8*/
{
SysFun_KL30Monitor.DebounceTimer++;
}
else
{
if ( SysFun_KL30Monitor.FinalSts > 7u ) /* 高压 */
{
if ( (m8 == 9u) || (m8 == 8u) || (m8 == 7u) )
{
SysFun_KL30Monitor.FinalSts = 9u;
SysFun_KL15Monitor.FinalSts = 0u;
}
else
{
SysFun_KL30Monitor.FinalSts = m8;
}
}
if ( SysFun_KL30Monitor.FinalSts == 1u ) /* 低压 */
{
if ( (m8 == 1u) || (m8 == 2u) )
{
SysFun_KL30Monitor.FinalSts = 1u;
SysFun_KL15Monitor.FinalSts = 0u;
}
else
{
SysFun_KL30Monitor.FinalSts = m8;
}
}
/* 非高低压 */
if ( (SysFun_KL30Monitor.FinalSts != 1u) && (SysFun_KL30Monitor.FinalSts <= 7u) )
{
SysFun_KL30Monitor.FinalSts = m8;
}
}
}
else
{
/* 计时时间清除 */
SysFun_KL30Monitor.DebounceTimer = 0U;
DebpounceTimer++;
if ( DebpounceTimer >= 5u )
{
DebpounceTimer = 0u;
SysFun_KL30Monitor.ActSts = m8;
}
}
}
/*
else
{
SysFun_KL30Monitor.FinalSts = 1u;
SysFun_KL15Monitor.FinalSts = 0u;
}*/
}
monitorlib_uint8_t System_NM_KL30_Status_Get(void)
{
return SysNM_KL30Monitor.FinalSts;
}
monitorlib_uint8_t System_NM_KL15_Status_Get(void)
{
return SysNM_KL15Monitor.FinalSts;
}
monitorlib_uint8_t System_FUN_KL30_Status_Get(void)
{
return SysFun_KL30Monitor.FinalSts;
}
monitorlib_uint8_t System_FUN_KL15_Status_Get(void)
{
return SysFun_KL15Monitor.FinalSts;
}
monitorlib_uint16_t Get_Sysmonitor_Version(void)
{
return 0x0002u;
}
...@@ -2,23 +2,25 @@ ...@@ -2,23 +2,25 @@
#include "Components.h" #include "Components.h"
#include "Application.h" #include "Application.h"
#include "delay.h" #include "delay.h"
#include "wdt.h"
#define u16Base_Vol 0u #define u16Base_Vol 0u
#define u16ENTER_LOW_N_RANGE 7000U #define u16ENTER_LOW_N_RANGE 7000U
#define u16EXIT_LOW_N_RANGE 8000U #define u16EXIT_LOW_N_RANGE 7500U
#define u16ENTER_LOW_Y_RANGE 9000U #define u16ENTER_LOW_Y_RANGE 9000U
#define u16EXIT_LOW_Y_RANGE 10000U #define u16EXIT_LOW_Y_RANGE 10000U
#define u16EXIT_HIGH_Y_RANGE 0xffffu
#define u16ENTER_HIGH_Y_RANGE 0xffffu
#define u16EXIT_HIGH_N_RANGE 0xffffu
#define u16ENTER_HIGH_N_RANGE 0xffffu
#define u16Top_Vol 0xffffu
#define u16EXIT_HIGH_Y_RANGE 15000U
#define u16ENTER_HIGH_Y_RANGE 16000U
#define u16EXIT_HIGH_N_RANGE 18000U
#define u16ENTER_HIGH_N_RANGE 19000U
#define u16Top_Vol 0xffffu
void Delay_ms(uint32_t u32Ms); void Delay_ms(uint32_t u32Ms);
// #pragma alignvar(8) // #pragma alignvar(8)
static const monitorlib_uint16_t SysFun_Range[24u] = { static const monitorlib_uint16_t SysFun_Range [ 26u ] = {
u16Base_Vol, u16Base_Vol,
u16ENTER_LOW_N_RANGE, u16ENTER_LOW_N_RANGE,
...@@ -34,8 +36,8 @@ static const monitorlib_uint16_t SysFun_Range[24u] = { ...@@ -34,8 +36,8 @@ static const monitorlib_uint16_t SysFun_Range[24u] = {
u16ENTER_HIGH_N_RANGE, u16ENTER_HIGH_N_RANGE,
u16Top_Vol, u16Top_Vol,
500, /* 进入异常电压时间 1S */ 2500,
50u, /* KL15消抖时间 100ms*/ 50u,
u16Base_Vol, u16Base_Vol,
u16ENTER_LOW_N_RANGE, u16ENTER_LOW_N_RANGE,
...@@ -53,33 +55,36 @@ static const monitorlib_uint16_t SysFun_Range[24u] = { ...@@ -53,33 +55,36 @@ static const monitorlib_uint16_t SysFun_Range[24u] = {
u16Top_Vol, u16Top_Vol,
2u, 2u,
2u, 2u,
2u,
0u,
}; };
monitorlib_uint16_t Sys_Read_KL30_Voltage_F(void) monitorlib_uint16_t Sys_Read_KL30_Voltage_F(void)
{ {
monitorlib_uint16_t u16Voltage; monitorlib_uint16_t u16Voltage;
u16Voltage = ADC_Conv_Single_Channel(ADC_CH_KL30_VOLTAGE); u16Voltage = (monitorlib_uint16_t)ADC_Conv_Single_Channel(ADC_CH_KL30_VOLTAGE);
return u16Voltage; return u16Voltage;
} }
monitorlib_uint16_t Sys_Read_KL15_Voltage_F(void) monitorlib_uint16_t Sys_Read_KL15_Voltage_F(void)
{ {
monitorlib_uint16_t u16Voltage; monitorlib_uint16_t u16Voltage;
u16Voltage = ADC_Conv_Single_Channel(ADC_CH_KL15_VOLTAGE); u16Voltage = (monitorlib_uint16_t)ADC_Conv_Single_Channel(ADC_CH_KL15_VOLTAGE);
return u16Voltage; return u16Voltage;
} }
monitorlib_uint16_t Sys_Read_KL30_Voltage(void) monitorlib_uint16_t Sys_Read_KL30_Voltage(void)
{ {
monitorlib_uint16_t u16Voltage; monitorlib_uint16_t u16Voltage;
u16Voltage = ADC_Read_Signal(ADC_CH_KL30_VOLTAGE); u16Voltage = (monitorlib_uint16_t)ADC_Read_Signal(ADC_CH_KL30_VOLTAGE);
return u16Voltage; return u16Voltage;
} }
monitorlib_uint16_t Sys_Read_KL15_Voltage(void) monitorlib_uint16_t Sys_Read_KL15_Voltage(void)
{ {
monitorlib_uint16_t u16Voltage; monitorlib_uint16_t u16Voltage;
u16Voltage = ADC_Read_Signal(ADC_CH_KL15_VOLTAGE); u16Voltage = (monitorlib_uint16_t)ADC_Read_Signal(ADC_CH_KL15_VOLTAGE);
return u16Voltage; return u16Voltage;
} }
...@@ -99,17 +104,20 @@ monitorlib_uint8_t Sys_Read_KL15_Valid(void) ...@@ -99,17 +104,20 @@ monitorlib_uint8_t Sys_Read_KL15_Valid(void)
monitorlib_uint8_t System_LINE_KL15(void) monitorlib_uint8_t System_LINE_KL15(void)
{ {
monitorlib_uint8_t u8KL15 = 0; static monitorlib_uint8_t u8KL15 = 0;
if (RTE_GPIO_Get_Level(KL15_AD_IN) == 1u) if (Sys_Read_KL15_Voltage() >= 5500u )
{ {
u8KL15 = 1u; u8KL15 = 1u;
} }
else else if((Sys_Read_KL15_Voltage() >= 5000u)&&(Sys_Read_KL15_Voltage() < 5500u))
{
;
}
else
{ {
u8KL15 = 0; u8KL15 = 0;
} }
return u8KL15; return u8KL15;
} }
...@@ -125,33 +133,33 @@ void Sys_LogicProcess(void) ...@@ -125,33 +133,33 @@ void Sys_LogicProcess(void)
void Sys_KL30_Init(void) void Sys_KL30_Init(void)
{ {
MonitorExt_st m_st; MonitorExt_st m_st;
m_st.COM_Delay = Common_BlockDelay; m_st.COM_Delay = Common_BlockDelay;
m_st.SysGet_KL15Line = System_LINE_KL15; m_st.SysGet_KL15Line = System_LINE_KL15;
m_st.SysGet_KL15_Valid = Sys_Read_KL15_Valid; m_st.SysGet_KL15_Valid = Sys_Read_KL15_Valid;
m_st.SysGet_KL30_Valid = Sys_Read_KL30_Valid; m_st.SysGet_KL30_Valid = Sys_Read_KL30_Valid;
m_st.SysGet_KL15_value = Sys_Read_KL15_Voltage; m_st.SysGet_KL15_value = Sys_Read_KL15_Voltage;
m_st.SysGet_KL30_value = Sys_Read_KL30_Voltage; m_st.SysGet_KL30_value = Sys_Read_KL30_Voltage;
m_st.SysGet_KL15_value_Force = Sys_Read_KL15_Voltage_F; m_st.SysGet_KL15_value_Force = Sys_Read_KL15_Voltage_F;
m_st.SysGet_KL30_value_Force = Sys_Read_KL30_Voltage_F; m_st.SysGet_KL30_value_Force = Sys_Read_KL30_Voltage_F;
m_st.SysMonitorLogic = Sys_LogicProcess; m_st.SysMonitorLogic = Sys_LogicProcess;
System_Monitor_KL30Init();
Sys_Set_Pata(SysFun_Range, &m_st); Sys_Set_Pata(SysFun_Range, &m_st);
System_Monitor_KL30Init( );
} }
void Sys_WakeUp_Init(void) void Sys_WakeUp_Init(void)
{ {
MonitorExt_st m_st; MonitorExt_st m_st;
m_st.COM_Delay = Common_BlockDelay; m_st.COM_Delay = Common_BlockDelay;
m_st.SysGet_KL15Line = System_LINE_KL15; m_st.SysGet_KL15Line = System_LINE_KL15;
m_st.SysGet_KL15_Valid = Sys_Read_KL15_Valid; m_st.SysGet_KL15_Valid = Sys_Read_KL15_Valid;
m_st.SysGet_KL30_Valid = Sys_Read_KL30_Valid; m_st.SysGet_KL30_Valid = Sys_Read_KL30_Valid;
m_st.SysGet_KL15_value = Sys_Read_KL15_Voltage; m_st.SysGet_KL15_value = Sys_Read_KL15_Voltage;
m_st.SysGet_KL30_value = Sys_Read_KL30_Voltage; m_st.SysGet_KL30_value = Sys_Read_KL30_Voltage;
m_st.SysGet_KL15_value_Force = Sys_Read_KL15_Voltage_F; m_st.SysGet_KL15_value_Force = Sys_Read_KL15_Voltage_F;
m_st.SysGet_KL30_value_Force = Sys_Read_KL30_Voltage_F; m_st.SysGet_KL30_value_Force = Sys_Read_KL30_Voltage_F;
m_st.SysMonitorLogic = Sys_LogicProcess; m_st.SysMonitorLogic = Sys_LogicProcess;
System_Monitor_WakeupInit();
Sys_Set_Pata(SysFun_Range, &m_st); Sys_Set_Pata(SysFun_Range, &m_st);
System_Monitor_WakeupInit( );
} }
void Delay_ms(uint32_t u32Ms) void Delay_ms(uint32_t u32Ms)
......
...@@ -4,8 +4,9 @@ ...@@ -4,8 +4,9 @@
#include "cgc.h" #include "cgc.h"
#include "gpio.h" #include "gpio.h"
#include "isr.h" #include "isr.h"
#include "Analog\Analog_Signals.h"
uint8_t u8NewChNum[4] = {2, 3, 7, 5}; // uint8_t u8NewChNum[4] = {2, 3, 7, 5};
void RTC_ADC_Interrupt(void *msg) void RTC_ADC_Interrupt(void *msg)
{ {
...@@ -17,6 +18,7 @@ void RTE_ADC_Init(const uint8_t u8ChList[], uint8_t u8ChNum) ...@@ -17,6 +18,7 @@ void RTE_ADC_Init(const uint8_t u8ChList[], uint8_t u8ChNum)
{ {
GPIO_InitTypeDef GPIO_InitStructure = {0}; GPIO_InitTypeDef GPIO_InitStructure = {0};
ADC_InitTypeDef ADC_InitStructure = {0}; ADC_InitTypeDef ADC_InitStructure = {0};
if(u8ChNum<=7) if(u8ChNum<=7)
{ {
...@@ -133,13 +135,13 @@ void RTE_ADC_Get_Conversion_Result(uint16_t *pu16Data, uint8_t u8ChNum) ...@@ -133,13 +135,13 @@ void RTE_ADC_Get_Conversion_Result(uint16_t *pu16Data, uint8_t u8ChNum)
uint8_t i; uint8_t i;
if ((pu16Data != 0U) && (u8ChNum > 0U) && (u8ChNum <= 4U)) if ((pu16Data != 0U) && (u8ChNum > 0U) && (u8ChNum <= ADC_TOTAL_CH_NUMBER))
{ {
if (RTE_ADC_Get_Conversion_Status() == 0U) if (RTE_ADC_Get_Conversion_Status() == 0U)
{ {
for (i = 0U; i < u8ChNum; i++) for (i = 0U; i < u8ChNum; i++)
{ {
ADC_Converse(u8NewChNum[i], 1, pu16Data); ADC_Converse((ADC_Channel_t)u8ADCChList[i], 1, pu16Data);
pu16Data++; pu16Data++;
} }
} }
......
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
#include <stdint.h> #include <stdint.h>
extern const uint8_t u8ADCChList[];
#define ADC_RESOLUTION (4096U) /* 12bit ADC */ #define ADC_RESOLUTION (4096U) /* 12bit ADC */
extern void RTE_ADC_Init(const uint8_t u8ChList[], uint8_t u8ChNum); extern void RTE_ADC_Init(const uint8_t u8ChList[], uint8_t u8ChNum);
......
...@@ -41,11 +41,8 @@ void Sys_5ms_Tasks(void) ...@@ -41,11 +41,8 @@ void Sys_5ms_Tasks(void)
void Sys_10ms_Tasks(void) void Sys_10ms_Tasks(void)
{ {
Line_In_Debounce_Service(10u); Line_In_Debounce_Service(10u);
// Key_Service();
Data_Mileage_Write_EEPROM(); Data_Mileage_Write_EEPROM();
Can_BusOff_Recover(10u); Can_BusOff_Recover(10u);
// Turn_Left_Right_Lamp();
// Fuel_R_Cal(10u);
TYW_Check_Count(); TYW_Check_Count();
} }
...@@ -76,7 +73,6 @@ void Sys_100ms_Tasks(void) ...@@ -76,7 +73,6 @@ void Sys_100ms_Tasks(void)
// counter_val.time.RTC_Hours = RTC_Bcd2ToByte(counter_val.time.RTC_Hours); // counter_val.time.RTC_Hours = RTC_Bcd2ToByte(counter_val.time.RTC_Hours);
// counter_val.time.RTC_Minutes = RTC_Bcd2ToByte(counter_val.time.RTC_Minutes); // counter_val.time.RTC_Minutes = RTC_Bcd2ToByte(counter_val.time.RTC_Minutes);
// } // }
Fuel_Cal_Sevice(100u);
BackLight_Process(); BackLight_Process();
Interact_Light_Process(); Interact_Light_Process();
// Services_Mileage_Callback(); // Services_Mileage_Callback();
...@@ -87,7 +83,7 @@ void Sys_100ms_Tasks(void) ...@@ -87,7 +83,7 @@ void Sys_100ms_Tasks(void)
u8LEDDriverCheckCount = 0U; u8LEDDriverCheckCount = 0U;
LED_Driver_Work_Check(); LED_Driver_Work_Check();
LED_Driver_Service_Immediate();//注意顺序1 LED_Driver_Service_Immediate();//注意顺序1
ALS_Service();//注意顺序2
} }
else else
{ {
......
# 2024.03.20
添加回滚App的功能
添加更新Boot程序的功能
添加校验App正确性的功能
# 2024.03.15
上传初版程序
\ No newline at end of file
:20000000280A0020DD000000E5000000E700000000000000000000000000000000000000E5
:20002000000000000000000000000000EF0000000000000000000000F3000000F5000000E9
:20004000F7000000F9000000FB000000FD000000FF000000010100000301000005010000AD
:2000600007010000090100000B0100000D0100000F01000011010000130100001501000008
:2000800017010000190100001B0100001D0100001F01000021010000230100002501000068
:2000A00027010000290100002B0100002D0100002F010000310100003301000035010000C8
:2000C0007C3BF8FF0448854600F062F8004800474D080000C046C046280A002016488047AA
:2000E00016480047FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7D5
:20010000FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE78F
:20012000FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE700009D060000C500000080
:2001400030B50B46014600202022012409E00D46D5409D4205D31D469540491B25469540B7
:2001600040191546521E002DF1DC30BDD2B201E00270401C491EFBD270470022F6E710B592
:2001800013460A4604461946FFF7F0FF204610BD064C0125064E05E0E36807CC2B430C3C70
:2001A00098471034B442F7D3FFF790FFB40B0000D40B0000F8B504460D460020002C00D1D2
:2001C00000BF002A00D100BF012C01D141263043012A01D112263043022C01D1C0263043CC
:2001E000022A01D130263043134E307076788027BE43114F7E70012C08D1FF2100BF0E4E12
:20020000B3781E460E4033468B42F8D10A4E76784027BE43084F7E70012A0BD1002600963C
:2002200003E000BF009E761C0096FF276937009EBE42F6D9F8BD00000004024001200649B8
:20024000087000BF04480078802108400028F9D00120024908707047000C024014000020AC
:2002600070B5034614460020002B01D1C0B202E005468035E8B2012902D1051DE8B206E00C
:20028000022903D105460835E8B200E0C0B2012C02D1851CE8B200E0C0B2084DA870AD78CC
:2002A00001263543054EB570002201E000BF521C7D252D01AA42F9D970BD0000000C0240EE
:2002C00070B500242448007920210840002801D0224D3FE000F046F80546214800788021E5
:2002E0000840002836D01E4880780840002801D01A4D02E000F036F80546194880780007D7
:20030000840F022C01DBAD0804E0012C01D16D0800E000BF124880788007C00F002801D0F3
:200320002D0101E00C2045430D4800784007840F002C02D1601CC4B207E0032C03D1601CFC
:200340004006040E01E06006040E21462846FFF7F7FE0546284670BD0004024000127A0074
:20036000000C024000B5C0229178F82211401C4A12781143EA2923D00ADC0A46E03A130077
:2003800000F0EBF90A181C20242A2A2A2A161A2AED291FD004DCEB2916D0EC291CD117E02D
:2003A000F02903D0F82917D10E4817E00E4815E00E4813E00E4811E00E480FE00E480DE098
:2003C0000E480BE00E4809E00E4807E00E4805E00E4803E00E4801E00D4800BF00BF00BD25
:2003E000201C02400090D003006CDC020048E80100366E010024F400001BB70000127A0086
:20040000808D5B0000093D00C0C62D0080841E0040420F00F0B591B0524800680079000661
:20042000504909684968FF2212021140090208434C490968496812021140090A0843494919
:2004400009684968090E08434749086045480068007A0006434A12689268FF231B021A4011
:20046000120210433F4A126892681B021A40120A10433C4A12689268120E1043012212038D
:200480008118104600F092F801252D033548006800790106334800684068FF221202104028
:2004A000000208432F490968496812021140090A08432C4909684968090E014329480068C7
:2004C000007A0006274A12689268FF231B021A4012021043234A126892681B021A40120A43
:2004E0001043204A12689268120E104309181D480068007900061B4A126852681B121A40CB
:2005000012021043174A126852681B021A40120A1043144A12685268120E1043081A860943
:2005200000271AE0FF22402101A8FFF71FFE002407E0B80100190C490968085C01A908554E
:20054000641C402CF5D3402201A9284600F0FEF900F0EEF840357F1C761E002EE2D111B06A
:20056000F0BD0000040000201000002010B50020002113E0084608220AE0C307DB0F002B40
:2005800004D04308074C6340184600E04008521E002AF2D18B00044CE050491CFF29E9D909
:2005A00010BD00002083B8ED2400002070B505460E462C4605E0204600F008F8FF34FF340B
:2005C0000234B442F7D3002070BD0000014610200D4AD060F120106255205060AA20906078
:2005E0000020C043086000BF07480068C007C00F0028F9D00448006801221043024A10608D
:200600000020D06010627047000002400246F1200B4B1862AA20586055209860116000BFD7
:2006200007480068C007C00F0028F9D00448006801231843024B1860002018627047000033
:200640000000024010B501231A4600211846FFF7B1FD012211461046FFF702FEFFF7EEFD45
:20066000014800F0E5F810BD0090D0031A20084908722B2048723C2088724D20C8727F208E
:20068000044909680860AC20034948707047000000040240000000200010024010B5802090
:2006A0001B4948711A201A49203908722B2048723C2088724D20C872002016494860FFF78E
:2006C000FFFD154908600020C0431449086014490860144814490860114903221202891856
:2006E00048600F49891888600D498918C8600C49891808610A49891848610949891888617A
:2007000007498918C861AC200849487010BD00002004024000B001402000002080E200E044
:2007200000E100E0C0C0C0C000E400E000100240AC2001494870704700100240F0B506461A
:200740000F461446354605E028462168FFF75EFF241D2D1DBD42F7D3F0BD30B47446641E1F
:200760002578641CAB4204D3635D5B00E31830BC18471D46F8E702E008C8121F08C1002A1F
:20078000FAD170477047002001E001C1121F002AFBD17047F0B501460022D24308780006D6
:2007A000FF273F020E683E40360230433F020E683E40360A30430E68360E30430446087953
:2007C00000063F124E683E40360230433F024E683E40360A30434E68360E30430346087A83
:2007E00000063F128E683E40360230433F028E683E40360A30438E68360E3043054609E03A
:2008000018785B1C50400006800D084E3058160A7040024628466D1E0028F1D1D243A242DC
:2008200001D10120F0BD0020FCE700002400002010B5044603492046FFF782FC02490870D9
:2008400010BD000040420F001C00002010B501246407374837490860052000053649086031
:20086000364837490860334800680068401C00284ED03048006800682F49096809688842B9
:2008800046D02F4800684068002841D129480068007A0006274909688968FF2212021140D0
:2008A0000902084323490968896812021140090A0843204909688968090E08436114401857
:2008C0008901884224D2FFF751FE1A480068FFF761FF00281CD0FFF7B5FEFFF7C7FEFFF7FB
:2008E00099FD0520000500F05CF80C22114801680520000500F02AF800BFBFF34F8F114820
:200900001149C860BFF34F8F00BF00BF00BFFDE772B6032109032046FFF72FFC0121090397
:20092000086880F3088800BF48688047002010BD1070000004000020080000200004500001
:200940000C0000200400FA0500ED00E0F8B504460D4616460027A1192A462046FFF7EEFE5C
:200960003846F8BD014672B608208F4AD060F120106255205060AA2090600020C0430860B7
:2009800000BF89480068C007C00F0028F9D00120854A10600020D060F020106262B600206E
:2009A0007047014672B610207F4AD060F120106255205060AA2090600020C043086000BF3C
:2009C00079480068C007C00F0028F9D00120764A10600020D060F020106210460068042260
:2009E0001040002805D004206F4A106062B60120704762B60020FBE770B503461D46F12071
:200A0000694E3062002415E072B6AA20664E70605520B06010782870521C6D1C62B600BF8B
:200A200061480068C007C00F0028F9D001205E4E3060641C8C42E7D3F0205B4E306200204E
:200A400070BDF7B5FFB0FFB089B006460F460021FFA8C161012104914802874206D9FFA84B
:200A6000C161C0697FB07FB00CB0F0BD029600240DE002980078FFA988610298401C029090
:200A80008869FF2801D000200490601C84B2BC42EFD30498002809D0444845490860FFA881
:200AA0003946826A3046FFF7A7FF6DE0750AF119681C4002814202D90120039001E00020CA
:200AC0000390710A49020191F105C90D0091039800280FD0002408E00198007805A9085504
:200AE0000198411C0191601C84B2012080028442F2DB0EE0002408E00198007805A9085570
:200B00000198411C0191601C84B2012040028442F2DB00240DE0FFA8806A017800980019D9
:200B200005AA1154FFA8806A411CFFA88162601C84B2BC42EFD30398002816D01B481C4946
:200B400008606802FFF72DFF184819490860691C4802FFF726FF154815490860680205AA51
:200B600001218902FFF748FF0EE01048104908606802FFF716FF0D480D490860680205AAE3
:200B800001214902FFF738FFFFA8C0696AE730B50446002304E025781570641C521C5B1CDD
:200BA0008B42F8D330BD000000000240CDAB341218000020D40B0000000000202400000055
:200BC00076070000F80B000024000020040A000086070000C00000000000000000000000F6
:180BE000000000000000000000000000000000000000000000000000FD
:20100000C8230020DD100000E5100000E710000000000000000000000000000000000000EC
:20102000000000000000000000000000EF1000000000000000000000F310000081400000ED
:201040001D3500006135000091350000C1350000F135000021360000513600008136000031
:20106000B1360000E13600001537000029370000393700006D3700007D3700008D3700003A
:20108000C1370000053800004D38000095380000DD38000025390000353900006939000046
:2010A0009D390000CD390000013A0000353A0000453A0000553A0000893A0000BD3A0000E2
:2010C0007C3BF8FF0448854600F084F800480047F15E0000C046C046C823002016488047C5
:2010E00016480047FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7C5
:20110000FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE77F
:20112000FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7000049430000C510000077
:2011400030B50B46014600202022012409E00D46D5409D4205D31D469540491B25469540A7
:2011600040191546521E002DF1DC30BD70B500242546002801DA01244042002901DA0125DC
:201180004942FFF7DDFFAC4200D04042002C00D0494270BDD2B201E00270401C491EFBD297
:2011A00070470022F6E710B513460A4604461946FFF7F0FF204610BD30B5044600200346B2
:2011C00000E05B1C934203D2E05CCD5C401BF8D030BD0000064C0125064E05E0E36807CCCA
:2011E0002B430C3C98471034B442F7D3FFF76EFF446900006469000070B58C180578401CD7
:201200006B075B0F01D10378401C2A1106D10278401C03E006780E70401C491C5B1EF9D17E
:201220002B0705D40023521E0DD40B70491CFAE70378401CCB1A921C03E01D780D70491CAA
:201240005B1C521EF9D5A142D8D3002070BD0000F0B591B0072000031F490860012189046F
:201260004720C00201F0FCFE312002F019FE4726F602392464011094002726E0FF22402186
:201280006846FFF787FF002507E0B801401912490968085C694648556D1C402DF5D30A20A2
:2012A00001F001F840226946304604F039FE04F01DFD40367F1C641E1098001B39210901CA
:2012C000884202D1312002F0EBFD002CD6D1312002F0E6FD11B0F0BDEC050020F0B591B0E8
:2012E0004720C0021749086001460720000301F0B7FE07252D033926760100271DE0FF226F
:20130000402101A8FFF746FF002407E0B80100190C490968085C01A90855641C402CF5D3C6
:201320000A2000F0C0FF402201A9284604F0F8FD04F0DCFC40357F1C761E002EDFD111B062
:20134000F0BD0000EC05002010B502F04FFC05480078012803D003480078032801D102F05A
:20136000C3FD10BDF00500200348044A01681160001D01685160704700045000FC050020F5
:2013800007200003044908604860002008824882401E024908607047A01800205406002038
:2013A000582211527047014600205322525C10231A40002A08D05322525C0C231A40921032
:2013C000032A18D1032016E05422525A0123DB031A40002A0ED05322525C0C231A4092100A
:2013E000032A05D05322525C9207920F032A01D1022000E0012070470246002058239B5ADD
:201400000B40002B01D0012000E0002070470000014600226020405AFF231B02184000058E
:20142000020F1001014BC018704700000055044010B5002A0AD056231B5A0C022343562471
:20144000235256231B5A8B43235209E056231B5A0C02A3435624235256231B5A0B4323527B
:2014600010BD0000F8B504460D46012700263448844203D10121022000F0E4F92878401EE2
:20148000A0702088FF210131084320802088400840002080A878401EC1B25A2001556879E5
:2014A0000007000CE97909020843A97908435C210853288981B240200153A868C000C10CE7
:2014C00042200153A88981B244200153E868C000C10C46200153288A81B248200153286971
:2014E000C000C10C4A200153A88A81B24C2001536869C000C10C4E2001535020005B2979EF
:2015000009020843502108535020005B297988435021085300E0761C5020005B4007400FD2
:201520002979884202D007488642F4D15020005B4007400F2979884200D000273846F8BD9A
:2015400000540440FFFF00000146FF22C889C007C00F00280AD00120C88100E0521EC88999
:20156000C007C00F002801D0002AF7D1C889C007C00F00280FD10220C8810420C881487A61
:20158000400840004872487A38239843487200204872012070470020FCE700000246507A90
:2015A000012318435072507A0B78DB0018435072087A012808D1888850814868000C012360
:2015C000DB031843908108E0087A002805D15081486880001A4B18409081487A012804D1CA
:2015E000507A40231843507206E0487A002803D1507A4023984350720878002811D1C87A67
:201600001072087B1070487B5070887B9070CB7BD370087C10714B7C5371887C9071CB7C5A
:20162000D371887A002803D00120C002D08101E00820D081FF200130D08101207047000062
:20164000FC1F0000002904D0427A80231A43427203E0427A80239A434272704730B502464B
:2016600000200F4B5024A45A0D022C435025AC525024A45A8C43AC5200E05B1E5024A45A83
:201680006407640F8C4201D0002BF6D15024A45A6407640F002C01D0002000E0012030BD80
:2016A000FFFF0000827A80231A40802A00D081727047000070B5044600250023002D02D059
:2016C0000126602006530420C88188890126F6033040002808D0012010728889C004C008BC
:2016E0004E893043506006E00020107288890F4E304080105060087AD072002304E0CE5C55
:2017000010460C30C6545B1CD07A9842F7DCC88904263040002804D1C889F60230400028E6
:2017200001D0002070BDD07AFCE70000FC1F0000027C80231A40802A00D00174704710B55D
:201740000246FF23D089C007C00F00280AD00120D08100E05B1ED089C007C00F002801D07B
:20176000002BF7D1D089C007C00F002801D0002010BD507A012420435072507A3824A04384
:201780005072C87A1072487A00280FD1087B1070487B5070887B9070CC7BD470087C1071E0
:2017A0004C7C5471887C9071CC7CD471FF200130D0814000D081107ADAE70000F8B5044696
:2017C0000D460020002C00D100BF002A00D100BF012C01D141263043012A01D1122630439F
:2017E000022C01D1C0263043022A01D130263043134E307076788027BE43114F7E70012CB7
:2018000008D1FF2100BF0E4EB3781E460E4033468B42F8D10A4E76784027BE43084F7E70D5
:20182000012A0BD10026009603E000BF009E761C0096FF276937009EBE42F6D9F8BD000095
:2018400000040240002905D0054A12780243044B1A7004E0024A12788243014B1A70704741
:201860002004024001200649087000BF04480078802108400028F9D0012002490870704722
:20188000000C02402400002070B5034614460020002B01D1C0B202E005468035E8B20129B9
:2018A00002D1051DE8B206E0022903D105460835E8B200E0C0B2012C02D1851CE8B200E025
:2018C000C0B2084DA870AD7801263543054EB570002201E000BF521C7D252D01AA42F9D92F
:2018E00070BD0000000C024070B500242448007920210840002801D0224D3FE000F046F801
:2019000005462148007880210840002836D01E4880780840002801D01A4D02E000F036F87E
:201920000546194880780007840F022C01DBAD0804E0012C01D16D0800E000BF1248807861
:201940008007C00F002801D02D0101E00C2045430D4800784007840F002C02D1601CC4B2DD
:2019600007E0032C03D1601C4006040E01E06006040E21462846FFF7E3FB0546284670BDC1
:201980000004024000127A00000C024000B5C0229178F82211401C4A12781143EA2923D0D2
:2019A0000ADC0A46E03A130004F0CCF90A181C20242A2A2A2A161A2AED291FD004DCEB298E
:2019C00016D0EC291CD117E0F02903D0F82917D10E4817E00E4815E00E4813E00E4811E00B
:2019E0000E480FE00E480DE00E480BE00E4809E00E4807E00E4805E00E4803E00E4801E0F7
:201A00000D4800BF00BF00BD201C02400090D003006CDC020048E80100366E010024F4001D
:201A2000001BB70000127A00808D5B0000093D00C0C62D0080841E0040420F0001460020CD
:201A40007047000010B548211348FFF7AAFB124812490860124848600320088100208872C6
:201A600003220F490D4800F021F900210B48FFF719FE20210B48FFF794FB0A480A494860A3
:201A80000A4B01220A49084800F076F955210648FFF74EFE10BD00008006002060060020CD
:201AA000BC640000C80600206C0600203D1A0000A064000010B50A461DE0016807231B0368
:201AC000994207D30F23DB02994203D203685B1C036010E00B780A4C247863401B069B0D7C
:201AE000084CE358064C2468240A6340044C236003685B1C03601346521E002BDDD110BD21
:201B0000540600204465000010B5014600200022087803024C782343184603028C782343D8
:201B200018460302CC782343184643084340DB00840863401A46044B1B685A40034B1A60CE
:201B40000123034C237010BD580600202C0600202806002010B50446002004F0B5F9022899
:201B600041D121480078002802D101201E4908701D48007801281FD11B484078401C1A49A7
:201B8000487021465A20FFF7DBFA17494978884229D800201449487008468078401C887026
:201BA000084680780A2803D30020887002200870002004F0C9F916E00B480078022812D181
:201BC00009484078401C0849487021467D20C000FFF7B6FA04494978884204D8002002490E
:201BE000487004F0B1F910BD0000002000B587B0002168460171042141710C480290411067
:201C000003910B49049105910A480690FFF71AFF01A804F0C5F900F065F900F00FF80021F9
:201C2000054802F079F807B000BD0000FFFF1F00FFFFFF1F351D00000205000010B51848C9
:201C400018494860002008720120087000204872012088721448FFF777FC12491248FFF7E3
:201C60009DFC01211048FFF7EDFC0D485E300D494860002008720120087000204872012063
:201C8000887209481030FFF75FFC064906481030FFF784FC012104481030FFF7D3FC10BDD5
:201CA00081070000E806002010550440F0B50B46144643600481002136E0002216E02C25CD
:201CC0004D4346687519AD5C18274F430668F619B5542C254D4346687519AD5C18274F43E1
:201CE0000668F6190836B554551CEAB2082AE6D3002518274F430668F619357418274F433B
:201D00000668F619757418274F430668F619B57418274F430668F619F57418274F430668F0
:201D2000F61975614D1CA9B205898D42C5DC00258572F0BD70B50446606800F09FFA054628
:201D4000E27A23460C332946094800F05FFA09496068884204D007495E316068884206D176
:201D6000E17AA28890B222460C3200F0FBFC70BD6006002081070000FFB581B004460F4650
:201D800000250026002000902760039820810498E0600020207400BF9DE01C206843216849
:201DA00008586A01616888501C2068432168081880686A016168891848601C206843216852
:201DC000081840686A016168891888601C20684321680818C0686A0161688918C8601C208D
:201DE000684321680818007C6A016168891808741C20684321680818407C6A0161688918A1
:201E000048741C20684321680818807C6A016168891888831C20684321680818C07C6A0163
:201E200061688918887400206A0161688918C8741C206843216808184068002813D01C208C
:201E4000684321680818C07C002805D1401E6A0161688918C8831AE00020C0436A01616825
:201E60008918C88313E01C20684321680818C07C002805D000206A0161688918C88306E094
:201E800000206A0161688918C88301200090002607E000216A016068801814308155701CB2
:201EA000C6B2690160684018808BB042F1DC1C20684321680818406900280AD06B016268E5
:201EC000D218104614301C236B432268D21851698847681CC5B22089A84200DD5DE700984D
:201EE00005B0F0BD00B585B0104801900021684601720170417200200D4988720821684600
:201F0000C172002004E0002203A90A54411CC8B26946C97A8142F6DC0648FFF715FB6946FD
:201F20000448FFF73BFB05B000BD000089070000E80600208055044010B501246407FFF7B5
:201F400013FA0A4800680A4988420BD107484068002809D1032109032046FFF722F901F030
:201F600057FE01E001F016FE10BD0000FC050020A55A7AA710B500202D490870FFF7F4F962
:201F80002C4844682C48844202D02C48844214D12948844203D101202549087002E00220E0
:201FA0002349087001F040FE00F0A4F9002003F0B3FE0A2000F077F935E02148844228D1F6
:201FC00000F0CCF91F4880680121890488421DD21C4800680F21C902884217D11948416812
:201FE0000920800300F044F800280FD0FFF776F900F088F9144A5168106800F039F8002854
:2020000004D0002003F088FE03F0E6FE01F00CFE09E001F009FE00F06DF90A2000F043F9F4
:2020200001200A490870034840680949086010BDF0050020FC050020A33A7AA7A88A7AA7B3
:20204000A55AA55A94180020881800204E0600202006002070B504462546002D07D100203D
:2020600003F05AFE0A2000F01EF903F0B5FE70BDFEB504460F460F20C002844203D009200C
:202080008003844237D1009707208003009F87422FD20020C043194908600120C002201A3B
:2020A000019026460EE03078761C1449097848400006800D1249085810490968090A4840E2
:2020C0000E4908600098411E00910028EBD10B480068C04309490860019800F06BF90290DE
:2020E000064801680298814201D1012504E0002502E0002500E000252846FEBD540600201C
:202100004465000070B5C0B000261D48008A1C49498A884205DB1A48008A1949498A401A0F
:2021200084B2002C28D0FF2240216846FFF732F8002513E01248418A408A401C104A508266
:2021400010461430405C694648551046408AFF2802DD002011464882681C85B2A542E9DB30
:20216000074922460868694603F0DAFE064621460348001DFFF79EFC304640B070BD00007F
:20218000A018002070B50125FFF7BCFF09480068C043084908600720000300F00BF904468E
:2021A00004480068A04201D1002501E0FFF7E8F8284670BD5406002070B500250F24E40263
:2021C0001022214620311048FEF7F6FF002819D14022214630310C481030FEF7EDFF0028FA
:2021E00010D11022A11808481038FEF7E5FF002808D11022214604482038FEF7DDFF00286B
:2022000000D10125284670BD9C050020FFB581B004460F463D462089A8422DDD18206843E4
:2022200021680818007C002826D1002609E00498815D182068432268101808308155701CA2
:20224000C6B2082EF3D30121182068432268101841742C20684361680818006A00280BD051
:2022600018236B432268D218104608302C236B436268D218116A884705B0F0BD01460320AC
:20228000CA1FFA3A002A08D00302D21A03D0012A05D1002005E0012003E0022001E003202B
:2022A00000BF00BF7047002101E000BF491C8142FBD3704710B500240C4A51681068FFF715
:2022C000D7FE00280FD0FEF7C3FF00F047F80848416809208003FFF7CBFE002801D00124BA
:2022E00002E0002400E00124204610BD88180020941800200148024908607047000250000F
:20230000F805002000B5134800F054F8124908601048001D00F04EF80F4948600846006830
:202320000F21C902884210D10B4840687121C902884202D90020C04304E0074840680F21CC
:20234000C90240180449886003E00020C0430249886000BD047000008818002000B51348EB
:2023600000F028F8124908601048001D00F022F80F494860084600680F21C902884210D1AF
:202380000B48406807218903884202D90020C04304E00748406809218903401804498860A8
:2023A00003E00020C0430249886000BD043802009418002010B504460023204600F061FE36
:2023C00003461806FF210902194009020843FF2109041940090A0843190E084303461846BF
:2023E00010BD10B500F0F0FD00F0D6F800F00EFB00F002F810BD000070B541480078912821
:2024000000D070BD00F0BEF8012876D13D4800883D49088008468078F021884320303A4999
:20242000887008468078000900013549097A0907090F0843344988703148807A401E304921
:20244000887208460089401C088108460089C988884216DA08202C49887200240EE02848CB
:2024600041882848001D415C2748C01C015524484088401C22494880601CC4B2072CEEDB17
:202480002DE01F4800891E49C98888421CD11C4800791B498978401AC5B2681C1A498872DC
:2024A00000240EE0164841881648001D415C1648C01C015512484088401C11494880601C1F
:2024C000C4B2AC42EEDB0AE000F008FD00200C4908700C490888092100F0B8F991E70120BA
:2024E00000F0BEFC084A917A1088921C00F070F905490888002100F0C1F800BF81E7000067
:20250000BA0C0020560C0020640700201B49097E002932D01949897E0C225143174A515A7B
:20252000174A118000200CE01449897E0C225143124A8918891C0A5C1149891C0A54411CB5
:20254000C8B20828F0DB0D49897E0C2251430B4A8918897A0A4A91720121D1720749097E5B
:20256000491E064A11761146897E491C91761146897E022901DB00219176704730070020B8
:20258000580700200349487B012802D10021014A51737047C80C002010B5334840680028C6
:2025A00061D13148007B030003F0CCFB07590512212E3D4A59002D480078002807D0002086
:2025C0002A4908702A490888012100F03FF947E026480078002809D0002024490870254942
:2025E0004A8808880123091D00F040F938E01F480078002807D000201C4908701C4908881E
:20260000022100F023F92BE018480078002809D000201649087017494A8808880923091D9C
:2026200000F024F91CE011480078002807D000200E4908700E490888092100F007F90FE0E2
:202640000A480078002809D000200849087009494A8808880323091D00F008F900E000BF36
:2026600000BF00F03BFC10BDC80C0020BA0C0020560C0020700700207047000070B504468E
:202680000D4634480088A04263D1002D61D13248007822284ED004DC20283DD0212856D16F
:2026A00041E0902802D0912851D115E02A48C08801280AD100202849087000F00FFC27496D
:2026C0000888002100F0C2F805E0032000F0C8FBA020214908703BE01F4800891E49C9887F
:2026E00088420AD100201C49087000F0F7FB1B490888002100F0AAF80DE01748807A002841
:2027000006D000F0EBFB1449087B00F08DFB02E0032000F0A5FB1BE0062000F0A1FB112042
:202720000D49087014E0062000F09AFB11200A4908700DE000200849087000F0CFFB08494F
:202740004A8808880923091D00F090F800E000BF00BF70BD4C070020BA0C0020560C0020E7
:202760007007002070B50346184C247E022C00DB70BD164C647E0C256C43144D2B530020F5
:202780000AE0155C114C647E0C2674430F4EA419A41C2554441CE0B28842F2D30B4C647EA9
:2027A0000C267443094EA419A1723446247E641C35462C762C46647E641C6C762C46647E46
:2027C000022C01DB00246C7600BFD1E730070020F0B585B007460D4616461A480780002438
:2027E00006E031781748801C0155761C601CC4B2AC42F6DB2C4605E0AA211248801C015548
:20280000601CC4B2082CF7DB0E480088019008216846C1720021417201720170002406E085
:202820000848801C015D03A80155601CC4B2082CF6DB69460448FEF782FF01200149887280
:2028400005B0F0BD4C0700209055044070B504460D462946204601F0C1FD70BD70B5044698
:202860000D462946204601F0C7FD70BDF8B504460D4616461F463B4632462946204601F084
:20288000BCFDF8BDF8B507460E4615465C480078002804D009213846FFF7D8FFF8BD002DB2
:2028A00001D0602D04DD09213846FFF7CFFFF5E7544807804580002406E031785148001D40
:2028C0000155761C601CC4B2AC42F6DB00204C49487008468580FF2088727F20087308461E
:2028E000808808282EDA0120C88008468088488001200881434800884349088008468078FA
:20290000F02188434049887008468078000900013B4909790907090F08433B498870384895
:202920000079401C8872002407E03648001D015D3548C01C0155601CC4B231488088A042C0
:20294000F3DC4AE00721681CFEF710FC002907D0072128460830FEF709FC2949C88005E06A
:202960000721681CFEF702FC2549C8800620244948800120088123480088234908800846C8
:202980008078F021884310301F49887008468078000900011A4989880905090F08431A492B
:2029A000887008464088FF2109028843144989880902FF221202114008431349488008207D
:2029C0008872002407E00F48001D015D0E48001D0155601CC4B2062CF5DB012000F040FA18
:2029E000094A917A1088921CFFF7F2FE902004490870054908880021FFF740FE00BF4DE7B2
:202A0000BA0C0020560C00206407002010B5FFF77DFD1448C07A002822D012488078000983
:202A2000002806D0012807D002280AD0032810D10CE000F09FF90FE000F09EF800F05CFA59
:202A40000AE000F011F800F057FA05E000F000F902E0FFF711FE00BF00BF00200149C8727B
:202A600010BD00005807002010B53F480078112800D010BD3D4800883D49884200D0F8E764
:202A80003A4880780007000F3749097A0907090F88420CD000203449087000F01FFA354939
:202AA0004A8808880423091DFFF7E0FEE1E72E480089401C2C4908810846807A401E8872D2
:202AC00008460089C98888421BDA2848807A082800D0CEE700240EE02448C01C015D2248CE
:202AE00042882448001D81541F484088401C1E494880601CC4B2072CEEDB062000F0B0F947
:202B000030E01948808818494988401A1749897A884203DA1548807A082800D0A9E700249B
:202B20000EE01248C01C015D0F4842881148001D8154601CC4B20C484088401C0A49488022
:202B400009484088084989888842EADB00200649087000F0C3F907494A8808880023091DDD
:202B6000FFF784FE00BF84E7BA0C002058070020810700007007002070B531480078802178
:202B80000840802800D170BD2E4800882E49884200D0F8E72B48807A082800D0F3E72948A1
:202BA000807805072D0F2D0226484088000A0543082D00DAE7E70120214948700620488010
:202BC000084685800120088100208872C8728988481C0721FEF7CAFA002909D018498988DA
:202BE000084608300721FEF7C1FA1549C88007E013498988481C0721FEF7B8FA1049C880A9
:202C0000104800881149088008464580002407E00C48001D015D0D48001D0155601CC4B24B
:202C2000062CF5DB042000F01BF9102004490870064A51881088FFF711FE00BFA3E7000066
:202C4000BA0C002058070020810700007007002010B544480078A02808D0424800789128CC
:202C600004D040480078A12800D010BD3E4800883E4988420AD03E4908880921FFF7E6FDC7
:202C800000F02CF9002037490870EEE73648807A08280AD0364908880921FFF7D7FD00F0BD
:202CA0001DF900202F490870DFE72F4880780007000F002804D0012825D0022843D12EE03D
:202CC00028484078002800D048E02748C078002803D101202349487003E02348C0782149D4
:202CE000887220480078912803D01F4800791D49087391201B49087000F0F0F81949087B63
:202D000000F092F82AE017484078002800D025E0A12014490870032000F0A2F81EE0114881
:202D20004078002800D019E00E480078A02809D10F4908880821FFF789FD00F0CFF8002016
:202D4000084908700AE00A4908880521FFF77EFD00F0C4F800200349087000BF00BF00BF79
:202D600083E70000BA0C00205807002081070000560C002010B5284800788021084080283C
:202D800000D110BD24480078002805D0234800882349884200D0F4E72048807A1F49897815
:202DA0000907090F884203DD1C48807A082800D0E7E71A4880780007000F002805D0174849
:202DC00080780007000F072800DDDAE71348008814490880114880780007000F48800024FD
:202DE00007E00E48C01C015D0E48001D0155601CC4B20C484088A042F3DC002006490870ED
:202E000000F06CF807494A8808880023091DFFF72DFD00BFB5E70000BA0C00205807002083
:202E200081070000700700207F2805DC7D21C9004143094A91600BE0F12806DBF92804DCD6
:202E400064214143044A916002E00449024A91600221014A51737047C80C002018F00100D8
:202E600000B5030002F06EFF0729050B11171D2329000121144A11731449516022E0022133
:202E8000114A1173114951601CE003210E4A11730F49516016E004210B4A11730D49516048
:202EA00010E00521084A1173002151600AE00621054A11730849516004E00021024A117399
:202EC000516000BF00BF00BDC80C0020A8610000F824010028230000F049020000200149FC
:202EE00008737047C80C0020024909880918014A11807047C80C002010B52E48007810283D
:202F000019D12D4840882D4988420ADD2C48807800090001801C2A498870222025490870BE
:202F200025E02748807800090001254988702020204908701BE01F480078112816D11D4835
:202F4000807A002800D010BD1A484078002800D0F9E70020174988721948807800090001E3
:202F60001749887020201349087000E0EBE715481349088008468078F02188433030104917
:202F8000887000210E48C1700221017103200C4988720220FFF764FF094A917A1088921C6B
:202FA000FFF716FC064908880021FFF767FB00BFC9E70000BA0C002070070020E2040000DF
:202FC0006407002089070000244A118852888A4242D0224A52888A4204DA204A52888A1A3F
:202FE00090B207E01D4A52880023DB439A1A521C521890B2194A5180127B002A10D0174A2C
:203000005268002A0CD0154A5268824205D9134A5268121A114B5A6002E000220F4B5A60C4
:203020000E4A527B022A17D10C4A9268002A0CD00A4A9268824205D9084A9268121A074B47
:203040009A6002E00022054B9A60044A9268002A02D10122014B5A7370470000C80C0020FC
:2030600070B505460E46FEF78BF92C4605E0204600F00AF8FF34FF340234B442F7D30020E8
:2030800070BD014608687047014610200D4AD060F120106255205060AA2090600020C04312
:2030A000086000BF07480068C007C00F0028F9D00448006801221043024A10600020D06075
:2030C00010627047000002400246F1200B4B1862AA20586055209860116000BF0748006886
:2030E000C007C00F0028F9D00448006801231843024B1860002018627047000000000240BE
:20310000F8B50023002500950024002200BF94E001259D40ACB20D8825400095009DA54238
:203120006FD11A468D79012D0DD1464D03263602AD192D5C012696403543424E03273F022A
:20314000F61935540CE03F4D03263602AD192D5C01269640B5433B4E03273F02F61935542E
:20316000CD78002D4ED1374D60352D5CCE78002E01D1012600E000269640B543314E6036C6
:2031800035548D78002D2ED12E4D19267601AD192D5C8E78002E01D1012600E000269640EC
:2031A000B543284E19277F01F61935540D79002D0ED1244D50352D5C0E79002E01D101268A
:2031C00000E000269640B5431E4E5036355423E01C4D50352D5C0E7996403543EEB2194D4B
:2031E00050352E5418E0174D19267601AD192D5C8E7896403543134E19277F01F61935545A
:203200000AE018E00F4D60352D5CCE7896403543EEB20C4D60352E544D79012D0AD1094D89
:2032200030352D5C012696403543EEB2054D30352E5400E000BF5D1CABB2082B00DA67E782
:20324000F8BD000000000440FFB5074615461E4600243846019900F01FF8002802D0012057
:2032600004B0F0BD00240CE00A2060430949085CB04204D12946204600F05EF807E0601C15
:2032800084B20A2060430349085C0028ECD100BF0020E5E7300000200246002A03D14029EC
:2032A00001DD01207047032A03D1022901DD0120F8E7042A03D1202901DD0120F2E7052AFC
:2032C00003D1202901DD0120ECE70C2A03D1102901DD0120E6E70D2A05D1012903DD402970
:2032E00001DA0120DEE70E2A03D1202901D10120D8E70020D6E7000010B5064A03231B02D1
:20330000D218125C8A43034B032424021B191A5410BD00000000044010B5064A03231B02E2
:20332000D218125C0A43034B032424021B191A5410BD00000000044070B502460020B1E07C
:203340000A2353435A4C1B195B1C440004191B199B788B427DD10A235343554C1B195B1C87
:20336000440004191B195B78082B33D10A2353434F4C1B195B1C440004191B574D4C4E4D9E
:203380006419E35C012423430A245443484D6419641C450045196457464D474EAD192B55C3
:2033A0000A235343424C1B195B1C440004191B57404C35466419E35C022423430A2454432A
:2033C0003B4D6419641C450045196457394DAD192B5564E00A235343354C1B195B1C4400C7
:2033E00004191B195B78092B34D10A235343304C1B195B1C440004191B572E4C2E4D641941
:20340000E35C402423430A245443294D6419641C450045196457274D274EAD192B550A23B1
:203420005343234C1B195B1C440004191B57214C35466419E35C8024A3430A2454431C4DAD
:203440006419641C4500451964571A4DAD192B5525E025E00A235343154C1B195B1C440047
:2034600004191B57134C144D6419E35C0A2454430F4D6419641C4500451964196578012401
:20348000AC402343DCB20A235343094D5B195B1C450045195B57074D074EAD19EC5404E060
:2034A000431CD8B2032800DA4AE700BF70BD000030000020000004407508000070B5054680
:2034C0000024032D00D170BD002D01D0012D0ED1002409E0A2000F4BD2189178A200985AFF
:2034E00000F0CAFB601CC4B23B2CF3DB0FE0022D0DD1002409E0A200074BD2189178A2005E
:20350000985A00F0B9FB601CC4B23B2CF3DB00BFD9E70000C8620000B463000010B50C4815
:203520000078002803D00B4A50689168884708484078002803D0084A506891688847044822
:203540008078002803D0054A50689168884710BD00600040800100200003002080040020D4
:2035600010B508480079002803D0074A10695169884704484079002803D0044A5068916870
:20358000884710BD00600040800100200C03002010B50848007A002803D0074AD069116A90
:2035A00088470448407A002803D0044A50689168884710BD00600040800100201803002024
:2035C00010B50848007B002803D0074A906AD16A88470448407B002803D0044A506891680A
:2035E000884710BD00600040800100202403002010B50848007C002803D0074A506B916B13
:2036000088470448407C002803D0044A50689168884710BD006000408001002030030020A9
:2036200010B50848007D002803D0074A106C516C88470448407D002803D0044A50689168A1
:20364000884710BD00600040800100203C03002010B50848007E002803D0074AD06C116D95
:2036600088470448407E002803D0044A50689168884710BD0060004080010020480300202F
:2036800010B50848407F002803D0074A5068916888470448007F002803D0044A906DD16D3B
:2036A000884710BD00600040540300208001002010B508484078002803D0074A50689168EC
:2036C000884704480078002803D0044A506E916E884710BD206000406003002080010020D1
:2036E00010B509480079002803D0084A106F516F88470548001D4078002803D0044A5068BD
:203700009168884710BD000020600040800100206C03002010B5034AD06F78329168884761
:2037200010BD00008001002010B5024A50689168884710BD0402002010B50948007C0028DD
:2037400003D0084A506891688847054810304078002803D0044A50689168884710BD0000E9
:2037600020600040100200209003002010B5024A50689168884710BD1C02002010B5024AF7
:2037800050689168884710BD2802002010B50948007F002803D0084A5068916888470548E3
:2037A0001C304078002803D0044A50689168884710BD00002060004034020020B403002082
:2037C00010B50C480078002803D00B4A50689168884708484078002803D0084A5068916882
:2037E000884704488078002803D0054A50689168884710BD4060004040020020C0030020FA
:203800004005002010B50D480079002803D00C4A5068916888470948001D4078002803D0BE
:20382000084A5068916888470448001D8078002803D0054A50689168884710BD40600040DE
:203840004C020020CC0300204C05002010B50D48007A002803D00C4A5068916888470948E4
:2038600008304078002803D0084A506891688847044808308078002803D0054A5068916814
:20388000884710BD4060004058020020D80300205805002010B50D48007B002803D00C4AD4
:2038A00050689168884709480C304078002803D0084A50689168884704480C3080780028CE
:2038C00003D0054A50689168884710BD4060004064020020E40300206405002010B50D4869
:2038E000007C002803D00C4A506891688847094810304078002803D0084A50689168884765
:20390000044810308078002803D0054A50689168884710BD4060004070020020F003002007
:203920007005002010B5024A50689168884710BD7C02002010B50948007E002803D0084A15
:20394000506891688847054818304078002803D0044A50689168884710BD00004060004024
:20396000880200200804002010B50948007F002803D0084A50689168884705481C304078BE
:20398000002803D0044A50689168884710BD000040600040940200201404002010B50848AE
:2039A0000078002803D0074A50689168884704484078002803D0044A50689168884710BD29
:2039C00060600040A00200202004002010B509480079002803D0084A506891688847054838
:2039E000001D4078002803D0044A50689168884710BD000060600040AC0200202C0400203E
:203A000010B50948007A002803D0084A506891688847054808304078002803D0044A50680B
:203A20009168884710BD000060600040B80200203804002010B5024A50689168884710BD5D
:203A4000C402002010B5024A50689168884710BDD002002010B50948007D002803D0084A50
:203A6000506891688847054814304078002803D0044A50689168884710BD000060600040E7
:203A8000DC0200205C04002010B50948007E002803D0084A506891688847054818304078FA
:203AA000002803D0044A50689168884710BD000060600040E80200206804002010B50948C4
:203AC000007F002803D0084A50689168884705481C304078002803D0044A50689168884780
:203AE00010BD000060600040F402002074040020F0B5024600240C205043224B185C002872
:203B000001D00120F0BD0C2050431E4BC01881600C205043C0188068002801D10120F1E7B3
:203B200001230C205043174D2B5400251046D617F60E361876117601961BB600124FF61930
:203B4000D717FF0EBF187F11F55500BF002804DBC506ED0EAB400D4D2B6000BF0025104623
:203B6000D617F60E361876117601961BB700084EBE191346D717FF0EFF187F11F5552046C8
:203B8000C0E70000800100200060004080E200E000610040FEF710FB01281BD1072000031B
:203BA000FFF76FFA401C002803D10D4802F0B4F813E0FEF7A7FB0B4A51681068FEF758FA04
:203BC000012803D1002002F0A7F806E0044802F0A3F802E0024802F09FF802F0FDF80000DC
:203BE000A55AA55A8818002000BFFEE705480078022806D104480068002802D10120034981
:203C0000087070474E060020200600201C06002010B572B60121C903086880F3088800BF6C
:203C20004868804710BD00000220064908700020054908608860C86004498873C873087472
:203C4000704700004E060020A0180020A01D002010B501231A4600211846FDF7AFFD0122F9
:203C600011461046FDF710FEFDF7FCFD014802F01DF910BD0090D003FEB505460C460020B7
:203C8000C0430290EFB22804060E0F2E42DA082F40DA0120B840694608808020204000288C
:203CA00016D101208870A007800F022801D1487109E0A007800F012802D16946487102E0B4
:203CC000002069464871F0B26946FFF719FA1FE00020694688700E202040002800D000BFF7
:203CE00010202040002802D16946087102E0012069460871E007C00F002802D1694688718D
:203D000002E0012069468871F0B26946FFF7F8F9002002900298FEBDF8B504460F4600204D
:203D2000C0430090E6B22004050E0F2D11DA082E0FDA0120B04086B2002F04D1E8B231467D
:203D4000FFF7DAFA03E0E8B23146FFF7E5FA002000900098F8BD000070B504460D46601E93
:203D60000D49884200D90124002C00D1012440200A49087008460078604309494861032150
:203D8000081F01F0EDFF002005498861072008610448056070BD0000FFFFFF000800002035
:203DA00000E000E0040000200020C043002809DBC206D20E01219140054A1160BFF34F8F05
:203DC000BFF36F8F00BF0020024908618861704780E100E000E000E01A20084908722B20AF
:203DE00048723C2088724D20C8727F20044909680860AC200349487070470000000402407A
:203E00000C00002000100240F0B5054600262846FFF737F90346DCB2FF2000021840070A19
:203E2000002323461802384303461E463046F0BD10B51548007801280DD114480078401CC0
:203E40001249087008460078642804DB0020087001200F4908700F480078012813D10E48A3
:203E60000078012804D100200B4908700B4908700A480078401C0949087008460078322804
:203E800001DD01F0A9FF10BD2606002025060020240600201C0600201E0600201D06002034
:203EA00010B586B004460E48029008216846C1730021417301730171032101747F2101A82D
:203EC000417384737821C173AA21017441748174C17401A90348FDF732FC06B010BD0000B1
:203EE00089070000805504400EB50020019002900221684601710021417132218171012196
:203F0000C171F421017201A80523034A00210090102001F099FE0EBD8907000010B50146F9
:203F2000012904D0022921D0032970D145E00022494B1A70494B1A70494B1A70494B1A703B
:203F4000494B1A70494B1A60494B1A609A60DA60484B9A730023474AD3730022454B1A7419
:203F6000521E454B1A60454B1A6073E000223B4B1A7001223A4B1A7000223A4B1A703A4B50
:203F80001A703A4B1A603A4B1A609A60DA600023384A9373D3731374002005E00022354B46
:203FA0001A3B1A54421C90B22828F7D30022D243314B1A60314B1A604CE00022274B1A7017
:203FC0000122274B1A700022264B1A70264B1A70264B1A60264B1A609A60DA60254B9A7323
:203FE0000023244AD3735A1E234B1A60234B1A600022204B1A74002005E000221D4B1A3BA3
:204000001A54421C90B22828F7D323E0FFE70022114B1A70114B1A70114B1A70114B1A70D5
:20402000114B1A70114B1A60114B1A609A60DA600023104A937300220E4BDA731A740020C1
:2040400005E000220B4B1A3B1A54421C90B22828F7D300BF00BF10BD1C0600201D060020B6
:204060001E06002027060020280600202C060020A0180020A01D002050060020540600206A
:2040800010B505480068002802D003480068804700F011F810BD00000400002010B5FFF78D
:2040A000C7FE10BD10B50A20FDF754FD10BD704770477047704710B53220FEF715FF10BDA4
:2040C0000CB500BF054800680090044800680190019900988842F5D100980CBD2000002073
:2040E00010B5FEF77EF900F085FA10BD70B5314800683149096840182E4908600846006875
:204100007D21C900884211D32A480068FDF718F806467D21C90027480068FDF711F82548B8
:204120000160264800688019244908602448406821490968401822494860084600680028A2
:2041400037D10025084684682EE02068002829D01B49606849680022D243511A884205D221
:204160001749606849684018606002E00020C0436060A1686068884214D3206801280AD17B
:2041800000202060002D03D10D492069886004E02069286101E000206060E068002801D0BF
:2041A000E068804725462469002CCED100200449486070BD1C000020180000202000002037
:2041C0001807002010B5FFF7EFFD322000F008F802493220FFF7C0FD10BD0000ED4000006D
:2041E00010B504460D48046000200D4908600D4908600D49086048608860FFF761FF0B4963
:2042000008600020486088600120C86003200861052048610720886110BD000018000020CE
:204220001C0000202000002018070020FC06002070B5FFF755FFFFF743FF05463A480068C5
:20424000A84203D8384800682C1A06E0364800680021C943081A4019441C3348056040680F
:2042600000193149486008464068022806D308460079C007C00F4860FFF71AFF2A4880689C
:2042800000192949886008468068052807D388680521FCF755FF24488160FFF70BFF22485A
:2042A000C06800192049C8600846C0680A2807D3C8680A21FCF744FF1B48C160FFF7F2FEAF
:2042C0001948006900191849086108460069142807D308691421FCF733FF13480161FFF7E6
:2042E000E6FE1148406900190F49486108464069322807D348693221FCF722FF0A48416187
:20430000FFF7D7FE0848806900190749886108468069642807D388696421FCF711FF0248E7
:204320008161FFF7BBFE70BDFC06002010B5FFF78FFCFFF751FD0020FFF7C0F8FFF742FF0E
:20434000FDF754FC10BD000010B580201B4948711A201A49203908722B2048723C208872FF
:204360004D20C872002016494860FDF7BDFA154908600020C04314490860144908601448F5
:2043800014490860114903221202891848600F49891888600D498918C8600C49891808611D
:2043A0000A498918486109498918886107498918C861AC200849487010BD00002004024062
:2043C00000B001405C06002080E200E000E100E0C0C0C0C000E400E00010024000B5034653
:2043E0000A46002A03D1184600F0DCF803E00121184600F0D7F800BD7047F0B505460E4673
:2044000017461C46002C05D13A463146284600F0CBF805E001233A463146284600F0C4F8A9
:20442000F0BD70B504460D461646324629462046FEF728FA70BD000008B5544880790028A6
:2044400072D00020524908705248807831283ED00CDC222820D004DC102814D0112877D14F
:2044600063E0272821D0282872D127E0372849D004DC342834D036286AD13AE03E285DD021
:20448000852865D147E0414A203A918C414A1088D21C00F0B3F86EE03C4A203A918C3D4A92
:2044A0001088D21C00F032FA65E0384A203A918C384A1088D21C00F03FFB5CE0334A203AD7
:2044C000918C344A1088D21C00F0ACFC53E02F4A203A918C2F4A1088D21C00F09BFD4AE04F
:2044E0002A4A203A918C2B4A1088D21C01F046F841E0264A203A918C264A1088D21C01F0B8
:204500004FF938E0214A203A918C224A1088D21C01F06CFA2FE01D4A203A918C1D4A108824
:20452000D21C01F0F5FA26E02EE0184A203A918C184A1088D21C00F05FF91CE0134A203ADD
:20454000918C144A1088D21C01F080FA13E0FFE710480088104988420CD111200F494870F5
:20456000481C0C490090887801230B4A0832194601F06AFB00BF00BF0120094908700449D4
:20458000087000200149887108BD0000B81100201C060020D80C002081070000F1050020AE
:2045A0001E06002070470000F0B50446002B12D10125094EB571094D2C80551E203EB58454
:2045C000002006E00E78054DAD1C2E54491C451CA8B29042F6DBF0BDB8110020D80C002055
:2045E00070B504460D461646324629462046FFF718FF70BD10B5FFF71FFF10BDF7B582B092
:204600000020764948700398C6B2012074490870029C002505E00498405D72494855681CDD
:2046200085B2B542F7DB012E11DA6F48844201D105B0F0BD132069494870481C01236A4AD6
:20464000563A19460090102001F0FEFAF0E76548007847067F0E012F14D0022F12D0032F93
:2046600010D06148844200D1E2E712205B494870481C01235C4A563A19460090102001F0F5
:20468000E3FAD5E7012E10D05748844200D1CFE7132052494870481C0123534A563A1946EC
:2046A0000090102001F0D0FAC2E7012E4DD14D480078012803D04B48007881280AD10020D1
:2046C0004A49087001204A49087008460078FFF725FC4BE043480078022803D0414800789A
:2046E00082280CD101203E4908704049087002203F49087008460078FFF710FC36E0394891
:204700000078032803D03748007883280CD101203349087035490870032035490870084632
:204720000078FFF7FBFB21E02F48844200D17FE712202A494870481C01232B4A563A194657
:204740000090102001F080FA72E72748844200D16EE7132021494870481C0123224A563AA1
:2047600019460090102001F06FFA61E71D480078032803D01B480078012816D10020194930
:204780004870322088700120C870F420087108460523154A563A00210090102001F054FAAC
:2047A00014480068FDF756FC15E00E480078022811D100200B494870322088700120C87051
:2047C000F420087108460523074A563A00210090102001F039FA00BF2AE70000F10500200A
:2047E0001E06002088130020DF0700001C0600204E06002020060020FEB50E461746F5B2CD
:2048000000203C490870002404E0385D3A490855601C84B2AC42F8DB012D0BDA13203749C5
:204820004870481C0123364A19460090112001F00BFAFEBD304800784006400E0190019839
:2048400001280BD012202D494870481C01232C4A19460090112001F0F7F9EAE7012D0BD01B
:20486000132026494870481C0123254A19460090112001F0E9F9DCE72248007801280BD14A
:2048800022201E494870481C01231D4A19460090112001F0D9F9CCE717480078012803D05F
:2048A00015480078812818D113480078812804D101201449087001F08FFA0F480123104AFB
:2048C00000210090112001F0BFF901200D4908700D48FDF7E8FC01F07FFA1220074948708D
:2048E000481C0123064A19460090112001F0ACF900BF9EE71D06002088130020F1050020D2
:20490000890700004E06002070170000F7B584B005460F46002002900295FEB27E49087054
:204920007E4948707E48029D854201D107B0F0BD002405E00698005D7A490855601C84B2C0
:20494000B442F7DB022E0CDA132074494870481C0123734A563A19460090222001F074F96D
:20496000E4E77048007800026E49497808430390022E0CD0132069494870481C0123684A01
:20498000563A19460090222001F05EF9CEE7664A0398811A904254D00ADC6449401800286A
:2049A00066D004287ED06249401800287BD131E00C2918D00E29F9D1002408E05D48006888
:2049C0001630015D574AA01C1154601C84B2062CF4DB54480823524A563A002100902220D8
:2049E00001F032F995E0002408E0524800681030015D4C4AA01C1154601C84B2062CF4DB10
:204A000048480823464A563A00210090222001F01BF97EE0002408E046480068001D015DE8
:204A2000404AA01C1154601C84B2062CF4DB3D4808233B4A563A00210090222001F004F972
:204A400067E0002408E03B4800680A30015D354AA01C1154601C84B2062CF4DB3148082389
:204A60002F4A563A00210090222001F0EDF850E010202C49087024204870422088705F2042
:204A8000C87056200871312048712E2088713020C8713120087208460923214A563A0021B4
:204AA000009001E004E022E0222001F0CDF830E010201C49087028204870322088703020F0
:204AC000C8703220087134204871302088713320C871322008723020487208460A23104A46
:204AE000563A00210090222001F0AEF811E00C490298884200D119E7312008494870481C63
:204B00000123074A563A19460090222001F09CF800BF00BF00BF09E71D060020F105002054
:204B2000DF0700008813002087F10000DCEFFFFFA41EFFFFF8050020F7B584B0002700208F
:204B4000A9490870A9490498884201D107B0F0BD0598C5B2002405E00698005DA4490855FB
:204B6000601C84B2AC42F7DBA248007801280CDC7F20A1494870481C01239C4A563A1946B2
:204B80000090272001F060F8E0E7012D0CDA132099494870481C0123944A563A1946009068
:204BA000272001F051F8D1E79148007847067F0E012F0ED0022F0CD012208F494870481C50
:204BC00001238A4A563A19460090272001F03CF8BCE7022F10D18948007801280CD02420AB
:204BE00085494870481C0123804A563A19460090272001F029F8A9E781480078012816D124
:204C000080480078012805D100207E4908707C4908700CE0372078494870481C0123734AB8
:204C2000563A19460090272001F00EF88EE770480078012802D002287ED15EE0012D0CD056
:204C400013206D494870481C0123684A563A19460090272000F0F8FFC3E0012067490870E0
:204C60006948007800280BD16848008886B2301267490880F0B267490880012062490870FF
:204C800001205B49087062480078C0433130487060480078C043233088705D480078563088
:204CA000C8705B480078713008715B480078022806D101200870002048708870C870087151
:204CC0004B4841786846017249488178684641724748C17868468172454801796846C1722B
:204CE00043480523414A563A00210090272000F0ABFF02A8FCF708FF73E0052D0CD013201C
:204D00003D494870481C0123384A563A19460090272000F099FF19E7354840780006344945
:204D20008978090408433249C97809020843304909790843039000E046E03849039809689C
:204D400088421AD130480078012816D102203249087001202C490870022025490870084625
:204D6000007802282FD108460123204A563A00210090272000F068FF25E0002022490870CE
:204D800027480078401C264908700846807803280CDB362018494870481C0123134A563AAD
:204DA00019460090272000F04FFFCFE6352012494870481C01230D4A563A194600902720BD
:204DC00000F042FFC2E60CE012200B494870481C0123064A563A19460090272000F034FF0F
:204DE00000BF00BF00BFB1E61D060020DF070000881300204E060020F10500203406002017
:204E00002606002024060020280600203C0600203006002032060020270600202C060020FF
:204E20006A180020F7B582B00398C7B2029C002073490870002605E00498805D71498855D1
:204E4000701C86B2BE42F7DB022F11DA6E48844201D105B0F0BD13206C494870481C0123C8
:204E6000694A563A19460090282000F0EDFEF0E76448007845066D0E002D16D0012D14D0F7
:204E8000022D12D0032D10D05F48844200D1E0E712205E494870481C01235B4A563A19463F
:204EA0000090282000F0D0FED3E759480078012810D15548844200D1CBE722205349487003
:204EC000481C0123504A563A19460090282000F0BBFEBEE7022F10D04B48844200D1B8E7C1
:204EE00013204A494870481C0123474A563A19460090282000F0A8FEABE7424840780328BF
:204F000010DD4148844200D1A3E731203F494870481C01233C4A563A19460090282000F0A4
:204F200093FE96E737480078802810D008DC00280ED001281DD002282CD003284BD13AE05D
:204F4000812815D0822824D0832844D132E000BF2C48007880210840002808D12948012329
:204F6000294A563A00210090282000F06DFE44E000BF2448007880210840002808D12148C0
:204F80000123214A563A00210090282000F05CFE33E000BF1B48007880210840002808D118
:204FA00018480123184A563A00210090282000F04BFE22E000BF13480078802108400028A4
:204FC00008D110480123104A563A00210090282000F03AFE11E00C490298884200D138E7D7
:204FE00012200A494870481C0123074A563A19460090282000F028FE00BF00BF00BF28E772
:205000001D06002088130020DF070000F10500204E060020F7B588B00020FE490870FE4918
:205020000898884201D10BB0F0BD0998C6B2002405E00A98005DF9490855601C84B2B44264
:20504000F7DBF748007801280CD17F20F5494870481C0123F04A563A19460090312000F0AA
:20506000F3FDE0E7ED4840780002EC49897808430390EA480078012803D0E848007881287F
:2050800079D10398FF38FF380438002806D0E6494018002870D001286FD1F8E1E0480078B2
:2050A00002280CD07F20DF494870481C0123DA4A563A19460090312000F0C6FDB3E7D74883
:2050C000C0780006D549097909040843D349497909020843D149897908430290D348807B57
:2050E00000285BD1D2480068C043D149086002980968884242D1CF4800783E2813D1002074
:20510000C043CB4908600120C84988730020C349C87008460423C04A563A0021009031206E
:2051200000F092FD77E0C34800783F2813D10020C043BF4908600221BC4881730020B749FD
:20514000C87008460423B44A563A00210090312000F07AFD5FE00021B44881730520AF493E
:20516000C87008460423AC4A563A00210090312000F06AFD4FE0EBE14EE0DCE10021AB48A9
:2051800081730520A549C87008460423A24A563A00210090312000F057FD3CE0A648008A05
:2051A000A549498A884206DBA348008AA249498A401A80B204900498002806D09E494A8ADB
:2051C00014315018049900F025FE99480068C043974908600298096888420CD100208F4934
:2051E000C870084604238C4A563A00210090312000F02AFD0BE005208849C87008460423F5
:20520000854A563A00210090312000F01DFD0020C043874908609AE18448807B01287DD10F
:205220000B2E0CDA13207F494870481C01237A4A563A19460090312000F006FDF3E67748F5
:2052400000790006754949790904084373498979090208437149C979084307906F48007AD4
:2052600000066E49497A090408436C49897A090208436A49C97A08430690069907984018DB
:205280004721C90288420FD300216848C173312064494870481C01235F4A563A19460090C4
:2052A000312000F0D1FCF1E03120FEF7F9FD00200590FDF753F8FDF725F86048806801211C
:2052C0008904884205D25D4800680F21C902884212D05B4880684721C902884205D25848ED
:2052E00000680F21C902884202D00120059021E0FCF7E0FF05901DE0504A51681068FCF7D6
:20530000B7FE002813D007200003FEF77DFD07464720C002FEF778FD874200E04FE002D1A9
:205320000120059006E0FCF7C5FF059002E0FCF7C1FF05900598012831D1424800F0ECFC31
:205340000A20FCF7B0FF4721C90207200003FDF787FE0546002D12D13A483B4908600120C1
:205360003249C87300202D49C870084604232A4A563A00210090312000F066FC86E0002155
:205380002A48C17305202549C87008460423224A563A00210090312000F056FC76E0002071
:2053A0002249C87372201F494870481C01231A4A563A19460090312000F046FC66E01B48FE
:2053C000807B022854D13120FEF76AFD1D4800F0A3FC0A20FCF767FF012189040720000386
:2053E000FDF73EFE05460A20FCF75DFF002D30D114481549086001200C49C8730020074948
:20540000C87008460423044A563A0021009031201CE000001D060020DF070000881300201F
:205420004E060020F10500200203FFFFA01D002050060020F5050020A018002094180020CE
:2054400088180020A55AA55A2006002000F0FCFB1CE000214548C17305204549C87008464A
:205460000423444A00210090312000F0EDFB0DE000203E49C87305203D49C8700846042376
:205480003C4A00210090312000F0DEFB5FE0FCF793FE012840D1032E2FD1FCF773FE002801
:2054A0001CD1782034494870481C0123314A19460090312000F0C8FB002000F02DFC0A20D9
:2054C000FCF7F1FE00202A49C87008460423294A00210090312000F0B7FB2BE000212348FC
:2054E000817305202249C87008460423214A00210090312000F0A8FB1CE000211B48817307
:2055000013201B49C870084601231A4A19460090312000F099FB0DE000211448817305209F
:205520001349C87008460423124A00210090312000F08AFB0BE031200F494870481C0123BB
:205540000C4A19460090312000F07EFB00BF0BE0122009494870481C0123064A194600909F
:20556000312000F071FB5EE500BF5CE5A01D00208813002089070000F1050020FEB50E46F6
:205580001746F0B2019001207B4908707B48007800280BD133207A494870481C0123794AC6
:2055A00019460090342000F04FFBFEBD7648007802280BD07F2072494870481C0123714A23
:2055C00019460090342000F03FFBEEE700206F490870F0B2019001980A280BD0132068497C
:2055E0004870481C0123674A19460090342000F02BFBDAE7002404E0385D65490855601C7C
:2056000084B201988442F7DB61480078002803D15F48407844280BD0132059494870481C6F
:205620000123584A19460090342000F00DFBBCE75848807B00286DD05648C07B00280BD1E9
:2056400070204F494870481C01234E4A19460090342000F0F9FAA8E74D48807800064C496D
:20566000C978090408434A490979090208434849497905460D4348480560454880790006B7
:205680004349C979090408434149097A090208433F49497A0843404988600846006807219C
:2056A000090388422AD13C4800683B49896840180121890488420BD3312031494870481C22
:2056C0000123304A19460090342000F0BDFA6CE720202F490870012048700220887008467E
:2056E0000323284A00210090342000F0ADFA01202849087400202849C8603BE031202049DA
:205700004870481C01231F4A19460090342000F09BFA4AE71E48807800061D49C9780904CF
:2057200008431B490979090208431949497905460D431A4885420BD0312011494870481C58
:205740000123104A19460090342000F07DFA2CE701201049087420200D4908700020487032
:20576000E220887008460323064A00210090342000F06AFA00BF18E71E06002027060020C3
:20578000F1050020890700004E060020F505002088130020A01D0020A018002000009F01C5
:2057A000F7B5C6B01646002043900120854908708548007802280CD07F2084494870481C3E
:2057C0000123834A19460090362000F03DFA49B0F0BD8048007800280BD133207B494870B3
:2057E000481C01237A4A19460090362000F02CFAEDE7479D002404E0305D77490855601C1C
:2058000084B2AC42F8DB744801787448007C81420BD073206D494870481C01236C4A1946E8
:205820000090362000F010FAD1E76C48007C44906A48007C401C69490874681E6849C860B5
:205840000846C068FF21013188420BD973205F494870481C01235E4A19460090362000F07A
:20586000F3F9B4E75D48807B002822D14590012407E05948015D45980818C0B24590601C46
:2058800084B2AC42F5DB691E5348401C00F0C2FA544945980870002045904F494498087017
:2058A000084601234A4A00210090362000F0CCF98DE7681E80B242904948006807210903FB
:2058C000884251D3464800680121890488424BD2002445E0301941784148028A008A401C08
:2058E0003F4B1882184614308154143800683E49884233D21846008A40282FDBFF22402127
:2059000002A8FBF747FC00270CE03548418A408A401C334A508210461430405C02A9C855DA
:20592000781C87B2402FF0DB40212D48143000F071FA2B494022086802A900F0F1FA43904C
:205940004398002809D140212548001DFCF7B2F8002023490882488200E004E0601C84B28C
:2059600042988442B6DB0BE0722018494870481C0123174A19460090362000F065F926E7D7
:205980007D20C000FCF78FFC439800280BD1124944980870084601230D4A002100903620CE
:2059A00000F052F90BE0722008494870481C0123074A19460090362000F046F907E700BF2C
:2059C00005E700001E0600204E060020F1050020890700002706002088130020A01D002098
:2059E000A0180020F5050020C0FF0300F8B504460D46164601200F49087000200E49087469
:205A00000E48007802280BD07F200D494870481C01230C4A19460090372000F015F9F8BD2F
:205A200009480023074A19460090372000F00CF900BFF4E71E060020A01D00204E06002037
:205A4000F10500208907000088130020F7B582B005460E460195F7B2012F0CD0132027497A
:205A60004870481C0123264A194600903E2000F0EBF805B0F0BD002405E00498005D214988
:205A80000855601C84B2BC42F7DB1E480078002815D01C480078802811D019495631019855
:205AA000884200D1E5E7122014494870481C0123134A194600903E2000F0C6F8D9E711483F
:205AC0000078802806D101200F49087000200F490870CEE700200B49087001200A49087061
:205AE00000200A49087007480123054A002100903E2000F0A9F800BFBBE70000F1050020E2
:205B000089070000881300201E0600201D060020F7B582B007460020464908700398C5B24F
:205B2000002405E00498005D43490855601C84B2AC42F7DB012D0CDA132040494870481C1C
:205B400001233F4A19460090852000F07DF805B0F0BD394800784606760E012E0DD0022E38
:205B60000BD0122035494870481C0123344A19460090852000F068F8E9E73248007801280D
:205B80000BD17F202D494870481C01232C4A19460090852000F058F8D9E7012D0BD013208E
:205BA00026494870481C0123254A19460090852000F04AF8CBE720480078012807D0022845
:205BC00015D0812802D0822820D10FE000BF1A48007880210840002807D117480123184A74
:205BE00000210090852000F02FF820E000BF1248007880210840002807D10F480123104AE9
:205C000000210090852000F01FF810E00C485630874200D19BE7122008494870481C01237E
:205C2000074A19460090852000F00EF800BF00BF00BF8CE71D06002088130020F1050020C5
:205C4000890700004E060020FFB581B0064617460A9D0298002822D0224807807F2021495D
:205C600088700846C670403104984884002406E029781C48001D01556D1C601C84B21948B1
:205C80004030408CA042F3DC16494031498C891C8AB214490888891CFEF7A2FC20E0124812
:205CA00007804020304310498870403104984884002406E029780C48C01C01556D1C601C2A
:205CC00084B209484030408CA042F3DC06494031498C491C8AB204490888891CFEF780FC27
:205CE00005B0F0BD24120020C0110020AC2001494870704700100240F0B506460F46144684
:205D0000354605E028462168FDF7DEF9241D2D1DBD42F7D3F0BD000010B5044606480749B3
:205D2000086008464460064800F0C5F9034A0821034800F0EBF910BDA55A7AA7FC0500206A
:205D40000004500030B47446641E2578641CAB4204D3635D5B00E31830BC18471D46F8E74B
:205D600010B5002819DB1A4A03231B02D21883089B00D2588307DC0EFF23A3409A438B0779
:205D80001B0E8407E40EA3401A43114B032424021B198408A4001A5118E00E4A03071B0F21
:205DA000083B9B089B00D2588307DC0EFF23A3409A438B071B0E8407E40EA3401A43054B1A
:205DC0000407240F083CA408A4001A5110BD000000E100E01CED00E0BFF34F8F03480449E7
:205DE000C860BFF34F8F00BF00BFFDE70400FA0500ED00E002E008C8121F08C1002AFAD118
:205E000070477047002001E001C1121F002AFBD17047000010B502460B4611460EE0087850
:205E2000491C094C247860400006800D074C2058054C2468240A6040034C206018465B1EBD
:205E40000028ECD110BD0000500600204465000010B5044600211048417002210F48FBF7CC
:205E6000CBFA002816D002210C48FBF799FA0B48FBF7CEFA0A4908600A4A08460168074831
:205E8000FBF718FC08480068002803D0054806490968884710BD00005C600040005404400C
:205EA00010000020E80600201400002010B5044603492046FBF744F90249087010BD0000F0
:205EC00040420F002800002070B50446002C01D1064D01E0012070BD2846FBF764FA032811
:205EE00001D10220F7E70020F5E700000054044072B60120000309498860BFF35F8F62B6FE
:205F0000FCF71AF8FCF736F8FEF710FAFBF71CFA03E0FEF78DF9FFF7E9FEFAE700ED00E06B
:205F2000F8B505460E4614460027291932462846FFF7E2FE03480068001902490860384699
:205F4000F8BD0000A01800200346002B01D1104A01E0012070475020815A0E480140072052
:205F60000143502081520C480068C1890B4801400220014308480068C1815020815A054808
:205F80000140FF2001300143502081520020E1E700540440F8F8000010000020FCFC000051
:205FA00010B588B0044621231F2202210520FDF74BF920231E2201210520FDF745F9022176
:205FC0006846018300218176012181770021C17606A90520FDF794F8012168460183817666
:205FE0000021C17606A90520FDF78AF804216846018300218176C176022141770021817765
:2060000006A90520FDF77CF861786846017002214180002141710B2181710221C171002101
:20602000017160680290A0680390E06804902069059069460C48FBF715FA0C496069086075
:2060400001210948FBF70AFB012202210648FBF7EFF907493720FDF74BFD00210548417066
:20606000002008B010BD00000054044014000020515E00005C610040014672B608208F4A93
:20608000D060F120106255205060AA2090600020C043086000BF89480068C007C00F00282D
:2060A000F9D00120854A10600020D060F020106262B600207047014672B610207F4AD0605E
:2060C000F120106255205060AA2090600020C043086000BF79480068C007C00F0028F9D064
:2060E0000120764A10600020D060F02010621046006804221040002805D004206F4A1060FF
:2061000062B60120704762B60020FBE770B503461D46F120694E3062002415E072B6AA203F
:20612000664E70605520B06010782870521C6D1C62B600BF61480068C007C00F0028F9D0D0
:2061400001205E4E3060641C8C42E7D3F0205B4E3062002070BDF7B5FFB0FFB089B00646B3
:206160000F460021FFA8C161012104914802874206D9FFA8C161C0697FB07FB00CB0F0BD7E
:20618000029600240DE002980078FFA988610298401C02908869FF2801D000200490601C12
:2061A00084B2BC42EFD30498002809D0444845490860FFA83946826A3046FFF7A7FF6DE059
:2061C000750AF119681C4002814202D90120039001E000200390710A49020191F105C90D66
:2061E0000091039800280FD0002408E00198007805A908550198411C0191601C84B20120E9
:2062000080028442F2DB0EE0002408E00198007805A908550198411C0191601C84B20120F8
:2062200040028442F2DB00240DE0FFA8806A01780098001905AA1154FFA8806A411CFFA814
:206240008162601C84B2BC42EFD30398002816D01B481C4908606802FFF72DFF18481949C2
:206260000860691C4802FFF726FF154815490860680205AA01218902FFF748FF0EE0104860
:20628000104908606802FFF716FF0D480D490860680205AA01214902FFF738FFFFA8C06932
:2062A0006AE730B50446002304E025781570641C521C5B1C8B42F8D330BD00000000024009
:2062C000CDAB34122C000020000000000100000002000000030000000400000005000000A5
:2062E00006008000000100000101800002018000030180000401800005010000060180007C
:206300000701800000020000010200000202000003020000040200000502000006020000D2
:20632000070200000003800001030000000480000104000002040000030400000005000032
:2063400001058000020581000305000004050000050500000006800001068000020680007F
:2063600003068000000700000107000002070000030780000407800005078000060780004E
:2063800007078000000C8100010C8000020C8000030C8000040C8000000D8000060D800088
:2063A000070D8000000E8100010E8100060E8000070E8000000080000100000002008000FE
:2063C0000300800004008000050081000600800000018000010180000201800003018000A0
:2063E0000401800005018000060180000701800000028100010280000202000003028100F3
:206400000402800005020000060281000702000000038000010381000004810001040000CB
:206420000204000003040000000500000105810002058100030580000405800005058000A0
:206440000006810001068100020681000306810000078000010780000207800003078000F8
:2064600004078000050780000607800007078000000C0000010C8000020C8000030C800034
:20648000040C8000000D8000060D8000070D8000000E0000010E0000060E0000070E8100F1
:2064A00000050000102700002823000000000000000108000000000000000000000000004C
:2064C0000000000000000000000000000000000000000000F40100000204000000000000C1
:2064E00000000000000000000000000000000000000000000000000000000000000000009C
:20650000F40100000104000000000000000000000000000000000000000000000000000081
:20652000000000000000000000000000320000000101000000000000000000000000000027
:206540003123567100000000963007772C610EEEBA51099919C46D078FF46A7035A563E9D2
:20656000A395649E3288DB0EA4B8DC791EE9D5E088D9D2972B4CB609BD7CB17E072DB8E796
:20658000911DBF906410B71DF220B06A4871B9F3DE41BE847DD4DA1AEBE4DD6D51B5D4F498
:2065A000C785D38356986C13C0A86B647AF962FDECC9658A4F5C0114D96C0663633D0FFA08
:2065C000F50D088DC8206E3B5E10694CE44160D5727167A2D1E4033C47D4044BFD850DD26B
:2065E0006BB50AA5FAA8B5356C98B242D6C9BBDB40F9BCACE36CD832755CDF45CF0DD6DC96
:20660000593DD1ABAC30D9263A00DE518051D7C81661D0BFB5F4B42123C4B3569995BACF89
:206620000FA5BDB89EB802280888055FB2D90CC624E90BB1877C6F2F114C6858AB1D61C1EF
:206640003D2D66B69041DC760671DB01BC20D2982A10D5EF8985B1711FB5B606A5E4BF9F53
:2066600033D4B8E8A2C9077834F9000F8EA8099618980EE1BB0D6A7F2D3D6D08976C649151
:20668000015C63E6F4516B6B62616C1CD83065854E0062F2ED95066C7BA5011BC1F40882EB
:2066A00057C40FF5C6D9B06550E9B712EAB8BE8B7C88B9FCDF1DDD62492DDA15F37CD38CF3
:2066C000654CD4FB5861B24DCE51B53A7400BCA3E230BBD441A5DF4AD795D83D6DC4D1A4CA
:2066E000FBF4D6D36AE96943FCD96E34468867ADD0B860DA732D0444E51D03335F4C0AAA69
:20670000C97C0DDD3C710550AA41022710100BBE86200CC925B56857B3856F2009D466B974
:206720009FE461CE0EF9DE5E98C9D9292298D0B0B4A8D7C7173DB359810DB42E3B5CBDB7F2
:20674000AD6CBAC02083B8EDB6B3BF9A0CE2B6039AD2B1743947D5EAAF77D29D1526DB0476
:206760008316DC73120B63E3843B64943E6A6D0DA85A6A7A0BCF0EE49DFF099327AE000A2C
:20678000B19E077D44930FF0D2A3088768F2011EFEC206695D5762F7CB67658071366C1954
:2067A000E7066B6E761BD4FEE02BD3895A7ADA10CC4ADD676FDFB9F9F9EFBE8E43BEB7172E
:2067C000D58EB060E8A3D6D67E93D1A1C4C2D83852F2DF4FF167BBD16757BCA6DD06B53FA9
:2067E0004B36B248DA2B0DD84C1B0AAFF64A0336607A0441C3EF60DF55DF67A8EF8E6E312C
:2068000079BE69468CB361CB1A8366BCA0D26F2536E2685295770CCC03470BBBB9160222A9
:206820002F260555BE3BBAC5280BBDB2925AB42B046AB35CA7FFD7C231CFD0B58B9ED92C55
:206840001DAEDE5BB0C2649B26F263EC9CA36A750A936D02A906099C3F360EEB856707720B
:2068600013570005824ABF95147AB8E2AE2BB17B381BB60C9B8ED2920DBED5E5B7EFDC7C37
:2068800021DFDB0BD4D2D38642E2D4F1F8B3DD686E83DA1FCD16BE815B26B9F6E177B06F87
:2068A0007747B718E65A0888706A0FFFCA3B06665C0B0111FF9E658F69AE62F8D3FF6B6109
:2068C00045CF6C1678E20AA0EED20DD75483044EC2B30339612667A7F71660D04D47694988
:2068E000DB776E3E4A6AD1AEDC5AD6D9660BDF40F03BD83753AEBCA9C59EBBDE7FCFB2470F
:20690000E9FFB5301CF2BDBD8AC2BACA3093B353A6A3B4240536D0BA9306D7CD2957DE54B4
:20692000BF67D9232E7A66B3B84A61C4021B685D942B6F2A37BE0BB4A18E0CC31BDF055A08
:206940008DEF022D646900000000002060060000F8110000CC6A000060060020681D0000EF
:20696000045E0000C10223C01301022320FF19031302024A210A1303024A220A1304024A1E
:20698000230A4D0502040A0A1306021D1C0207010A1307024A1D1418080802010602070223
:2069A0000A1808090201070207100A4D0A02010F1E4D0B02010E0A5C0C0201505C0D020453
:2069C0000A4D0E02012E0A4D0F02012F0A1A103C180807041A07050A113C480B07043707D5
:2069E00005091202020C1E4D1302020D0A4D140203190A131504280E1904011B0408071681
:206A000004021E0403A022174A291E12184B01280A12191E020E0709090A121A4B03181417
:206A2000121B2D041E07095D121C1E051F07090B0A121E5A06BE191159FA4D2007031E0A6E
:206A40004D2107031F0A2904590A111AFF0181A3E93B09420C1324070A12200C095E240921
:206A600052CC09620CC10976780916840922240982FC0946A801B4092EE4290C700A486131
:206A80006F4A696E323332A7484A59422D3510104241543332413233394B4B363446429046
:206AA0000843414E5F5354442910AD43485F301050083530304B6270732389071A81041AB9
:0C6AC000DF0401685AFF016301020000BE
:00000001FF
VERSION ""
NS_ :
NS_DESC_
CM_
BA_DEF_
BA_
VAL_
CAT_DEF_
CAT_
FILTER
BA_DEF_DEF_
EV_DATA_
ENVVAR_DATA_
SGTYPE_
SGTYPE_VAL_
BA_DEF_SGTYPE_
BA_SGTYPE_
SIG_TYPE_REF_
VAL_TABLE_
SIG_GROUP_
SIG_VALTYPE_
SIGTYPE_VALTYPE_
BO_TX_BU_
BA_DEF_REL_
BA_REL_
BA_DEF_DEF_REL_
BU_SG_REL_
BU_EV_REL_
BU_BO_REL_
SG_MUL_VAL_
BS_:
BU_: Haojin232
VAL_TABLE_ ECU_Battery_Voltage ;
VAL_TABLE_ ECU_Warning_Lamp 1 "ON" 0 "OFF" ;
VAL_TABLE_ ECU_Vehicle_Speed ;
VAL_TABLE_ ECU_Engine_Speed ;
VAL_TABLE_ Key_ISTOP 1 "Enable" 0 "Unenable" ;
BO_ 1280 CAN_0x500: 8 Vector__XXX
SG_ Key_ISTOP : 0|1@0+ (1,0) [0|1] "" Vector__XXX
BO_ 1026 CAN_0x402: 8 Haojin232
SG_ ECU_Warning_Lamp : 63|1@0+ (1,0) [0|1] "" Vector__XXX
BO_ 1025 CAN_0x401: 8 Haojin232
SG_ ECU_Battery_Voltage : 23|8@0+ (0.1,0) [0|255] "" Vector__XXX
BO_ 257 CAN_0x101: 3 Haojin232
SG_ ECU_Vehicle_Speed : 23|8@0+ (1,0) [0|255] "" Vector__XXX
SG_ ECU_Engine_Speed : 7|16@0+ (0.25,0) [0|65535] "" Vector__XXX
BA_DEF_ "BusType" STRING ;
BA_DEF_ BU_ "NodeLayerModules" STRING ;
BA_DEF_ BU_ "ECU" STRING ;
BA_DEF_ BU_ "CANoeJitterMax" INT 0 0;
BA_DEF_ BU_ "CANoeJitterMin" INT 0 0;
BA_DEF_ BU_ "CANoeDrift" INT 0 0;
BA_DEF_ BU_ "CANoeStartDelay" INT 0 0;
BA_DEF_DEF_ "BusType" "";
BA_DEF_DEF_ "NodeLayerModules" "";
BA_DEF_DEF_ "ECU" "";
BA_DEF_DEF_ "CANoeJitterMax" 0;
BA_DEF_DEF_ "CANoeJitterMin" 0;
BA_DEF_DEF_ "CANoeDrift" 0;
BA_DEF_DEF_ "CANoeStartDelay" 0;
VAL_ 1280 Key_ISTOP 1 "Enable" 0 "Unenable" ;
VAL_ 1026 ECU_Warning_Lamp 1 "ON" 0 "OFF" ;
//******************************BUSMASTER Messages and signals Database ******************************//
[DATABASE_VERSION] 1.3
[PROTOCOL] CAN
[BUSMASTER_VERSION] [3.2.2]
[NUMBER_OF_MESSAGES] 15
[START_MSG] CAN_0x393,915,8,7,1,S
[START_SIGNALS] ICU_HardVer,8,1,0,U,255,0,0,0.000000,1.000000,,
[START_SIGNALS] ICU_SubHardVer,8,2,0,U,255,0,0,0.000000,1.000000,,
[START_SIGNALS] ICU_SoftVer,8,3,0,U,255,0,0,0.000000,1.000000,,
[START_SIGNALS] ICU_SubSoftVer,8,4,0,U,255,0,0,0.000000,1.000000,,
[START_SIGNALS] ICU_SoftPhaseVer,8,5,0,U,255,0,0,0.000000,1.000000,,
[START_SIGNALS] ICU_ProtoVer,8,6,0,U,255,0,0,0.000000,1.000000,,
[START_SIGNALS] ICU_ProtoSubVer,8,7,0,U,255,0,0,0.000000,1.000000,,
[END_MSG]
[START_MSG] CAN_0x398,920,8,6,1,S
[START_SIGNALS] ICU_SN5,8,1,0,U,255,0,0,0.000000,1.000000,,
[START_SIGNALS] ICU_SN4,8,2,0,U,255,0,0,0.000000,1.000000,,
[START_SIGNALS] ICU_SN3,8,3,0,U,255,0,0,0.000000,1.000000,,
[START_SIGNALS] ICU_SN2,8,4,0,U,255,0,0,0.000000,1.000000,,
[START_SIGNALS] ICU_SN1,8,5,0,U,255,0,0,0.000000,1.000000,,
[START_SIGNALS] ICU_SN0,8,6,0,U,255,0,0,0.000000,1.000000,,
[END_MSG]
[START_MSG] CAN_0x39D,925,8,6,1,S
[START_SIGNALS] ICU_ProductName,16,2,0,U,65535,0,0,0.000000,1.000000,,
[START_SIGNALS] ICU_ProductCode,16,4,0,U,65535,0,0,0.000000,1.000000,,
[START_SIGNALS] ICU_CustomerCode,8,5,0,U,255,0,0,0.000000,1.000000,,
[START_SIGNALS] ICU_ProductYear,8,6,0,U,255,0,0,0.000000,1.000000,,
[START_SIGNALS] ICU_ProductMon,8,7,0,U,255,0,0,0.000000,1.000000,,
[START_SIGNALS] ICU_ProductDay,8,8,0,U,255,0,0,0.000000,1.000000,,
[END_MSG]
[START_MSG] CAN_0x3A2,930,8,13,1,S
[START_SIGNALS] ICU_POWERStateFB,4,1,0,U,15,0,0,0.000000,1.000000,,
[START_SIGNALS] ICU_KL15State,1,1,4,U,1,0,0,0.000000,1.000000,,
[START_SIGNALS] ICU_LEDLightState,1,1,5,U,1,0,0,0.000000,1.000000,,
[START_SIGNALS] ICU_BuzzerState,1,1,6,U,1,0,0,0.000000,1.000000,,
[START_SIGNALS] ICU_IndicatorLightState,3,2,0,U,7,0,0,0.000000,1.000000,,
[START_SIGNALS] ICU_IndicatorLightPowerState,1,2,3,U,1,0,0,0.000000,1.000000,,
[START_SIGNALS] ICU_GrassFullState,1,2,4,U,1,0,0,0.000000,1.000000,,
[START_SIGNALS] ICU_kEY_AState,1,2,5,U,1,0,0,0.000000,1.000000,,
[START_SIGNALS] ICU_kEY_BState,1,2,6,U,1,0,0,0.000000,1.000000,,
[START_SIGNALS] ICU_kEY_CState,1,2,7,U,1,0,0,0.000000,1.000000,,
[START_SIGNALS] ICU_kEY_DState,1,3,0,U,1,0,0,0.000000,1.000000,,
[START_SIGNALS] ICU_kEY_EState,1,3,1,U,1,0,0,0.000000,1.000000,,
[START_SIGNALS] ICU_BluetoothConnectState,3,3,4,U,7,0,0,0.000000,1.000000,,
[END_MSG]
[START_MSG] CAN_0x3A7,935,8,4,1,S
[START_SIGNALS] ICU_MasterBMSCommunicatlost,1,1,0,U,1,0,0,0.000000,1.000000,,
[START_SIGNALS] ICU_SlaveBMSCommunicatlost,1,1,1,U,1,0,0,0.000000,1.000000,,
[START_SIGNALS] ICU_MCUCommunicatlost,1,1,2,U,1,0,0,0.000000,1.000000,,
[START_SIGNALS] ICU_VCUCommunicatlost,1,1,3,U,1,0,0,0.000000,1.000000,,
[END_MSG]
[START_MSG] CAN_0x157,343,8,3,1,S
[START_SIGNALS] BMCU_PTOSwicthState,1,1,3,U,1,0,0,0.000000,1.000000,,
[START_SIGNALS] BMCU_BladeSpeedGear,3,1,4,U,7,0,0,0.000000,1.000000,,
[START_SIGNALS] BMCU_ErrorGrage,3,5,0,U,7,0,0,0.000000,1.000000,,
[END_MSG]
[START_MSG] CAN_0x38E,910,8,2,1,S
[START_SIGNALS] BMCU_Moto1_Locked_RotorFault,1,2,0,U,1,0,0,0.000000,1.000000,,
[START_SIGNALS] BMCU_Moto2_Locked_RotorFault,1,2,1,U,1,0,0,0.000000,1.000000,,
[END_MSG]
[START_MSG] CAN_0x18200A20,404752928,8,1,1,X
[START_SIGNALS] MBMS_Soc,8,5,0,U,255,0,0,0.000000,1.000000,,
[END_MSG]
[START_MSG] CAN_0x18202922,404760866,8,4,1,X
[START_SIGNALS] MBMS_TOTALSigCharge,1,1,0,U,1,0,0,0.000000,1.000000,,
[START_SIGNALS] MBMS_TOTALSigAcc,1,1,1,U,1,0,0,0.000000,1.000000,,
[START_SIGNALS] MBMS_TOTALSigOn,1,1,2,U,1,0,0,0.000000,1.000000,,
[START_SIGNALS] MBMS_TOTALWorkState,3,2,0,U,7,0,0,0.000000,1.000000,,
[END_MSG]
[START_MSG] CAN_0x18203020,404762656,8,1,1,X
[START_SIGNALS] MBMS_StatSoc,8,5,0,U,255,0,0,0.000000,1.000000,,
[END_MSG]
[START_MSG] CAN_0x18203220,404763168,8,2,1,X
[START_SIGNALS] MBMS_StatBattWorkState,4,1,0,U,15,0,0,0.000000,1.000000,,
[START_SIGNALS] MBMS_StatBattChargeState,3,2,0,U,7,0,0,0.000000,1.000000,,
[END_MSG]
[START_MSG] CAN_0x125,293,8,10,1,S
[START_SIGNALS] MMCU_WorkState,2,1,0,U,3,0,0,0.000000,1.000000,,
[START_SIGNALS] MMCU_PowerMode,4,1,2,U,15,0,0,0.000000,1.000000,,
[START_SIGNALS] MMCU_TravelSpeedGear,2,2,0,U,3,0,0,0.000000,1.000000,,
[START_SIGNALS] MMCU_EBSState,2,2,6,U,3,0,0,0.000000,1.000000,,
[START_SIGNALS] MMCU_LockMotoState,1,3,0,U,1,0,0,0.000000,1.000000,,
[START_SIGNALS] MMCU_SeatDetectState,1,3,1,U,1,0,0,0.000000,1.000000,,
[START_SIGNALS] MMCU_ParkingGearState,1,3,7,U,1,0,0,0.000000,1.000000,,
[START_SIGNALS] MMCU_DCDCEnableState,1,4,1,U,1,0,0,0.000000,1.000000,,
[START_SIGNALS] MMCU_ChgProtectState,1,4,2,U,1,0,0,0.000000,1.000000,,
[START_SIGNALS] MMCU_ErrorGrage,3,7,0,U,7,0,0,0.000000,1.000000,,
[END_MSG]
[START_MSG] CAN_0x339,825,8,2,1,S
[START_SIGNALS] MMCU_SingleWorkingHours,8,6,0,U,255,0,0,0.000000,1.000000,,
[START_SIGNALS] MMCU_AccumulatedWorkHours,16,8,0,U,65535,0,0,0.000000,1.000000,,
[END_MSG]
[START_MSG] CAN_0x18200A21,404752929,8,1,1,X
[START_SIGNALS] SBMS_Soc,8,5,0,U,255,0,0,0.000000,1.000000,,
[END_MSG]
[START_MSG] CAN_0x134,308,8,1,1,S
[START_SIGNALS] SMCU_ErrorGrage,3,3,0,U,7,0,0,0.000000,1.000000,,
[END_MSG]
\ No newline at end of file
VERSION ""
BS_:
BU_:
BO_ 915 CAN_0x393: 8 Vector__XXX
SG_ ICU_ProtoSubVer : 55|8@0+ (1,0) [0|255] "" Vector__XXX
SG_ ICU_ProtoVer : 47|8@0+ (1,0) [0|255] "" Vector__XXX
SG_ ICU_SoftPhaseVer : 39|8@0+ (1,0) [0|255] "" Vector__XXX
SG_ ICU_SubSoftVer : 31|8@0+ (1,0) [0|255] "" Vector__XXX
SG_ ICU_SoftVer : 23|8@0+ (1,0) [0|255] "" Vector__XXX
SG_ ICU_SubHardVer : 15|8@0+ (1,0) [0|255] "" Vector__XXX
SG_ ICU_HardVer : 7|8@0+ (1,0) [0|255] "" Vector__XXX
BO_ 920 CAN_0x398: 8 Vector__XXX
SG_ ICU_SN0 : 47|8@0+ (1,0) [0|255] "" Vector__XXX
SG_ ICU_SN1 : 39|8@0+ (1,0) [0|255] "" Vector__XXX
SG_ ICU_SN2 : 31|8@0+ (1,0) [0|255] "" Vector__XXX
SG_ ICU_SN3 : 23|8@0+ (1,0) [0|255] "" Vector__XXX
SG_ ICU_SN4 : 15|8@0+ (1,0) [0|255] "" Vector__XXX
SG_ ICU_SN5 : 7|8@0+ (1,0) [0|255] "" Vector__XXX
BO_ 925 CAN_0x39D: 8 Vector__XXX
SG_ ICU_ProductDay : 63|8@0+ (1,0) [0|255] "" Vector__XXX
SG_ ICU_ProductMon : 55|8@0+ (1,0) [0|255] "" Vector__XXX
SG_ ICU_ProductYear : 47|8@0+ (1,0) [0|255] "" Vector__XXX
SG_ ICU_CustomerCode : 39|8@0+ (1,0) [0|255] "" Vector__XXX
SG_ ICU_ProductCode : 23|16@0+ (1,0) [0|65535] "" Vector__XXX
SG_ ICU_ProductName : 7|16@0+ (1,0) [0|65535] "" Vector__XXX
BO_ 930 CAN_0x3A2: 8 Vector__XXX
SG_ ICU_BluetoothConnectState : 22|3@0+ (1,0) [0|7] "" Vector__XXX
SG_ ICU_kEY_EState : 17|1@0- (1,0) [0|1] "" Vector__XXX
SG_ ICU_kEY_DState : 16|1@0- (1,0) [0|1] "" Vector__XXX
SG_ ICU_kEY_CState : 15|1@0- (1,0) [0|1] "" Vector__XXX
SG_ ICU_kEY_BState : 14|1@0- (1,0) [0|1] "" Vector__XXX
SG_ ICU_kEY_AState : 13|1@0- (1,0) [0|1] "" Vector__XXX
SG_ ICU_GrassFullState : 12|1@0- (1,0) [0|1] "" Vector__XXX
SG_ ICU_IndicatorLightPowerState : 11|1@0- (1,0) [0|1] "" Vector__XXX
SG_ ICU_IndicatorLightState : 10|3@0+ (1,0) [0|7] "" Vector__XXX
SG_ ICU_BuzzerState : 6|1@0- (1,0) [0|1] "" Vector__XXX
SG_ ICU_LEDLightState : 5|1@0- (1,0) [0|1] "" Vector__XXX
SG_ ICU_KL15State : 4|1@0- (1,0) [0|1] "" Vector__XXX
SG_ ICU_POWERStateFB : 3|4@0+ (1,0) [0|15] "" Vector__XXX
BO_ 935 CAN_0x3A7: 8 Vector__XXX
SG_ ICU_VCUCommunicatlost : 3|1@0- (1,0) [0|1] "" Vector__XXX
SG_ ICU_MCUCommunicatlost : 2|1@0- (1,0) [0|1] "" Vector__XXX
SG_ ICU_SlaveBMSCommunicatlost : 1|1@0- (1,0) [0|1] "" Vector__XXX
SG_ ICU_MasterBMSCommunicatlost : 0|1@0- (1,0) [0|1] "" Vector__XXX
BO_ 343 CAN_0x157: 8 Vector__XXX
SG_ BMCU_ErrorGrage : 34|3@0+ (1,0) [0|7] "" Vector__XXX
SG_ BMCU_BladeSpeedGear : 6|3@0+ (1,0) [0|7] "" Vector__XXX
SG_ BMCU_PTOSwicthState : 3|1@0- (1,0) [0|1] "" Vector__XXX
BO_ 910 CAN_0x38E: 8 Vector__XXX
SG_ BMCU_Moto2_Locked_RotorFault : 9|1@0- (1,0) [0|1] "" Vector__XXX
SG_ BMCU_Moto1_Locked_RotorFault : 8|1@0- (1,0) [0|1] "" Vector__XXX
BO_ 2552236576 CAN_0x18200A20: 8 Vector__XXX
SG_ MBMS_Soc : 39|8@0+ (1,0) [0|255] "" Vector__XXX
BO_ 2552244514 CAN_0x18202922: 8 Vector__XXX
SG_ MBMS_TOTALWorkState : 10|3@0+ (1,0) [0|7] "" Vector__XXX
SG_ MBMS_TOTALSigOn : 2|1@0- (1,0) [0|1] "" Vector__XXX
SG_ MBMS_TOTALSigAcc : 1|1@0- (1,0) [0|1] "" Vector__XXX
SG_ MBMS_TOTALSigCharge : 0|1@0- (1,0) [0|1] "" Vector__XXX
BO_ 2552246304 CAN_0x18203020: 8 Vector__XXX
SG_ MBMS_StatSoc : 39|8@0+ (1,0) [0|255] "" Vector__XXX
BO_ 2552246816 CAN_0x18203220: 8 Vector__XXX
SG_ MBMS_StatBattChargeState : 10|3@0+ (1,0) [0|7] "" Vector__XXX
SG_ MBMS_StatBattWorkState : 3|4@0+ (1,0) [0|15] "" Vector__XXX
BO_ 293 CAN_0x125: 8 Vector__XXX
SG_ MMCU_ErrorGrage : 50|3@0+ (1,0) [0|7] "" Vector__XXX
SG_ MMCU_ChgProtectState : 26|1@0- (1,0) [0|1] "" Vector__XXX
SG_ MMCU_DCDCEnableState : 25|1@0- (1,0) [0|1] "" Vector__XXX
SG_ MMCU_ParkingGearState : 23|1@0- (1,0) [0|1] "" Vector__XXX
SG_ MMCU_SeatDetectState : 17|1@0- (1,0) [0|1] "" Vector__XXX
SG_ MMCU_LockMotoState : 16|1@0- (1,0) [0|1] "" Vector__XXX
SG_ MMCU_EBSState : 15|2@0+ (1,0) [0|3] "" Vector__XXX
SG_ MMCU_TravelSpeedGear : 9|2@0+ (1,0) [0|3] "" Vector__XXX
SG_ MMCU_PowerMode : 5|4@0+ (1,0) [0|15] "" Vector__XXX
SG_ MMCU_WorkState : 1|2@0+ (1,0) [0|3] "" Vector__XXX
BO_ 825 CAN_0x339: 8 Vector__XXX
SG_ MMCU_AccumulatedWorkHours : 55|16@0+ (1,0) [0|65535] "" Vector__XXX
SG_ MMCU_SingleWorkingHours : 47|8@0+ (1,0) [0|255] "" Vector__XXX
BO_ 2552236577 CAN_0x18200A21: 8 Vector__XXX
SG_ SBMS_Soc : 39|8@0+ (1,0) [0|255] "" Vector__XXX
BO_ 308 CAN_0x134: 8 Vector__XXX
SG_ SMCU_ErrorGrage : 18|3@0+ (1,0) [0|7] "" Vector__XXX
/**************************************************************************//**
* \file Analog_Signals.h
* \brief Analog signal processing
* \attention
*
* This file is automatically generated by analog signals configuration tool.
* Date : 2024/6/16 16:49:27
* Cfg Tool Ver : 1.1.0
* Engineer : ShiHao
* (c) Heilongjiang TYW electronics co., LTD
*
******************************************************************************/
#ifndef ANALOG_SIGNALS_H__
#define ANALOG_SIGNALS_H__
/* Includes -----------------------------------------------------------------*/
#include "ADC.h"
#include "Analog_Circuits.h"
#include "RTE.h"
/* C binding of definitions if building with C++ compiler */
#ifdef __cplusplus
extern {
#endif
/*! @{ */
/* Exported types ------------------------------------------------------------*/
enum ADCChName
{
ADC_CH_KL30_VOLTAGE = 0,
ADC_CH_KL15_VOLTAGE,
};
/* Exported macro ------------------------------------------------------------*/
#define ADC_TOTAL_CH_NUMBER (2U)
#define ADC_SIGNAL_CH_NUMBER (2U)
#define ADC_REF_VOLTAGE u16ADCRefVoltage
/* Exported variables --------------------------------------------------------*/
extern volatile uint16_t u16ADCRefVoltage;
extern const uint8_t u8ADCChList[];
/* Exported functions --------------------------------------------------------*/
extern void Analog_Signal_Conv_Init(void);
extern void Analog_Signal_Conv_Stop(void);
extern void Analog_Signal_Conv_Service(void);
extern uint16_t ADC_Read_Signal(uint8_t u8ADCCh);
extern uint8_t ADC_Read_Signal_Valid(uint8_t u8ADCCh);
extern uint16_t ADC_Conv_Single_Channel(uint8_t u8ADCCh);
/*! @} */
#ifdef __cplusplus
}
#endif
#endif /* ANALOG_SIGNALS_H__ */
/**************************************************************************//**
* \file Analog_Signals.c
* \brief Analog signal processing
* \attention
*
* This file is automatically generated by analog signals configuration tool.
* Date : 2024/6/16 16:49:27
* Cfg Tool Ver : 1.1.0
* Engineer : ShiHao
* (c) Heilongjiang TYW electronics co., LTD
*
******************************************************************************/
/* Includes -----------------------------------------------------------------*/
#include "Analog_Signals.h"
/* Private typedef ----------------------------------------------------------*/
typedef struct __attribute__((aligned(4)))
{
uint8_t u8Ch;
uint8_t u8RefType;
uint8_t u8CalMode;
uint16_t u16Reference;
uint16_t u16CalData;
uint16_t u16Resolution;
ADC_Circuit_Calc_Func pfProcFunc;
}ADC_Ch_Cfg_st_t;
typedef __attribute__((aligned(4))) enum ASigConvStat
{
ADC_STAT_IDLE = 0,
ADC_STAT_INIT,
ADC_STAT_WAIT,
ADC_STAT_CONV,
ADC_STAT_PROC,
ADC_STAT_ERR,
}ADC_Stat_en_t;
typedef struct __attribute__((aligned(4)))
{
ADC_Stat_en_t enStatus;
uint8_t u8CurrentCh;
uint8_t u8DebounceCnt;
uint8_t u8Timer;
}ADC_Ctrl_st_t;
typedef struct __attribute__((aligned(4)))
{
uint8_t u8Valid;
uint8_t u8Rsvd;
uint16_t u16Value;
}ADC_Data_st_t;
/* Private macro -------------------------------------------------------------*/
#define ADC_DEFAULT_REF_VOLTAGE (5000U)
#define ADC_CONV_CH_NUMBER (ADC_TOTAL_CH_NUMBER)
#define ADC_SAMPLE_INTERVAL (2U)
#define ADC_MAX_SAMPLE_WAIT (10U)
#define ADC_PWR_UP_DEBOUNCE (10U)
#define ADC_CONV_WAIT (50000U)
#define ADC_REF_TYPE_V_NONE (0x00U)
#define ADC_REF_TYPE_V_VREF (0x01U)
#define ADC_REF_TYPE_V_CH (0x02U)
#define ADC_REF_TYPE_V_FIXED (0x03U)
#define ADC_REF_TYPE_I_FIXED (0x13U)
/* Private variables --------------------------------------------------------*/
volatile uint16_t u16ADCRefVoltage;
ADC_Ctrl_st_t stADCCtrl;
uint16_t u16ADCSample[ADC_CONV_CH_NUMBER];
ADC_Data_st_t stADCData[ADC_SIGNAL_CH_NUMBER];
const uint8_t __attribute__((aligned(4))) u8ADCChList[ADC_CONV_CH_NUMBER] =
{
2U, 3U,
};
const __attribute__((aligned(4))) ADC_Ch_Cfg_st_t stADCChCfg[ADC_SIGNAL_CH_NUMBER] =
{
{ 0U, 0U, 0U, 0U, 0U, 1U, ADC_Voltage_Calc_Circuit102,},
{ 1U, 0U, 0U, 0U, 0U, 1U, ADC_Voltage_Calc_Circuit102,},
};
const __attribute__((aligned(4))) ADC_Res_List_st_t stADCResList[ADC_SIGNAL_CH_NUMBER] =
{
{ 3300000U, 1000000U, 0U, 0U,},
{ 3300000U, 1000000U, 0U, 0U,},
};
/* Private function prototypes ----------------------------------------------*/
/* Private functions --------------------------------------------------------*/
void Analog_Signal_Conv_Init(void)
{
uint8_t i;
uint32_t u32Timer_Init = 0;
while(RTE_ADC_Get_Conversion_Status())
{
u32Timer_Init++;
if (u32Timer_Init < ADC_CONV_WAIT)
{
RTE_ADC_Stop_Conversion();
}
else
{
u32Timer_Init = 0;
break;
}
}
for (i = 0U; i < ADC_CONV_CH_NUMBER; i++)
{
RTE_ADC_Init(0, u8ADCChList[i]);
}
for (i = 0U; i < ADC_SIGNAL_CH_NUMBER; i++)
{
stADCData[i].u8Valid = 0U;
stADCData[i].u16Value = 0U;
}
stADCCtrl.enStatus = ADC_STAT_INIT;
stADCCtrl.u8CurrentCh = 0U;
stADCCtrl.u8DebounceCnt = ADC_PWR_UP_DEBOUNCE / ADC_SAMPLE_INTERVAL;
stADCCtrl.u8Timer = 0U;
u16ADCRefVoltage = ADC_DEFAULT_REF_VOLTAGE;
}
void Analog_Signal_Conv_Stop(void)
{
uint8_t i;
RTE_ADC_DeInit();
for (i = 0U; i < ADC_SIGNAL_CH_NUMBER; i++)
{
stADCData[i].u8Valid = 0U;
}
stADCCtrl.enStatus = ADC_STAT_IDLE;
stADCCtrl.u8DebounceCnt = ADC_PWR_UP_DEBOUNCE / ADC_SAMPLE_INTERVAL;
u16ADCRefVoltage = ADC_DEFAULT_REF_VOLTAGE;
}
void Analog_Signal_Conv_Service(void)
{
uint8_t u8Valid;
uint16_t u16Voltage;
uint16_t u16Reference;
uint16_t u16Result;
switch (stADCCtrl.enStatus)
{
case ADC_STAT_IDLE : break;
case ADC_STAT_INIT : RTE_ADC_Start_Conversion();
stADCCtrl.u8Timer = 0U;
stADCCtrl.u8CurrentCh = 0U;
if (stADCCtrl.u8DebounceCnt == 0U)
{
stADCCtrl.enStatus = ADC_STAT_CONV;
}
else
{
stADCCtrl.enStatus = ADC_STAT_WAIT;
}
break;
case ADC_STAT_WAIT : if (stADCCtrl.u8DebounceCnt)
{
stADCCtrl.u8DebounceCnt--;
}
if (RTE_ADC_Get_Conversion_Status() == 0U)
{
RTE_ADC_Start_Conversion();
stADCCtrl.u8Timer = 0U;
if (stADCCtrl.u8DebounceCnt == 0U)
{
stADCCtrl.enStatus = ADC_STAT_CONV;
}
}
else
{
stADCCtrl.u8Timer++;
if (stADCCtrl.u8Timer >= ADC_MAX_SAMPLE_WAIT / ADC_SAMPLE_INTERVAL)
{
stADCCtrl.enStatus = ADC_STAT_ERR;
RTE_ADC_Stop_Conversion();
}
}
break;
case ADC_STAT_CONV : if (RTE_ADC_Get_Conversion_Status() == 0U)
{
RTE_ADC_Get_Conversion_Result(u16ADCSample, ADC_CONV_CH_NUMBER);
stADCCtrl.u8Timer = 0U;
stADCCtrl.u8CurrentCh = 0U;
u16ADCRefVoltage = ADC_DEFAULT_REF_VOLTAGE;
stADCCtrl.enStatus = ADC_STAT_PROC;
}
else
{
stADCCtrl.u8Timer++;
if (stADCCtrl.u8Timer >= ADC_MAX_SAMPLE_WAIT / ADC_SAMPLE_INTERVAL)
{
stADCCtrl.enStatus = ADC_STAT_ERR;
RTE_ADC_Stop_Conversion();
}
}
break;
case ADC_STAT_PROC : u16Voltage = ADC_Input_Voltage_Calc(u16ADCSample[stADCChCfg[stADCCtrl.u8CurrentCh].u8Ch], ADC_RESOLUTION, u16ADCRefVoltage);
u8Valid = 1U;
if (stADCChCfg[stADCCtrl.u8CurrentCh].u8RefType == ADC_REF_TYPE_V_NONE)
{
u16Reference = 0U;
}
else if (stADCChCfg[stADCCtrl.u8CurrentCh].u8RefType == ADC_REF_TYPE_V_VREF)
{
u16Reference = u16ADCRefVoltage;
}
else if (stADCChCfg[stADCCtrl.u8CurrentCh].u8RefType == ADC_REF_TYPE_V_CH)
{
u16Reference = ADC_Read_Signal((uint8_t)stADCChCfg[stADCCtrl.u8CurrentCh].u16Reference);
u8Valid = ADC_Read_Signal_Valid((uint8_t)stADCChCfg[stADCCtrl.u8CurrentCh].u16Reference);
}
else if ((stADCChCfg[stADCCtrl.u8CurrentCh].u8RefType == ADC_REF_TYPE_V_FIXED) || \
(stADCChCfg[stADCCtrl.u8CurrentCh].u8RefType == ADC_REF_TYPE_I_FIXED))
{
u16Reference = stADCChCfg[stADCCtrl.u8CurrentCh].u16Reference;
}
else
{
u8Valid = 0U;
}
if (u8Valid)
{
u16Result = stADCChCfg[stADCCtrl.u8CurrentCh].pfProcFunc(u16Voltage,
u16Reference,
stADCChCfg[stADCCtrl.u8CurrentCh].u16Resolution,
&stADCResList[stADCCtrl.u8CurrentCh]);
u16Result = ADC_Data_Calibrate(u16Result,
stADCChCfg[stADCCtrl.u8CurrentCh].u8CalMode,
stADCChCfg[stADCCtrl.u8CurrentCh].u16CalData);
stADCData[stADCCtrl.u8CurrentCh].u16Value = u16Result;
stADCData[stADCCtrl.u8CurrentCh].u8Valid = 1U;
}
else
{
stADCData[stADCCtrl.u8CurrentCh].u16Value = 0U;
stADCData[stADCCtrl.u8CurrentCh].u8Valid = 0U;
}
stADCCtrl.u8CurrentCh++;
if (stADCCtrl.u8CurrentCh >= ADC_SIGNAL_CH_NUMBER)
{
RTE_ADC_Start_Conversion();
stADCCtrl.u8CurrentCh = 0U;
stADCCtrl.enStatus = ADC_STAT_CONV;
}
break;
case ADC_STAT_ERR : if (RTE_ADC_Get_Conversion_Status() == 0U)
{
stADCCtrl.enStatus = ADC_STAT_INIT;
}
else
{
RTE_ADC_Stop_Conversion();
}
break;
default : Analog_Signal_Conv_Init();
break;
}
}
uint16_t ADC_Read_Signal(uint8_t u8ADCCh)
{
uint16_t u16Value;
if (u8ADCCh < ADC_SIGNAL_CH_NUMBER)
{
u16Value = stADCData[u8ADCCh].u16Value;
}
else
{
u16Value = 0U;
}
return u16Value;
}
uint8_t ADC_Read_Signal_Valid(uint8_t u8ADCCh)
{
uint8_t u8Valid;
if (u8ADCCh < ADC_SIGNAL_CH_NUMBER)
{
u8Valid = stADCData[u8ADCCh].u8Valid;
}
else
{
u8Valid = 0U;
}
return u8Valid;
}
uint16_t ADC_Conv_Single_Channel(uint8_t u8ADCCh)
{
uint8_t u8RefCh;
uint8_t u8Valid;
uint8_t u8ConvResult;
uint16_t u16Voltage;
uint16_t u16Reference;
uint16_t u16Result;
uint32_t u32Timer;
u16Result = 0U;
if (u8ADCCh < ADC_SIGNAL_CH_NUMBER)
{
if (RTE_ADC_Get_Conversion_Status() == 0U)
{
RTE_ADC_Start_Conversion();
}
u32Timer = 0U;
do
{
u32Timer++;
u8ConvResult = RTE_ADC_Get_Conversion_Status();
}while ((u8ConvResult != 0U) && (u32Timer < ADC_CONV_WAIT));
if (u8ConvResult == 0U)
{
RTE_ADC_Get_Conversion_Result(u16ADCSample, ADC_CONV_CH_NUMBER);
u16ADCRefVoltage = ADC_DEFAULT_REF_VOLTAGE;
u16Voltage = ADC_Input_Voltage_Calc(u16ADCSample[stADCChCfg[u8ADCCh].u8Ch], ADC_RESOLUTION, u16ADCRefVoltage);
u8Valid = 1U;
if (stADCChCfg[u8ADCCh].u8RefType == ADC_REF_TYPE_V_NONE)
{
u16Reference = 0U;
}
else if (stADCChCfg[u8ADCCh].u8RefType == ADC_REF_TYPE_V_VREF)
{
u16Reference = u16ADCRefVoltage;
}
else if (stADCChCfg[u8ADCCh].u8RefType == ADC_REF_TYPE_V_CH)
{
u8RefCh = (uint8_t)stADCChCfg[u8ADCCh].u16Reference;
u16Reference = ADC_Input_Voltage_Calc(u16ADCSample[stADCChCfg[u8RefCh].u8Ch], ADC_RESOLUTION, u16ADCRefVoltage);
u16Reference = stADCChCfg[u8RefCh].pfProcFunc(u16Reference,
0U,
stADCChCfg[u8RefCh].u16Resolution,
&stADCResList[u8RefCh]);
u16Reference = ADC_Data_Calibrate(u16Reference,
stADCChCfg[u8RefCh].u8CalMode,
stADCChCfg[u8RefCh].u16CalData);
}
else if ((stADCChCfg[u8ADCCh].u8RefType == ADC_REF_TYPE_V_FIXED) || \
(stADCChCfg[u8ADCCh].u8RefType == ADC_REF_TYPE_I_FIXED))
{
u16Reference = stADCChCfg[u8ADCCh].u16Reference;
}
else
{
u8Valid = 0U;
}
if (u8Valid)
{
u16Result = stADCChCfg[u8ADCCh].pfProcFunc(u16Voltage,
u16Reference,
stADCChCfg[u8ADCCh].u16Resolution,
&stADCResList[u8ADCCh]);
u16Result = ADC_Data_Calibrate(u16Result,
stADCChCfg[u8ADCCh].u8CalMode,
stADCChCfg[u8ADCCh].u16CalData);
}
}
}
return u16Result;
}
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment