forked from achamaikin/CCSModuleSW30Web
Compare commits
7
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
92c33b2f46 | ||
|
|
01c43840a5 | ||
|
|
f8daf17c6f | ||
|
|
68903fe860 | ||
|
|
878d425417 | ||
|
|
fad2a8ba18 | ||
|
|
317e418111 |
@@ -1,187 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
|
|
||||||
<storageModule moduleId="org.eclipse.cdt.core.settings">
|
|
||||||
<cconfiguration id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1370229639">
|
|
||||||
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1370229639" moduleId="org.eclipse.cdt.core.settings" name="Debug">
|
|
||||||
<externalSettings/>
|
|
||||||
<extensions>
|
|
||||||
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
|
|
||||||
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
|
||||||
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
|
||||||
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
|
||||||
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
|
|
||||||
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
|
||||||
</extensions>
|
|
||||||
</storageModule>
|
|
||||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
|
||||||
<configuration artifactExtension="elf" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" cleanCommand="rm -rf" description="" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1370229639" name="Debug" parent="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug">
|
|
||||||
<folderInfo id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1370229639." name="/" resourcePath="">
|
|
||||||
<toolChain id="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.exe.debug.1017099221" name="MCU ARM GCC" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.exe.debug">
|
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_mcu.1244048691" name="MCU" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_mcu" useByScannerDiscovery="true" value="STM32F107VCTx" valueType="string"/>
|
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid.1379215735" name="CPU" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid" useByScannerDiscovery="false" value="0" valueType="string"/>
|
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid.960532971" name="Core" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid" useByScannerDiscovery="false" value="0" valueType="string"/>
|
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board.1990552137" name="Board" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board" useByScannerDiscovery="false" value="genericBoard" valueType="string"/>
|
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults.1586976077" name="Defaults" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults" useByScannerDiscovery="false" value="com.st.stm32cube.ide.common.services.build.inputs.revA.1.0.6 || Debug || true || Executable || com.st.stm32cube.ide.mcu.gnu.managedbuild.option.toolchain.value.workspace || STM32F107VCTx || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../Core/Inc | ../Drivers/STM32F1xx_HAL_Driver/Inc | ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy | ../Drivers/CMSIS/Device/ST/STM32F1xx/Include | ../Drivers/CMSIS/Include || || || USE_HAL_DRIVER | STM32F107xC || || Drivers | Core/Startup | Core || || || ${workspace_loc:/${ProjName}/STM32F107VCTX_FLASH.ld} || true || NonSecure || || secure_nsclib.o || || None || || || " valueType="string"/>
|
|
||||||
<option id="com.st.stm32cube.ide.mcu.debug.option.cpuclock.82282192" name="Cpu clock frequence" superClass="com.st.stm32cube.ide.mcu.debug.option.cpuclock" useByScannerDiscovery="false" value="72" valueType="string"/>
|
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.nanoprintffloat.808472221" name="Use float with printf from newlib-nano (-u _printf_float)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.nanoprintffloat" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.converthex.400501462" name="Convert to Intel Hex file (-O ihex)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.converthex" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.convertsrec.519949918" name="Convert to Motorola S-record file (-O srec)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.convertsrec" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.convertbinary.1730912092" name="Convert to binary file (-O binary)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.convertbinary" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
|
||||||
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform.1026339783" isAbstract="false" osList="all" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform"/>
|
|
||||||
<builder buildPath="${workspace_loc:/GbTModuleSW}/Debug" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder.653659782" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder"/>
|
|
||||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.1272315080" name="MCU GCC Assembler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler">
|
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel.370357426" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel.value.g3" valueType="enumerated"/>
|
|
||||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.definedsymbols.1924718806" name="Define symbols (-D)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.definedsymbols" valueType="definedSymbols">
|
|
||||||
<listOptionValue builtIn="false" value="DEBUG"/>
|
|
||||||
</option>
|
|
||||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.includepaths.340226531" name="Include paths (-I)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.includepaths" useByScannerDiscovery="false" valueType="includePath">
|
|
||||||
<listOptionValue builtIn="false" value="/Users/colorbass/STM32CubeIDE/workspace_1.12.0/lib_EDCAN"/>
|
|
||||||
</option>
|
|
||||||
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input.602034741" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input"/>
|
|
||||||
</tool>
|
|
||||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.129443933" name="MCU GCC Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler">
|
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel.150601486" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel.value.g3" valueType="enumerated"/>
|
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.2041244846" name="Optimization level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.value.o0" valueType="enumerated"/>
|
|
||||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.definedsymbols.504560065" name="Define symbols (-D)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.definedsymbols" useByScannerDiscovery="false" valueType="definedSymbols">
|
|
||||||
<listOptionValue builtIn="false" value="DEBUG"/>
|
|
||||||
<listOptionValue builtIn="false" value="USE_HAL_DRIVER"/>
|
|
||||||
<listOptionValue builtIn="false" value="STM32F107xC"/>
|
|
||||||
</option>
|
|
||||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.includepaths.452593111" name="Include paths (-I)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.includepaths" useByScannerDiscovery="false" valueType="includePath">
|
|
||||||
<listOptionValue builtIn="false" value="../Core/Inc"/>
|
|
||||||
<listOptionValue builtIn="false" value="../Drivers/STM32F1xx_HAL_Driver/Inc"/>
|
|
||||||
<listOptionValue builtIn="false" value="../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy"/>
|
|
||||||
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Device/ST/STM32F1xx/Include"/>
|
|
||||||
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Include"/>
|
|
||||||
</option>
|
|
||||||
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.1408123272" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c"/>
|
|
||||||
</tool>
|
|
||||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.2070441151" name="MCU G++ Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler">
|
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel.1543951018" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel.value.g3" valueType="enumerated"/>
|
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.optimization.level.2049580629" name="Optimization level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.optimization.level" useByScannerDiscovery="false"/>
|
|
||||||
</tool>
|
|
||||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.2102490823" name="MCU GCC Linker" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker">
|
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.option.script.272103658" name="Linker Script (-T)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.option.script" value="${workspace_loc:/${ProjName}/STM32F107VCTX_FLASH.ld}" valueType="string"/>
|
|
||||||
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.input.266162782" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.input">
|
|
||||||
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
|
|
||||||
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
|
|
||||||
</inputType>
|
|
||||||
</tool>
|
|
||||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker.502005820" name="MCU G++ Linker" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker"/>
|
|
||||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.archiver.1392625179" name="MCU GCC Archiver" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.archiver"/>
|
|
||||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.size.771001125" name="MCU Size" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.size"/>
|
|
||||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objdump.listfile.1682381984" name="MCU Output Converter list file" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objdump.listfile"/>
|
|
||||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.hex.467663480" name="MCU Output Converter Hex" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.hex"/>
|
|
||||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.binary.1608796910" name="MCU Output Converter Binary" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.binary"/>
|
|
||||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.verilog.1767624081" name="MCU Output Converter Verilog" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.verilog"/>
|
|
||||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.srec.139156618" name="MCU Output Converter Motorola S-rec" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.srec"/>
|
|
||||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.symbolsrec.1422585447" name="MCU Output Converter Motorola S-rec with symbols" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.symbolsrec"/>
|
|
||||||
</toolChain>
|
|
||||||
</folderInfo>
|
|
||||||
<sourceEntries>
|
|
||||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Core"/>
|
|
||||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Drivers"/>
|
|
||||||
</sourceEntries>
|
|
||||||
</configuration>
|
|
||||||
</storageModule>
|
|
||||||
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
|
||||||
</cconfiguration>
|
|
||||||
<cconfiguration id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.1286135127">
|
|
||||||
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.1286135127" moduleId="org.eclipse.cdt.core.settings" name="Release">
|
|
||||||
<externalSettings/>
|
|
||||||
<extensions>
|
|
||||||
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
|
|
||||||
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
|
||||||
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
|
||||||
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
|
||||||
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
|
|
||||||
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
|
||||||
</extensions>
|
|
||||||
</storageModule>
|
|
||||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
|
||||||
<configuration artifactExtension="elf" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release" cleanCommand="rm -rf" description="" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.1286135127" name="Release" parent="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release">
|
|
||||||
<folderInfo id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.1286135127." name="/" resourcePath="">
|
|
||||||
<toolChain id="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.exe.release.368317543" name="MCU ARM GCC" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.exe.release">
|
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_mcu.1083778044" name="MCU" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_mcu" useByScannerDiscovery="true" value="STM32F107VCTx" valueType="string"/>
|
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid.1672048738" name="CPU" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid" useByScannerDiscovery="false" value="0" valueType="string"/>
|
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid.716214807" name="Core" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid" useByScannerDiscovery="false" value="0" valueType="string"/>
|
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board.1611406059" name="Board" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board" useByScannerDiscovery="false" value="genericBoard" valueType="string"/>
|
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults.2026840843" name="Defaults" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults" useByScannerDiscovery="false" value="com.st.stm32cube.ide.common.services.build.inputs.revA.1.0.6 || Release || false || Executable || com.st.stm32cube.ide.mcu.gnu.managedbuild.option.toolchain.value.workspace || STM32F107VCTx || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../Core/Inc | ../Drivers/STM32F1xx_HAL_Driver/Inc | ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy | ../Drivers/CMSIS/Device/ST/STM32F1xx/Include | ../Drivers/CMSIS/Include || || || USE_HAL_DRIVER | STM32F107xC || || Drivers | Core/Startup | Core || || || ${workspace_loc:/${ProjName}/STM32F107VCTX_FLASH.ld} || true || NonSecure || || secure_nsclib.o || || None || || || " valueType="string"/>
|
|
||||||
<option id="com.st.stm32cube.ide.mcu.debug.option.cpuclock.1744697906" name="Cpu clock frequence" superClass="com.st.stm32cube.ide.mcu.debug.option.cpuclock" useByScannerDiscovery="false" value="72" valueType="string"/>
|
|
||||||
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform.1433680358" isAbstract="false" osList="all" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform"/>
|
|
||||||
<builder buildPath="${workspace_loc:/GbTModuleSW}/Release" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder.1316679712" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder"/>
|
|
||||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.1810954687" name="MCU GCC Assembler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler">
|
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel.1184417617" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel.value.g0" valueType="enumerated"/>
|
|
||||||
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input.679037772" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input"/>
|
|
||||||
</tool>
|
|
||||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.2023937975" name="MCU GCC Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler">
|
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel.2061465690" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel.value.g0" valueType="enumerated"/>
|
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.463973701" name="Optimization level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.value.os" valueType="enumerated"/>
|
|
||||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.definedsymbols.1124370999" name="Define symbols (-D)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.definedsymbols" useByScannerDiscovery="false" valueType="definedSymbols">
|
|
||||||
<listOptionValue builtIn="false" value="USE_HAL_DRIVER"/>
|
|
||||||
<listOptionValue builtIn="false" value="STM32F107xC"/>
|
|
||||||
</option>
|
|
||||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.includepaths.2130633236" name="Include paths (-I)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.includepaths" useByScannerDiscovery="false" valueType="includePath">
|
|
||||||
<listOptionValue builtIn="false" value="../Core/Inc"/>
|
|
||||||
<listOptionValue builtIn="false" value="../Drivers/STM32F1xx_HAL_Driver/Inc"/>
|
|
||||||
<listOptionValue builtIn="false" value="../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy"/>
|
|
||||||
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Device/ST/STM32F1xx/Include"/>
|
|
||||||
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Include"/>
|
|
||||||
</option>
|
|
||||||
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.139233432" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c"/>
|
|
||||||
</tool>
|
|
||||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.77997183" name="MCU G++ Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler">
|
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel.954735929" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel.value.g0" valueType="enumerated"/>
|
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.optimization.level.1509118949" name="Optimization level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.optimization.level" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.optimization.level.value.os" valueType="enumerated"/>
|
|
||||||
</tool>
|
|
||||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.455795129" name="MCU GCC Linker" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker">
|
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.option.script.135018481" name="Linker Script (-T)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.option.script" value="${workspace_loc:/${ProjName}/STM32F107VCTX_FLASH.ld}" valueType="string"/>
|
|
||||||
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.input.850565080" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.input">
|
|
||||||
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
|
|
||||||
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
|
|
||||||
</inputType>
|
|
||||||
</tool>
|
|
||||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker.1304115760" name="MCU G++ Linker" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker"/>
|
|
||||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.archiver.2125898682" name="MCU GCC Archiver" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.archiver"/>
|
|
||||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.size.862607409" name="MCU Size" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.size"/>
|
|
||||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objdump.listfile.268643843" name="MCU Output Converter list file" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objdump.listfile"/>
|
|
||||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.hex.2012318786" name="MCU Output Converter Hex" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.hex"/>
|
|
||||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.binary.25627582" name="MCU Output Converter Binary" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.binary"/>
|
|
||||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.verilog.1856490045" name="MCU Output Converter Verilog" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.verilog"/>
|
|
||||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.srec.573281510" name="MCU Output Converter Motorola S-rec" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.srec"/>
|
|
||||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.symbolsrec.336799426" name="MCU Output Converter Motorola S-rec with symbols" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.symbolsrec"/>
|
|
||||||
</toolChain>
|
|
||||||
</folderInfo>
|
|
||||||
<sourceEntries>
|
|
||||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Core"/>
|
|
||||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Drivers"/>
|
|
||||||
</sourceEntries>
|
|
||||||
</configuration>
|
|
||||||
</storageModule>
|
|
||||||
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
|
||||||
</cconfiguration>
|
|
||||||
</storageModule>
|
|
||||||
<storageModule moduleId="org.eclipse.cdt.core.pathentry"/>
|
|
||||||
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
|
||||||
<project id="GbTModuleSW.null.359723610" name="GbTModuleSW"/>
|
|
||||||
</storageModule>
|
|
||||||
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
|
|
||||||
<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
|
|
||||||
<storageModule moduleId="scannerConfiguration">
|
|
||||||
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
|
||||||
<scannerConfigBuildInfo instanceId="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.1286135127;com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.1286135127.;com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.2023937975;com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.139233432">
|
|
||||||
<autodiscovery enabled="false" problemReportingEnabled="true" selectedProfileId=""/>
|
|
||||||
</scannerConfigBuildInfo>
|
|
||||||
<scannerConfigBuildInfo instanceId="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1370229639;com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1370229639.;com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.129443933;com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.1408123272">
|
|
||||||
<autodiscovery enabled="false" problemReportingEnabled="true" selectedProfileId=""/>
|
|
||||||
</scannerConfigBuildInfo>
|
|
||||||
</storageModule>
|
|
||||||
<storageModule moduleId="refreshScope" versionNumber="2">
|
|
||||||
<configuration configurationName="Debug">
|
|
||||||
<resource resourceType="PROJECT" workspacePath="/GbTModuleSW"/>
|
|
||||||
</configuration>
|
|
||||||
<configuration configurationName="Release">
|
|
||||||
<resource resourceType="PROJECT" workspacePath="/GbTModuleSW"/>
|
|
||||||
</configuration>
|
|
||||||
</storageModule>
|
|
||||||
</cproject>
|
|
||||||
+117
-51
@@ -1,63 +1,129 @@
|
|||||||
# macOS
|
# ---> C
|
||||||
.DS_Store
|
# Prerequisites
|
||||||
**/.DS_Store
|
|
||||||
|
|
||||||
# Temporary/editor files
|
|
||||||
*.swp
|
|
||||||
*.swo
|
|
||||||
*~
|
|
||||||
*.tmp
|
|
||||||
*.bak
|
|
||||||
|
|
||||||
# STM32CubeIDE build intermediates
|
|
||||||
Debug/**/*.o
|
|
||||||
Debug/**/*.d
|
|
||||||
Debug/**/*.su
|
|
||||||
Debug/**/*.cyclo
|
|
||||||
Debug/**/*.mk
|
|
||||||
Debug/**/*.lst
|
|
||||||
Debug/**/*.log
|
|
||||||
Debug/**/*.tmp
|
|
||||||
Debug/**/*.a
|
|
||||||
Debug/**/*.obj
|
|
||||||
|
|
||||||
Release/**/*.o
|
|
||||||
Release/**/*.d
|
|
||||||
Release/**/*.su
|
|
||||||
Release/**/*.cyclo
|
|
||||||
Release/**/*.mk
|
|
||||||
Release/**/*.lst
|
|
||||||
Release/**/*.log
|
|
||||||
Release/**/*.tmp
|
|
||||||
Release/**/*.a
|
|
||||||
Release/**/*.obj
|
|
||||||
|
|
||||||
# Generic C/C++ intermediates
|
|
||||||
*.o
|
|
||||||
*.obj
|
|
||||||
*.d
|
*.d
|
||||||
*.su
|
|
||||||
|
# Object files
|
||||||
|
*.o
|
||||||
|
*.ko
|
||||||
|
*.obj
|
||||||
|
*.elf
|
||||||
|
|
||||||
|
# Linker output
|
||||||
|
*.ilk
|
||||||
|
*.map
|
||||||
|
*.exp
|
||||||
|
|
||||||
|
# Precompiled Headers
|
||||||
*.gch
|
*.gch
|
||||||
*.pch
|
*.pch
|
||||||
*.ilk
|
|
||||||
*.exp
|
# Libraries
|
||||||
|
*.lib
|
||||||
|
*.a
|
||||||
|
*.la
|
||||||
|
*.lo
|
||||||
|
|
||||||
|
# Shared objects (inc. Windows DLLs)
|
||||||
|
*.dll
|
||||||
|
*.so
|
||||||
|
*.so.*
|
||||||
|
*.dylib
|
||||||
|
|
||||||
|
# Executables
|
||||||
|
*.exe
|
||||||
|
*.out
|
||||||
|
*.app
|
||||||
|
*.i*86
|
||||||
|
*.x86_64
|
||||||
|
*.hex
|
||||||
|
|
||||||
|
# Debug files
|
||||||
|
*.dSYM/
|
||||||
|
*.su
|
||||||
*.idb
|
*.idb
|
||||||
*.pdb
|
*.pdb
|
||||||
*.dSYM/
|
|
||||||
|
|
||||||
# Preserve firmware artifacts in git
|
# Kernel Module Compile Results
|
||||||
!*.hex
|
*.mod*
|
||||||
!*.bin
|
*.cmd
|
||||||
!*.srec
|
.tmp_versions/
|
||||||
!*.elf
|
modules.order
|
||||||
|
Module.symvers
|
||||||
|
Mkfile.old
|
||||||
|
dkms.conf
|
||||||
|
|
||||||
# Eclipse local workspace metadata
|
# ---> CMake
|
||||||
.metadata/
|
CMakeLists.txt.user
|
||||||
|
CMakeCache.txt
|
||||||
|
CMakeFiles
|
||||||
|
CMakeScripts
|
||||||
|
Testing
|
||||||
|
Makefile
|
||||||
|
cmake_install.cmake
|
||||||
|
install_manifest.txt
|
||||||
|
compile_commands.json
|
||||||
|
CTestTestfile.cmake
|
||||||
|
_deps
|
||||||
|
|
||||||
|
# ---> Eclipse
|
||||||
|
.metadata
|
||||||
|
bin/
|
||||||
|
tmp/
|
||||||
|
*.tmp
|
||||||
|
*.bak
|
||||||
|
*.swp
|
||||||
|
*~.nib
|
||||||
|
local.properties
|
||||||
|
.settings/
|
||||||
|
.loadpath
|
||||||
|
.recommenders
|
||||||
|
|
||||||
|
# External tool builders
|
||||||
.externalToolBuilders/
|
.externalToolBuilders/
|
||||||
|
|
||||||
# Optional local launch configs
|
# Locally stored "Eclipse launch configurations"
|
||||||
*.launch
|
*.launch
|
||||||
|
|
||||||
# VS Code local settings
|
# PyDev specific (Python IDE for Eclipse)
|
||||||
.vscode/
|
*.pydevproject
|
||||||
|
|
||||||
|
# CDT-specific (C/C++ Development Tooling)
|
||||||
|
.cproject
|
||||||
|
|
||||||
|
# CDT- autotools
|
||||||
|
.autotools
|
||||||
|
|
||||||
|
# Java annotation processor (APT)
|
||||||
|
.factorypath
|
||||||
|
|
||||||
|
# PDT-specific (PHP Development Tools)
|
||||||
|
.buildpath
|
||||||
|
|
||||||
|
# sbteclipse plugin
|
||||||
|
.target
|
||||||
|
|
||||||
|
# Tern plugin
|
||||||
|
.tern-project
|
||||||
|
|
||||||
|
# TeXlipse plugin
|
||||||
|
.texlipse
|
||||||
|
|
||||||
|
# STS (Spring Tool Suite)
|
||||||
|
.springBeans
|
||||||
|
|
||||||
|
# Code Recommenders
|
||||||
|
.recommenders/
|
||||||
|
|
||||||
|
# Annotation Processing
|
||||||
|
.apt_generated/
|
||||||
|
.apt_generated_test/
|
||||||
|
|
||||||
|
# Scala IDE specific (Scala & Java development for Eclipse)
|
||||||
|
.cache-main
|
||||||
|
.scala_dependencies
|
||||||
|
.worksheet
|
||||||
|
|
||||||
|
# Uncomment this line if you wish to ignore the project description file.
|
||||||
|
# Typically, this file would be tracked if it contains build/dependency configurations:
|
||||||
|
#.project
|
||||||
|
|
||||||
|
|||||||
@@ -1,2 +0,0 @@
|
|||||||
eclipse.preferences.version=1
|
|
||||||
sfrviewstate={"fFavorites"\:{"fLists"\:{}},"fProperties"\:{"fNodeProperties"\:{}}}
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<project>
|
|
||||||
<configuration id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1370229639" name="Debug">
|
|
||||||
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
|
|
||||||
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
|
|
||||||
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
|
|
||||||
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
|
|
||||||
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="529144383163155105" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true">
|
|
||||||
<language-scope id="org.eclipse.cdt.core.gcc"/>
|
|
||||||
<language-scope id="org.eclipse.cdt.core.g++"/>
|
|
||||||
</provider>
|
|
||||||
</extension>
|
|
||||||
</configuration>
|
|
||||||
<configuration id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.1286135127" name="Release">
|
|
||||||
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
|
|
||||||
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
|
|
||||||
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
|
|
||||||
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
|
|
||||||
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="529144383163155105" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true">
|
|
||||||
<language-scope id="org.eclipse.cdt.core.gcc"/>
|
|
||||||
<language-scope id="org.eclipse.cdt.core.g++"/>
|
|
||||||
</provider>
|
|
||||||
</extension>
|
|
||||||
</configuration>
|
|
||||||
</project>
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
doxygen/doxygen_new_line_after_brief=true
|
|
||||||
doxygen/doxygen_use_brief_tag=false
|
|
||||||
doxygen/doxygen_use_javadoc_tags=true
|
|
||||||
doxygen/doxygen_use_pre_tag=false
|
|
||||||
doxygen/doxygen_use_structural_commands=false
|
|
||||||
eclipse.preferences.version=1
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
2F62501ED4689FB349E356AB974DBE57=0A9B2D4C5DCB32842F05F53136A1D1D7
|
|
||||||
66BE74F758C12D739921AEA421D593D3=1
|
|
||||||
8DF89ED150041C4CBC7CB9A9CAA90856=0A9B2D4C5DCB32842F05F53136A1D1D7
|
|
||||||
DC22A860405A8BF2F2C095E5B6529F12=283F84148D7B38E239E7ECD52C68B71F
|
|
||||||
eclipse.preferences.version=1
|
|
||||||
+45
-97
@@ -6,7 +6,7 @@ ADC1.Channel-3\#ChannelRegularConversion=ADC_CHANNEL_9
|
|||||||
ADC1.Channel-4\#ChannelRegularConversion=ADC_CHANNEL_TEMPSENSOR
|
ADC1.Channel-4\#ChannelRegularConversion=ADC_CHANNEL_TEMPSENSOR
|
||||||
ADC1.Channel-5\#ChannelRegularConversion=ADC_CHANNEL_VREFINT
|
ADC1.Channel-5\#ChannelRegularConversion=ADC_CHANNEL_VREFINT
|
||||||
ADC1.ExternalTrigConv=ADC_EXTERNALTRIGCONV_T3_TRGO
|
ADC1.ExternalTrigConv=ADC_EXTERNALTRIGCONV_T3_TRGO
|
||||||
ADC1.IPParameters=Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,NbrOfConversionFlag,Rank-1\#ChannelRegularConversion,Channel-1\#ChannelRegularConversion,SamplingTime-1\#ChannelRegularConversion,Rank-2\#ChannelRegularConversion,Channel-2\#ChannelRegularConversion,SamplingTime-2\#ChannelRegularConversion,Rank-3\#ChannelRegularConversion,Channel-3\#ChannelRegularConversion,SamplingTime-3\#ChannelRegularConversion,Rank-4\#ChannelRegularConversion,Channel-4\#ChannelRegularConversion,SamplingTime-4\#ChannelRegularConversion,Rank-5\#ChannelRegularConversion,Channel-5\#ChannelRegularConversion,SamplingTime-5\#ChannelRegularConversion,NbrOfConversion,ExternalTrigConv,master
|
ADC1.IPParameters=Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,NbrOfConversionFlag,master,Rank-1\#ChannelRegularConversion,Channel-1\#ChannelRegularConversion,SamplingTime-1\#ChannelRegularConversion,Rank-2\#ChannelRegularConversion,Channel-2\#ChannelRegularConversion,SamplingTime-2\#ChannelRegularConversion,Rank-3\#ChannelRegularConversion,Channel-3\#ChannelRegularConversion,SamplingTime-3\#ChannelRegularConversion,Rank-4\#ChannelRegularConversion,Channel-4\#ChannelRegularConversion,SamplingTime-4\#ChannelRegularConversion,Rank-5\#ChannelRegularConversion,Channel-5\#ChannelRegularConversion,SamplingTime-5\#ChannelRegularConversion,NbrOfConversion,ExternalTrigConv
|
||||||
ADC1.NbrOfConversion=6
|
ADC1.NbrOfConversion=6
|
||||||
ADC1.NbrOfConversionFlag=1
|
ADC1.NbrOfConversionFlag=1
|
||||||
ADC1.Rank-0\#ChannelRegularConversion=1
|
ADC1.Rank-0\#ChannelRegularConversion=1
|
||||||
@@ -54,50 +54,10 @@ Dma.ADC1.0.MemInc=DMA_MINC_ENABLE
|
|||||||
Dma.ADC1.0.Mode=DMA_CIRCULAR
|
Dma.ADC1.0.Mode=DMA_CIRCULAR
|
||||||
Dma.ADC1.0.PeriphDataAlignment=DMA_PDATAALIGN_HALFWORD
|
Dma.ADC1.0.PeriphDataAlignment=DMA_PDATAALIGN_HALFWORD
|
||||||
Dma.ADC1.0.PeriphInc=DMA_PINC_DISABLE
|
Dma.ADC1.0.PeriphInc=DMA_PINC_DISABLE
|
||||||
Dma.ADC1.0.Priority=DMA_PRIORITY_MEDIUM
|
Dma.ADC1.0.Priority=DMA_PRIORITY_HIGH
|
||||||
Dma.ADC1.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority
|
Dma.ADC1.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority
|
||||||
Dma.Request0=ADC1
|
Dma.Request0=ADC1
|
||||||
Dma.Request1=USART2_RX
|
Dma.RequestsNb=1
|
||||||
Dma.Request2=USART2_TX
|
|
||||||
Dma.Request3=USART3_RX
|
|
||||||
Dma.Request4=USART3_TX
|
|
||||||
Dma.RequestsNb=5
|
|
||||||
Dma.USART2_RX.1.Direction=DMA_PERIPH_TO_MEMORY
|
|
||||||
Dma.USART2_RX.1.Instance=DMA1_Channel6
|
|
||||||
Dma.USART2_RX.1.MemDataAlignment=DMA_MDATAALIGN_BYTE
|
|
||||||
Dma.USART2_RX.1.MemInc=DMA_MINC_ENABLE
|
|
||||||
Dma.USART2_RX.1.Mode=DMA_NORMAL
|
|
||||||
Dma.USART2_RX.1.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
|
|
||||||
Dma.USART2_RX.1.PeriphInc=DMA_PINC_DISABLE
|
|
||||||
Dma.USART2_RX.1.Priority=DMA_PRIORITY_VERY_HIGH
|
|
||||||
Dma.USART2_RX.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority
|
|
||||||
Dma.USART2_TX.2.Direction=DMA_MEMORY_TO_PERIPH
|
|
||||||
Dma.USART2_TX.2.Instance=DMA1_Channel7
|
|
||||||
Dma.USART2_TX.2.MemDataAlignment=DMA_MDATAALIGN_BYTE
|
|
||||||
Dma.USART2_TX.2.MemInc=DMA_MINC_ENABLE
|
|
||||||
Dma.USART2_TX.2.Mode=DMA_NORMAL
|
|
||||||
Dma.USART2_TX.2.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
|
|
||||||
Dma.USART2_TX.2.PeriphInc=DMA_PINC_DISABLE
|
|
||||||
Dma.USART2_TX.2.Priority=DMA_PRIORITY_HIGH
|
|
||||||
Dma.USART2_TX.2.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority
|
|
||||||
Dma.USART3_RX.3.Direction=DMA_PERIPH_TO_MEMORY
|
|
||||||
Dma.USART3_RX.3.Instance=DMA1_Channel3
|
|
||||||
Dma.USART3_RX.3.MemDataAlignment=DMA_MDATAALIGN_BYTE
|
|
||||||
Dma.USART3_RX.3.MemInc=DMA_MINC_ENABLE
|
|
||||||
Dma.USART3_RX.3.Mode=DMA_NORMAL
|
|
||||||
Dma.USART3_RX.3.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
|
|
||||||
Dma.USART3_RX.3.PeriphInc=DMA_PINC_DISABLE
|
|
||||||
Dma.USART3_RX.3.Priority=DMA_PRIORITY_VERY_HIGH
|
|
||||||
Dma.USART3_RX.3.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority
|
|
||||||
Dma.USART3_TX.4.Direction=DMA_MEMORY_TO_PERIPH
|
|
||||||
Dma.USART3_TX.4.Instance=DMA1_Channel2
|
|
||||||
Dma.USART3_TX.4.MemDataAlignment=DMA_MDATAALIGN_BYTE
|
|
||||||
Dma.USART3_TX.4.MemInc=DMA_MINC_ENABLE
|
|
||||||
Dma.USART3_TX.4.Mode=DMA_NORMAL
|
|
||||||
Dma.USART3_TX.4.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
|
|
||||||
Dma.USART3_TX.4.PeriphInc=DMA_PINC_DISABLE
|
|
||||||
Dma.USART3_TX.4.Priority=DMA_PRIORITY_HIGH
|
|
||||||
Dma.USART3_TX.4.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority
|
|
||||||
File.Version=6
|
File.Version=6
|
||||||
GPIO.groupedBy=Group By Peripherals
|
GPIO.groupedBy=Group By Peripherals
|
||||||
KeepUserPlacement=false
|
KeepUserPlacement=false
|
||||||
@@ -143,62 +103,57 @@ Mcu.Pin25=PB11
|
|||||||
Mcu.Pin26=PD13
|
Mcu.Pin26=PD13
|
||||||
Mcu.Pin27=PD14
|
Mcu.Pin27=PD14
|
||||||
Mcu.Pin28=PD15
|
Mcu.Pin28=PD15
|
||||||
Mcu.Pin29=PC9
|
Mcu.Pin29=PA9
|
||||||
Mcu.Pin3=OSC_OUT
|
Mcu.Pin3=OSC_OUT
|
||||||
Mcu.Pin30=PA9
|
Mcu.Pin30=PA10
|
||||||
Mcu.Pin31=PA10
|
Mcu.Pin31=PA13
|
||||||
Mcu.Pin32=PA13
|
Mcu.Pin32=PA14
|
||||||
Mcu.Pin33=PA14
|
Mcu.Pin33=PA15
|
||||||
Mcu.Pin34=PA15
|
Mcu.Pin34=PC10
|
||||||
Mcu.Pin35=PC10
|
Mcu.Pin35=PC11
|
||||||
Mcu.Pin36=PC11
|
Mcu.Pin36=PC12
|
||||||
Mcu.Pin37=PC12
|
Mcu.Pin37=PD0
|
||||||
Mcu.Pin38=PD0
|
Mcu.Pin38=PD1
|
||||||
Mcu.Pin39=PD1
|
Mcu.Pin39=PD2
|
||||||
Mcu.Pin4=PC2
|
Mcu.Pin4=PC2
|
||||||
Mcu.Pin40=PD2
|
Mcu.Pin40=PD3
|
||||||
Mcu.Pin41=PD3
|
Mcu.Pin41=PD4
|
||||||
Mcu.Pin42=PD4
|
Mcu.Pin42=PD5
|
||||||
Mcu.Pin43=PD5
|
Mcu.Pin43=PD6
|
||||||
Mcu.Pin44=PD6
|
Mcu.Pin44=PD7
|
||||||
Mcu.Pin45=PD7
|
Mcu.Pin45=PB3
|
||||||
Mcu.Pin46=PB3
|
Mcu.Pin46=PB4
|
||||||
Mcu.Pin47=PB4
|
Mcu.Pin47=PB5
|
||||||
Mcu.Pin48=PB5
|
Mcu.Pin48=PB6
|
||||||
Mcu.Pin49=PB6
|
Mcu.Pin49=PB7
|
||||||
Mcu.Pin5=PC3
|
Mcu.Pin5=PC3
|
||||||
Mcu.Pin50=PB7
|
Mcu.Pin50=PB8
|
||||||
Mcu.Pin51=PB8
|
Mcu.Pin51=PB9
|
||||||
Mcu.Pin52=PB9
|
Mcu.Pin52=PE1
|
||||||
Mcu.Pin53=PE1
|
Mcu.Pin53=VP_ADC1_TempSens_Input
|
||||||
Mcu.Pin54=VP_ADC1_TempSens_Input
|
Mcu.Pin54=VP_ADC1_Vref_Input
|
||||||
Mcu.Pin55=VP_ADC1_Vref_Input
|
Mcu.Pin55=VP_CRC_VS_CRC
|
||||||
Mcu.Pin56=VP_CRC_VS_CRC
|
Mcu.Pin56=VP_RTC_VS_RTC_Activate
|
||||||
Mcu.Pin57=VP_RTC_VS_RTC_Activate
|
Mcu.Pin57=VP_SYS_VS_Systick
|
||||||
Mcu.Pin58=VP_SYS_VS_Systick
|
Mcu.Pin58=VP_TIM3_VS_ClockSourceINT
|
||||||
Mcu.Pin59=VP_TIM3_VS_ClockSourceINT
|
Mcu.Pin59=VP_TIM3_VS_no_output1
|
||||||
Mcu.Pin6=PA1
|
Mcu.Pin6=PA1
|
||||||
Mcu.Pin60=VP_TIM3_VS_no_output1
|
Mcu.Pin60=VP_TIM4_VS_ClockSourceINT
|
||||||
Mcu.Pin61=VP_TIM4_VS_ClockSourceINT
|
|
||||||
Mcu.Pin7=PA2
|
Mcu.Pin7=PA2
|
||||||
Mcu.Pin8=PA3
|
Mcu.Pin8=PA3
|
||||||
Mcu.Pin9=PA4
|
Mcu.Pin9=PA4
|
||||||
Mcu.PinsNb=62
|
Mcu.PinsNb=61
|
||||||
Mcu.ThirdPartyNb=0
|
Mcu.ThirdPartyNb=0
|
||||||
Mcu.UserConstants=
|
Mcu.UserConstants=
|
||||||
Mcu.UserName=STM32F107VCTx
|
Mcu.UserName=STM32F107VCTx
|
||||||
MxCube.Version=6.15.0
|
MxCube.Version=6.15.0
|
||||||
MxDb.Version=DB.6.0.150
|
MxDb.Version=DB.6.0.150
|
||||||
NVIC.ADC1_2_IRQn=true\:7\:0\:true\:false\:true\:true\:true\:true
|
NVIC.ADC1_2_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
|
||||||
NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||||
NVIC.CAN1_RX0_IRQn=true\:3\:0\:true\:false\:true\:true\:true\:true
|
NVIC.CAN1_RX0_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
|
||||||
NVIC.CAN2_RX1_IRQn=true\:3\:0\:true\:false\:true\:true\:true\:true
|
NVIC.CAN2_RX1_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
|
||||||
NVIC.CAN2_TX_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
|
NVIC.CAN2_TX_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
|
||||||
NVIC.DMA1_Channel1_IRQn=true\:1\:0\:true\:false\:true\:false\:true\:true
|
NVIC.DMA1_Channel1_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true
|
||||||
NVIC.DMA1_Channel2_IRQn=true\:4\:0\:true\:false\:true\:false\:true\:true
|
|
||||||
NVIC.DMA1_Channel3_IRQn=true\:1\:0\:true\:false\:true\:false\:true\:true
|
|
||||||
NVIC.DMA1_Channel6_IRQn=true\:1\:0\:true\:false\:true\:false\:true\:true
|
|
||||||
NVIC.DMA1_Channel7_IRQn=true\:4\:0\:true\:false\:true\:false\:true\:true
|
|
||||||
NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||||
NVIC.ForceEnableDMAVector=true
|
NVIC.ForceEnableDMAVector=true
|
||||||
NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||||
@@ -208,11 +163,11 @@ NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
|||||||
NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
|
NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
|
||||||
NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||||
NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false
|
NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false
|
||||||
NVIC.TIM3_IRQn=true\:6\:0\:true\:false\:true\:true\:true\:true
|
NVIC.TIM3_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
|
||||||
NVIC.UART5_IRQn=true\:5\:0\:true\:false\:true\:true\:true\:true
|
NVIC.UART5_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
|
||||||
NVIC.USART1_IRQn=true\:5\:0\:true\:false\:true\:true\:true\:true
|
NVIC.USART1_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
|
||||||
NVIC.USART2_IRQn=true\:2\:0\:true\:false\:true\:true\:true\:true
|
NVIC.USART2_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
|
||||||
NVIC.USART3_IRQn=true\:2\:0\:true\:false\:true\:true\:true\:true
|
NVIC.USART3_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
|
||||||
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||||
OSC_IN.Mode=HSE-External-Oscillator
|
OSC_IN.Mode=HSE-External-Oscillator
|
||||||
OSC_IN.Signal=RCC_OSC_IN
|
OSC_IN.Signal=RCC_OSC_IN
|
||||||
@@ -307,8 +262,6 @@ PC10.Signal=USART3_TX
|
|||||||
PC11.Locked=true
|
PC11.Locked=true
|
||||||
PC11.Mode=Asynchronous
|
PC11.Mode=Asynchronous
|
||||||
PC11.Signal=USART3_RX
|
PC11.Signal=USART3_RX
|
||||||
PC12.GPIOParameters=GPIO_Label
|
|
||||||
PC12.GPIO_Label=HEATER
|
|
||||||
PC12.Mode=Asynchronous
|
PC12.Mode=Asynchronous
|
||||||
PC12.Signal=UART5_TX
|
PC12.Signal=UART5_TX
|
||||||
PC14-OSC32_IN.Mode=LSE-External-Oscillator
|
PC14-OSC32_IN.Mode=LSE-External-Oscillator
|
||||||
@@ -332,11 +285,6 @@ PC5.GPIOParameters=GPIO_Label
|
|||||||
PC5.GPIO_Label=LOCK_B
|
PC5.GPIO_Label=LOCK_B
|
||||||
PC5.Locked=true
|
PC5.Locked=true
|
||||||
PC5.Signal=GPIO_Output
|
PC5.Signal=GPIO_Output
|
||||||
PC9.GPIOParameters=GPIO_Speed,GPIO_Label
|
|
||||||
PC9.GPIO_Label=LED_DATA
|
|
||||||
PC9.GPIO_Speed=GPIO_SPEED_FREQ_HIGH
|
|
||||||
PC9.Locked=true
|
|
||||||
PC9.Signal=GPIO_Output
|
|
||||||
PD0.Locked=true
|
PD0.Locked=true
|
||||||
PD0.Mode=CAN_Activate
|
PD0.Mode=CAN_Activate
|
||||||
PD0.Signal=CAN1_RX
|
PD0.Signal=CAN1_RX
|
||||||
|
|||||||
@@ -0,0 +1,133 @@
|
|||||||
|
# Журнал изменений (сессия чата): `fork/CCSModuleSW30Web`
|
||||||
|
|
||||||
|
Документ фиксирует доработки проекта **CCSModuleSW30Web** в ветке/каталоге форка
|
||||||
|
`/Users/colorbass/STM32CubeIDE/workspace_1.12.0/fork/CCSModuleSW30Web`, обсуждавшиеся и вносившиеся в рамках описанной сессии (UART, ADC/DMA, CP, отладка IRQ, оптимизация `-Ofast` для кода из прерываний).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. UART и протокол
|
||||||
|
|
||||||
|
### 1.1. UART3 (Everest / `serial.c`)
|
||||||
|
|
||||||
|
- Таймаут «нет связи с хостом»:** `EVEREST_TIMEOUT_MS` = **5000** мс.
|
||||||
|
- Жёсткий реинициал при отсутствии RX:** `UART3_REINIT_TIMEOUT_MS` = **1500** мс (с защитой от слишком частых реинициалов через `uart3_last_reinit_tick`).
|
||||||
|
- Расширено логирование путей сброса/ошибок приёма и ошибок HAL для диагностики «таймаут без остановки UART3».
|
||||||
|
- Колбэки и вспомогательные функции, вызываемые из контекста прерывания, помечены **`ISR_FAST`** (см. раздел 6):
|
||||||
|
`CCS_RxEventCallback`, `HAL_UART_ErrorCallback`, `uart3_log_hal_error`, `uart3_arm_rx_or_log`, цепочка разбора пакета (`process_received_packet`, `crc16_ibm`, `expected_payload_len`, `apply_command`).
|
||||||
|
|
||||||
|
### 1.2. UART2 / `serial_control.c`
|
||||||
|
|
||||||
|
- Отдельная логика **`SC_UART2_Watchdog()`**, вызывается из **`SC_Task()`** (не из IRQ).
|
||||||
|
- Константы:
|
||||||
|
- **`SC_UART2_REINIT_TIMEOUT_MS`** = **500** мс — порог для жёсткого реинициала при отсутствии пакетов;
|
||||||
|
- **`SC_UART2_PACKET_TIMEOUT_MS`** = **5000** мс — таймаут коммуникации.
|
||||||
|
- Сценарий **новый пакет при `BUSY_TX`**: при необходимости **`Abort_IT`**, сброс направления RS-485, затем повторная инициализация UART и приём `ReceiveToIdle_IT` (защита от обрыва TX из-за агрессивного watchdog).
|
||||||
|
- Отдельная ветка **жёсткого реинициала при `BUSY_TX`** с логом `USART2 BUSY_TX: hard reinit` (отслеживание `sc_uart2_last_busy_tx_reinit_packet_tick`).
|
||||||
|
- HAL-колбэки **`HAL_UARTEx_RxEventCallback`**, **`HAL_UART_TxCpltCallback`** помечены **`ISR_FAST`**.
|
||||||
|
|
||||||
|
### 1.3. `SC_SendPacket` и стек CRC/кодирования
|
||||||
|
|
||||||
|
- Для единообразной оптимизации пути «IRQ → ответ» на функции **`calculate_crc32`**, **`encode_packet`**, **`parse_packet`**, **`process_received_packet`** и публичную **`SC_SendPacket`** добавлен **`ISR_FAST`**.
|
||||||
|
- В **`Core/Inc/serial_control.h`**: подключение **`isr_opt.h`**, прототип **`ISR_FAST void SC_SendPacket(...)`** (согласованность с определением в `.c`).
|
||||||
|
|
||||||
|
**Замечание:** `SC_SendPacket` вызывается и из основного потока; для GCC вся функция компилируется с `-Ofast`. При необходимости строгого разделения можно вынести отдельную версию «только из IRQ».
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Отладочные линии DBG в `stm32f1xx_it.c`
|
||||||
|
|
||||||
|
На время входа/выхода из выбранных обработчиков прерываний поднимается/опускается соответствующий GPIO — удобно для осциллографа (длительность IRQ).
|
||||||
|
|
||||||
|
| Линия | Обработчик |
|
||||||
|
|--------|------------|
|
||||||
|
| **DBG1** | `UART5_IRQHandler` |
|
||||||
|
| **DBG2** | `USART2_IRQHandler` |
|
||||||
|
| **DBG3** | `USART3_IRQHandler` |
|
||||||
|
| **DBG4** | `DMA1_Channel1_IRQHandler`, `ADC1_2_IRQHandler`, `TIM3_IRQHandler` |
|
||||||
|
| **DBG5** | `CAN1_RX0_IRQHandler`, `CAN2_TX_IRQHandler`, `CAN2_RX1_IRQHandler` |
|
||||||
|
| — | `USART1_IRQHandler` — без обёртки DBG (по согласованию) |
|
||||||
|
|
||||||
|
В **`DMA1_Channel1_IRQHandler`** вызывается **`HAL_DMA_IRQHandler(&hdma_adc1)`** для цепочки ADC+DMA.
|
||||||
|
|
||||||
|
Для всего файла **`stm32f1xx_it.c`** под GCC добавлено:
|
||||||
|
|
||||||
|
```c
|
||||||
|
#pragma GCC optimize("Ofast")
|
||||||
|
```
|
||||||
|
|
||||||
|
(в блоке `USER CODE BEGIN Includes`).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. ADC: DMA, глобальные данные, колбэк
|
||||||
|
|
||||||
|
- Файлы **`adc.c` / `adc.h`**: структура **`ADC_ScanData_t`**, глобально **`volatile ADC_ScanData_t adc_data`** с полями сырых каналов (`in3_raw`, `cp_raw`, `ntc1_raw`, `ntc2_raw`, `temp_sensor_raw`, `vrefint_raw` и т.д. по фактическому объявлению в заголовке).
|
||||||
|
- **`HAL_ADC_ConvCpltCallback`**: копирование из буфера DMA в **`adc_data`**, помечен **`ISR_FAST`**.
|
||||||
|
- Публичная **`ADC_ScanStart()`** — запуск сканирования (после калибровки вызывается из инициализации платы).
|
||||||
|
- **`board.c`**: после **`HAL_ADCEx_Calibration_Start`** вызывается **`ADC_ScanStart()`**; **`CONN_ReadTemp`** читает **`adc_data.ntc1_raw` / `ntc2_raw`** вместо блокирующего опроса ADC.
|
||||||
|
|
||||||
|
**Диагностика (из обсуждения):** если не вызываются **`HAL_ADC_ConvCpltCallback`** / **`HAL_DMA_IRQHandler`**, проверять: срабатывание триггера ADC (например, **TIM3 TRGO**), работу TIM3, порядок инициализации DMA/NVIC, срабатывание **`DMA1_Channel1_IRQHandler`**.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. CP (`cp.c` / `cp.h`)
|
||||||
|
|
||||||
|
- Измерение опоры на **`adc_data.cp_raw`** (и при необходимости **`vrefint_raw`** по текущей реализации в коде).
|
||||||
|
- Логика классификации/порогов приведена к варианту, согласованному с основным **CCSModuleSW30Web** (не форк).
|
||||||
|
- Сэмпл по таймеру: уход от тяжёлой работы в IRQ OC — использование **`HAL_TIM_OC_Start`** без прерывания по сравнению, обновление напряжения в **`CP_GetVoltage()`** / основном цикле (**`CP_Loop`** опирается на **`CP_GetState()`** и т.п. по фактическому коду).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Отладочный UART (`debug.c`)
|
||||||
|
|
||||||
|
При **`#ifndef USE_WEB_INTERFACE`** (или эквивалентной ветке сборки в файле): колбэк **`HAL_UARTEx_RxEventCallback`** и **`debug_rx_interrupt`** помечены **`ISR_FAST`**.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Оптимизация `-Ofast` для кода из прерываний
|
||||||
|
|
||||||
|
### 6.1. Макрос `ISR_FAST`
|
||||||
|
|
||||||
|
Файл **`Core/Inc/isr_opt.h`**:
|
||||||
|
|
||||||
|
- **GCC:** `#define ISR_FAST __attribute__((optimize("Ofast")))`
|
||||||
|
- **Иное:** пустой макрос.
|
||||||
|
|
||||||
|
### 6.2. Где используется (по состоянию репозитория)
|
||||||
|
|
||||||
|
| Файл | Элементы с `ISR_FAST` / pragma |
|
||||||
|
|------|--------------------------------|
|
||||||
|
| `stm32f1xx_it.c` | `#pragma GCC optimize("Ofast")` на весь файл (GCC) |
|
||||||
|
| `adc.c` | `HAL_ADC_ConvCpltCallback` |
|
||||||
|
| `serial.c` | `CCS_RxEventCallback`, `HAL_UART_ErrorCallback`, `uart3_log_hal_error`, `uart3_arm_rx_or_log`, `process_received_packet`, `crc16_ibm`, `expected_payload_len`, `apply_command` |
|
||||||
|
| `serial_control.c` | `HAL_UARTEx_RxEventCallback`, `HAL_UART_TxCpltCallback`, `calculate_crc32`, `encode_packet`, `parse_packet`, `process_received_packet`, `SC_SendPacket` |
|
||||||
|
| `serial_control.h` | прототип `SC_SendPacket` + `#include "isr_opt.h"` |
|
||||||
|
| `psu_control.c` | `HAL_CAN_RxFifo1MsgPendingCallback` |
|
||||||
|
| `debug.c` | см. раздел 5 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Ограничения и переносимость
|
||||||
|
|
||||||
|
- **`ISR_FAST`** и pragma в **`stm32f1xx_it.c`** рассчитаны на **GCC** (STM32CubeIDE по умолчанию). Для **IAR / ARM Compiler 6** потребуется отдельная стратегия (прагмы/ключи проекта).
|
||||||
|
- **`-Ofast`** допускает агрессивные преобразования с плавающей точкой и перестановки, влияющие на строго воспроизводимую арифметику; для критичных вычислений вне IRQ при необходимости ограничивайте область оптимизации.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. Затронутые пути (краткий список)
|
||||||
|
|
||||||
|
- `Core/Inc/isr_opt.h` — новый/центральный заголовок оптимизации IRQ.
|
||||||
|
- `Core/Inc/serial_control.h` — `isr_opt.h`, `ISR_FAST` у `SC_SendPacket`.
|
||||||
|
- `Core/Src/stm32f1xx_it.c` — DBG, DMA ADC, pragma `Ofast`.
|
||||||
|
- `Core/Src/adc.c`, `Core/Inc/adc.h` — DMA, `adc_data`, `ADC_ScanStart`, колбэк.
|
||||||
|
- `Core/Src/board.c` — калибровка, старт скана, температура из `adc_data`.
|
||||||
|
- `Core/Src/cp.c`, `Core/Inc/cp.h` — CP и ADC.
|
||||||
|
- `Core/Src/serial.c` — UART3, таймауты, логи, `ISR_FAST`.
|
||||||
|
- `Core/Src/serial_control.c` — UART2, watchdog, `ISR_FAST`.
|
||||||
|
- `Core/Src/psu_control.c` — CAN RX callback.
|
||||||
|
- `Core/Src/debug.c` — отладочный UART под условием сборки.
|
||||||
|
- `Core/Src/dma.c`, `gpio.c`, `main.h` — по необходимости для DMA1 Ch1 и DBG-пинов.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Документ сгенерирован для фиксации контекста сессии; при дальнейших правках кода имеет смысл обновлять соответствующие разделы вручную.*
|
||||||
+17
-1
@@ -1,5 +1,21 @@
|
|||||||
/* USER CODE BEGIN Header */
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file adc.h
|
||||||
|
* @brief This file contains all the function prototypes for
|
||||||
|
* the adc.c file
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2024 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
/* USER CODE END Header */
|
/* USER CODE END Header */
|
||||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||||
#ifndef __ADC_H__
|
#ifndef __ADC_H__
|
||||||
|
|||||||
+14
-5
@@ -1,6 +1,14 @@
|
|||||||
#pragma once
|
/*
|
||||||
|
* board.h
|
||||||
|
*
|
||||||
|
* Created on: Apr 15, 2024
|
||||||
|
* Author: colorbass
|
||||||
|
*/
|
||||||
|
|
||||||
#include <stdint.h>
|
#ifndef SRC_BOARD_H_
|
||||||
|
#define SRC_BOARD_H_
|
||||||
|
|
||||||
|
void GBT_Lock(uint8_t state);
|
||||||
|
|
||||||
typedef enum{
|
typedef enum{
|
||||||
RELAY_AUX0 = 0,
|
RELAY_AUX0 = 0,
|
||||||
@@ -16,7 +24,6 @@ typedef enum{
|
|||||||
} relay_t;
|
} relay_t;
|
||||||
|
|
||||||
void RELAY_Write(relay_t num, uint8_t state);
|
void RELAY_Write(relay_t num, uint8_t state);
|
||||||
uint8_t RELAY_Read(relay_t num);
|
|
||||||
void Init_Peripheral();
|
void Init_Peripheral();
|
||||||
uint8_t GBT_LockGetState();
|
uint8_t GBT_LockGetState();
|
||||||
void GBT_Lock(uint8_t state);
|
void GBT_Lock(uint8_t state);
|
||||||
@@ -48,8 +55,10 @@ typedef struct __attribute__((packed)) {
|
|||||||
uint8_t stationType; // Байт 4: тип станции
|
uint8_t stationType; // Байт 4: тип станции
|
||||||
uint8_t boardVersion; // Байт 5: версия платы
|
uint8_t boardVersion; // Байт 5: версия платы
|
||||||
uint8_t addrEdcan; // Байт 6: адрес EDCAN
|
uint8_t addrEdcan; // Байт 6: адрес EDCAN
|
||||||
uint8_t maxPower; // Байт 7: максимальная мощность станции (5кВт/bit)
|
uint8_t reserved[57]; // Байты 7-63: зарезервированы
|
||||||
uint8_t reserved[56]; // Байты 8-63: зарезервированы
|
|
||||||
} InfoBlock_t;
|
} InfoBlock_t;
|
||||||
|
|
||||||
extern InfoBlock_t *InfoBlock;
|
extern InfoBlock_t *InfoBlock;
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* SRC_BOARD_H_ */
|
||||||
|
|||||||
Regular → Executable
+17
-1
@@ -1,5 +1,21 @@
|
|||||||
/* USER CODE BEGIN Header */
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file can.h
|
||||||
|
* @brief This file contains all the function prototypes for
|
||||||
|
* the can.c file
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2024 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
/* USER CODE END Header */
|
/* USER CODE END Header */
|
||||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||||
#ifndef __CAN_H__
|
#ifndef __CAN_H__
|
||||||
|
|||||||
@@ -5,28 +5,9 @@
|
|||||||
#define PSU_MIN_VOLTAGE 150 //1V/bit
|
#define PSU_MIN_VOLTAGE 150 //1V/bit
|
||||||
#define PSU_MAX_CURRENT 133 //1A/bit
|
#define PSU_MAX_CURRENT 133 //1A/bit
|
||||||
#define PSU_MIN_CURRENT 1 //1A/bit
|
#define PSU_MIN_CURRENT 1 //1A/bit
|
||||||
#define PSU_MAX_POWER 40000 //1W/bit
|
#define PSU_MAX_POWER 30000 //1W/bit
|
||||||
|
|
||||||
#define PSU_NUM 1
|
#define PSU_NUM 1
|
||||||
|
|
||||||
/* Dynamic LV clamp (CS60 hv_limit): active only on overload at low bus voltage. */
|
#define GBT_CH_VER_MAJOR 1
|
||||||
#define PSU_LV_CLAMP_V 499u
|
#define GBT_CH_VER_MINOR 0
|
||||||
#define PSU_HV_LIMIT_ON_THRESHOLD 480u
|
|
||||||
#define PSU_HV_LIMIT_OFF_THRESHOLD 495u
|
|
||||||
#define PSU_HV_SWITCH_DELAY_MS 1000u
|
|
||||||
#define PSU_HV_LOAD_CURRENT 300u /* 30.0 A, MeasuredCurrent is 0.1 A/bit */
|
|
||||||
#define PSU_HV_LIMIT_MAX_COUNT 3u
|
|
||||||
|
|
||||||
/* Fast discharge: PSU off/on cycle on step-down setpoint (unloaded bus). */
|
|
||||||
#define PSD_ENABLE 1u
|
|
||||||
#define PSD_MAX_CMD_CURRENT_0P1A 20u /* 2.0 A */
|
|
||||||
#define PSD_MAX_MEASURED_CURRENT_0P1A 30u /* 3.0 A */
|
|
||||||
#define PSD_MEASURED_LATCH_MS 500u
|
|
||||||
#define PSD_MIN_VOLTAGE_STEP_V 50u
|
|
||||||
#define PSD_DISCHARGE_MARGIN_V 15u
|
|
||||||
#define PSD_DEBOUNCE_MS 2000u
|
|
||||||
#define PSD_MAX_PER_SESSION 4u
|
|
||||||
#define PSD_OFF_TIMEOUT_MS 10000u /* как PSU_WAIT_ACK_OFF */
|
|
||||||
#define PSD_ON_TIMEOUT_MS 10000u
|
|
||||||
#define PSD_ON_RETRY_MS 500u /* повтор SET+ON в ON_WAIT */
|
|
||||||
#define PSD_PRECHARGE_TOLERANCE_V 40u /* ~±10% for 350 V precharge window */
|
|
||||||
@@ -1,4 +1,12 @@
|
|||||||
#pragma once
|
/*
|
||||||
|
* charger_control.h
|
||||||
|
*
|
||||||
|
* Created on: Jul 29, 2024
|
||||||
|
* Author: colorbass
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef INC_CHARGER_CONTROL_H_
|
||||||
|
#define INC_CHARGER_CONTROL_H_
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
@@ -47,7 +55,6 @@ typedef enum __attribute__((packed)){
|
|||||||
CONN_ERR_HOTPLUG = 8, // Коннектор неожиданно отключился
|
CONN_ERR_HOTPLUG = 8, // Коннектор неожиданно отключился
|
||||||
CONN_ERR_EV_COMM = 9, // Ошибка протокола связи с электромобилем
|
CONN_ERR_EV_COMM = 9, // Ошибка протокола связи с электромобилем
|
||||||
CONN_ERR_PSU_FAULT = 10, // Ошибка PSU
|
CONN_ERR_PSU_FAULT = 10, // Ошибка PSU
|
||||||
CONN_ERR_FIRE_ALARM = 11, // Пожарная тревога (до перезагрузки)
|
|
||||||
|
|
||||||
}CONN_Error_t;
|
}CONN_Error_t;
|
||||||
|
|
||||||
@@ -68,10 +75,6 @@ typedef struct{
|
|||||||
uint16_t WantedCurrent; //0.1A/bit
|
uint16_t WantedCurrent; //0.1A/bit
|
||||||
CONN_Error_t chargingError; // 0 if okay
|
CONN_Error_t chargingError; // 0 if okay
|
||||||
uint8_t EvConnected;
|
uint8_t EvConnected;
|
||||||
uint32_t ChargingTime; // seconds of active charging in current session
|
|
||||||
uint8_t hv_limit; // Limits PSU voltage to LV range when set
|
|
||||||
uint32_t hv_tick; // Timer for delayed HV limit switching
|
|
||||||
uint8_t hv_limit_count; // Anti-chatter counter for LV limit switching
|
|
||||||
|
|
||||||
} ChargingConnector_t;
|
} ChargingConnector_t;
|
||||||
|
|
||||||
@@ -80,7 +83,16 @@ typedef struct{
|
|||||||
|
|
||||||
extern ChargingConnector_t CONN;
|
extern ChargingConnector_t CONN;
|
||||||
|
|
||||||
|
//информация о зарядке
|
||||||
|
|
||||||
|
//база данных с хранением инфы
|
||||||
|
//главный блок хранит в себе инфу о конфиге возможно во флеше
|
||||||
|
//либо в charger_config.h
|
||||||
|
//OCPP - универсальный блок типа
|
||||||
|
|
||||||
void CONN_Init();
|
void CONN_Init();
|
||||||
void CONN_Loop();
|
void CONN_Loop();
|
||||||
void CONN_GetElapsedForMonitoring(uint16_t *min, uint8_t *sec);
|
|
||||||
|
void CONN_PrintChargingTotal();
|
||||||
|
|
||||||
|
#endif /* INC_CHARGER_CONTROL_H_ */
|
||||||
|
|||||||
+12
-1
@@ -1,4 +1,12 @@
|
|||||||
#pragma once
|
/*
|
||||||
|
* connector.h
|
||||||
|
*
|
||||||
|
* Created on: Jul 31, 2024
|
||||||
|
* Author: colorbass
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef INC_CONNECTOR_H_
|
||||||
|
#define INC_CONNECTOR_H_
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "charger_control.h"
|
#include "charger_control.h"
|
||||||
@@ -7,4 +15,7 @@
|
|||||||
extern CONN_State_t connectorState;
|
extern CONN_State_t connectorState;
|
||||||
|
|
||||||
void CONN_Init();
|
void CONN_Init();
|
||||||
|
void CONN_Task();
|
||||||
void CONN_SetState(CONN_State_t state);
|
void CONN_SetState(CONN_State_t state);
|
||||||
|
|
||||||
|
#endif /* INC_CONNECTOR_H_ */
|
||||||
|
|||||||
+4
-5
@@ -1,4 +1,5 @@
|
|||||||
#pragma once
|
#ifndef __CP_H
|
||||||
|
#define __CP_H
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
@@ -15,14 +16,12 @@ typedef enum {
|
|||||||
EV_STATE_ACQUIRING = 6,
|
EV_STATE_ACQUIRING = 6,
|
||||||
} CP_State_t;
|
} CP_State_t;
|
||||||
|
|
||||||
extern CP_State_t cp_state_buffer;
|
|
||||||
|
|
||||||
void CP_Init(void);
|
void CP_Init(void);
|
||||||
void CP_SetDuty(uint8_t percentage);
|
void CP_SetDuty(uint8_t percentage);
|
||||||
uint8_t CP_GetDuty(void);
|
uint8_t CP_GetDuty(void);
|
||||||
int32_t CP_GetVoltage(void);
|
int32_t CP_GetVoltage(void);
|
||||||
CP_State_t CP_GetState(void);
|
CP_State_t CP_GetState(void);
|
||||||
CP_State_t CP_GetFilteredState(void);
|
|
||||||
void CP_FilterState(void);
|
|
||||||
void CP_Loop(void);
|
void CP_Loop(void);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|||||||
+17
-1
@@ -1,5 +1,21 @@
|
|||||||
/* USER CODE BEGIN Header */
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file crc.h
|
||||||
|
* @brief This file contains all the function prototypes for
|
||||||
|
* the crc.c file
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2025 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
/* USER CODE END Header */
|
/* USER CODE END Header */
|
||||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||||
#ifndef __CRC_H__
|
#ifndef __CRC_H__
|
||||||
|
|||||||
+11
-1
@@ -1,4 +1,12 @@
|
|||||||
#pragma once
|
/*
|
||||||
|
* debug.h
|
||||||
|
*
|
||||||
|
* Created on: Apr 16, 2024
|
||||||
|
* Author: colorbass
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SRC_DEBUG_H_
|
||||||
|
#define SRC_DEBUG_H_
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
@@ -22,3 +30,5 @@ void debug_buffer_send(void);
|
|||||||
|
|
||||||
// Кастомный printf с приоритетом лога
|
// Кастомный printf с приоритетом лога
|
||||||
int log_printf(LogLevel_t level, const char *format, ...);
|
int log_printf(LogLevel_t level, const char *format, ...);
|
||||||
|
|
||||||
|
#endif /* SRC_DEBUG_H_ */
|
||||||
|
|||||||
+17
-1
@@ -1,5 +1,21 @@
|
|||||||
/* USER CODE BEGIN Header */
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file dma.h
|
||||||
|
* @brief This file contains all the function prototypes for
|
||||||
|
* the dma.c file
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2026 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
/* USER CODE END Header */
|
/* USER CODE END Header */
|
||||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||||
#ifndef __DMA_H__
|
#ifndef __DMA_H__
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
#ifndef INC_FIRE_ALARM_H_
|
|
||||||
#define INC_FIRE_ALARM_H_
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
uint8_t FireAlarm_IsLatched(void);
|
|
||||||
void FireAlarm_Activate(void);
|
|
||||||
|
|
||||||
#endif /* INC_FIRE_ALARM_H_ */
|
|
||||||
Regular → Executable
+17
-1
@@ -1,5 +1,21 @@
|
|||||||
/* USER CODE BEGIN Header */
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file gpio.h
|
||||||
|
* @brief This file contains all the function prototypes for
|
||||||
|
* the gpio.c file
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2024 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
/* USER CODE END Header */
|
/* USER CODE END Header */
|
||||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||||
#ifndef __GPIO_H__
|
#ifndef __GPIO_H__
|
||||||
|
|||||||
+4
-1
@@ -1,4 +1,5 @@
|
|||||||
#pragma once
|
#ifndef ISR_OPT_H
|
||||||
|
#define ISR_OPT_H
|
||||||
|
|
||||||
/* GCC: быстрые функции, вызываемые из IRQ / из HAL из IRQ-контекста */
|
/* GCC: быстрые функции, вызываемые из IRQ / из HAL из IRQ-контекста */
|
||||||
#if defined(__GNUC__)
|
#if defined(__GNUC__)
|
||||||
@@ -6,3 +7,5 @@
|
|||||||
#else
|
#else
|
||||||
#define ISR_FAST
|
#define ISR_FAST
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif /* ISR_OPT_H */
|
||||||
|
|||||||
+18
-8
@@ -1,5 +1,21 @@
|
|||||||
/* USER CODE BEGIN Header */
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file : main.h
|
||||||
|
* @brief : Header for main.c file.
|
||||||
|
* This file contains the common defines of the application.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2024 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
/* USER CODE END Header */
|
/* USER CODE END Header */
|
||||||
|
|
||||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||||
@@ -27,7 +43,7 @@ extern "C" {
|
|||||||
/* USER CODE BEGIN EC */
|
/* USER CODE BEGIN EC */
|
||||||
#define FW_VERSION_MAJOR 1
|
#define FW_VERSION_MAJOR 1
|
||||||
#define FW_VERSION_MINOR 0
|
#define FW_VERSION_MINOR 0
|
||||||
#define FW_VERSION_PATCH 27
|
#define FW_VERSION_PATCH 15
|
||||||
/* USER CODE END EC */
|
/* USER CODE END EC */
|
||||||
|
|
||||||
/* Exported macro ------------------------------------------------------------*/
|
/* Exported macro ------------------------------------------------------------*/
|
||||||
@@ -39,8 +55,6 @@ extern "C" {
|
|||||||
void Error_Handler(void);
|
void Error_Handler(void);
|
||||||
|
|
||||||
/* USER CODE BEGIN EFP */
|
/* USER CODE BEGIN EFP */
|
||||||
uint8_t ED_TraceWarning(uint8_t flag, uint8_t id);
|
|
||||||
void ED_Delay(uint32_t Delay);
|
|
||||||
|
|
||||||
/* USER CODE END EFP */
|
/* USER CODE END EFP */
|
||||||
|
|
||||||
@@ -87,12 +101,8 @@ void ED_Delay(uint32_t Delay);
|
|||||||
#define DBG5_GPIO_Port GPIOB
|
#define DBG5_GPIO_Port GPIOB
|
||||||
#define DBG4_Pin GPIO_PIN_11
|
#define DBG4_Pin GPIO_PIN_11
|
||||||
#define DBG4_GPIO_Port GPIOB
|
#define DBG4_GPIO_Port GPIOB
|
||||||
#define LED_DATA_Pin GPIO_PIN_9
|
|
||||||
#define LED_DATA_GPIO_Port GPIOC
|
|
||||||
#define RELAY_CC_Pin GPIO_PIN_15
|
#define RELAY_CC_Pin GPIO_PIN_15
|
||||||
#define RELAY_CC_GPIO_Port GPIOA
|
#define RELAY_CC_GPIO_Port GPIOA
|
||||||
#define HEATER_Pin GPIO_PIN_12
|
|
||||||
#define HEATER_GPIO_Port GPIOC
|
|
||||||
#define RELAY_DC_Pin GPIO_PIN_3
|
#define RELAY_DC_Pin GPIO_PIN_3
|
||||||
#define RELAY_DC_GPIO_Port GPIOD
|
#define RELAY_DC_GPIO_Port GPIOD
|
||||||
#define USART2_DIR_Pin GPIO_PIN_4
|
#define USART2_DIR_Pin GPIO_PIN_4
|
||||||
|
|||||||
+13
-1
@@ -1,15 +1,25 @@
|
|||||||
#pragma once
|
/*
|
||||||
|
* psu_struct.h
|
||||||
|
*
|
||||||
|
* Created on: Jul 24, 2024
|
||||||
|
* Author: colorbass
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef INC_METER_H_
|
||||||
|
#define INC_METER_H_
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "charger_config.h"
|
#include "charger_config.h"
|
||||||
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
uint32_t meterLastTick; // Время последнего пакета Alive
|
||||||
uint8_t online;
|
uint8_t online;
|
||||||
uint32_t lastTick; // Время последнего вызова для каждого коннектора
|
uint32_t lastTick; // Время последнего вызова для каждого коннектора
|
||||||
uint64_t EnergyPSU_Ws; // Энергия для каждого коннектора (расчет по силовым модулям)
|
uint64_t EnergyPSU_Ws; // Энергия для каждого коннектора (расчет по силовым модулям)
|
||||||
uint32_t AbsoluteEnergy; // Абсолютная энергия каждого счетчика (ватт*час)
|
uint32_t AbsoluteEnergy; // Абсолютная энергия каждого счетчика (ватт*час)
|
||||||
uint32_t EnergyOffset; // смещение энергии по счетчикам (если 0, значит не успели захватить Offset) (ватт*час)
|
uint32_t EnergyOffset; // смещение энергии по счетчикам (если 0, значит не успели захватить Offset) (ватт*час)
|
||||||
|
uint32_t EnergyOffset1; // смещение энергии по счетчикам относительно PSU
|
||||||
|
|
||||||
uint8_t enable; //если 0, то счетчик обнуляется
|
uint8_t enable; //если 0, то счетчик обнуляется
|
||||||
}METER_t;
|
}METER_t;
|
||||||
@@ -17,3 +27,5 @@ typedef struct {
|
|||||||
extern METER_t METER;
|
extern METER_t METER;
|
||||||
|
|
||||||
void METER_CalculateEnergy();
|
void METER_CalculateEnergy();
|
||||||
|
|
||||||
|
#endif /* INC_METER_H_ */
|
||||||
|
|||||||
@@ -1,21 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
#include "power_setpoint_policy.h"
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
PSD_TRY_IDLE = 0,
|
|
||||||
PSD_TRY_APPLIED_NORMAL,
|
|
||||||
PSD_TRY_START_FAST_DISCHARGE,
|
|
||||||
} PowerSetpointTryResult_t;
|
|
||||||
|
|
||||||
void PowerSetpoint_Init(void);
|
|
||||||
void PowerSetpoint_OnCommand(uint16_t voltage_V, uint16_t current_0p1A);
|
|
||||||
void PowerSetpoint_UpdateDeliveryLatch(void);
|
|
||||||
uint8_t PowerSetpoint_HasPending(void);
|
|
||||||
uint8_t PowerSetpoint_IsBusy(void);
|
|
||||||
PowerSetpointTryResult_t PowerSetpoint_TryApply(void);
|
|
||||||
void PowerSetpoint_GetFastDischargeTarget(PowerSetpoint_t *target);
|
|
||||||
void PowerSetpoint_OnFastDischargeComplete(void);
|
|
||||||
void PowerSetpoint_OnFastDischargeAbort(void);
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
#include "charger_config.h"
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
uint16_t voltage_V;
|
|
||||||
uint16_t current_0p1A;
|
|
||||||
} PowerSetpoint_t;
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
POWER_SETPOINT_NORMAL,
|
|
||||||
POWER_SETPOINT_FAST_DISCHARGE,
|
|
||||||
} PowerSetpointAction_t;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
uint8_t dc_contactor_closed;
|
|
||||||
uint8_t psu_hv_enabled;
|
|
||||||
uint16_t measured_voltage_V;
|
|
||||||
uint16_t measured_current_0p1A;
|
|
||||||
uint8_t power_delivery_active;
|
|
||||||
uint8_t enable_output;
|
|
||||||
uint8_t psu_state_connected;
|
|
||||||
uint8_t psu_cont_fault;
|
|
||||||
uint8_t psu_fault;
|
|
||||||
uint8_t fast_discharge_count;
|
|
||||||
uint32_t last_fast_discharge_ms;
|
|
||||||
uint32_t now_ms;
|
|
||||||
} PowerPathContext_t;
|
|
||||||
|
|
||||||
PowerSetpointAction_t PowerSetpoint_Decide(
|
|
||||||
const PowerSetpoint_t *applied,
|
|
||||||
const PowerSetpoint_t *next,
|
|
||||||
const PowerPathContext_t *ctx);
|
|
||||||
+16
-8
@@ -1,12 +1,20 @@
|
|||||||
#pragma once
|
/*
|
||||||
|
* ccs_control.h
|
||||||
|
*
|
||||||
|
* Created on: 19 авг. 2024 г.
|
||||||
|
* Author: colorbass
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef INC_PSU_CONTROL_H_
|
||||||
|
#define INC_PSU_CONTROL_H_
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "charger_config.h"
|
#include "charger_config.h"
|
||||||
|
|
||||||
void PSU_Init();
|
void PSU_Init();
|
||||||
void PSU_Enable(uint8_t addr, uint8_t enable);
|
void PSU_Enable(uint8_t addr, uint8_t enable);
|
||||||
void PSU_SetVoltageCurrent(uint8_t addr, uint16_t voltage, uint16_t current);
|
void PSU_Loop();
|
||||||
void PSU_ReadWrite(void);
|
void CONT_Loop();
|
||||||
|
|
||||||
// --- Состояние силового модуля (DC30, один PSU) ---
|
// --- Состояние силового модуля (DC30, один PSU) ---
|
||||||
|
|
||||||
@@ -17,11 +25,6 @@ typedef enum{
|
|||||||
PSU_WAIT_ACK_ON, // ждём подтверждение включения модуля (напряжение выше порога)
|
PSU_WAIT_ACK_ON, // ждём подтверждение включения модуля (напряжение выше порога)
|
||||||
PSU_CONT_WAIT_ACK_ON, // включаем DC-контактор и ждём подтверждение
|
PSU_CONT_WAIT_ACK_ON, // включаем DC-контактор и ждём подтверждение
|
||||||
PSU_CONNECTED, // модуль включён, DC-контактор замкнут
|
PSU_CONNECTED, // модуль включён, DC-контактор замкнут
|
||||||
PSU_FAST_DISCHARGE_OFF,
|
|
||||||
PSU_FAST_DISCHARGE_WAIT, /* ждём подтверждение выключения (как PSU_WAIT_ACK_OFF) */
|
|
||||||
PSU_FAST_DISCHARGE_SET, /* задать целевое U/I при выключенном модуле */
|
|
||||||
PSU_FAST_DISCHARGE_ON, /* команда включения после set */
|
|
||||||
PSU_FAST_DISCHARGE_ON_WAIT, /* ждём подтверждение включения (как PSU_WAIT_ACK_ON) */
|
|
||||||
PSU_CURRENT_DROP, // снижение тока перед отключением
|
PSU_CURRENT_DROP, // снижение тока перед отключением
|
||||||
PSU_WAIT_ACK_OFF, // ждём подтверждение выключения модуля (напряжение ниже порога)
|
PSU_WAIT_ACK_OFF, // ждём подтверждение выключения модуля (напряжение ниже порога)
|
||||||
PSU_CONT_WAIT_ACK_OFF, // выключаем DC-контактор и ждём подтверждение
|
PSU_CONT_WAIT_ACK_OFF, // выключаем DC-контактор и ждём подтверждение
|
||||||
@@ -84,6 +87,7 @@ typedef struct {
|
|||||||
|
|
||||||
// Дополнительные параметры для одного модуля DC30
|
// Дополнительные параметры для одного модуля DC30
|
||||||
uint32_t power_limit; // лимит мощности [кВт]
|
uint32_t power_limit; // лимит мощности [кВт]
|
||||||
|
uint8_t hv_mode; // HV-режим (ограничение напряжения)
|
||||||
|
|
||||||
uint32_t tempAmbient; // температура окружающего воздуха (из PSU_04)
|
uint32_t tempAmbient; // температура окружающего воздуха (из PSU_04)
|
||||||
union { uint8_t raw; PSU_Status0_t bits; } status0; // modularForm0
|
union { uint8_t raw; PSU_Status0_t bits; } status0; // modularForm0
|
||||||
@@ -186,3 +190,7 @@ extern PSU_1B_t PSU_1B;
|
|||||||
extern PSU_1C_t PSU_1C;
|
extern PSU_1C_t PSU_1C;
|
||||||
|
|
||||||
#pragma pack(pop)
|
#pragma pack(pop)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* INC_PSU_CONTROL_H_ */
|
||||||
|
|||||||
@@ -1,4 +1,12 @@
|
|||||||
#pragma once
|
/*
|
||||||
|
* rgb_handler.h
|
||||||
|
*
|
||||||
|
* Created on: Jul 25, 2024
|
||||||
|
* Author: colorbass
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef INC_RGB_CONTROLLER_H_
|
||||||
|
#define INC_RGB_CONTROLLER_H_
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
@@ -40,6 +48,6 @@ typedef struct{
|
|||||||
void LED_Task();
|
void LED_Task();
|
||||||
void LED_Write();
|
void LED_Write();
|
||||||
void LED_Init();
|
void LED_Init();
|
||||||
void LED_SetColor(RGB_Cycle_t *color);
|
|
||||||
void RGB_SetColor(RGB_t *color);
|
|
||||||
void WS2812_SetColor(RGB_t *color);
|
#endif /* INC_RGB_CONTROLLER_H_ */
|
||||||
|
|||||||
Regular → Executable
+17
-1
@@ -1,5 +1,21 @@
|
|||||||
/* USER CODE BEGIN Header */
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file rtc.h
|
||||||
|
* @brief This file contains all the function prototypes for
|
||||||
|
* the rtc.c file
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2024 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
/* USER CODE END Header */
|
/* USER CODE END Header */
|
||||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||||
#ifndef __RTC_H__
|
#ifndef __RTC_H__
|
||||||
|
|||||||
+10
-8
@@ -1,4 +1,5 @@
|
|||||||
#pragma once
|
#ifndef __SERIAL_H
|
||||||
|
#define __SERIAL_H
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "charger_control.h"
|
#include "charger_control.h"
|
||||||
@@ -10,16 +11,14 @@ void CCS_Init(void);
|
|||||||
void CCS_SendEmergencyStop(void);
|
void CCS_SendEmergencyStop(void);
|
||||||
void CCS_SendStart(void);
|
void CCS_SendStart(void);
|
||||||
void CCS_RxEventCallback(UART_HandleTypeDef *huart, uint16_t size);
|
void CCS_RxEventCallback(UART_HandleTypeDef *huart, uint16_t size);
|
||||||
void CCS_TxCpltCallback(UART_HandleTypeDef *huart);
|
|
||||||
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart);
|
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart);
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
CCS_UNKNOWN = 0,
|
CCS_DISABLED = 0,
|
||||||
CCS_DISABLED = 1,
|
CCS_UNPLUGGED = 1,
|
||||||
CCS_UNPLUGGED = 2,
|
CCS_AUTH_REQUIRED = 2,
|
||||||
CCS_AUTH_REQUIRED = 3,
|
CCS_CONNECTED = 3,
|
||||||
CCS_CONNECTED = 4,
|
CCS_REPLUGGING = 4,
|
||||||
CCS_REPLUGGING = 5,
|
|
||||||
} CCS_ConnectorState_t;
|
} CCS_ConnectorState_t;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
@@ -124,3 +123,6 @@ extern CCS_MaxLoad_t CCS_MaxLoad;
|
|||||||
extern CCS_EvInfo_t CCS_EvInfo;
|
extern CCS_EvInfo_t CCS_EvInfo;
|
||||||
extern CONN_State_t CCS_EvseState;
|
extern CONN_State_t CCS_EvseState;
|
||||||
extern uint8_t REPLUG;
|
extern uint8_t REPLUG;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,13 @@
|
|||||||
#pragma once
|
#ifndef SERIALCONTROL_H
|
||||||
|
#define SERIALCONTROL_H
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "charger_control.h"
|
#include "charger_control.h"
|
||||||
#include "isr_opt.h"
|
#include "isr_opt.h"
|
||||||
|
|
||||||
|
#define USE_WEB_INTERFACE
|
||||||
|
|
||||||
// Команды от ПК к устройству
|
// Команды от ПК к устройству
|
||||||
// Пакет статуса изоляции от отдельного блока по одностороннему UART
|
// Пакет статуса изоляции от отдельного блока по одностороннему UART
|
||||||
#define CMD_ISOLATION_STATUS 0x01
|
#define CMD_ISOLATION_STATUS 0x01
|
||||||
@@ -25,8 +28,6 @@
|
|||||||
|
|
||||||
// Перезагрузка для входа в бутлоадер
|
// Перезагрузка для входа в бутлоадер
|
||||||
#define CMD_DEVICE_RESET 0xB5
|
#define CMD_DEVICE_RESET 0xB5
|
||||||
// Пожарная тревога (внешний триггер)
|
|
||||||
#define CMD_FIRE_ALARM 0xB7
|
|
||||||
|
|
||||||
// Коды ответов
|
// Коды ответов
|
||||||
#define RESP_SUCCESS 0x12
|
#define RESP_SUCCESS 0x12
|
||||||
@@ -169,7 +170,6 @@ struct SerialControl_t {
|
|||||||
void SC_Init();
|
void SC_Init();
|
||||||
void SC_Task();
|
void SC_Task();
|
||||||
ISR_FAST void SC_SendPacket(const uint8_t* payload, uint16_t payload_len, uint8_t response_code);
|
ISR_FAST void SC_SendPacket(const uint8_t* payload, uint16_t payload_len, uint8_t response_code);
|
||||||
void SC_RecoverUartDma(UART_HandleTypeDef *huart);
|
|
||||||
|
|
||||||
// Внешняя функция обработки команд (определена в serial_handler.c)
|
// Внешняя функция обработки команд (определена в serial_handler.c)
|
||||||
extern void SC_CommandHandler(ReceivedCommand_t* cmd);
|
extern void SC_CommandHandler(ReceivedCommand_t* cmd);
|
||||||
@@ -179,3 +179,5 @@ extern StatusPacket_t statusPacket;
|
|||||||
extern InfoPacket_t infoPacket;
|
extern InfoPacket_t infoPacket;
|
||||||
extern IsolationStatusPacket_t ISO;
|
extern IsolationStatusPacket_t ISO;
|
||||||
extern volatile SC_Source_t g_sc_command_source;
|
extern volatile SC_Source_t g_sc_command_source;
|
||||||
|
|
||||||
|
#endif // SERIALCONTROL_H
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#pragma once
|
#ifndef SMA_FILTER_H
|
||||||
|
#define SMA_FILTER_H
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
@@ -17,3 +18,6 @@ typedef struct {
|
|||||||
|
|
||||||
void SMAFilter_Init(SMAFilter_t* f);
|
void SMAFilter_Init(SMAFilter_t* f);
|
||||||
int32_t SMAFilter_Update(SMAFilter_t* f, int32_t x);
|
int32_t SMAFilter_Update(SMAFilter_t* f, int32_t x);
|
||||||
|
|
||||||
|
#endif // SMA_FILTER_H
|
||||||
|
|
||||||
|
|||||||
+11
-1
@@ -1,4 +1,12 @@
|
|||||||
#pragma once
|
/*
|
||||||
|
* soft_rtc.h
|
||||||
|
*
|
||||||
|
* Created on: Jul 22, 2024
|
||||||
|
* Author: colorbass
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef INC_SOFT_RTC_H_
|
||||||
|
#define INC_SOFT_RTC_H_
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
|
||||||
@@ -7,3 +15,5 @@ void set_Time(uint32_t unix_time);
|
|||||||
void unix_to_bcd(uint32_t unix_time, uint8_t *time);
|
void unix_to_bcd(uint32_t unix_time, uint8_t *time);
|
||||||
void writeTimeReg(uint8_t reg_number, uint8_t value);
|
void writeTimeReg(uint8_t reg_number, uint8_t value);
|
||||||
uint8_t getTimeReg(uint8_t reg_number);
|
uint8_t getTimeReg(uint8_t reg_number);
|
||||||
|
|
||||||
|
#endif /* INC_SOFT_RTC_H_ */
|
||||||
|
|||||||
@@ -1,5 +1,20 @@
|
|||||||
/* USER CODE BEGIN Header */
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32f1xx_hal_conf.h
|
||||||
|
* @brief HAL configuration file.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2017 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
/* USER CODE END Header */
|
/* USER CODE END Header */
|
||||||
|
|
||||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||||
|
|||||||
+16
-5
@@ -1,5 +1,20 @@
|
|||||||
/* USER CODE BEGIN Header */
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32f1xx_it.h
|
||||||
|
* @brief This file contains the headers of the interrupt handlers.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2024 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
/* USER CODE END Header */
|
/* USER CODE END Header */
|
||||||
|
|
||||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||||
@@ -41,10 +56,6 @@ void DebugMon_Handler(void);
|
|||||||
void PendSV_Handler(void);
|
void PendSV_Handler(void);
|
||||||
void SysTick_Handler(void);
|
void SysTick_Handler(void);
|
||||||
void DMA1_Channel1_IRQHandler(void);
|
void DMA1_Channel1_IRQHandler(void);
|
||||||
void DMA1_Channel2_IRQHandler(void);
|
|
||||||
void DMA1_Channel3_IRQHandler(void);
|
|
||||||
void DMA1_Channel6_IRQHandler(void);
|
|
||||||
void DMA1_Channel7_IRQHandler(void);
|
|
||||||
void ADC1_2_IRQHandler(void);
|
void ADC1_2_IRQHandler(void);
|
||||||
void CAN1_RX0_IRQHandler(void);
|
void CAN1_RX0_IRQHandler(void);
|
||||||
void TIM3_IRQHandler(void);
|
void TIM3_IRQHandler(void);
|
||||||
|
|||||||
+17
-1
@@ -1,5 +1,21 @@
|
|||||||
/* USER CODE BEGIN Header */
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file tim.h
|
||||||
|
* @brief This file contains all the function prototypes for
|
||||||
|
* the tim.c file
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2025 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
/* USER CODE END Header */
|
/* USER CODE END Header */
|
||||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||||
#ifndef __TIM_H__
|
#ifndef __TIM_H__
|
||||||
|
|||||||
+17
-1
@@ -1,5 +1,21 @@
|
|||||||
/* USER CODE BEGIN Header */
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file usart.h
|
||||||
|
* @brief This file contains all the function prototypes for
|
||||||
|
* the usart.c file
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2025 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
/* USER CODE END Header */
|
/* USER CODE END Header */
|
||||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||||
#ifndef __USART_H__
|
#ifndef __USART_H__
|
||||||
|
|||||||
+19
-3
@@ -1,5 +1,21 @@
|
|||||||
/* USER CODE BEGIN Header */
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file adc.c
|
||||||
|
* @brief This file provides code for the configuration
|
||||||
|
* of the ADC instances.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2024 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
/* USER CODE END Header */
|
/* USER CODE END Header */
|
||||||
/* Includes ------------------------------------------------------------------*/
|
/* Includes ------------------------------------------------------------------*/
|
||||||
#include "adc.h"
|
#include "adc.h"
|
||||||
@@ -164,7 +180,7 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle)
|
|||||||
hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
|
hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
|
||||||
hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
|
hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
|
||||||
hdma_adc1.Init.Mode = DMA_CIRCULAR;
|
hdma_adc1.Init.Mode = DMA_CIRCULAR;
|
||||||
hdma_adc1.Init.Priority = DMA_PRIORITY_MEDIUM;
|
hdma_adc1.Init.Priority = DMA_PRIORITY_HIGH;
|
||||||
if (HAL_DMA_Init(&hdma_adc1) != HAL_OK)
|
if (HAL_DMA_Init(&hdma_adc1) != HAL_OK)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
@@ -173,7 +189,7 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle)
|
|||||||
__HAL_LINKDMA(adcHandle,DMA_Handle,hdma_adc1);
|
__HAL_LINKDMA(adcHandle,DMA_Handle,hdma_adc1);
|
||||||
|
|
||||||
/* ADC1 interrupt Init */
|
/* ADC1 interrupt Init */
|
||||||
HAL_NVIC_SetPriority(ADC1_2_IRQn, 7, 0);
|
HAL_NVIC_SetPriority(ADC1_2_IRQn, 0, 0);
|
||||||
HAL_NVIC_EnableIRQ(ADC1_2_IRQn);
|
HAL_NVIC_EnableIRQ(ADC1_2_IRQn);
|
||||||
/* USER CODE BEGIN ADC1_MspInit 1 */
|
/* USER CODE BEGIN ADC1_MspInit 1 */
|
||||||
|
|
||||||
|
|||||||
+19
-26
@@ -1,9 +1,13 @@
|
|||||||
#include "board.h"
|
|
||||||
|
|
||||||
#include "adc.h"
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "sma_filter.h"
|
#include "board.h"
|
||||||
|
#include "adc.h"
|
||||||
#include "tim.h"
|
#include "tim.h"
|
||||||
|
#include "sma_filter.h"
|
||||||
|
|
||||||
|
//TODO:
|
||||||
|
//TEMP READ
|
||||||
|
// Connector temperature sensors
|
||||||
|
|
||||||
InfoBlock_t *InfoBlock = (InfoBlock_t *)(VERSION_OFFSET);
|
InfoBlock_t *InfoBlock = (InfoBlock_t *)(VERSION_OFFSET);
|
||||||
|
|
||||||
@@ -70,31 +74,19 @@ uint8_t IN_ReadInput(inputNum_t input_n){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Заглушка: температура платы не измеряется (нет реализации АЦП для канала). */
|
uint8_t GetBoardTemp(){
|
||||||
uint8_t GetBoardTemp(void){
|
//TODO
|
||||||
|
// HAL_ADC_Start(&hadc1); // start the adc
|
||||||
|
//
|
||||||
|
// HAL_ADC_PollForConversion(&hadc1, 100); // poll for conversion
|
||||||
|
//
|
||||||
|
// adc_val = HAL_ADC_GetValue(&hadc1); // get the adc value
|
||||||
|
//
|
||||||
|
// HAL_ADC_Stop(&hadc1); // stop adc
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Force PC12 (HEATER) as GPIO output via CRH/ODR, overriding UART5 MspInit.
|
|
||||||
* CubeMX assigns PC12 to UART5_TX; on the board it drives the heater relay.
|
|
||||||
*/
|
|
||||||
static void Heater_PinForceOutput(void)
|
|
||||||
{
|
|
||||||
const uint32_t pin_cfg = GPIO_SPEED_FREQ_LOW; /* MODE=10, CNF=00: GP output PP, 2 MHz */
|
|
||||||
|
|
||||||
__HAL_RCC_GPIOC_CLK_ENABLE();
|
|
||||||
|
|
||||||
MODIFY_REG(HEATER_GPIO_Port->CRH,
|
|
||||||
(GPIO_CRH_MODE12 | GPIO_CRH_CNF12),
|
|
||||||
(pin_cfg << GPIO_CRH_MODE12_Pos));
|
|
||||||
|
|
||||||
HEATER_GPIO_Port->BSRR = (uint32_t)HEATER_Pin << 16U;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Init_Peripheral(){
|
void Init_Peripheral(){
|
||||||
Heater_PinForceOutput();
|
|
||||||
HAL_GPIO_WritePin(HEATER_GPIO_Port, HEATER_Pin, GPIO_PIN_RESET);
|
|
||||||
HAL_ADCEx_Calibration_Start(&hadc1);
|
HAL_ADCEx_Calibration_Start(&hadc1);
|
||||||
ADC_ScanStart();
|
ADC_ScanStart();
|
||||||
|
|
||||||
@@ -103,8 +95,8 @@ void Init_Peripheral(){
|
|||||||
RELAY_Write(RELAY3, 0);
|
RELAY_Write(RELAY3, 0);
|
||||||
RELAY_Write(RELAY_DC, 0);
|
RELAY_Write(RELAY_DC, 0);
|
||||||
RELAY_Write(RELAY_AC, 0);
|
RELAY_Write(RELAY_AC, 0);
|
||||||
RELAY_Write(RELAY_CP, 0);
|
RELAY_Write(RELAY_CP, 1);
|
||||||
RELAY_Write(RELAY_CC, 0);
|
RELAY_Write(RELAY_CC, 1);
|
||||||
RELAY_Write(RELAY_DC1, 0);
|
RELAY_Write(RELAY_DC1, 0);
|
||||||
|
|
||||||
SMAFilter_Init(&conn_temp_adc_filter[0]);
|
SMAFilter_Init(&conn_temp_adc_filter[0]);
|
||||||
@@ -146,6 +138,7 @@ int16_t CONN_ReadTemp(uint8_t ch){
|
|||||||
return 20; //Термодатчик не подключен
|
return 20; //Термодатчик не подключен
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// int adc_value = 2048; // Пример значения АЦП
|
||||||
float Vref = 3.3; // Напряжение опорное
|
float Vref = 3.3; // Напряжение опорное
|
||||||
float Vin = 5.0; // Входное напряжение
|
float Vin = 5.0; // Входное напряжение
|
||||||
float R = 1000; // Сопротивление резистора в Омах
|
float R = 1000; // Сопротивление резистора в Омах
|
||||||
|
|||||||
+19
-3
@@ -1,5 +1,21 @@
|
|||||||
/* USER CODE BEGIN Header */
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file can.c
|
||||||
|
* @brief This file provides code for the configuration
|
||||||
|
* of the CAN instances.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2025 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
/* USER CODE END Header */
|
/* USER CODE END Header */
|
||||||
/* Includes ------------------------------------------------------------------*/
|
/* Includes ------------------------------------------------------------------*/
|
||||||
#include "can.h"
|
#include "can.h"
|
||||||
@@ -111,7 +127,7 @@ void HAL_CAN_MspInit(CAN_HandleTypeDef* canHandle)
|
|||||||
__HAL_AFIO_REMAP_CAN1_3();
|
__HAL_AFIO_REMAP_CAN1_3();
|
||||||
|
|
||||||
/* CAN1 interrupt Init */
|
/* CAN1 interrupt Init */
|
||||||
HAL_NVIC_SetPriority(CAN1_RX0_IRQn, 3, 0);
|
HAL_NVIC_SetPriority(CAN1_RX0_IRQn, 0, 0);
|
||||||
HAL_NVIC_EnableIRQ(CAN1_RX0_IRQn);
|
HAL_NVIC_EnableIRQ(CAN1_RX0_IRQn);
|
||||||
/* USER CODE BEGIN CAN1_MspInit 1 */
|
/* USER CODE BEGIN CAN1_MspInit 1 */
|
||||||
|
|
||||||
@@ -149,7 +165,7 @@ void HAL_CAN_MspInit(CAN_HandleTypeDef* canHandle)
|
|||||||
/* CAN2 interrupt Init */
|
/* CAN2 interrupt Init */
|
||||||
HAL_NVIC_SetPriority(CAN2_TX_IRQn, 0, 0);
|
HAL_NVIC_SetPriority(CAN2_TX_IRQn, 0, 0);
|
||||||
HAL_NVIC_EnableIRQ(CAN2_TX_IRQn);
|
HAL_NVIC_EnableIRQ(CAN2_TX_IRQn);
|
||||||
HAL_NVIC_SetPriority(CAN2_RX1_IRQn, 3, 0);
|
HAL_NVIC_SetPriority(CAN2_RX1_IRQn, 0, 0);
|
||||||
HAL_NVIC_EnableIRQ(CAN2_RX1_IRQn);
|
HAL_NVIC_EnableIRQ(CAN2_RX1_IRQn);
|
||||||
/* USER CODE BEGIN CAN2_MspInit 1 */
|
/* USER CODE BEGIN CAN2_MspInit 1 */
|
||||||
|
|
||||||
|
|||||||
+30
-31
@@ -1,66 +1,58 @@
|
|||||||
#include "charger_control.h"
|
|
||||||
|
|
||||||
|
#include "charger_control.h"
|
||||||
#include "charger_config.h"
|
#include "charger_config.h"
|
||||||
#include "debug.h"
|
|
||||||
#include "fire_alarm.h"
|
|
||||||
#include "psu_control.h"
|
#include "psu_control.h"
|
||||||
|
#include "connector.h"
|
||||||
|
#include "debug.h"
|
||||||
|
|
||||||
ChargingConnector_t CONN;
|
ChargingConnector_t CONN;
|
||||||
CONN_State_t connectorState;
|
CONN_State_t connectorState;
|
||||||
|
extern uint8_t config_initialized;
|
||||||
|
|
||||||
void CONN_Init(){
|
void CONN_Init(){
|
||||||
|
|
||||||
CONN.connControl = CMD_NONE;
|
CONN.connControl = CMD_NONE;
|
||||||
CONN.connState = Unknown;
|
CONN.connState = Unknown;
|
||||||
CONN.RequestedVoltage = PSU_MIN_VOLTAGE;
|
CONN.RequestedVoltage = PSU_MIN_VOLTAGE;
|
||||||
CONN.ChargingTime = 0;
|
|
||||||
CONN.hv_limit = 0u;
|
|
||||||
CONN.hv_tick = 0u;
|
|
||||||
CONN.hv_limit_count = 0u;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CONN_Loop(){
|
void CONN_Loop(){
|
||||||
static uint32_t charging_time_tick = 0;
|
|
||||||
static CONN_State_t last_connState = Unknown;
|
static CONN_State_t last_connState = Unknown;
|
||||||
if(last_connState != CONN.connState){
|
if(last_connState != CONN.connState){
|
||||||
last_connState = CONN.connState;
|
last_connState = CONN.connState;
|
||||||
CONN.connControl = CMD_NONE;
|
CONN.connControl = CMD_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FireAlarm_IsLatched()) {
|
if(PSU0.cont_fault){
|
||||||
CONN.chargingError = CONN_ERR_FIRE_ALARM;
|
|
||||||
} else if(PSU0.cont_fault){
|
|
||||||
CONN.chargingError = CONN_ERR_CONTACTOR;
|
CONN.chargingError = CONN_ERR_CONTACTOR;
|
||||||
} else if(PSU0.psu_fault){
|
} else if(PSU0.psu_fault){
|
||||||
CONN.chargingError = CONN_ERR_PSU_FAULT;
|
CONN.chargingError = CONN_ERR_PSU_FAULT;
|
||||||
|
// } else if(!CTRL.ac_ok) {
|
||||||
|
// CONN.chargingError = CONN_ERR_AC_FAULT;
|
||||||
|
// } else
|
||||||
}else if (CONN.EvConnected == 0){
|
}else if (CONN.EvConnected == 0){
|
||||||
CONN.chargingError = CONN_NO_ERROR;
|
CONN.chargingError = CONN_NO_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ED_TraceWarning(CONN.chargingError, 0)) {
|
if(ED_TraceWarning(CONN.chargingError, 0)) printf("CONN%d Error: %d\n", 0, CONN.chargingError);
|
||||||
log_printf(LOG_WARN, "CONN0 Error: %d\n", (int)CONN.chargingError);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (HAL_GetTick() - charging_time_tick >= 1000U) {
|
|
||||||
charging_time_tick += 1000U;
|
|
||||||
if (CONN.connState == Charging) {
|
|
||||||
CONN.ChargingTime++;
|
|
||||||
}
|
|
||||||
if (CONN.connState == Unplugged) {
|
|
||||||
CONN.ChargingTime = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CONN_GetElapsedForMonitoring(uint16_t *min, uint8_t *sec) {
|
void CONN_Task(){
|
||||||
uint32_t elapsed_sec = CONN.ChargingTime;
|
/* CCS state machine is handled in serial.c.
|
||||||
if (min != NULL) {
|
* Keep this task lightweight for scheduler compatibility.
|
||||||
*min = (uint16_t)(elapsed_sec / 60U);
|
*/
|
||||||
}
|
if (CONN.chargingError != CONN_NO_ERROR) {
|
||||||
if (sec != NULL) {
|
CONN_SetState(Disabled);
|
||||||
*sec = (uint8_t)(elapsed_sec % 60U);
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (connectorState == Unknown && config_initialized) {
|
||||||
|
CONN_SetState(Unplugged);
|
||||||
|
} else if (connectorState == Disabled && CONN.chargingError == CONN_NO_ERROR) {
|
||||||
|
CONN_SetState(Unplugged);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CONN_SetState(CONN_State_t state){
|
void CONN_SetState(CONN_State_t state){
|
||||||
@@ -88,3 +80,10 @@ void CONN_SetState(CONN_State_t state){
|
|||||||
|
|
||||||
CONN.connState = state;
|
CONN.connState = state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CONN_PrintChargingTotal(){
|
||||||
|
printf("CONN%d Charging Finished:\n", 0);
|
||||||
|
// printf("Charging Time: %d\n", CONN.chargingTime);
|
||||||
|
printf("Charging Energy: %d\n", CONN.Energy);
|
||||||
|
// printf("Charging Power: %d\n", CONN.chargingPower);
|
||||||
|
}
|
||||||
|
|||||||
+1
-64
@@ -1,19 +1,15 @@
|
|||||||
#include "cp.h"
|
#include "cp.h"
|
||||||
|
|
||||||
#include "adc.h"
|
#include "adc.h"
|
||||||
#include "board.h"
|
#include "board.h"
|
||||||
#include "debug.h"
|
|
||||||
#include "tim.h"
|
#include "tim.h"
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#define MAX_DUTY 450
|
#define MAX_DUTY 450
|
||||||
#define FILTER_ORDER 100
|
|
||||||
|
|
||||||
static int32_t cp_voltage_mv = 0;
|
static int32_t cp_voltage_mv = 0;
|
||||||
static uint8_t cp_duty = 0;
|
static uint8_t cp_duty = 0;
|
||||||
CP_State_t fake_cp_state = EV_STATE_ACQUIRING;
|
CP_State_t fake_cp_state = EV_STATE_ACQUIRING;
|
||||||
CP_State_t cp_state_buffer = EV_STATE_ACQUIRING;
|
|
||||||
|
|
||||||
#define VREFINT_CAL_ADDR ((uint16_t*)0x1FFFF7BA) // для STM32F1!
|
#define VREFINT_CAL_ADDR ((uint16_t*)0x1FFFF7BA) // для STM32F1!
|
||||||
|
|
||||||
@@ -97,66 +93,7 @@ CP_State_t CP_GetState(void) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CP_State_t CP_GetFilteredState(void) {
|
|
||||||
return cp_state_buffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CP_FilterState(void) {
|
|
||||||
|
|
||||||
static CP_State_t pending_state = EV_STATE_ACQUIRING;
|
|
||||||
static uint8_t stable_count = 0u;
|
|
||||||
CP_State_t current_state = CP_GetState();
|
|
||||||
|
|
||||||
/* Keep last accepted state while CP is still acquiring. */
|
|
||||||
if (current_state == EV_STATE_ACQUIRING) {
|
|
||||||
pending_state = EV_STATE_ACQUIRING;
|
|
||||||
stable_count = 0u;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (current_state != pending_state) {
|
|
||||||
pending_state = current_state;
|
|
||||||
stable_count = 1u;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (stable_count < FILTER_ORDER) {
|
|
||||||
stable_count++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (stable_count >= FILTER_ORDER) {
|
|
||||||
cp_state_buffer = pending_state;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CP_Loop(void) {
|
void CP_Loop(void) {
|
||||||
static uint32_t tick;
|
(void)CP_GetState();
|
||||||
if ((int32_t)(HAL_GetTick() - tick) < 1) return;
|
|
||||||
tick = HAL_GetTick();
|
|
||||||
static uint8_t initialized = 0;
|
|
||||||
static CP_State_t prev_state = EV_STATE_ACQUIRING;
|
|
||||||
static uint8_t prev_duty = 0;
|
|
||||||
|
|
||||||
CP_FilterState();
|
|
||||||
|
|
||||||
CP_State_t current_state = CP_GetFilteredState();
|
|
||||||
uint8_t current_duty = cp_duty;
|
|
||||||
|
|
||||||
if (!initialized) {
|
|
||||||
prev_state = current_state;
|
|
||||||
prev_duty = current_duty;
|
|
||||||
initialized = 1;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (current_state != prev_state) {
|
|
||||||
log_printf(LOG_INFO, "CP state changed: %d -> %d\n", prev_state, current_state);
|
|
||||||
prev_state = current_state;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (current_duty != prev_duty) {
|
|
||||||
log_printf(LOG_INFO, "CP duty changed: %u -> %u\n", prev_duty, current_duty);
|
|
||||||
prev_duty = current_duty;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+17
-1
@@ -1,5 +1,21 @@
|
|||||||
/* USER CODE BEGIN Header */
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file crc.c
|
||||||
|
* @brief This file provides code for the configuration
|
||||||
|
* of the CRC instances.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2025 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
/* USER CODE END Header */
|
/* USER CODE END Header */
|
||||||
/* Includes ------------------------------------------------------------------*/
|
/* Includes ------------------------------------------------------------------*/
|
||||||
#include "crc.h"
|
#include "crc.h"
|
||||||
|
|||||||
+231
-7
@@ -1,14 +1,21 @@
|
|||||||
|
/*
|
||||||
|
* debug.c
|
||||||
|
*
|
||||||
|
* Created on: Apr 16, 2024
|
||||||
|
* Author: colorbass
|
||||||
|
*/
|
||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "board.h"
|
|
||||||
#include "connector.h"
|
|
||||||
#include "debug.h"
|
|
||||||
#include "serial_control.h"
|
|
||||||
#include "usart.h"
|
|
||||||
#include <stdarg.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include "debug.h"
|
||||||
|
#include "board.h"
|
||||||
|
#include "usart.h"
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
#include <connector.h>
|
||||||
|
#include "serial_control.h"
|
||||||
|
|
||||||
// Кольцевой буфер для отладочных сообщений
|
// Кольцевой буфер для отладочных сообщений
|
||||||
#define DEBUG_BUFFER_SIZE 1024
|
#define DEBUG_BUFFER_SIZE 1024
|
||||||
@@ -141,3 +148,220 @@ int log_printf(LogLevel_t level, const char *format, ...)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef USE_WEB_INTERFACE
|
||||||
|
|
||||||
|
#include "isr_opt.h"
|
||||||
|
|
||||||
|
extern UART_HandleTypeDef huart2;
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t debug_rx_buffer[256];
|
||||||
|
uint8_t debug_cmd_received;
|
||||||
|
uint8_t debug_rx_buffer_size = 0;
|
||||||
|
|
||||||
|
|
||||||
|
ISR_FAST void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size){
|
||||||
|
|
||||||
|
// if(huart->Instance == USART1){
|
||||||
|
// mm_rx_interrupt(huart, Size);
|
||||||
|
// }
|
||||||
|
if(huart->Instance == USART2){
|
||||||
|
debug_rx_interrupt(huart, Size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ISR_FAST void debug_rx_interrupt(UART_HandleTypeDef *huart, uint16_t Size){
|
||||||
|
debug_rx_buffer[Size] = '\0';
|
||||||
|
debug_rx_buffer_size = Size;
|
||||||
|
debug_cmd_received = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void debug_init(){
|
||||||
|
HAL_UARTEx_ReceiveToIdle_IT(&huart2,debug_rx_buffer,255);
|
||||||
|
}
|
||||||
|
|
||||||
|
void parse_command(uint8_t* buffer, size_t length) {
|
||||||
|
// ignore \r \n symbols
|
||||||
|
size_t i = 0;
|
||||||
|
for (i = 0; i < length; i++) {
|
||||||
|
if (buffer[i] == '\r' || buffer[i] == '\n') {
|
||||||
|
buffer[i] = '\0';
|
||||||
|
length = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (buffer[0] == 0) return;
|
||||||
|
if (strncmp((const char*)buffer, "reset", length) == 0) {
|
||||||
|
log_printf(LOG_INFO, "Resetting...\n");
|
||||||
|
NVIC_SystemReset();
|
||||||
|
|
||||||
|
} else if (strncmp((const char*)buffer, "relayaux", length) == 0) {
|
||||||
|
log_printf(LOG_INFO, "Relaying...\n");
|
||||||
|
RELAY_Write(RELAY_AUX, 1);
|
||||||
|
HAL_Delay(2000);
|
||||||
|
RELAY_Write(RELAY_AUX, 0);
|
||||||
|
} else if (strncmp((const char*)buffer, "relaycc", length) == 0) {
|
||||||
|
log_printf(LOG_INFO, "Relaying...\n");
|
||||||
|
RELAY_Write(RELAY_CC, 1);
|
||||||
|
HAL_Delay(200);
|
||||||
|
RELAY_Write(RELAY_CC, 0);
|
||||||
|
} else if (strncmp((const char*)buffer, "relaydc", length) == 0) {
|
||||||
|
log_printf(LOG_INFO, "Relaying...\n");
|
||||||
|
RELAY_Write(RELAY_DC, 1);
|
||||||
|
HAL_Delay(200);
|
||||||
|
RELAY_Write(RELAY_DC, 0);
|
||||||
|
} else if (strncmp((const char*)buffer, "relayac", length) == 0) {
|
||||||
|
log_printf(LOG_INFO, "Relaying...\n");
|
||||||
|
RELAY_Write(RELAY_AC, 1);
|
||||||
|
HAL_Delay(200);
|
||||||
|
RELAY_Write(RELAY_AC, 0);
|
||||||
|
|
||||||
|
} else if (strncmp((const char*)buffer, "adc", length) == 0) {
|
||||||
|
log_printf(LOG_INFO, "CC1=%.2f\n", CONN_CC_GetAdc());
|
||||||
|
|
||||||
|
} else if (strncmp((const char*)buffer, "lock_state", length) == 0) {
|
||||||
|
log_printf(LOG_INFO, "Lock state=%d\n", GBT_LockGetState());
|
||||||
|
|
||||||
|
} else if (strncmp((const char*)buffer, "lock_lock", length) == 0) {
|
||||||
|
log_printf(LOG_INFO, "Locked\n");
|
||||||
|
GBT_Lock(1);
|
||||||
|
|
||||||
|
} else if (strncmp((const char*)buffer, "lock_unlock", length) == 0) {
|
||||||
|
log_printf(LOG_INFO, "Unlocked\n");
|
||||||
|
GBT_Lock(0);
|
||||||
|
|
||||||
|
} else if (strncmp((const char*)buffer, "complete", length) == 0) {
|
||||||
|
CONN_SetState(Finished);
|
||||||
|
|
||||||
|
} else if (strncmp((const char*)buffer, "start", length) == 0) {
|
||||||
|
log_printf(LOG_INFO, "Started\n");
|
||||||
|
GBT_Start();
|
||||||
|
|
||||||
|
} else if (strncmp((const char*)buffer, "stop", length) == 0) {
|
||||||
|
log_printf(LOG_INFO, "Stopped\n");
|
||||||
|
GBT_StopEVSE(GBT_CST_SUSPENDS_ARTIFICIALLY);
|
||||||
|
|
||||||
|
} else if (strncmp((const char*)buffer, "stop1", length) == 0) {
|
||||||
|
log_printf(LOG_INFO, "Stopped\n");
|
||||||
|
GBT_ForceStop();
|
||||||
|
|
||||||
|
// } else if (strncmp((const char*)buffer, "force", length) == 0) {
|
||||||
|
// log_printf(LOG_INFO, "Stopped\n");
|
||||||
|
// GBT_Lock(1);
|
||||||
|
// GBT_SwitchState(GBT_S2_LOCKED);
|
||||||
|
// GBT_Delay(500);
|
||||||
|
|
||||||
|
} else if (strncmp((const char*)buffer, "cc_state", length) == 0) {
|
||||||
|
switch(CONN_CC_GetState()){
|
||||||
|
case GBT_CC_UNKNOWN:
|
||||||
|
log_printf(LOG_INFO, "GBT_CC_UNKNOWN\n");
|
||||||
|
break;
|
||||||
|
case GBT_CC_12V:
|
||||||
|
log_printf(LOG_INFO, "GBT_CC_12V\n");
|
||||||
|
break;
|
||||||
|
case GBT_CC_6V:
|
||||||
|
log_printf(LOG_INFO, "GBT_CC_6V\n");
|
||||||
|
break;
|
||||||
|
case GBT_CC_4V:
|
||||||
|
log_printf(LOG_INFO, "GBT_CC_4V\n");
|
||||||
|
break;
|
||||||
|
case GBT_CC_2V:
|
||||||
|
log_printf(LOG_INFO, "GBT_CC_2V\n");
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
} else if (strncmp((const char*)buffer, "temp", length) == 0) {
|
||||||
|
log_printf(LOG_INFO, "temp1 %d\n",GBT_ReadTemp(0));
|
||||||
|
log_printf(LOG_INFO, "temp2 %d\n",GBT_ReadTemp(1));
|
||||||
|
} else if (strncmp((const char*)buffer, "info1", length) == 0) {
|
||||||
|
log_printf(LOG_INFO, "Battery info:\n");
|
||||||
|
log_printf(LOG_INFO, "maxCV %dV\n",GBT_BATStat.maxCellVoltage/100); // 0.01v/bit
|
||||||
|
log_printf(LOG_INFO, "maxCC %dA\n",GBT_BATStat.maxChargingCurrent/10); // 0.1A/bit
|
||||||
|
log_printf(LOG_INFO, "totE %dkWh\n",GBT_BATStat.totalEnergy/10); // 0.1kWh
|
||||||
|
log_printf(LOG_INFO, "maxCV %dV\n",GBT_BATStat.maxChargingVoltage/10); // 0.1V/ bit
|
||||||
|
log_printf(LOG_INFO, "maxT %dC\n",(int16_t)GBT_BATStat.maxTemp-50); // 1C/bit, -50C offset
|
||||||
|
log_printf(LOG_INFO, "SOC %dp\n",GBT_BATStat.SOC/10); // 0.1%/bit , 0..100%
|
||||||
|
log_printf(LOG_INFO, "Volt. %dV\n",GBT_BATStat.measVoltage/10); // 0.1V/bit
|
||||||
|
|
||||||
|
} else if (strncmp((const char*)buffer, "info2", length) == 0) {
|
||||||
|
log_printf(LOG_INFO, "EV info:\n");
|
||||||
|
log_printf(LOG_INFO, "GBT_ver V%d.%d%d\n",GBT_EVInfo.version[0],GBT_EVInfo.version[1],GBT_EVInfo.version[2]);
|
||||||
|
log_printf(LOG_INFO, "Battery type: %d\n",GBT_EVInfo.batteryType);
|
||||||
|
log_printf(LOG_INFO, "Battery capacity: %d\n", GBT_EVInfo.batteryCapacity); // 0.1Ah/bit
|
||||||
|
log_printf(LOG_INFO, "Battery voltage: %d\n", GBT_EVInfo.batteryVoltage); // 0.1V/bit
|
||||||
|
log_printf(LOG_INFO, "Battery vendor: %.4s\n", GBT_EVInfo.batteryVendor); // Battery vendor (ASCII string)
|
||||||
|
log_printf(LOG_INFO, "Battery SN: %lu\n", GBT_EVInfo.batterySN); // int
|
||||||
|
log_printf(LOG_INFO, "Battery manufacture date: %02d.%02d.%04d\n", GBT_EVInfo.batteryManuD, GBT_EVInfo.batteryManuM ,GBT_EVInfo.batteryManuY+1985); // year (offset 1985)
|
||||||
|
log_printf(LOG_INFO, "Battery cycles: %d\n", GBT_EVInfo.batteryCycleCount); //uint24_t
|
||||||
|
log_printf(LOG_INFO, "Own auto: %d\n", GBT_EVInfo.ownAuto); // 0 = lizing, 1 = own auto
|
||||||
|
log_printf(LOG_INFO, "EVIN: %.17s\n", GBT_EVInfo.EVIN); //EVIN
|
||||||
|
log_printf(LOG_INFO, "EV_SW_VER: %.8s\n", GBT_EVInfo.EV_SW_VER);
|
||||||
|
|
||||||
|
} else if (strncmp((const char*)buffer, "info3", length) == 0) {
|
||||||
|
log_printf(LOG_INFO, "GBT_MaxLoad info:\n");
|
||||||
|
log_printf(LOG_INFO, "Output max current: %d\n",GBT_MaxLoad.maxOutputCurrent);
|
||||||
|
log_printf(LOG_INFO, "Output min current: %d\n",GBT_MaxLoad.minOutputCurrent);
|
||||||
|
log_printf(LOG_INFO, "Output max voltage: %d\n",GBT_MaxLoad.maxOutputVoltage);
|
||||||
|
log_printf(LOG_INFO, "Output min voltage: %d\n",GBT_MaxLoad.minOutputVoltage);
|
||||||
|
log_printf(LOG_INFO, "\nGBT_ChargerInfo info:\n");
|
||||||
|
log_printf(LOG_INFO, "BMS Recognized: %d\n",GBT_ChargerInfo.bmsIdentified);
|
||||||
|
log_printf(LOG_INFO, "Charger location: %.3s\n",GBT_ChargerInfo.chargerLocation);
|
||||||
|
log_printf(LOG_INFO, "Charger number: %lu\n",GBT_ChargerInfo.chargerNumber);
|
||||||
|
|
||||||
|
|
||||||
|
} else if (strncmp((const char*)buffer, "help", length) == 0) {
|
||||||
|
log_printf(LOG_INFO, "Command list:\n");
|
||||||
|
log_printf(LOG_INFO, "reset\n");
|
||||||
|
log_printf(LOG_INFO, "help\n");
|
||||||
|
log_printf(LOG_INFO, "cc_state\n");
|
||||||
|
log_printf(LOG_INFO, "lock_lock\n");
|
||||||
|
log_printf(LOG_INFO, "lock_unlock\n");
|
||||||
|
log_printf(LOG_INFO, "lock_state\n");
|
||||||
|
log_printf(LOG_INFO, "adc\n");
|
||||||
|
log_printf(LOG_INFO, "relay(cc,aux,ac,dc)\n");
|
||||||
|
log_printf(LOG_INFO, "start\n");
|
||||||
|
log_printf(LOG_INFO, "stop\n");
|
||||||
|
log_printf(LOG_INFO, "stop1\n");
|
||||||
|
// log_printf(LOG_INFO, "force\n");
|
||||||
|
log_printf(LOG_INFO, "temp\n");
|
||||||
|
log_printf(LOG_INFO, "info1\n");
|
||||||
|
log_printf(LOG_INFO, "info2\n");
|
||||||
|
log_printf(LOG_INFO, "info3\n");
|
||||||
|
log_printf(LOG_INFO, "time\n");
|
||||||
|
log_printf(LOG_INFO, "cantest\n");
|
||||||
|
|
||||||
|
//TODO: info commands
|
||||||
|
|
||||||
|
} else if (strncmp((const char*)buffer, "time", length) == 0) {
|
||||||
|
|
||||||
|
time_t unix_time = (time_t)get_Current_Time();
|
||||||
|
struct tm *parts = localtime(&unix_time);
|
||||||
|
|
||||||
|
log_printf(LOG_INFO, "Year: %d\n", parts->tm_year + 1900);
|
||||||
|
log_printf(LOG_INFO, "Month: %d\n", parts->tm_mon + 1);
|
||||||
|
log_printf(LOG_INFO, "Day: %d\n", parts->tm_mday);
|
||||||
|
log_printf(LOG_INFO, "Hour: %d\n", parts->tm_hour);
|
||||||
|
log_printf(LOG_INFO, "Minute: %d\n", parts->tm_min);
|
||||||
|
log_printf(LOG_INFO, "Second: %d\n", parts->tm_sec);
|
||||||
|
|
||||||
|
} else if (strncmp((const char*)buffer, "cantest", length) == 0) {
|
||||||
|
//GBT_SendCHM();
|
||||||
|
GBT_Error(0xFDF0C0FC); //BRM Timeout
|
||||||
|
log_printf(LOG_INFO, "can test\n");
|
||||||
|
|
||||||
|
} else {
|
||||||
|
log_printf(LOG_INFO, "Unknown command\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void debug_task(){
|
||||||
|
if(debug_cmd_received){
|
||||||
|
parse_command(debug_rx_buffer, debug_rx_buffer_size);
|
||||||
|
HAL_UARTEx_ReceiveToIdle_IT(&huart2,debug_rx_buffer,255);
|
||||||
|
debug_cmd_received = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#endif // USE_WEB_INTERFACE
|
||||||
|
|||||||
+18
-14
@@ -1,5 +1,21 @@
|
|||||||
/* USER CODE BEGIN Header */
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file dma.c
|
||||||
|
* @brief This file provides code for the configuration
|
||||||
|
* of all the requested memory to memory DMA transfers.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2026 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
/* USER CODE END Header */
|
/* USER CODE END Header */
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
/* Includes ------------------------------------------------------------------*/
|
||||||
@@ -28,20 +44,8 @@ void MX_DMA_Init(void)
|
|||||||
|
|
||||||
/* DMA interrupt init */
|
/* DMA interrupt init */
|
||||||
/* DMA1_Channel1_IRQn interrupt configuration */
|
/* DMA1_Channel1_IRQn interrupt configuration */
|
||||||
HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 1, 0);
|
HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0);
|
||||||
HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);
|
HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn);
|
||||||
/* DMA1_Channel2_IRQn interrupt configuration */
|
|
||||||
HAL_NVIC_SetPriority(DMA1_Channel2_IRQn, 4, 0);
|
|
||||||
HAL_NVIC_EnableIRQ(DMA1_Channel2_IRQn);
|
|
||||||
/* DMA1_Channel3_IRQn interrupt configuration */
|
|
||||||
HAL_NVIC_SetPriority(DMA1_Channel3_IRQn, 1, 0);
|
|
||||||
HAL_NVIC_EnableIRQ(DMA1_Channel3_IRQn);
|
|
||||||
/* DMA1_Channel6_IRQn interrupt configuration */
|
|
||||||
HAL_NVIC_SetPriority(DMA1_Channel6_IRQn, 1, 0);
|
|
||||||
HAL_NVIC_EnableIRQ(DMA1_Channel6_IRQn);
|
|
||||||
/* DMA1_Channel7_IRQn interrupt configuration */
|
|
||||||
HAL_NVIC_SetPriority(DMA1_Channel7_IRQn, 4, 0);
|
|
||||||
HAL_NVIC_EnableIRQ(DMA1_Channel7_IRQn);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,20 +0,0 @@
|
|||||||
#include "fire_alarm.h"
|
|
||||||
|
|
||||||
#include "charger_control.h"
|
|
||||||
#include "debug.h"
|
|
||||||
#include "serial.h"
|
|
||||||
|
|
||||||
static uint8_t fire_alarm_latched = 0;
|
|
||||||
|
|
||||||
uint8_t FireAlarm_IsLatched(void) {
|
|
||||||
return fire_alarm_latched;
|
|
||||||
}
|
|
||||||
|
|
||||||
void FireAlarm_Activate(void) {
|
|
||||||
if (fire_alarm_latched) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
fire_alarm_latched = 1;
|
|
||||||
log_printf(LOG_ERR, "FIRE ALARM activated\n");
|
|
||||||
}
|
|
||||||
+21
-6
@@ -1,5 +1,21 @@
|
|||||||
/* USER CODE BEGIN Header */
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file gpio.c
|
||||||
|
* @brief This file provides code for the configuration
|
||||||
|
* of all used GPIO pins.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2024 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
/* USER CODE END Header */
|
/* USER CODE END Header */
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
/* Includes ------------------------------------------------------------------*/
|
||||||
@@ -38,8 +54,7 @@ void MX_GPIO_Init(void)
|
|||||||
__HAL_RCC_GPIOD_CLK_ENABLE();
|
__HAL_RCC_GPIOD_CLK_ENABLE();
|
||||||
|
|
||||||
/*Configure GPIO pin Output Level */
|
/*Configure GPIO pin Output Level */
|
||||||
HAL_GPIO_WritePin(GPIOC, DBG1_Pin|RELAY_CP_Pin|LOCK_A_Pin|LOCK_B_Pin
|
HAL_GPIO_WritePin(GPIOC, DBG1_Pin|RELAY_CP_Pin|LOCK_A_Pin|LOCK_B_Pin, GPIO_PIN_RESET);
|
||||||
|LED_DATA_Pin, GPIO_PIN_RESET);
|
|
||||||
|
|
||||||
/*Configure GPIO pin Output Level */
|
/*Configure GPIO pin Output Level */
|
||||||
HAL_GPIO_WritePin(GPIOA, DBG2_Pin|DBG3_Pin|RELAY_CC_Pin, GPIO_PIN_RESET);
|
HAL_GPIO_WritePin(GPIOA, DBG2_Pin|DBG3_Pin|RELAY_CC_Pin, GPIO_PIN_RESET);
|
||||||
@@ -54,12 +69,12 @@ void MX_GPIO_Init(void)
|
|||||||
/*Configure GPIO pin Output Level */
|
/*Configure GPIO pin Output Level */
|
||||||
HAL_GPIO_WritePin(GPIOD, RELAY_DC_Pin|USART2_DIR_Pin, GPIO_PIN_RESET);
|
HAL_GPIO_WritePin(GPIOD, RELAY_DC_Pin|USART2_DIR_Pin, GPIO_PIN_RESET);
|
||||||
|
|
||||||
/*Configure GPIO pins : DBG1_Pin LED_DATA_Pin */
|
/*Configure GPIO pin : DBG1_Pin */
|
||||||
GPIO_InitStruct.Pin = DBG1_Pin|LED_DATA_Pin;
|
GPIO_InitStruct.Pin = DBG1_Pin;
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
||||||
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
HAL_GPIO_Init(DBG1_GPIO_Port, &GPIO_InitStruct);
|
||||||
|
|
||||||
/*Configure GPIO pins : RELAY_CP_Pin LOCK_A_Pin LOCK_B_Pin */
|
/*Configure GPIO pins : RELAY_CP_Pin LOCK_A_Pin LOCK_B_Pin */
|
||||||
GPIO_InitStruct.Pin = RELAY_CP_Pin|LOCK_A_Pin|LOCK_B_Pin;
|
GPIO_InitStruct.Pin = RELAY_CP_Pin|LOCK_A_Pin|LOCK_B_Pin;
|
||||||
|
|||||||
+17
-49
@@ -1,5 +1,4 @@
|
|||||||
/* USER CODE BEGIN Header */
|
/* USER CODE BEGIN Header */
|
||||||
|
|
||||||
/* USER CODE END Header */
|
/* USER CODE END Header */
|
||||||
/* Includes ------------------------------------------------------------------*/
|
/* Includes ------------------------------------------------------------------*/
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
@@ -14,17 +13,15 @@
|
|||||||
|
|
||||||
/* Private includes ----------------------------------------------------------*/
|
/* Private includes ----------------------------------------------------------*/
|
||||||
/* USER CODE BEGIN Includes */
|
/* USER CODE BEGIN Includes */
|
||||||
|
#include "can.h"
|
||||||
#include "board.h"
|
#include "board.h"
|
||||||
#include "charger_config.h"
|
|
||||||
#include "connector.h"
|
|
||||||
#include "debug.h"
|
|
||||||
#include "meter.h"
|
|
||||||
#include "psu_control.h"
|
|
||||||
#include "rgb_controller.h"
|
|
||||||
#include "serial.h"
|
|
||||||
#include "serial_control.h"
|
|
||||||
#include "soft_rtc.h"
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include "debug.h"
|
||||||
|
#include "soft_rtc.h"
|
||||||
|
#include "connector.h"
|
||||||
|
#include "serial_control.h"
|
||||||
|
#include "charger_config.h"
|
||||||
|
#include "serial.h"
|
||||||
/* USER CODE END Includes */
|
/* USER CODE END Includes */
|
||||||
|
|
||||||
/* Private typedef -----------------------------------------------------------*/
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
@@ -56,7 +53,6 @@ void SystemClock_Config(void);
|
|||||||
|
|
||||||
/* Private user code ---------------------------------------------------------*/
|
/* Private user code ---------------------------------------------------------*/
|
||||||
/* USER CODE BEGIN 0 */
|
/* USER CODE BEGIN 0 */
|
||||||
static void StopButtonControl(void);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Vector base address configuration. It should no longer be at the start of
|
* @brief Vector base address configuration. It should no longer be at the start of
|
||||||
@@ -101,54 +97,24 @@ void ED_Delay(uint32_t Delay)
|
|||||||
|
|
||||||
while ((HAL_GetTick() - tickstart) < wait){
|
while ((HAL_GetTick() - tickstart) < wait){
|
||||||
CCS_SerialLoop();
|
CCS_SerialLoop();
|
||||||
StopButtonControl();
|
// CP_Loop();
|
||||||
CP_Loop();
|
CONN_Task();
|
||||||
LED_Task();
|
LED_Task();
|
||||||
SC_Task();
|
SC_Task();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void StopButtonControl(void){
|
void StopButtonControl(){
|
||||||
static uint32_t tick;
|
|
||||||
static uint32_t hold_time;
|
|
||||||
static uint8_t stop_btn_fault = 1;
|
|
||||||
uint32_t now = HAL_GetTick();
|
|
||||||
|
|
||||||
/* Run no faster than once per 10 ms. */
|
//Charging do nothing
|
||||||
if((now - tick) < 10){
|
if(!IN_ReadInput(IN_ESTOP)){
|
||||||
return;
|
CONN.connControl = CMD_STOP;
|
||||||
}
|
|
||||||
tick = now;
|
|
||||||
|
|
||||||
uint8_t pressed = !IN_ReadInput(IN_ESTOP);
|
|
||||||
if(!pressed){
|
|
||||||
stop_btn_fault = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(stop_btn_fault){
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(pressed){
|
|
||||||
if(hold_time == 0){
|
|
||||||
CONN.connControl = CMD_STOP;
|
|
||||||
}
|
|
||||||
hold_time += 10;
|
|
||||||
if(hold_time == 5000){
|
|
||||||
CONN.connControl = CMD_FORCE_UNLOCK;
|
|
||||||
}
|
|
||||||
if(hold_time > 40000){
|
|
||||||
SC_SendPacket(NULL, 0, RESP_SUCCESS);
|
|
||||||
while(huart2.gState == HAL_UART_STATE_BUSY_TX);
|
|
||||||
HAL_Delay(10);
|
|
||||||
NVIC_SystemReset();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
hold_time = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t temp0, temp1;
|
||||||
|
|
||||||
static void CAN1_MinimalReInit(void)
|
static void CAN1_MinimalReInit(void)
|
||||||
{
|
{
|
||||||
HAL_CAN_Stop(&hcan1);
|
HAL_CAN_Stop(&hcan1);
|
||||||
@@ -239,6 +205,8 @@ int main(void)
|
|||||||
CONN_Loop();
|
CONN_Loop();
|
||||||
LED_Write();
|
LED_Write();
|
||||||
ED_Delay(10);
|
ED_Delay(10);
|
||||||
|
StopButtonControl();
|
||||||
|
ED_Delay(50);
|
||||||
|
|
||||||
}
|
}
|
||||||
/* USER CODE END 3 */
|
/* USER CODE END 3 */
|
||||||
|
|||||||
+9
-1
@@ -1,5 +1,13 @@
|
|||||||
#include "meter.h"
|
/*
|
||||||
|
* meter.c
|
||||||
|
*
|
||||||
|
* Created on: 27 сент. 2024 г.
|
||||||
|
* Author: root
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "meter.h"
|
||||||
|
#include "charger_config.h"
|
||||||
#include "charger_control.h"
|
#include "charger_control.h"
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,196 +0,0 @@
|
|||||||
#include "power_setpoint_executor.h"
|
|
||||||
|
|
||||||
#include "charger_config.h"
|
|
||||||
#include "charger_control.h"
|
|
||||||
#include "debug.h"
|
|
||||||
#include "psu_control.h"
|
|
||||||
#include "serial.h"
|
|
||||||
|
|
||||||
static PowerSetpoint_t applied;
|
|
||||||
static PowerSetpoint_t pending;
|
|
||||||
static PowerSetpoint_t fd_target;
|
|
||||||
static uint8_t setpoint_dirty;
|
|
||||||
static uint8_t fd_active;
|
|
||||||
static uint8_t power_delivery_latched;
|
|
||||||
static uint8_t fast_discharge_count;
|
|
||||||
static uint32_t last_fast_discharge_ms;
|
|
||||||
static uint32_t measured_high_current_since_ms;
|
|
||||||
|
|
||||||
static uint8_t session_ended_state(CONN_State_t state)
|
|
||||||
{
|
|
||||||
return (state == Unknown) || (state == Unplugged) || (state == Finished) ||
|
|
||||||
(state == FinishedEV) || (state == FinishedEVSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
void PowerSetpoint_Init(void)
|
|
||||||
{
|
|
||||||
applied.voltage_V = PSU_MIN_VOLTAGE;
|
|
||||||
applied.current_0p1A = 0u;
|
|
||||||
pending = applied;
|
|
||||||
fd_target = applied;
|
|
||||||
setpoint_dirty = 0u;
|
|
||||||
fd_active = 0u;
|
|
||||||
power_delivery_latched = 0u;
|
|
||||||
fast_discharge_count = 0u;
|
|
||||||
last_fast_discharge_ms = 0u;
|
|
||||||
measured_high_current_since_ms = 0u;
|
|
||||||
}
|
|
||||||
|
|
||||||
void PowerSetpoint_OnCommand(uint16_t voltage_V, uint16_t current_0p1A)
|
|
||||||
{
|
|
||||||
#if PSD_ENABLE
|
|
||||||
pending.voltage_V = voltage_V;
|
|
||||||
pending.current_0p1A = current_0p1A;
|
|
||||||
setpoint_dirty = 1u;
|
|
||||||
#else
|
|
||||||
(void)voltage_V;
|
|
||||||
(void)current_0p1A;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void PowerSetpoint_UpdateDeliveryLatch(void)
|
|
||||||
{
|
|
||||||
#if PSD_ENABLE
|
|
||||||
uint32_t now = HAL_GetTick();
|
|
||||||
|
|
||||||
if (!CONN.EnableOutput || !CONN.EvConnected || session_ended_state(CCS_EvseState)) {
|
|
||||||
power_delivery_latched = 0u;
|
|
||||||
fast_discharge_count = 0u;
|
|
||||||
last_fast_discharge_ms = 0u;
|
|
||||||
measured_high_current_since_ms = 0u;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (CONN.WantedCurrent > PSD_MAX_CMD_CURRENT_0P1A) {
|
|
||||||
power_delivery_latched = 1u;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (CCS_EvseState == Charging) {
|
|
||||||
power_delivery_latched = 1u;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (CONN.MeasuredCurrent >= PSD_MAX_MEASURED_CURRENT_0P1A) {
|
|
||||||
if (measured_high_current_since_ms == 0u) {
|
|
||||||
measured_high_current_since_ms = now;
|
|
||||||
} else if ((now - measured_high_current_since_ms) >= PSD_MEASURED_LATCH_MS) {
|
|
||||||
power_delivery_latched = 1u;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
measured_high_current_since_ms = 0u;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t PowerSetpoint_HasPending(void)
|
|
||||||
{
|
|
||||||
#if PSD_ENABLE
|
|
||||||
return setpoint_dirty;
|
|
||||||
#else
|
|
||||||
return 0u;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t PowerSetpoint_IsBusy(void)
|
|
||||||
{
|
|
||||||
#if PSD_ENABLE
|
|
||||||
if (!fd_active) {
|
|
||||||
return 0u;
|
|
||||||
}
|
|
||||||
switch (PSU0.state) {
|
|
||||||
case PSU_FAST_DISCHARGE_OFF:
|
|
||||||
case PSU_FAST_DISCHARGE_WAIT:
|
|
||||||
case PSU_FAST_DISCHARGE_SET:
|
|
||||||
case PSU_FAST_DISCHARGE_ON:
|
|
||||||
case PSU_FAST_DISCHARGE_ON_WAIT:
|
|
||||||
return 1u;
|
|
||||||
default:
|
|
||||||
return 0u;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
return 0u;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static PowerPathContext_t build_context(void)
|
|
||||||
{
|
|
||||||
PowerPathContext_t ctx;
|
|
||||||
|
|
||||||
ctx.dc_contactor_closed = PSU0.CONT_enabled;
|
|
||||||
ctx.psu_hv_enabled = PSU0.PSU_enabled;
|
|
||||||
ctx.measured_voltage_V = CONN.MeasuredVoltage;
|
|
||||||
ctx.measured_current_0p1A = (uint16_t)CONN.MeasuredCurrent;
|
|
||||||
ctx.power_delivery_active = power_delivery_latched;
|
|
||||||
ctx.enable_output = CONN.EnableOutput;
|
|
||||||
ctx.psu_state_connected = (PSU0.state == PSU_CONNECTED) ? 1u : 0u;
|
|
||||||
ctx.psu_cont_fault = PSU0.cont_fault;
|
|
||||||
ctx.psu_fault = PSU0.psu_fault;
|
|
||||||
ctx.fast_discharge_count = fast_discharge_count;
|
|
||||||
ctx.last_fast_discharge_ms = last_fast_discharge_ms;
|
|
||||||
ctx.now_ms = HAL_GetTick();
|
|
||||||
return ctx;
|
|
||||||
}
|
|
||||||
|
|
||||||
PowerSetpointTryResult_t PowerSetpoint_TryApply(void)
|
|
||||||
{
|
|
||||||
#if PSD_ENABLE
|
|
||||||
PowerPathContext_t ctx;
|
|
||||||
PowerSetpointAction_t action;
|
|
||||||
|
|
||||||
if (!setpoint_dirty || fd_active) {
|
|
||||||
return PSD_TRY_IDLE;
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx = build_context();
|
|
||||||
action = PowerSetpoint_Decide(&applied, &pending, &ctx);
|
|
||||||
|
|
||||||
if (action == POWER_SETPOINT_FAST_DISCHARGE) {
|
|
||||||
fd_target = pending;
|
|
||||||
fd_active = 1u;
|
|
||||||
setpoint_dirty = 0u;
|
|
||||||
log_printf(LOG_INFO, "Fast discharge trigger %u->%u I=%u\n",
|
|
||||||
(unsigned)applied.voltage_V,
|
|
||||||
(unsigned)fd_target.voltage_V,
|
|
||||||
(unsigned)fd_target.current_0p1A);
|
|
||||||
return PSD_TRY_START_FAST_DISCHARGE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!PSU0.ready) {
|
|
||||||
return PSD_TRY_IDLE;
|
|
||||||
}
|
|
||||||
|
|
||||||
PSU_SetVoltageCurrent(0, pending.voltage_V, pending.current_0p1A);
|
|
||||||
applied = pending;
|
|
||||||
setpoint_dirty = 0u;
|
|
||||||
return PSD_TRY_APPLIED_NORMAL;
|
|
||||||
#else
|
|
||||||
return PSD_TRY_IDLE;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void PowerSetpoint_GetFastDischargeTarget(PowerSetpoint_t *target)
|
|
||||||
{
|
|
||||||
if (target != 0) {
|
|
||||||
*target = fd_target;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void PowerSetpoint_OnFastDischargeComplete(void)
|
|
||||||
{
|
|
||||||
#if PSD_ENABLE
|
|
||||||
applied = fd_target;
|
|
||||||
fd_active = 0u;
|
|
||||||
fast_discharge_count++;
|
|
||||||
last_fast_discharge_ms = HAL_GetTick();
|
|
||||||
log_printf(LOG_INFO, "Fast discharge complete, V=%u\n", (unsigned)CONN.MeasuredVoltage);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void PowerSetpoint_OnFastDischargeAbort(void)
|
|
||||||
{
|
|
||||||
#if PSD_ENABLE
|
|
||||||
fd_active = 0u;
|
|
||||||
pending = fd_target;
|
|
||||||
setpoint_dirty = 1u;
|
|
||||||
log_printf(LOG_WARN, "Fast discharge aborted, V=%u\n", (unsigned)CONN.MeasuredVoltage);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
@@ -1,77 +0,0 @@
|
|||||||
#include "power_setpoint_policy.h"
|
|
||||||
|
|
||||||
PowerSetpointAction_t PowerSetpoint_Decide(
|
|
||||||
const PowerSetpoint_t *applied,
|
|
||||||
const PowerSetpoint_t *next,
|
|
||||||
const PowerPathContext_t *ctx)
|
|
||||||
{
|
|
||||||
#if !PSD_ENABLE
|
|
||||||
(void)applied;
|
|
||||||
(void)next;
|
|
||||||
(void)ctx;
|
|
||||||
return POWER_SETPOINT_NORMAL;
|
|
||||||
#else
|
|
||||||
uint16_t delta_v;
|
|
||||||
|
|
||||||
if (applied == 0 || next == 0 || ctx == 0) {
|
|
||||||
return POWER_SETPOINT_NORMAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (next->voltage_V >= applied->voltage_V) {
|
|
||||||
return POWER_SETPOINT_NORMAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
delta_v = (uint16_t)(applied->voltage_V - next->voltage_V);
|
|
||||||
if (delta_v < PSD_MIN_VOLTAGE_STEP_V) {
|
|
||||||
return POWER_SETPOINT_NORMAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (applied->current_0p1A > PSD_MAX_CMD_CURRENT_0P1A ||
|
|
||||||
next->current_0p1A > PSD_MAX_CMD_CURRENT_0P1A) {
|
|
||||||
return POWER_SETPOINT_NORMAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ctx->measured_current_0p1A >= PSD_MAX_MEASURED_CURRENT_0P1A) {
|
|
||||||
return POWER_SETPOINT_NORMAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ctx->measured_voltage_V <= (uint16_t)(next->voltage_V + PSD_DISCHARGE_MARGIN_V)) {
|
|
||||||
return POWER_SETPOINT_NORMAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ctx->power_delivery_active) {
|
|
||||||
return POWER_SETPOINT_NORMAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!ctx->enable_output) {
|
|
||||||
return POWER_SETPOINT_NORMAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!ctx->psu_state_connected) {
|
|
||||||
return POWER_SETPOINT_NORMAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!ctx->dc_contactor_closed) {
|
|
||||||
return POWER_SETPOINT_NORMAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!ctx->psu_hv_enabled) {
|
|
||||||
return POWER_SETPOINT_NORMAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ctx->psu_cont_fault || ctx->psu_fault) {
|
|
||||||
return POWER_SETPOINT_NORMAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ctx->fast_discharge_count >= PSD_MAX_PER_SESSION) {
|
|
||||||
return POWER_SETPOINT_NORMAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ctx->last_fast_discharge_ms != 0u &&
|
|
||||||
(ctx->now_ms - ctx->last_fast_discharge_ms) < PSD_DEBOUNCE_MS) {
|
|
||||||
return POWER_SETPOINT_NORMAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return POWER_SETPOINT_FAST_DISCHARGE;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
+24
-311
@@ -1,14 +1,14 @@
|
|||||||
#include "psu_control.h"
|
|
||||||
|
|
||||||
#include "board.h"
|
#include <psu_control.h>
|
||||||
|
|
||||||
#include "can.h"
|
#include "can.h"
|
||||||
|
#include "string.h"
|
||||||
|
#include "stdio.h"
|
||||||
#include "charger_config.h"
|
#include "charger_config.h"
|
||||||
#include "charger_control.h"
|
#include "charger_control.h"
|
||||||
|
#include "board.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "isr_opt.h"
|
#include "isr_opt.h"
|
||||||
#include "power_setpoint_executor.h"
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
PSU_02_t PSU_02;
|
PSU_02_t PSU_02;
|
||||||
PSU_04_t PSU_04;
|
PSU_04_t PSU_04;
|
||||||
@@ -26,165 +26,12 @@ PSU_t PSU0;
|
|||||||
#define PSU_VOLTAGE_THRESHOLD 20 // Порог напряжения для определения состояния (В)
|
#define PSU_VOLTAGE_THRESHOLD 20 // Порог напряжения для определения состояния (В)
|
||||||
#define PSU_ONLINE_TIMEOUT 500 // Таймаут для определения состояния (мс)
|
#define PSU_ONLINE_TIMEOUT 500 // Таймаут для определения состояния (мс)
|
||||||
#define PSU_STARTUP_DELAY 4000 // Задержка 2 секунды перед включением
|
#define PSU_STARTUP_DELAY 4000 // Задержка 2 секунды перед включением
|
||||||
#define PSU_DIAG_LOG_MS 2000u
|
|
||||||
|
|
||||||
uint32_t can_lastpacket;
|
uint32_t can_lastpacket;
|
||||||
|
|
||||||
extern CAN_HandleTypeDef hcan2;
|
extern CAN_HandleTypeDef hcan2;
|
||||||
|
|
||||||
static uint16_t psu_last_can_v;
|
|
||||||
static uint16_t psu_last_can_i_0p1A;
|
|
||||||
|
|
||||||
static void PSU_SendCmd(uint8_t source, uint8_t destination, uint8_t cmd, void *data);
|
|
||||||
|
|
||||||
static const char *PSU_StateName(PSU_State_t state)
|
|
||||||
{
|
|
||||||
switch (state) {
|
|
||||||
case PSU_UNREADY: return "UNREADY";
|
|
||||||
case PSU_INITIALIZING: return "INIT";
|
|
||||||
case PSU_READY: return "READY";
|
|
||||||
case PSU_WAIT_ACK_ON: return "WAIT_ON";
|
|
||||||
case PSU_CONT_WAIT_ACK_ON: return "CONT_ON";
|
|
||||||
case PSU_CONNECTED: return "CONNECTED";
|
|
||||||
case PSU_FAST_DISCHARGE_OFF: return "FD_OFF";
|
|
||||||
case PSU_FAST_DISCHARGE_WAIT: return "FD_WAIT";
|
|
||||||
case PSU_FAST_DISCHARGE_SET: return "FD_SET";
|
|
||||||
case PSU_FAST_DISCHARGE_ON: return "FD_ON";
|
|
||||||
case PSU_FAST_DISCHARGE_ON_WAIT: return "FD_ON_WAIT";
|
|
||||||
case PSU_CURRENT_DROP: return "CUR_DROP";
|
|
||||||
case PSU_CONT_WAIT_ACK_OFF: return "CONT_OFF";
|
|
||||||
case PSU_WAIT_ACK_OFF: return "WAIT_OFF";
|
|
||||||
case PSU_OFF_PAUSE: return "OFF_PAUSE";
|
|
||||||
default: return "?";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void PSU_LogPeriodicDiag(void)
|
|
||||||
{
|
|
||||||
static uint32_t last_log_ms;
|
|
||||||
uint32_t now = HAL_GetTick();
|
|
||||||
uint8_t block_setpoint;
|
|
||||||
|
|
||||||
if ((now - last_log_ms) < PSU_DIAG_LOG_MS) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
last_log_ms = now;
|
|
||||||
|
|
||||||
#if PSD_ENABLE
|
|
||||||
block_setpoint = PowerSetpoint_HasPending() || PowerSetpoint_IsBusy();
|
|
||||||
#else
|
|
||||||
block_setpoint = 0u;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
log_printf(LOG_INFO,
|
|
||||||
"PSU diag st=%s req=%uV/%u.%uA want=%uV/%u.%uA "
|
|
||||||
"can=%uV/%u.%uA meas=%uV/%d.%uA "
|
|
||||||
"enOut=%u out=%u rdy=%u on=%u cont=%u ac=%u hv=%u psd_blk=%u "
|
|
||||||
"err=%u s0=0x%02x s1=0x%02x s2=0x%02x can_age=%lums\n",
|
|
||||||
PSU_StateName(PSU0.state),
|
|
||||||
(unsigned)CONN.RequestedVoltage,
|
|
||||||
(unsigned)(CONN.RequestedCurrent / 10u),
|
|
||||||
(unsigned)(CONN.RequestedCurrent % 10u),
|
|
||||||
(unsigned)CONN.RequestedVoltage,
|
|
||||||
(unsigned)(CONN.WantedCurrent / 10u),
|
|
||||||
(unsigned)(CONN.WantedCurrent % 10u),
|
|
||||||
(unsigned)psu_last_can_v,
|
|
||||||
(unsigned)(psu_last_can_i_0p1A / 10u),
|
|
||||||
(unsigned)(psu_last_can_i_0p1A % 10u),
|
|
||||||
(unsigned)CONN.MeasuredVoltage,
|
|
||||||
(int)(CONN.MeasuredCurrent / 10),
|
|
||||||
(unsigned)(((CONN.MeasuredCurrent < 0) ?
|
|
||||||
-CONN.MeasuredCurrent : CONN.MeasuredCurrent) % 10),
|
|
||||||
(unsigned)CONN.EnableOutput,
|
|
||||||
(unsigned)CONN.outputEnabled,
|
|
||||||
(unsigned)PSU0.ready,
|
|
||||||
(unsigned)PSU0.PSU_enabled,
|
|
||||||
(unsigned)PSU0.CONT_enabled,
|
|
||||||
(unsigned)PSU0.enableAC,
|
|
||||||
(unsigned)CONN.hv_limit,
|
|
||||||
(unsigned)block_setpoint,
|
|
||||||
(unsigned)CONN.chargingError,
|
|
||||||
(unsigned)PSU0.status0.raw,
|
|
||||||
(unsigned)PSU0.status1.raw,
|
|
||||||
(unsigned)PSU0.status2.raw,
|
|
||||||
(unsigned long)(can_lastpacket ? (now - can_lastpacket) : 9999u));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void PSU_HvControl(void)
|
|
||||||
{
|
|
||||||
if (CONN.EnableOutput == 0u) {
|
|
||||||
if ((CONN.hv_limit != 0u) || (CONN.hv_limit_count != 0u)) {
|
|
||||||
log_printf(LOG_INFO, "HV limit reset output off\n");
|
|
||||||
}
|
|
||||||
CONN.hv_limit = 0u;
|
|
||||||
CONN.hv_tick = 0u;
|
|
||||||
CONN.hv_limit_count = 0u;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!PSU0.online) {
|
|
||||||
if ((CONN.hv_limit != 0u) || (CONN.hv_limit_count != 0u)) {
|
|
||||||
log_printf(LOG_INFO, "HV limit reset no PSU\n");
|
|
||||||
}
|
|
||||||
CONN.hv_limit = 0u;
|
|
||||||
CONN.hv_tick = 0u;
|
|
||||||
CONN.hv_limit_count = 0u;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (CONN.hv_limit == 0u) {
|
|
||||||
if ((CONN.hv_limit_count < PSU_HV_LIMIT_MAX_COUNT) &&
|
|
||||||
(CONN.MeasuredVoltage < PSU_HV_LIMIT_ON_THRESHOLD) &&
|
|
||||||
(CONN.MeasuredCurrent > PSU_HV_LOAD_CURRENT)) {
|
|
||||||
if (CONN.hv_tick == 0u) {
|
|
||||||
CONN.hv_tick = HAL_GetTick();
|
|
||||||
} else if ((HAL_GetTick() - CONN.hv_tick) >= PSU_HV_SWITCH_DELAY_MS) {
|
|
||||||
CONN.hv_limit = 1u;
|
|
||||||
CONN.hv_limit_count++;
|
|
||||||
CONN.hv_tick = 0u;
|
|
||||||
log_printf(LOG_WARN, "HV limit ON V=%d I=%d cnt=%d\n",
|
|
||||||
(int)CONN.MeasuredVoltage,
|
|
||||||
(int)CONN.MeasuredCurrent,
|
|
||||||
(int)CONN.hv_limit_count);
|
|
||||||
if (CONN.hv_limit_count >= PSU_HV_LIMIT_MAX_COUNT) {
|
|
||||||
log_printf(LOG_WARN, "HV limit locked cnt=%d\n",
|
|
||||||
(int)CONN.hv_limit_count);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
CONN.hv_tick = 0u;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if ((CONN.MeasuredVoltage > PSU_HV_LIMIT_OFF_THRESHOLD) ||
|
|
||||||
(CONN.MeasuredCurrent <= PSU_HV_LOAD_CURRENT)) {
|
|
||||||
if (CONN.hv_tick == 0u) {
|
|
||||||
CONN.hv_tick = HAL_GetTick();
|
|
||||||
} else if ((HAL_GetTick() - CONN.hv_tick) >= PSU_HV_SWITCH_DELAY_MS) {
|
|
||||||
CONN.hv_limit = 0u;
|
|
||||||
CONN.hv_tick = 0u;
|
|
||||||
log_printf(LOG_INFO, "HV limit OFF V=%d I=%d cnt=%d\n",
|
|
||||||
(int)CONN.MeasuredVoltage,
|
|
||||||
(int)CONN.MeasuredCurrent,
|
|
||||||
(int)CONN.hv_limit_count);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
CONN.hv_tick = 0u;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void PSU_SwitchState(PSU_State_t state){
|
static void PSU_SwitchState(PSU_State_t state){
|
||||||
if (PSU0.state != state) {
|
|
||||||
log_printf(LOG_INFO,
|
|
||||||
"PSU st %s->%s enOut=%u rdy=%u on=%u cont=%u err=%u\n",
|
|
||||||
PSU_StateName(PSU0.state),
|
|
||||||
PSU_StateName(state),
|
|
||||||
(unsigned)CONN.EnableOutput,
|
|
||||||
(unsigned)PSU0.ready,
|
|
||||||
(unsigned)PSU0.PSU_enabled,
|
|
||||||
(unsigned)PSU0.CONT_enabled,
|
|
||||||
(unsigned)CONN.chargingError);
|
|
||||||
}
|
|
||||||
PSU0.state = state;
|
PSU0.state = state;
|
||||||
PSU0.statetick = HAL_GetTick();
|
PSU0.statetick = HAL_GetTick();
|
||||||
}
|
}
|
||||||
@@ -193,24 +40,6 @@ static uint32_t PSU_StateTime(void){
|
|||||||
return HAL_GetTick() - PSU0.statetick;
|
return HAL_GetTick() - PSU0.statetick;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void PSU_FastDischarge_PushTarget(void)
|
|
||||||
{
|
|
||||||
PowerSetpoint_t fd_sp;
|
|
||||||
|
|
||||||
PowerSetpoint_GetFastDischargeTarget(&fd_sp);
|
|
||||||
PSU_SetVoltageCurrent(0, fd_sp.voltage_V, fd_sp.current_0p1A);
|
|
||||||
PSU_Enable(0, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void PSU_FastDischarge_AbortToConnected(void)
|
|
||||||
{
|
|
||||||
PowerSetpoint_OnFastDischargeAbort();
|
|
||||||
if (!PSU0.PSU_enabled) {
|
|
||||||
PSU_FastDischarge_PushTarget();
|
|
||||||
}
|
|
||||||
PSU_SwitchState(PSU_CONNECTED);
|
|
||||||
}
|
|
||||||
|
|
||||||
ISR_FAST void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef *hcan){
|
ISR_FAST void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef *hcan){
|
||||||
|
|
||||||
static CAN_RxHeaderTypeDef RxHeader;
|
static CAN_RxHeaderTypeDef RxHeader;
|
||||||
@@ -320,9 +149,9 @@ void PSU_Init(){
|
|||||||
PSU0.statetick = HAL_GetTick();
|
PSU0.statetick = HAL_GetTick();
|
||||||
|
|
||||||
PSU0.power_limit = PSU_MAX_POWER; // kW
|
PSU0.power_limit = PSU_MAX_POWER; // kW
|
||||||
|
PSU0.hv_mode = 0;
|
||||||
|
|
||||||
PSU_Enable(0, 0);
|
PSU_Enable(0, 0);
|
||||||
PowerSetpoint_Init();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PSU_Enable(uint8_t addr, uint8_t enable){
|
void PSU_Enable(uint8_t addr, uint8_t enable){
|
||||||
@@ -352,9 +181,7 @@ void PSU_SetVoltageCurrent(uint8_t addr, uint16_t voltage, uint16_t current){
|
|||||||
|
|
||||||
if(voltage<PSU_MIN_VOLTAGE) voltage = PSU_MIN_VOLTAGE;
|
if(voltage<PSU_MIN_VOLTAGE) voltage = PSU_MIN_VOLTAGE;
|
||||||
|
|
||||||
if((CONN.hv_limit != 0u) && (voltage > PSU_LV_CLAMP_V)){
|
if((PSU0.hv_mode==0) && voltage>499) voltage = 499;
|
||||||
voltage = PSU_LV_CLAMP_V;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t current_ma = current * 100;
|
uint32_t current_ma = current * 100;
|
||||||
uint32_t voltage_mv = voltage * 1000;
|
uint32_t voltage_mv = voltage * 1000;
|
||||||
@@ -369,8 +196,6 @@ void PSU_SetVoltageCurrent(uint8_t addr, uint16_t voltage, uint16_t current){
|
|||||||
data.moduleVoltage[2] = (voltage_mv >> 8) & 0xFF;
|
data.moduleVoltage[2] = (voltage_mv >> 8) & 0xFF;
|
||||||
data.moduleVoltage[3] = (voltage_mv >> 0) & 0xFF;
|
data.moduleVoltage[3] = (voltage_mv >> 0) & 0xFF;
|
||||||
|
|
||||||
psu_last_can_v = voltage;
|
|
||||||
psu_last_can_i_0p1A = current;
|
|
||||||
PSU_SendCmd(0xF0, addr, 0x1C, &data);
|
PSU_SendCmd(0xF0, addr, 0x1C, &data);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -401,6 +226,7 @@ void PSU_SendCmd(uint8_t source, uint8_t destination, uint8_t cmd, void *data){
|
|||||||
/* если отправка удалась, выход */
|
/* если отправка удалась, выход */
|
||||||
if(CAN_result == HAL_OK) {
|
if(CAN_result == HAL_OK) {
|
||||||
return;
|
return;
|
||||||
|
retry_counter = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ED_Delay(1);
|
ED_Delay(1);
|
||||||
@@ -410,6 +236,11 @@ void PSU_SendCmd(uint8_t source, uint8_t destination, uint8_t cmd, void *data){
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t max(uint32_t a, uint32_t b){
|
||||||
|
if(a>b) return a;
|
||||||
|
else return b;
|
||||||
|
}
|
||||||
|
|
||||||
void PSU_ReadWrite(){
|
void PSU_ReadWrite(){
|
||||||
|
|
||||||
uint8_t zero_data[8] = {0,0,0,0,0,0,0,0};
|
uint8_t zero_data[8] = {0,0,0,0,0,0,0,0};
|
||||||
@@ -431,50 +262,28 @@ void PSU_ReadWrite(){
|
|||||||
}
|
}
|
||||||
CONN.RequestedPower = CONN.RequestedCurrent * CONN.RequestedVoltage / 10;
|
CONN.RequestedPower = CONN.RequestedCurrent * CONN.RequestedVoltage / 10;
|
||||||
|
|
||||||
#if PSD_ENABLE
|
if(PSU0.ready){
|
||||||
{
|
if (CONN.RequestedVoltage == 500) { // fake
|
||||||
uint8_t block_setpoint = PowerSetpoint_HasPending() || PowerSetpoint_IsBusy();
|
PSU_SetVoltageCurrent(0, 300, 10); // Normal mode
|
||||||
|
}else{
|
||||||
if (PSU0.ready && !block_setpoint) {
|
PSU_SetVoltageCurrent(0, CONN.RequestedVoltage, CONN.RequestedCurrent); // Normal mode
|
||||||
PSU_SetVoltageCurrent(0, CONN.RequestedVoltage, CONN.RequestedCurrent);
|
|
||||||
ED_Delay(CAN_DELAY);
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
#else
|
|
||||||
if (PSU0.ready) {
|
|
||||||
PSU_SetVoltageCurrent(0, CONN.RequestedVoltage, CONN.RequestedCurrent); // Normal mode
|
|
||||||
ED_Delay(CAN_DELAY);
|
ED_Delay(CAN_DELAY);
|
||||||
|
if(CONN.MeasuredVoltage>490) PSU0.hv_mode = 1;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
if (PSU0.ready) {
|
// PSU_SetHVMode(0, PSU0.hv_mode); // auto set, no need
|
||||||
PSU_HvControl();
|
// ED_Delay(CAN_DELAY);
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PSU_Task(void){
|
void PSU_Task(void){
|
||||||
static uint32_t psu_on_tick = 0;
|
static uint32_t psu_on_tick = 0;
|
||||||
|
static uint32_t dc_on_tick = 0;
|
||||||
static uint32_t cont_ok_tick = 0;
|
static uint32_t cont_ok_tick = 0;
|
||||||
static uint32_t fd_on_last_cmd_ms = 0;
|
|
||||||
PowerSetpointTryResult_t psd_result;
|
|
||||||
|
|
||||||
#if PSD_ENABLE
|
|
||||||
PowerSetpoint_UpdateDeliveryLatch();
|
|
||||||
if (PowerSetpoint_HasPending()) {
|
|
||||||
psd_result = PowerSetpoint_TryApply();
|
|
||||||
if (psd_result == PSD_TRY_START_FAST_DISCHARGE) {
|
|
||||||
PSU_SwitchState(PSU_FAST_DISCHARGE_OFF);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Обновляем ONLINE/READY по таймауту
|
// Обновляем ONLINE/READY по таймауту
|
||||||
if((HAL_GetTick() - can_lastpacket) > PSU_ONLINE_TIMEOUT){
|
if((HAL_GetTick() - can_lastpacket) > PSU_ONLINE_TIMEOUT){
|
||||||
if (PSU0.online) {
|
|
||||||
log_printf(LOG_WARN, "PSU CAN timeout age=%lums -> offline\n",
|
|
||||||
(unsigned long)(HAL_GetTick() - can_lastpacket));
|
|
||||||
}
|
|
||||||
PSU0.online = 0;
|
PSU0.online = 0;
|
||||||
PSU0.PSU_enabled = 0;
|
PSU0.PSU_enabled = 0;
|
||||||
PSU_04.moduleTemperature = 0;
|
PSU_04.moduleTemperature = 0;
|
||||||
@@ -533,9 +342,7 @@ void PSU_Task(void){
|
|||||||
|
|
||||||
case PSU_READY:
|
case PSU_READY:
|
||||||
// модуль готов, но выключен
|
// модуль готов, но выключен
|
||||||
CONN.hv_limit = 0u;
|
PSU0.hv_mode = 0;
|
||||||
CONN.hv_tick = 0u;
|
|
||||||
CONN.hv_limit_count = 0u;
|
|
||||||
|
|
||||||
RELAY_Write(RELAY_DC, 0);
|
RELAY_Write(RELAY_DC, 0);
|
||||||
if(!PSU0.ready){
|
if(!PSU0.ready){
|
||||||
@@ -551,6 +358,7 @@ void PSU_Task(void){
|
|||||||
case PSU_WAIT_ACK_ON:
|
case PSU_WAIT_ACK_ON:
|
||||||
|
|
||||||
if(PSU0.PSU_enabled && PSU0.ready){
|
if(PSU0.PSU_enabled && PSU0.ready){
|
||||||
|
dc_on_tick = HAL_GetTick();
|
||||||
PSU_SwitchState(PSU_CONT_WAIT_ACK_ON);
|
PSU_SwitchState(PSU_CONT_WAIT_ACK_ON);
|
||||||
}else if(PSU_StateTime() > 10000){
|
}else if(PSU_StateTime() > 10000){
|
||||||
PSU0.psu_fault = 1;
|
PSU0.psu_fault = 1;
|
||||||
@@ -592,99 +400,6 @@ void PSU_Task(void){
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PSU_FAST_DISCHARGE_OFF:
|
|
||||||
if (!CONN.EnableOutput || !PSU0.ready || PSU0.cont_fault || PSU0.psu_fault) {
|
|
||||||
log_printf(LOG_WARN, "Fast discharge abort -> stop\n");
|
|
||||||
PowerSetpoint_OnFastDischargeAbort();
|
|
||||||
PSU_SwitchState(PSU_CURRENT_DROP);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
PSU_Enable(0, 0);
|
|
||||||
PSU_SwitchState(PSU_FAST_DISCHARGE_WAIT);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PSU_FAST_DISCHARGE_WAIT: {
|
|
||||||
PowerSetpoint_t fd_sp;
|
|
||||||
|
|
||||||
if (!CONN.EnableOutput || !PSU0.ready || PSU0.cont_fault || PSU0.psu_fault) {
|
|
||||||
log_printf(LOG_WARN, "Fast discharge abort -> stop\n");
|
|
||||||
PowerSetpoint_OnFastDischargeAbort();
|
|
||||||
PSU_SwitchState(PSU_CURRENT_DROP);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Как PSU_WAIT_ACK_OFF: 0–20 V на телеметрии = модуль выключен */
|
|
||||||
if (!PSU0.PSU_enabled) {
|
|
||||||
PowerSetpoint_GetFastDischargeTarget(&fd_sp);
|
|
||||||
log_printf(LOG_INFO, "Fast discharge off ack, V=%u -> set %u\n",
|
|
||||||
(unsigned)CONN.MeasuredVoltage, (unsigned)fd_sp.voltage_V);
|
|
||||||
PSU_SwitchState(PSU_FAST_DISCHARGE_SET);
|
|
||||||
} else if (PSU_StateTime() > PSD_OFF_TIMEOUT_MS) {
|
|
||||||
log_printf(LOG_WARN, "Fast discharge off timeout, V=%u\n",
|
|
||||||
(unsigned)CONN.MeasuredVoltage);
|
|
||||||
PSU_FastDischarge_AbortToConnected();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case PSU_FAST_DISCHARGE_SET: {
|
|
||||||
PowerSetpoint_t fd_sp;
|
|
||||||
|
|
||||||
if (!CONN.EnableOutput || !PSU0.ready || PSU0.cont_fault || PSU0.psu_fault) {
|
|
||||||
log_printf(LOG_WARN, "Fast discharge abort -> stop\n");
|
|
||||||
PowerSetpoint_OnFastDischargeAbort();
|
|
||||||
PSU_SwitchState(PSU_CURRENT_DROP);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
PowerSetpoint_GetFastDischargeTarget(&fd_sp);
|
|
||||||
PSU_SetVoltageCurrent(0, fd_sp.voltage_V, fd_sp.current_0p1A);
|
|
||||||
PSU_SwitchState(PSU_FAST_DISCHARGE_ON);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case PSU_FAST_DISCHARGE_ON:
|
|
||||||
if (!CONN.EnableOutput || !PSU0.ready || PSU0.cont_fault || PSU0.psu_fault) {
|
|
||||||
log_printf(LOG_WARN, "Fast discharge abort -> stop\n");
|
|
||||||
PowerSetpoint_OnFastDischargeAbort();
|
|
||||||
PSU_SwitchState(PSU_CURRENT_DROP);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
PSU_Enable(0, 1);
|
|
||||||
fd_on_last_cmd_ms = HAL_GetTick();
|
|
||||||
PSU_SwitchState(PSU_FAST_DISCHARGE_ON_WAIT);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PSU_FAST_DISCHARGE_ON_WAIT: {
|
|
||||||
PowerSetpoint_t fd_sp;
|
|
||||||
uint16_t v_low;
|
|
||||||
|
|
||||||
if (!CONN.EnableOutput || !PSU0.ready || PSU0.cont_fault || PSU0.psu_fault) {
|
|
||||||
log_printf(LOG_WARN, "Fast discharge abort -> stop\n");
|
|
||||||
PowerSetpoint_OnFastDischargeAbort();
|
|
||||||
PSU_SwitchState(PSU_CURRENT_DROP);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
PowerSetpoint_GetFastDischargeTarget(&fd_sp);
|
|
||||||
v_low = (fd_sp.voltage_V > PSD_PRECHARGE_TOLERANCE_V) ?
|
|
||||||
(uint16_t)(fd_sp.voltage_V - PSD_PRECHARGE_TOLERANCE_V) : 0u;
|
|
||||||
|
|
||||||
if (PSU0.PSU_enabled && CONN.MeasuredVoltage >= v_low) {
|
|
||||||
PowerSetpoint_OnFastDischargeComplete();
|
|
||||||
PSU_SwitchState(PSU_CONNECTED);
|
|
||||||
} else {
|
|
||||||
if ((HAL_GetTick() - fd_on_last_cmd_ms) >= PSD_ON_RETRY_MS) {
|
|
||||||
PSU_FastDischarge_PushTarget();
|
|
||||||
fd_on_last_cmd_ms = HAL_GetTick();
|
|
||||||
}
|
|
||||||
if (PSU_StateTime() > PSD_ON_TIMEOUT_MS) {
|
|
||||||
log_printf(LOG_WARN, "Fast discharge on timeout, V=%u (target %u)\n",
|
|
||||||
(unsigned)CONN.MeasuredVoltage, (unsigned)fd_sp.voltage_V);
|
|
||||||
PSU_FastDischarge_AbortToConnected();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case PSU_CURRENT_DROP:
|
case PSU_CURRENT_DROP:
|
||||||
// снижаем ток до нуля перед отключением DC
|
// снижаем ток до нуля перед отключением DC
|
||||||
CONN.RequestedCurrent = 0;
|
CONN.RequestedCurrent = 0;
|
||||||
@@ -731,8 +446,6 @@ void PSU_Task(void){
|
|||||||
PSU_SwitchState(PSU_UNREADY);
|
PSU_SwitchState(PSU_UNREADY);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
PSU_LogPeriodicDiag();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+41
-183
@@ -1,39 +1,20 @@
|
|||||||
#include "rgb_controller.h"
|
#include "rgb_controller.h"
|
||||||
|
|
||||||
#include "board.h"
|
|
||||||
#include "charger_control.h"
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
|
#include "string.h"
|
||||||
|
#include "charger_control.h"
|
||||||
|
|
||||||
#include "tim.h"
|
#include "tim.h"
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
/* Второй светодиод в цепочке WS2812 */
|
|
||||||
static RGB_t ws2812_led1 = { .R = 0, .G = 0, .B = 0 };
|
|
||||||
|
|
||||||
#define WS2812_ERROR_BLINK_MS 100
|
|
||||||
#define WS2812_ERROR_BLINK_PAUSE 30
|
|
||||||
|
|
||||||
/* Яркость обоих WS2812 на плате, 0..255 */
|
|
||||||
#define WS2812_BRIGHTNESS 60
|
|
||||||
|
|
||||||
RGB_State_t LED_State;
|
RGB_State_t LED_State;
|
||||||
RGB_Cycle_t LED_Cycle;
|
RGB_Cycle_t LED_Cycle;
|
||||||
|
|
||||||
RGB_Cycle_t color_estop = {
|
RGB_Cycle_t color_estop = {
|
||||||
.Color1 = { .R = 250, .G = 0, .B = 0 },
|
.Color1 = { .R = 250, .G = 0, .B = 0 },
|
||||||
.Color2 = { .R = 0, .G = 0, .B = 0 },
|
.Color2 = { .R = 250, .G = 0, .B = 0 },
|
||||||
.Tr = 10,
|
.Tr = 50,
|
||||||
.Th = 5,
|
.Th = 50,
|
||||||
.Tf = 10,
|
.Tf = 50,
|
||||||
.Tl = 5,
|
.Tl = 50,
|
||||||
};
|
|
||||||
|
|
||||||
RGB_Cycle_t color_unlock = {
|
|
||||||
.Color1 = { .R = 255, .G = 0, .B = 0 },
|
|
||||||
.Color2 = { .R = 0, .G = 0, .B = 0 },
|
|
||||||
.Tr = 10,
|
|
||||||
.Th = 10,
|
|
||||||
.Tf = 10,
|
|
||||||
.Tl = 10,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
RGB_Cycle_t color_unknown = {
|
RGB_Cycle_t color_unknown = {
|
||||||
@@ -73,12 +54,12 @@ RGB_Cycle_t color_unplugged = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
RGB_Cycle_t color_preparing = {
|
RGB_Cycle_t color_preparing = {
|
||||||
.Color1 = { .R = 0, .G = 0, .B = 255 },
|
.Color1 = { .R = 0, .G = 0, .B = 250 },
|
||||||
.Color2 = { .R = 0, .G = 0, .B = 0 },
|
.Color2 = { .R = 0, .G = 0, .B = 250 },
|
||||||
.Tr = 10,
|
.Tr = 50,
|
||||||
.Th = 10,
|
.Th = 10,
|
||||||
.Tf = 10,
|
.Tf = 50,
|
||||||
.Tl = 10,
|
.Tl = 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
RGB_Cycle_t color_charging = {
|
RGB_Cycle_t color_charging = {
|
||||||
@@ -113,14 +94,6 @@ void LED_Write(){
|
|||||||
LED_SetColor(&color_error);
|
LED_SetColor(&color_error);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(CONN.connControl == CMD_FORCE_UNLOCK){
|
|
||||||
LED_SetColor(&color_unlock);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if(CONN.connControl == CMD_STOP){
|
|
||||||
LED_SetColor(&color_estop);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
switch(CONN.connState){
|
switch(CONN.connState){
|
||||||
case Unknown:
|
case Unknown:
|
||||||
LED_SetColor(&color_unknown);
|
LED_SetColor(&color_unknown);
|
||||||
@@ -188,147 +161,10 @@ void interpolateColors(RGB_t* color1, RGB_t* color2, uint16_t a, uint16_t b, RGB
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#pragma GCC push_options
|
|
||||||
#pragma GCC optimize("O2")
|
|
||||||
|
|
||||||
|
|
||||||
#define WS2812_T0H_NOP 25
|
|
||||||
#define WS2812_T0L_NOP 52
|
|
||||||
#define WS2812_T1H_NOP 52
|
|
||||||
#define WS2812_T1L_NOP 25
|
|
||||||
|
|
||||||
#define _WS2812_DELAY_NOPS(n) __asm volatile(".rept " #n "\nnop\n.endr" ::: "memory")
|
|
||||||
#define WS2812_DELAY_NOPS(n) _WS2812_DELAY_NOPS(n)
|
|
||||||
|
|
||||||
static void ws2812_send_pixel(uint8_t r, uint8_t g, uint8_t b)
|
|
||||||
{
|
|
||||||
uint32_t tmp = ~(((uint32_t)g << 16) | ((uint32_t)r << 8) | (uint32_t)b);
|
|
||||||
|
|
||||||
for (int i = 0; i < 24; i++) {
|
|
||||||
LED_DATA_GPIO_Port->BSRR = LED_DATA_Pin;
|
|
||||||
if (tmp & (1U << 23)) {
|
|
||||||
WS2812_DELAY_NOPS(WS2812_T0H_NOP);
|
|
||||||
LED_DATA_GPIO_Port->BRR = LED_DATA_Pin;
|
|
||||||
WS2812_DELAY_NOPS(WS2812_T0L_NOP);
|
|
||||||
} else {
|
|
||||||
WS2812_DELAY_NOPS(WS2812_T1H_NOP);
|
|
||||||
LED_DATA_GPIO_Port->BRR = LED_DATA_Pin;
|
|
||||||
WS2812_DELAY_NOPS(WS2812_T1L_NOP);
|
|
||||||
}
|
|
||||||
tmp <<= 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ws2812_update(RGB_t *led0, RGB_t *led1)
|
|
||||||
{
|
|
||||||
uint32_t primask = __get_PRIMASK();
|
|
||||||
|
|
||||||
__disable_irq();
|
|
||||||
ws2812_send_pixel(led0->R, led0->G, led0->B);
|
|
||||||
ws2812_send_pixel(led1->R, led1->G, led1->B);
|
|
||||||
__set_PRIMASK(primask);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma GCC pop_options
|
|
||||||
|
|
||||||
static RGB_t RGB_ScaleBrightness(const RGB_t *color)
|
|
||||||
{
|
|
||||||
RGB_t out = {
|
|
||||||
.R = (uint8_t)((uint16_t)color->R * WS2812_BRIGHTNESS / 255),
|
|
||||||
.G = (uint8_t)((uint16_t)color->G * WS2812_BRIGHTNESS / 255),
|
|
||||||
.B = (uint8_t)((uint16_t)color->B * WS2812_BRIGHTNESS / 255),
|
|
||||||
};
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Моргание красным на втором WS2812 при chargingError > 0.
|
|
||||||
* Логика как Slave-LB24 LED_Task: N вспышек = код ошибки, пауза 30×100 ms.
|
|
||||||
* Вызывается из LED_Task каждые 20 ms; шаг FSM — 100 ms.
|
|
||||||
*/
|
|
||||||
static void LED_Ws2812ErrorBlinkUpdate(void)
|
|
||||||
{
|
|
||||||
static uint8_t err_counter;
|
|
||||||
static uint8_t led_state;
|
|
||||||
static uint8_t led_pause;
|
|
||||||
static uint32_t blink_tick;
|
|
||||||
static uint32_t flash_until;
|
|
||||||
static CONN_Error_t last_error = CONN_NO_ERROR;
|
|
||||||
|
|
||||||
const CONN_Error_t err = CONN.chargingError;
|
|
||||||
const uint32_t now = HAL_GetTick();
|
|
||||||
|
|
||||||
if (err == CONN_NO_ERROR) {
|
|
||||||
err_counter = 0;
|
|
||||||
led_state = 0;
|
|
||||||
led_pause = 0;
|
|
||||||
flash_until = 0;
|
|
||||||
last_error = CONN_NO_ERROR;
|
|
||||||
ws2812_led1.R = 0;
|
|
||||||
ws2812_led1.G = 0;
|
|
||||||
ws2812_led1.B = 0;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (err != last_error) {
|
|
||||||
err_counter = 0;
|
|
||||||
led_state = 0;
|
|
||||||
led_pause = 0;
|
|
||||||
flash_until = 0;
|
|
||||||
last_error = err;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (now < flash_until) {
|
|
||||||
ws2812_led1.R = 255;
|
|
||||||
ws2812_led1.G = 0;
|
|
||||||
ws2812_led1.B = 0;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ws2812_led1.R = 0;
|
|
||||||
ws2812_led1.G = 0;
|
|
||||||
ws2812_led1.B = 0;
|
|
||||||
|
|
||||||
if ((now - blink_tick) < WS2812_ERROR_BLINK_MS) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
blink_tick = now;
|
|
||||||
|
|
||||||
uint8_t led_flash = 0;
|
|
||||||
|
|
||||||
if (led_pause > 0) {
|
|
||||||
led_pause--;
|
|
||||||
} else if (err_counter < (uint8_t)err) {
|
|
||||||
if (led_state == 0) {
|
|
||||||
led_state = 1;
|
|
||||||
} else {
|
|
||||||
led_flash = 1;
|
|
||||||
led_state = 0;
|
|
||||||
err_counter++;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
err_counter = 0;
|
|
||||||
led_pause = WS2812_ERROR_BLINK_PAUSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (led_flash) {
|
|
||||||
flash_until = now + WS2812_ERROR_BLINK_MS;
|
|
||||||
ws2812_led1.R = 255;
|
|
||||||
ws2812_led1.G = 0;
|
|
||||||
ws2812_led1.B = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void RGB_SetColor(RGB_t *color){
|
void RGB_SetColor(RGB_t *color){
|
||||||
htim4.Instance->CCR2 = color->R * 100 / 255;
|
htim4.Instance->CCR2 = color->R * 100 / 255;
|
||||||
htim4.Instance->CCR3 = color->G * 100 / 255;
|
htim4.Instance->CCR3 = color->G * 100 / 255;
|
||||||
htim4.Instance->CCR4 = color->B * 100 / 255;
|
htim4.Instance->CCR4 = color->B * 100 / 255;
|
||||||
}
|
|
||||||
|
|
||||||
void WS2812_SetColor(RGB_t *color){
|
|
||||||
RGB_t led0 = RGB_ScaleBrightness(color);
|
|
||||||
RGB_t led1 = RGB_ScaleBrightness(&ws2812_led1);
|
|
||||||
ws2812_update(&led0, &led1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void LED_SetColor(RGB_Cycle_t *color){
|
void LED_SetColor(RGB_Cycle_t *color){
|
||||||
@@ -342,14 +178,38 @@ void LED_Init(){
|
|||||||
HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_3);
|
HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_3);
|
||||||
HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_4);
|
HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_4);
|
||||||
RGB_SetColor(&color);
|
RGB_SetColor(&color);
|
||||||
WS2812_SetColor(&color);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// void LED_PhaseSync(uint8_t led_n){
|
||||||
|
// if(LED_State[led_n].phasesync){
|
||||||
|
// LED_State[led_n].phasesync = 0;
|
||||||
|
// //default settings
|
||||||
|
// LED_State[led_n].state = LED_HIGH;
|
||||||
|
// LED_State[led_n].tick = 0;
|
||||||
|
// //ищем среди всех светодиодов такую же последовательность
|
||||||
|
// for (uint8_t led_n1 = 0; led_n1 < 5; led_n1++){
|
||||||
|
// if ((LED_Cycle[led_n].Tf == LED_Cycle[led_n1].Tf) &&
|
||||||
|
// (LED_Cycle[led_n].Tr == LED_Cycle[led_n1].Tr) &&
|
||||||
|
// (LED_Cycle[led_n].Th == LED_Cycle[led_n1].Th) &&
|
||||||
|
// (LED_Cycle[led_n].Tl == LED_Cycle[led_n1].Tl) &&
|
||||||
|
// (led_n != led_n1)){
|
||||||
|
// //если нашли, то копируем фазу оттуда
|
||||||
|
// LED_State[led_n].state = LED_State[led_n1].state;
|
||||||
|
// LED_State[led_n].tick = LED_State[led_n1].tick;
|
||||||
|
// return;
|
||||||
|
|
||||||
|
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
void LED_Task(){
|
void LED_Task(){
|
||||||
static uint32_t led_tick;
|
static uint32_t led_tick;
|
||||||
if((HAL_GetTick() - led_tick) > 20){
|
if((HAL_GetTick() - led_tick) > 20){
|
||||||
led_tick = HAL_GetTick();
|
led_tick = HAL_GetTick();
|
||||||
LED_State.tick++;
|
LED_State.tick++;
|
||||||
|
// LED_PhaseSync(led_n);
|
||||||
switch(LED_State.state){
|
switch(LED_State.state){
|
||||||
case LED_RISING:
|
case LED_RISING:
|
||||||
interpolateColors(&LED_Cycle.Color2, &LED_Cycle.Color1, LED_State.tick, LED_Cycle.Tr, &LED_State.color);
|
interpolateColors(&LED_Cycle.Color2, &LED_Cycle.Color1, LED_State.tick, LED_Cycle.Tr, &LED_State.color);
|
||||||
@@ -386,8 +246,6 @@ void LED_Task(){
|
|||||||
default:
|
default:
|
||||||
LED_State.state = LED_RISING;
|
LED_State.state = LED_RISING;
|
||||||
}
|
}
|
||||||
LED_Ws2812ErrorBlinkUpdate();
|
|
||||||
RGB_SetColor(&LED_State.color);
|
RGB_SetColor(&LED_State.color);
|
||||||
WS2812_SetColor(&LED_State.color);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+74
-170
@@ -1,16 +1,13 @@
|
|||||||
#include "serial.h"
|
#include "serial.h"
|
||||||
|
|
||||||
#include "board.h"
|
|
||||||
#include "charger_config.h"
|
|
||||||
#include "connector.h"
|
|
||||||
#include "cp.h"
|
#include "cp.h"
|
||||||
|
#include "connector.h"
|
||||||
|
#include "board.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "isr_opt.h"
|
#include "isr_opt.h"
|
||||||
#include "psu_control.h"
|
|
||||||
#include "power_setpoint_executor.h"
|
|
||||||
#include "serial_control.h"
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include "charger_config.h"
|
||||||
|
#include "psu_control.h"
|
||||||
|
|
||||||
extern UART_HandleTypeDef huart3;
|
extern UART_HandleTypeDef huart3;
|
||||||
extern uint8_t config_initialized;
|
extern uint8_t config_initialized;
|
||||||
@@ -30,15 +27,13 @@ CONN_Control_t last_cmd = CMD_NONE;
|
|||||||
uint8_t ev_enable_output = 0;
|
uint8_t ev_enable_output = 0;
|
||||||
|
|
||||||
#define CMD_INTERVAL 10
|
#define CMD_INTERVAL 10
|
||||||
#define EVEREST_TIMEOUT_WARN_MS 5000u
|
#define MAX_TX_BUFFER_SIZE 256
|
||||||
#define EVEREST_TIMEOUT_STOP_MS 10000u
|
#define MAX_RX_BUFFER_SIZE 256
|
||||||
|
#define EVEREST_TIMEOUT_MS 5000u
|
||||||
#define UART3_REINIT_TIMEOUT_MS 1500u
|
#define UART3_REINIT_TIMEOUT_MS 1500u
|
||||||
|
|
||||||
static uint8_t rx_buffer[MAX_RX_BUFFER_SIZE];
|
static uint8_t rx_buffer[MAX_RX_BUFFER_SIZE];
|
||||||
static uint8_t tx_buffer[MAX_TX_BUFFER_SIZE];
|
static uint8_t tx_buffer[MAX_TX_BUFFER_SIZE];
|
||||||
static uint8_t tx_pending_buffer[MAX_TX_BUFFER_SIZE];
|
|
||||||
static uint16_t tx_pending_len = 0;
|
|
||||||
static uint8_t uart3_tx_busy = 0;
|
|
||||||
|
|
||||||
uint8_t ESTOP = 0;
|
uint8_t ESTOP = 0;
|
||||||
uint8_t REPLUG = 0;
|
uint8_t REPLUG = 0;
|
||||||
@@ -48,19 +43,18 @@ static uint8_t pwm_duty_percent = 100;
|
|||||||
uint8_t isolation_enable = 0;
|
uint8_t isolation_enable = 0;
|
||||||
static uint32_t last_host_seen = 0;
|
static uint32_t last_host_seen = 0;
|
||||||
static uint8_t everest_timed_out = 0;
|
static uint8_t everest_timed_out = 0;
|
||||||
static uint8_t everest_timeout_warn_latched = 0;
|
static uint32_t last_everest_timeout_log_tick = 0;
|
||||||
static uint8_t everest_timeout_stop_latched = 0;
|
|
||||||
static uint32_t uart3_last_packet_tick = 0;
|
static uint32_t uart3_last_packet_tick = 0;
|
||||||
static uint32_t uart3_last_reinit_tick = 0;
|
static uint32_t uart3_last_reinit_tick = 0;
|
||||||
|
static CP_State_t cp_state_buffer = EV_STATE_ACQUIRING;
|
||||||
|
|
||||||
CCS_State_t CCS_State;
|
CCS_State_t CCS_State;
|
||||||
CCS_EvInfo_t CCS_EvInfo;
|
CCS_EvInfo_t CCS_EvInfo;
|
||||||
CONN_State_t CCS_EvseState;
|
CONN_State_t CCS_EvseState;
|
||||||
CCS_ConnectorState_t CCS_ConnectorState = CCS_UNKNOWN;
|
CCS_ConnectorState_t CCS_ConnectorState = CCS_UNPLUGGED;
|
||||||
|
|
||||||
ISR_FAST static uint8_t process_received_packet(const uint8_t* packet, uint16_t packet_len);
|
ISR_FAST static uint8_t process_received_packet(const uint8_t* packet, uint16_t packet_len);
|
||||||
static void CCS_UART3_Watchdog(void);
|
static void CCS_UART3_Watchdog(void);
|
||||||
static void CCS_LogUart3Error(const char *tag);
|
|
||||||
|
|
||||||
ISR_FAST static void uart3_log_hal_error(uint8_t uart_num, uint32_t err) {
|
ISR_FAST static void uart3_log_hal_error(uint8_t uart_num, uint32_t err) {
|
||||||
if (err == HAL_UART_ERROR_NONE) {
|
if (err == HAL_UART_ERROR_NONE) {
|
||||||
@@ -83,7 +77,7 @@ ISR_FAST static void uart3_log_hal_error(uint8_t uart_num, uint32_t err) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ISR_FAST static void uart3_arm_rx_or_log(const char *where) {
|
ISR_FAST static void uart3_arm_rx_or_log(const char *where) {
|
||||||
HAL_StatusTypeDef st = HAL_UARTEx_ReceiveToIdle_DMA(&huart3, rx_buffer, sizeof(rx_buffer));
|
HAL_StatusTypeDef st = HAL_UARTEx_ReceiveToIdle_IT(&huart3, rx_buffer, sizeof(rx_buffer));
|
||||||
if (st == HAL_OK) {
|
if (st == HAL_OK) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -92,9 +86,8 @@ ISR_FAST static void uart3_arm_rx_or_log(const char *where) {
|
|||||||
"UART3 RX arm failed (%s): HAL_Status=%d err_after=0x%08lx\n",
|
"UART3 RX arm failed (%s): HAL_Status=%d err_after=0x%08lx\n",
|
||||||
where, (int)st, (unsigned long)err_after);
|
where, (int)st, (unsigned long)err_after);
|
||||||
uart3_log_hal_error(3u, err_after);
|
uart3_log_hal_error(3u, err_after);
|
||||||
CCS_LogUart3Error("UART3 RX arm failed details");
|
|
||||||
if (err_after != HAL_UART_ERROR_NONE) {
|
if (err_after != HAL_UART_ERROR_NONE) {
|
||||||
(void)HAL_UART_AbortReceive(&huart3);
|
(void)HAL_UART_Abort_IT(&huart3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -131,74 +124,35 @@ ISR_FAST void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart) {
|
|||||||
"UART%u HAL error (ISR): raw=0x%08lx — RX may be corrupted until re-arm\n",
|
"UART%u HAL error (ISR): raw=0x%08lx — RX may be corrupted until re-arm\n",
|
||||||
uart_num, (unsigned long)error);
|
uart_num, (unsigned long)error);
|
||||||
uart3_log_hal_error(uart_num, error);
|
uart3_log_hal_error(uart_num, error);
|
||||||
(void)HAL_UART_AbortReceive(huart);
|
(void)HAL_UART_Abort_IT(huart);
|
||||||
(void)HAL_UART_AbortTransmit(huart);
|
|
||||||
if (huart == &huart3) {
|
if (huart == &huart3) {
|
||||||
uart3_tx_busy = 0;
|
|
||||||
uart3_arm_rx_or_log("ErrorCallback");
|
uart3_arm_rx_or_log("ErrorCallback");
|
||||||
} else {
|
|
||||||
SC_RecoverUartDma(huart);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCS_TxCpltCallback(UART_HandleTypeDef *huart) {
|
|
||||||
if (huart != &huart3) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
uart3_tx_busy = 0;
|
|
||||||
if (tx_pending_len > 0) {
|
|
||||||
memcpy(tx_buffer, tx_pending_buffer, tx_pending_len);
|
|
||||||
uart3_tx_busy = 1;
|
|
||||||
if (HAL_UART_Transmit_DMA(&huart3, tx_buffer, tx_pending_len) != HAL_OK) {
|
|
||||||
uart3_tx_busy = 0;
|
|
||||||
CCS_LogUart3Error("UART3 TX DMA resend failed");
|
|
||||||
}
|
|
||||||
tx_pending_len = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCS_SerialLoop(void) {
|
void CCS_SerialLoop(void) {
|
||||||
static uint32_t tick;
|
|
||||||
if ((int32_t)(HAL_GetTick() - tick) < 1) return;
|
|
||||||
tick = HAL_GetTick();
|
|
||||||
|
|
||||||
static uint32_t replug_tick = 0;
|
static uint32_t replug_tick = 0;
|
||||||
static uint32_t replug_watchdog_tick = 0;
|
static uint32_t replug_watchdog_tick = 0;
|
||||||
static uint32_t replug_watchdog1_tick = 0;
|
static uint32_t replug_watchdog1_tick = 0;
|
||||||
static uint32_t last_state_sent = 0;
|
static uint32_t last_state_sent = 0;
|
||||||
static uint32_t force_unlock_tick = 0;
|
|
||||||
static uint32_t stop_tick = 0;
|
if ((&huart3)->RxState == HAL_UART_STATE_READY) {
|
||||||
|
uart3_arm_rx_or_log("SerialLoop");
|
||||||
|
}
|
||||||
|
|
||||||
CCS_UART3_Watchdog();
|
CCS_UART3_Watchdog();
|
||||||
|
|
||||||
|
/* Read CP once per loop and use buffered value below. */
|
||||||
|
cp_state_buffer = CP_GetState();
|
||||||
|
|
||||||
if (CONN.connControl != CMD_NONE) {
|
if (CONN.connControl != CMD_NONE) {
|
||||||
last_cmd = CONN.connControl;
|
last_cmd = CONN.connControl;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CONN.connControl == CMD_FORCE_UNLOCK) {
|
if((HAL_GetTick() - last_cmd_sent) > CMD_INTERVAL){
|
||||||
if (force_unlock_tick == 0) {
|
if ((HAL_GetTick() - last_state_sent) >= 200) {
|
||||||
force_unlock_tick = HAL_GetTick();
|
|
||||||
} else if ((int32_t)(HAL_GetTick() - force_unlock_tick) >= 10000) {
|
|
||||||
CONN.connControl = CMD_NONE;
|
|
||||||
force_unlock_tick = 0;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
force_unlock_tick = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (CONN.connControl == CMD_STOP) {
|
|
||||||
if (stop_tick == 0) {
|
|
||||||
stop_tick = HAL_GetTick();
|
|
||||||
} else if ((int32_t)(HAL_GetTick() - stop_tick) >= 1000) {
|
|
||||||
CONN.connControl = CMD_NONE;
|
|
||||||
stop_tick = 0;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
stop_tick = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if((int32_t)(HAL_GetTick() - last_cmd_sent) > (int32_t)CMD_INTERVAL){
|
|
||||||
if ((int32_t)(HAL_GetTick() - last_state_sent) >= 200) {
|
|
||||||
send_state();
|
send_state();
|
||||||
last_state_sent = HAL_GetTick();
|
last_state_sent = HAL_GetTick();
|
||||||
}
|
}
|
||||||
@@ -210,19 +164,15 @@ void CCS_SerialLoop(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (((CONN.connControl == CMD_STOP) ||
|
if (((CONN.connControl == CMD_STOP) ||
|
||||||
(CONN.connControl == CMD_FORCE_UNLOCK) ||
|
|
||||||
(CONN.chargingError != CONN_NO_ERROR)) &&
|
(CONN.chargingError != CONN_NO_ERROR)) &&
|
||||||
((int32_t)(HAL_GetTick() - last_stop_sent) > 1000)) {
|
((HAL_GetTick() - last_stop_sent) > 1000)) {
|
||||||
last_stop_sent = HAL_GetTick();
|
last_stop_sent = HAL_GetTick();
|
||||||
log_printf(LOG_WARN, "Stopping charging...\n");
|
log_printf(LOG_WARN, "Stopping charging...\n");
|
||||||
if (CONN.connControl == CMD_FORCE_UNLOCK) {
|
|
||||||
CP_SetDuty(100);
|
|
||||||
}
|
|
||||||
CCS_SendEmergencyStop();
|
CCS_SendEmergencyStop();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (((CCS_EvseState == FinishedEV) || (CCS_EvseState == FinishedEVSE)) &&
|
if (((CCS_EvseState == FinishedEV) || (CCS_EvseState == FinishedEVSE)) &&
|
||||||
((int32_t)(HAL_GetTick() - last_stop_sent) > 1000)) {
|
((HAL_GetTick() - last_stop_sent) > 1000)) {
|
||||||
last_stop_sent = HAL_GetTick();
|
last_stop_sent = HAL_GetTick();
|
||||||
log_printf(LOG_WARN, "FinishedEV, stopping...\n");
|
log_printf(LOG_WARN, "FinishedEV, stopping...\n");
|
||||||
CCS_SendEmergencyStop();
|
CCS_SendEmergencyStop();
|
||||||
@@ -232,38 +182,16 @@ void CCS_SerialLoop(void) {
|
|||||||
(void)replug_watchdog_tick;
|
(void)replug_watchdog_tick;
|
||||||
(void)replug_watchdog1_tick;
|
(void)replug_watchdog1_tick;
|
||||||
|
|
||||||
uint8_t host_timeout_warn = (last_host_seen > 0u) && ((int32_t)(HAL_GetTick() - last_host_seen) > (int32_t)EVEREST_TIMEOUT_WARN_MS);
|
if (!config_initialized) {
|
||||||
uint8_t host_timeout_stop = (last_host_seen > 0u) && ((int32_t)(HAL_GetTick() - last_host_seen) > (int32_t)EVEREST_TIMEOUT_STOP_MS);
|
// Keep connector in Unknown until host sends valid SET_CONFIG.
|
||||||
uint8_t host_timed_out = host_timeout_stop;
|
RELAY_Write(RELAY_CP, 1);
|
||||||
|
CONN_SetState(Unknown);
|
||||||
if (host_timeout_warn && !everest_timeout_warn_latched) {
|
} else {
|
||||||
log_printf(LOG_ERR, "Everest timeout\n");
|
switch(CCS_ConnectorState){
|
||||||
everest_timeout_warn_latched = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (host_timeout_stop && !everest_timeout_stop_latched) {
|
|
||||||
log_printf(LOG_ERR, "Everest timeout, stopping charging...\n");
|
|
||||||
everest_timeout_stop_latched = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!host_timeout_warn) {
|
|
||||||
everest_timeout_warn_latched = 0;
|
|
||||||
everest_timeout_stop_latched = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
everest_timed_out = host_timeout_stop;
|
|
||||||
switch(CCS_ConnectorState){
|
|
||||||
case CCS_UNKNOWN:
|
|
||||||
RELAY_Write(RELAY_CP, 0);
|
|
||||||
CONN_SetState(Unknown);
|
|
||||||
if (config_initialized && !host_timed_out) {
|
|
||||||
CCS_ConnectorState = CCS_UNPLUGGED;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case CCS_DISABLED:
|
case CCS_DISABLED:
|
||||||
RELAY_Write(RELAY_CP, 0);
|
RELAY_Write(RELAY_CP, 0);
|
||||||
CONN_SetState(Disabled);
|
CONN_SetState(Disabled);
|
||||||
if ((CONN.chargingError == CONN_NO_ERROR) && !host_timed_out){
|
if (CONN.chargingError == CONN_NO_ERROR){
|
||||||
CCS_ConnectorState = CCS_UNPLUGGED;
|
CCS_ConnectorState = CCS_UNPLUGGED;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -293,7 +221,7 @@ void CCS_SerialLoop(void) {
|
|||||||
break;
|
break;
|
||||||
case CCS_CONNECTED:
|
case CCS_CONNECTED:
|
||||||
RELAY_Write(RELAY_CP, 1);
|
RELAY_Write(RELAY_CP, 1);
|
||||||
if((CCS_EvseState < Preparing) || (CCS_EvseState == AuthRequired)) {
|
if(CCS_EvseState < Preparing) {
|
||||||
CONN_SetState(Preparing);
|
CONN_SetState(Preparing);
|
||||||
} else {
|
} else {
|
||||||
CONN_SetState(CCS_EvseState);
|
CONN_SetState(CCS_EvseState);
|
||||||
@@ -310,7 +238,7 @@ void CCS_SerialLoop(void) {
|
|||||||
case CCS_REPLUGGING:
|
case CCS_REPLUGGING:
|
||||||
RELAY_Write(RELAY_CP, 0);
|
RELAY_Write(RELAY_CP, 0);
|
||||||
CONN_SetState(Replugging);
|
CONN_SetState(Replugging);
|
||||||
if((int32_t)(HAL_GetTick() - replug_tick) > 1000){
|
if((HAL_GetTick() - replug_tick) > 1000){
|
||||||
replug_tick = HAL_GetTick();
|
replug_tick = HAL_GetTick();
|
||||||
if(REPLUG > 0){
|
if(REPLUG > 0){
|
||||||
if (REPLUG != 0xFF) REPLUG--;
|
if (REPLUG != 0xFF) REPLUG--;
|
||||||
@@ -327,44 +255,38 @@ void CCS_SerialLoop(void) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 10s timeout: enforce safe-state until host communication recovers.
|
// If Everest timeout happened, keep safe-state and limit log frequency.
|
||||||
{
|
// The safe-state must remain until we receive a valid packet from the host.
|
||||||
static uint8_t prev_enable_output = 0xFFu;
|
if (everest_timed_out) {
|
||||||
uint8_t new_enable_output;
|
if (last_everest_timeout_log_tick == 0 ||
|
||||||
|
(HAL_GetTick() - last_everest_timeout_log_tick) >= EVEREST_TIMEOUT_MS) {
|
||||||
|
log_printf(LOG_ERR, "Everest timeout\n");
|
||||||
|
last_everest_timeout_log_tick = HAL_GetTick();
|
||||||
|
}
|
||||||
|
CONN.EnableOutput = 0;
|
||||||
|
CCS_EvseState = Unknown;
|
||||||
|
CP_SetDuty(100);
|
||||||
|
} else if (last_host_seen > 0 && (HAL_GetTick() - last_host_seen) > EVEREST_TIMEOUT_MS) {
|
||||||
|
log_printf(LOG_ERR, "Everest timeout\n");
|
||||||
|
everest_timed_out = 1;
|
||||||
|
last_host_seen = HAL_GetTick(); // reset after the first timeout
|
||||||
|
last_everest_timeout_log_tick = HAL_GetTick();
|
||||||
|
|
||||||
if (host_timeout_stop) {
|
CONN.EnableOutput = 0;
|
||||||
|
CCS_EvseState = Unknown;
|
||||||
|
CP_SetDuty(100);
|
||||||
|
} else {
|
||||||
|
if (last_cmd == CMD_STOP) {
|
||||||
CONN.EnableOutput = 0;
|
CONN.EnableOutput = 0;
|
||||||
CCS_EvseState = Unknown;
|
|
||||||
CP_SetDuty(100);
|
|
||||||
if (CCS_ConnectorState != CCS_DISABLED && CCS_ConnectorState != CCS_UNKNOWN) {
|
|
||||||
CCS_ConnectorState = CCS_DISABLED;
|
|
||||||
}
|
|
||||||
new_enable_output = 0u;
|
|
||||||
} else {
|
} else {
|
||||||
if (last_cmd == CMD_STOP) {
|
CONN.EnableOutput = ev_enable_output ? 1 : 0;
|
||||||
|
if((CONN.EnableOutput == 0) && (CONN.connState == Preparing)){
|
||||||
CONN.EnableOutput = 0;
|
CONN.EnableOutput = 0;
|
||||||
} else {
|
|
||||||
CONN.EnableOutput = ev_enable_output ? 1 : 0;
|
|
||||||
if((CONN.EnableOutput == 0) && (CONN.connState == Preparing)){
|
|
||||||
CONN.EnableOutput = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
new_enable_output = CONN.EnableOutput;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (prev_enable_output != 0xFFu && prev_enable_output != new_enable_output) {
|
|
||||||
log_printf(LOG_INFO,
|
|
||||||
"EnableOutput %u->%u ev=%u stop=%u host_to=%u err=%u\n",
|
|
||||||
(unsigned)prev_enable_output,
|
|
||||||
(unsigned)new_enable_output,
|
|
||||||
(unsigned)ev_enable_output,
|
|
||||||
(unsigned)(last_cmd == CMD_STOP),
|
|
||||||
(unsigned)host_timeout_stop,
|
|
||||||
(unsigned)CONN.chargingError);
|
|
||||||
}
|
|
||||||
prev_enable_output = new_enable_output;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((cp_state_buffer == EV_STATE_B_CONN_PREP) ||
|
if ((cp_state_buffer == EV_STATE_B_CONN_PREP) ||
|
||||||
@@ -386,7 +308,6 @@ void CCS_Init(void){
|
|||||||
CCS_MaxLoad.maxPower = PSU_MAX_POWER; //30000W
|
CCS_MaxLoad.maxPower = PSU_MAX_POWER; //30000W
|
||||||
uart3_last_packet_tick = HAL_GetTick();
|
uart3_last_packet_tick = HAL_GetTick();
|
||||||
uart3_last_reinit_tick = uart3_last_packet_tick;
|
uart3_last_reinit_tick = uart3_last_packet_tick;
|
||||||
uart3_arm_rx_or_log("Init");
|
|
||||||
CCS_SendResetReason();
|
CCS_SendResetReason();
|
||||||
log_printf(LOG_INFO, "CCS init\n");
|
log_printf(LOG_INFO, "CCS init\n");
|
||||||
}
|
}
|
||||||
@@ -425,16 +346,7 @@ static uint16_t CCS_BuildPacket(uint8_t cmd, const void* payload, uint16_t paylo
|
|||||||
static void CCS_SendPacket(uint8_t cmd, const void* payload, uint16_t payload_len) {
|
static void CCS_SendPacket(uint8_t cmd, const void* payload, uint16_t payload_len) {
|
||||||
uint16_t len = CCS_BuildPacket(cmd, payload, payload_len, tx_buffer, sizeof(tx_buffer));
|
uint16_t len = CCS_BuildPacket(cmd, payload, payload_len, tx_buffer, sizeof(tx_buffer));
|
||||||
if (len > 0) {
|
if (len > 0) {
|
||||||
if (uart3_tx_busy) {
|
HAL_UART_Transmit_IT(&huart3, tx_buffer, len);
|
||||||
memcpy(tx_pending_buffer, tx_buffer, len);
|
|
||||||
tx_pending_len = len;
|
|
||||||
} else {
|
|
||||||
uart3_tx_busy = 1;
|
|
||||||
if (HAL_UART_Transmit_DMA(&huart3, tx_buffer, len) != HAL_OK) {
|
|
||||||
uart3_tx_busy = 0;
|
|
||||||
CCS_LogUart3Error("UART3 TX DMA start failed");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
last_cmd_sent = HAL_GetTick();
|
last_cmd_sent = HAL_GetTick();
|
||||||
}
|
}
|
||||||
@@ -472,6 +384,7 @@ static void send_state(void) {
|
|||||||
CCS_State.DutyCycle = CP_GetDuty();
|
CCS_State.DutyCycle = CP_GetDuty();
|
||||||
CCS_State.OutputEnabled = PSU0.CONT_enabled;
|
CCS_State.OutputEnabled = PSU0.CONT_enabled;
|
||||||
CCS_State.MeasuredVoltage = (uint16_t)CONN.MeasuredVoltage;
|
CCS_State.MeasuredVoltage = (uint16_t)CONN.MeasuredVoltage;
|
||||||
|
if (CONN.RequestedVoltage == 500) CCS_State.MeasuredVoltage = 500; // fake
|
||||||
CCS_State.MeasuredCurrent = (uint16_t)CONN.MeasuredCurrent;
|
CCS_State.MeasuredCurrent = (uint16_t)CONN.MeasuredCurrent;
|
||||||
CCS_State.Power = CCS_Power;
|
CCS_State.Power = CCS_Power;
|
||||||
CCS_State.Energy = CCS_Energy;
|
CCS_State.Energy = CCS_Energy;
|
||||||
@@ -513,17 +426,14 @@ ISR_FAST static void apply_command(uint8_t cmd, const uint8_t* payload, uint16_t
|
|||||||
(void)payload_len;
|
(void)payload_len;
|
||||||
last_host_seen = HAL_GetTick();
|
last_host_seen = HAL_GetTick();
|
||||||
everest_timed_out = 0;
|
everest_timed_out = 0;
|
||||||
everest_timeout_warn_latched = 0;
|
last_everest_timeout_log_tick = 0;
|
||||||
everest_timeout_stop_latched = 0;
|
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
case CMD_E2M_PWM_DUTY: {
|
case CMD_E2M_PWM_DUTY: {
|
||||||
const e2m_pwm_duty_t* p = (const e2m_pwm_duty_t*)payload;
|
const e2m_pwm_duty_t* p = (const e2m_pwm_duty_t*)payload;
|
||||||
uint8_t duty = p->pwm_duty_percent;
|
uint8_t duty = p->pwm_duty_percent;
|
||||||
if (duty > 100) duty = 100;
|
if (duty > 100) duty = 100;
|
||||||
pwm_duty_percent = duty;
|
pwm_duty_percent = duty;
|
||||||
if (CONN.connControl != CMD_FORCE_UNLOCK) {
|
CP_SetDuty(duty);
|
||||||
CP_SetDuty(duty);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CMD_E2M_ENABLE_OUTPUT: {
|
case CMD_E2M_ENABLE_OUTPUT: {
|
||||||
@@ -551,7 +461,6 @@ ISR_FAST static void apply_command(uint8_t cmd, const uint8_t* payload, uint16_t
|
|||||||
const e2m_set_output_t* p = (const e2m_set_output_t*)payload;
|
const e2m_set_output_t* p = (const e2m_set_output_t*)payload;
|
||||||
CONN.RequestedVoltage = p->voltage_V;
|
CONN.RequestedVoltage = p->voltage_V;
|
||||||
CONN.WantedCurrent = p->current_0p1A;
|
CONN.WantedCurrent = p->current_0p1A;
|
||||||
PowerSetpoint_OnCommand(p->voltage_V, p->current_0p1A);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CMD_E2M_ISOLATION_CONTROL: {
|
case CMD_E2M_ISOLATION_CONTROL: {
|
||||||
@@ -639,24 +548,19 @@ ISR_FAST static uint8_t process_received_packet(const uint8_t* packet, uint16_t
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void CCS_UART3_Watchdog(void) {
|
static void CCS_UART3_Watchdog(void) {
|
||||||
const int32_t since_last_packet = (int32_t)(HAL_GetTick() - uart3_last_packet_tick);
|
const uint32_t now = HAL_GetTick();
|
||||||
const int32_t since_last_reinit = (int32_t)(HAL_GetTick() - uart3_last_reinit_tick);
|
const uint32_t since_last_packet = now - uart3_last_packet_tick;
|
||||||
|
|
||||||
if ((since_last_packet >= (int32_t)UART3_REINIT_TIMEOUT_MS) &&
|
if ((since_last_packet >= UART3_REINIT_TIMEOUT_MS) &&
|
||||||
(since_last_reinit >= (int32_t)UART3_REINIT_TIMEOUT_MS) &&
|
((now - uart3_last_reinit_tick) >= UART3_REINIT_TIMEOUT_MS)) {
|
||||||
(huart3.RxState == HAL_UART_STATE_READY)) {
|
(void)HAL_UART_Abort_IT(&huart3);
|
||||||
uart3_arm_rx_or_log("Watchdog");
|
(void)HAL_UART_DeInit(&huart3);
|
||||||
CCS_LogUart3Error("UART3 watchdog rearm");
|
(void)HAL_UART_Init(&huart3);
|
||||||
uart3_last_reinit_tick = HAL_GetTick();
|
(void)HAL_UARTEx_ReceiveToIdle_IT(&huart3, rx_buffer, sizeof(rx_buffer));
|
||||||
|
log_printf(LOG_ERR,
|
||||||
|
"UART3 RX recover: stalled (no RxEvent data for %ums), hard reinit\n",
|
||||||
|
(unsigned)UART3_REINIT_TIMEOUT_MS);
|
||||||
|
uart3_last_reinit_tick = now;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void CCS_LogUart3Error(const char *tag) {
|
|
||||||
log_printf(LOG_ERR, "%s: err=0x%08lx g=%lu rx=%lu tx_busy=%u\n",
|
|
||||||
tag,
|
|
||||||
(unsigned long)HAL_UART_GetError(&huart3),
|
|
||||||
(unsigned long)huart3.gState,
|
|
||||||
(unsigned long)huart3.RxState,
|
|
||||||
(unsigned)uart3_tx_busy);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|||||||
+69
-92
@@ -1,10 +1,9 @@
|
|||||||
#include "serial_control.h"
|
#include "serial_control.h"
|
||||||
|
#include "usart.h"
|
||||||
#include "board.h"
|
#include "board.h"
|
||||||
|
#include "serial.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "isr_opt.h"
|
#include "isr_opt.h"
|
||||||
#include "serial.h"
|
|
||||||
#include "usart.h"
|
|
||||||
|
|
||||||
// Приватные функции
|
// Приватные функции
|
||||||
ISR_FAST static uint32_t calculate_crc32(const uint8_t* data, uint16_t length);
|
ISR_FAST static uint32_t calculate_crc32(const uint8_t* data, uint16_t length);
|
||||||
@@ -12,9 +11,6 @@ ISR_FAST static uint16_t encode_packet(const uint8_t* payload, uint16_t payload_
|
|||||||
ISR_FAST static uint8_t parse_packet(const uint8_t* packet_data, uint16_t packet_len, ReceivedCommand_t* out_cmd);
|
ISR_FAST static uint8_t parse_packet(const uint8_t* packet_data, uint16_t packet_len, ReceivedCommand_t* out_cmd);
|
||||||
ISR_FAST static uint8_t process_received_packet(SerialControl_t *ctx, const uint8_t* packet_data, uint16_t packet_len);
|
ISR_FAST static uint8_t process_received_packet(SerialControl_t *ctx, const uint8_t* packet_data, uint16_t packet_len);
|
||||||
static void SC_UART2_Watchdog(void);
|
static void SC_UART2_Watchdog(void);
|
||||||
static void SC_ArmUart2RxDma(void);
|
|
||||||
static void SC_ArmUart5RxDma(void);
|
|
||||||
static void SC_LogUartError(const char *tag, UART_HandleTypeDef *huart);
|
|
||||||
|
|
||||||
uint8_t test_crc_invalid = 0;
|
uint8_t test_crc_invalid = 0;
|
||||||
|
|
||||||
@@ -24,9 +20,11 @@ static SerialControl_t serial_iso;
|
|||||||
volatile SC_Source_t g_sc_command_source = SC_SOURCE_UART2;
|
volatile SC_Source_t g_sc_command_source = SC_SOURCE_UART2;
|
||||||
static volatile uint8_t sc_uart2_timed_out = 0;
|
static volatile uint8_t sc_uart2_timed_out = 0;
|
||||||
static uint32_t sc_uart2_last_packet_tick = 0;
|
static uint32_t sc_uart2_last_packet_tick = 0;
|
||||||
static uint32_t sc_uart2_last_recover_tick = 0;
|
static uint32_t sc_uart2_last_reinit_tick = 0;
|
||||||
|
/** Событие приёма по UART2 при активной передаче (см. HAL_UARTEx_RxEventCallback / SC_UART2_Watchdog). */
|
||||||
|
static volatile uint8_t sc_uart2_rx_during_tx = 0;
|
||||||
|
|
||||||
#define SC_UART2_RECOVER_GUARD_MS 200u
|
#define SC_UART2_REINIT_TIMEOUT_MS 500u
|
||||||
#define SC_UART2_PACKET_TIMEOUT_MS 5000u
|
#define SC_UART2_PACKET_TIMEOUT_MS 5000u
|
||||||
|
|
||||||
StatusPacket_t statusPacket = {
|
StatusPacket_t statusPacket = {
|
||||||
@@ -87,26 +85,34 @@ void SC_Init() {
|
|||||||
memset(&serial_iso, 0, sizeof(serial_iso));
|
memset(&serial_iso, 0, sizeof(serial_iso));
|
||||||
sc_uart2_timed_out = 0;
|
sc_uart2_timed_out = 0;
|
||||||
sc_uart2_last_packet_tick = HAL_GetTick();
|
sc_uart2_last_packet_tick = HAL_GetTick();
|
||||||
sc_uart2_last_recover_tick = sc_uart2_last_packet_tick;
|
sc_uart2_last_reinit_tick = sc_uart2_last_packet_tick;
|
||||||
SC_ArmUart2RxDma();
|
sc_uart2_rx_during_tx = 0;
|
||||||
SC_ArmUart5RxDma();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SC_Task() {
|
void SC_Task() {
|
||||||
static uint32_t tick;
|
|
||||||
if ((int32_t)(HAL_GetTick() - tick) < 1) return;
|
|
||||||
tick = HAL_GetTick();
|
|
||||||
SC_UART2_Watchdog();
|
SC_UART2_Watchdog();
|
||||||
|
|
||||||
// Запуск приема в режиме DMA + idle
|
// Запуск приема в режиме прерывания с ожиданием idle
|
||||||
SC_ArmUart2RxDma();
|
if ((huart2.RxState == HAL_UART_STATE_READY) && (serial_control.command_ready == 0)) {
|
||||||
SC_ArmUart5RxDma();
|
if ((HAL_UARTEx_ReceiveToIdle_IT(&huart2, serial_control.rx_buffer, MAX_RX_BUFFER_SIZE - 1) != HAL_OK) &&
|
||||||
|
(HAL_UART_GetError(&huart2) != HAL_UART_ERROR_NONE)) {
|
||||||
|
(void)HAL_UART_Abort_IT(&huart2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (huart5.RxState == HAL_UART_STATE_READY) {
|
||||||
|
if ((HAL_UARTEx_ReceiveToIdle_IT(&huart5, serial_iso.rx_buffer, MAX_RX_BUFFER_SIZE - 1) != HAL_OK) &&
|
||||||
|
(HAL_UART_GetError(&huart5) != HAL_UART_ERROR_NONE)) {
|
||||||
|
(void)HAL_UART_Abort_IT(&huart5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Проверка таймаута отправки пакета (больше 100 мс)
|
// Проверка таймаута отправки пакета (больше 100 мс)
|
||||||
if (huart2.gState == HAL_UART_STATE_BUSY_TX && serial_control.tx_tick != 0) {
|
if (huart2.gState == HAL_UART_STATE_BUSY_TX && serial_control.tx_tick != 0) {
|
||||||
if ((int32_t)(HAL_GetTick() - serial_control.tx_tick) > 100) {
|
if ((HAL_GetTick() - serial_control.tx_tick) > 100) {
|
||||||
// Таймаут: принудительно сбрасываем передачу
|
// Таймаут: принудительно сбрасываем передачу
|
||||||
(void)HAL_UART_AbortTransmit(&huart2);
|
HAL_UART_Abort_IT(&huart2);
|
||||||
|
// Выключаем DIR при сбросе передачи
|
||||||
|
HAL_GPIO_WritePin(USART2_DIR_GPIO_Port, USART2_DIR_Pin, GPIO_PIN_RESET);
|
||||||
serial_control.tx_tick = 0; // Сбрасываем tick
|
serial_control.tx_tick = 0; // Сбрасываем tick
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -114,37 +120,34 @@ void SC_Task() {
|
|||||||
// Проверка наличия принятой команды для обработки
|
// Проверка наличия принятой команды для обработки
|
||||||
if (serial_control.command_ready && (huart2.gState != HAL_UART_STATE_BUSY_TX)) {
|
if (serial_control.command_ready && (huart2.gState != HAL_UART_STATE_BUSY_TX)) {
|
||||||
// HAL_Delay(2);
|
// HAL_Delay(2);
|
||||||
SC_CommandHandler((ReceivedCommand_t*)&serial_control.received_command);
|
SC_CommandHandler(&serial_control.received_command);
|
||||||
|
if ((HAL_UARTEx_ReceiveToIdle_IT(&huart2, serial_control.rx_buffer, MAX_RX_BUFFER_SIZE - 1) != HAL_OK) &&
|
||||||
|
(HAL_UART_GetError(&huart2) != HAL_UART_ERROR_NONE)) {
|
||||||
|
(void)HAL_UART_Abort_IT(&huart2);
|
||||||
|
}
|
||||||
serial_control.command_ready = 0; // Сбрасываем флаг
|
serial_control.command_ready = 0; // Сбрасываем флаг
|
||||||
SC_ArmUart2RxDma();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ISR_FAST void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) {
|
ISR_FAST void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) {
|
||||||
if (huart->Instance == huart2.Instance) {
|
if (huart->Instance == huart2.Instance) {
|
||||||
if (Size == 0u) {
|
if (huart2.gState == HAL_UART_STATE_BUSY_TX) {
|
||||||
log_printf(LOG_WARN, "UART2 RX idle event with zero size\n");
|
sc_uart2_rx_during_tx = 1u;
|
||||||
}
|
}
|
||||||
sc_uart2_last_packet_tick = HAL_GetTick();
|
sc_uart2_last_packet_tick = HAL_GetTick();
|
||||||
sc_uart2_last_recover_tick = sc_uart2_last_packet_tick;
|
sc_uart2_last_reinit_tick = sc_uart2_last_packet_tick;
|
||||||
sc_uart2_timed_out = 0;
|
sc_uart2_timed_out = 0;
|
||||||
if(!process_received_packet(&serial_control, serial_control.rx_buffer, Size)){
|
if(!process_received_packet(&serial_control, serial_control.rx_buffer, Size)){
|
||||||
log_printf(LOG_WARN, "UART2 RX invalid packet len=%u\n", (unsigned)Size);
|
|
||||||
SC_SendPacket(NULL, 0, RESP_INVALID);
|
SC_SendPacket(NULL, 0, RESP_INVALID);
|
||||||
}
|
}
|
||||||
g_sc_command_source = SC_SOURCE_UART2;
|
g_sc_command_source = SC_SOURCE_UART2;
|
||||||
SC_ArmUart2RxDma();
|
HAL_UARTEx_ReceiveToIdle_IT(&huart2, serial_control.rx_buffer, MAX_RX_BUFFER_SIZE - 1);
|
||||||
} else if (huart->Instance == huart5.Instance) {
|
} else if (huart->Instance == huart5.Instance) {
|
||||||
if (Size == 0u) {
|
|
||||||
log_printf(LOG_WARN, "UART5 RX idle event with zero size\n");
|
|
||||||
}
|
|
||||||
if (process_received_packet(&serial_iso, serial_iso.rx_buffer, Size)) {
|
if (process_received_packet(&serial_iso, serial_iso.rx_buffer, Size)) {
|
||||||
g_sc_command_source = SC_SOURCE_UART5;
|
g_sc_command_source = SC_SOURCE_UART5;
|
||||||
SC_CommandHandler((ReceivedCommand_t*)&serial_iso.received_command);
|
SC_CommandHandler((ReceivedCommand_t*)&serial_iso.received_command);
|
||||||
} else {
|
|
||||||
log_printf(LOG_WARN, "UART5 RX invalid packet len=%u\n", (unsigned)Size);
|
|
||||||
}
|
}
|
||||||
SC_ArmUart5RxDma();
|
HAL_UARTEx_ReceiveToIdle_IT(&huart5, serial_iso.rx_buffer, MAX_RX_BUFFER_SIZE - 1);
|
||||||
} else if (huart->Instance == huart3.Instance) {
|
} else if (huart->Instance == huart3.Instance) {
|
||||||
CCS_RxEventCallback(huart, Size);
|
CCS_RxEventCallback(huart, Size);
|
||||||
}
|
}
|
||||||
@@ -152,9 +155,8 @@ ISR_FAST void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Siz
|
|||||||
|
|
||||||
ISR_FAST void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) {
|
ISR_FAST void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) {
|
||||||
if (huart->Instance == huart2.Instance) {
|
if (huart->Instance == huart2.Instance) {
|
||||||
|
HAL_GPIO_WritePin(USART2_DIR_GPIO_Port, USART2_DIR_Pin, GPIO_PIN_RESET);
|
||||||
serial_control.tx_tick = 0;
|
serial_control.tx_tick = 0;
|
||||||
} else if (huart->Instance == huart3.Instance) {
|
|
||||||
CCS_TxCpltCallback(huart);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -215,15 +217,17 @@ ISR_FAST void SC_SendPacket(const uint8_t* payload, uint16_t payload_len, uint8_
|
|||||||
uint16_t packet_len = encode_packet(payload, payload_len, serial_control.tx_buffer, response_code);
|
uint16_t packet_len = encode_packet(payload, payload_len, serial_control.tx_buffer, response_code);
|
||||||
|
|
||||||
if (packet_len > 0) {
|
if (packet_len > 0) {
|
||||||
if (huart2.gState != HAL_UART_STATE_READY) {
|
if (huart2.gState == HAL_UART_STATE_BUSY_TX) {
|
||||||
(void)HAL_UART_AbortTransmit(&huart2);
|
HAL_UART_Abort_IT(&huart2);
|
||||||
log_printf(LOG_WARN, "UART2 TX busy, abort transmit before resend\n");
|
HAL_GPIO_WritePin(USART2_DIR_GPIO_Port, USART2_DIR_Pin, GPIO_PIN_RESET);
|
||||||
}
|
|
||||||
if (HAL_UART_Transmit_DMA(&huart2, serial_control.tx_buffer, packet_len) != HAL_OK) {
|
|
||||||
SC_LogUartError("UART2 TX DMA start failed", &huart2);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HAL_GPIO_WritePin(USART2_DIR_GPIO_Port, USART2_DIR_Pin, GPIO_PIN_SET);
|
||||||
|
|
||||||
|
sc_uart2_rx_during_tx = 0u;
|
||||||
|
|
||||||
|
HAL_UART_Transmit_IT(&huart2, serial_control.tx_buffer, packet_len);
|
||||||
|
|
||||||
serial_control.tx_tick = HAL_GetTick();
|
serial_control.tx_tick = HAL_GetTick();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -272,66 +276,39 @@ ISR_FAST static uint8_t process_received_packet(SerialControl_t *ctx, const uint
|
|||||||
|
|
||||||
static void SC_UART2_Watchdog(void) {
|
static void SC_UART2_Watchdog(void) {
|
||||||
const uint32_t now = HAL_GetTick();
|
const uint32_t now = HAL_GetTick();
|
||||||
const int32_t since_last_packet = (int32_t)(now - sc_uart2_last_packet_tick);
|
const uint32_t since_last_packet = now - sc_uart2_last_packet_tick;
|
||||||
|
|
||||||
if (since_last_packet >= (int32_t)SC_UART2_PACKET_TIMEOUT_MS) {
|
if ((huart2.gState == HAL_UART_STATE_BUSY_TX) && (sc_uart2_rx_during_tx != 0u)) {
|
||||||
|
HAL_GPIO_WritePin(USART2_DIR_GPIO_Port, USART2_DIR_Pin, GPIO_PIN_RESET);
|
||||||
|
(void)HAL_UART_Abort_IT(&huart2);
|
||||||
|
(void)HAL_UART_DeInit(&huart2);
|
||||||
|
(void)HAL_UART_Init(&huart2);
|
||||||
|
(void)HAL_UARTEx_ReceiveToIdle_IT(&huart2, serial_control.rx_buffer, MAX_RX_BUFFER_SIZE - 1);
|
||||||
|
serial_control.tx_tick = 0;
|
||||||
|
sc_uart2_rx_during_tx = 0u;
|
||||||
|
sc_uart2_last_reinit_tick = now;
|
||||||
|
log_printf(LOG_ERR, "USART2 BUSY_TX: hard reinit\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (since_last_packet >= SC_UART2_PACKET_TIMEOUT_MS) {
|
||||||
if (sc_uart2_timed_out == 0u) {
|
if (sc_uart2_timed_out == 0u) {
|
||||||
serial_control.command_ready = 0;
|
serial_control.command_ready = 0;
|
||||||
log_printf(LOG_WARN, "UART2 RX packet timeout (%u ms)\n", (unsigned)SC_UART2_PACKET_TIMEOUT_MS);
|
|
||||||
}
|
}
|
||||||
sc_uart2_timed_out = 1;
|
sc_uart2_timed_out = 1;
|
||||||
} else {
|
} else {
|
||||||
sc_uart2_timed_out = 0;
|
sc_uart2_timed_out = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((huart2.RxState == HAL_UART_STATE_READY) &&
|
if ((since_last_packet >= SC_UART2_REINIT_TIMEOUT_MS) &&
|
||||||
((int32_t)(now - sc_uart2_last_recover_tick) >= (int32_t)SC_UART2_RECOVER_GUARD_MS)) {
|
((now - sc_uart2_last_reinit_tick) >= SC_UART2_REINIT_TIMEOUT_MS)) {
|
||||||
SC_ArmUart2RxDma();
|
HAL_GPIO_WritePin(USART2_DIR_GPIO_Port, USART2_DIR_Pin, GPIO_PIN_RESET);
|
||||||
sc_uart2_last_recover_tick = now;
|
(void)HAL_UART_Abort_IT(&huart2);
|
||||||
|
(void)HAL_UART_DeInit(&huart2);
|
||||||
|
(void)HAL_UART_Init(&huart2);
|
||||||
|
(void)HAL_UARTEx_ReceiveToIdle_IT(&huart2, serial_control.rx_buffer, MAX_RX_BUFFER_SIZE - 1);
|
||||||
|
sc_uart2_last_reinit_tick = now;
|
||||||
|
log_printf(LOG_ERR, "USART2 stalled: hard reinit\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void SC_ArmUart2RxDma(void) {
|
|
||||||
if ((huart2.RxState == HAL_UART_STATE_READY) && (serial_control.command_ready == 0)) {
|
|
||||||
if (HAL_UARTEx_ReceiveToIdle_DMA(&huart2, serial_control.rx_buffer, MAX_RX_BUFFER_SIZE - 1) != HAL_OK) {
|
|
||||||
SC_LogUartError("UART2 RX DMA arm failed", &huart2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void SC_ArmUart5RxDma(void) {
|
|
||||||
if (huart5.RxState == HAL_UART_STATE_READY) {
|
|
||||||
if (HAL_UARTEx_ReceiveToIdle_IT(&huart5, serial_iso.rx_buffer, MAX_RX_BUFFER_SIZE - 1) == HAL_OK) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
SC_LogUartError("UART5 RX IT arm failed", &huart5);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void SC_RecoverUartDma(UART_HandleTypeDef *huart) {
|
|
||||||
if (huart == &huart2) {
|
|
||||||
SC_LogUartError("UART2 recover start", &huart2);
|
|
||||||
(void)HAL_UART_AbortReceive(&huart2);
|
|
||||||
(void)HAL_UART_AbortTransmit(&huart2);
|
|
||||||
serial_control.tx_tick = 0;
|
|
||||||
SC_ArmUart2RxDma();
|
|
||||||
sc_uart2_last_recover_tick = HAL_GetTick();
|
|
||||||
} else if (huart == &huart5) {
|
|
||||||
SC_LogUartError("UART5 recover start", &huart5);
|
|
||||||
(void)HAL_UART_AbortReceive(&huart5);
|
|
||||||
SC_ArmUart5RxDma();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void SC_LogUartError(const char *tag, UART_HandleTypeDef *huart) {
|
|
||||||
if (tag == NULL || huart == NULL) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
log_printf(LOG_ERR, "%s: instance=0x%08lx err=0x%08lx g=%lu rx=%lu\n",
|
|
||||||
tag,
|
|
||||||
(unsigned long)huart->Instance,
|
|
||||||
(unsigned long)HAL_UART_GetError(huart),
|
|
||||||
(unsigned long)huart->gState,
|
|
||||||
(unsigned long)huart->RxState);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|||||||
+10
-15
@@ -1,15 +1,14 @@
|
|||||||
#include "serial_control.h"
|
#include "serial_control.h"
|
||||||
|
|
||||||
#include "board.h"
|
|
||||||
#include "charger_control.h"
|
|
||||||
#include "debug.h"
|
|
||||||
#include "fire_alarm.h"
|
|
||||||
#include "psu_control.h"
|
|
||||||
#include "usart.h"
|
#include "usart.h"
|
||||||
|
#include "charger_control.h"
|
||||||
|
#include "board.h"
|
||||||
|
#include "psu_control.h"
|
||||||
|
#include "debug.h"
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#ifdef USE_WEB_INTERFACE
|
||||||
|
|
||||||
extern volatile SC_Source_t g_sc_command_source;
|
extern volatile SC_Source_t g_sc_command_source;
|
||||||
static void monitoring_data_callback(void);
|
|
||||||
|
|
||||||
IsolationStatusPacket_t ISO = {
|
IsolationStatusPacket_t ISO = {
|
||||||
.isolationResistance = 0xFFFF
|
.isolationResistance = 0xFFFF
|
||||||
@@ -87,10 +86,6 @@ void SC_CommandHandler(ReceivedCommand_t* cmd) {
|
|||||||
// }
|
// }
|
||||||
response_code = RESP_FAILED;
|
response_code = RESP_FAILED;
|
||||||
break;
|
break;
|
||||||
case CMD_FIRE_ALARM:
|
|
||||||
FireAlarm_Activate();
|
|
||||||
response_code = RESP_SUCCESS;
|
|
||||||
break;
|
|
||||||
case CMD_DEVICE_RESET:
|
case CMD_DEVICE_RESET:
|
||||||
// 2. Отправляем SUCCESS (хост может успеть получить его перед ребутом)
|
// 2. Отправляем SUCCESS (хост может успеть получить его перед ребутом)
|
||||||
SC_SendPacket(NULL, 0, RESP_SUCCESS);
|
SC_SendPacket(NULL, 0, RESP_SUCCESS);
|
||||||
@@ -127,7 +122,7 @@ void SC_CommandHandler(ReceivedCommand_t* cmd) {
|
|||||||
|
|
||||||
|
|
||||||
// Колбэк для заполнения данных мониторинга
|
// Колбэк для заполнения данных мониторинга
|
||||||
static void monitoring_data_callback(void) {
|
void monitoring_data_callback() {
|
||||||
|
|
||||||
// Информация о зарядной сессии
|
// Информация о зарядной сессии
|
||||||
statusPacket.SOC = CONN.SOC;
|
statusPacket.SOC = CONN.SOC;
|
||||||
@@ -139,9 +134,8 @@ static void monitoring_data_callback(void) {
|
|||||||
statusPacket.outputEnabled = CONN.outputEnabled;
|
statusPacket.outputEnabled = CONN.outputEnabled;
|
||||||
statusPacket.chargingError = CONN.chargingError;
|
statusPacket.chargingError = CONN.chargingError;
|
||||||
statusPacket.connState = CONN.connState;
|
statusPacket.connState = CONN.connState;
|
||||||
CONN_GetElapsedForMonitoring(
|
statusPacket.chargingElapsedTimeMin = 0;
|
||||||
&statusPacket.chargingElapsedTimeMin,
|
statusPacket.chargingElapsedTimeSec = 0;
|
||||||
&statusPacket.chargingElapsedTimeSec);
|
|
||||||
statusPacket.estimatedRemainingChargingTime = 0;
|
statusPacket.estimatedRemainingChargingTime = 0;
|
||||||
|
|
||||||
// состояние зарядной станции
|
// состояние зарядной станции
|
||||||
@@ -208,3 +202,4 @@ static void monitoring_data_callback(void) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|||||||
+22
-2
@@ -1,4 +1,11 @@
|
|||||||
#include "soft_rtc.h"
|
/*
|
||||||
|
* rtc.c
|
||||||
|
*
|
||||||
|
* Created on: Jul 22, 2024
|
||||||
|
* Author: colorbass
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <soft_rtc.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
@@ -56,7 +63,20 @@ uint8_t getTimeReg(uint8_t reg_number){
|
|||||||
}else{
|
}else{
|
||||||
return 0x00;
|
return 0x00;
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
//int main() {
|
||||||
|
// uint32_t unix_time = 1672531199; // Example Unix timestamp
|
||||||
|
// uint8_t time[8];
|
||||||
|
//
|
||||||
|
// unix_to_bcd(unix_time, time);
|
||||||
|
//
|
||||||
|
// // Print the BCD values for verification
|
||||||
|
// for (int i = 0; i < 8; i++) {
|
||||||
|
// log_printf(LOG_INFO, "time[%d]: %02X\n", i, time[i]);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return 0;
|
||||||
|
//}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Read the time counter available in RTC_CNT registers.
|
* @brief Read the time counter available in RTC_CNT registers.
|
||||||
|
|||||||
@@ -1,5 +1,21 @@
|
|||||||
/* USER CODE BEGIN Header */
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32f1xx_hal_msp.c
|
||||||
|
* @brief This file provides code for the MSP Initialization
|
||||||
|
* and de-Initialization codes.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2024 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
/* USER CODE END Header */
|
/* USER CODE END Header */
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
|||||||
+16
-61
@@ -1,5 +1,20 @@
|
|||||||
/* USER CODE BEGIN Header */
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32f1xx_it.c
|
||||||
|
* @brief Interrupt Service Routines.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2024 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
/* USER CODE END Header */
|
/* USER CODE END Header */
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
/* Includes ------------------------------------------------------------------*/
|
||||||
@@ -48,10 +63,6 @@ extern ADC_HandleTypeDef hadc1;
|
|||||||
extern CAN_HandleTypeDef hcan1;
|
extern CAN_HandleTypeDef hcan1;
|
||||||
extern CAN_HandleTypeDef hcan2;
|
extern CAN_HandleTypeDef hcan2;
|
||||||
extern TIM_HandleTypeDef htim3;
|
extern TIM_HandleTypeDef htim3;
|
||||||
extern DMA_HandleTypeDef hdma_usart2_rx;
|
|
||||||
extern DMA_HandleTypeDef hdma_usart2_tx;
|
|
||||||
extern DMA_HandleTypeDef hdma_usart3_rx;
|
|
||||||
extern DMA_HandleTypeDef hdma_usart3_tx;
|
|
||||||
extern UART_HandleTypeDef huart5;
|
extern UART_HandleTypeDef huart5;
|
||||||
extern UART_HandleTypeDef huart1;
|
extern UART_HandleTypeDef huart1;
|
||||||
extern UART_HandleTypeDef huart2;
|
extern UART_HandleTypeDef huart2;
|
||||||
@@ -212,62 +223,6 @@ HAL_GPIO_WritePin(DBG4_GPIO_Port, DBG4_Pin, GPIO_PIN_RESET);
|
|||||||
/* USER CODE END DMA1_Channel1_IRQn 1 */
|
/* USER CODE END DMA1_Channel1_IRQn 1 */
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief This function handles DMA1 channel2 global interrupt.
|
|
||||||
*/
|
|
||||||
void DMA1_Channel2_IRQHandler(void)
|
|
||||||
{
|
|
||||||
/* USER CODE BEGIN DMA1_Channel2_IRQn 0 */
|
|
||||||
|
|
||||||
/* USER CODE END DMA1_Channel2_IRQn 0 */
|
|
||||||
HAL_DMA_IRQHandler(&hdma_usart3_tx);
|
|
||||||
/* USER CODE BEGIN DMA1_Channel2_IRQn 1 */
|
|
||||||
|
|
||||||
/* USER CODE END DMA1_Channel2_IRQn 1 */
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief This function handles DMA1 channel3 global interrupt.
|
|
||||||
*/
|
|
||||||
void DMA1_Channel3_IRQHandler(void)
|
|
||||||
{
|
|
||||||
/* USER CODE BEGIN DMA1_Channel3_IRQn 0 */
|
|
||||||
|
|
||||||
/* USER CODE END DMA1_Channel3_IRQn 0 */
|
|
||||||
HAL_DMA_IRQHandler(&hdma_usart3_rx);
|
|
||||||
/* USER CODE BEGIN DMA1_Channel3_IRQn 1 */
|
|
||||||
|
|
||||||
/* USER CODE END DMA1_Channel3_IRQn 1 */
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief This function handles DMA1 channel6 global interrupt.
|
|
||||||
*/
|
|
||||||
void DMA1_Channel6_IRQHandler(void)
|
|
||||||
{
|
|
||||||
/* USER CODE BEGIN DMA1_Channel6_IRQn 0 */
|
|
||||||
|
|
||||||
/* USER CODE END DMA1_Channel6_IRQn 0 */
|
|
||||||
HAL_DMA_IRQHandler(&hdma_usart2_rx);
|
|
||||||
/* USER CODE BEGIN DMA1_Channel6_IRQn 1 */
|
|
||||||
|
|
||||||
/* USER CODE END DMA1_Channel6_IRQn 1 */
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief This function handles DMA1 channel7 global interrupt.
|
|
||||||
*/
|
|
||||||
void DMA1_Channel7_IRQHandler(void)
|
|
||||||
{
|
|
||||||
/* USER CODE BEGIN DMA1_Channel7_IRQn 0 */
|
|
||||||
|
|
||||||
/* USER CODE END DMA1_Channel7_IRQn 0 */
|
|
||||||
HAL_DMA_IRQHandler(&hdma_usart2_tx);
|
|
||||||
/* USER CODE BEGIN DMA1_Channel7_IRQn 1 */
|
|
||||||
|
|
||||||
/* USER CODE END DMA1_Channel7_IRQn 1 */
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This function handles ADC1 and ADC2 global interrupts.
|
* @brief This function handles ADC1 and ADC2 global interrupts.
|
||||||
*/
|
*/
|
||||||
|
|||||||
+18
-2
@@ -1,5 +1,21 @@
|
|||||||
/* USER CODE BEGIN Header */
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file tim.c
|
||||||
|
* @brief This file provides code for the configuration
|
||||||
|
* of the TIM instances.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2025 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
/* USER CODE END Header */
|
/* USER CODE END Header */
|
||||||
/* Includes ------------------------------------------------------------------*/
|
/* Includes ------------------------------------------------------------------*/
|
||||||
#include "tim.h"
|
#include "tim.h"
|
||||||
@@ -150,7 +166,7 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
|
|||||||
__HAL_RCC_TIM3_CLK_ENABLE();
|
__HAL_RCC_TIM3_CLK_ENABLE();
|
||||||
|
|
||||||
/* TIM3 interrupt Init */
|
/* TIM3 interrupt Init */
|
||||||
HAL_NVIC_SetPriority(TIM3_IRQn, 6, 0);
|
HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0);
|
||||||
HAL_NVIC_EnableIRQ(TIM3_IRQn);
|
HAL_NVIC_EnableIRQ(TIM3_IRQn);
|
||||||
/* USER CODE BEGIN TIM3_MspInit 1 */
|
/* USER CODE BEGIN TIM3_MspInit 1 */
|
||||||
|
|
||||||
|
|||||||
+24
-86
@@ -1,5 +1,21 @@
|
|||||||
/* USER CODE BEGIN Header */
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file usart.c
|
||||||
|
* @brief This file provides code for the configuration
|
||||||
|
* of the USART instances.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2025 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
/* USER CODE END Header */
|
/* USER CODE END Header */
|
||||||
/* Includes ------------------------------------------------------------------*/
|
/* Includes ------------------------------------------------------------------*/
|
||||||
#include "usart.h"
|
#include "usart.h"
|
||||||
@@ -12,10 +28,6 @@ UART_HandleTypeDef huart5;
|
|||||||
UART_HandleTypeDef huart1;
|
UART_HandleTypeDef huart1;
|
||||||
UART_HandleTypeDef huart2;
|
UART_HandleTypeDef huart2;
|
||||||
UART_HandleTypeDef huart3;
|
UART_HandleTypeDef huart3;
|
||||||
DMA_HandleTypeDef hdma_usart2_rx;
|
|
||||||
DMA_HandleTypeDef hdma_usart2_tx;
|
|
||||||
DMA_HandleTypeDef hdma_usart3_rx;
|
|
||||||
DMA_HandleTypeDef hdma_usart3_tx;
|
|
||||||
|
|
||||||
/* UART5 init function */
|
/* UART5 init function */
|
||||||
void MX_UART5_Init(void)
|
void MX_UART5_Init(void)
|
||||||
@@ -151,10 +163,10 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
|
|||||||
PC12 ------> UART5_TX
|
PC12 ------> UART5_TX
|
||||||
PD2 ------> UART5_RX
|
PD2 ------> UART5_RX
|
||||||
*/
|
*/
|
||||||
GPIO_InitStruct.Pin = HEATER_Pin;
|
GPIO_InitStruct.Pin = GPIO_PIN_12;
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
||||||
HAL_GPIO_Init(HEATER_GPIO_Port, &GPIO_InitStruct);
|
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
||||||
|
|
||||||
GPIO_InitStruct.Pin = GPIO_PIN_2;
|
GPIO_InitStruct.Pin = GPIO_PIN_2;
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
||||||
@@ -162,7 +174,7 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
|
|||||||
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
|
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
|
||||||
|
|
||||||
/* UART5 interrupt Init */
|
/* UART5 interrupt Init */
|
||||||
HAL_NVIC_SetPriority(UART5_IRQn, 5, 0);
|
HAL_NVIC_SetPriority(UART5_IRQn, 0, 0);
|
||||||
HAL_NVIC_EnableIRQ(UART5_IRQn);
|
HAL_NVIC_EnableIRQ(UART5_IRQn);
|
||||||
/* USER CODE BEGIN UART5_MspInit 1 */
|
/* USER CODE BEGIN UART5_MspInit 1 */
|
||||||
|
|
||||||
@@ -192,7 +204,7 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
|
|||||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||||
|
|
||||||
/* USART1 interrupt Init */
|
/* USART1 interrupt Init */
|
||||||
HAL_NVIC_SetPriority(USART1_IRQn, 5, 0);
|
HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);
|
||||||
HAL_NVIC_EnableIRQ(USART1_IRQn);
|
HAL_NVIC_EnableIRQ(USART1_IRQn);
|
||||||
/* USER CODE BEGIN USART1_MspInit 1 */
|
/* USER CODE BEGIN USART1_MspInit 1 */
|
||||||
|
|
||||||
@@ -223,41 +235,8 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
|
|||||||
|
|
||||||
__HAL_AFIO_REMAP_USART2_ENABLE();
|
__HAL_AFIO_REMAP_USART2_ENABLE();
|
||||||
|
|
||||||
/* USART2 DMA Init */
|
|
||||||
/* USART2_RX Init */
|
|
||||||
hdma_usart2_rx.Instance = DMA1_Channel6;
|
|
||||||
hdma_usart2_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
|
|
||||||
hdma_usart2_rx.Init.PeriphInc = DMA_PINC_DISABLE;
|
|
||||||
hdma_usart2_rx.Init.MemInc = DMA_MINC_ENABLE;
|
|
||||||
hdma_usart2_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
|
|
||||||
hdma_usart2_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
|
|
||||||
hdma_usart2_rx.Init.Mode = DMA_NORMAL;
|
|
||||||
hdma_usart2_rx.Init.Priority = DMA_PRIORITY_VERY_HIGH;
|
|
||||||
if (HAL_DMA_Init(&hdma_usart2_rx) != HAL_OK)
|
|
||||||
{
|
|
||||||
Error_Handler();
|
|
||||||
}
|
|
||||||
|
|
||||||
__HAL_LINKDMA(uartHandle,hdmarx,hdma_usart2_rx);
|
|
||||||
|
|
||||||
/* USART2_TX Init */
|
|
||||||
hdma_usart2_tx.Instance = DMA1_Channel7;
|
|
||||||
hdma_usart2_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
|
|
||||||
hdma_usart2_tx.Init.PeriphInc = DMA_PINC_DISABLE;
|
|
||||||
hdma_usart2_tx.Init.MemInc = DMA_MINC_ENABLE;
|
|
||||||
hdma_usart2_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
|
|
||||||
hdma_usart2_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
|
|
||||||
hdma_usart2_tx.Init.Mode = DMA_NORMAL;
|
|
||||||
hdma_usart2_tx.Init.Priority = DMA_PRIORITY_HIGH;
|
|
||||||
if (HAL_DMA_Init(&hdma_usart2_tx) != HAL_OK)
|
|
||||||
{
|
|
||||||
Error_Handler();
|
|
||||||
}
|
|
||||||
|
|
||||||
__HAL_LINKDMA(uartHandle,hdmatx,hdma_usart2_tx);
|
|
||||||
|
|
||||||
/* USART2 interrupt Init */
|
/* USART2 interrupt Init */
|
||||||
HAL_NVIC_SetPriority(USART2_IRQn, 2, 0);
|
HAL_NVIC_SetPriority(USART2_IRQn, 0, 0);
|
||||||
HAL_NVIC_EnableIRQ(USART2_IRQn);
|
HAL_NVIC_EnableIRQ(USART2_IRQn);
|
||||||
/* USER CODE BEGIN USART2_MspInit 1 */
|
/* USER CODE BEGIN USART2_MspInit 1 */
|
||||||
|
|
||||||
@@ -288,41 +267,8 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
|
|||||||
|
|
||||||
__HAL_AFIO_REMAP_USART3_PARTIAL();
|
__HAL_AFIO_REMAP_USART3_PARTIAL();
|
||||||
|
|
||||||
/* USART3 DMA Init */
|
|
||||||
/* USART3_RX Init */
|
|
||||||
hdma_usart3_rx.Instance = DMA1_Channel3;
|
|
||||||
hdma_usart3_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
|
|
||||||
hdma_usart3_rx.Init.PeriphInc = DMA_PINC_DISABLE;
|
|
||||||
hdma_usart3_rx.Init.MemInc = DMA_MINC_ENABLE;
|
|
||||||
hdma_usart3_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
|
|
||||||
hdma_usart3_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
|
|
||||||
hdma_usart3_rx.Init.Mode = DMA_NORMAL;
|
|
||||||
hdma_usart3_rx.Init.Priority = DMA_PRIORITY_VERY_HIGH;
|
|
||||||
if (HAL_DMA_Init(&hdma_usart3_rx) != HAL_OK)
|
|
||||||
{
|
|
||||||
Error_Handler();
|
|
||||||
}
|
|
||||||
|
|
||||||
__HAL_LINKDMA(uartHandle,hdmarx,hdma_usart3_rx);
|
|
||||||
|
|
||||||
/* USART3_TX Init */
|
|
||||||
hdma_usart3_tx.Instance = DMA1_Channel2;
|
|
||||||
hdma_usart3_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
|
|
||||||
hdma_usart3_tx.Init.PeriphInc = DMA_PINC_DISABLE;
|
|
||||||
hdma_usart3_tx.Init.MemInc = DMA_MINC_ENABLE;
|
|
||||||
hdma_usart3_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
|
|
||||||
hdma_usart3_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
|
|
||||||
hdma_usart3_tx.Init.Mode = DMA_NORMAL;
|
|
||||||
hdma_usart3_tx.Init.Priority = DMA_PRIORITY_HIGH;
|
|
||||||
if (HAL_DMA_Init(&hdma_usart3_tx) != HAL_OK)
|
|
||||||
{
|
|
||||||
Error_Handler();
|
|
||||||
}
|
|
||||||
|
|
||||||
__HAL_LINKDMA(uartHandle,hdmatx,hdma_usart3_tx);
|
|
||||||
|
|
||||||
/* USART3 interrupt Init */
|
/* USART3 interrupt Init */
|
||||||
HAL_NVIC_SetPriority(USART3_IRQn, 2, 0);
|
HAL_NVIC_SetPriority(USART3_IRQn, 0, 0);
|
||||||
HAL_NVIC_EnableIRQ(USART3_IRQn);
|
HAL_NVIC_EnableIRQ(USART3_IRQn);
|
||||||
/* USER CODE BEGIN USART3_MspInit 1 */
|
/* USER CODE BEGIN USART3_MspInit 1 */
|
||||||
|
|
||||||
@@ -345,7 +291,7 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
|
|||||||
PC12 ------> UART5_TX
|
PC12 ------> UART5_TX
|
||||||
PD2 ------> UART5_RX
|
PD2 ------> UART5_RX
|
||||||
*/
|
*/
|
||||||
HAL_GPIO_DeInit(HEATER_GPIO_Port, HEATER_Pin);
|
HAL_GPIO_DeInit(GPIOC, GPIO_PIN_12);
|
||||||
|
|
||||||
HAL_GPIO_DeInit(GPIOD, GPIO_PIN_2);
|
HAL_GPIO_DeInit(GPIOD, GPIO_PIN_2);
|
||||||
|
|
||||||
@@ -389,10 +335,6 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
|
|||||||
*/
|
*/
|
||||||
HAL_GPIO_DeInit(GPIOD, GPIO_PIN_5|GPIO_PIN_6);
|
HAL_GPIO_DeInit(GPIOD, GPIO_PIN_5|GPIO_PIN_6);
|
||||||
|
|
||||||
/* USART2 DMA DeInit */
|
|
||||||
HAL_DMA_DeInit(uartHandle->hdmarx);
|
|
||||||
HAL_DMA_DeInit(uartHandle->hdmatx);
|
|
||||||
|
|
||||||
/* USART2 interrupt Deinit */
|
/* USART2 interrupt Deinit */
|
||||||
HAL_NVIC_DisableIRQ(USART2_IRQn);
|
HAL_NVIC_DisableIRQ(USART2_IRQn);
|
||||||
/* USER CODE BEGIN USART2_MspDeInit 1 */
|
/* USER CODE BEGIN USART2_MspDeInit 1 */
|
||||||
@@ -413,10 +355,6 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
|
|||||||
*/
|
*/
|
||||||
HAL_GPIO_DeInit(GPIOC, GPIO_PIN_10|GPIO_PIN_11);
|
HAL_GPIO_DeInit(GPIOC, GPIO_PIN_10|GPIO_PIN_11);
|
||||||
|
|
||||||
/* USART3 DMA DeInit */
|
|
||||||
HAL_DMA_DeInit(uartHandle->hdmarx);
|
|
||||||
HAL_DMA_DeInit(uartHandle->hdmatx);
|
|
||||||
|
|
||||||
/* USART3 interrupt Deinit */
|
/* USART3 interrupt Deinit */
|
||||||
HAL_NVIC_DisableIRQ(USART3_IRQn);
|
HAL_NVIC_DisableIRQ(USART3_IRQn);
|
||||||
/* USER CODE BEGIN USART3_MspDeInit 1 */
|
/* USER CODE BEGIN USART3_MspDeInit 1 */
|
||||||
|
|||||||
Vendored
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
+23006
-27334
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+3575
-4105
File diff suppressed because it is too large
Load Diff
Executable
BIN
Binary file not shown.
@@ -1,5 +1,5 @@
|
|||||||
../Core/Src/adc.c:13:6:ADC_ScanStart 2
|
../Core/Src/adc.c:29:6:ADC_ScanStart 2
|
||||||
../Core/Src/adc.c:21:15:HAL_ADC_ConvCpltCallback 2
|
../Core/Src/adc.c:37:15:HAL_ADC_ConvCpltCallback 2
|
||||||
../Core/Src/adc.c:43:6:MX_ADC1_Init 8
|
../Core/Src/adc.c:59:6:MX_ADC1_Init 8
|
||||||
../Core/Src/adc.c:130:6:HAL_ADC_MspInit 3
|
../Core/Src/adc.c:146:6:HAL_ADC_MspInit 3
|
||||||
../Core/Src/adc.c:184:6:HAL_ADC_MspDeInit 2
|
../Core/Src/adc.c:200:6:HAL_ADC_MspDeInit 2
|
||||||
|
|||||||
+13
-14
@@ -1,14 +1,13 @@
|
|||||||
../Core/Src/board.c:14:6:RELAY_Write 9
|
../Core/Src/board.c:18:6:RELAY_Write 9
|
||||||
../Core/Src/board.c:47:9:RELAY_Read 1
|
../Core/Src/board.c:51:9:RELAY_Read 1
|
||||||
../Core/Src/board.c:52:9:IN_ReadInput 8
|
../Core/Src/board.c:56:9:IN_ReadInput 8
|
||||||
../Core/Src/board.c:74:9:GetBoardTemp 1
|
../Core/Src/board.c:77:9:GetBoardTemp 1
|
||||||
../Core/Src/board.c:82:13:Heater_PinForceOutput 1
|
../Core/Src/board.c:89:6:Init_Peripheral 1
|
||||||
../Core/Src/board.c:95:6:Init_Peripheral 1
|
../Core/Src/board.c:106:7:pt1000_to_temperature 1
|
||||||
../Core/Src/board.c:114:7:pt1000_to_temperature 1
|
../Core/Src/board.c:117:7:calculate_NTC_resistance 2
|
||||||
../Core/Src/board.c:125:7:calculate_NTC_resistance 2
|
../Core/Src/board.c:132:9:CONN_ReadTemp 4
|
||||||
../Core/Src/board.c:140:9:CONN_ReadTemp 4
|
../Core/Src/board.c:152:9:GBT_ReadTemp 1
|
||||||
../Core/Src/board.c:159:9:GBT_ReadTemp 1
|
../Core/Src/board.c:156:6:ADC_Select_Channel 2
|
||||||
../Core/Src/board.c:163:6:ADC_Select_Channel 2
|
../Core/Src/board.c:167:9:ADC_TryLock 4
|
||||||
../Core/Src/board.c:174:9:ADC_TryLock 4
|
../Core/Src/board.c:183:6:ADC_LockBlocking 2
|
||||||
../Core/Src/board.c:190:6:ADC_LockBlocking 2
|
../Core/Src/board.c:189:6:ADC_Unlock 2
|
||||||
../Core/Src/board.c:196:6:ADC_Unlock 2
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
../Core/Src/can.c:15:6:MX_CAN1_Init 2
|
../Core/Src/can.c:31:6:MX_CAN1_Init 2
|
||||||
../Core/Src/can.c:47:6:MX_CAN2_Init 2
|
../Core/Src/can.c:63:6:MX_CAN2_Init 2
|
||||||
../Core/Src/can.c:81:6:HAL_CAN_MspInit 5
|
../Core/Src/can.c:97:6:HAL_CAN_MspInit 5
|
||||||
../Core/Src/can.c:160:6:HAL_CAN_MspDeInit 5
|
../Core/Src/can.c:176:6:HAL_CAN_MspDeInit 5
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
../Core/Src/charger_control.c:11:6:CONN_Init 1
|
../Core/Src/charger_control.c:12:6:CONN_Init 1
|
||||||
../Core/Src/charger_control.c:23:6:CONN_Loop 10
|
../Core/Src/charger_control.c:20:6:CONN_Loop 6
|
||||||
../Core/Src/charger_control.c:56:6:CONN_GetElapsedForMonitoring 3
|
../Core/Src/charger_control.c:42:6:CONN_Task 6
|
||||||
../Core/Src/charger_control.c:66:6:CONN_SetState 16
|
../Core/Src/charger_control.c:58:6:CONN_SetState 16
|
||||||
|
../Core/Src/charger_control.c:84:6:CONN_PrintChargingTotal 1
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
../Core/Src/cp.c:20:16:CP_ReadVoltageMv 1
|
../Core/Src/cp.c:16:16:CP_ReadVoltageMv 1
|
||||||
../Core/Src/cp.c:37:6:CP_Init 1
|
../Core/Src/cp.c:33:6:CP_Init 1
|
||||||
../Core/Src/cp.c:54:6:CP_SetDuty 1
|
../Core/Src/cp.c:50:6:CP_SetDuty 1
|
||||||
../Core/Src/cp.c:67:9:CP_GetDuty 1
|
../Core/Src/cp.c:63:9:CP_GetDuty 1
|
||||||
../Core/Src/cp.c:71:9:CP_GetVoltage 1
|
../Core/Src/cp.c:67:9:CP_GetVoltage 1
|
||||||
../Core/Src/cp.c:76:12:CP_GetState 12
|
../Core/Src/cp.c:72:12:CP_GetState 12
|
||||||
../Core/Src/cp.c:100:12:CP_GetFilteredState 1
|
../Core/Src/cp.c:96:6:CP_Loop 1
|
||||||
../Core/Src/cp.c:104:6:CP_FilterState 5
|
|
||||||
../Core/Src/cp.c:132:6:CP_Loop 5
|
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
../Core/Src/crc.c:14:6:MX_CRC_Init 2
|
../Core/Src/crc.c:30:6:MX_CRC_Init 2
|
||||||
../Core/Src/crc.c:35:6:HAL_CRC_MspInit 2
|
../Core/Src/crc.c:51:6:HAL_CRC_MspInit 2
|
||||||
../Core/Src/crc.c:51:6:HAL_CRC_MspDeInit 2
|
../Core/Src/crc.c:67:6:HAL_CRC_MspDeInit 2
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
../Core/Src/debug.c:35:5:_write 1
|
../Core/Src/debug.c:42:5:_write 1
|
||||||
../Core/Src/debug.c:43:6:debug_buffer_add 3
|
../Core/Src/debug.c:50:6:debug_buffer_add 3
|
||||||
../Core/Src/debug.c:63:10:debug_buffer_available 1
|
../Core/Src/debug.c:70:10:debug_buffer_available 1
|
||||||
../Core/Src/debug.c:72:6:debug_buffer_send 5
|
../Core/Src/debug.c:79:6:debug_buffer_send 5
|
||||||
../Core/Src/debug.c:112:5:log_printf 3
|
../Core/Src/debug.c:119:5:log_printf 3
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
../Core/Src/dma.c:23:6:MX_DMA_Init 1
|
../Core/Src/dma.c:39:6:MX_DMA_Init 1
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
../Core/Src/gpio.c:28:6:MX_GPIO_Init 1
|
../Core/Src/gpio.c:44:6:MX_GPIO_Init 1
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
../Drivers/CMSIS/Include/core_cm3.h:1762:34:__NVIC_SystemReset 1
|
../Core/Src/main.c:65:13:VectorBase_Config 1
|
||||||
../Core/Src/main.c:69:13:VectorBase_Config 1
|
../Core/Src/main.c:76:9:ED_TraceWarning 3
|
||||||
../Core/Src/main.c:80:9:ED_TraceWarning 3
|
../Core/Src/main.c:88:6:ED_Delay 3
|
||||||
../Core/Src/main.c:92:6:ED_Delay 3
|
../Core/Src/main.c:107:6:StopButtonControl 2
|
||||||
../Core/Src/main.c:111:13:StopButtonControl 8
|
../Core/Src/main.c:118:13:CAN1_MinimalReInit 3
|
||||||
../Core/Src/main.c:152:13:CAN1_MinimalReInit 3
|
../Core/Src/main.c:136:5:main 1
|
||||||
../Core/Src/main.c:170:5:main 1
|
../Core/Src/main.c:219:6:SystemClock_Config 4
|
||||||
../Core/Src/main.c:251:6:SystemClock_Config 4
|
../Core/Src/main.c:279:6:Error_Handler 1
|
||||||
../Core/Src/main.c:311:6:Error_Handler 1
|
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
../Core/Src/meter.c:9:6:METER_CalculateEnergy 3
|
../Core/Src/meter.c:17:6:METER_CalculateEnergy 3
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
../Core/Src/psu_control.c:35:13:PSU_SwitchState 1
|
../Core/Src/psu_control.c:34:13:PSU_SwitchState 1
|
||||||
../Core/Src/psu_control.c:40:17:PSU_StateTime 1
|
../Core/Src/psu_control.c:39:17:PSU_StateTime 1
|
||||||
../Core/Src/psu_control.c:44:15:HAL_CAN_RxFifo1MsgPendingCallback 9
|
../Core/Src/psu_control.c:43:15:HAL_CAN_RxFifo1MsgPendingCallback 9
|
||||||
../Core/Src/psu_control.c:118:6:PSU_CAN_FilterInit 2
|
../Core/Src/psu_control.c:117:6:PSU_CAN_FilterInit 2
|
||||||
../Core/Src/psu_control.c:141:6:PSU_Init 1
|
../Core/Src/psu_control.c:140:6:PSU_Init 1
|
||||||
../Core/Src/psu_control.c:159:6:PSU_Enable 3
|
../Core/Src/psu_control.c:157:6:PSU_Enable 3
|
||||||
../Core/Src/psu_control.c:171:6:PSU_SetHVMode 2
|
../Core/Src/psu_control.c:169:6:PSU_SetHVMode 2
|
||||||
../Core/Src/psu_control.c:178:6:PSU_SetVoltageCurrent 5
|
../Core/Src/psu_control.c:176:6:PSU_SetVoltageCurrent 5
|
||||||
../Core/Src/psu_control.c:205:6:PSU_SendCmd 4
|
../Core/Src/psu_control.c:203:6:PSU_SendCmd 4
|
||||||
../Core/Src/psu_control.c:240:6:PSU_ReadWrite 8
|
../Core/Src/psu_control.c:239:10:max 2
|
||||||
../Core/Src/psu_control.c:284:6:PSU_Task 41
|
../Core/Src/psu_control.c:244:6:PSU_ReadWrite 6
|
||||||
|
../Core/Src/psu_control.c:280:6:PSU_Task 41
|
||||||
|
|||||||
@@ -1,11 +1,6 @@
|
|||||||
../Core/Src/rgb_controller.c:111:6:LED_Write 18
|
../Core/Src/rgb_controller.c:92:6:LED_Write 16
|
||||||
../Core/Src/rgb_controller.c:173:6:interpolateColors 3
|
../Core/Src/rgb_controller.c:146:6:interpolateColors 3
|
||||||
../Core/Src/rgb_controller.c:203:13:ws2812_send_pixel 3
|
../Core/Src/rgb_controller.c:164:6:RGB_SetColor 1
|
||||||
../Core/Src/rgb_controller.c:222:13:ws2812_update 1
|
../Core/Src/rgb_controller.c:170:6:LED_SetColor 1
|
||||||
../Core/Src/rgb_controller.c:234:14:RGB_ScaleBrightness 1
|
../Core/Src/rgb_controller.c:175:6:LED_Init 1
|
||||||
../Core/Src/rgb_controller.c:249:13:LED_Ws2812ErrorBlinkUpdate 9
|
../Core/Src/rgb_controller.c:207:6:LED_Task 10
|
||||||
../Core/Src/rgb_controller.c:322:6:RGB_SetColor 1
|
|
||||||
../Core/Src/rgb_controller.c:328:6:WS2812_SetColor 1
|
|
||||||
../Core/Src/rgb_controller.c:334:6:LED_SetColor 1
|
|
||||||
../Core/Src/rgb_controller.c:339:6:LED_Init 1
|
|
||||||
../Core/Src/rgb_controller.c:348:6:LED_Task 10
|
|
||||||
|
|||||||
+18
-20
@@ -1,20 +1,18 @@
|
|||||||
../Core/Src/serial.c:65:22:uart3_log_hal_error 3
|
../Core/Src/serial.c:59:22:uart3_log_hal_error 3
|
||||||
../Core/Src/serial.c:85:22:uart3_arm_rx_or_log 3
|
../Core/Src/serial.c:79:22:uart3_arm_rx_or_log 3
|
||||||
../Core/Src/serial.c:101:15:CCS_RxEventCallback 4
|
../Core/Src/serial.c:94:15:CCS_RxEventCallback 4
|
||||||
../Core/Src/serial.c:124:15:HAL_UART_ErrorCallback 5
|
../Core/Src/serial.c:117:15:HAL_UART_ErrorCallback 5
|
||||||
../Core/Src/serial.c:144:6:CCS_TxCpltCallback 4
|
../Core/Src/serial.c:135:6:CCS_SerialLoop 43
|
||||||
../Core/Src/serial.c:160:6:CCS_SerialLoop 62
|
../Core/Src/serial.c:301:6:CCS_Init 1
|
||||||
../Core/Src/serial.c:360:6:CCS_Init 1
|
../Core/Src/serial.c:315:26:crc16_ibm 3
|
||||||
../Core/Src/serial.c:375:26:crc16_ibm 3
|
../Core/Src/serial.c:330:17:CCS_BuildPacket 4
|
||||||
../Core/Src/serial.c:390:17:CCS_BuildPacket 4
|
../Core/Src/serial.c:346:13:CCS_SendPacket 2
|
||||||
../Core/Src/serial.c:406:13:CCS_SendPacket 4
|
../Core/Src/serial.c:354:13:CCS_SendResetReason 1
|
||||||
../Core/Src/serial.c:423:13:CCS_SendResetReason 1
|
../Core/Src/serial.c:358:6:CCS_SendEmergencyStop 1
|
||||||
../Core/Src/serial.c:427:6:CCS_SendEmergencyStop 1
|
../Core/Src/serial.c:362:6:CCS_SendStart 1
|
||||||
../Core/Src/serial.c:431:6:CCS_SendStart 1
|
../Core/Src/serial.c:366:13:CCS_CalculateEnergy 2
|
||||||
../Core/Src/serial.c:435:13:CCS_CalculateEnergy 2
|
../Core/Src/serial.c:381:13:send_state 3
|
||||||
../Core/Src/serial.c:450:13:send_state 3
|
../Core/Src/serial.c:409:26:expected_payload_len 2
|
||||||
../Core/Src/serial.c:480:26:expected_payload_len 2
|
../Core/Src/serial.c:425:22:apply_command 13
|
||||||
../Core/Src/serial.c:496:22:apply_command 15
|
../Core/Src/serial.c:497:25:process_received_packet 8
|
||||||
../Core/Src/serial.c:578:25:process_received_packet 8
|
../Core/Src/serial.c:550:13:CCS_UART3_Watchdog 3
|
||||||
../Core/Src/serial.c:631:13:CCS_UART3_Watchdog 4
|
|
||||||
../Core/Src/serial.c:644:13:CCS_LogUart3Error 1
|
|
||||||
|
|||||||
@@ -1,15 +1,11 @@
|
|||||||
../Core/Src/serial_control.c:72:6:ReadVersion 1
|
../Core/Src/serial_control.c:70:6:ReadVersion 1
|
||||||
../Core/Src/serial_control.c:84:6:SC_Init 1
|
../Core/Src/serial_control.c:82:6:SC_Init 1
|
||||||
../Core/Src/serial_control.c:95:6:SC_Task 7
|
../Core/Src/serial_control.c:92:6:SC_Task 15
|
||||||
../Core/Src/serial_control.c:123:15:HAL_UARTEx_RxEventCallback 8
|
../Core/Src/serial_control.c:132:15:HAL_UARTEx_RxEventCallback 7
|
||||||
../Core/Src/serial_control.c:153:15:HAL_UART_TxCpltCallback 3
|
../Core/Src/serial_control.c:156:15:HAL_UART_TxCpltCallback 2
|
||||||
../Core/Src/serial_control.c:164:26:calculate_crc32 3
|
../Core/Src/serial_control.c:166:26:calculate_crc32 3
|
||||||
../Core/Src/serial_control.c:181:26:encode_packet 5
|
../Core/Src/serial_control.c:183:26:encode_packet 5
|
||||||
../Core/Src/serial_control.c:214:15:SC_SendPacket 4
|
../Core/Src/serial_control.c:216:15:SC_SendPacket 3
|
||||||
../Core/Src/serial_control.c:231:25:parse_packet 3
|
../Core/Src/serial_control.c:235:25:parse_packet 3
|
||||||
../Core/Src/serial_control.c:264:25:process_received_packet 2
|
../Core/Src/serial_control.c:268:25:process_received_packet 2
|
||||||
../Core/Src/serial_control.c:273:13:SC_UART2_Watchdog 5
|
../Core/Src/serial_control.c:277:13:SC_UART2_Watchdog 7
|
||||||
../Core/Src/serial_control.c:294:13:SC_ArmUart2RxDma 4
|
|
||||||
../Core/Src/serial_control.c:302:13:SC_ArmUart5RxDma 3
|
|
||||||
../Core/Src/serial_control.c:311:6:SC_RecoverUartDma 3
|
|
||||||
../Core/Src/serial_control.c:326:13:SC_LogUartError 3
|
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
../Drivers/CMSIS/Include/core_cm3.h:1762:34:__NVIC_SystemReset 1
|
../Drivers/CMSIS/Include/core_cm3.h:1762:34:__NVIC_SystemReset 1
|
||||||
../Core/Src/serial_handler.c:27:6:SC_CommandHandler 20
|
../Core/Src/serial_handler.c:26:6:SC_CommandHandler 19
|
||||||
../Core/Src/serial_handler.c:130:13:monitoring_data_callback 1
|
../Core/Src/serial_handler.c:125:6:monitoring_data_callback 1
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
../Core/Src/soft_rtc.c:15:10:get_Current_Time 1
|
../Core/Src/soft_rtc.c:22:10:get_Current_Time 1
|
||||||
../Core/Src/soft_rtc.c:19:6:set_Time 1
|
../Core/Src/soft_rtc.c:26:6:set_Time 1
|
||||||
../Core/Src/soft_rtc.c:23:9:to_bcd 1
|
../Core/Src/soft_rtc.c:30:9:to_bcd 1
|
||||||
../Core/Src/soft_rtc.c:27:6:unix_to_bcd 1
|
../Core/Src/soft_rtc.c:34:6:unix_to_bcd 1
|
||||||
../Core/Src/soft_rtc.c:41:6:writeTimeReg 2
|
../Core/Src/soft_rtc.c:48:6:writeTimeReg 2
|
||||||
../Core/Src/soft_rtc.c:46:9:getTimeReg 5
|
../Core/Src/soft_rtc.c:53:9:getTimeReg 5
|
||||||
../Core/Src/soft_rtc.c:67:17:RTC1_ReadTimeCounter 2
|
../Core/Src/soft_rtc.c:87:17:RTC1_ReadTimeCounter 2
|
||||||
../Core/Src/soft_rtc.c:99:26:RTC1_WriteTimeCounter 3
|
../Core/Src/soft_rtc.c:119:26:RTC1_WriteTimeCounter 3
|
||||||
../Core/Src/soft_rtc.c:131:26:RTC1_EnterInitMode 3
|
../Core/Src/soft_rtc.c:151:26:RTC1_EnterInitMode 3
|
||||||
../Core/Src/soft_rtc.c:158:26:RTC1_ExitInitMode 3
|
../Core/Src/soft_rtc.c:178:26:RTC1_ExitInitMode 3
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
../Core/Src/stm32f1xx_hal_msp.c:47:6:HAL_MspInit 1
|
../Core/Src/stm32f1xx_hal_msp.c:63:6:HAL_MspInit 1
|
||||||
|
|||||||
@@ -1,23 +1,19 @@
|
|||||||
../Core/Src/stm32f1xx_it.c:69:6:NMI_Handler 1
|
../Core/Src/stm32f1xx_it.c:80:6:NMI_Handler 1
|
||||||
../Core/Src/stm32f1xx_it.c:84:6:HardFault_Handler 1
|
../Core/Src/stm32f1xx_it.c:95:6:HardFault_Handler 1
|
||||||
../Core/Src/stm32f1xx_it.c:99:6:MemManage_Handler 1
|
../Core/Src/stm32f1xx_it.c:110:6:MemManage_Handler 1
|
||||||
../Core/Src/stm32f1xx_it.c:114:6:BusFault_Handler 1
|
../Core/Src/stm32f1xx_it.c:125:6:BusFault_Handler 1
|
||||||
../Core/Src/stm32f1xx_it.c:129:6:UsageFault_Handler 1
|
../Core/Src/stm32f1xx_it.c:140:6:UsageFault_Handler 1
|
||||||
../Core/Src/stm32f1xx_it.c:144:6:SVC_Handler 1
|
../Core/Src/stm32f1xx_it.c:155:6:SVC_Handler 1
|
||||||
../Core/Src/stm32f1xx_it.c:157:6:DebugMon_Handler 1
|
../Core/Src/stm32f1xx_it.c:168:6:DebugMon_Handler 1
|
||||||
../Core/Src/stm32f1xx_it.c:170:6:PendSV_Handler 1
|
../Core/Src/stm32f1xx_it.c:181:6:PendSV_Handler 1
|
||||||
../Core/Src/stm32f1xx_it.c:183:6:SysTick_Handler 1
|
../Core/Src/stm32f1xx_it.c:194:6:SysTick_Handler 1
|
||||||
../Core/Src/stm32f1xx_it.c:204:6:DMA1_Channel1_IRQHandler 1
|
../Core/Src/stm32f1xx_it.c:215:6:DMA1_Channel1_IRQHandler 1
|
||||||
../Core/Src/stm32f1xx_it.c:218:6:DMA1_Channel2_IRQHandler 1
|
../Core/Src/stm32f1xx_it.c:229:6:ADC1_2_IRQHandler 1
|
||||||
../Core/Src/stm32f1xx_it.c:232:6:DMA1_Channel3_IRQHandler 1
|
../Core/Src/stm32f1xx_it.c:243:6:CAN1_RX0_IRQHandler 1
|
||||||
../Core/Src/stm32f1xx_it.c:246:6:DMA1_Channel6_IRQHandler 1
|
../Core/Src/stm32f1xx_it.c:257:6:TIM3_IRQHandler 1
|
||||||
../Core/Src/stm32f1xx_it.c:260:6:DMA1_Channel7_IRQHandler 1
|
../Core/Src/stm32f1xx_it.c:271:6:USART1_IRQHandler 1
|
||||||
../Core/Src/stm32f1xx_it.c:274:6:ADC1_2_IRQHandler 1
|
../Core/Src/stm32f1xx_it.c:285:6:USART2_IRQHandler 1
|
||||||
../Core/Src/stm32f1xx_it.c:288:6:CAN1_RX0_IRQHandler 1
|
../Core/Src/stm32f1xx_it.c:299:6:USART3_IRQHandler 1
|
||||||
../Core/Src/stm32f1xx_it.c:302:6:TIM3_IRQHandler 1
|
../Core/Src/stm32f1xx_it.c:313:6:UART5_IRQHandler 1
|
||||||
../Core/Src/stm32f1xx_it.c:316:6:USART1_IRQHandler 1
|
../Core/Src/stm32f1xx_it.c:327:6:CAN2_TX_IRQHandler 1
|
||||||
../Core/Src/stm32f1xx_it.c:330:6:USART2_IRQHandler 1
|
../Core/Src/stm32f1xx_it.c:341:6:CAN2_RX1_IRQHandler 1
|
||||||
../Core/Src/stm32f1xx_it.c:344:6:USART3_IRQHandler 1
|
|
||||||
../Core/Src/stm32f1xx_it.c:358:6:UART5_IRQHandler 1
|
|
||||||
../Core/Src/stm32f1xx_it.c:372:6:CAN2_TX_IRQHandler 1
|
|
||||||
../Core/Src/stm32f1xx_it.c:386:6:CAN2_RX1_IRQHandler 1
|
|
||||||
|
|||||||
@@ -13,12 +13,9 @@ C_SRCS += \
|
|||||||
../Core/Src/crc.c \
|
../Core/Src/crc.c \
|
||||||
../Core/Src/debug.c \
|
../Core/Src/debug.c \
|
||||||
../Core/Src/dma.c \
|
../Core/Src/dma.c \
|
||||||
../Core/Src/fire_alarm.c \
|
|
||||||
../Core/Src/gpio.c \
|
../Core/Src/gpio.c \
|
||||||
../Core/Src/main.c \
|
../Core/Src/main.c \
|
||||||
../Core/Src/meter.c \
|
../Core/Src/meter.c \
|
||||||
../Core/Src/power_setpoint_executor.c \
|
|
||||||
../Core/Src/power_setpoint_policy.c \
|
|
||||||
../Core/Src/psu_control.c \
|
../Core/Src/psu_control.c \
|
||||||
../Core/Src/rgb_controller.c \
|
../Core/Src/rgb_controller.c \
|
||||||
../Core/Src/rtc.c \
|
../Core/Src/rtc.c \
|
||||||
@@ -44,12 +41,9 @@ C_DEPS += \
|
|||||||
./Core/Src/crc.d \
|
./Core/Src/crc.d \
|
||||||
./Core/Src/debug.d \
|
./Core/Src/debug.d \
|
||||||
./Core/Src/dma.d \
|
./Core/Src/dma.d \
|
||||||
./Core/Src/fire_alarm.d \
|
|
||||||
./Core/Src/gpio.d \
|
./Core/Src/gpio.d \
|
||||||
./Core/Src/main.d \
|
./Core/Src/main.d \
|
||||||
./Core/Src/meter.d \
|
./Core/Src/meter.d \
|
||||||
./Core/Src/power_setpoint_executor.d \
|
|
||||||
./Core/Src/power_setpoint_policy.d \
|
|
||||||
./Core/Src/psu_control.d \
|
./Core/Src/psu_control.d \
|
||||||
./Core/Src/rgb_controller.d \
|
./Core/Src/rgb_controller.d \
|
||||||
./Core/Src/rtc.d \
|
./Core/Src/rtc.d \
|
||||||
@@ -75,12 +69,9 @@ OBJS += \
|
|||||||
./Core/Src/crc.o \
|
./Core/Src/crc.o \
|
||||||
./Core/Src/debug.o \
|
./Core/Src/debug.o \
|
||||||
./Core/Src/dma.o \
|
./Core/Src/dma.o \
|
||||||
./Core/Src/fire_alarm.o \
|
|
||||||
./Core/Src/gpio.o \
|
./Core/Src/gpio.o \
|
||||||
./Core/Src/main.o \
|
./Core/Src/main.o \
|
||||||
./Core/Src/meter.o \
|
./Core/Src/meter.o \
|
||||||
./Core/Src/power_setpoint_executor.o \
|
|
||||||
./Core/Src/power_setpoint_policy.o \
|
|
||||||
./Core/Src/psu_control.o \
|
./Core/Src/psu_control.o \
|
||||||
./Core/Src/rgb_controller.o \
|
./Core/Src/rgb_controller.o \
|
||||||
./Core/Src/rtc.o \
|
./Core/Src/rtc.o \
|
||||||
@@ -105,7 +96,7 @@ Core/Src/%.o Core/Src/%.su Core/Src/%.cyclo: ../Core/Src/%.c Core/Src/subdir.mk
|
|||||||
clean: clean-Core-2f-Src
|
clean: clean-Core-2f-Src
|
||||||
|
|
||||||
clean-Core-2f-Src:
|
clean-Core-2f-Src:
|
||||||
-$(RM) ./Core/Src/adc.cyclo ./Core/Src/adc.d ./Core/Src/adc.o ./Core/Src/adc.su ./Core/Src/board.cyclo ./Core/Src/board.d ./Core/Src/board.o ./Core/Src/board.su ./Core/Src/can.cyclo ./Core/Src/can.d ./Core/Src/can.o ./Core/Src/can.su ./Core/Src/charger_control.cyclo ./Core/Src/charger_control.d ./Core/Src/charger_control.o ./Core/Src/charger_control.su ./Core/Src/cp.cyclo ./Core/Src/cp.d ./Core/Src/cp.o ./Core/Src/cp.su ./Core/Src/crc.cyclo ./Core/Src/crc.d ./Core/Src/crc.o ./Core/Src/crc.su ./Core/Src/debug.cyclo ./Core/Src/debug.d ./Core/Src/debug.o ./Core/Src/debug.su ./Core/Src/dma.cyclo ./Core/Src/dma.d ./Core/Src/dma.o ./Core/Src/dma.su ./Core/Src/fire_alarm.cyclo ./Core/Src/fire_alarm.d ./Core/Src/fire_alarm.o ./Core/Src/fire_alarm.su ./Core/Src/gpio.cyclo ./Core/Src/gpio.d ./Core/Src/gpio.o ./Core/Src/gpio.su ./Core/Src/main.cyclo ./Core/Src/main.d ./Core/Src/main.o ./Core/Src/main.su ./Core/Src/meter.cyclo ./Core/Src/meter.d ./Core/Src/meter.o ./Core/Src/meter.su ./Core/Src/power_setpoint_executor.cyclo ./Core/Src/power_setpoint_executor.d ./Core/Src/power_setpoint_executor.o ./Core/Src/power_setpoint_executor.su ./Core/Src/power_setpoint_policy.cyclo ./Core/Src/power_setpoint_policy.d ./Core/Src/power_setpoint_policy.o ./Core/Src/power_setpoint_policy.su ./Core/Src/psu_control.cyclo ./Core/Src/psu_control.d ./Core/Src/psu_control.o ./Core/Src/psu_control.su ./Core/Src/rgb_controller.cyclo ./Core/Src/rgb_controller.d ./Core/Src/rgb_controller.o ./Core/Src/rgb_controller.su ./Core/Src/rtc.cyclo ./Core/Src/rtc.d ./Core/Src/rtc.o ./Core/Src/rtc.su ./Core/Src/serial.cyclo ./Core/Src/serial.d ./Core/Src/serial.o ./Core/Src/serial.su ./Core/Src/serial_control.cyclo ./Core/Src/serial_control.d ./Core/Src/serial_control.o ./Core/Src/serial_control.su ./Core/Src/serial_handler.cyclo ./Core/Src/serial_handler.d ./Core/Src/serial_handler.o ./Core/Src/serial_handler.su ./Core/Src/sma_filter.cyclo ./Core/Src/sma_filter.d ./Core/Src/sma_filter.o ./Core/Src/sma_filter.su ./Core/Src/soft_rtc.cyclo ./Core/Src/soft_rtc.d ./Core/Src/soft_rtc.o ./Core/Src/soft_rtc.su ./Core/Src/stm32f1xx_hal_msp.cyclo ./Core/Src/stm32f1xx_hal_msp.d ./Core/Src/stm32f1xx_hal_msp.o ./Core/Src/stm32f1xx_hal_msp.su ./Core/Src/stm32f1xx_it.cyclo ./Core/Src/stm32f1xx_it.d ./Core/Src/stm32f1xx_it.o ./Core/Src/stm32f1xx_it.su ./Core/Src/syscalls.cyclo ./Core/Src/syscalls.d ./Core/Src/syscalls.o ./Core/Src/syscalls.su ./Core/Src/sysmem.cyclo ./Core/Src/sysmem.d ./Core/Src/sysmem.o ./Core/Src/sysmem.su ./Core/Src/system_stm32f1xx.cyclo ./Core/Src/system_stm32f1xx.d ./Core/Src/system_stm32f1xx.o ./Core/Src/system_stm32f1xx.su ./Core/Src/tim.cyclo ./Core/Src/tim.d ./Core/Src/tim.o ./Core/Src/tim.su ./Core/Src/usart.cyclo ./Core/Src/usart.d ./Core/Src/usart.o ./Core/Src/usart.su
|
-$(RM) ./Core/Src/adc.cyclo ./Core/Src/adc.d ./Core/Src/adc.o ./Core/Src/adc.su ./Core/Src/board.cyclo ./Core/Src/board.d ./Core/Src/board.o ./Core/Src/board.su ./Core/Src/can.cyclo ./Core/Src/can.d ./Core/Src/can.o ./Core/Src/can.su ./Core/Src/charger_control.cyclo ./Core/Src/charger_control.d ./Core/Src/charger_control.o ./Core/Src/charger_control.su ./Core/Src/cp.cyclo ./Core/Src/cp.d ./Core/Src/cp.o ./Core/Src/cp.su ./Core/Src/crc.cyclo ./Core/Src/crc.d ./Core/Src/crc.o ./Core/Src/crc.su ./Core/Src/debug.cyclo ./Core/Src/debug.d ./Core/Src/debug.o ./Core/Src/debug.su ./Core/Src/dma.cyclo ./Core/Src/dma.d ./Core/Src/dma.o ./Core/Src/dma.su ./Core/Src/gpio.cyclo ./Core/Src/gpio.d ./Core/Src/gpio.o ./Core/Src/gpio.su ./Core/Src/main.cyclo ./Core/Src/main.d ./Core/Src/main.o ./Core/Src/main.su ./Core/Src/meter.cyclo ./Core/Src/meter.d ./Core/Src/meter.o ./Core/Src/meter.su ./Core/Src/psu_control.cyclo ./Core/Src/psu_control.d ./Core/Src/psu_control.o ./Core/Src/psu_control.su ./Core/Src/rgb_controller.cyclo ./Core/Src/rgb_controller.d ./Core/Src/rgb_controller.o ./Core/Src/rgb_controller.su ./Core/Src/rtc.cyclo ./Core/Src/rtc.d ./Core/Src/rtc.o ./Core/Src/rtc.su ./Core/Src/serial.cyclo ./Core/Src/serial.d ./Core/Src/serial.o ./Core/Src/serial.su ./Core/Src/serial_control.cyclo ./Core/Src/serial_control.d ./Core/Src/serial_control.o ./Core/Src/serial_control.su ./Core/Src/serial_handler.cyclo ./Core/Src/serial_handler.d ./Core/Src/serial_handler.o ./Core/Src/serial_handler.su ./Core/Src/sma_filter.cyclo ./Core/Src/sma_filter.d ./Core/Src/sma_filter.o ./Core/Src/sma_filter.su ./Core/Src/soft_rtc.cyclo ./Core/Src/soft_rtc.d ./Core/Src/soft_rtc.o ./Core/Src/soft_rtc.su ./Core/Src/stm32f1xx_hal_msp.cyclo ./Core/Src/stm32f1xx_hal_msp.d ./Core/Src/stm32f1xx_hal_msp.o ./Core/Src/stm32f1xx_hal_msp.su ./Core/Src/stm32f1xx_it.cyclo ./Core/Src/stm32f1xx_it.d ./Core/Src/stm32f1xx_it.o ./Core/Src/stm32f1xx_it.su ./Core/Src/syscalls.cyclo ./Core/Src/syscalls.d ./Core/Src/syscalls.o ./Core/Src/syscalls.su ./Core/Src/sysmem.cyclo ./Core/Src/sysmem.d ./Core/Src/sysmem.o ./Core/Src/sysmem.su ./Core/Src/system_stm32f1xx.cyclo ./Core/Src/system_stm32f1xx.d ./Core/Src/system_stm32f1xx.o ./Core/Src/system_stm32f1xx.su ./Core/Src/tim.cyclo ./Core/Src/tim.d ./Core/Src/tim.o ./Core/Src/tim.su ./Core/Src/usart.cyclo ./Core/Src/usart.d ./Core/Src/usart.o ./Core/Src/usart.su
|
||||||
|
|
||||||
.PHONY: clean-Core-2f-Src
|
.PHONY: clean-Core-2f-Src
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
../Core/Src/tim.c:15:6:MX_TIM3_Init 8
|
../Core/Src/tim.c:31:6:MX_TIM3_Init 8
|
||||||
../Core/Src/tim.c:79:6:MX_TIM4_Init 8
|
../Core/Src/tim.c:95:6:MX_TIM4_Init 8
|
||||||
../Core/Src/tim.c:141:6:HAL_TIM_Base_MspInit 3
|
../Core/Src/tim.c:157:6:HAL_TIM_Base_MspInit 3
|
||||||
../Core/Src/tim.c:171:6:HAL_TIM_MspPostInit 3
|
../Core/Src/tim.c:187:6:HAL_TIM_MspPostInit 3
|
||||||
../Core/Src/tim.c:219:6:HAL_TIM_Base_MspDeInit 3
|
../Core/Src/tim.c:235:6:HAL_TIM_Base_MspDeInit 3
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
../Core/Src/usart.c:21:6:MX_UART5_Init 2
|
../Core/Src/usart.c:33:6:MX_UART5_Init 2
|
||||||
../Core/Src/usart.c:50:6:MX_USART1_UART_Init 2
|
../Core/Src/usart.c:62:6:MX_USART1_UART_Init 2
|
||||||
../Core/Src/usart.c:79:6:MX_USART2_UART_Init 2
|
../Core/Src/usart.c:91:6:MX_USART2_UART_Init 2
|
||||||
../Core/Src/usart.c:108:6:MX_USART3_UART_Init 2
|
../Core/Src/usart.c:120:6:MX_USART3_UART_Init 2
|
||||||
../Core/Src/usart.c:136:6:HAL_UART_MspInit 9
|
../Core/Src/usart.c:148:6:HAL_UART_MspInit 5
|
||||||
../Core/Src/usart.c:333:6:HAL_UART_MspDeInit 5
|
../Core/Src/usart.c:279:6:HAL_UART_MspDeInit 5
|
||||||
|
|||||||
-118
@@ -1,118 +0,0 @@
|
|||||||
################################################################################
|
|
||||||
# Automatically-generated file. Do not edit!
|
|
||||||
# Toolchain: GNU Tools for STM32 (13.3.rel1)
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
-include ../makefile.init
|
|
||||||
|
|
||||||
RM := rm -rf
|
|
||||||
|
|
||||||
# All of the sources participating in the build are defined here
|
|
||||||
-include sources.mk
|
|
||||||
-include Drivers/STM32F1xx_HAL_Driver/Src/subdir.mk
|
|
||||||
-include Core/Startup/subdir.mk
|
|
||||||
-include Core/Src/subdir.mk
|
|
||||||
-include objects.mk
|
|
||||||
|
|
||||||
ifneq ($(MAKECMDGOALS),clean)
|
|
||||||
ifneq ($(strip $(S_DEPS)),)
|
|
||||||
-include $(S_DEPS)
|
|
||||||
endif
|
|
||||||
ifneq ($(strip $(S_UPPER_DEPS)),)
|
|
||||||
-include $(S_UPPER_DEPS)
|
|
||||||
endif
|
|
||||||
ifneq ($(strip $(C_DEPS)),)
|
|
||||||
-include $(C_DEPS)
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
-include ../makefile.defs
|
|
||||||
|
|
||||||
OPTIONAL_TOOL_DEPS := \
|
|
||||||
$(wildcard ../makefile.defs) \
|
|
||||||
$(wildcard ../makefile.init) \
|
|
||||||
$(wildcard ../makefile.targets) \
|
|
||||||
|
|
||||||
|
|
||||||
BUILD_ARTIFACT_NAME := CCSModuleSW30Web
|
|
||||||
BUILD_ARTIFACT_EXTENSION := elf
|
|
||||||
BUILD_ARTIFACT_PREFIX :=
|
|
||||||
BUILD_ARTIFACT := $(BUILD_ARTIFACT_PREFIX)$(BUILD_ARTIFACT_NAME)$(if $(BUILD_ARTIFACT_EXTENSION),.$(BUILD_ARTIFACT_EXTENSION),)
|
|
||||||
|
|
||||||
# Add inputs and outputs from these tool invocations to the build variables
|
|
||||||
EXECUTABLES += \
|
|
||||||
CCSModuleSW30Web.elf \
|
|
||||||
|
|
||||||
MAP_FILES += \
|
|
||||||
CCSModuleSW30Web.map \
|
|
||||||
|
|
||||||
SIZE_OUTPUT += \
|
|
||||||
default.size.stdout \
|
|
||||||
|
|
||||||
OBJDUMP_LIST += \
|
|
||||||
CCSModuleSW30Web.list \
|
|
||||||
|
|
||||||
OBJCOPY_HEX += \
|
|
||||||
CCSModuleSW30Web.hex \
|
|
||||||
|
|
||||||
OBJCOPY_BIN += \
|
|
||||||
CCSModuleSW30Web.bin \
|
|
||||||
|
|
||||||
OBJCOPY_SREC += \
|
|
||||||
CCSModuleSW30Web.srec \
|
|
||||||
|
|
||||||
|
|
||||||
# All Target
|
|
||||||
all: main-build
|
|
||||||
|
|
||||||
# Main-build Target
|
|
||||||
main-build: CCSModuleSW30Web.elf secondary-outputs
|
|
||||||
|
|
||||||
# Tool invocations
|
|
||||||
CCSModuleSW30Web.elf CCSModuleSW30Web.map: $(OBJS) $(USER_OBJS) /Users/colorbass/STM32CubeIDE/workspace_1.12.0/CCSModuleSW30Web/STM32F107VCTX_FLASH.ld makefile objects.list $(OPTIONAL_TOOL_DEPS)
|
|
||||||
arm-none-eabi-gcc -o "CCSModuleSW30Web.elf" @"objects.list" $(USER_OBJS) $(LIBS) -mcpu=cortex-m3 -T"/Users/colorbass/STM32CubeIDE/workspace_1.12.0/CCSModuleSW30Web/STM32F107VCTX_FLASH.ld" --specs=nosys.specs -Wl,-Map="CCSModuleSW30Web.map" -Wl,--gc-sections -static --specs=nano.specs -mfloat-abi=soft -mthumb -u _printf_float -Wl,--start-group -lc -lm -Wl,--end-group
|
|
||||||
@echo 'Finished building target: $@'
|
|
||||||
@echo ' '
|
|
||||||
|
|
||||||
default.size.stdout: $(EXECUTABLES) makefile objects.list $(OPTIONAL_TOOL_DEPS)
|
|
||||||
arm-none-eabi-size $(EXECUTABLES)
|
|
||||||
@echo 'Finished building: $@'
|
|
||||||
@echo ' '
|
|
||||||
|
|
||||||
CCSModuleSW30Web.list: $(EXECUTABLES) makefile objects.list $(OPTIONAL_TOOL_DEPS)
|
|
||||||
arm-none-eabi-objdump -h -S $(EXECUTABLES) > "CCSModuleSW30Web.list"
|
|
||||||
@echo 'Finished building: $@'
|
|
||||||
@echo ' '
|
|
||||||
|
|
||||||
CCSModuleSW30Web.hex: $(EXECUTABLES) makefile objects.list $(OPTIONAL_TOOL_DEPS)
|
|
||||||
arm-none-eabi-objcopy -O ihex $(EXECUTABLES) "CCSModuleSW30Web.hex"
|
|
||||||
@echo 'Finished building: $@'
|
|
||||||
@echo ' '
|
|
||||||
|
|
||||||
CCSModuleSW30Web.bin: $(EXECUTABLES) makefile objects.list $(OPTIONAL_TOOL_DEPS)
|
|
||||||
arm-none-eabi-objcopy -O binary $(EXECUTABLES) "CCSModuleSW30Web.bin"
|
|
||||||
@echo 'Finished building: $@'
|
|
||||||
@echo ' '
|
|
||||||
|
|
||||||
CCSModuleSW30Web.srec: $(EXECUTABLES) makefile objects.list $(OPTIONAL_TOOL_DEPS)
|
|
||||||
arm-none-eabi-objcopy -O srec $(EXECUTABLES) "CCSModuleSW30Web.srec"
|
|
||||||
@echo 'Finished building: $@'
|
|
||||||
@echo ' '
|
|
||||||
|
|
||||||
# Other Targets
|
|
||||||
clean:
|
|
||||||
-$(RM) CCSModuleSW30Web.bin CCSModuleSW30Web.elf CCSModuleSW30Web.hex CCSModuleSW30Web.list CCSModuleSW30Web.map CCSModuleSW30Web.srec default.size.stdout
|
|
||||||
-@echo ' '
|
|
||||||
|
|
||||||
secondary-outputs: $(SIZE_OUTPUT) $(OBJDUMP_LIST) $(OBJCOPY_HEX) $(OBJCOPY_BIN) $(OBJCOPY_SREC)
|
|
||||||
|
|
||||||
fail-specified-linker-script-missing:
|
|
||||||
@echo 'Error: Cannot find the specified linker script. Check the linker settings in the build configuration.'
|
|
||||||
@exit 2
|
|
||||||
|
|
||||||
warn-no-linker-script-specified:
|
|
||||||
@echo 'Warning: No linker script specified. Check the linker settings in the build configuration.'
|
|
||||||
|
|
||||||
.PHONY: all clean dependents main-build fail-specified-linker-script-missing warn-no-linker-script-specified
|
|
||||||
|
|
||||||
-include ../makefile.targets
|
|
||||||
@@ -6,7 +6,6 @@
|
|||||||
"./Core/Src/crc.o"
|
"./Core/Src/crc.o"
|
||||||
"./Core/Src/debug.o"
|
"./Core/Src/debug.o"
|
||||||
"./Core/Src/dma.o"
|
"./Core/Src/dma.o"
|
||||||
"./Core/Src/fire_alarm.o"
|
|
||||||
"./Core/Src/gpio.o"
|
"./Core/Src/gpio.o"
|
||||||
"./Core/Src/main.o"
|
"./Core/Src/main.o"
|
||||||
"./Core/Src/meter.o"
|
"./Core/Src/meter.o"
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2024 EDISON
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
@@ -1,141 +1,5 @@
|
|||||||
# CCSModuleSW30Web
|
# GbTModuleSW
|
||||||
|
|
||||||
Прошивка контроллера DC-зарядного модуля на STM32F107 (STM32CubeIDE).
|
Программное обеспечение для блока управления зарядом Gb/T
|
||||||
Проект реализует управление зарядной сессией, обработку состояния EV по CP-линии, управление силовым блоком через CAN и обмен с верхним уровнем по UART.
|
|
||||||
|
|
||||||
## Архитектура прошивки
|
Git-репозиторий: https://git.141922.ru/EDISON/GbTModuleSW30Web
|
||||||
|
|
||||||
Логика разделена на несколько уровней:
|
|
||||||
|
|
||||||
- Оркестрация и планировщик задач: `Core/Src/main.c`
|
|
||||||
- Состояния зарядной сессии и протокол с Everest: `Core/Src/serial.c`
|
|
||||||
- Управление силовой частью и контакторами: `Core/Src/psu_control.c`
|
|
||||||
- Обработка CP (PWM/состояние EV): `Core/Src/cp.c`
|
|
||||||
- Единая модель состояния коннектора: `Core/Src/charger_control.c`, `Core/Inc/charger_control.h`
|
|
||||||
- Локальный протокол управления/мониторинга: `Core/Src/serial_control.c`, `Core/Src/serial_handler.c`
|
|
||||||
- Низкоуровневое управление платой: `Core/Src/board.c`, `Core/Src/gpio.c`, `Core/Src/can.c`, `Core/Src/usart.c`
|
|
||||||
|
|
||||||
## Основной цикл и выполнение задач
|
|
||||||
|
|
||||||
`main()` инициализирует периферию и подсистемы (`CCS_Init`, `SC_Init`, `PSU_Init`, `CONN_Init`), после чего переходит в бесконечный цикл.
|
|
||||||
|
|
||||||
В основном цикле выполняются:
|
|
||||||
|
|
||||||
- `PSU_ReadWrite()` — цикл опроса/команд силового блока и расчёт целевых значений.
|
|
||||||
- `PSU_Task()` — state machine силовой части, включение/выключение контакторов, контроль аварий.
|
|
||||||
- `METER_CalculateEnergy()` — расчёт энергии.
|
|
||||||
- `CONN_Loop()` — консолидация ошибок и общих флагов состояния сессии.
|
|
||||||
- `LED_Write()` — применение рассчитанного состояния индикации.
|
|
||||||
|
|
||||||
Ключевой механизм: `ED_Delay()` используется как кооперативный мини-планировщик и внутри задержки вызывает:
|
|
||||||
|
|
||||||
- `CCS_SerialLoop()` — обмен с Everest и переходы состояния коннектора;
|
|
||||||
- `StopButtonControl()` — обработка кнопки STOP/FORCE UNLOCK/RESET;
|
|
||||||
- `CP_Loop()` — чтение и фильтрация состояния CP;
|
|
||||||
- `CONN_Task()` — управление индикацией/сигнализацией;
|
|
||||||
- `LED_Task()` — анимация RGB;
|
|
||||||
- `SC_Task()` — локальный UART-протокол.
|
|
||||||
|
|
||||||
Таким образом, даже во время "задержек" критичные сервисные задачи продолжают выполняться.
|
|
||||||
|
|
||||||
## Модель управления зарядной сессией
|
|
||||||
|
|
||||||
Центр логики сессии находится в `CCS_SerialLoop()` (`serial.c`).
|
|
||||||
Она работает как state machine EVSE-стороны и переводит систему между состояниями:
|
|
||||||
|
|
||||||
- неизвестное/инициализация,
|
|
||||||
- отсутствие автомобиля,
|
|
||||||
- требование авторизации,
|
|
||||||
- подключено/заряд,
|
|
||||||
- режим переподключения,
|
|
||||||
- отключено по команде или по таймауту связи.
|
|
||||||
|
|
||||||
Переходы определяются комбинацией факторов:
|
|
||||||
|
|
||||||
- текущее состояние CP (автомобиль не подключен/подключен/готов),
|
|
||||||
- команды внешней системы (`start`, `stop`, `force unlock`),
|
|
||||||
- разрешение выдачи мощности (`EnableOutput`),
|
|
||||||
- наличие ошибок в силовой части и контакторах,
|
|
||||||
- состояние обмена с Everest.
|
|
||||||
|
|
||||||
Структура `CONN` выступает как единый контейнер рабочего состояния сессии, где сводятся:
|
|
||||||
|
|
||||||
- требуемые напряжение/ток,
|
|
||||||
- разрешение на выдачу мощности,
|
|
||||||
- команда оператора (start/stop/unlock),
|
|
||||||
- текущая стадия сессии,
|
|
||||||
- ошибки коннектора/силовой части.
|
|
||||||
|
|
||||||
## CP-линия и взаимодействие с EV
|
|
||||||
|
|
||||||
`cp.c` отвечает за:
|
|
||||||
|
|
||||||
- генерацию PWM на CP-линии (`CP_SetDuty`),
|
|
||||||
- измерение уровня CP и преобразование в дискретное состояние EV,
|
|
||||||
- цифровую фильтрацию переходов состояния (`CP_FilterState`) для подавления дребезга.
|
|
||||||
|
|
||||||
Команды верхнего уровня могут менять duty CP, что влияет на допустимый ток/режим со стороны EV.
|
|
||||||
Результат фильтрации CP непосредственно используется в state machine сессии (`serial.c`).
|
|
||||||
|
|
||||||
## Силовая часть и контакторы
|
|
||||||
|
|
||||||
`psu_control.c` реализует state machine источника питания и цепи контакторов:
|
|
||||||
|
|
||||||
- инициализация и проверка готовности PSU;
|
|
||||||
- отправка уставок напряжения/тока;
|
|
||||||
- включение/выключение силовой части;
|
|
||||||
- ожидание подтверждений и контроль таймаутов;
|
|
||||||
- контроль обратной связи контактора;
|
|
||||||
- аварийный останов при несогласованности состояния.
|
|
||||||
|
|
||||||
Управление силовыми выходами выполняется через реле платы (`RELAY_AC`, `RELAY_DC`), а факт замыкания контролируется входом обратной связи контактора.
|
|
||||||
При неисправностях флаги `contactor_fault`/`psu_fault` поднимаются и транслируются в общую модель `CONN`, что блокирует дальнейшую выдачу мощности.
|
|
||||||
|
|
||||||
## Интерфейсы обмена
|
|
||||||
|
|
||||||
### UART3: канал к Everest
|
|
||||||
|
|
||||||
`serial.c` реализует пакетный обмен с CRC:
|
|
||||||
|
|
||||||
- приём команд, их валидация и применение к текущей сессии;
|
|
||||||
- отправка телеметрии/состояния с фиксированной периодикой;
|
|
||||||
- обработка ошибок UART и восстановление DMA-приёма.
|
|
||||||
|
|
||||||
Встроен watchdog канала: при потере связи сначала выдаётся предупреждение, затем выполняется защитный переход в безопасное состояние с остановкой выдачи мощности.
|
|
||||||
|
|
||||||
### UART2/UART5: локальное управление и мониторинг
|
|
||||||
|
|
||||||
`serial_control.c` и `serial_handler.c` реализуют отдельный локальный протокол:
|
|
||||||
|
|
||||||
- разбор пакетов и CRC32-проверка;
|
|
||||||
- команды чтения состояния/информации;
|
|
||||||
- команды управления (разрешение заряда, ограничение мощности, reset и т.д.);
|
|
||||||
- публикация телеметрии.
|
|
||||||
|
|
||||||
### CAN2: управление силовым источником
|
|
||||||
|
|
||||||
`psu_control.c` использует CAN2 для обмена с PSU:
|
|
||||||
|
|
||||||
- передача управляющих команд и уставок;
|
|
||||||
- запрос/получение телеметрии;
|
|
||||||
- обработка приёмных кадров в callback и обновление внутренних переменных состояния.
|
|
||||||
|
|
||||||
## Защиты и отказобезопасность
|
|
||||||
|
|
||||||
В прошивке заложены независимые защитные механизмы:
|
|
||||||
|
|
||||||
- E-STOP (короткое/долгое/очень долгое удержание): stop, force unlock, reset.
|
|
||||||
- Потеря обмена с Everest: автоматическая остановка зарядки и перевод в безопасное состояние.
|
|
||||||
- Контроль контактора: проверка соответствия команды и физической обратной связи.
|
|
||||||
- Таймауты включения/выключения PSU: переход в fault при отсутствии ожидаемого подтверждения.
|
|
||||||
- Фильтрация CP-переходов: исключение ложных переключений от помех.
|
|
||||||
|
|
||||||
## Где смотреть ключевую логику в первую очередь
|
|
||||||
|
|
||||||
Для быстрого входа в проект:
|
|
||||||
|
|
||||||
- `Core/Src/main.c` — архитектурный "скелет" и расписание вызовов.
|
|
||||||
- `Core/Src/serial.c` — главная state machine зарядной сессии.
|
|
||||||
- `Core/Src/psu_control.c` — силовая логика, контакторы, fault-handling.
|
|
||||||
- `Core/Src/cp.c` — физика CP и распознавание состояния EV.
|
|
||||||
- `Core/Src/serial_control.c` + `Core/Src/serial_handler.c` — локальный протокол управления.
|
|
||||||
+962
@@ -0,0 +1,962 @@
|
|||||||
|
|
||||||
|
374.791687 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
374.792987 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
374.841712 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
374.842985 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
374.891669 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
374.892988 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
374.941686 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
374.942983 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
374.951677 1 181356f4x Rx d 7 38 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
374.991681 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
374.992985 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
375.001791 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
375.001797 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
375.011003 1 1ceb56f4x Rx d 8 01 21 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
375.021033 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
375.023025 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
375.041735 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
375.042982 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
375.091659 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
375.092984 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
375.141706 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
375.142981 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
375.191684 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
375.192998 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
375.201675 1 181356f4x Rx d 7 38 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
375.241679 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
375.242992 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
375.251799 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
375.251801 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
375.261001 1 1ceb56f4x Rx d 8 01 26 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
375.271012 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
375.271014 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
375.291682 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
375.293003 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
375.341706 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
375.342996 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
375.391682 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
375.392983 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
375.441684 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
375.442982 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
375.451686 1 181356f4x Rx d 7 38 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
375.491716 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
375.492985 1 1812f456x Rx d 8 08 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
375.501676 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
375.502994 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
375.510999 1 1ceb56f4x Rx d 8 01 1C 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
375.521017 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
375.521019 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
375.541705 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
375.542990 1 1812f456x Rx d 8 08 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
375.591674 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
375.592986 1 1812f456x Rx d 8 08 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
375.641689 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
375.643005 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
375.691672 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
375.692984 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
375.701658 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
375.741668 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
375.742987 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
375.751827 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
375.751828 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
375.760997 1 1ceb56f4x Rx d 8 01 26 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
375.771020 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
375.771022 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
375.791674 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
375.792994 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
375.841689 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
375.842980 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
375.891676 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
375.892994 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
375.941705 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
375.942987 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
375.951634 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
375.991658 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
375.992986 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
376.001774 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
376.001775 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
376.010993 1 1ceb56f4x Rx d 8 01 1C 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
376.020999 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
376.021001 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
376.041665 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
376.042987 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
376.091670 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
376.093025 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
376.141708 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
376.142988 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
376.191709 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
376.192994 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
376.201671 1 181356f4x Rx d 7 38 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
376.241676 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
376.242979 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
376.251786 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
376.251787 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
376.261011 1 1ceb56f4x Rx d 8 01 1C 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
376.271003 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
376.271005 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
376.291650 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
376.293019 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
376.341682 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
376.342987 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
376.391667 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
376.393019 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
376.441646 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
376.442983 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
376.451660 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
376.491736 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
376.492988 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
376.501814 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
376.501816 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
376.510998 1 1ceb56f4x Rx d 8 01 1C 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
376.521002 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
376.523014 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
376.541654 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
376.543016 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
376.591679 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
376.592987 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
376.641679 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
376.642986 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
376.691663 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
376.692982 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
376.701671 1 181356f4x Rx d 7 38 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
376.741659 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
376.742989 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
376.751736 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
376.751744 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
376.761018 1 1ceb56f4x Rx d 8 01 3A 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
376.770989 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
376.770990 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
376.791657 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
376.793019 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
376.841681 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
376.842984 1 1812f456x Rx d 8 08 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
376.891671 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
376.892987 1 1812f456x Rx d 8 08 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
376.941651 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
376.942982 1 1812f456x Rx d 8 08 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
376.951639 1 181356f4x Rx d 7 38 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
376.991651 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
376.993000 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
377.001797 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
377.001799 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
377.010999 1 1ceb56f4x Rx d 8 01 26 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
377.021036 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
377.021038 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
377.041673 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
377.042983 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
377.091663 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
377.092983 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
377.141662 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
377.142981 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
377.191660 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
377.193007 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
377.201636 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
377.241635 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
377.242986 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
377.251745 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
377.251746 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
377.261012 1 1ceb56f4x Rx d 8 01 26 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
377.271021 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
377.271025 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
377.291653 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
377.292991 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
377.341643 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
377.342983 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
377.391671 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
377.392988 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
377.441636 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
377.442997 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
377.451647 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
377.491672 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
377.492986 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
377.501753 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
377.501755 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
377.511028 1 1ceb56f4x Rx d 8 01 17 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
377.521023 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
377.521025 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
377.541656 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
377.542991 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
377.591681 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
377.592986 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
377.641644 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
377.642990 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
377.691647 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
377.692989 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
377.701640 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
377.741636 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
377.742983 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
377.751743 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
377.751744 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
377.761006 1 1ceb56f4x Rx d 8 01 26 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
377.771002 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
377.771004 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
377.791624 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
377.793012 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
377.841623 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
377.842990 1 1812f456x Rx d 8 12 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
377.891614 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
377.892984 1 1812f456x Rx d 8 08 11 92 0D 38 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
377.941650 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
377.942981 1 1812f456x Rx d 8 08 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
377.951613 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
377.991618 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
377.992988 1 1812f456x Rx d 8 08 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
378.001771 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
378.001773 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
378.011030 1 1ceb56f4x Rx d 8 01 26 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
378.021016 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
378.023015 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
378.041626 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
378.042984 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
378.091636 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
378.092990 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
378.141637 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
378.142985 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
378.191620 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
378.192982 1 1812f456x Rx d 8 08 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
378.201633 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
378.241614 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
378.242984 1 1812f456x Rx d 8 08 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
378.251734 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
378.251736 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
378.261039 1 1ceb56f4x Rx d 8 01 1C 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
378.271028 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
378.271031 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
378.291620 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
378.292992 1 1812f456x Rx d 8 08 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
378.341632 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
378.342991 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
378.391626 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
378.392988 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
378.441628 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
378.442981 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
378.451649 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
378.491647 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
378.492988 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
378.501666 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
378.502994 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
378.511004 1 1ceb56f4x Rx d 8 01 21 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
378.521001 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
378.521003 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
378.541632 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
378.543019 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
378.591604 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
378.592983 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
378.641632 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
378.642988 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
378.691613 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
378.692981 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
378.701627 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
378.741623 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
378.743030 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
378.751681 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
378.751683 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
378.760994 1 1ceb56f4x Rx d 8 01 26 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
378.771003 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
378.771006 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
378.791626 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
378.793019 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
378.841634 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
378.842984 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
378.891636 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
378.892982 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
378.941629 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
378.942978 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
378.951611 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
378.991652 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
378.992999 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
379.001717 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
379.001719 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
379.011002 1 1ceb56f4x Rx d 8 01 26 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
379.021025 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
379.021033 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
379.041630 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
379.042994 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
379.091608 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
379.092981 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
379.141604 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
379.142981 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
379.191586 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
379.192988 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
379.201610 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
379.241636 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
379.242988 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
379.251712 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
379.251714 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
379.261011 1 1ceb56f4x Rx d 8 01 26 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
379.270995 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
379.270997 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
379.291605 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
379.292997 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
379.341643 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
379.342983 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
379.391620 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
379.393023 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
379.441618 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
379.442981 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
379.451618 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
379.491603 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
379.492982 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
379.501687 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
379.501689 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
379.511021 1 1ceb56f4x Rx d 8 01 26 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
379.520995 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
379.523013 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
379.541603 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
379.542986 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
379.591577 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
379.592986 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
379.641601 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
379.643032 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
379.691594 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
379.692989 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
379.701579 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
379.741625 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
379.742978 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
379.751707 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
379.751709 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
379.761022 1 1ceb56f4x Rx d 8 01 26 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
379.771000 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
379.771003 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
379.791602 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
379.793010 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
379.841603 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
379.842983 1 1812f456x Rx d 8 08 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
379.891623 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
379.892986 1 1812f456x Rx d 8 08 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
379.941630 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
379.942989 1 1812f456x Rx d 8 08 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
379.951590 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
379.991598 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
379.992986 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
380.001629 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
380.002993 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
380.010998 1 1ceb56f4x Rx d 8 01 26 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
380.020998 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
380.021001 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
380.041579 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
380.043000 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
380.091583 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
380.093004 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
380.141605 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
380.142980 1 1812f456x Rx d 8 08 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
380.191594 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
380.192988 1 1812f456x Rx d 8 08 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
380.201582 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
380.241581 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
380.242986 1 1812f456x Rx d 8 08 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
380.251690 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
380.251691 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
380.261037 1 1ceb56f4x Rx d 8 01 21 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
380.271012 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
380.271014 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
380.291620 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
380.293021 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
380.341604 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
380.342988 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
380.391570 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
380.393015 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
380.441620 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
380.442984 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
380.451566 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
380.491611 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
380.492986 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
380.501690 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
380.501691 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
380.511046 1 1ceb56f4x Rx d 8 01 21 11 8E 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
380.521002 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
380.521004 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
380.541603 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
380.543017 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
380.591586 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
380.592990 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
380.641562 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
380.642991 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
380.691598 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
380.692994 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
380.701590 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
380.741556 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
380.742983 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
380.751697 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
380.751699 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
380.760992 1 1ceb56f4x Rx d 8 01 26 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
380.770997 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
380.770999 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
380.791579 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
380.792992 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
380.841555 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
380.842988 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
380.891603 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
380.892989 1 1812f456x Rx d 8 08 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
380.941578 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
380.943040 1 1812f456x Rx d 8 08 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
380.951580 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
380.991578 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
380.992993 1 1812f456x Rx d 8 08 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
381.001666 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
381.001667 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
381.011004 1 1ceb56f4x Rx d 8 01 26 11 8E 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
381.021022 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
381.023015 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
381.041576 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
381.042994 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
381.091555 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
381.092989 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
381.141582 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
381.142988 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
381.191599 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
381.192982 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
381.201556 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
381.241617 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
381.242983 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
381.251641 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
381.251643 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
381.261030 1 1ceb56f4x Rx d 8 01 21 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
381.270989 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
381.270990 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
381.291580 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
381.292987 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
381.341567 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
381.342984 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
381.391567 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
381.392997 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
381.441595 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
381.442988 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
381.451576 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
381.491568 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
381.492988 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
381.501598 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
381.502989 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
381.511034 1 1ceb56f4x Rx d 8 01 21 11 8E 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
381.520993 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
381.520995 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
381.541555 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
381.542990 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
381.591587 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
381.593021 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
381.641579 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
381.643031 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
381.691589 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
381.692984 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
381.701539 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
381.741561 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
381.742983 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
381.751664 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
381.751665 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
381.761009 1 1ceb56f4x Rx d 8 01 30 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
381.771027 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
381.771029 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
381.791579 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
381.792993 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
381.841608 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
381.842985 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
381.891553 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
381.892994 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
381.941580 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
381.942990 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
381.951560 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
381.991586 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
381.992998 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
382.001648 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
382.001650 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
382.011005 1 1ceb56f4x Rx d 8 01 2B 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
382.020999 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
382.021001 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
382.041581 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
382.043020 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
382.091567 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
382.092990 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
382.141584 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
382.143012 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
382.191543 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
382.193028 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
382.201541 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
382.241546 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
382.242979 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
382.251655 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
382.251656 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
382.261018 1 1ceb56f4x Rx d 8 01 21 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
382.271008 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
382.271010 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
382.291534 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
382.293008 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
382.341580 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
382.342988 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
382.391559 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
382.392997 1 1812f456x Rx d 8 08 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
382.441539 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
382.442982 1 1812f456x Rx d 8 08 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
382.451523 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
382.491565 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
382.492987 1 1812f456x Rx d 8 08 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
382.501678 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
382.501680 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
382.511007 1 1ceb56f4x Rx d 8 01 2B 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
382.520994 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
382.523024 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
382.541539 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
382.543021 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
382.591561 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
382.592984 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
382.641556 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
382.642986 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
382.691548 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
382.692990 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
382.701539 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
382.741547 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
382.743025 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
382.751657 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
382.751659 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
382.760997 1 1ceb56f4x Rx d 8 01 12 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
382.771000 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
382.771003 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
382.791577 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
382.792987 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
382.841549 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
382.842982 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
382.891544 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
382.893029 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
382.941558 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
382.942994 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
382.951528 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
382.991519 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
382.992987 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
383.001566 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
383.002997 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
383.011022 1 1ceb56f4x Rx d 8 01 26 11 8E 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
383.021021 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
383.021024 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
383.041574 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
383.042986 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
383.091549 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
383.092983 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
383.141567 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
383.142987 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
383.191555 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
383.192984 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
383.201570 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
383.241501 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
383.242994 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
383.251630 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
383.251632 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
383.261023 1 1ceb56f4x Rx d 8 01 26 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
383.271016 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
383.271018 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
383.291592 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
383.292994 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
383.341552 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
383.342984 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
383.391550 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
383.392988 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
383.441571 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
383.442998 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
383.451524 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
383.491557 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
383.492986 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
383.501655 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
383.501657 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
383.511006 1 1ceb56f4x Rx d 8 01 17 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
383.520997 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
383.521000 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
383.541546 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
383.543020 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
383.591540 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
383.592991 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
383.641527 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
383.642985 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
383.691529 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
383.692992 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
383.701495 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
383.741574 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
383.742987 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
383.751641 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
383.751643 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
383.760997 1 1ceb56f4x Rx d 8 01 26 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
383.771007 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
383.771010 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
383.791556 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
383.792996 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
383.841554 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
383.843038 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
383.891501 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
383.893019 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
383.941491 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
383.942989 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
383.951521 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
383.991529 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
383.992990 1 1812f456x Rx d 8 08 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
384.001657 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
384.001659 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
384.011027 1 1ceb56f4x Rx d 8 01 17 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
384.020995 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
384.020997 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
384.041500 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
384.043000 1 1812f456x Rx d 8 08 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
384.091504 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
384.092991 1 1812f456x Rx d 8 08 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
384.141507 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
384.143039 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
384.191541 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
384.192981 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
384.201495 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
384.241529 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
384.243011 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
384.251636 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
384.251637 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
384.261007 1 1ceb56f4x Rx d 8 01 26 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
384.271033 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
384.271036 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
384.291518 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
384.293038 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
384.341520 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
384.342984 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
384.391495 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
384.392987 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
384.441529 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
384.442987 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
384.451508 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
384.491542 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
384.492998 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
384.501513 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
384.502987 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
384.511014 1 1ceb56f4x Rx d 8 01 2B 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
384.521024 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
384.521027 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
384.541529 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
384.543000 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
384.591518 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
384.593020 1 1812f456x Rx d 8 08 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
384.641520 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
384.642985 1 1812f456x Rx d 8 08 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
384.691504 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
384.692987 1 1812f456x Rx d 8 08 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
384.701507 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
384.741507 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
384.742999 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
384.751597 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
384.751598 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
384.761002 1 1ceb56f4x Rx d 8 01 2B 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
384.771011 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
384.771013 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
384.791511 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
384.792996 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
384.841515 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
384.842988 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
384.891489 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
384.892997 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
384.941495 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
384.942984 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
384.951496 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
384.991501 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
384.992990 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
385.001640 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
385.001642 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
385.010999 1 1ceb56f4x Rx d 8 01 30 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
385.020997 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
385.020999 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
385.041477 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
385.042994 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
385.091502 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
385.092991 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
385.141514 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
385.142990 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
385.191508 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
385.192985 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
385.201496 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
385.241493 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
385.243000 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
385.251609 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
385.251611 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
385.261004 1 1ceb56f4x Rx d 8 01 2B 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
385.270999 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
385.271001 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
385.291480 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
385.292987 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
385.341509 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
385.342991 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
385.391485 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
385.393020 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
385.441483 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
385.442997 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
385.451469 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
385.491495 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
385.492993 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
385.501587 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
385.501593 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
385.511019 1 1ceb56f4x Rx d 8 01 17 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
385.521007 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
385.521009 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
385.541500 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
385.543025 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
385.591501 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
385.593014 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
385.641530 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
385.642989 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
385.691562 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
385.692988 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
385.701470 1 181356f4x Rx d 7 38 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
385.741535 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
385.743035 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
385.751597 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
385.751598 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
385.760998 1 1ceb56f4x Rx d 8 01 2B 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
385.770997 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
385.770999 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
385.791494 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
385.792983 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
385.841547 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
385.842981 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
385.891490 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
385.892979 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
385.941546 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
385.942983 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
385.951512 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
385.991485 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
385.992984 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
386.001503 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
386.002999 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
386.011030 1 1ceb56f4x Rx d 8 01 2B 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
386.020995 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
386.020997 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
386.041501 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
386.042989 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
386.091488 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
386.092984 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
386.141504 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
386.142988 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
386.191467 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
386.192988 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
386.201435 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
386.241495 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
386.242991 1 1812f456x Rx d 8 08 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
386.251544 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
386.251546 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
386.261024 1 1ceb56f4x Rx d 8 01 2B 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
386.271004 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
386.271006 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
386.291525 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
386.293018 1 1812f456x Rx d 8 08 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
386.341472 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
386.342988 1 1812f456x Rx d 8 08 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
386.391490 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
386.392984 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
386.441491 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
386.442984 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
386.451474 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
386.491482 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
386.492987 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
386.501586 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
386.501588 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
386.510996 1 1ceb56f4x Rx d 8 01 2B 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
386.521011 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
386.521013 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
386.541458 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
386.543028 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
386.591450 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
386.592975 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
386.641507 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
386.642986 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
386.691498 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
386.692999 1 1812f456x Rx d 8 08 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
386.701477 1 181356f4x Rx d 7 38 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
386.741476 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
386.743019 1 1812f456x Rx d 8 08 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
386.751604 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
386.751606 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
386.761039 1 1ceb56f4x Rx d 8 01 26 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
386.771001 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
386.771003 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
386.791465 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
386.792988 1 1812f456x Rx d 8 08 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
386.841508 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
386.842986 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
386.891468 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
386.892986 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
386.941490 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
386.943033 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
386.951440 1 181356f4x Rx d 7 38 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
386.991466 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
386.992986 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
387.001558 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
387.001560 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
387.010992 1 1ceb56f4x Rx d 8 01 26 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
387.020996 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
387.020998 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
387.041455 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
387.042997 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
387.091473 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
387.092990 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
387.141472 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
387.142988 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
387.191466 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
387.193000 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
387.201439 1 181356f4x Rx d 7 38 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
387.241462 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
387.242984 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
387.251599 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
387.251601 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
387.260998 1 1ceb56f4x Rx d 8 01 26 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
387.271002 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
387.271004 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
387.291455 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
387.293012 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
387.341491 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
387.343009 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
387.391468 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
387.392992 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
387.441471 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
387.442984 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
387.451436 1 181356f4x Rx d 7 38 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
387.491458 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
387.492985 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
387.501479 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
387.503005 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
387.511013 1 1ceb56f4x Rx d 8 01 26 11 8E 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
387.521022 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
387.521024 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
387.541474 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
387.543006 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
387.591468 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
387.593009 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
387.641480 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
387.642990 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
387.691492 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
387.692986 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
387.701459 1 181356f4x Rx d 7 38 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
387.741460 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
387.742985 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
387.751580 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
387.751583 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
387.760991 1 1ceb56f4x Rx d 8 01 26 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
387.771007 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
387.771010 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
387.791480 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
387.793006 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
387.841463 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
387.842993 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
387.891430 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
387.892989 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
387.941487 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
387.942989 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
387.951430 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
387.991431 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
387.993003 1 1812f456x Rx d 8 12 11 92 0D 39 00 FD FF Length = 0 BitCount = 0 ID = 403895382x
|
||||||
|
388.001551 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
388.001552 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
388.011013 1 1ceb56f4x Rx d 8 01 26 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
388.021025 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
388.021027 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
388.041442 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
388.091465 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
388.141440 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
388.191455 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
388.201432 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
388.241486 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
388.251511 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
388.251512 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
388.261005 1 1ceb56f4x Rx d 8 01 26 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
388.271028 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
388.271030 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
388.291429 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
388.341450 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
388.391444 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
388.441443 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
388.451440 1 181356f4x Rx d 7 38 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
388.491430 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
388.501538 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
388.501540 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
388.511001 1 1ceb56f4x Rx d 8 01 26 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
388.521003 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
388.521005 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
388.541430 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
388.591427 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
388.641419 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
388.691483 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
388.701435 1 181356f4x Rx d 7 38 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
388.741444 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
388.751527 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
388.751529 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
388.761014 1 1ceb56f4x Rx d 8 01 26 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
388.771009 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
388.771012 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
388.791435 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
388.841457 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
388.891432 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
388.941442 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
388.951424 1 181356f4x Rx d 7 38 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
388.991456 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
389.001451 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
389.002996 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
389.011003 1 1ceb56f4x Rx d 8 01 26 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
389.021010 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
389.021012 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
389.041419 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
389.091438 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
389.141443 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
389.191451 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
389.201415 1 181356f4x Rx d 7 38 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
389.241444 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
389.251537 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
389.251539 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
389.260996 1 1ceb56f4x Rx d 8 01 2B 11 98 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
389.271001 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
389.271003 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
389.291416 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
389.341423 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
389.391435 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
389.441485 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
389.441488 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
389.442985 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
389.451011 1 1ceb56f4x Rx d 8 01 D9 12 D4 0D 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
389.453010 1 81e56f4x Rx d 4 F0 F0 F1 FC Length = 0 BitCount = 0 ID = 136206068x
|
||||||
|
389.453011 1 181356f4x Rx d 7 38 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
389.461033 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
389.461035 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
389.491436 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
389.541443 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
389.591434 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
389.641429 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
389.691439 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
389.701547 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
389.701549 1 81e56f4x Rx d 4 F0 F0 F1 FC Length = 0 BitCount = 0 ID = 136206068x
|
||||||
|
389.703043 1 181356f4x Rx d 7 38 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
389.703044 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
389.710992 1 1ceb56f4x Rx d 8 01 D9 12 CE 0E 83 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
389.721003 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
389.721007 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
389.741401 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
389.791394 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
389.841435 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
389.891435 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
389.941436 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
389.951468 1 1cec56f4x Rx d 8 10 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485250804x
|
||||||
|
389.951470 1 81e56f4x Rx d 4 F0 F0 F1 FC Length = 0 BitCount = 0 ID = 136206068x
|
||||||
|
389.952996 1 181356f4x Rx d 7 3C 4A 00 46 00 00 D0 Length = 0 BitCount = 0 ID = 403920628x
|
||||||
|
389.952998 1 1cecf456x Rx d 8 11 02 01 FF FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
389.961004 1 1ceb56f4x Rx d 8 01 D4 12 50 0F 82 F1 3E Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
389.971000 1 1ceb56f4x Rx d 8 02 75 00 FF FF FF FF FF Length = 0 BitCount = 0 ID = 485185268x
|
||||||
|
389.971002 1 1cecf456x Rx d 8 13 09 00 02 FF 00 11 00 Length = 0 BitCount = 0 ID = 485291094x
|
||||||
|
389.991429 1 181056f4x Rx d 5 C0 12 B8 0B 02 Length = 0 BitCount = 0 ID = 403724020x
|
||||||
|
390.201394 1 81e56f4x Rx d 4 F0 F0 F1 FC Length = 0 BitCount = 0 ID = 136206068x
|
||||||
|
390.451445 1 81e56f4x Rx d 4 F0 F0 F1 FC Length = 0 BitCount = 0 ID = 136206068x
|
||||||
|
390.701420 1 81e56f4x Rx d 4 F0 F0 F1 FC Length = 0 BitCount = 0 ID = 136206068x
|
||||||
|
390.952097 1 81e56f4x Rx d 4 F0 F0 F1 FC Length = 0 BitCount = 0 ID = 136206068x
|
||||||
|
391.202037 1 81e56f4x Rx d 4 F0 F0 F1 FC Length = 0 BitCount = 0 ID = 136206068x
|
||||||
|
391.452179 1 81e56f4x Rx d 4 F0 F0 F1 FC Length = 0 BitCount = 0 ID = 136206068x
|
||||||
|
391.702096 1 81e56f4x Rx d 4 F0 F0 F1 FC Length = 0 BitCount = 0 ID = 136206068x
|
||||||
|
391.952105 1 81e56f4x Rx d 4 F0 F0 F1 FC Length = 0 BitCount = 0 ID = 136206068x
|
||||||
|
392.202110 1 81e56f4x Rx d 4 F0 F0 F1 FC Length = 0 BitCount = 0 ID = 136206068x
|
||||||
|
392.452104 1 81e56f4x Rx d 4 F0 F0 F1 FC Length = 0 BitCount = 0 ID = 136206068x
|
||||||
|
392.702103 1 81e56f4x Rx d 4 F0 F0 F1 FC Length = 0 BitCount = 0 ID = 136206068x
|
||||||
|
392.951453 1 81e56f4x Rx d 4 F0 F0 F1 FC Length = 0 BitCount = 0 ID = 136206068x
|
||||||
|
393.201622 1 81e56f4x Rx d 4 F0 F0 F1 FC Length = 0 BitCount = 0 ID = 136206068x
|
||||||
|
393.451409 1 81e56f4x Rx d 4 F0 F0 F1 FC Length = 0 BitCount = 0 ID = 136206068x
|
||||||
|
393.702121 1 81e56f4x Rx d 4 F0 F0 F1 FC Length = 0 BitCount = 0 ID = 136206068x
|
||||||
|
393.951449 1 81e56f4x Rx d 4 F0 F0 F1 FC Length = 0 BitCount = 0 ID = 136206068x
|
||||||
|
394.202089 1 81e56f4x Rx d 4 F0 F0 F1 FC Length = 0 BitCount = 0 ID = 136206068x
|
||||||
|
394.452088 1 81e56f4x Rx d 4 F0 F0 F1 FC Length = 0 BitCount = 0 ID = 136206068x
|
||||||
|
394.702061 1 81e56f4x Rx d 4 F0 F0 F1 FC Length = 0 BitCount = 0 ID = 136206068x
|
||||||
|
394.952032 1 81e56f4x Rx d 4 F0 F0 F1 FC Length = 0 BitCount = 0 ID = 136206068x
|
||||||
|
395.201623 1 81e56f4x Rx d 4 F0 F0 F1 FC Length = 0 BitCount = 0 ID = 136206068x
|
||||||
|
End TriggerBlock
|
||||||
@@ -0,0 +1,320 @@
|
|||||||
|
Startup (type 'help' for command list)
|
||||||
|
CONN_Initializing
|
||||||
|
CONN_Available
|
||||||
|
|
||||||
|
BEM Received, force stopping...
|
||||||
|
BEM: F0 F0 F0 FD FF FF FF FF
|
||||||
|
GBT_COMPLETE
|
||||||
|
GBT_DISABLED
|
||||||
|
|
||||||
|
CONN_Preparing
|
||||||
|
|
||||||
|
CONN_Charging
|
||||||
|
GBT_S3_STARTED
|
||||||
|
GBT_S31_WAIT_BHM
|
||||||
|
|
||||||
|
GBT_S4_ISOTEST
|
||||||
|
|
||||||
|
GBT_S5_BAT_INFO
|
||||||
|
|
||||||
|
GBT_S6_BAT_STAT
|
||||||
|
EV info:
|
||||||
|
GBT_ver V1.10
|
||||||
|
Battery type: 6
|
||||||
|
Battery capacity: 1525
|
||||||
|
Battery voltage: 7090
|
||||||
|
Battery vendor: �
|
||||||
|
Battery SN: 257
|
||||||
|
Battery manufacture date: 255.255.1985
|
||||||
|
Battery cycles: 255
|
||||||
|
Own auto: 255
|
||||||
|
EVIN: L6T79ZCE6RP431111
|
||||||
|
EV_SW_VER: ����
|
||||||
|
|
||||||
|
GBT_S7_BMS_WAIT
|
||||||
|
Battery info:
|
||||||
|
maxCV 4V
|
||||||
|
maxCC 0A
|
||||||
|
totE 108kWh
|
||||||
|
maxCV 844V
|
||||||
|
maxT 60C
|
||||||
|
SOC 94p
|
||||||
|
Volt. 530V
|
||||||
|
|
||||||
|
GBT_S8_INIT_CHARGER
|
||||||
|
|
||||||
|
GBT_S9_WAIT_BCL
|
||||||
|
|
||||||
|
GBT_S10_CHARGING
|
||||||
|
CONN_Charging
|
||||||
|
|
||||||
|
2! �(������2)�(k�
|
||||||
|
!ѡ�Q�)��
|
||||||
|
Bš&ee� ����+�.$H�Q2 �-���h��
|
||||||
|
�(k�%RLGH8Ъ �-ɩ�h, f-����+�.$H�Q2 �2! �(�����b Ɣ�H��P5�PQ�)�(k��RLGH8Ъ �-ɩ�h, f-����+�.$H�Q2 �2! �(�����B Ɣ�H��P5�PQ�)�(k�%RLGH�P���++���J8Ъ �����h, f-����+�.$H�Q2 �2! �(�����B Ɣ�H��P5�PQ�)��
|
||||||
|
Bš&ee� �����+�2! �(������2)�(k�
|
||||||
|
!ѡ�
|
||||||
|
CONN_Available
|
||||||
|
GBT_DISABLED
|
||||||
|
|
||||||
|
CONN_Preparing
|
||||||
|
|
||||||
|
CONN_Charging
|
||||||
|
GBT_S3_STARTED
|
||||||
|
GBT_S31_WAIT_BHM
|
||||||
|
|
||||||
|
GBT_S4_ISOTEST
|
||||||
|
|
||||||
|
GBT_S5_BAT_INFO
|
||||||
|
|
||||||
|
GBT_S6_BAT_STAT
|
||||||
|
EV info:
|
||||||
|
GBT_ver V1.10
|
||||||
|
Battery type: 6
|
||||||
|
Battery capacity: 1525
|
||||||
|
Battery voltage: 7090
|
||||||
|
Battery vendor: �
|
||||||
|
Battery SN: 257
|
||||||
|
Battery manufacture date: 255.255.1985
|
||||||
|
Battery cycles: 255
|
||||||
|
Own auto: 255
|
||||||
|
EVIN: L6T79ZCE6RP431111
|
||||||
|
EV_SW_VER: ����
|
||||||
|
|
||||||
|
GBT_S7_BMS_WAIT
|
||||||
|
Battery info:
|
||||||
|
maxCV 4V
|
||||||
|
maxCC 0A
|
||||||
|
totE 108kWh
|
||||||
|
maxCV 844V
|
||||||
|
maxT 60C
|
||||||
|
SOC 98p
|
||||||
|
Volt. 390V
|
||||||
|
|
||||||
|
GBT_S8_INIT_CHARGER
|
||||||
|
|
||||||
|
GBT_S9_WAIT_BCL
|
||||||
|
|
||||||
|
GBT_S10_CHARGING
|
||||||
|
CONN_Charging
|
||||||
|
|
||||||
|
|
||||||
|
-----
|
||||||
|
|
||||||
|
GBT_DISABLED
|
||||||
|
|
||||||
|
BEM Received, force stopping...
|
||||||
|
BEM: F0 F0 F1 FC 00 00 0F FF
|
||||||
|
GBT_COMPLETE
|
||||||
|
BEM Received, force stopping...
|
||||||
|
BEM: F0 F0 F1 FC 00 00 3F FF
|
||||||
|
GBT_COMPLETE
|
||||||
|
BEM Received, force stopping...
|
||||||
|
BEM: F0 F0 F1 FC 00 00 01 FF
|
||||||
|
GBT_COMPLETE
|
||||||
|
GBT_DISABLED
|
||||||
|
|
||||||
|
CONN_Finishing
|
||||||
|
|
||||||
|
CONN_Available
|
||||||
|
|
||||||
|
-----
|
||||||
|
|
||||||
|
|
||||||
|
CONN_Charging
|
||||||
|
GBT_S3_STARTED
|
||||||
|
GBT_S31_WAIT_BHM
|
||||||
|
|
||||||
|
GBT_S4_ISOTEST
|
||||||
|
|
||||||
|
GBT_S5_BAT_INFO
|
||||||
|
|
||||||
|
GBT_S6_BAT_STAT
|
||||||
|
EV info:
|
||||||
|
GBT_ver V1.10
|
||||||
|
Battery type: 6
|
||||||
|
Battery capacity: 1525
|
||||||
|
Battery voltage: 7090
|
||||||
|
Battery vendor: �
|
||||||
|
Battery SN: 257
|
||||||
|
Battery manufacture date: 255.255.1985
|
||||||
|
Battery cycles: 255
|
||||||
|
Own auto: 255
|
||||||
|
EVIN: L6T79ZCE6RP431111
|
||||||
|
EV_SW_VER: ����
|
||||||
|
|
||||||
|
GBT_S7_BMS_WAIT
|
||||||
|
Battery info:
|
||||||
|
maxCV 4V
|
||||||
|
maxCC 0A
|
||||||
|
totE 108kWh
|
||||||
|
maxCV 844V
|
||||||
|
maxT 60C
|
||||||
|
SOC 98p
|
||||||
|
Volt. 825V
|
||||||
|
|
||||||
|
GBT_S8_INIT_CHARGER
|
||||||
|
|
||||||
|
GBT_S9_WAIT_BCL
|
||||||
|
|
||||||
|
GBT_S10_CHARGING
|
||||||
|
CONN_Charging
|
||||||
|
|
||||||
|
CONN_Available
|
||||||
|
GBT_DISABLED
|
||||||
|
|
||||||
|
CONN_Preparing
|
||||||
|
|
||||||
|
CONN_Charging
|
||||||
|
GBT_S3_STARTED
|
||||||
|
GBT_S31_WAIT_BHM
|
||||||
|
|
||||||
|
GBT_S4_ISOTEST
|
||||||
|
|
||||||
|
GBT_S5_BAT_INFO
|
||||||
|
|
||||||
|
GBT_S6_BAT_STAT
|
||||||
|
EV info:
|
||||||
|
GBT_ver V1.10
|
||||||
|
Battery type: 6
|
||||||
|
Battery capacity: 1525
|
||||||
|
Battery voltage: 7090
|
||||||
|
Battery vendor: �
|
||||||
|
Battery SN: 257
|
||||||
|
Battery manufacture date: 255.255.1985
|
||||||
|
Battery cycles: 255
|
||||||
|
Own auto: 255
|
||||||
|
EVIN: L6T79ZCE6RP431111
|
||||||
|
EV_SW_VER: ����
|
||||||
|
|
||||||
|
BST Received, stopping...
|
||||||
|
BST: 01 00 00 F0 00 00 0F FF
|
||||||
|
GBT_STOP
|
||||||
|
BST Received, stopping...
|
||||||
|
BST: 01 00 00 F0 00 00 3F FF
|
||||||
|
BST Received, stopping...
|
||||||
|
BST: 01 00 00 F0 00 00 7F FF
|
||||||
|
BST Received, stopping...
|
||||||
|
BST: 01 00 00 F0 00 00 FF FF
|
||||||
|
BST Received, stopping...
|
||||||
|
BST: 01 00 00 F0 00 00 00 FF
|
||||||
|
BST Received, stopping...
|
||||||
|
BST: 01 00 00 F0 00 00 01 FF
|
||||||
|
BST Received, stopping...
|
||||||
|
BST: 01 00 00 F0 00 00 01 FF
|
||||||
|
BST Received, stopping...
|
||||||
|
BST: 01 00 00 F0 00 00 03 FF
|
||||||
|
BST Received, stopping...
|
||||||
|
BST: 01 00 00 F0 00 00 03 FF
|
||||||
|
BST Received, stopping...
|
||||||
|
BST: 01 00 00 F0 00 00 07 FF
|
||||||
|
BST Received, stopping...
|
||||||
|
BST: 01 00 00 F0 00 00 07 FF
|
||||||
|
BST Received, stopping...
|
||||||
|
BST: 01 00 00 F0 00 00 0F FF
|
||||||
|
BST Received, stopping...
|
||||||
|
BST: 01 00 00 F0 00 00 0F FF
|
||||||
|
BST Received, stopping...
|
||||||
|
BST: 01 00 00 F0 00 00 1F FF
|
||||||
|
BST Received, stopping...
|
||||||
|
BST: 01 00 00 F0 00 00 1F FF
|
||||||
|
BST Received, stopping...
|
||||||
|
BST: 01 00 00 F0 00 00 3F FF
|
||||||
|
BST Received, stopping...
|
||||||
|
BST: 01 00 00 F0 00 00 3F FF
|
||||||
|
BST Received, stopping...
|
||||||
|
BST: 01 00 00 F0 00 00 7F FF
|
||||||
|
BST Received, stopping...
|
||||||
|
BST: 01 00 00 F0 00 00 7F FF
|
||||||
|
BST Received, stopping...
|
||||||
|
BST: 01 00 00 F0 00 00 00 FF
|
||||||
|
BST Received, stopping...
|
||||||
|
BST: 01 00 00 F0 00 00 00 FF
|
||||||
|
BST Received, stopping...
|
||||||
|
BST: 01 00 00 F0 00 00 01 FF
|
||||||
|
BST Received, stopping...
|
||||||
|
BST: 01 00 00 F0 00 00 01 FF
|
||||||
|
BST Received, stopping...
|
||||||
|
BST: 01 00 00 F0 00 00 03 FF
|
||||||
|
BST Received, stopping...
|
||||||
|
BST: 01 00 00 F0 00 00 03 FF
|
||||||
|
BST Received, stopping...
|
||||||
|
BST: 01 00 00 F0 00 00 07 FF
|
||||||
|
BST Received, stopping...
|
||||||
|
BST: 01 00 00 F0 00 00 0F FF
|
||||||
|
BST Received, stopping...
|
||||||
|
BST: 01 00 00 F0 00 00 0F FF
|
||||||
|
BST Received, stopping...
|
||||||
|
BST: 01 00 00 F0 00 00 1F FF
|
||||||
|
BST Received, stopping...
|
||||||
|
BST: 01 00 00 F0 00 00 1F FF
|
||||||
|
BST Received, stopping...
|
||||||
|
BST: 01 00 00 F0 00 00 3F FF
|
||||||
|
BST Received, stopping...
|
||||||
|
BST: 01 00 00 F0 00 00 3F FF
|
||||||
|
BST Received, stopping...
|
||||||
|
BST: 01 00 00 F0 00 00 7F FF
|
||||||
|
BST Received, stopping...
|
||||||
|
BST: 01 00 00 F0 00 00 7F FF
|
||||||
|
BST Received, stopping...
|
||||||
|
BST: 01 00 00 F0 00 00 3F FF
|
||||||
|
|
||||||
|
GBT_STOP_CSD
|
||||||
|
|
||||||
|
GBT_COMPLETE
|
||||||
|
CONN_Suspended_EV
|
||||||
|
|
||||||
|
GBT_DISABLED
|
||||||
|
|
||||||
|
CONN_Finishing
|
||||||
|
|
||||||
|
BEM Received, force stopping...
|
||||||
|
BEM: F0 F0 F0 FD FF FF FF FF
|
||||||
|
GBT_COMPLETE
|
||||||
|
|
||||||
|
BEM Received, force stopping...
|
||||||
|
BEM: F0 F0 F0 FD FF FF FF FF
|
||||||
|
GBT_COMPLETE
|
||||||
|
|
||||||
|
BEM Received, force stopping...
|
||||||
|
BEM: F0 F0 F0 FD FF FF FF FF
|
||||||
|
GBT_COMPLETE
|
||||||
|
|
||||||
|
BEM Received, force stopping...
|
||||||
|
BEM: F0 F0 F0 FD FF FF FF FF
|
||||||
|
GBT_COMPLETE
|
||||||
|
|
||||||
|
BEM Received, force stopping...
|
||||||
|
BEM: F0 F0 F0 FD FF FF FF FF
|
||||||
|
GBT_COMPLETE
|
||||||
|
|
||||||
|
BEM Received, force stopping...
|
||||||
|
BEM: F0 F0 F0 FD FF FF FF FF
|
||||||
|
GBT_COMPLETE
|
||||||
|
|
||||||
|
BEM Received, force stopping...
|
||||||
|
BEM: F0 F0 F0 FD FF FF FF FF
|
||||||
|
GBT_COMPLETE
|
||||||
|
|
||||||
|
BEM Received, force stopping...
|
||||||
|
BEM: F0 F0 F0 FD FF FF FF FF
|
||||||
|
GBT_COMPLETE
|
||||||
|
|
||||||
|
BEM Received, force stopping...
|
||||||
|
BEM: F0 F0 F0 FD FF FF FF FF
|
||||||
|
GBT_COMPLETE
|
||||||
|
|
||||||
|
BEM Received, force stopping...
|
||||||
|
BEM: F0 F0 F0 FD FF FF FF FF
|
||||||
|
GBT_COMPLETE
|
||||||
|
|
||||||
|
BEM Received, force stopping...
|
||||||
|
BEM: F0 F0 F0 FD FF FF FF FF
|
||||||
|
GBT_COMPLETE
|
||||||
|
|
||||||
|
BEM Received, force stopping...
|
||||||
|
BEM: F0 F0 F0 FD FF FF FF FF
|
||||||
|
GBT_COMPLETE
|
||||||
|
|
||||||
|
CONN_Available
|
||||||
|
GBT_DISABLED
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user