Browse Source

洗舱机器人01(打磨拨下才有左右转回退功能)

master
xsq1-admin 10 months ago
parent
commit
d8c881804a
  1. 221
      BHBF_Robot_Washing_01/.cproject
  2. 2
      BHBF_Robot_Washing_01/.gitignore
  3. 0
      BHBF_Robot_Washing_01/.metadata/.lock
  4. 18
      BHBF_Robot_Washing_01/.metadata/.log4j2.xml
  5. 0
      BHBF_Robot_Washing_01/.metadata/.plugins/com.st.stm32cube.ide.mcu.informationcenter/2.2.200.202403111931
  6. 1
      BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.cdt.make.core/specs.c
  7. 1
      BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.cdt.make.core/specs.cpp
  8. 5
      BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.cdt.make.ui/dialog_settings.xml
  9. BIN
      BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.core.resources/.projects/.org.eclipse.egit.core.cmp/.location
  10. 1
      BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/history.version
  11. 1
      BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version
  12. BIN
      BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.core.resources/.root/2.tree
  13. BIN
      BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources
  14. 2
      BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.core.runtime/.settings/com.st.stm32cube.ide.mcu.ide.oss.prefs
  15. 2
      BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.debug.core.prefs
  16. 4
      BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.ui.prefs
  17. 2
      BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs
  18. 5
      BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.core.prefs
  19. 2
      BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs
  20. 2
      BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jsch.core.prefs
  21. 4
      BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs
  22. 2
      BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.navigator.prefs
  23. 2
      BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs
  24. 9
      BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs
  25. 2
      BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.urischeme.prefs
  26. 2152
      BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi
  27. 11
      BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.egit.core/.org.eclipse.egit.core.cmp/.project
  28. 2
      BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.egit.core/.org.eclipse.egit.core.cmp/.settings/org.eclipse.core.resources.prefs
  29. 6
      BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml
  30. 4
      BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml
  31. 3
      BHBF_Robot_Washing_01/.metadata/version.ini
  32. 50
      BHBF_Robot_Washing_01/.mxproject
  33. 32
      BHBF_Robot_Washing_01/.project
  34. 3
      BHBF_Robot_Washing_01/.settings/com.st.stm32cube.ide.mcu.sfr.prefs
  35. 2
      BHBF_Robot_Washing_01/.settings/com.st.stm32cube.ide.mcu.sfrview.prefs
  36. 26
      BHBF_Robot_Washing_01/.settings/language.settings.xml
  37. 76
      BHBF_Robot_Washing_01/.settings/org.eclipse.cdt.codan.core.prefs
  38. 194
      BHBF_Robot_Washing_01/.settings/org.eclipse.cdt.core.prefs
  39. 3
      BHBF_Robot_Washing_01/.settings/org.eclipse.cdt.ui.prefs
  40. 2
      BHBF_Robot_Washing_01/.settings/org.eclipse.ltk.core.refactoring.prefs
  41. 6
      BHBF_Robot_Washing_01/.settings/stm32cubeide.project.prefs
  42. 174
      BHBF_Robot_Washing_01/BASE/Inc/BSP/BHBF_ROBOT.h
  43. 248
      BHBF_Robot_Washing_01/BASE/Inc/BSP/DLT/DLTuc.h
  44. 74
      BHBF_Robot_Washing_01/BASE/Inc/BSP/DLT/DLTucConfig.h
  45. 15
      BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_DLT_Log.h
  46. 73
      BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_EEPROM.h
  47. 25
      BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_Error_Detect.h
  48. 84
      BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_FDCAN.h
  49. 18
      BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_GPIO.h
  50. 22
      BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_IMU.h
  51. 48
      BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_Log.h
  52. 50
      BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_MB_host.h
  53. 11
      BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_Motor_Helper.h
  54. 52
      BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_TCPClient.h
  55. 17
      BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_TIMER.h
  56. 107
      BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_UART.h
  57. 17
      BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_UDP.h
  58. 27
      BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_UpperComputer_Handler.h
  59. 16
      BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_adc.h
  60. 13
      BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_client_setting.h
  61. 82
      BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_com_helper.h
  62. 66
      BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_cpu_flash.h
  63. 40
      BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_decode_command.h
  64. 57
      BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_include.h
  65. 36
      BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_mqtt.h
  66. 26
      BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_mqtt_pub.h
  67. 51
      BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_pb_decode_encode.h
  68. 107
      BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_qspi_w25q128.h
  69. 917
      BHBF_Robot_Washing_01/BASE/Inc/BSP/pb.h
  70. 49
      BHBF_Robot_Washing_01/BASE/Inc/BSP/pb_common.h
  71. 193
      BHBF_Robot_Washing_01/BASE/Inc/BSP/pb_decode.h
  72. 185
      BHBF_Robot_Washing_01/BASE/Inc/BSP/pb_encode.h
  73. 38
      BHBF_Robot_Washing_01/BASE/Inc/BSP/readme.h
  74. 309
      BHBF_Robot_Washing_01/BASE/Inc/MSP/SteerEngine/msp_fashion_star_uart_servo.h
  75. 82
      BHBF_Robot_Washing_01/BASE/Inc/MSP/SteerEngine/msp_ring_buffer.h
  76. 27
      BHBF_Robot_Washing_01/BASE/Inc/MSP/msp_Angle_Encoder_YL159.h
  77. 19
      BHBF_Robot_Washing_01/BASE/Inc/MSP/msp_DAM0404D.h
  78. 14
      BHBF_Robot_Washing_01/BASE/Inc/MSP/msp_DAM_Relay.h
  79. 87
      BHBF_Robot_Washing_01/BASE/Inc/MSP/msp_DC_CAN_SWING_Controller.h
  80. 57
      BHBF_Robot_Washing_01/BASE/Inc/MSP/msp_DH_Remote_Controller.h
  81. 121
      BHBF_Robot_Washing_01/BASE/Inc/MSP/msp_DH_Roughening.h
  82. 17
      BHBF_Robot_Washing_01/BASE/Inc/MSP/msp_DMKE_485_Motor.h
  83. 13
      BHBF_Robot_Washing_01/BASE/Inc/MSP/msp_Force_Sensor.h
  84. 15
      BHBF_Robot_Washing_01/BASE/Inc/MSP/msp_JTBATTERY.h
  85. 18
      BHBF_Robot_Washing_01/BASE/Inc/MSP/msp_LeiSai_ISV2_CAN.h
  86. 16
      BHBF_Robot_Washing_01/BASE/Inc/MSP/msp_MK32_1.h
  87. 33
      BHBF_Robot_Washing_01/BASE/Inc/MSP/msp_OBD.h
  88. 27
      BHBF_Robot_Washing_01/BASE/Inc/MSP/msp_PID.h
  89. 32
      BHBF_Robot_Washing_01/BASE/Inc/MSP/msp_Steering_Engine.h
  90. 62
      BHBF_Robot_Washing_01/BASE/Inc/MSP/msp_TI5MOTOR.h
  91. 21
      BHBF_Robot_Washing_01/BASE/Inc/MSP/msp_TL720D.h
  92. 85
      BHBF_Robot_Washing_01/BASE/Inc/MSP/msp_TTMotor_ZQ.h
  93. 21
      BHBF_Robot_Washing_01/BASE/Inc/MSP/msp_WH_LTE_7S0.h
  94. 26
      BHBF_Robot_Washing_01/BASE/Inc/MSP/msp_Wire_Sensor.h
  95. 67
      BHBF_Robot_Washing_01/BASE/Src/BSP/BHBF_ROBOT.c
  96. 636
      BHBF_Robot_Washing_01/BASE/Src/BSP/DLT/DLTuc.c
  97. 90
      BHBF_Robot_Washing_01/BASE/Src/BSP/bsp_DLT_Log.c
  98. 570
      BHBF_Robot_Washing_01/BASE/Src/BSP/bsp_EEPROM.c
  99. 26
      BHBF_Robot_Washing_01/BASE/Src/BSP/bsp_Error_Detect.c
  100. 356
      BHBF_Robot_Washing_01/BASE/Src/BSP/bsp_FDCAN.c

221
BHBF_Robot_Washing_01/.cproject

@ -0,0 +1,221 @@
<?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.1900810912">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1900810912" 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.1900810912" 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.1900810912." name="/" resourcePath="">
<toolChain id="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.exe.debug.1999310814" 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.555556475" name="MCU" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_mcu" useByScannerDiscovery="true" value="STM32H743VGTx" valueType="string"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid.1242211636" 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.2000965024" 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.fpu.227974202" name="Floating-point unit" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.fpu" useByScannerDiscovery="true" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.fpu.value.fpv5-d16" valueType="enumerated"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi.381957633" name="Floating-point ABI" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi" useByScannerDiscovery="true" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi.value.hard" valueType="enumerated"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board.768448908" 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.1099763806" 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 || STM32H743VGTx || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../Middlewares/Third_Party/LwIP/src/include/netif/ppp | ../Middlewares/Third_Party/LwIP/src/include/lwip/priv | ../Drivers/STM32H7xx_HAL_Driver/Inc/Legacy | ../Middlewares/Third_Party/LwIP/src/include/compat/stdc | ../Middlewares/Third_Party/LwIP/src/include/lwip/prot | ../Middlewares/Third_Party/LwIP/src/include/lwip/apps | ../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys | ../Middlewares/Third_Party/LwIP/system/arch | ../Middlewares/Third_Party/LwIP/src/include | ../LWIP/App | ../Middlewares/Third_Party/LwIP/src/include/compat/posix | ../Drivers/CMSIS/Include | ../Core/Inc | ../Drivers/CMSIS/Device/ST/STM32H7xx/Include | ../LWIP/Target | ../Middlewares/Third_Party/LwIP/src/include/lwip | ../Middlewares/Third_Party/LwIP/src/include/compat/posix/net | ../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa | ../Drivers/STM32H7xx_HAL_Driver/Inc | ../Middlewares/Third_Party/LwIP/system | ../Drivers/BSP/Components/lan8742 | ../Middlewares/Third_Party/LwIP/src/include/netif || || || USE_HAL_DRIVER | STM32H743xx || || LWIP | Drivers | Core/Startup | Middlewares | Core || || || ${workspace_loc:/${ProjName}/STM32H743VGTX_FLASH.ld} || true || NonSecure || || secure_nsclib.o || || None || || || " valueType="string"/>
<option id="com.st.stm32cube.ide.mcu.debug.option.cpuclock.566417622" name="Cpu clock frequence" superClass="com.st.stm32cube.ide.mcu.debug.option.cpuclock" useByScannerDiscovery="false" value="200" valueType="string"/>
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform.2019032613" isAbstract="false" osList="all" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform"/>
<builder buildPath="${workspace_loc:/BHBF_Robot_Detect}/Debug" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder.1752705428" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="GNU Make 构建器" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder"/>
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.70866068" 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.133108927" 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.2062091936" name="Define symbols (-D)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.definedsymbols" valueType="definedSymbols">
<listOptionValue builtIn="false" value="DEBUG"/>
</option>
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input.1067181325" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input"/>
</tool>
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1206119803" 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.1004986992" 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.613764472" name="Optimization level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level" useByScannerDiscovery="false"/>
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.definedsymbols.1100922921" 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="STM32H743xx"/>
</option>
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.includepaths.1592849673" 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/STM32H7xx_HAL_Driver/Inc"/>
<listOptionValue builtIn="false" value="../Drivers/STM32H7xx_HAL_Driver/Inc/Legacy"/>
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Device/ST/STM32H7xx/Include"/>
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Include"/>
<listOptionValue builtIn="false" value="../LWIP/App"/>
<listOptionValue builtIn="false" value="../LWIP/Target"/>
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/LwIP/src/include"/>
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/LwIP/system"/>
<listOptionValue builtIn="false" value="../Drivers/BSP/Components/lan8742"/>
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/LwIP/src/include/netif/ppp"/>
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/LwIP/src/include/lwip"/>
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/LwIP/src/include/lwip/apps"/>
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/LwIP/src/include/lwip/priv"/>
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/LwIP/src/include/lwip/prot"/>
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/LwIP/src/include/netif"/>
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/LwIP/src/include/compat/posix"/>
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa"/>
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/LwIP/src/include/compat/posix/net"/>
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys"/>
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/LwIP/src/include/compat/stdc"/>
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/LwIP/system/arch"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/Core/Protobuf/PSource}&quot;"/>
<listOptionValue builtIn="false" value="../BASE/Inc/BSP"/>
<listOptionValue builtIn="false" value="../BASE/Inc/MSP"/>
<listOptionValue builtIn="false" value="../BASE/Inc/BSP/DLT"/>
<listOptionValue builtIn="false" value="../BASE/Inc/MSP/SteerEngine"/>
</option>
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.1875395144" 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.1331254744" 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.1181398770" 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.1136913521" 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.781122670" 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.975060295" name="Linker Script (-T)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.option.script" value="${workspace_loc:/${ProjName}/STM32H743VGTX_FLASH.ld}" valueType="string"/>
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.input.126109057" 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.618192742" 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.1782033746" 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.436382718" 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.1980650523" 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.1120618345" 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.152900436" 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.1601259826" 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.1941358903" 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.799850565" 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="BASE"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Core"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Drivers"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="LWIP"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Middlewares"/>
</sourceEntries>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
</cconfiguration>
<cconfiguration id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.1322898427">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.1322898427" 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.1322898427" 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.1322898427." name="/" resourcePath="">
<toolChain id="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.exe.release.1547597857" 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.1410470689" name="MCU" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_mcu" useByScannerDiscovery="true" value="STM32H743VGTx" valueType="string"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid.870155125" 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.2018066716" 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.fpu.992567197" name="Floating-point unit" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.fpu" useByScannerDiscovery="true" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.fpu.value.fpv5-d16" valueType="enumerated"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi.1144232392" name="Floating-point ABI" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi" useByScannerDiscovery="true" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.floatabi.value.hard" valueType="enumerated"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board.194020544" 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.2100472703" 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 || STM32H743VGTx || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../Middlewares/Third_Party/LwIP/src/include/netif/ppp | ../Middlewares/Third_Party/LwIP/src/include/lwip/priv | ../Drivers/STM32H7xx_HAL_Driver/Inc/Legacy | ../Middlewares/Third_Party/LwIP/src/include/compat/stdc | ../Middlewares/Third_Party/LwIP/src/include/lwip/prot | ../Middlewares/Third_Party/LwIP/src/include/lwip/apps | ../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys | ../Middlewares/Third_Party/LwIP/system/arch | ../Middlewares/Third_Party/LwIP/src/include | ../LWIP/App | ../Middlewares/Third_Party/LwIP/src/include/compat/posix | ../Drivers/CMSIS/Include | ../Core/Inc | ../Drivers/CMSIS/Device/ST/STM32H7xx/Include | ../LWIP/Target | ../Middlewares/Third_Party/LwIP/src/include/lwip | ../Middlewares/Third_Party/LwIP/src/include/compat/posix/net | ../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa | ../Drivers/STM32H7xx_HAL_Driver/Inc | ../Middlewares/Third_Party/LwIP/system | ../Drivers/BSP/Components/lan8742 | ../Middlewares/Third_Party/LwIP/src/include/netif || || || USE_HAL_DRIVER | STM32H743xx || || LWIP | Drivers | Core/Startup | Middlewares | Core || || || ${workspace_loc:/${ProjName}/STM32H743VGTX_FLASH.ld} || true || NonSecure || || secure_nsclib.o || || None || || || " valueType="string"/>
<option id="com.st.stm32cube.ide.mcu.debug.option.cpuclock.349585402" name="Cpu clock frequence" superClass="com.st.stm32cube.ide.mcu.debug.option.cpuclock" useByScannerDiscovery="false" value="200" valueType="string"/>
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform.504050356" isAbstract="false" osList="all" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform"/>
<builder buildPath="${workspace_loc:/BHBF_Robot_Detect}/Release" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder.1435115632" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="GNU Make 构建器" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder"/>
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.1473308058" 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.1607051634" 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.1586091832" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input"/>
</tool>
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.319656371" 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.555485472" 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.1106343697" 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.1261730363" 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="STM32H743xx"/>
</option>
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.includepaths.6601227" 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/STM32H7xx_HAL_Driver/Inc"/>
<listOptionValue builtIn="false" value="../Drivers/STM32H7xx_HAL_Driver/Inc/Legacy"/>
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Device/ST/STM32H7xx/Include"/>
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Include"/>
<listOptionValue builtIn="false" value="../LWIP/App"/>
<listOptionValue builtIn="false" value="../LWIP/Target"/>
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/LwIP/src/include"/>
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/LwIP/system"/>
<listOptionValue builtIn="false" value="../Drivers/BSP/Components/lan8742"/>
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/LwIP/src/include/netif/ppp"/>
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/LwIP/src/include/lwip"/>
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/LwIP/src/include/lwip/apps"/>
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/LwIP/src/include/lwip/priv"/>
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/LwIP/src/include/lwip/prot"/>
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/LwIP/src/include/netif"/>
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/LwIP/src/include/compat/posix"/>
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/LwIP/src/include/compat/posix/arpa"/>
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/LwIP/src/include/compat/posix/net"/>
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/LwIP/src/include/compat/posix/sys"/>
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/LwIP/src/include/compat/stdc"/>
<listOptionValue builtIn="false" value="../Middlewares/Third_Party/LwIP/system/arch"/>
</option>
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.1819991972" 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.1052291925" 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.1211650127" 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.624188949" 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.476422491" 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.1905838036" name="Linker Script (-T)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.option.script" value="${workspace_loc:/${ProjName}/STM32H743VGTX_FLASH.ld}" valueType="string"/>
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.input.1723740925" 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.1709704951" 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.1745189211" 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.802105533" 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.830267809" 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.1134210813" 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.1134287782" 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.1854232311" 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.2088908787" 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.800843731" 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="Middlewares"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="LWIP"/>
<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="BHBF_Robot_Detect.null.793203229" name="BHBF_Robot_Detect"/>
</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.1322898427;com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.1322898427.;com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.319656371;com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.1819991972">
<autodiscovery enabled="false" problemReportingEnabled="true" selectedProfileId=""/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1900810912;com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1900810912.;com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1206119803;com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.1875395144">
<autodiscovery enabled="false" problemReportingEnabled="true" selectedProfileId=""/>
</scannerConfigBuildInfo>
</storageModule>
<storageModule moduleId="refreshScope"/>
</cproject>

2
BHBF_Robot_Washing_01/.gitignore

@ -0,0 +1,2 @@
/Release/
/Debug/

0
BHBF_Robot_Washing_01/.metadata/.lock

18
BHBF_Robot_Washing_01/.metadata/.log4j2.xml

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="info">
<ThresholdFilter level="INFO"/>
<Appenders>
<RollingFile name="DEBUGFILE" fileName="E:/BingooWorkingSpace/BHBF_Robot_Detect/.metadata/.ide.log" filePattern="E:/BingooWorkingSpace/BHBF_Robot_Detect/.metadata/.ide.log-%d{yyyy-MM-dd}.log">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} [%p] %c{1}:%L - %m%n" />
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
<SizeBasedTriggeringPolicy size="50MB"/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Root level="ALL">
<AppenderRef ref="DEBUGFILE" />
</Root>
</Loggers>
</Configuration>

0
BHBF_Robot_Washing_01/.metadata/.plugins/com.st.stm32cube.ide.mcu.informationcenter/2.2.200.202403111931

1
BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.cdt.make.core/specs.c

@ -0,0 +1 @@

1
BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.cdt.make.core/specs.cpp

@ -0,0 +1 @@

5
BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.cdt.make.ui/dialog_settings.xml

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<section name="Workbench">
<section name="org.eclipse.cdt.internal.ui.MakeView">
</section>
</section>

BIN
BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.core.resources/.projects/.org.eclipse.egit.core.cmp/.location

Binary file not shown.

1
BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/history.version

@ -0,0 +1 @@


1
BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version

@ -0,0 +1 @@


BIN
BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.core.resources/.root/2.tree

Binary file not shown.

BIN
BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources

Binary file not shown.

2
BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.core.runtime/.settings/com.st.stm32cube.ide.mcu.ide.oss.prefs

@ -0,0 +1,2 @@
eclipse.preferences.version=1
project_presentation/setHierarchicalMode=false

2
BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.debug.core.prefs

@ -0,0 +1,2 @@
eclipse.preferences.version=1
org.eclipse.cdt.debug.core.cDebug.default_source_containers=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?>\r\n<sourceLookupDirector>\r\n <sourceContainers duplicates\="false">\r\n <container memento\="AbsolutePath" typeId\="org.eclipse.cdt.debug.core.containerType.absolutePath"/>\r\n <container memento\="programRelativePath" typeId\="org.eclipse.cdt.debug.core.containerType.programRelativePath"/>\r\n <container memento\="&lt;?xml version\=&quot;1.0&quot; encoding\=&quot;UTF-8&quot; standalone\=&quot;no&quot;?&gt;&\#13;&\#10;&lt;project referencedProjects\=&quot;true&quot;/&gt;&\#13;&\#10;" typeId\="org.eclipse.cdt.debug.core.containerType.project"/>\r\n </sourceContainers>\r\n</sourceLookupDirector>\r\n

4
BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.ui.prefs

@ -0,0 +1,4 @@
eclipse.preferences.version=1
spelling_locale_initialized=true
useAnnotationsPrefPage=true
useQuickDiffPrefPage=true

2
BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs

@ -0,0 +1,2 @@
eclipse.preferences.version=1
version=1

5
BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.core.prefs

@ -0,0 +1,5 @@
//org.eclipse.debug.core.PREFERRED_DELEGATES/org.eclipse.cdt.launch.applicationLaunchType=org.eclipse.cdt.dsf.gdb.launch.localCLaunch,debug,;org.eclipse.cdt.cdi.launch.localCLaunch,run,;
//org.eclipse.debug.core.PREFERRED_DELEGATES/org.eclipse.cdt.launch.attachLaunchType=org.eclipse.cdt.dsf.gdb.launch.attachCLaunch,debug,;
//org.eclipse.debug.core.PREFERRED_DELEGATES/org.eclipse.cdt.launch.postmortemLaunchType=org.eclipse.cdt.dsf.gdb.launch.coreCLaunch,debug,;
//org.eclipse.debug.core.PREFERRED_DELEGATES/org.eclipse.cdt.launch.remoteApplicationLaunchType=org.eclipse.rse.remotecdt.dsf.debug,debug,;
eclipse.preferences.version=1

2
BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs

@ -0,0 +1,2 @@
eclipse.preferences.version=1
org.eclipse.debug.ui.PREF_LAUNCH_PERSPECTIVES=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?>\r\n<launchPerspectives/>\r\n

2
BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jsch.core.prefs

@ -0,0 +1,2 @@
eclipse.preferences.version=1
org.eclipse.jsch.core.hasChangedDefaultWin32SshHome=true

4
BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs

@ -0,0 +1,4 @@
eclipse.preferences.version=1
platformState=1711943664369
quickStart=false
tipsAndTricks=true

2
BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.navigator.prefs

@ -0,0 +1,2 @@
eclipse.preferences.version=1
org.eclipse.ui.navigator.ProjectExplorer.filterActivation=\:org.eclipse.ui.navigator.resources.filters.startsWithDot\:org.eclipse.cdt.ui.navigator.filters.AnonymousStructFilter\:org.eclipse.cdt.ui.navigator.filters.AbsentTranslationUnitFilter\:org.eclipse.ui.navigator.resources.nested.HideTopLevelProjectIfNested\:org.eclipse.ui.navigator.resources.nested.HideFolderWhenProjectIsShownAsNested\:org.eclipse.cdt.ui.navigator.filters.ForwardDeclarationFilter\:

2
BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs

@ -0,0 +1,2 @@
eclipse.preferences.version=1
showIntro=false

9
BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs

@ -0,0 +1,9 @@
//org.eclipse.ui.commands/state/com.st.stm32cube.ide.mcu.buildanalyzer.showstate/org.eclipse.ui.commands.radioState=human
//org.eclipse.ui.commands/state/org.eclipse.ui.navigator.resources.nested.changeProjectPresentation/org.eclipse.ui.commands.radioState=false
eclipse.preferences.version=1
org.eclipse.ui.workbench.ACTIVE_NOFOCUS_TAB_BG_END=255,255,255
org.eclipse.ui.workbench.ACTIVE_NOFOCUS_TAB_BG_START=255,255,255
org.eclipse.ui.workbench.ACTIVE_NOFOCUS_TAB_TEXT_COLOR=16,16,16
org.eclipse.ui.workbench.ACTIVE_TAB_BG_END=255,255,255
org.eclipse.ui.workbench.ACTIVE_TAB_BG_START=255,255,255
org.eclipse.ui.workbench.INACTIVE_TAB_BG_START=242,242,242

2
BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.urischeme.prefs

@ -0,0 +1,2 @@
eclipse.preferences.version=1
processedSchemes=,eclipse+command,eclipse+mpc

2152
BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi

File diff suppressed because it is too large

11
BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.egit.core/.org.eclipse.egit.core.cmp/.project

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>.org.eclipse.egit.core.cmp</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
</buildSpec>
<natures>
</natures>
</projectDescription>

2
BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.egit.core/.org.eclipse.egit.core.cmp/.settings/org.eclipse.core.resources.prefs

@ -0,0 +1,2 @@
eclipse.preferences.version=1
encoding/<project>=UTF-8

6
BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<section name="Workbench">
<section name="ExternalProjectImportWizard">
<item key="WizardProjectsImportPage.STORE_NESTED_PROJECTS" value="true"/>
</section>
</section>

4
BHBF_Robot_Washing_01/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<workingSetManager>
<workingSet aggregate="true" factoryID="org.eclipse.ui.internal.WorkingSetFactory" id="1719473879738_0" label="Window Working Set" name="Aggregate for window 1719473879738"/>
</workingSetManager>

3
BHBF_Robot_Washing_01/.metadata/version.ini

@ -0,0 +1,3 @@
#Thu Jun 27 15:38:50 CST 2024
org.eclipse.core.runtime=2
org.eclipse.platform=4.30.0.v20231201-0110

50
BHBF_Robot_Washing_01/.mxproject

File diff suppressed because one or more lines are too long

32
BHBF_Robot_Washing_01/.project

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>BHBF_Robot_Washing_01</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
<triggers>clean,full,incremental,</triggers>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
<triggers>full,incremental,</triggers>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>com.st.stm32cube.ide.mcu.MCUProjectNature</nature>
<nature>com.st.stm32cube.ide.mcu.MCUCubeProjectNature</nature>
<nature>org.eclipse.cdt.core.cnature</nature>
<nature>com.st.stm32cube.ide.mcu.MCUCubeIdeServicesRevAev2ProjectNature</nature>
<nature>com.st.stm32cube.ide.mcu.MCUAdvancedStructureProjectNature</nature>
<nature>com.st.stm32cube.ide.mcu.MCUSingleCpuProjectNature</nature>
<nature>com.st.stm32cube.ide.mcu.MCURootProjectNature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
</natures>
</projectDescription>

3
BHBF_Robot_Washing_01/.settings/com.st.stm32cube.ide.mcu.sfr.prefs

@ -0,0 +1,3 @@
eclipse.preferences.version=1
svd_custom_file_path=
svd_file_path=platform\:/plugin/com.st.stm32cube.ide.mcu.productdb.debug/resources/cmsis/STMicroelectronics_CMSIS_SVD/STM32H743.svd

2
BHBF_Robot_Washing_01/.settings/com.st.stm32cube.ide.mcu.sfrview.prefs

@ -0,0 +1,2 @@
eclipse.preferences.version=1
sfrviewstate={"fFavorites"\:{"fLists"\:{}},"fProperties"\:{"fNodeProperties"\:{}}}

26
BHBF_Robot_Washing_01/.settings/language.settings.xml

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project>
<configuration id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1900810912" 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="-31760243721109995" 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 &quot;${INPUTS}&quot;" 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.1322898427" 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 copy-of="extension" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"/>
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-31760243721109995" 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 &quot;${INPUTS}&quot;" prefer-non-shared="true">
<language-scope id="org.eclipse.cdt.core.gcc"/>
<language-scope id="org.eclipse.cdt.core.g++"/>
</provider>
</extension>
</configuration>
</project>

76
BHBF_Robot_Washing_01/.settings/org.eclipse.cdt.codan.core.prefs

@ -0,0 +1,76 @@
com.st.stm32cube.ide.mcu.ide.oss.source.checker.libnano.problem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Float formatting support\\")"}
eclipse.preferences.version=1
org.eclipse.cdt.codan.checkers.errnoreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return\\")",implicit\=>false}
org.eclipse.cdt.codan.checkers.errreturnvalue.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused return value\\")"}
org.eclipse.cdt.codan.checkers.localvarreturn=-Warning
org.eclipse.cdt.codan.checkers.localvarreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Returning the address of a local variable\\")"}
org.eclipse.cdt.codan.checkers.nocommentinside.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Nesting comments\\")"}
org.eclipse.cdt.codan.checkers.nolinecomment.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Line comments\\")"}
org.eclipse.cdt.codan.checkers.noreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return value\\")",implicit\=>false}
org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Abstract class cannot be instantiated\\")"}
org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Ambiguous problem\\")"}
org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment in condition\\")"}
org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment to itself\\")"}
org.eclipse.cdt.codan.internal.checkers.BlacklistProblem=-Warning
org.eclipse.cdt.codan.internal.checkers.BlacklistProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Function or method is blacklisted\\")",blacklist\=>()}
org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem=-Warning
org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"C-Style cast instead of C++ cast\\")",checkMacro\=>true}
org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No break at end of case\\")",no_break_comment\=>"no break",last_case_param\=>false,empty_case_param\=>false,enable_fallthrough_quickfix_param\=>false}
org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Catching by reference is recommended\\")",unknown\=>false,exceptions\=>()}
org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Circular inheritance\\")"}
org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class members should be properly initialized\\")",skip\=>true}
org.eclipse.cdt.codan.internal.checkers.CopyrightProblem=-Warning
org.eclipse.cdt.codan.internal.checkers.CopyrightProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Lack of copyright information\\")",regex\=>".*Copyright.*"}
org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid 'decltype(auto)' specifier\\")"}
org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Field cannot be resolved\\")"}
org.eclipse.cdt.codan.internal.checkers.FloatCompareProblem=-Warning
org.eclipse.cdt.codan.internal.checkers.FloatCompareProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Direct float comparison\\")"}
org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Function cannot be resolved\\")"}
org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem=-Warning
org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Goto statement used\\")"}
org.eclipse.cdt.codan.internal.checkers.InvalidArguments.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid arguments\\")"}
org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid template argument\\")"}
org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Label statement not found\\")"}
org.eclipse.cdt.codan.internal.checkers.MagicNumberProblem=-Warning
org.eclipse.cdt.codan.internal.checkers.MagicNumberProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Avoid magic numbers\\")",checkArray\=>true,checkOperatorParen\=>true,exceptions\=>(1,0,-1,2,1.0,0.0,-1.0)}
org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Member declaration not found\\")"}
org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Method cannot be resolved\\")"}
org.eclipse.cdt.codan.internal.checkers.MissCaseProblem=-Warning
org.eclipse.cdt.codan.internal.checkers.MissCaseProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing cases in switch\\")"}
org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem=-Warning
org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing default in switch\\")",defaultWithAllEnums\=>false}
org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem=-Warning
org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing reference return value in assignment operator\\")"}
org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem=-Warning
org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing self check in assignment operator\\")"}
org.eclipse.cdt.codan.internal.checkers.MultipleDeclarationsProblem=-Warning
org.eclipse.cdt.codan.internal.checkers.MultipleDeclarationsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Multiple variable declaration\\")"}
org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Name convention for function\\")",pattern\=>"^[a-z]",macro\=>true,exceptions\=>()}
org.eclipse.cdt.codan.internal.checkers.NoDiscardProblem=Warning
org.eclipse.cdt.codan.internal.checkers.NoDiscardProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Return value not evaluated\\")",macro\=>true}
org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class has a virtual method and non-virtual destructor\\")"}
org.eclipse.cdt.codan.internal.checkers.OverloadProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid overload\\")"}
org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redeclaration\\")"}
org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redefinition\\")"}
org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Return with parenthesis\\")"}
org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Format String Vulnerability\\")"}
org.eclipse.cdt.codan.internal.checkers.ShallowCopyProblem=-Warning
org.eclipse.cdt.codan.internal.checkers.ShallowCopyProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Miss copy constructor or assignment operator\\")",onlynew\=>false}
org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Statement has no effect\\")",macro\=>true,exceptions\=>()}
org.eclipse.cdt.codan.internal.checkers.StaticVariableInHeaderProblem=-Warning
org.eclipse.cdt.codan.internal.checkers.StaticVariableInHeaderProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Static variable in header file\\")"}
org.eclipse.cdt.codan.internal.checkers.StructuredBindingDeclarationProblem=Error
org.eclipse.cdt.codan.internal.checkers.StructuredBindingDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid structured binding declaration\\")"}
org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suggested parenthesis around expression\\")",paramNot\=>false}
org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suspicious semicolon\\")",else\=>false,afterelse\=>false}
org.eclipse.cdt.codan.internal.checkers.SymbolShadowingProblem=-Warning
org.eclipse.cdt.codan.internal.checkers.SymbolShadowingProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Symbol shadowing\\")",paramFuncParameters\=>true}
org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Type cannot be resolved\\")"}
org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused function declaration\\")",macro\=>true}
org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused static function\\")",macro\=>true}
org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused variable declaration in file scope\\")",macro\=>true,exceptions\=>("@(\#)","$Id")}
org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem=-Warning
org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Using directive in header\\")"}
org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Symbol is not resolved\\")"}
org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem=-Error
org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Virtual method call in constructor/destructor\\")"}

194
BHBF_Robot_Washing_01/.settings/org.eclipse.cdt.core.prefs

@ -0,0 +1,194 @@
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
org.eclipse.cdt.core.formatter.alignment_for_arguments_in_method_invocation=16
org.eclipse.cdt.core.formatter.alignment_for_assignment=16
org.eclipse.cdt.core.formatter.alignment_for_base_clause_in_type_declaration=80
org.eclipse.cdt.core.formatter.alignment_for_binary_expression=16
org.eclipse.cdt.core.formatter.alignment_for_compact_if=16
org.eclipse.cdt.core.formatter.alignment_for_conditional_expression=34
org.eclipse.cdt.core.formatter.alignment_for_conditional_expression_chain=18
org.eclipse.cdt.core.formatter.alignment_for_constructor_initializer_list=0
org.eclipse.cdt.core.formatter.alignment_for_declarator_list=16
org.eclipse.cdt.core.formatter.alignment_for_enumerator_list=48
org.eclipse.cdt.core.formatter.alignment_for_expression_list=0
org.eclipse.cdt.core.formatter.alignment_for_expressions_in_array_initializer=16
org.eclipse.cdt.core.formatter.alignment_for_lambda_expression=20
org.eclipse.cdt.core.formatter.alignment_for_member_access=0
org.eclipse.cdt.core.formatter.alignment_for_overloaded_left_shift_chain=16
org.eclipse.cdt.core.formatter.alignment_for_parameters_in_method_declaration=16
org.eclipse.cdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
org.eclipse.cdt.core.formatter.brace_position_for_array_initializer=next_line
org.eclipse.cdt.core.formatter.brace_position_for_block=next_line
org.eclipse.cdt.core.formatter.brace_position_for_block_in_case=next_line
org.eclipse.cdt.core.formatter.brace_position_for_linkage_declaration=next_line
org.eclipse.cdt.core.formatter.brace_position_for_method_declaration=next_line
org.eclipse.cdt.core.formatter.brace_position_for_namespace_declaration=next_line
org.eclipse.cdt.core.formatter.brace_position_for_switch=next_line
org.eclipse.cdt.core.formatter.brace_position_for_type_declaration=next_line
org.eclipse.cdt.core.formatter.comment.line_up_line_comment_in_blocks_on_first_column=false
org.eclipse.cdt.core.formatter.comment.min_distance_between_code_and_line_comment=1
org.eclipse.cdt.core.formatter.comment.never_indent_line_comments_on_first_column=true
org.eclipse.cdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=true
org.eclipse.cdt.core.formatter.comment_formatter_off_tag=@formatter\:off
org.eclipse.cdt.core.formatter.comment_formatter_on_tag=@formatter\:on
org.eclipse.cdt.core.formatter.compact_else_if=true
org.eclipse.cdt.core.formatter.continuation_indentation=2
org.eclipse.cdt.core.formatter.continuation_indentation_for_array_initializer=2
org.eclipse.cdt.core.formatter.format_block_comment=true
org.eclipse.cdt.core.formatter.format_guardian_clause_on_one_line=false
org.eclipse.cdt.core.formatter.format_header_comment=true
org.eclipse.cdt.core.formatter.format_line_comment=true
org.eclipse.cdt.core.formatter.indent_access_specifier_compare_to_type_header=false
org.eclipse.cdt.core.formatter.indent_access_specifier_extra_spaces=0
org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_access_specifier=true
org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_linkage=false
org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_namespace_header=false
org.eclipse.cdt.core.formatter.indent_breaks_compare_to_cases=true
org.eclipse.cdt.core.formatter.indent_declaration_compare_to_template_header=false
org.eclipse.cdt.core.formatter.indent_empty_lines=false
org.eclipse.cdt.core.formatter.indent_label_compare_to_statements=true
org.eclipse.cdt.core.formatter.indent_statements_compare_to_block=true
org.eclipse.cdt.core.formatter.indent_statements_compare_to_body=true
org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_cases=true
org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_switch=true
org.eclipse.cdt.core.formatter.indentation.size=4
org.eclipse.cdt.core.formatter.insert_new_line_after_colon_in_constructor_initializer_list=insert
org.eclipse.cdt.core.formatter.insert_new_line_after_label=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_after_template_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_colon_in_constructor_initializer_list=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_identifier_in_function_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
org.eclipse.cdt.core.formatter.insert_new_line_in_empty_block=insert
org.eclipse.cdt.core.formatter.insert_space_after_assignment_operator=insert
org.eclipse.cdt.core.formatter.insert_space_after_binary_operator=insert
org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_arguments=insert
org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_parameters=insert
org.eclipse.cdt.core.formatter.insert_space_after_closing_brace_in_block=insert
org.eclipse.cdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
org.eclipse.cdt.core.formatter.insert_space_after_colon_in_base_clause=insert
org.eclipse.cdt.core.formatter.insert_space_after_colon_in_case=insert
org.eclipse.cdt.core.formatter.insert_space_after_colon_in_conditional=insert
org.eclipse.cdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_base_types=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_declarator_list=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_expression_list=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_structured_binding_name_list=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_arguments=insert
org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_parameters=insert
org.eclipse.cdt.core.formatter.insert_space_after_lambda_return=insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_arguments=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_parameters=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_bracket=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_exception_specification=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_opening_structured_binding_name_list=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_pointer_in_declarator_list=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_pointer_in_method_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_postfix_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_prefix_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_after_question_in_conditional=insert
org.eclipse.cdt.core.formatter.insert_space_after_semicolon_in_for=insert
org.eclipse.cdt.core.formatter.insert_space_after_unary_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_assignment_operator=insert
org.eclipse.cdt.core.formatter.insert_space_before_binary_operator=insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_arguments=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_parameters=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_bracket=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_exception_specification=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_closing_structured_binding_name_list=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_base_clause=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_case=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_conditional=insert
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_default=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_base_types=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_declarator_list=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_expression_list=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_structured_binding_name_list=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_arguments=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_parameters=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_lambda_return=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_arguments=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_parameters=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_block=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_linkage_declaration=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_namespace_declaration=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_bracket=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_exception_specification=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_for=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_if=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_while=insert
org.eclipse.cdt.core.formatter.insert_space_before_opening_structured_binding_name_list=insert
org.eclipse.cdt.core.formatter.insert_space_before_pointer_in_declarator_list=insert
org.eclipse.cdt.core.formatter.insert_space_before_pointer_in_method_declaration=insert
org.eclipse.cdt.core.formatter.insert_space_before_postfix_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_prefix_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_question_in_conditional=insert
org.eclipse.cdt.core.formatter.insert_space_before_ref_qualifier_in_structured_binding=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_semicolon=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
org.eclipse.cdt.core.formatter.insert_space_before_unary_operator=do not insert
org.eclipse.cdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
org.eclipse.cdt.core.formatter.insert_space_between_empty_brackets=do not insert
org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_exception_specification=do not insert
org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
org.eclipse.cdt.core.formatter.join_wrapped_lines=true
org.eclipse.cdt.core.formatter.keep_else_statement_on_same_line=false
org.eclipse.cdt.core.formatter.keep_empty_array_initializer_on_one_line=false
org.eclipse.cdt.core.formatter.keep_imple_if_on_one_line=false
org.eclipse.cdt.core.formatter.keep_then_statement_on_same_line=false
org.eclipse.cdt.core.formatter.lineSplit=80
org.eclipse.cdt.core.formatter.number_of_empty_lines_to_preserve=1
org.eclipse.cdt.core.formatter.put_empty_statement_on_new_line=true
org.eclipse.cdt.core.formatter.tabulation.char=mixed
org.eclipse.cdt.core.formatter.tabulation.size=4
org.eclipse.cdt.core.formatter.use_comment_formatter_tag=true
org.eclipse.cdt.core.formatter.use_tabs_only_for_leading_indentations=false

3
BHBF_Robot_Washing_01/.settings/org.eclipse.cdt.ui.prefs

@ -0,0 +1,3 @@
eclipse.preferences.version=1
formatter_profile=_K&R [built-in-3]
formatter_settings_version=1

2
BHBF_Robot_Washing_01/.settings/org.eclipse.ltk.core.refactoring.prefs

@ -0,0 +1,2 @@
eclipse.preferences.version=1
org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false

6
BHBF_Robot_Washing_01/.settings/stm32cubeide.project.prefs

@ -0,0 +1,6 @@
2F62501ED4689FB349E356AB974DBE57=FCC7EE1B5863FEE2F0EF83B62DD869F6
635E684B79701B039C64EA45C3F84D30=4EFF5836660CD2DC8E70993B25E2A49D
66BE74F758C12D739921AEA421D593D3=1
8DF89ED150041C4CBC7CB9A9CAA90856=FCC7EE1B5863FEE2F0EF83B62DD869F6
DC22A860405A8BF2F2C095E5B6529F12=BFAB4159B488818C3ED3C0C9D5058F5A
eclipse.preferences.version=1

174
BHBF_Robot_Washing_01/BASE/Inc/BSP/BHBF_ROBOT.h

@ -0,0 +1,174 @@
/*
* BHBF_ROBOT.h
*
* Created on: Oct 26, 2023
* Author: shiya
*/
#ifndef INC_BHBF_ROBOT_H_
#define INC_BHBF_ROBOT_H_
#include "../../BASE/Inc/BSP/bsp_TCPClient.h"
#include "../../BASE/Inc/BSP/bsp_include.h"
#include "../../BASE/Inc/MSP/msp_DAM_Relay.h"
#include "../../BASE/Inc/MSP/msp_OBD.h"
#include "bsp_PV.pb.h"
#include "../../BASE/Inc/MSP/msp_OBD.h"
#include "../../BASE/Inc/MSP/msp_TI5MOTOR.h"
#include "../../BASE/Inc/BSP/bsp_UART.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include "../../BASE/Inc/MSP/msp_Angle_Encoder_YL159.h"
#include "../../BASE/Inc/BSP/BHBF_ROBOT.h"
#include "../../BASE/Inc/BSP/bsp_mqtt.h"
#include "../../BASE/Inc/BSP/bsp_Log.h"
#include "../../BASE/Inc/BSP/pb.h"
#include "../../BASE/Inc/MSP/msp_Force_Sensor.h"
#include "../../BASE/Inc/BSP/pb_decode.h"
#include "../../BASE/Inc/BSP/pb_encode.h"
#include "../../BASE/Inc/BSP/bsp_EEPROM.h"
#include "../../BASE/Inc/BSP/bsp_pb_decode_encode.h"
#include "../../BASE/Inc/BSP/bsp_MB_host.h"
#include "../../BASE/Inc/MSP/msp_Steering_Engine.h"
#include "../../BASE/Inc/MSP/msp_Angle_Encoder_YL159.h"
#include "../../BASE/Inc/MSP/SteerEngine/msp_fashion_star_uart_servo.h"
#include "../../BASE/Inc/MSP/msp_DH_Remote_Controller.h"
#include "../../BASE/Inc/MSP/msp_wire_sensor.h"
#include "../../BASE/Inc/MSP/msp_TL720D.h"
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include "../../BASE/Inc/BSP/DLT/DLTuc.h"
#include "../../BASE/Inc/MSP/msp_MK32_1.h"
//#include "MSP/msp_MK32.h"
#include "../../BASE/Inc/MSP/msp_DC_CAN_SWING_Controller.h"
#include "../../BASE/Inc/MSP/msp_WH_LTE_7S0.h"
#include "../../BASE/Inc/BSP/bsp_mqtt.h"
#include "../../BASE/Inc/BSP/bsp_Log.h"
#include "../../BASE/Inc/BSP/pb.h"
#include "../../BASE/Inc/BSP/pb_decode.h"
#include "../../BASE/Inc/BSP/pb_encode.h"
#include "../../BASE/Inc/BSP/bsp_EEPROM.h"
#include "../../BASE/Inc/BSP/bsp_pb_decode_encode.h"
#include "../../BASE/Inc/BSP/bsp_MB_host.h"
#include "../../BASE/Inc/MSP/msp_Steering_Engine.h"
#include "../../BASE/Inc/MSP/msp_Angle_Encoder_YL159.h"
#include "../../BASE/Inc/MSP/SteerEngine/msp_fashion_star_uart_servo.h"
#include "../../BASE/Inc/BSP/bsp_DLT_Log.h"
#include "../../BASE/Inc/BSP/bsp_UDP.h"
#include "../../BASE/Inc/MSP/msp_WH_LTE_7S0.h"
#include "../../BASE/Inc/BSP/bsp_cpu_flash.h"
#include "../../BASE/Inc/BSP/bsp_qspi_w25q128.h"
#include "../../BASE/Inc/BSP/bsp_UpperComputer_Handler.h"
#include "../../BASE/Inc/MSP/msp_TTMotor_ZQ.h"
#include "../../BASE/Inc/BSP/bsp_Error_Detect.h"
#include "bsp_IV.pb.h"
#include "bsp_PV.pb.h"
//#include "msp_pressure_sensor.h"
//#include "robot_state.h"
//FLASH (rx) : ORIGIN = 0x08020000, LENGTH = 896K
//#define VECT_TAB_OFFSET 0x00020000U
//关键全局变量定义:GV、CV、PV
//其他变量定义:X1_X2_X3_X4
//X1:变量类型
//X2:所属层级 GL、MSP、BSP
//X3:所属模块
//X4:名称
//全局变量定义 X1=V
//宏定义 X1=DF
//结构体类型声明 X1=SP
//结构体定义 X1=ST
//指针类型定义 X1=P
//全局函数定义 X1=GF
//内部函数定义 X1为空,不要下划线,X2开头
//函数参数定义、函数局部变量定义 X1为空,下划线开头
#define DLTViewer 1
extern GV_struct_define GV;
//extern PV_struct_define PV;
extern IV_struct_define IV;
extern CV_struct_define CV;
void GF_Robot_Init(void);
void GF_Robot_MainLoop(void);
void GF_WatchDog_Loop(void);
void CV_GV_Init();
extern void SET_BIT_1(int32_t* num,int32_t k);
extern void SET_BIT_0(int32_t* num,int32_t k);
extern int32_t Get_BIT(int32_t* num,int32_t k);
//A &= ~(1 << bit)
extern MotorParameters *Motor[7];
extern int32_t *Motor_ID_Errors[7];
extern int32_t* SystemErrorCode;
extern ErrorData* SystemErrorData;
//Error Bit Define
#define AngleEncoderErrorBitFlag 0
#define DAM_Relay_ErrorBitFlag 1
#define DH_CAN_Remote_Controller_1E4 2
#define DH_CAN_Remote_Controller_2E4 3
#define DH_Remote 4
#define force_sensor 5
#define LeiSai_ISV2CAN 6
#define mk32_sbus 7
#define steering_engine 8
#define Weld_seam_Tracking 9
#define Ti5_1 11
#define Ti5_2 12
#define Ti5_3 13
#define Ti5_4 14
#define Ti5_5 15
#define Ti5_6 16
#define TL720D 17
#define ZQ_CAN_ID1_LeftMotor 18
#define ZQ_CAN_ID2_RightMotor 19
#define ZQ_CAN_ID3_SwingMotor 20
#define wire_sensor 21
#define DHRougheningController 22
#define DAM040D_Relay_ErrorBitFlag 23
#define DMAKE_1 24
#define DMAKE_2 25
#define DMAKE_3 26
#define pressure_sensor 27
extern TT_MotorParameters* TT_Motor[4];
#endif /* INC_BHBF_ROBOT_H_ */

248
BHBF_Robot_Washing_01/BASE/Inc/BSP/DLT/DLTuc.h

@ -0,0 +1,248 @@
/**
* @file DLTuc.h
* @author teodor
* @date 1 Jul 2022
* @brief This file is a part of DLTuc library
*
* In this header, you can find types, Api functions, which are provided by DLTuc library
* Usefull macros, for convience usage of DLTuc library in logging purposes
*
* Requirments:
* Around ~2kB of RAM
* Check Configuration file and defines:
* DLT_TRANSMIT_RING_BUFFER_SIZE, DLT_TRANSMIT_MAX_SINGLE_MESSAGE_SIZE
*
*/
#ifndef INC_DLT_LOGS_MCU_H_
#define INC_DLT_LOGS_MCU_H_
/*
* *******************************************************************************************
* Includes
* *******************************************************************************************
* */
#include "stdint.h"
#include <stdarg.h>
#include <string.h>
#include "../../BASE/Inc/BSP/DLT/DLTucConfig.h"
/*
* *******************************************************************************************
* Exported defines
* *******************************************************************************************
* */
/*@brief
*
* - convert the To strings to uint32_t
*/
#define DLT_LOG_ECUID_VALUE ((uint32_t)((((uint32_t) ((uint8_t)DLT_LOG_ECUID[0])) << 24UL) | \
(((uint32_t) ((uint8_t)DLT_LOG_ECUID[1])) << 16UL) | \
(((uint32_t) ((uint8_t)DLT_LOG_ECUID[2])) << 8UL) | \
((uint32_t)((uint8_t)DLT_LOG_ECUID[3]))))
#define DLT_LOG_APPID_VALUE ((uint32_t)((((uint32_t) ((uint8_t)DLT_LOG_APPID[0])) << 24UL) | \
(((uint32_t) ((uint8_t)DLT_LOG_APPID[1])) << 16UL) | \
(((uint32_t) ((uint8_t)DLT_LOG_APPID[2])) << 8UL) | \
((uint32_t)((uint8_t)DLT_LOG_APPID[3]))))
#define DLT_LOG_CONTEX_VALUE ((uint32_t)((((uint32_t) ((uint8_t)DLT_LOG_CONTEX[0])) << 24UL) | \
(((uint32_t) ((uint8_t)DLT_LOG_CONTEX[1])) << 16UL) | \
(((uint32_t) ((uint8_t)DLT_LOG_CONTEX[2])) << 8UL) | \
((uint32_t)((uint8_t)DLT_LOG_CONTEX[3]))))
/*
* Definitions of DLT services.
*/
#define DLT_SERVICE_ID_SET_LOG_LEVEL 0x01 /**< Service ID: Set log level */
#define DLT_SERVICE_ID_SETRACE_STATUS 0x02 /**< Service ID: Set trace status */
#define DLT_SERVICE_ID_GET_LOG_INFO 0x03 /**< Service ID: Get log info */
#define DLT_SERVICE_ID_GET_DEFAULT_LOG_LEVEL 0x04 /**< Service ID: Get dafault log level */
#define DLT_SERVICE_ID_STORE_CONFIG 0x05 /**< Service ID: Store configuration */
#define DLT_SERVICE_ID_RESETO_FACTORY_DEFAULT 0x06 /**< Service ID: Reset to factory defaults */
#define DLT_SERVICE_ID_SET_COM_INTERFACE_STATUS 0x07 /**< Service ID: Set communication interface status */
#define DLT_SERVICE_ID_SET_COM_INTERFACE_MAX_BANDWIDTH 0x08 /**< Service ID: Set communication interface maximum bandwidth */
#define DLT_SERVICE_ID_SET_VERBOSE_MODE 0x09 /**< Service ID: Set verbose mode */
#define DLT_SERVICE_ID_SET_MESSAGE_FILTERING 0x0A /**< Service ID: Set message filtering */
#define DLT_SERVICE_ID_SETIMING_PACKETS 0x0B /**< Service ID: Set timing packets */
#define DLT_SERVICE_ID_GET_LOCALIME 0x0C /**< Service ID: Get local time */
#define DLT_SERVICE_ID_USE_ECU_ID 0x0D /**< Service ID: Use ECU id */
#define DLT_SERVICE_ID_USE_SESSION_ID 0x0E /**< Service ID: Use session id */
#define DLT_SERVICE_ID_USEIMESTAMP 0x0F /**< Service ID: Use timestamp */
#define DLT_SERVICE_ID_USE_EXTENDED_HEADER 0x10 /**< Service ID: Use extended header */
#define DLT_SERVICE_ID_SET_DEFAULT_LOG_LEVEL 0x11 /**< Service ID: Set default log level */
#define DLT_SERVICE_ID_SET_DEFAULTRACE_STATUS 0x12 /**< Service ID: Set default trace status */
#define DLT_SERVICE_ID_GET_SOFTWARE_VERSION 0x13 /**< Service ID: Get software version */
#define DLT_SERVICE_ID_MESSAGE_BUFFER_OVERFLOW 0x14 /**< Service ID: Message buffer overflow */
#define DLT_SERVICE_ID_CALLSW_CINJECTION 0xFFF /**< Service ID: Message Injection (minimal ID) */
/*
* *******************************************************************************************
* Exported types
* *******************************************************************************************
* */
/**!
* \brief DltLogLevel_t
* \details Typdef used to identify the DLT log level
* */
typedef enum
{
DL_FATAL =1,
DL_ERROR =2,
DL_WARN =3,
DL_INFO =4,
DL_DEBUG =5,
DL_VERBOSE =6,
}DltLogLevel_t;
/*
* *******************************************************************************************
* Exported function - API
* *******************************************************************************************
* */
/*!
************************************************************************************************
* \brief DLTuc_RawDataReceiveDone
* \details OPTIONAL - Use only if you need handle data receive, like Injection messages
* Call the function to inform DLTuc that Raw data packet has been received
************************************************************************************************/
void DLTuc_RawDataReceiveDone(uint16_t Size);
/*!
************************************************************************************************
* \brief DLTuc_RegisterReceiveSerialDataFunction
* \details OPTIONAL - Use only if you need handle data receive, like Injection messages.
* - Register callback function which will be used by DLTuc to start data receive process.
* The Callback function is basicly called only after registration and if data packet has been received,
* to start again receive data packet
* \param in LLSerialRecDataFunctionC ...
************************************************************************************************/
void DLTuc_RegisterReceiveSerialDataFunction(void LLSerialRecDataFunctionC(uint8_t *DltLogData, uint16_t Size));
/*!
************************************************************************************************
* \brief DLTuc_RegisterInjectionDataReceivedCb
* \details OPTIONAL - Use only if you need handle data receive, like Injection messages
* Register injection data received call back
* Use the function if you want register call back function to handle the Injection messages in your application
* \param in InjectionDataRcvd ...
************************************************************************************************/
void DLTuc_RegisterInjectionDataReceivedCb
(void InjectionDataRcvd(uint32_t AppId, uint32_t ConId,uint32_t ServId,uint8_t *Data, uint16_t Size));
/*!
************************************************************************************************
* \brief DLTuc_RegisterTransmitSerialDataFunction
* \details This simple stack/library must be initialized by "DLTuc_RegisterTransmitSerialDataFunction"
* As a parameter must be passed function which will transmit serial data
* \param in LLSerialTrDataFunctionC transmit function pointer
************************************************************************************************/
void DLTuc_RegisterTransmitSerialDataFunction(void LLSerialTrDataFunctionC(uint8_t *DltLogData, uint8_t Size));
/*!
************************************************************************************************
* \brief DLTuc_RegisterGetTimeStampMsCallback
* \details function to update time stamp in library
* \param in GetSysTime - pointer to function which allow to read system time in msec
*************************************************************************************************/
void DLTuc_RegisterGetTimeStampMsCallback(uint32_t GetSysTime(void));
/*!
************************************************************************************************
* \brief DLTuc_MessageTransmitDone
* \details IMPORTANT!!!!!
* Call this function when the transsmision is end
* For example in "DMA transmission end callback" to inform the lib that the message is transmitted
************************************************************************************************
* */
void DLTuc_MessageTransmitDone(void);
/*!
************************************************************************************************
* \brief DLTuc_LogOutVarArgs
* \details default function to create DLT Log
* \param DltLogLevel_t Level - of Dlt log
* \param in AppId - size of the "DltLogData" (return value)
* \param in ContextId - pointer to the message stored in RingBuffer (return value)
* \param in Payload String to send as dlt log
* \param in ... parameters same as in printf function
*************************************************************************************************/
void DLTuc_LogOutVarArgs(DltLogLevel_t Level, uint32_t AppId, uint32_t ContextId, uint8_t *Payload, ...);
/*
* *******************************************************************************************
* Additional macros to facilitate the use of the library
* *******************************************************************************************
* */
#ifdef LOGS_ENABLE
/**!
* \brief LOGL(level, str, ...)
* \details Transmit DltLog using function DLTuc_LogOutVarArgs but user don't have to add
* log_level, DLT_LOG_APPID_VALUE and DLT_LOG_CONTEX_VALUE
*
* */
#define LOG(str, ...)\
if(DL_INFO <= DLT_LOG_ENABLE_LEVEL){\
DLTuc_LogOutVarArgs(DL_INFO, DLT_LOG_APPID_VALUE, DLT_LOG_CONTEX_VALUE,(uint8_t *) str, ##__VA_ARGS__);\
}
/**!
* \brief LOGL(level, str, ...)
* \details Transmit DltLog using function DLTuc_LogOutVarArgs but user don't have to add DLT_LOG_APPID_VALUE and DLT_LOG_CONTEX_VALUE
*
* */
#define LOGL(log_level, str, ...)\
if(log_level <= DLT_LOG_ENABLE_LEVEL){\
DLTuc_LogOutVarArgs(log_level, DLT_LOG_APPID_VALUE, DLT_LOG_CONTEX_VALUE,(uint8_t *) str, ##__VA_ARGS__);\
}
/**!
* @brief LOGF(log_level, str, ...)
* \details Transmit DltLog using function DLTuc_LogOutVarArgs but user don't have to add DLT_LOG_APPID_VALUE and DLT_LOG_CONTEX_VALUE
* Additionally add the name of the calling function
*
*
* */
#define LOGF(log_level, str, ...)\
if(log_level <= DLT_LOG_ENABLE_LEVEL){\
DLTuc_LogOutVarArgs(log_level, DLT_LOG_APPID_VALUE, DLT_LOG_CONTEX_VALUE,(uint8_t *) "FUN:%s LOG: "str, __FUNCTION__,##__VA_ARGS__);\
}
/**!
* \brief LOGFF(log_level, str, ...)
* \details Transmit DltLog using function DLTuc_LogOutVarArgs but user don't have to add DLT_LOG_APPID_VALUE and DLT_LOG_CONTEX_VALUE
* Additionally add the name of the calling function and file name
*
*
* */
#define LOGFF(log_level, str, ...)\
if(log_level <= DLT_LOG_ENABLE_LEVEL){\
DLTuc_LogOutVarArgs(log_level, DLT_LOG_APPID_VALUE, DLT_LOG_CONTEX_VALUE,(uint8_t *)"FILE:%s LINE: %d FUN:%s LOG: "str,__FILE__,__LINE__,__FUNCTION__,##__VA_ARGS__);\
}
#else
LOG(str, ...)
LOGL(log_level, str, ...)
LOGF(log_level, str, ...)
LOGFF(log_level, str, ...)
#endif
#endif /* INC_DLT_LOGS_MCU_H_ */

74
BHBF_Robot_Washing_01/BASE/Inc/BSP/DLT/DLTucConfig.h

@ -0,0 +1,74 @@
/**
* @file DLTuc.c
* @author teodor
* @date 1 Jul 2022
* @brief This file is a part of DLTuc library
*
* In this header file is placed DLTuc configuration template
*
*/
#if 1 /*Set it to "1" to enable content*/
#ifndef __DLT_CONFIG__
/*Comment this line to turn off all logs..*/
#define LOGS_ENABLE
/*Pass here the entry critical entry function for your RTOS or
Interrupt block functions if you want use the library from diffrent context*/
#define DLTuc_OS_CRITICAL_START()
#define DLTuc_OS_CRITICAL_END()
/*Default minimum log level to transmit the log*/
//#ifndef DLT_LOG_ENABLE_LEVEL
////#define DLT_LOG_ENABLE_LEVEL DL_VERBOSE
// #define DLT_LOG_ENABLE_LEVEL 0
//#endif
extern char DLT_LOG_ENABLE_LEVEL;
/**!
* \brief DLT_LOG_CONTEX
* \details to define the minimum level log which will printed using the debug macros
*
*/
#ifndef DLT_LOG_CONTEX
#define DLT_LOG_CONTEX "DFLT"
#endif
/**!
* \brief DLT_LOG_APPID
* \details to define the minimum level log which will printed using the debug macros
*
*/
#ifndef DLT_LOG_APPID
#define DLT_LOG_APPID "0000"
#endif
/**!
* \brief DLT_LOG_ECUID
* \details you can define here you ECUID ..
*
*/
#define DLT_LOG_ECUID "uCID" /*Electronic Controller Unit ID*/
#define DLT_ECU_SW_VER 0001
/*
*@brief DLT_TRANSMIT_MAX_SINGLE_MESSAGE_SIZE & DLT_TRANSMIT_RING_BUFFER_SIZE
* these values define the size of the circular buffer and the maximum size of a single DLT message
* Size of out Circular DLT messages buffer is equal: DLT_TRANSMIT_MAX_SINGLE_MESSAGE_SIZE*DLT_TRANSMIT_RING_BUFFER_SIZE
*/
#define DLT_TRANSMIT_MAX_SINGLE_MESSAGE_SIZE 255
#define DLT_TRANSMIT_RING_BUFFER_SIZE 15
#define DLT_REC_SINGLE_MESSAGE_MAX_SIZE 255
#define DLT_RECEIVE_RING_BUFFER_SIZE 2
#endif //__DLT_CONFIG__
#endif //Content enable

15
BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_DLT_Log.h

@ -0,0 +1,15 @@
/*
* bsp_DLT_Log.h
*
* Created on: Aug 8, 2024
* Author: akeguo
*/
#ifndef INC_BSP_BSP_DLT_LOG_H_
#define INC_BSP_BSP_DLT_LOG_H_
#include "../../BASE/Inc/BSP/DLT/DLTuc.h"
#include "../../BASE/Inc/BSP/BHBF_ROBOT.h"
void dLT_Log_intialize(struct UARTHandler *Handler);
#endif /* INC_BSP_BSP_DLT_LOG_H_ */

73
BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_EEPROM.h

@ -0,0 +1,73 @@
/*
* bsp_EEPROM.h
*
* Created on: Oct 26, 2023
* Author: shiya
*/
#ifndef INC_BSP_EEPROM_H_
#define INC_BSP_EEPROM_H_
#include "../../BASE/Inc/BSP/bsp_include.h"
#include "bsp_CV.pb.h"
#include "bsp_IAP.pb.h"
#define EEPROM_WP_Pin GPIO_PIN_11
#define EEPROM_WP_GPIO_Port GPIOE
#define EEPROM_SCL_Pin GPIO_PIN_12
#define EEPROM_SCL_GPIO_Port GPIOE
#define EEPROM_SDA_Pin GPIO_PIN_13
#define EEPROM_SDA_GPIO_Port GPIOE
#define AT24C512
#ifdef AT24C512
#define EE_MODEL_NAME "AT24C512"
#define EE_DEV_ADDR 0xA0 /* 设备地址 */
#define EE_PAGE_SIZE 128 /* 页面大小(字节) */
#define EE_SIZE (512*128) /* 总容量(字节) */ // not used in this progrm
#define EE_ADDR_BYTES 2 /* 地址字节个数 */
#endif
#define I2C_WR 0 /* 写控制bit */
#define I2C_RD 1 /* 读控制bit */
//////////////////////////////////////////////////////////////////
//there are 12M eeprom in total, and the code download Address is App_Download_EEPROM_Addr
//512 Pages x 128 Bytes = 65536 Bytes = 512 kbits
#define GF_BSP_EEPROM_CV_struct_define_Start_Address 0
#define IAP_struct_define_Start_Address 512
extern uint16_t App_Download_EEPROM_Addr;
//返回值::1-正常;0-错误
uint8_t GF_BSP_EEPROM_Init(void);
uint8_t GF_BSP_EEPROM_CheckOK(void);
uint8_t GF_BSP_EEPROM_ReadBytes(uint8_t *_pReadBuf, uint16_t _usAddress,
uint16_t _usSize);
uint8_t GF_BSP_EEPROM_WriteBytes(uint8_t *_pWriteBuf, uint16_t _usAddress,
uint16_t _usSize);
CV_struct_define GF_BSP_EEPROM_Get_CV(void);
uint8_t GF_BSP_EEPROM_Set_CV(CV_struct_define cv);
IAP_struct_define GF_BSP_EEPROM_Get_IAP(void);
uint8_t GF_BSP_EEPROM_Set_IAP(IAP_struct_define iap);
PV_struct_define GF_BSP_EEPROM_Get_PV(void);
uint8_t GF_BSP_EEPROM_Set_PV(PV_struct_define pv);
#endif /* INC_BSP_EEPROM_H_ */

25
BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_Error_Detect.h

@ -0,0 +1,25 @@
/*
* bsp_Error_Detect.h
*
* Created on: Oct 23, 2024
* Author: akeguo
*/
#ifndef INC_BSP_BSP_ERROR_DETECT_H_
#define INC_BSP_BSP_ERROR_DETECT_H_
/* Includes ------------------------------------------------------------------*/
#include "../../BASE/Inc/BSP/BHBF_ROBOT.h"
#include "../../BASE/Inc/BSP/bsp_com_helper.h"
#include "../../BASE/Inc/BSP/bsp_include.h"
/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/
/* Exported macro ------------------------------------------------------------*/
extern HardWareController *HardWareErrorController;
/* Exported functions ------------------------------------------------------- */
extern void Error_Detect_Intialzie(uint16_t DispacherPeriod);
#endif /* INC_BSP_BSP_ERROR_DETECT_H_ */

84
BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_FDCAN.h

@ -0,0 +1,84 @@
/*
* bsp_FDCAN.h
*
* Created on: Oct 26, 2023
* Author: shiya
*/
#ifndef INC_BSP_FDCAN_H_
#define INC_BSP_FDCAN_H_
#include "bsp_Error.pb.h"
#include "../../BASE/Inc/BSP/bsp_com_helper.h"
uint8_t GF_BSP_FDCAN_Init(void);
void GF_BSP_FDCAN_Senddata(uint8_t FDCAN_CH, uint32_t FrameID,
uint8_t DataLength, uint8_t *Txdata);
extern uint8_t CAN_Buf[8];
extern uint8_t CAN_Buf[8];
extern uint8_t CAN_Buf_2[8];
typedef struct _CANSendHandler
{
uint32_t CAN_ID;
uint32_t SendListTimePeriod;
uint8_t SendLength;
uint8_t Tx_Buf[8];
void (*CAN_Decode)(uint32_t, uint8_t*, uint32_t);
struct _CANSendHandler *pNext;
} CANSendHandler;
typedef struct _FDCANHandler
{
FDCAN_HandleTypeDef *canfd; //UART to use
struct _DispacherController *dispacherController;
uint8_t timeSpan;
uint8_t SendListExists;
uint32_t SendList_Period; //时间ms
uint32_t SendList_time_Count;
CANSendHandler *pCurrentCANSendHadler; //
void (*AddCANSendList)(struct _FDCANHandler*, uint32_t, uint8_t, uint8_t*,uint32_t,//这里是修改等待时间
void (*CAN_Decode)(uint32_t, uint8_t*, uint32_t));
void (*CAN_Decode)(uint32_t, uint8_t*, uint32_t); // decode can frame, received from other devices
void (*CAN_Send)(struct _FDCANHandler*, uint32_t, uint8_t, uint8_t*);
void (*CAN_Send_Data)(struct _FDCANHandler*);
//(uint8_t FDCAN_CH, uint32_t FrameID,uint8_t DataLength, uint8_t *Txdata)
uint8_t Rx_Buf[128]; // 接收缓存,最大256字节
uint8_t Tx_Buf[128]; //发送缓存 157,864
uint32_t ReceivedLength;
uint32_t SendLength;
uint32_t ReceivedFrameID;
uint32_t SendFrameID;
} FDCANHandler;
extern FDCANHandler FD_CAN_1_Handler;
extern FDCANHandler FD_CAN_2_Handler;
void GF_BSP_CAN_Timer();
void CAN_Send_t(struct _FDCANHandler *fd, uint32_t FrameID, uint8_t DataLength,
uint8_t *Txdata);
void CAN_Send_Data_t(struct _FDCANHandler *fd);
void GF_CAN_Send_List_Send(FDCANHandler *handler);
void CANHandlerAddTxList(FDCANHandler *handler, uint32_t CAN_ID,
uint8_t SendLength, uint8_t *Tx_Buf,uint32_t sendListTimePeriod,
void (*CAN_Decode)(uint32_t, uint8_t*, uint32_t));
void GF_BSP_CANHandler_Init(int can1_sendListPeriod, int can1_DispacherPeriod,
int can2_sendListPeriod, int can2_DispacherPeriod);
void GF_BSP_CANHandler_Init_CAN(FDCANHandler *handler,
FDCAN_HandleTypeDef *canfd, int sendListPeriod, int DispacherPeriod);
void DecodeMotorCAN(uint32_t canID, uint8_t *buffer, uint32_t length);
extern FDCANHandler FD_CAN_1_Handler;
extern FDCANHandler FD_CAN_2_Handler;
extern int32_t CAN_ID;
extern int32_t CAN_ID_2;
#endif /* INC_BSP_FDCAN_H_ */

18
BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_GPIO.h

@ -0,0 +1,18 @@
/*
* bsp_GPIO.h
*
* Created on: Oct 26, 2023
* Author: shiya
*/
#ifndef INC_BSP_GPIO_H_
#define INC_BSP_GPIO_H_
#include "../../BASE/Inc/BSP/bsp_include.h"
uint8_t GF_BSP_GPIO_Init(void);
void GF_BSP_GPIO_SetIO(uint8_t IO_Index,uint8_t Level);
uint8_t GF_BSP_GPIO_ReadIO(uint8_t IO_Index);
uint8_t GF_BSP_GPIO_ToggleIO(uint8_t IO_Index);
#endif /* INC_BSP_GPIO_H_ */

22
BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_IMU.h

@ -0,0 +1,22 @@
/*
* bsp_IMU.h
*
* Created on: Oct 26, 2023
* Author: shiya
*/
#ifndef INC_BSP_IMU_H_
#define INC_BSP_IMU_H_
#include "../../BASE/Inc/BSP/bsp_include.h"
#include "msp_MPU6050.pb.h"
//uint8_t GF_BSP_IMU_Init(void);
extern uint8_t GF_BSP_MPU_Init(void);
extern void GF_BSP_GetAngle();
extern uint8_t GF_MSP_IMU_6050_Init(SP_BSP_MPU6050 *_IMU6050_Angle);
extern double MPU_Get_Temperature(void);
#endif /* INC_BSP_IMU_H_ */

48
BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_Log.h

@ -0,0 +1,48 @@
/**
* Copyright (c) 2020 rxi
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the MIT license. See `log.c` for details.
*/
#ifndef BSP_LOG_H
#define BSP_LOG_H
#ifndef __LOG_H_
#define __LOG_H_
#include <stdio.h>
#include <stdarg.h>
#include <stdbool.h>
#include <time.h>
#include "../../BASE/Inc/BSP/bsp_UART.h"
#include <stdarg.h>
//#define OPEN_LOG 1
#define OPEN_LOG 5
typedef enum
{
LOG_TRACE = 0, LOG_DEBUG = 1, LOG_INFO, LOG_WARN, LOG_ERROR, LOG_FATAL
} E_LOG_LEVEL;
extern char log_buf[500];
extern char LOG_LEVEL_Char;
void log_intialize(struct UARTHandler *Handler);
void log_log(const int level, const char *fun, const int line, const char *fmt,
...);
#define log(level, fmt, ...) log_log(level, __FUNCTION__, __LINE__, fmt, ##__VA_ARGS__)
#define log_trace(...) log_log(LOG_TRACE, __FILE__, __LINE__, __VA_ARGS__)
#define log_debug(...) log_log(LOG_DEBUG, __FILE__, __LINE__, __VA_ARGS__)
#define log_info(...) log_log(LOG_INFO, __FILE__, __LINE__, __VA_ARGS__)
#define log_warn(...) log_log(LOG_WARN, __FILE__, __LINE__, __VA_ARGS__)
#define log_error(...) log_log(LOG_ERROR, __FILE__, __LINE__, __VA_ARGS__)
#define log_fatal(...) log_log(LOG_FATAL, __FILE__, __LINE__, __VA_ARGS__)
#endif
#endif

50
BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_MB_host.h

@ -0,0 +1,50 @@
#ifndef __BSP_MB_HOST_H__
#define __BSP_MB_HOST_H__
/* 包含头文件 ----------------------------------------------------------------*/
/* 类型定义 ------------------------------------------------------------------*/
/* 宏定义 --------------------------------------------------------------------*/
#define MB_SLAVEADDR 0x0001 //从机地址
#define MB_REG_ADDR 0 //寄存器地址(离散、线圈)
#define HoldingReg 0 //保持寄存器
#define InputRegReg 0x0020 //输入寄存器
#include "../../BASE/Inc/BSP/bsp_include.h"
#include "../../BASE/Inc/BSP/bsp_UART.h"
/* 扩展变量 ------------------------------------------------------------------*/
typedef struct
{
uint16_t DATA_01H;
uint16_t DATA_02H;
uint16_t DATA_03H;
uint16_t DATA_04H;
uint16_t DATA_05H;
uint16_t DATA_06H;
uint8_t DATA_10H[64];
}MB_REG_DATA;
//;
extern uint8_t MB_rx_flag;
extern uint16_t Read_Reg_Num;
/* 函数声明 ------------------------------------------------------------------*/
uint16_t MB_CRC16(uint8_t *pushMsg, uint16_t usDataLen);
void MB_ReadCoil(uint8_t* Tx_Buf,uint8_t* TxCount_t,uint8_t _addr, uint16_t _reg, uint16_t _num);
void MB_WriteCoil(uint8_t* Tx_Buf,uint8_t* TxCount_t,uint8_t _addr, uint16_t _reg, uint16_t _sta);
void MB_ReadInput(uint8_t* Tx_Buf,uint8_t* TxCount_t,uint8_t _addr, uint16_t _reg, uint16_t _num);
void MB_ReadHoldingReg(uint8_t* Tx_Buf,uint8_t* TxCount_t,uint8_t _addr, uint16_t _reg, uint16_t _num);
void MB_ReadInputReg(uint8_t* Tx_Buf,uint8_t* TxCount_t,uint8_t _addr, uint16_t _reg, uint16_t _num);
void MB_WriteHoldingReg(uint8_t* Tx_Buf,uint8_t* TxCount_t,uint8_t _addr, uint16_t _reg, uint16_t _data);
//void MB_WriteNumHoldingReg(uint8_t* Tx_Buf,uint8_t* TxCount_t,uint8_t _addr, uint16_t _reg, uint16_t _num,uint8_t *_databuf)
void MB_WriteNumHoldingReg(uint8_t* Tx_Buf,uint8_t* TxCount_t,uint8_t _addr, uint16_t _reg, uint16_t _num,uint8_t *_databuf);
void MB_WriteNumCoil(uint8_t *Tx_Buf, uint8_t *TxCount_t, uint8_t _addr,
uint16_t _reg, uint16_t _num, uint8_t *_databuf);
#endif /* __BSP_MB_HOST_H__ */
/******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE****/

11
BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_Motor_Helper.h

@ -0,0 +1,11 @@
/*
* bsp_Motor_Helper.h
*
* Created on: Jul 30, 2024
* Author: akeguo
*/
#ifndef INC_BSP_BSP_MOTOR_HELPER_H_
#define INC_BSP_BSP_MOTOR_HELPER_H_
#endif /* INC_BSP_BSP_MOTOR_HELPER_H_ */

52
BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_TCPClient.h

@ -0,0 +1,52 @@
/*
* bsp_TCPClient.h
*
* Created on: Oct 22, 2024
* Author: akeguo
*/
#ifndef INC_BSP_BSP_TCPCLIENT_H_
#define INC_BSP_BSP_TCPCLIENT_H_
/* Includes ------------------------------------------------------------------*/
#include "../../BASE/Inc/BSP/bsp_include.h"
/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/
#define USE_LCD /* enable LCD */
#define DEST_IP_ADDR0 ((uint8_t)192U)
#define DEST_IP_ADDR1 ((uint8_t)168U)
#define DEST_IP_ADDR2 ((uint8_t)1U)
#define DEST_IP_ADDR3 ((uint8_t)10U)
#define DEST_PORT ((uint16_t)502U)
/*NETMASK*/
#define NETMASK_ADDR0 ((uint8_t) 255U)
#define NETMASK_ADDR1 ((uint8_t) 255U)
#define NETMASK_ADDR2 ((uint8_t) 255U)
#define NETMASK_ADDR3 ((uint8_t) 0U)
/*Gateway Address*/
#define GW_ADDR0 ((uint8_t) 192U)
#define GW_ADDR1 ((uint8_t) 168U)
#define GW_ADDR2 ((uint8_t) 1U)
#define GW_ADDR3 ((uint8_t) 1U)
/* Exported macro ------------------------------------------------------------*/
/* Exported functions ------------------------------------------------------- */
#include "bsp_LazorData.pb.h"
extern LazorData *ReadLazorData;
/* Includes ------------------------------------------------------------------*/
/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/
/* Exported macro ------------------------------------------------------------*/
/* Exported functions ------------------------------------------------------- */
//void tcp_client_connect(void);
void TCP_Client_Init(void);
#endif /* INC_BSP_BSP_TCPCLIENT_H_ */

17
BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_TIMER.h

@ -0,0 +1,17 @@
/*
* bsp_TIMER.h
*
* Created on: Oct 26, 2023
* Author: shiya
*/
#ifndef INC_BSP_TIMER_H_
#define INC_BSP_TIMER_H_
#include "../../BASE/Inc/BSP/bsp_include.h"
uint8_t GF_BSP_TIMER_Init(void);
void GF_BSP_TIMER_DelayUS(uint32_t n);
#endif /* INC_BSP_TIMER_H_ */

107
BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_UART.h

@ -0,0 +1,107 @@
#ifndef INC_BSP_UART_H_
#define INC_BSP_UART_H_
#include "../../BASE/Inc/BSP/bsp_include.h"
#include "main.h"
#include "bsp_Error.pb.h"
#define UART_Transmit_MAX_NUM 1024
#define UART_Receive_MAX_NUM 100
extern struct UARTHandler RS_485_1_UART_Handler;
extern struct UARTHandler RS_485_2_UART_Handler;
extern struct UARTHandler RS_485_3_UART_Handler;
extern struct UARTHandler RS_485_4_UART_Handler;
extern struct UARTHandler InterCall_DEBUG_UART_Handler;
extern struct UARTHandler E28_SBUS_UART_Handler;
extern struct UARTHandler LTE_7S0_Serial_UART_Handler;
#if defined (hlpuart1Exit)
extern struct UARTHandler LPUART1_UART_Handler;
#endif
uint8_t GF_BSP_UART_Init(void);
void GF_BSP_UARTHandlers_Intialize(
int32_t RS485_1_WaitTime,
int32_t RS485_2_WaitTime,
int32_t RS485_3_WaitTime,
int32_t RS485_4_WaitTime,
int32_t LTE_7S0_Serial_WaitTime,
int32_t InterCall_DEBUG_WaitTime,
int32_t E28_SBUS_WaitTime,
int32_t LPUART1_UART_WaitTime,
int32_t RS485_1_Dispacher_Time,
int32_t RS485_2_Dispacher_Time,
int32_t RS485_3_Dispacher_Time,
int32_t RS485_4_Dispacher_Time,
int32_t LTE_7S0_Serial_Dispacher_Time,
int32_t InterCall_DEBUG_Dispacher_Time,
int32_t E28_SBUS_Dispacher_Time,
int32_t LPUART1_UART_Dispacher_Time
);
//串行发送完成后才能发送第二帧数据,没有做缓冲,如未发送完成,第二次发送无效,丢弃发送数据
void GF_BSP_UART_Transmit(const uint8_t RS485_Index,const uint8_t *pData, uint16_t Size);
typedef struct UARTSendHandler
{
uint16_t SendLength;
uint16_t SendListTimePeriod;
uint8_t Tx_Buf[502];
void (*UART_Decode)(uint8_t*, uint16_t); // 发送缓存
struct UARTSendHandler* pNext;
}UARTSendHandler;
struct UARTHandler
{
char startCountFlag; //indicate that to start counting
char send_finished;//indicate decode finished or not
char decode_finished;//indicate decode finished or not 解码完成
uint8_t tmp_Rx_Buf[2]; // temporary data to store received data
uint32_t Wait_time; // the time to wait
uint32_t Wait_Time_Count;
uint32_t SendList_time_Count;
uint32_t SendList_Period;
uint8_t SendListExists;
UART_HandleTypeDef* uart; //UART to use
unsigned char timeSpan; // timer elapsed time
uint8_t Rx_Buf[4096]; // 接收缓存,最大256字节
uint8_t Tx_Buf[2048]; //发送缓存 157,864
uint16_t TxCount;
uint16_t RxCount;
//(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size)
void (*UART_Tx)(struct UARTHandler*); //void UART_Tx(uint8_t *Tx_Buf,uint16_t TxCount);
void (*UART_Rx)(struct UARTHandler*);
void (*UART_Decode)(uint8_t*, uint16_t); //Decode Rx_Buf
UARTSendHandler *pCurrentUARTSendHadler; //
void (*AddSendList)(struct UARTHandler*, uint8_t*, uint16_t,uint32_t,//这里是修改等待时间
void (*UART_Decode)(uint8_t*, uint16_t));
struct _DispacherController *dispacherController;
};
void UARTHandlerTx(struct UARTHandler *uartHandler);
void UARTHandlerRX(struct UARTHandler *uartHandler);
//void IntializeUARTHandler(struct UARTHandler *uartHandler, UART_HandleTypeDef uart,int32_t WaitTime,unsigned char timeSpan);
void Counting(struct UARTHandler *uartHandler);
void IntializeUARTHandler(struct UARTHandler *uartHandler,
UART_HandleTypeDef *uart, int32_t WaitTime, unsigned char timeSpan,int32_t Dispacher_Time);
void GF_BSP_UART_Timer();
#endif /* INC_BSP_UART_H_ */

17
BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_UDP.h

@ -0,0 +1,17 @@
/*
* bsp_UDP.h
*
* Created on: Aug 13, 2024
* Author: akeguo
*/
#ifndef INC_BSP_BSP_UDP_H_
#define INC_BSP_BSP_UDP_H_
void udp_printf_CmdBack(char *pData);
void udp_client_init(void);
void GF_UDP_Send(uint8_t *pData,uint16_t Size,uint16_t UDP_port);
void GF_UDP_long_Send_Server(void);
void GF_UpdataPos_Send(uint8_t *pData,uint32_t Size);
#endif /* INC_BSP_BSP_UDP_H_ */

27
BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_UpperComputer_Handler.h

@ -0,0 +1,27 @@
/*
* bsp_desulfurizer_handler.h
*
* Created on: Jul 29, 2024
* Author: akeguo
*/
#ifndef INC_BSP_BSP_UPPERCOMPUTER_HANDLER_H_
#define INC_BSP_BSP_UPPERCOMPUTER_HANDLER_H_
#include <stdio.h>
#include <string.h>
#include "../../BASE/Inc/BSP/bsp_MB_host.h"
#include "stdio.h"
#include "../../BASE/Inc/BSP/bsp_UART.h"
#include "usart.h"
#include "gpio.h"
extern struct UARTHandler *desulfurizer_message_UART_Handler;
void upper_Computer_UART_Handler_intialize(struct UARTHandler *Handler);
void decode_command_from_computer(uint8_t *buffer, uint16_t length);
void send_data_to_upper_computer(double Angle, double WireLength,
double Thickness, char IsFittingPoint,char isMqtt,struct UARTHandler *send_UART_Handler);
#endif /* INC_BSP_BSP_UPPERCOMPUTER_HANDLER_H_ */

16
BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_adc.h

@ -0,0 +1,16 @@
/*
* bsp_adc.h
*
* Created on: Feb 21, 2025
* Author: akeguo
*/
#ifndef INC_BSP_BSP_ADC_H_
#define INC_BSP_BSP_ADC_H_
#include "main.h"
#include "../../BASE/Inc/BSP/DLT/DLTuc.h"
int32_t read_temperature();
#endif /* INC_BSP_BSP_ADC_H_ */

13
BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_client_setting.h

@ -0,0 +1,13 @@
/*
* bsp_pv_setting.h
*
* Created on: Jan 8, 2025
* Author: akeguo
*/
#ifndef INC_BSP_BSP_CLIENT_SETTING_H_
#define INC_BSP_BSP_CLIENT_SETTING_H_
#include "../../BASE/Inc/BSP/BHBF_ROBOT.h"
void client_setting_intialize(struct UARTHandler *Handler);
#endif /* INC_BSP_BSP_CLIENT_SETTING_H_ */

82
BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_com_helper.h

@ -0,0 +1,82 @@
/*
* bsp_com_helper.h
*
* Created on: Oct 9, 2024
* Author: akeguo
*/
#ifndef INC_BSP_BSP_COM_HELPER_H_
#define INC_BSP_BSP_COM_HELPER_H_
#include "../../BASE/Inc/BSP/bsp_include.h"
typedef struct _Dispatcher
{
//uint8_t IsDeleted;
void (*dispache)(void);
//struct _Dispatcher* pBefore;
struct _Dispatcher* pNext;
}Dispatcher;
//通讯链表节点结构体
typedef struct _ComHardWare
{
//void (*dispache)(void);
char Name[50];
char IsOnline;
uint32_t BitFlag;
struct _ComHardWare* pNext;
}ComHardWare;
typedef struct _DispacherController
{
Dispatcher *pHead; // = NULL; //环形链表中的数据头指针
Dispatcher *pTail; // = NULL; //环形链表中的数据尾指针
uint16_t DispacherNumber; // = 0;
uint16_t DispacherCallTime; //
uint16_t Dispacher_Counter; // = 0;
uint16_t Dispacher_Enable; // = 0 disable 1 enable
void (*Add_Dispatcher_List)(struct _DispacherController* ,
void (*dispacher)(void)); //UART的调度程序 添加调度任务
void (*Dispatcher_Run)(struct _DispacherController* ); //UART的调度程序 执行调度任务
}DispacherController;
typedef struct _HardWareController
{
struct _ComHardWare *pComHWHead;
struct _ComHardWare *pComHWTail;
uint16_t HardWare_Check_Counter;
uint16_t DispacherCallTime; //= 100; //2ms 一次,
void (*Add_PCOMHardWare)(struct _HardWareController *, char* , char ,uint32_t);
void (*PCOMHardWare_Check)(struct _HardWareController *);
int (*Set_PCOMHardWare)(struct _HardWareController *, char* , char );
} HardWareController;
void Dispatch_t(DispacherController *uartHandler);
void Dispatcher_List_Add_t(DispacherController *uartHandler,void (*dispache)(void));
// void Dispatcher_List_Add_t(DispacherController *uartHandler,
// void (*dispache)(void),void (*Decode)(uint8_t*, uint16_t));
// void ComHardWare_List_Add_t(HardWareController *uartHandler, char *name,char value);
void PCOMHardWare_Check_t(HardWareController *uartHandler);
int Set_PCOMHardWare_t(HardWareController *uartHandler, char *name, char value);
void ComHardWare_List_Add_t(HardWareController *uartHandler, char *name,
char value,uint32_t bitFlag);
#endif /* INC_BSP_BSP_COM_HELPER_H_ */

66
BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_cpu_flash.h

@ -0,0 +1,66 @@
/*
* bsp_cpu_flash.h
*
* Created on: Aug 28, 2024
* Author: akeguo
*/
#ifndef SRC_BSP_BSP_CPU_FLASH_H_
#define SRC_BSP_BSP_CPU_FLASH_H_
#include "main.h"
#include "../../BASE/Inc/BSP/bsp_qspi_w25q128.h"
#include "quadspi.h"
#define ENABLE_INT() __set_PRIMASK(0) /* 使能全局中断 */
#define DISABLE_INT() __set_PRIMASK(1) /* 禁止全局中断 */
#define CPU_FLASH_BASE_ADDR (uint32_t)(FLASH_BASE) /* 0x08000000 */
#define CPU_FLASH_END_ADDR (uint32_t)(0x081FFFFF)
#define CPU_FLASH_SIZE (2 * 1024 * 1024) /* FLASH总容量 */
#define CPU_FLASH_SECTOR_SIZE (128 * 1024) /* 扇区大小,字节 */
/* Base address of the Flash sectors Bank 1 */
#define ADDR_FLASH_SECTOR_0_BANK1 ((uint32_t)0x08000000) /* Base @ of Sector 0, 128 Kbytes */
#define ADDR_FLASH_SECTOR_1_BANK1 ((uint32_t)0x08020000) /* Base @ of Sector 1, 128 Kbytes */
#define ADDR_FLASH_SECTOR_2_BANK1 ((uint32_t)0x08040000) /* Base @ of Sector 2, 128 Kbytes */
#define ADDR_FLASH_SECTOR_3_BANK1 ((uint32_t)0x08060000) /* Base @ of Sector 3, 128 Kbytes */
#define ADDR_FLASH_SECTOR_4_BANK1 ((uint32_t)0x08080000) /* Base @ of Sector 4, 128 Kbytes */
#define ADDR_FLASH_SECTOR_5_BANK1 ((uint32_t)0x080A0000) /* Base @ of Sector 5, 128 Kbytes */
#define ADDR_FLASH_SECTOR_6_BANK1 ((uint32_t)0x080C0000) /* Base @ of Sector 6, 128 Kbytes */
#define ADDR_FLASH_SECTOR_7_BANK1 ((uint32_t)0x080E0000) /* Base @ of Sector 7, 128 Kbytes */
/* Base address of the Flash sectors Bank 2 */
#define ADDR_FLASH_SECTOR_0_BANK2 ((uint32_t)0x08100000) /* Base @ of Sector 0, 128 Kbytes */
#define ADDR_FLASH_SECTOR_1_BANK2 ((uint32_t)0x08120000) /* Base @ of Sector 1, 128 Kbytes */
#define ADDR_FLASH_SECTOR_2_BANK2 ((uint32_t)0x08140000) /* Base @ of Sector 2, 128 Kbytes */
#define ADDR_FLASH_SECTOR_3_BANK2 ((uint32_t)0x08160000) /* Base @ of Sector 3, 128 Kbytes */
#define ADDR_FLASH_SECTOR_4_BANK2 ((uint32_t)0x08180000) /* Base @ of Sector 4, 128 Kbytes */
#define ADDR_FLASH_SECTOR_5_BANK2 ((uint32_t)0x081A0000) /* Base @ of Sector 5, 128 Kbytes */
#define ADDR_FLASH_SECTOR_6_BANK2 ((uint32_t)0x081C0000) /* Base @ of Sector 6, 128 Kbytes */
#define ADDR_FLASH_SECTOR_7_BANK2 ((uint32_t)0x081E0000) /* Base @ of Sector 7, 128 Kbytes */
#define FLASH_IS_EQU 0 /* Flash内容和待写入的数据相等,不需要擦除和写操作 */
#define FLASH_REQ_WRITE 1 /* Flash不需要擦除,直接写 */
#define FLASH_REQ_ERASE 2 /* Flash需要先擦除,再写 */
#define FLASH_PARAM_ERR 3 /* 函数参数错误 */
#define App_Start_Addr 0x08000000
#define App_Run_Addr 0x08020000
#define App_Download_Addr 0x08080000 // ADDR_FLASH_SECTOR_4_BANK1
uint8_t bsp_ReadCpuFlash(uint32_t _ulFlashAddr, uint8_t *_ucpDst, uint32_t _ulSize);
uint8_t bsp_WriteCpuFlash(uint32_t _ulFlashAddr, uint8_t *_ucpSrc, uint32_t _ulSize);
uint8_t bsp_CmpCpuFlash(uint32_t _ulFlashAddr, uint8_t *_ucpBuf, uint32_t _ulSize);
void JumpToApp(void);
void Copy_Peripheral_Download_Flash_to_App_Start(uint32_t totalBytes);
uint8_t bsp_EraseCpuFlash(uint32_t _ulFlashAddr);
void Erase_App_Download_Flash_Addr();
void Copy_Download_Flash_to_Start();
#endif /* SRC_BSP_BSP_CPU_FLASH_H_ */

40
BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_decode_command.h

@ -0,0 +1,40 @@
/*
* bsp_decode_command.h
*
* Created on: Sep 24, 2024
* Author: akeguo
*/
#ifndef INC_BSP_BSP_DECODE_COMMAND_H_
#define INC_BSP_BSP_DECODE_COMMAND_H_
#include "main.h"
#include "../../BASE/Inc/MSP/msp_WH_LTE_7S0.h"
#include "../../BASE/Inc/MSP/msp_Angle_Encoder_YL159.h"
#include "../../BASE/Inc/BSP/pb_decode.h"
#include "../../BASE/Inc/BSP/pb_encode.h"
#include "../../BASE/Inc/BSP/bsp_include.h"
#include "../../BASE/Inc/BSP/pb.h"
#include "bsp_Desulfurizer.pb.h"
#include "bsp_Cmd.pb.h"
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include "../../BASE/Inc/BSP/bsp_Log.h"
#include "../../BASE/Inc/MSP/msp_Steering_Engine.h"
#include "../../BASE/Inc/BSP/BHBF_ROBOT.h"
#include "../../BASE/Inc/BSP/bsp_cpu_flash.h"
#include "../../BASE/Inc/BSP/bsp_qspi_w25q128.h"
#include "../../BASE/Inc/BSP/bsp_UpperComputer_Handler.h"
#include "bsp_ReCmd.pb.h"
#include "bsp_IV.pb.h"
void send_received_data_to_upper_computer(uint8_t *buffer, uint16_t length);
void decode_command_and_feedback(uint8_t *buffer, uint16_t length, char isMqtt,
struct UARTHandler *send_Handler);
void WrapInCmdAndSend(ReCmd send_Cmd, uint8_t *buf, char isMqtt,struct UARTHandler *send_Handler);
void WrapInCmdAndSendMessage(ReCmd send_Cmd,int8_t functionNum,char isSuccess, uint8_t *buf, char isMqtt,
struct UARTHandler *send_Handler);
#endif /* INC_BSP_BSP_DECODE_COMMAND_H_ */

57
BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_include.h

@ -0,0 +1,57 @@
/*
* bsp_include.h
*
* Created on: Oct 26, 2023
* Author: shiya
*/
#ifndef INC_BSP_INCLUDE_H_
#define INC_BSP_INCLUDE_H_
#include "main.h"
#include "dma.h"
#include "fdcan.h"
#include "i2c.h"
#include "tim.h"
#include "usart.h"
#include "gpio.h"
#include "../../BASE/Inc/BSP/bsp_EEPROM.h"
#include "../../BASE/Inc/BSP/bsp_GPIO.h"
#include "../../BASE/Inc/BSP/bsp_FDCAN.h"
#include "../../BASE/Inc/BSP/bsp_IMU.h"
#include "../../BASE/Inc/BSP/bsp_TIMER.h"
#include "bsp_PV.pb.h"
#include "bsp_GV.pb.h"
#include "bsp_CV.pb.h"
#include "../../BASE/Inc/BSP/pb.h"
#include "../../BASE/Inc/BSP/pb_decode.h"
#include "../../BASE/Inc/BSP/pb_common.h"
#include "msp_MPU6050.pb.h"
//一个中断回调函数支持多少个回调函数链接
#define DF_BSP_InterCall_Num 20
//一共支持多少种中断函数
#define DF_BSP_InterCall_Type_Num 11
enum DF_BSP_InterCall_Type
{
DF_BSP_InterCall_FDCAN1_RxFifo0Callback = 0,
DF_BSP_InterCall_FDCAN2_RxFifo0Callback,
DF_BSP_InterCall_RS485_1_RxCpltCallback,
DF_BSP_InterCall_RS485_2_RxCpltCallback,
DF_BSP_InterCall_RS485_3_RxCpltCallback,
DF_BSP_InterCall_RS485_4_RxCpltCallback,
DF_BSP_InterCall_DEBUG_RxCpltCallback,
DF_BSP_InterCall_E22_Serial_RxCpltCallback,
DF_BSP_InterCall_E28_SBUS_RxFifo0Callback,
DF_BSP_InterCall_TIM1_100ms_PeriodElapsedCallback,
DF_BSP_InterCall_TIM8_2ms_PeriodElapsedCallback
};
uint8_t GF_BSP_Interrupt_Add_CallBack(enum DF_BSP_InterCall_Type _type,
void (*_fn)(void));
void GF_BSP_Interrupt_Run_CallBack(enum DF_BSP_InterCall_Type _type);
#endif /* INC_BSP_INCLUDE_H_ */

36
BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_mqtt.h

@ -0,0 +1,36 @@
#ifndef __BSP_MQTT_H
#define __BSP_MQTT_H
/*-----------------------------------------------------------
* Includes files
*----------------------------------------------------------*/
/*-----------------------------------------------------------
* Exported constants
*----------------------------------------------------------*/
/*-----------------------------------------------------------
* Exported macro
*----------------------------------------------------------*/
/*-----------------------------------------------------------
* Exported function
*----------------------------------------------------------*/
/*!
* @brief MQTT
*
*
* @retval:
*/
void bsp_mqtt_init(void);
void bsp_mqtt_test(void);
extern void bsp_mqtt_pub_send(char topic[],char buf[],size_t len);
#include "../../BASE/Inc/BSP/bsp_pb_decode_encode.h"
#endif /* __BSP_WOLFSSL_H */

26
BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_mqtt_pub.h

@ -0,0 +1,26 @@
/*
* bsp_mqtt_pub.h
*
* Created on: Jul 9, 2024
* Author: akeguo
*/
#ifndef INC_BSP_BSP_MQTT_PUB_H_
#define INC_BSP_BSP_MQTT_PUB_H_
#include "../../BASE/Inc/BSP/bsp_pb_decode_encode.h"
#include "../../BASE/Inc/BSP/pb_decode.h"
#include "../../BASE/Inc/BSP/pb_encode.h"
#include "bsp_CV.pb.h"
#include "../../BASE/Inc/BSP/bsp_pb_decode_encode.h"
#include "../../BASE/Inc/BSP/bsp_EEPROM.h"
extern void log_info(char logger[], char message[]);
extern void log_debug(char logger[], char message[]);
extern void log_err(char logger[], char message[]);
#endif /* INC_BSP_BSP_MQTT_PUB_H_ */

51
BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_pb_decode_encode.h

@ -0,0 +1,51 @@
/*
* bsp_pb_decode_encode.h
*
* Created on: Jul 5, 2024
* Author: akeguo
*/
#ifndef INC_BSP_BSP_PB_DECODE_ENCODE_H_
#define INC_BSP_BSP_PB_DECODE_ENCODE_H_
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
#include "../../BASE/Inc/BSP/pb_decode.h"
#include "../../BASE/Inc/BSP/pb_encode.h"
#include "../../BASE/Inc/BSP/pb.h"
#include "bsp_CV.pb.h"
#include "bsp_GV.pb.h"
#include "msp_MK32.pb.h"
#include "msp_Motor.pb.h"
#include "bsp_PV.pb.h"
#include "bsp_CV.pb.h"
#include "bsp_CV.pb.h"
#include "../../BASE/Inc/BSP/pb_common.h"
#include "bsp_Trace.pb.h"
#include "bsp_IAP.pb.h"
IAP_struct_define pb_decode_IAP(uint8_t *buf, size_t length);
typedef struct pb_buffer_arg
{
/* Buffer to be written, or reference to read buffer */
void const *buf;
/* Length of buf */
size_t buf_len;
} pb_buffer_arg;
bool pb_encode_string_cb(pb_ostream_t *stream, const pb_field_t *field, void *const *arg);
bool pb_decode_string_cb(pb_istream_t *stream, const pb_field_t *field, void **arg);
extern CV_struct_define pb_decode_CV(char *buf, size_t length);
extern void Test_CV();
//extern void pb_encode_TraceMessage(char buf[], size_t buf_len,size_t* len,TraceLevel traceLevel, char logger[], char message[] );
void pb_encode_TraceMessage(char buf[],size_t buf_len, size_t* len,
char traceLevel[], char logger[], char message[] );
#endif /* INC_BSP_BSP_PB_DECODE_ENCODE_H_ */

107
BHBF_Robot_Washing_01/BASE/Inc/BSP/bsp_qspi_w25q128.h

@ -0,0 +1,107 @@
/*
* bsp_quadspi_W25Q128.h
*
* Created on: Apr 21, 2021
* Author: Administrator
*
* bsp用于华邦的w25q128JVw25q128JV不一样
*
*/
#ifndef BSP_QSPI_W25Q128_H_
#define BSP_QSPI_W25Q128_H_
#include "quadspi.h"
#include "stdio.h"
/* 宏定义 --------------------------------------------------------------------*/
#define FLASH_BEGIN_ADDRESS 0x00000
#define CODE_DOWNLOAD_FLASH_BEGIN_ADDRESS 0x00000
#define CODE_FLASH_STORAGE_SIZE 1024*1024 // 留下1M的空间存储数据
#define W25Q128FV_FLASH_SIZE 0x1000000 /* 128 MBits => 16MBytes */
#define W25Q128FV_BLOCK_SIZE 0x10000 /* 256 Blocks of 64KBytes */
#define W25Q128FV_HALF_BLOCK_SIZE 0x8000 /* 128 Blocks of 32KBytes */
#define W25Q128FV_SECTOR_SIZE 0x1000 /* 4096 sectors of 4kBytes */
#define W25Q128FV_PAGE_SIZE 0x100 /* 65536 pages of 256 bytes */
#define W25Q128FV_DUMMY_CYCLES_READ 4
#define W25Q128FV_DUMMY_CYCLES_READ_QUAD 10
#define W25Q128FV_BULK_ERASE_MAX_TIME 250000//ms
#define W25Q128FV_SECTOR_ERASE_MAX_TIME 3000
#define W25Q128FV_SUBSECTOR_ERASE_MAX_TIME 800
#define W25Q128FV_FLASH_ID 0XEF4018
/* W25Q128FV 指令 */
/* 复位操作 */
#define RESET_ENABLE_CMD 0x66
#define RESET_MEMORY_CMD 0x99
#define ENTER_QPI_MODE_CMD 0x38
#define EXIT_QPI_MODE_CMD 0xFF
/* 读取ID指令 */
#define READ_ID_CMD 0x90
#define DUAL_READ_ID_CMD 0x92
#define QUAD_READ_ID_CMD 0x94
#define READ_JEDEC_ID_CMD 0x9F
/* 读操作指令 */
#define READ_CMD 0x03
#define FAST_READ_CMD 0x0B
#define DUAL_OUT_FAST_READ_CMD 0x3B
#define DUAL_INOUT_FAST_READ_CMD 0xBB
#define QUAD_OUT_FAST_READ_CMD 0x6B
#define QUAD_INOUT_FAST_READ_CMD 0xEB
/* 写使能操作指令 */
#define WRITE_ENABLE_CMD 0x06
#define WRITE_DISABLE_CMD 0x04
/* 读写状态寄存器操作指令 */
#define READ_STATUS_REG1_CMD 0x05
#define READ_STATUS_REG2_CMD 0x35
#define READ_STATUS_REG3_CMD 0x15
#define WRITE_STATUS_REG1_CMD 0x01
#define WRITE_STATUS_REG2_CMD 0x31
#define WRITE_STATUS_REG3_CMD 0x11
/* 编程指令 */
#define PAGE_PROG_CMD 0x02
#define QUAD_INPUT_PAGE_PROG_CMD 0x32
/* 擦除Flash指令 */
#define SECTOR_ERASE_CMD 0x20
#define BLOCK_32KB_ERASE_CMD 0x52
#define BLOCK_64KB_ERASE_CMD 0xD8
#define CHIP_ERASE_CMD 0xC7
#define PROG_ERASE_RESUME_CMD 0x7A
#define PROG_ERASE_SUSPEND_CMD 0x75
/* 状态寄存器标志位 */
#define W25Q128FV_FSR_BUSY ((uint8_t)0x01) /* busy */
#define W25Q128FV_FSR_WREN ((uint8_t)0x02) /* write enable */
#define W25Q128FV_FSR_QE ((uint8_t)0x02) /* quad enable */
/* Flash 状态码*/
#define FLASH_OK ((uint8_t)0x00)
#define FLASH_ERROR ((uint8_t)0x01)
#define FLASH_BUSY ((uint8_t)0x02)
#define FLASH_NOT_SUPPORTED ((uint8_t)0x04)
#define FLASH_SUSPENDED ((uint8_t)0x08)
uint32_t QSPI_W25Qx_ReadID(void);
void QSPI_W25Qx_Reset_Memory();
void QSPI_W25Qx_EraseSector(uint32_t _SectorAddr);
uint8_t QSPI_W25Qx_Write_Buffer(uint8_t *_pBuf,uint32_t _write_Addr,uint16_t _write_Size);
void QSPI_W25Qx_Read_Buffer(uint8_t *_pBuf,uint32_t _read_Addr,uint32_t _read_Size);
void QSPI_W25Qx_EraseDownLoadFlash();
void user_Assert(char *file,uint32_t line);
#endif /* BSP_QSPI_W25Q128_H_ */

917
BHBF_Robot_Washing_01/BASE/Inc/BSP/pb.h

@ -0,0 +1,917 @@
/* Common parts of the nanopb library. Most of these are quite low-level
* stuff. For the high-level interface, see pb_encode.h and pb_decode.h.
*/
#ifndef PB_H_INCLUDED
#define PB_H_INCLUDED
/*****************************************************************
* Nanopb compilation time options. You can change these here by *
* uncommenting the lines, or on the compiler command line. *
*****************************************************************/
/* Enable support for dynamically allocated fields */
/* #define PB_ENABLE_MALLOC 1 */
/* Define this if your CPU / compiler combination does not support
* unaligned memory access to packed structures. Note that packed
* structures are only used when requested in .proto options. */
/* #define PB_NO_PACKED_STRUCTS 1 */
/* Increase the number of required fields that are tracked.
* A compiler warning will tell if you need this. */
/* #define PB_MAX_REQUIRED_FIELDS 256 */
/* Add support for tag numbers > 65536 and fields larger than 65536 bytes. */
/* #define PB_FIELD_32BIT 1 */
/* Disable support for error messages in order to save some code space. */
/* #define PB_NO_ERRMSG 1 */
/* Disable support for custom streams (support only memory buffers). */
/* #define PB_BUFFER_ONLY 1 */
/* Disable support for 64-bit datatypes, for compilers without int64_t
or to save some code space. */
/* #define PB_WITHOUT_64BIT 1 */
/* Don't encode scalar arrays as packed. This is only to be used when
* the decoder on the receiving side cannot process packed scalar arrays.
* Such example is older protobuf.js. */
/* #define PB_ENCODE_ARRAYS_UNPACKED 1 */
/* Enable conversion of doubles to floats for platforms that do not
* support 64-bit doubles. Most commonly AVR. */
/* #define PB_CONVERT_DOUBLE_FLOAT 1 */
/* Check whether incoming strings are valid UTF-8 sequences. Slows down
* the string processing slightly and slightly increases code size. */
/* #define PB_VALIDATE_UTF8 1 */
/* This can be defined if the platform is little-endian and has 8-bit bytes.
* Normally it is automatically detected based on __BYTE_ORDER__ macro. */
/* #define PB_LITTLE_ENDIAN_8BIT 1 */
/* Configure static assert mechanism. Instead of changing these, set your
* compiler to C11 standard mode if possible. */
/* #define PB_C99_STATIC_ASSERT 1 */
/* #define PB_NO_STATIC_ASSERT 1 */
/******************************************************************
* You usually don't need to change anything below this line. *
* Feel free to look around and use the defined macros, though. *
******************************************************************/
/* Version of the nanopb library. Just in case you want to check it in
* your own program. */
#define NANOPB_VERSION "nanopb-0.4.8-dev"
/* Include all the system headers needed by nanopb. You will need the
* definitions of the following:
* - strlen, memcpy, memset functions
* - [u]int_least8_t, uint_fast8_t, [u]int_least16_t, [u]int32_t, [u]int64_t
* - size_t
* - bool
*
* If you don't have the standard header files, you can instead provide
* a custom header that defines or includes all this. In that case,
* define PB_SYSTEM_HEADER to the path of this file.
*/
#ifdef PB_SYSTEM_HEADER
#include PB_SYSTEM_HEADER
#else
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>
#include <string.h>
#include <limits.h>
#ifdef PB_ENABLE_MALLOC
#include <stdlib.h>
#endif
#endif
#ifdef __cplusplus
extern "C" {
#endif
/* Macro for defining packed structures (compiler dependent).
* This just reduces memory requirements, but is not required.
*/
#if defined(PB_NO_PACKED_STRUCTS)
/* Disable struct packing */
# define PB_PACKED_STRUCT_START
# define PB_PACKED_STRUCT_END
# define pb_packed
#elif defined(__GNUC__) || defined(__clang__)
/* For GCC and clang */
# define PB_PACKED_STRUCT_START
# define PB_PACKED_STRUCT_END
# define pb_packed __attribute__((packed))
#elif defined(__ICCARM__) || defined(__CC_ARM)
/* For IAR ARM and Keil MDK-ARM compilers */
# define PB_PACKED_STRUCT_START _Pragma("pack(push, 1)")
# define PB_PACKED_STRUCT_END _Pragma("pack(pop)")
# define pb_packed
#elif defined(_MSC_VER) && (_MSC_VER >= 1500)
/* For Microsoft Visual C++ */
# define PB_PACKED_STRUCT_START __pragma(pack(push, 1))
# define PB_PACKED_STRUCT_END __pragma(pack(pop))
# define pb_packed
#else
/* Unknown compiler */
# define PB_PACKED_STRUCT_START
# define PB_PACKED_STRUCT_END
# define pb_packed
#endif
/* Detect endianness */
#ifndef PB_LITTLE_ENDIAN_8BIT
#if ((defined(__BYTE_ORDER) && __BYTE_ORDER == __LITTLE_ENDIAN) || \
(defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) || \
defined(__LITTLE_ENDIAN__) || defined(__ARMEL__) || \
defined(__THUMBEL__) || defined(__AARCH64EL__) || defined(_MIPSEL) || \
defined(_M_IX86) || defined(_M_X64) || defined(_M_ARM)) \
&& CHAR_BIT == 8
#define PB_LITTLE_ENDIAN_8BIT 1
#endif
#endif
/* Handly macro for suppressing unreferenced-parameter compiler warnings. */
#ifndef PB_UNUSED
#define PB_UNUSED(x) (void)(x)
#endif
/* Harvard-architecture processors may need special attributes for storing
* field information in program memory. */
#ifndef PB_PROGMEM
#ifdef __AVR__
#include <avr/pgmspace.h>
#define PB_PROGMEM PROGMEM
#define PB_PROGMEM_READU32(x) pgm_read_dword(&x)
#else
#define PB_PROGMEM
#define PB_PROGMEM_READU32(x) (x)
#endif
#endif
/* Compile-time assertion, used for checking compatible compilation options.
* If this does not work properly on your compiler, use
* #define PB_NO_STATIC_ASSERT to disable it.
*
* But before doing that, check carefully the error message / place where it
* comes from to see if the error has a real cause. Unfortunately the error
* message is not always very clear to read, but you can see the reason better
* in the place where the PB_STATIC_ASSERT macro was called.
*/
#ifndef PB_NO_STATIC_ASSERT
# ifndef PB_STATIC_ASSERT
# if defined(__ICCARM__)
/* IAR has static_assert keyword but no _Static_assert */
# define PB_STATIC_ASSERT(COND,MSG) static_assert(COND,#MSG);
# elif defined(_MSC_VER) && (!defined(__STDC_VERSION__) || __STDC_VERSION__ < 201112)
/* MSVC in C89 mode supports static_assert() keyword anyway */
# define PB_STATIC_ASSERT(COND,MSG) static_assert(COND,#MSG);
# elif defined(PB_C99_STATIC_ASSERT)
/* Classic negative-size-array static assert mechanism */
# define PB_STATIC_ASSERT(COND,MSG) typedef char PB_STATIC_ASSERT_MSG(MSG, __LINE__, __COUNTER__)[(COND)?1:-1];
# define PB_STATIC_ASSERT_MSG(MSG, LINE, COUNTER) PB_STATIC_ASSERT_MSG_(MSG, LINE, COUNTER)
# define PB_STATIC_ASSERT_MSG_(MSG, LINE, COUNTER) pb_static_assertion_##MSG##_##LINE##_##COUNTER
# elif defined(__cplusplus)
/* C++11 standard static_assert mechanism */
# define PB_STATIC_ASSERT(COND,MSG) static_assert(COND,#MSG);
# else
/* C11 standard _Static_assert mechanism */
# define PB_STATIC_ASSERT(COND,MSG) _Static_assert(COND,#MSG);
# endif
# endif
#else
/* Static asserts disabled by PB_NO_STATIC_ASSERT */
# define PB_STATIC_ASSERT(COND,MSG)
#endif
/* Test that PB_STATIC_ASSERT works
* If you get errors here, you may need to do one of these:
* - Enable C11 standard support in your compiler
* - Define PB_C99_STATIC_ASSERT to enable C99 standard support
* - Define PB_NO_STATIC_ASSERT to disable static asserts altogether
*/
PB_STATIC_ASSERT(1, STATIC_ASSERT_IS_NOT_WORKING)
/* Number of required fields to keep track of. */
#ifndef PB_MAX_REQUIRED_FIELDS
#define PB_MAX_REQUIRED_FIELDS 64
#endif
#if PB_MAX_REQUIRED_FIELDS < 64
#error You should not lower PB_MAX_REQUIRED_FIELDS from the default value (64).
#endif
#ifdef PB_WITHOUT_64BIT
#ifdef PB_CONVERT_DOUBLE_FLOAT
/* Cannot use doubles without 64-bit types */
#undef PB_CONVERT_DOUBLE_FLOAT
#endif
#endif
/* List of possible field types. These are used in the autogenerated code.
* Least-significant 4 bits tell the scalar type
* Most-significant 4 bits specify repeated/required/packed etc.
*/
typedef uint_least8_t pb_type_t;
/**** Field data types ****/
/* Numeric types */
#define PB_LTYPE_BOOL 0x00U /* bool */
#define PB_LTYPE_VARINT 0x01U /* int32, int64, enum, bool */
#define PB_LTYPE_UVARINT 0x02U /* uint32, uint64 */
#define PB_LTYPE_SVARINT 0x03U /* sint32, sint64 */
#define PB_LTYPE_FIXED32 0x04U /* fixed32, sfixed32, float */
#define PB_LTYPE_FIXED64 0x05U /* fixed64, sfixed64, double */
/* Marker for last packable field type. */
#define PB_LTYPE_LAST_PACKABLE 0x05U
/* Byte array with pre-allocated buffer.
* data_size is the length of the allocated PB_BYTES_ARRAY structure. */
#define PB_LTYPE_BYTES 0x06U
/* String with pre-allocated buffer.
* data_size is the maximum length. */
#define PB_LTYPE_STRING 0x07U
/* Submessage
* submsg_fields is pointer to field descriptions */
#define PB_LTYPE_SUBMESSAGE 0x08U
/* Submessage with pre-decoding callback
* The pre-decoding callback is stored as pb_callback_t right before pSize.
* submsg_fields is pointer to field descriptions */
#define PB_LTYPE_SUBMSG_W_CB 0x09U
/* Extension pseudo-field
* The field contains a pointer to pb_extension_t */
#define PB_LTYPE_EXTENSION 0x0AU
/* Byte array with inline, pre-allocated byffer.
* data_size is the length of the inline, allocated buffer.
* This differs from PB_LTYPE_BYTES by defining the element as
* pb_byte_t[data_size] rather than pb_bytes_array_t. */
#define PB_LTYPE_FIXED_LENGTH_BYTES 0x0BU
/* Number of declared LTYPES */
#define PB_LTYPES_COUNT 0x0CU
#define PB_LTYPE_MASK 0x0FU
/**** Field repetition rules ****/
#define PB_HTYPE_REQUIRED 0x00U
#define PB_HTYPE_OPTIONAL 0x10U
#define PB_HTYPE_SINGULAR 0x10U
#define PB_HTYPE_REPEATED 0x20U
#define PB_HTYPE_FIXARRAY 0x20U
#define PB_HTYPE_ONEOF 0x30U
#define PB_HTYPE_MASK 0x30U
/**** Field allocation types ****/
#define PB_ATYPE_STATIC 0x00U
#define PB_ATYPE_POINTER 0x80U
#define PB_ATYPE_CALLBACK 0x40U
#define PB_ATYPE_MASK 0xC0U
#define PB_ATYPE(x) ((x) & PB_ATYPE_MASK)
#define PB_HTYPE(x) ((x) & PB_HTYPE_MASK)
#define PB_LTYPE(x) ((x) & PB_LTYPE_MASK)
#define PB_LTYPE_IS_SUBMSG(x) (PB_LTYPE(x) == PB_LTYPE_SUBMESSAGE || \
PB_LTYPE(x) == PB_LTYPE_SUBMSG_W_CB)
/* Data type used for storing sizes of struct fields
* and array counts.
*/
#if defined(PB_FIELD_32BIT)
typedef uint32_t pb_size_t;
typedef int32_t pb_ssize_t;
#else
typedef uint_least16_t pb_size_t;
typedef int_least16_t pb_ssize_t;
#endif
#define PB_SIZE_MAX ((pb_size_t)-1)
/* Data type for storing encoded data and other byte streams.
* This typedef exists to support platforms where uint8_t does not exist.
* You can regard it as equivalent on uint8_t on other platforms.
*/
typedef uint_least8_t pb_byte_t;
/* Forward declaration of struct types */
typedef struct pb_istream_s pb_istream_t;
typedef struct pb_ostream_s pb_ostream_t;
typedef struct pb_field_iter_s pb_field_iter_t;
/* This structure is used in auto-generated constants
* to specify struct fields.
*/
typedef struct pb_msgdesc_s pb_msgdesc_t;
struct pb_msgdesc_s {
const uint32_t *field_info;
const pb_msgdesc_t * const * submsg_info;
const pb_byte_t *default_value;
bool (*field_callback)(pb_istream_t *istream, pb_ostream_t *ostream, const pb_field_iter_t *field);
pb_size_t field_count;
pb_size_t required_field_count;
pb_size_t largest_tag;
};
/* Iterator for message descriptor */
struct pb_field_iter_s {
const pb_msgdesc_t *descriptor; /* Pointer to message descriptor constant */
void *message; /* Pointer to start of the structure */
pb_size_t index; /* Index of the field */
pb_size_t field_info_index; /* Index to descriptor->field_info array */
pb_size_t required_field_index; /* Index that counts only the required fields */
pb_size_t submessage_index; /* Index that counts only submessages */
pb_size_t tag; /* Tag of current field */
pb_size_t data_size; /* sizeof() of a single item */
pb_size_t array_size; /* Number of array entries */
pb_type_t type; /* Type of current field */
void *pField; /* Pointer to current field in struct */
void *pData; /* Pointer to current data contents. Different than pField for arrays and pointers. */
void *pSize; /* Pointer to count/has field */
const pb_msgdesc_t *submsg_desc; /* For submessage fields, pointer to field descriptor for the submessage. */
};
/* For compatibility with legacy code */
typedef pb_field_iter_t pb_field_t;
/* Make sure that the standard integer types are of the expected sizes.
* Otherwise fixed32/fixed64 fields can break.
*
* If you get errors here, it probably means that your stdint.h is not
* correct for your platform.
*/
#ifndef PB_WITHOUT_64BIT
PB_STATIC_ASSERT(sizeof(int64_t) == 2 * sizeof(int32_t), INT64_T_WRONG_SIZE)
PB_STATIC_ASSERT(sizeof(uint64_t) == 2 * sizeof(uint32_t), UINT64_T_WRONG_SIZE)
#endif
/* This structure is used for 'bytes' arrays.
* It has the number of bytes in the beginning, and after that an array.
* Note that actual structs used will have a different length of bytes array.
*/
#define PB_BYTES_ARRAY_T(n) struct { pb_size_t size; pb_byte_t bytes[n]; }
#define PB_BYTES_ARRAY_T_ALLOCSIZE(n) ((size_t)n + offsetof(pb_bytes_array_t, bytes))
struct pb_bytes_array_s {
pb_size_t size;
pb_byte_t bytes[1];
};
typedef struct pb_bytes_array_s pb_bytes_array_t;
/* This structure is used for giving the callback function.
* It is stored in the message structure and filled in by the method that
* calls pb_decode.
*
* The decoding callback will be given a limited-length stream
* If the wire type was string, the length is the length of the string.
* If the wire type was a varint/fixed32/fixed64, the length is the length
* of the actual value.
* The function may be called multiple times (especially for repeated types,
* but also otherwise if the message happens to contain the field multiple
* times.)
*
* The encoding callback will receive the actual output stream.
* It should write all the data in one call, including the field tag and
* wire type. It can write multiple fields.
*
* The callback can be null if you want to skip a field.
*/
typedef struct pb_callback_s pb_callback_t;
struct pb_callback_s {
/* Callback functions receive a pointer to the arg field.
* You can access the value of the field as *arg, and modify it if needed.
*/
union {
bool (*decode)(pb_istream_t *stream, const pb_field_t *field, void **arg);
bool (*encode)(pb_ostream_t *stream, const pb_field_t *field, void * const *arg);
} funcs;
/* Free arg for use by callback */
void *arg;
};
extern bool pb_default_field_callback(pb_istream_t *istream, pb_ostream_t *ostream, const pb_field_t *field);
/* Wire types. Library user needs these only in encoder callbacks. */
typedef enum {
PB_WT_VARINT = 0,
PB_WT_64BIT = 1,
PB_WT_STRING = 2,
PB_WT_32BIT = 5,
PB_WT_PACKED = 255 /* PB_WT_PACKED is internal marker for packed arrays. */
} pb_wire_type_t;
/* Structure for defining the handling of unknown/extension fields.
* Usually the pb_extension_type_t structure is automatically generated,
* while the pb_extension_t structure is created by the user. However,
* if you want to catch all unknown fields, you can also create a custom
* pb_extension_type_t with your own callback.
*/
typedef struct pb_extension_type_s pb_extension_type_t;
typedef struct pb_extension_s pb_extension_t;
struct pb_extension_type_s {
/* Called for each unknown field in the message.
* If you handle the field, read off all of its data and return true.
* If you do not handle the field, do not read anything and return true.
* If you run into an error, return false.
* Set to NULL for default handler.
*/
bool (*decode)(pb_istream_t *stream, pb_extension_t *extension,
uint32_t tag, pb_wire_type_t wire_type);
/* Called once after all regular fields have been encoded.
* If you have something to write, do so and return true.
* If you do not have anything to write, just return true.
* If you run into an error, return false.
* Set to NULL for default handler.
*/
bool (*encode)(pb_ostream_t *stream, const pb_extension_t *extension);
/* Free field for use by the callback. */
const void *arg;
};
struct pb_extension_s {
/* Type describing the extension field. Usually you'll initialize
* this to a pointer to the automatically generated structure. */
const pb_extension_type_t *type;
/* Destination for the decoded data. This must match the datatype
* of the extension field. */
void *dest;
/* Pointer to the next extension handler, or NULL.
* If this extension does not match a field, the next handler is
* automatically called. */
pb_extension_t *next;
/* The decoder sets this to true if the extension was found.
* Ignored for encoding. */
bool found;
};
#define pb_extension_init_zero {NULL,NULL,NULL,false}
/* Memory allocation functions to use. You can define pb_realloc and
* pb_free to custom functions if you want. */
#ifdef PB_ENABLE_MALLOC
# ifndef pb_realloc
# define pb_realloc(ptr, size) realloc(ptr, size)
# endif
# ifndef pb_free
# define pb_free(ptr) free(ptr)
# endif
#endif
/* This is used to inform about need to regenerate .pb.h/.pb.c files. */
#define PB_PROTO_HEADER_VERSION 40
/* These macros are used to declare pb_field_t's in the constant array. */
/* Size of a structure member, in bytes. */
#define pb_membersize(st, m) (sizeof ((st*)0)->m)
/* Number of entries in an array. */
#define pb_arraysize(st, m) (pb_membersize(st, m) / pb_membersize(st, m[0]))
/* Delta from start of one member to the start of another member. */
#define pb_delta(st, m1, m2) ((int)offsetof(st, m1) - (int)offsetof(st, m2))
/* Force expansion of macro value */
#define PB_EXPAND(x) x
/* Binding of a message field set into a specific structure */
#define PB_BIND(msgname, structname, width) \
const uint32_t structname ## _field_info[] PB_PROGMEM = \
{ \
msgname ## _FIELDLIST(PB_GEN_FIELD_INFO_ ## width, structname) \
0 \
}; \
const pb_msgdesc_t* const structname ## _submsg_info[] = \
{ \
msgname ## _FIELDLIST(PB_GEN_SUBMSG_INFO, structname) \
NULL \
}; \
const pb_msgdesc_t structname ## _msg = \
{ \
structname ## _field_info, \
structname ## _submsg_info, \
msgname ## _DEFAULT, \
msgname ## _CALLBACK, \
0 msgname ## _FIELDLIST(PB_GEN_FIELD_COUNT, structname), \
0 msgname ## _FIELDLIST(PB_GEN_REQ_FIELD_COUNT, structname), \
0 msgname ## _FIELDLIST(PB_GEN_LARGEST_TAG, structname), \
}; \
msgname ## _FIELDLIST(PB_GEN_FIELD_INFO_ASSERT_ ## width, structname)
#define PB_GEN_FIELD_COUNT(structname, atype, htype, ltype, fieldname, tag) +1
#define PB_GEN_REQ_FIELD_COUNT(structname, atype, htype, ltype, fieldname, tag) \
+ (PB_HTYPE_ ## htype == PB_HTYPE_REQUIRED)
#define PB_GEN_LARGEST_TAG(structname, atype, htype, ltype, fieldname, tag) \
* 0 + tag
/* X-macro for generating the entries in struct_field_info[] array. */
#define PB_GEN_FIELD_INFO_1(structname, atype, htype, ltype, fieldname, tag) \
PB_FIELDINFO_1(tag, PB_ATYPE_ ## atype | PB_HTYPE_ ## htype | PB_LTYPE_MAP_ ## ltype, \
PB_DATA_OFFSET_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname), \
PB_DATA_SIZE_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname), \
PB_SIZE_OFFSET_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname), \
PB_ARRAY_SIZE_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname))
#define PB_GEN_FIELD_INFO_2(structname, atype, htype, ltype, fieldname, tag) \
PB_FIELDINFO_2(tag, PB_ATYPE_ ## atype | PB_HTYPE_ ## htype | PB_LTYPE_MAP_ ## ltype, \
PB_DATA_OFFSET_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname), \
PB_DATA_SIZE_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname), \
PB_SIZE_OFFSET_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname), \
PB_ARRAY_SIZE_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname))
#define PB_GEN_FIELD_INFO_4(structname, atype, htype, ltype, fieldname, tag) \
PB_FIELDINFO_4(tag, PB_ATYPE_ ## atype | PB_HTYPE_ ## htype | PB_LTYPE_MAP_ ## ltype, \
PB_DATA_OFFSET_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname), \
PB_DATA_SIZE_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname), \
PB_SIZE_OFFSET_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname), \
PB_ARRAY_SIZE_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname))
#define PB_GEN_FIELD_INFO_8(structname, atype, htype, ltype, fieldname, tag) \
PB_FIELDINFO_8(tag, PB_ATYPE_ ## atype | PB_HTYPE_ ## htype | PB_LTYPE_MAP_ ## ltype, \
PB_DATA_OFFSET_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname), \
PB_DATA_SIZE_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname), \
PB_SIZE_OFFSET_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname), \
PB_ARRAY_SIZE_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname))
#define PB_GEN_FIELD_INFO_AUTO(structname, atype, htype, ltype, fieldname, tag) \
PB_FIELDINFO_AUTO2(PB_FIELDINFO_WIDTH_AUTO(_PB_ATYPE_ ## atype, _PB_HTYPE_ ## htype, _PB_LTYPE_ ## ltype), \
tag, PB_ATYPE_ ## atype | PB_HTYPE_ ## htype | PB_LTYPE_MAP_ ## ltype, \
PB_DATA_OFFSET_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname), \
PB_DATA_SIZE_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname), \
PB_SIZE_OFFSET_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname), \
PB_ARRAY_SIZE_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname))
#define PB_FIELDINFO_AUTO2(width, tag, type, data_offset, data_size, size_offset, array_size) \
PB_FIELDINFO_AUTO3(width, tag, type, data_offset, data_size, size_offset, array_size)
#define PB_FIELDINFO_AUTO3(width, tag, type, data_offset, data_size, size_offset, array_size) \
PB_FIELDINFO_ ## width(tag, type, data_offset, data_size, size_offset, array_size)
/* X-macro for generating asserts that entries fit in struct_field_info[] array.
* The structure of macros here must match the structure above in PB_GEN_FIELD_INFO_x(),
* but it is not easily reused because of how macro substitutions work. */
#define PB_GEN_FIELD_INFO_ASSERT_1(structname, atype, htype, ltype, fieldname, tag) \
PB_FIELDINFO_ASSERT_1(tag, PB_ATYPE_ ## atype | PB_HTYPE_ ## htype | PB_LTYPE_MAP_ ## ltype, \
PB_DATA_OFFSET_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname), \
PB_DATA_SIZE_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname), \
PB_SIZE_OFFSET_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname), \
PB_ARRAY_SIZE_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname))
#define PB_GEN_FIELD_INFO_ASSERT_2(structname, atype, htype, ltype, fieldname, tag) \
PB_FIELDINFO_ASSERT_2(tag, PB_ATYPE_ ## atype | PB_HTYPE_ ## htype | PB_LTYPE_MAP_ ## ltype, \
PB_DATA_OFFSET_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname), \
PB_DATA_SIZE_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname), \
PB_SIZE_OFFSET_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname), \
PB_ARRAY_SIZE_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname))
#define PB_GEN_FIELD_INFO_ASSERT_4(structname, atype, htype, ltype, fieldname, tag) \
PB_FIELDINFO_ASSERT_4(tag, PB_ATYPE_ ## atype | PB_HTYPE_ ## htype | PB_LTYPE_MAP_ ## ltype, \
PB_DATA_OFFSET_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname), \
PB_DATA_SIZE_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname), \
PB_SIZE_OFFSET_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname), \
PB_ARRAY_SIZE_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname))
#define PB_GEN_FIELD_INFO_ASSERT_8(structname, atype, htype, ltype, fieldname, tag) \
PB_FIELDINFO_ASSERT_8(tag, PB_ATYPE_ ## atype | PB_HTYPE_ ## htype | PB_LTYPE_MAP_ ## ltype, \
PB_DATA_OFFSET_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname), \
PB_DATA_SIZE_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname), \
PB_SIZE_OFFSET_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname), \
PB_ARRAY_SIZE_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname))
#define PB_GEN_FIELD_INFO_ASSERT_AUTO(structname, atype, htype, ltype, fieldname, tag) \
PB_FIELDINFO_ASSERT_AUTO2(PB_FIELDINFO_WIDTH_AUTO(_PB_ATYPE_ ## atype, _PB_HTYPE_ ## htype, _PB_LTYPE_ ## ltype), \
tag, PB_ATYPE_ ## atype | PB_HTYPE_ ## htype | PB_LTYPE_MAP_ ## ltype, \
PB_DATA_OFFSET_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname), \
PB_DATA_SIZE_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname), \
PB_SIZE_OFFSET_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname), \
PB_ARRAY_SIZE_ ## atype(_PB_HTYPE_ ## htype, structname, fieldname))
#define PB_FIELDINFO_ASSERT_AUTO2(width, tag, type, data_offset, data_size, size_offset, array_size) \
PB_FIELDINFO_ASSERT_AUTO3(width, tag, type, data_offset, data_size, size_offset, array_size)
#define PB_FIELDINFO_ASSERT_AUTO3(width, tag, type, data_offset, data_size, size_offset, array_size) \
PB_FIELDINFO_ASSERT_ ## width(tag, type, data_offset, data_size, size_offset, array_size)
#define PB_DATA_OFFSET_STATIC(htype, structname, fieldname) PB_DO ## htype(structname, fieldname)
#define PB_DATA_OFFSET_POINTER(htype, structname, fieldname) PB_DO ## htype(structname, fieldname)
#define PB_DATA_OFFSET_CALLBACK(htype, structname, fieldname) PB_DO ## htype(structname, fieldname)
#define PB_DO_PB_HTYPE_REQUIRED(structname, fieldname) offsetof(structname, fieldname)
#define PB_DO_PB_HTYPE_SINGULAR(structname, fieldname) offsetof(structname, fieldname)
#define PB_DO_PB_HTYPE_ONEOF(structname, fieldname) offsetof(structname, PB_ONEOF_NAME(FULL, fieldname))
#define PB_DO_PB_HTYPE_OPTIONAL(structname, fieldname) offsetof(structname, fieldname)
#define PB_DO_PB_HTYPE_REPEATED(structname, fieldname) offsetof(structname, fieldname)
#define PB_DO_PB_HTYPE_FIXARRAY(structname, fieldname) offsetof(structname, fieldname)
#define PB_SIZE_OFFSET_STATIC(htype, structname, fieldname) PB_SO ## htype(structname, fieldname)
#define PB_SIZE_OFFSET_POINTER(htype, structname, fieldname) PB_SO_PTR ## htype(structname, fieldname)
#define PB_SIZE_OFFSET_CALLBACK(htype, structname, fieldname) PB_SO_CB ## htype(structname, fieldname)
#define PB_SO_PB_HTYPE_REQUIRED(structname, fieldname) 0
#define PB_SO_PB_HTYPE_SINGULAR(structname, fieldname) 0
#define PB_SO_PB_HTYPE_ONEOF(structname, fieldname) PB_SO_PB_HTYPE_ONEOF2(structname, PB_ONEOF_NAME(FULL, fieldname), PB_ONEOF_NAME(UNION, fieldname))
#define PB_SO_PB_HTYPE_ONEOF2(structname, fullname, unionname) PB_SO_PB_HTYPE_ONEOF3(structname, fullname, unionname)
#define PB_SO_PB_HTYPE_ONEOF3(structname, fullname, unionname) pb_delta(structname, fullname, which_ ## unionname)
#define PB_SO_PB_HTYPE_OPTIONAL(structname, fieldname) pb_delta(structname, fieldname, has_ ## fieldname)
#define PB_SO_PB_HTYPE_REPEATED(structname, fieldname) pb_delta(structname, fieldname, fieldname ## _count)
#define PB_SO_PB_HTYPE_FIXARRAY(structname, fieldname) 0
#define PB_SO_PTR_PB_HTYPE_REQUIRED(structname, fieldname) 0
#define PB_SO_PTR_PB_HTYPE_SINGULAR(structname, fieldname) 0
#define PB_SO_PTR_PB_HTYPE_ONEOF(structname, fieldname) PB_SO_PB_HTYPE_ONEOF(structname, fieldname)
#define PB_SO_PTR_PB_HTYPE_OPTIONAL(structname, fieldname) 0
#define PB_SO_PTR_PB_HTYPE_REPEATED(structname, fieldname) PB_SO_PB_HTYPE_REPEATED(structname, fieldname)
#define PB_SO_PTR_PB_HTYPE_FIXARRAY(structname, fieldname) 0
#define PB_SO_CB_PB_HTYPE_REQUIRED(structname, fieldname) 0
#define PB_SO_CB_PB_HTYPE_SINGULAR(structname, fieldname) 0
#define PB_SO_CB_PB_HTYPE_ONEOF(structname, fieldname) PB_SO_PB_HTYPE_ONEOF(structname, fieldname)
#define PB_SO_CB_PB_HTYPE_OPTIONAL(structname, fieldname) 0
#define PB_SO_CB_PB_HTYPE_REPEATED(structname, fieldname) 0
#define PB_SO_CB_PB_HTYPE_FIXARRAY(structname, fieldname) 0
#define PB_ARRAY_SIZE_STATIC(htype, structname, fieldname) PB_AS ## htype(structname, fieldname)
#define PB_ARRAY_SIZE_POINTER(htype, structname, fieldname) PB_AS_PTR ## htype(structname, fieldname)
#define PB_ARRAY_SIZE_CALLBACK(htype, structname, fieldname) 1
#define PB_AS_PB_HTYPE_REQUIRED(structname, fieldname) 1
#define PB_AS_PB_HTYPE_SINGULAR(structname, fieldname) 1
#define PB_AS_PB_HTYPE_OPTIONAL(structname, fieldname) 1
#define PB_AS_PB_HTYPE_ONEOF(structname, fieldname) 1
#define PB_AS_PB_HTYPE_REPEATED(structname, fieldname) pb_arraysize(structname, fieldname)
#define PB_AS_PB_HTYPE_FIXARRAY(structname, fieldname) pb_arraysize(structname, fieldname)
#define PB_AS_PTR_PB_HTYPE_REQUIRED(structname, fieldname) 1
#define PB_AS_PTR_PB_HTYPE_SINGULAR(structname, fieldname) 1
#define PB_AS_PTR_PB_HTYPE_OPTIONAL(structname, fieldname) 1
#define PB_AS_PTR_PB_HTYPE_ONEOF(structname, fieldname) 1
#define PB_AS_PTR_PB_HTYPE_REPEATED(structname, fieldname) 1
#define PB_AS_PTR_PB_HTYPE_FIXARRAY(structname, fieldname) pb_arraysize(structname, fieldname[0])
#define PB_DATA_SIZE_STATIC(htype, structname, fieldname) PB_DS ## htype(structname, fieldname)
#define PB_DATA_SIZE_POINTER(htype, structname, fieldname) PB_DS_PTR ## htype(structname, fieldname)
#define PB_DATA_SIZE_CALLBACK(htype, structname, fieldname) PB_DS_CB ## htype(structname, fieldname)
#define PB_DS_PB_HTYPE_REQUIRED(structname, fieldname) pb_membersize(structname, fieldname)
#define PB_DS_PB_HTYPE_SINGULAR(structname, fieldname) pb_membersize(structname, fieldname)
#define PB_DS_PB_HTYPE_OPTIONAL(structname, fieldname) pb_membersize(structname, fieldname)
#define PB_DS_PB_HTYPE_ONEOF(structname, fieldname) pb_membersize(structname, PB_ONEOF_NAME(FULL, fieldname))
#define PB_DS_PB_HTYPE_REPEATED(structname, fieldname) pb_membersize(structname, fieldname[0])
#define PB_DS_PB_HTYPE_FIXARRAY(structname, fieldname) pb_membersize(structname, fieldname[0])
#define PB_DS_PTR_PB_HTYPE_REQUIRED(structname, fieldname) pb_membersize(structname, fieldname[0])
#define PB_DS_PTR_PB_HTYPE_SINGULAR(structname, fieldname) pb_membersize(structname, fieldname[0])
#define PB_DS_PTR_PB_HTYPE_OPTIONAL(structname, fieldname) pb_membersize(structname, fieldname[0])
#define PB_DS_PTR_PB_HTYPE_ONEOF(structname, fieldname) pb_membersize(structname, PB_ONEOF_NAME(FULL, fieldname)[0])
#define PB_DS_PTR_PB_HTYPE_REPEATED(structname, fieldname) pb_membersize(structname, fieldname[0])
#define PB_DS_PTR_PB_HTYPE_FIXARRAY(structname, fieldname) pb_membersize(structname, fieldname[0][0])
#define PB_DS_CB_PB_HTYPE_REQUIRED(structname, fieldname) pb_membersize(structname, fieldname)
#define PB_DS_CB_PB_HTYPE_SINGULAR(structname, fieldname) pb_membersize(structname, fieldname)
#define PB_DS_CB_PB_HTYPE_OPTIONAL(structname, fieldname) pb_membersize(structname, fieldname)
#define PB_DS_CB_PB_HTYPE_ONEOF(structname, fieldname) pb_membersize(structname, PB_ONEOF_NAME(FULL, fieldname))
#define PB_DS_CB_PB_HTYPE_REPEATED(structname, fieldname) pb_membersize(structname, fieldname)
#define PB_DS_CB_PB_HTYPE_FIXARRAY(structname, fieldname) pb_membersize(structname, fieldname)
#define PB_ONEOF_NAME(type, tuple) PB_EXPAND(PB_ONEOF_NAME_ ## type tuple)
#define PB_ONEOF_NAME_UNION(unionname,membername,fullname) unionname
#define PB_ONEOF_NAME_MEMBER(unionname,membername,fullname) membername
#define PB_ONEOF_NAME_FULL(unionname,membername,fullname) fullname
#define PB_GEN_SUBMSG_INFO(structname, atype, htype, ltype, fieldname, tag) \
PB_SUBMSG_INFO_ ## htype(_PB_LTYPE_ ## ltype, structname, fieldname)
#define PB_SUBMSG_INFO_REQUIRED(ltype, structname, fieldname) PB_SI ## ltype(structname ## _ ## fieldname ## _MSGTYPE)
#define PB_SUBMSG_INFO_SINGULAR(ltype, structname, fieldname) PB_SI ## ltype(structname ## _ ## fieldname ## _MSGTYPE)
#define PB_SUBMSG_INFO_OPTIONAL(ltype, structname, fieldname) PB_SI ## ltype(structname ## _ ## fieldname ## _MSGTYPE)
#define PB_SUBMSG_INFO_ONEOF(ltype, structname, fieldname) PB_SUBMSG_INFO_ONEOF2(ltype, structname, PB_ONEOF_NAME(UNION, fieldname), PB_ONEOF_NAME(MEMBER, fieldname))
#define PB_SUBMSG_INFO_ONEOF2(ltype, structname, unionname, membername) PB_SUBMSG_INFO_ONEOF3(ltype, structname, unionname, membername)
#define PB_SUBMSG_INFO_ONEOF3(ltype, structname, unionname, membername) PB_SI ## ltype(structname ## _ ## unionname ## _ ## membername ## _MSGTYPE)
#define PB_SUBMSG_INFO_REPEATED(ltype, structname, fieldname) PB_SI ## ltype(structname ## _ ## fieldname ## _MSGTYPE)
#define PB_SUBMSG_INFO_FIXARRAY(ltype, structname, fieldname) PB_SI ## ltype(structname ## _ ## fieldname ## _MSGTYPE)
#define PB_SI_PB_LTYPE_BOOL(t)
#define PB_SI_PB_LTYPE_BYTES(t)
#define PB_SI_PB_LTYPE_DOUBLE(t)
#define PB_SI_PB_LTYPE_ENUM(t)
#define PB_SI_PB_LTYPE_UENUM(t)
#define PB_SI_PB_LTYPE_FIXED32(t)
#define PB_SI_PB_LTYPE_FIXED64(t)
#define PB_SI_PB_LTYPE_FLOAT(t)
#define PB_SI_PB_LTYPE_INT32(t)
#define PB_SI_PB_LTYPE_INT64(t)
#define PB_SI_PB_LTYPE_MESSAGE(t) PB_SUBMSG_DESCRIPTOR(t)
#define PB_SI_PB_LTYPE_MSG_W_CB(t) PB_SUBMSG_DESCRIPTOR(t)
#define PB_SI_PB_LTYPE_SFIXED32(t)
#define PB_SI_PB_LTYPE_SFIXED64(t)
#define PB_SI_PB_LTYPE_SINT32(t)
#define PB_SI_PB_LTYPE_SINT64(t)
#define PB_SI_PB_LTYPE_STRING(t)
#define PB_SI_PB_LTYPE_UINT32(t)
#define PB_SI_PB_LTYPE_UINT64(t)
#define PB_SI_PB_LTYPE_EXTENSION(t)
#define PB_SI_PB_LTYPE_FIXED_LENGTH_BYTES(t)
#define PB_SUBMSG_DESCRIPTOR(t) &(t ## _msg),
/* The field descriptors use a variable width format, with width of either
* 1, 2, 4 or 8 of 32-bit words. The two lowest bytes of the first byte always
* encode the descriptor size, 6 lowest bits of field tag number, and 8 bits
* of the field type.
*
* Descriptor size is encoded as 0 = 1 word, 1 = 2 words, 2 = 4 words, 3 = 8 words.
*
* Formats, listed starting with the least significant bit of the first word.
* 1 word: [2-bit len] [6-bit tag] [8-bit type] [8-bit data_offset] [4-bit size_offset] [4-bit data_size]
*
* 2 words: [2-bit len] [6-bit tag] [8-bit type] [12-bit array_size] [4-bit size_offset]
* [16-bit data_offset] [12-bit data_size] [4-bit tag>>6]
*
* 4 words: [2-bit len] [6-bit tag] [8-bit type] [16-bit array_size]
* [8-bit size_offset] [24-bit tag>>6]
* [32-bit data_offset]
* [32-bit data_size]
*
* 8 words: [2-bit len] [6-bit tag] [8-bit type] [16-bit reserved]
* [8-bit size_offset] [24-bit tag>>6]
* [32-bit data_offset]
* [32-bit data_size]
* [32-bit array_size]
* [32-bit reserved]
* [32-bit reserved]
* [32-bit reserved]
*/
#define PB_FIELDINFO_1(tag, type, data_offset, data_size, size_offset, array_size) \
(0 | (((tag) << 2) & 0xFF) | ((type) << 8) | (((uint32_t)(data_offset) & 0xFF) << 16) | \
(((uint32_t)(size_offset) & 0x0F) << 24) | (((uint32_t)(data_size) & 0x0F) << 28)),
#define PB_FIELDINFO_2(tag, type, data_offset, data_size, size_offset, array_size) \
(1 | (((tag) << 2) & 0xFF) | ((type) << 8) | (((uint32_t)(array_size) & 0xFFF) << 16) | (((uint32_t)(size_offset) & 0x0F) << 28)), \
(((uint32_t)(data_offset) & 0xFFFF) | (((uint32_t)(data_size) & 0xFFF) << 16) | (((uint32_t)(tag) & 0x3c0) << 22)),
#define PB_FIELDINFO_4(tag, type, data_offset, data_size, size_offset, array_size) \
(2 | (((tag) << 2) & 0xFF) | ((type) << 8) | (((uint32_t)(array_size) & 0xFFFF) << 16)), \
((uint32_t)(int_least8_t)(size_offset) | (((uint32_t)(tag) << 2) & 0xFFFFFF00)), \
(data_offset), (data_size),
#define PB_FIELDINFO_8(tag, type, data_offset, data_size, size_offset, array_size) \
(3 | (((tag) << 2) & 0xFF) | ((type) << 8)), \
((uint32_t)(int_least8_t)(size_offset) | (((uint32_t)(tag) << 2) & 0xFFFFFF00)), \
(data_offset), (data_size), (array_size), 0, 0, 0,
/* These assertions verify that the field information fits in the allocated space.
* The generator tries to automatically determine the correct width that can fit all
* data associated with a message. These asserts will fail only if there has been a
* problem in the automatic logic - this may be worth reporting as a bug. As a workaround,
* you can increase the descriptor width by defining PB_FIELDINFO_WIDTH or by setting
* descriptorsize option in .options file.
*/
#define PB_FITS(value,bits) ((uint32_t)(value) < ((uint32_t)1<<bits))
#define PB_FIELDINFO_ASSERT_1(tag, type, data_offset, data_size, size_offset, array_size) \
PB_STATIC_ASSERT(PB_FITS(tag,6) && PB_FITS(data_offset,8) && PB_FITS(size_offset,4) && PB_FITS(data_size,4) && PB_FITS(array_size,1), FIELDINFO_DOES_NOT_FIT_width1_field ## tag)
#define PB_FIELDINFO_ASSERT_2(tag, type, data_offset, data_size, size_offset, array_size) \
PB_STATIC_ASSERT(PB_FITS(tag,10) && PB_FITS(data_offset,16) && PB_FITS(size_offset,4) && PB_FITS(data_size,12) && PB_FITS(array_size,12), FIELDINFO_DOES_NOT_FIT_width2_field ## tag)
#ifndef PB_FIELD_32BIT
/* Maximum field sizes are still 16-bit if pb_size_t is 16-bit */
#define PB_FIELDINFO_ASSERT_4(tag, type, data_offset, data_size, size_offset, array_size) \
PB_STATIC_ASSERT(PB_FITS(tag,16) && PB_FITS(data_offset,16) && PB_FITS((int_least8_t)size_offset,8) && PB_FITS(data_size,16) && PB_FITS(array_size,16), FIELDINFO_DOES_NOT_FIT_width4_field ## tag)
#define PB_FIELDINFO_ASSERT_8(tag, type, data_offset, data_size, size_offset, array_size) \
PB_STATIC_ASSERT(PB_FITS(tag,16) && PB_FITS(data_offset,16) && PB_FITS((int_least8_t)size_offset,8) && PB_FITS(data_size,16) && PB_FITS(array_size,16), FIELDINFO_DOES_NOT_FIT_width8_field ## tag)
#else
/* Up to 32-bit fields supported.
* Note that the checks are against 31 bits to avoid compiler warnings about shift wider than type in the test.
* I expect that there is no reasonable use for >2GB messages with nanopb anyway.
*/
#define PB_FIELDINFO_ASSERT_4(tag, type, data_offset, data_size, size_offset, array_size) \
PB_STATIC_ASSERT(PB_FITS(tag,30) && PB_FITS(data_offset,31) && PB_FITS(size_offset,8) && PB_FITS(data_size,31) && PB_FITS(array_size,16), FIELDINFO_DOES_NOT_FIT_width4_field ## tag)
#define PB_FIELDINFO_ASSERT_8(tag, type, data_offset, data_size, size_offset, array_size) \
PB_STATIC_ASSERT(PB_FITS(tag,30) && PB_FITS(data_offset,31) && PB_FITS(size_offset,8) && PB_FITS(data_size,31) && PB_FITS(array_size,31), FIELDINFO_DOES_NOT_FIT_width8_field ## tag)
#endif
/* Automatic picking of FIELDINFO width:
* Uses width 1 when possible, otherwise resorts to width 2.
* This is used when PB_BIND() is called with "AUTO" as the argument.
* The generator will give explicit size argument when it knows that a message
* structure grows beyond 1-word format limits.
*/
#define PB_FIELDINFO_WIDTH_AUTO(atype, htype, ltype) PB_FI_WIDTH ## atype(htype, ltype)
#define PB_FI_WIDTH_PB_ATYPE_STATIC(htype, ltype) PB_FI_WIDTH ## htype(ltype)
#define PB_FI_WIDTH_PB_ATYPE_POINTER(htype, ltype) PB_FI_WIDTH ## htype(ltype)
#define PB_FI_WIDTH_PB_ATYPE_CALLBACK(htype, ltype) 2
#define PB_FI_WIDTH_PB_HTYPE_REQUIRED(ltype) PB_FI_WIDTH ## ltype
#define PB_FI_WIDTH_PB_HTYPE_SINGULAR(ltype) PB_FI_WIDTH ## ltype
#define PB_FI_WIDTH_PB_HTYPE_OPTIONAL(ltype) PB_FI_WIDTH ## ltype
#define PB_FI_WIDTH_PB_HTYPE_ONEOF(ltype) PB_FI_WIDTH ## ltype
#define PB_FI_WIDTH_PB_HTYPE_REPEATED(ltype) 2
#define PB_FI_WIDTH_PB_HTYPE_FIXARRAY(ltype) 2
#define PB_FI_WIDTH_PB_LTYPE_BOOL 1
#define PB_FI_WIDTH_PB_LTYPE_BYTES 2
#define PB_FI_WIDTH_PB_LTYPE_DOUBLE 1
#define PB_FI_WIDTH_PB_LTYPE_ENUM 1
#define PB_FI_WIDTH_PB_LTYPE_UENUM 1
#define PB_FI_WIDTH_PB_LTYPE_FIXED32 1
#define PB_FI_WIDTH_PB_LTYPE_FIXED64 1
#define PB_FI_WIDTH_PB_LTYPE_FLOAT 1
#define PB_FI_WIDTH_PB_LTYPE_INT32 1
#define PB_FI_WIDTH_PB_LTYPE_INT64 1
#define PB_FI_WIDTH_PB_LTYPE_MESSAGE 2
#define PB_FI_WIDTH_PB_LTYPE_MSG_W_CB 2
#define PB_FI_WIDTH_PB_LTYPE_SFIXED32 1
#define PB_FI_WIDTH_PB_LTYPE_SFIXED64 1
#define PB_FI_WIDTH_PB_LTYPE_SINT32 1
#define PB_FI_WIDTH_PB_LTYPE_SINT64 1
#define PB_FI_WIDTH_PB_LTYPE_STRING 2
#define PB_FI_WIDTH_PB_LTYPE_UINT32 1
#define PB_FI_WIDTH_PB_LTYPE_UINT64 1
#define PB_FI_WIDTH_PB_LTYPE_EXTENSION 1
#define PB_FI_WIDTH_PB_LTYPE_FIXED_LENGTH_BYTES 2
/* The mapping from protobuf types to LTYPEs is done using these macros. */
#define PB_LTYPE_MAP_BOOL PB_LTYPE_BOOL
#define PB_LTYPE_MAP_BYTES PB_LTYPE_BYTES
#define PB_LTYPE_MAP_DOUBLE PB_LTYPE_FIXED64
#define PB_LTYPE_MAP_ENUM PB_LTYPE_VARINT
#define PB_LTYPE_MAP_UENUM PB_LTYPE_UVARINT
#define PB_LTYPE_MAP_FIXED32 PB_LTYPE_FIXED32
#define PB_LTYPE_MAP_FIXED64 PB_LTYPE_FIXED64
#define PB_LTYPE_MAP_FLOAT PB_LTYPE_FIXED32
#define PB_LTYPE_MAP_INT32 PB_LTYPE_VARINT
#define PB_LTYPE_MAP_INT64 PB_LTYPE_VARINT
#define PB_LTYPE_MAP_MESSAGE PB_LTYPE_SUBMESSAGE
#define PB_LTYPE_MAP_MSG_W_CB PB_LTYPE_SUBMSG_W_CB
#define PB_LTYPE_MAP_SFIXED32 PB_LTYPE_FIXED32
#define PB_LTYPE_MAP_SFIXED64 PB_LTYPE_FIXED64
#define PB_LTYPE_MAP_SINT32 PB_LTYPE_SVARINT
#define PB_LTYPE_MAP_SINT64 PB_LTYPE_SVARINT
#define PB_LTYPE_MAP_STRING PB_LTYPE_STRING
#define PB_LTYPE_MAP_UINT32 PB_LTYPE_UVARINT
#define PB_LTYPE_MAP_UINT64 PB_LTYPE_UVARINT
#define PB_LTYPE_MAP_EXTENSION PB_LTYPE_EXTENSION
#define PB_LTYPE_MAP_FIXED_LENGTH_BYTES PB_LTYPE_FIXED_LENGTH_BYTES
/* These macros are used for giving out error messages.
* They are mostly a debugging aid; the main error information
* is the true/false return value from functions.
* Some code space can be saved by disabling the error
* messages if not used.
*
* PB_SET_ERROR() sets the error message if none has been set yet.
* msg must be a constant string literal.
* PB_GET_ERROR() always returns a pointer to a string.
* PB_RETURN_ERROR() sets the error and returns false from current
* function.
*/
#ifdef PB_NO_ERRMSG
#define PB_SET_ERROR(stream, msg) PB_UNUSED(stream)
#define PB_GET_ERROR(stream) "(errmsg disabled)"
#else
#define PB_SET_ERROR(stream, msg) (stream->errmsg = (stream)->errmsg ? (stream)->errmsg : (msg))
#define PB_GET_ERROR(stream) ((stream)->errmsg ? (stream)->errmsg : "(none)")
#endif
#define PB_RETURN_ERROR(stream, msg) return PB_SET_ERROR(stream, msg), false
#ifdef __cplusplus
} /* extern "C" */
#endif
#ifdef __cplusplus
#if __cplusplus >= 201103L
#define PB_CONSTEXPR constexpr
#else // __cplusplus >= 201103L
#define PB_CONSTEXPR
#endif // __cplusplus >= 201103L
#if __cplusplus >= 201703L
#define PB_INLINE_CONSTEXPR inline constexpr
#else // __cplusplus >= 201703L
#define PB_INLINE_CONSTEXPR PB_CONSTEXPR
#endif // __cplusplus >= 201703L
extern "C++"
{
namespace nanopb {
// Each type will be partially specialized by the generator.
template <typename GenMessageT> struct MessageDescriptor;
} // namespace nanopb
}
#endif /* __cplusplus */
#endif

49
BHBF_Robot_Washing_01/BASE/Inc/BSP/pb_common.h

@ -0,0 +1,49 @@
/* pb_common.h: Common support functions for pb_encode.c and pb_decode.c.
* These functions are rarely needed by applications directly.
*/
#ifndef PB_COMMON_H_INCLUDED
#define PB_COMMON_H_INCLUDED
#include "../../BASE/Inc/BSP/pb.h"
#ifdef __cplusplus
extern "C" {
#endif
/* Initialize the field iterator structure to beginning.
* Returns false if the message type is empty. */
bool pb_field_iter_begin(pb_field_iter_t *iter, const pb_msgdesc_t *desc, void *message);
/* Get a field iterator for extension field. */
bool pb_field_iter_begin_extension(pb_field_iter_t *iter, pb_extension_t *extension);
/* Same as pb_field_iter_begin(), but for const message pointer.
* Note that the pointers in pb_field_iter_t will be non-const but shouldn't
* be written to when using these functions. */
bool pb_field_iter_begin_const(pb_field_iter_t *iter, const pb_msgdesc_t *desc, const void *message);
bool pb_field_iter_begin_extension_const(pb_field_iter_t *iter, const pb_extension_t *extension);
/* Advance the iterator to the next field.
* Returns false when the iterator wraps back to the first field. */
bool pb_field_iter_next(pb_field_iter_t *iter);
/* Advance the iterator until it points at a field with the given tag.
* Returns false if no such field exists. */
bool pb_field_iter_find(pb_field_iter_t *iter, uint32_t tag);
/* Find a field with type PB_LTYPE_EXTENSION, or return false if not found.
* There can be only one extension range field per message. */
bool pb_field_iter_find_extension(pb_field_iter_t *iter);
#ifdef PB_VALIDATE_UTF8
/* Validate UTF-8 text string */
bool pb_validate_utf8(const char *s);
#endif
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif

193
BHBF_Robot_Washing_01/BASE/Inc/BSP/pb_decode.h

@ -0,0 +1,193 @@
/* pb_decode.h: Functions to decode protocol buffers. Depends on pb_decode.c.
* The main function is pb_decode. You also need an input stream, and the
* field descriptions created by nanopb_generator.py.
*/
#ifndef PB_DECODE_H_INCLUDED
#define PB_DECODE_H_INCLUDED
#include "../../BASE/Inc/BSP/pb.h"
#ifdef __cplusplus
extern "C" {
#endif
/* Structure for defining custom input streams. You will need to provide
* a callback function to read the bytes from your storage, which can be
* for example a file or a network socket.
*
* The callback must conform to these rules:
*
* 1) Return false on IO errors. This will cause decoding to abort.
* 2) You can use state to store your own data (e.g. buffer pointer),
* and rely on pb_read to verify that no-body reads past bytes_left.
* 3) Your callback may be used with substreams, in which case bytes_left
* is different than from the main stream. Don't use bytes_left to compute
* any pointers.
*/
struct pb_istream_s
{
#ifdef PB_BUFFER_ONLY
/* Callback pointer is not used in buffer-only configuration.
* Having an int pointer here allows binary compatibility but
* gives an error if someone tries to assign callback function.
*/
int *callback;
#else
bool (*callback)(pb_istream_t *stream, pb_byte_t *buf, size_t count);
#endif
void *state; /* Free field for use by callback implementation */
size_t bytes_left;
#ifndef PB_NO_ERRMSG
const char *errmsg;
#endif
};
#ifndef PB_NO_ERRMSG
#define PB_ISTREAM_EMPTY {0,0,0,0}
#else
#define PB_ISTREAM_EMPTY {0,0,0}
#endif
/***************************
* Main decoding functions *
***************************/
/* Decode a single protocol buffers message from input stream into a C structure.
* Returns true on success, false on any failure.
* The actual struct pointed to by dest must match the description in fields.
* Callback fields of the destination structure must be initialized by caller.
* All other fields will be initialized by this function.
*
* Example usage:
* MyMessage msg = {};
* uint8_t buffer[64];
* pb_istream_t stream;
*
* // ... read some data into buffer ...
*
* stream = pb_istream_from_buffer(buffer, count);
* pb_decode(&stream, MyMessage_fields, &msg);
*/
bool pb_decode(pb_istream_t *stream, const pb_msgdesc_t *fields, void *dest_struct);
/* Extended version of pb_decode, with several options to control
* the decoding process:
*
* PB_DECODE_NOINIT: Do not initialize the fields to default values.
* This is slightly faster if you do not need the default
* values and instead initialize the structure to 0 using
* e.g. memset(). This can also be used for merging two
* messages, i.e. combine already existing data with new
* values.
*
* PB_DECODE_DELIMITED: Input message starts with the message size as varint.
* Corresponds to parseDelimitedFrom() in Google's
* protobuf API.
*
* PB_DECODE_NULLTERMINATED: Stop reading when field tag is read as 0. This allows
* reading null terminated messages.
* NOTE: Until nanopb-0.4.0, pb_decode() also allows
* null-termination. This behaviour is not supported in
* most other protobuf implementations, so PB_DECODE_DELIMITED
* is a better option for compatibility.
*
* Multiple flags can be combined with bitwise or (| operator)
*/
#define PB_DECODE_NOINIT 0x01U
#define PB_DECODE_DELIMITED 0x02U
#define PB_DECODE_NULLTERMINATED 0x04U
bool pb_decode_ex(pb_istream_t *stream, const pb_msgdesc_t *fields, void *dest_struct, unsigned int flags);
/* Defines for backwards compatibility with code written before nanopb-0.4.0 */
#define pb_decode_noinit(s,f,d) pb_decode_ex(s,f,d, PB_DECODE_NOINIT)
#define pb_decode_delimited(s,f,d) pb_decode_ex(s,f,d, PB_DECODE_DELIMITED)
#define pb_decode_delimited_noinit(s,f,d) pb_decode_ex(s,f,d, PB_DECODE_DELIMITED | PB_DECODE_NOINIT)
#define pb_decode_nullterminated(s,f,d) pb_decode_ex(s,f,d, PB_DECODE_NULLTERMINATED)
/* Release any allocated pointer fields. If you use dynamic allocation, you should
* call this for any successfully decoded message when you are done with it. If
* pb_decode() returns with an error, the message is already released.
*/
void pb_release(const pb_msgdesc_t *fields, void *dest_struct);
/**************************************
* Functions for manipulating streams *
**************************************/
/* Create an input stream for reading from a memory buffer.
*
* msglen should be the actual length of the message, not the full size of
* allocated buffer.
*
* Alternatively, you can use a custom stream that reads directly from e.g.
* a file or a network socket.
*/
pb_istream_t pb_istream_from_buffer(const pb_byte_t *buf, size_t msglen);
/* Function to read from a pb_istream_t. You can use this if you need to
* read some custom header data, or to read data in field callbacks.
*/
bool pb_read(pb_istream_t *stream, pb_byte_t *buf, size_t count);
/************************************************
* Helper functions for writing field callbacks *
************************************************/
/* Decode the tag for the next field in the stream. Gives the wire type and
* field tag. At end of the message, returns false and sets eof to true. */
bool pb_decode_tag(pb_istream_t *stream, pb_wire_type_t *wire_type, uint32_t *tag, bool *eof);
/* Skip the field payload data, given the wire type. */
bool pb_skip_field(pb_istream_t *stream, pb_wire_type_t wire_type);
/* Decode an integer in the varint format. This works for enum, int32,
* int64, uint32 and uint64 field types. */
#ifndef PB_WITHOUT_64BIT
bool pb_decode_varint(pb_istream_t *stream, uint64_t *dest);
#else
#define pb_decode_varint pb_decode_varint32
#endif
/* Decode an integer in the varint format. This works for enum, int32,
* and uint32 field types. */
bool pb_decode_varint32(pb_istream_t *stream, uint32_t *dest);
/* Decode a bool value in varint format. */
bool pb_decode_bool(pb_istream_t *stream, bool *dest);
/* Decode an integer in the zig-zagged svarint format. This works for sint32
* and sint64. */
#ifndef PB_WITHOUT_64BIT
bool pb_decode_svarint(pb_istream_t *stream, int64_t *dest);
#else
bool pb_decode_svarint(pb_istream_t *stream, int32_t *dest);
#endif
/* Decode a fixed32, sfixed32 or float value. You need to pass a pointer to
* a 4-byte wide C variable. */
bool pb_decode_fixed32(pb_istream_t *stream, void *dest);
#ifndef PB_WITHOUT_64BIT
/* Decode a fixed64, sfixed64 or double value. You need to pass a pointer to
* a 8-byte wide C variable. */
bool pb_decode_fixed64(pb_istream_t *stream, void *dest);
#endif
#ifdef PB_CONVERT_DOUBLE_FLOAT
/* Decode a double value into float variable. */
bool pb_decode_double_as_float(pb_istream_t *stream, float *dest);
#endif
/* Make a limited-length substream for reading a PB_WT_STRING field. */
bool pb_make_string_substream(pb_istream_t *stream, pb_istream_t *substream);
bool pb_close_string_substream(pb_istream_t *stream, pb_istream_t *substream);
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif

185
BHBF_Robot_Washing_01/BASE/Inc/BSP/pb_encode.h

@ -0,0 +1,185 @@
/* pb_encode.h: Functions to encode protocol buffers. Depends on pb_encode.c.
* The main function is pb_encode. You also need an output stream, and the
* field descriptions created by nanopb_generator.py.
*/
#ifndef PB_ENCODE_H_INCLUDED
#define PB_ENCODE_H_INCLUDED
#include "../../BASE/Inc/BSP/pb.h"
#ifdef __cplusplus
extern "C" {
#endif
/* Structure for defining custom output streams. You will need to provide
* a callback function to write the bytes to your storage, which can be
* for example a file or a network socket.
*
* The callback must conform to these rules:
*
* 1) Return false on IO errors. This will cause encoding to abort.
* 2) You can use state to store your own data (e.g. buffer pointer).
* 3) pb_write will update bytes_written after your callback runs.
* 4) Substreams will modify max_size and bytes_written. Don't use them
* to calculate any pointers.
*/
struct pb_ostream_s
{
#ifdef PB_BUFFER_ONLY
/* Callback pointer is not used in buffer-only configuration.
* Having an int pointer here allows binary compatibility but
* gives an error if someone tries to assign callback function.
* Also, NULL pointer marks a 'sizing stream' that does not
* write anything.
*/
const int *callback;
#else
bool (*callback)(pb_ostream_t *stream, const pb_byte_t *buf, size_t count);
#endif
void *state; /* Free field for use by callback implementation. */
size_t max_size; /* Limit number of output bytes written (or use SIZE_MAX). */
size_t bytes_written; /* Number of bytes written so far. */
#ifndef PB_NO_ERRMSG
const char *errmsg;
#endif
};
/***************************
* Main encoding functions *
***************************/
/* Encode a single protocol buffers message from C structure into a stream.
* Returns true on success, false on any failure.
* The actual struct pointed to by src_struct must match the description in fields.
* All required fields in the struct are assumed to have been filled in.
*
* Example usage:
* MyMessage msg = {};
* uint8_t buffer[64];
* pb_ostream_t stream;
*
* msg.field1 = 42;
* stream = pb_ostream_from_buffer(buffer, sizeof(buffer));
* pb_encode(&stream, MyMessage_fields, &msg);
*/
bool pb_encode(pb_ostream_t *stream, const pb_msgdesc_t *fields, const void *src_struct);
/* Extended version of pb_encode, with several options to control the
* encoding process:
*
* PB_ENCODE_DELIMITED: Prepend the length of message as a varint.
* Corresponds to writeDelimitedTo() in Google's
* protobuf API.
*
* PB_ENCODE_NULLTERMINATED: Append a null byte to the message for termination.
* NOTE: This behaviour is not supported in most other
* protobuf implementations, so PB_ENCODE_DELIMITED
* is a better option for compatibility.
*/
#define PB_ENCODE_DELIMITED 0x02U
#define PB_ENCODE_NULLTERMINATED 0x04U
bool pb_encode_ex(pb_ostream_t *stream, const pb_msgdesc_t *fields, const void *src_struct, unsigned int flags);
/* Defines for backwards compatibility with code written before nanopb-0.4.0 */
#define pb_encode_delimited(s,f,d) pb_encode_ex(s,f,d, PB_ENCODE_DELIMITED)
#define pb_encode_nullterminated(s,f,d) pb_encode_ex(s,f,d, PB_ENCODE_NULLTERMINATED)
/* Encode the message to get the size of the encoded data, but do not store
* the data. */
bool pb_get_encoded_size(size_t *size, const pb_msgdesc_t *fields, const void *src_struct);
/**************************************
* Functions for manipulating streams *
**************************************/
/* Create an output stream for writing into a memory buffer.
* The number of bytes written can be found in stream.bytes_written after
* encoding the message.
*
* Alternatively, you can use a custom stream that writes directly to e.g.
* a file or a network socket.
*/
pb_ostream_t pb_ostream_from_buffer(pb_byte_t *buf, size_t bufsize);
/* Pseudo-stream for measuring the size of a message without actually storing
* the encoded data.
*
* Example usage:
* MyMessage msg = {};
* pb_ostream_t stream = PB_OSTREAM_SIZING;
* pb_encode(&stream, MyMessage_fields, &msg);
* printf("Message size is %d\n", stream.bytes_written);
*/
#ifndef PB_NO_ERRMSG
#define PB_OSTREAM_SIZING {0,0,0,0,0}
#else
#define PB_OSTREAM_SIZING {0,0,0,0}
#endif
/* Function to write into a pb_ostream_t stream. You can use this if you need
* to append or prepend some custom headers to the message.
*/
bool pb_write(pb_ostream_t *stream, const pb_byte_t *buf, size_t count);
/************************************************
* Helper functions for writing field callbacks *
************************************************/
/* Encode field header based on type and field number defined in the field
* structure. Call this from the callback before writing out field contents. */
bool pb_encode_tag_for_field(pb_ostream_t *stream, const pb_field_iter_t *field);
/* Encode field header by manually specifying wire type. You need to use this
* if you want to write out packed arrays from a callback field. */
bool pb_encode_tag(pb_ostream_t *stream, pb_wire_type_t wiretype, uint32_t field_number);
/* Encode an integer in the varint format.
* This works for bool, enum, int32, int64, uint32 and uint64 field types. */
#ifndef PB_WITHOUT_64BIT
bool pb_encode_varint(pb_ostream_t *stream, uint64_t value);
#else
bool pb_encode_varint(pb_ostream_t *stream, uint32_t value);
#endif
/* Encode an integer in the zig-zagged svarint format.
* This works for sint32 and sint64. */
#ifndef PB_WITHOUT_64BIT
bool pb_encode_svarint(pb_ostream_t *stream, int64_t value);
#else
bool pb_encode_svarint(pb_ostream_t *stream, int32_t value);
#endif
/* Encode a string or bytes type field. For strings, pass strlen(s) as size. */
bool pb_encode_string(pb_ostream_t *stream, const pb_byte_t *buffer, size_t size);
/* Encode a fixed32, sfixed32 or float value.
* You need to pass a pointer to a 4-byte wide C variable. */
bool pb_encode_fixed32(pb_ostream_t *stream, const void *value);
#ifndef PB_WITHOUT_64BIT
/* Encode a fixed64, sfixed64 or double value.
* You need to pass a pointer to a 8-byte wide C variable. */
bool pb_encode_fixed64(pb_ostream_t *stream, const void *value);
#endif
#ifdef PB_CONVERT_DOUBLE_FLOAT
/* Encode a float value so that it appears like a double in the encoded
* message. */
bool pb_encode_float_as_double(pb_ostream_t *stream, float value);
#endif
/* Encode a submessage field.
* You need to pass the pb_field_t array and pointer to struct, just like
* with pb_encode(). This internally encodes the submessage twice, first to
* calculate message size and then to actually write it out.
*/
bool pb_encode_submessage(pb_ostream_t *stream, const pb_msgdesc_t *fields, const void *src_struct);
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif

38
BHBF_Robot_Washing_01/BASE/Inc/BSP/readme.h

@ -0,0 +1,38 @@
/*
* readme.h
*
* Created on: 20231031
* Author: shiya
*
* CAN_H7_Bootloader程序存放位置
* FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 128K
* APP的存放位置为
* FLASH (rx) : ORIGIN = 0x08020000, LENGTH = 896K
* APP的中断向量表设置为
* define VECT_TAB_OFFSET 0x00020000U
*
* Boot顺序CAN总线2
* Boot程序总线返回报文ID0x1FF
* 1. Boot启动1
* 2. 100ms0x1100x55 BootLoader程序 A
* 3. bootloader请求3APP
*
* A. bootloader程序2
* ID为0x222canbootloader.lua
* B. 4canbootloader.lua
*
* C. 3APP
* PV
* CV CV中有PV
* GV
* IV
*
*/
#ifndef INC_BSP_README_H_
#define INC_BSP_README_H_
#endif /* INC_BSP_README_H_ */

309
BHBF_Robot_Washing_01/BASE/Inc/MSP/SteerEngine/msp_fashion_star_uart_servo.h

@ -0,0 +1,309 @@
/*
* msp_fashion_star_uart_servo.h
*
* Created on: Jul 29, 2024
* Author: akeguo
*/
#ifndef SRC_MSP_MSP_FASHION_STAR_UART_SERVO_H_
#define SRC_MSP_MSP_FASHION_STAR_UART_SERVO_H_
#include "usart.h"
#include "msp_ring_buffer.h"
void FSUS_QueryServoAngle(uint8_t servo_id, uint8_t *sendbytes, uint8_t *length);
// FSUS通信协议
// 注: FSUS是Fashion Star Uart Servo的缩写
// 串口通讯超时设置
#define FSUS_TIMEOUT_MS 100
// 舵机用户自定义数据块的大小 单位Byte
#define FSUS_SERVO_BATCH_DATA_SIZE 32
// 返回的响应数据包最长的长度
#define FSUS_PACK_RESPONSE_MAX_SIZE 50
// 在串口舵机的通信系统设计里, 使用的字节序为Little Endian(低字节序/小端格式)
// STM32系统的数值存储模式就是Little Endian
// 所以0x4c12 这个数值, 在实际发送的时候低位会在前面 0x12, 0x4c
#define FSUS_PACK_REQUEST_HEADER 0x4c12
#define FSUS_PACK_RESPONSE_HEADER 0x1c05
// FSUS控制指令数据
// 注: 一下所有的指令都是针对单个舵机的
#define FSUS_CMD_NUM 17
#define FSUS_CMD_PING 1 // 舵机通讯检测
#define FSUS_CMD_RESET_USER_DATA 2 // 重置用户数据
#define FSUS_CMD_READ_DATA 3 // 单个舵机 读取数据库
#define FSUS_CMD_WRITE_DATA 4 // 单个舵机 写入数据块
#define FSUS_CMD_READ_BATCH_DATA 5 // 单个舵机 批次读取(读取一个舵机所有的数据)
#define FSUS_CMD_WRITE_BATCH_DATA 6 // 单个舵机 批次写入(写入一个舵机所有的数据)
#define FSUS_CMD_SPIN 7 // 单个舵机 设置轮式模式
#define FSUS_CMD_ROTATE 8 // 角度控制模式(设置舵机的角度))
#define FSUS_CMD_DAMPING 9 // 阻尼模式
#define FSUS_CMD_READ_ANGLE 10 // 舵机角度读取
#define FSUS_CMD_SET_SERVO_ANGLE_BY_INTERVAL 11 // 角度设置(指定周期)
#define FSUS_CMD_SET_SERVO_ANGLE_BY_VELOCITY 12 // 角度设置(指定转速)
#define FSUS_CMD_SET_SERVO_ANGLE_MTURN 13 // 多圈角度设置
#define FSUS_CMD_SET_SERVO_ANGLE_MTURN_BY_INTERVAL 14 // 多圈角度设置(指定周期)
#define FSUS_CMD_SET_SERVO_ANGLE_MTURN_BY_VELOCITY 15 // 多圈角度设置(指定转速)
#define FSUS_CMD_QUERY_SERVO_ANGLE_MTURN 16 // 查询舵机角度(多圈)
// FSUS状态码
#define FSUS_STATUS uint8_t
#define FSUS_STATUS_SUCCESS 0 // 设置/读取成功
#define FSUS_STATUS_FAIL 1 // 设置/读取失败
#define FSUS_STATUS_TIMEOUT 2 // 等待超时
#define FSUS_STATUS_WRONG_RESPONSE_HEADER 3 // 响应头不对
#define FSUS_STATUS_UNKOWN_CMD_ID 4 // 未知的控制指令
#define FSUS_STATUS_SIZE_TOO_BIG 5 // 参数的size大于FSUS_PACK_RESPONSE_MAX_SIZE里面的限制
#define FSUS_STATUS_CHECKSUM_ERROR 6 // 校验和错误
#define FSUS_STATUS_ID_NOT_MATCH 7 // 请求的舵机ID跟反馈回来的舵机ID不匹配
// 静止状态判断条件
#define FSUS_ANGLE_DEADAREA 1.0f // 电机角度死区
#define FSUS_WAIT_COUNT_MAX 10000 // 等待重复查询角度的最大次数
/* 舵机用户自定义参数的数据ID及使用说明 (可度也可写)*/
/* 此项设置同时具备两个功能
*
* 1. interruptable?
* 2. ?
* 0x00()
* ,
*
* 0x01
* ,
* 1,
* ,
*
*/
#define FSUS_PARAM_RESPONSE_SWITCH 33
/*
* ID号, ( 1)
* 0-254
* 255广 广PING指令中使用
*/
#define FSUS_PARAM_SERVO_ID 34
/*
* ID ( 1)
* [0x01,0x07] , 0x05
* 0x01-9600,
* 0x02-19200,
* 0x03-38400,
* 0x04-57600,
* 0x05-115200 (),
* 0x06-250000,
* 0x07-500000,
*
*/
#define FSUS_PARAM_BAUDRATE 36
/* 舵机保护值相关设置, 超过阈值舵机就进入保护模式 */
/*
* ( 1)
* 0x00-1
* 0x01-2
*/
#define FSUS_PARAM_STALL_PROTECT 37
/* 舵机堵转功率上限, (单位mW) (字节长度 2) */
#define FSUS_PARAM_STALL_POWER_LIMIT 38
/* 舵机电压下限 (单位mV) (字节长度 2) */
#define FSUS_PARAM_OVER_VOLT_LOW 39
/* 舵机电压上限 (单位mV) (字节长度 2) */
#define FSUS_PARAM_OVER_VOLT_HIGH 40
/* 舵机温度上限 (单位 摄氏度) (字节长度 2) */
#define FSUS_PARAM_OVER_TEMPERATURE 41
/* 舵机功率上限 (单位mW) (字节长度 2) */
#define FSUS_PARAM_OVER_POWER 42
/* 舵机电流上限 (单位mA) (字节长度 2) */
#define FSUS_PARAM_OVER_CURRENT 43
/*
* ( 1)
* 0x00 ()
* 0x01 ()
* ,t推算加速度a
* 1/4
* 1/2
* 1/4
*/
#define FSUS_PARAM_ACCEL_SWITCH 44
/*
* ( 1)
* 0x00 ()
* 0x11
*/
#define FSUS_PARAM_POWER_ON_LOCK_SWITCH 46
/*
* [] ( 1)
* 0x00 ()
* 0x01
*/
#define FSUS_PARAM_WHEEL_MODE_BRAKE_SWITCH 47
/*
* [] ( 1)
* 0x00
* 0x01
* : ,
*/
#define FSUS_PARAM_ANGLE_LIMIT_SWITCH 48
/*
* [] ( 1)
* 0x00
* 0x01
*
*
*/
#define FSUS_PARAM_SOFT_START_SWITCH 49
/*
* [] (ms)( 2)
* : 0x0bb8
*/
#define FSUS_PARAM_SOFT_START_TIME 50
/*
* [] (0.1)( 2)
*/
#define FSUS_PARAM_ANGLE_LIMIT_HIGH 51
/*
* [] (0.1)( 2)
*/
#define FSUS_PARAM_ANGLE_LIMIT_LOW 52
/*
* [] (0.1)( 2)
*/
#define FSUS_PARAM_ANGLE_MID_OFFSET 53
// 帧头接收完成的标志位
#define FSUS_RECV_FLAG_HEADER 0x01
// 控制指令接收完成的标志位
#define FSUS_RECV_FLAG_CMD_ID 0x02
// 内容长度接收完成的标志位
#define FSUS_RECV_FLAG_SIZE 0x04
// 内容接收完成的标志位
#define FSUS_RECV_FLAG_CONTENT 0x08
// 校验和接收的标志位
#define FSUS_RECV_FLAG_CHECKSUM 0x10
// 轮式模式参数定义
// Bit 0 是否运行
#define FSUS_SPIN_METHOD_STOP 0x00 // 轮子停止旋转
#define FSUS_SPIN_METHOD_START 0x01 // 轮子旋转
#define FSUS_SPIN_METHOD_CIRCLE 0x02 // 轮子定圈
#define FSUS_SPIN_METHOD_TIME 0x03 // 轮子定时
#define FSUS_SPIN_METHOD_CCW 0x00 // 轮子逆时针旋转
#define FSUS_SPIN_METHOD_CW 0x80 // 轮子顺时针旋转
// 串口舵机用户自定义设置
// 是否开启响应模式
#define FSUS_IS_RESPONSE_ON 0
// 请求数据帧的结构体
typedef struct
{
uint16_t header; // 请求头
uint8_t cmdId; // 指令ID号
uint8_t size; // 包的长度
uint8_t content[FSUS_PACK_RESPONSE_MAX_SIZE]; // 包的内容
uint8_t checksum; // 校验和
// 用于帧的接收
// 数据帧的接收状态 flag标志位
uint8_t status;
} PackageTypeDef;
// 数据帧转换为字节数组
void FSUS_Package2RingBuffer(PackageTypeDef *pkg, RingBufferTypeDef *ringBuf);
// 销毁数据帧 (释放数据帧申请的内存)
void FSUS_DestroyPackage(PackageTypeDef *pkg);
// 计算校验和
uint8_t FSUS_CalcChecksum(PackageTypeDef *pkg);
// 判断是否为有效的请求头的
FSUS_STATUS FSUS_IsValidResponsePackage(PackageTypeDef *pkg);
// 字节数组转换为数据帧
FSUS_STATUS FSUS_RingBuffer2Package(RingBufferTypeDef *ringBuf,
PackageTypeDef *pkg);
// 构造发送数据帧
//void FSUS_SendPackage(Usart_DataTypeDef *usart, uint8_t cmdId, uint8_t size, uint8_t *content);
// 接收数据帧 (在接收的时候动态的申请内存)
//FSUS_STATUS FSUS_RecvPackage(Usart_DataTypeDef *usart, PackageTypeDef *pkg);
// 舵机通讯检测
// 注: 如果没有舵机响应这个Ping指令的话, 就会超时
//FSUS_STATUS FSUS_Ping(Usart_DataTypeDef *usart, uint8_t servo_id);
// 重置舵机的用户资料
//FSUS_STATUS FSUS_ResetUserData(Usart_DataTypeDef *usart, uint8_t servo_id);
// 读取数据
//FSUS_STATUS FSUS_ReadData(Usart_DataTypeDef *usart, uint8_t servo_id, uint8_t address, uint8_t *value, uint8_t *size);
// 写入数据
//FSUS_STATUS FSUS_WriteData(Usart_DataTypeDef *usart, uint8_t servo_id, uint8_t address, uint8_t *value, uint8_t size);
// 读取单个舵机所有的资料信息(注: 未实现)
// 写入单个舵机所有的资料信息(注: 未实现)
// 批次写入过于麻烦, 用户手动配置单个舵机就得写至少32行参数设置代码
// 而且不同的控制模式, 有些是不需要设置的.
// 推荐单项设置
/*
*
* speed单位 °/s
*/
//FSUS_STATUS FSUS_WheelMove(Usart_DataTypeDef *usart, uint8_t servo_id, uint8_t method, uint16_t speed, uint16_t value);
// 轮式模式, 舵机停止转动
FSUS_STATUS FSUS_WheelStop(uint8_t servo_id, uint8_t *sendbytes,
uint8_t *length);
// 轮式模式
FSUS_STATUS FSUS_WheelKeepMove(uint8_t servo_id, uint8_t is_cw, uint16_t speed,
uint8_t *sendbytes, uint8_t *length);
// 轮式模式 按照特定的速度旋转特定的时间
//FSUS_STATUS FSUS_WheelMoveTime(Usart_DataTypeDef *usart, uint8_t servo_id, uint8_t is_cw, uint16_t speed, uint16_t nTime);
// 轮式模式 旋转特定的圈数
//FSUS_STATUS FSUS_WheelMoveNCircle(Usart_DataTypeDef *usart, uint8_t servo_id, uint8_t is_cw, uint16_t speed, uint16_t nCircle);
// 设置舵机的角度
// @angle 单位度
// @interval 单位ms
// @power 舵机执行功率 单位mW
// 若power=0或者大于保护值
//FSUS_STATUS FSUS_SetServoAngle(Usart_DataTypeDef *usart, uint8_t servo_id, float angle, uint16_t interval, uint16_t power, uint8_t wait);
/* 设置舵机的角度(指定周期) */
//FSUS_STATUS FSUS_SetServoAngleByInterval(Usart_DataTypeDef *usart, uint8_t servo_id, \
float angle, uint16_t interval, uint16_t t_acc, \
uint16_t t_dec, uint16_t power, uint8_t wait);
/* 设置舵机的角度(指定转速) */
//FSUS_STATUS FSUS_SetServoAngleByVelocity(Usart_DataTypeDef *usart, uint8_t servo_id, \
float angle, float velocity, uint16_t t_acc, \
uint16_t t_dec, uint16_t power, uint8_t wait);
/* 查询单个舵机的角度信息 angle 单位度 */
//FSUS_STATUS FSUS_QueryServoAngle(Usart_DataTypeDef *usart, uint8_t servo_id, float *angle);
/* 设置舵机的角度(多圈模式) */
//FSUS_STATUS FSUS_SetServoAngleMTurn(Usart_DataTypeDef *usart, uint8_t servo_id, float angle, \
uint32_t interval, uint16_t power, uint8_t wait);
/* 设置舵机的角度(多圈模式, 指定周期) */
//FSUS_STATUS FSUS_SetServoAngleMTurnByInterval(Usart_DataTypeDef *usart, uint8_t servo_id, float angle, \
uint32_t interval, uint16_t t_acc, uint16_t t_dec, uint16_t power, uint8_t wait);
/* 设置舵机的角度(多圈模式, 指定转速) */
//FSUS_STATUS FSUS_SetServoAngleMTurnByVelocity(Usart_DataTypeDef *usart, uint8_t servo_id, float angle, \
float velocity, uint16_t t_acc, uint16_t t_dec, uint16_t power, uint8_t wait);
/* 查询舵机的角度(多圈模式) */
//FSUS_STATUS FSUS_QueryServoAngleMTurn(Usart_DataTypeDef *usart, uint8_t servo_id, float *angle);
/* 舵机阻尼模式 */
//FSUS_STATUS FSUS_DampingMode(Usart_DataTypeDef *usart, uint8_t servo_id, uint16_t power);
/* 等待电机旋转到特定的位置 */
//FSUS_STATUS FSUS_Wait(Usart_DataTypeDef *usart, uint8_t servo_id, float target_angle, uint8_t is_mturn);
FSUS_STATUS FSUS_SetServoAngle(uint8_t servo_id, float angle, uint16_t interval,
uint16_t power, uint8_t wait, uint8_t *sendbytes, uint8_t *length);
#endif /* SRC_MSP_MSP_FASHION_STAR_UART_SERVO_H_ */

82
BHBF_Robot_Washing_01/BASE/Inc/MSP/SteerEngine/msp_ring_buffer.h

@ -0,0 +1,82 @@
/*
* msp_ring_buffer.h
*
* Created on: Jul 29, 2024
* Author: akeguo
*/
#ifndef INC_MSP_MSP_RING_BUFFER_H_
#define INC_MSP_MSP_RING_BUFFER_H_
//#include "sys.h"
#include "stdint.h"
#include<stdio.h>
#include <string.h>
#include <stdlib.h>
// 环形队列结构体
typedef struct
{
uint8_t *buffer; // 缓冲区
uint16_t head; // 队首指针
uint16_t tail; // 队尾指针
uint16_t size; // 环形队列的尺寸
} RingBufferTypeDef;
// 创建队列
void RingBuffer_Init(RingBufferTypeDef *ringBuf, uint16_t capacity,
uint8_t *buffer);
// 队列重置
void RingBuffer_Reset(RingBufferTypeDef *ringBuf);
// 销毁队列
void RingBuffer_Destory(RingBufferTypeDef *ringBuf);
// 获取队列的容量
uint16_t RingBuffer_GetCapacity(RingBufferTypeDef *ringBuf);
// 获取环形队列已经存好的字节数
uint16_t RingBuffer_GetByteUsed(RingBufferTypeDef *ringBuf);
// 获取队列的剩余的空闲字节
uint16_t RingBuffer_GetByteFree(RingBufferTypeDef *ringBuf);
// 队列是否为空
uint8_t RingBuffer_IsEmpty(RingBufferTypeDef *ringBuf);
// 队列是否已满
uint8_t RingBuffer_IsFull(RingBufferTypeDef *ringBuf);
// 根据索引号读取第i个元素
uint8_t RingBuffer_GetValueByIndex(RingBufferTypeDef *ringBuf, uint16_t index);
// 弹出队首元素
uint8_t RingBuffer_Pop(RingBufferTypeDef *ringBuf);
// 读取单个字节
uint8_t RingBuffer_ReadByte(RingBufferTypeDef *ringBuf);
// 读取字节数组
void RingBuffer_ReadByteArray(RingBufferTypeDef *ringBuf, uint8_t *dest,
uint16_t size);
// 读取有符号Short整数(两个字节)
int16_t RingBuffer_ReadShort(RingBufferTypeDef *ringBuf);
// 读取无符号Short整数(两个字节)
uint16_t RingBuffer_ReadUShort(RingBufferTypeDef *ringBuf);
// 读取有符号Long类型的整数(四个字节)
int32_t RingBuffer_ReadLong(RingBufferTypeDef *ringBuf);
// 读取无符号Long类型的整数(四个字节)
uint32_t RingBuffer_ReadULong(RingBufferTypeDef *ringBuf);
// 读取浮点数(四个字节)
float RingBuffer_ReadFloat(RingBufferTypeDef *ringBuf);
// 写入队尾元素
void RingBuffer_Push(RingBufferTypeDef *ringBuf, uint8_t value);
// 写入单个字节
void RingBuffer_WriteByte(RingBufferTypeDef *ringBuf, uint8_t value);
// 写入字节数组
void RingBuffer_WriteByteArray(RingBufferTypeDef *ringBuf, uint8_t *src,
uint16_t size);
// 写入有符号Short整数(两个字节)
void RingBuffer_WriteShort(RingBufferTypeDef *ringBuf, int16_t value);
// 写入无符号Short整数(两个字节)
void RingBuffer_WriteUShort(RingBufferTypeDef *ringBuf, uint16_t value);
// 写入有符号Long类型的整数(四个字节)
void RingBuffer_WriteLong(RingBufferTypeDef *ringBuf, int32_t value);
// 写入无符号Long类型的整数(四个字节)
void RingBuffer_WriteULong(RingBufferTypeDef *ringBuf, uint32_t value);
// 写入浮点数(四个字节)
void RingBuffer_WriteFloat(RingBufferTypeDef *ringBuf, float value);
// 计算缓冲区所有自己的校验和()
uint8_t RingBuffer_GetChecksum(RingBufferTypeDef *ringBuf);
#endif /* INC_MSP_MSP_RING_BUFFER_H_ */

27
BHBF_Robot_Washing_01/BASE/Inc/MSP/msp_Angle_Encoder_YL159.h

@ -0,0 +1,27 @@
/*
* msp_Angle_Encoder_YL159.h
*
* Created on: Jul 24, 2024
* Author: akeguo
*/
#ifndef INC_MSP_MSP_ANGLE_ENCODER_YL159_H_
#define INC_MSP_MSP_ANGLE_ENCODER_YL159_H_
#include <stdio.h>
#include <string.h>
#include "../../BASE/Inc/BSP/bsp_MB_host.h"
#include "stdio.h"
#include "../../BASE/Inc/BSP/bsp_UART.h"
#include "usart.h"
#include "gpio.h"
extern void Test();
extern void read_angle();
void decode_Angle(uint8_t *buffer, uint16_t length);
void reset_position_value();
extern int32_t* Desulfurizer_Angle;
void angle_encoder_intialize(struct UARTHandler *Handler);
#endif /* INC_MSP_MSP_ANGLE_ENCODER_YL159_H_ */

19
BHBF_Robot_Washing_01/BASE/Inc/MSP/msp_DAM0404D.h

@ -0,0 +1,19 @@
/*
* msp_DAM0404D.h
*
* Created on: Nov 22, 2024
* Author: akeguo
*/
#ifndef INC_MSP_MSP_DAM0404D_H_
#define INC_MSP_MSP_DAM0404D_H_
#include "../../BASE/Inc/BSP/BHBF_ROBOT.h"
extern int32_t* DMA_DAM0404D_Output_Value[4];
void decode040D_DAM(uint8_t *buffer, uint16_t length);
void DAM040D_0_Set();
void DAM040D_1_Set();
void DAM040D_2_Set();
void DAM040D_3_Set();
#endif /* INC_MSP_MSP_DAM0404D_H_ */

14
BHBF_Robot_Washing_01/BASE/Inc/MSP/msp_DAM_Relay.h

@ -0,0 +1,14 @@
/*
* msp_DAM_Relay.h
*
* Created on: Nov 5, 2024
* Author: akeguo
*/
#ifndef INC_MSP_MSP_DAM_RELAY_H_
#define INC_MSP_MSP_DAM_RELAY_H_
#include "BHBF_ROBOT.h"
extern int32_t* DMA_DO_Value_[4];
#endif /* INC_MSP_MSP_DAM_RELAY_H_ */

87
BHBF_Robot_Washing_01/BASE/Inc/MSP/msp_DC_CAN_SWING_Controller.h

@ -0,0 +1,87 @@
/*
* msp_DC_CAN.h
*
* Created on: 2024621
* Author: SQ-X
*/
#ifndef INC_MSP_MSP_DC_CAN_SWING_CONTROLLER_H_
#define INC_MSP_MSP_DC_CAN_SWING_CONTROLLER_H_
#include "../../BASE/Inc/BSP/bsp_include.h"
typedef struct _DHCANopenData0x2E4
{
uint8_t EmergencyStop :1; //first byte
uint8_t Forwards :1;
uint8_t BackWards :1;
uint8_t TurnLeft :1;
uint8_t TurnRight :1;
uint8_t Speed1 :1;
uint8_t Speed2 :1;
uint8_t Speed3 :1; //8 bit
uint8_t Speed4 :1;
uint8_t Speed5 :1;
uint8_t Speed6 :1;
uint8_t Speed7 :1;
uint8_t Speed8 :1;
uint8_t Speed9 :1;
uint8_t Speed10 :1;
uint8_t Mode0 :1; //8 bit
uint8_t Mode1 :1;
uint8_t Mode2 :1;
uint8_t Mode3 :1;
uint8_t Mode4 :1;
uint8_t Mode5 :1;
uint8_t Mode6 :1;
uint8_t Mode7 :1;
uint8_t Mode8 :1; //8 bit
uint8_t Mode9 :1; // third byte
uint8_t Mode10 :1;
uint8_t Incresss :1;
uint8_t Decresss :1;
uint8_t TaskStart :1; //作业开始
uint8_t LaneChnge :1;
uint8_t UpWards :1;
uint8_t DownWards :1; //8 bit
uint8_t SwingLeft :1;
uint8_t SwingRight :1;
uint8_t None4 :6; //8 bit
uint8_t None5 :8;
uint8_t None6 :8;
uint8_t None7 :6;
uint8_t HeartBeat :1;
uint8_t WireState :1; //8 bit
} DHCANopenData0x2E4;
//region 对外数据接口
extern DH_CAN_Remote *DH_CAN; //对外数据接口
extern int32_t *Send_Left_Compensation;
extern int32_t *Send_Right_Compensation;
extern int32_t *Send_BackwardDistance;
extern int32_t *Send_LaneChangeDistance;
extern int32_t *Send_Swing_Speed;
extern int32_t *Send_Swing_Angle;
extern int32_t *Send_Move_Speed;
extern int32_t *Send_Robot_Angle;
extern int32_t *Robot_Move_Speed;
// Region 对外函数接口
void DecodeCAN(uint32_t canID, uint8_t *buffer, uint32_t length);
void SendCANTest();
void SendRobtDataToController_0x364(); //Send 换道距离, 0x364
void SendRobtDataToController_0x264();
int32_t GetMode(DHCANopenData0x2E4 dHCANopenData0x2E4);
int32_t GetSpeed(DHCANopenData0x2E4 dHCANopenData0x2E4);
#endif /* INC_MSP_MSP_DC_CAN_SWING_CONTROLLER_H_ */

57
BHBF_Robot_Washing_01/BASE/Inc/MSP/msp_DH_Remote_Controller.h

@ -0,0 +1,57 @@
/*
* msp_DH_Remote_Controller.h
*
* Created on: Jul 31, 2024
* Author: akeguo
*/
#ifndef INC_MSP_MSP_DH_REMOTE_CONTROLLER_H_
#define INC_MSP_MSP_DH_REMOTE_CONTROLLER_H_
#include "../../BASE/Inc/BSP/BHBF_ROBOT.h"
#include "../../BASE/Inc/BSP/bsp_include.h"
//小端存储,和大段存储完全反过来了
struct DeChiMoveState
{
uint16_t Emergency_Stop :1;
uint16_t Wireless_State :1;
uint16_t Forwards :1;
uint16_t Backwards :1;
uint16_t Left_Turn :1;
uint16_t Right_Turn :1;
uint16_t Vehicle_Speed1 :1;
uint16_t Vehicle_Speed2 :1;
uint16_t Vehicle_Speed3 :1;
uint16_t Vehicle_Speed4 :1;
uint16_t Vehicle_Speed5 :1;
uint16_t Vehicle_Speed6 :1;
uint16_t Vehicle_Speed7 :1;
uint16_t Vehicle_Speed8 :1;
uint16_t Vehicle_Speed9 :1;
uint16_t Vehicle_Speed10 :1;
};
struct DeChiFunctionState
{
uint16_t Task_Start :1; //作业开启
uint16_t Task_Stop :1; //作业关闭
uint16_t Vertical_Upwards_Change :1; //竖直上换道
uint16_t Vertical_Downwards_Change :1; //竖直下换道
uint16_t Test_Start :1; //测试开始
uint16_t Test_Stop :1; //测试停止
uint16_t Open :1; //开启
uint16_t Close :1; //关闭
uint16_t Vehicle_speed10 :8; //没有用,只是为了占一个字节、8个位
};
extern struct DeChiMoveState *DeChiMoveCurrentState;
extern struct DeChiFunctionState *DeChiFunctionCurrentState;
extern uint16_t De_Chi_For_Back_Wards_Speed;
extern uint16_t De_Chi_Left_Rigth_Wards_Speed;
void read_DeChi_Data(void);
void decode_DeChi(uint8_t *buffer, uint16_t length);
void set_DeChi_Display(uint16_t Angle, uint16_t Speed);
#endif /* INC_MSP_MSP_DH_REMOTE_CONTROLLER_H_ */

121
BHBF_Robot_Washing_01/BASE/Inc/MSP/msp_DH_Roughening.h

@ -0,0 +1,121 @@
/*
* msp_DH_Roughening.h
*
* Created on: Nov 22, 2024
* Author: akeguo
*/
#ifndef INC_MSP_MSP_DH_ROUGHENING_H_
#define INC_MSP_MSP_DH_ROUGHENING_H_
#include "../../BASE/Inc/BSP/bsp_include.h"
//typedef struct _DHRoughening
//{
//
// uint16_t Forward_Backward_Speed;
// uint16_t Left_Right_Turn_Speed;
// uint16_t Left_Compensation;
// uint16_t Right_Compensation;
// uint16_t Vehicle_Speed3 :1;
// uint16_t Vehicle_Speed4 :1;
// uint16_t Vehicle_Speed5 :1;
// uint16_t Vehicle_Speed6 :1;
// uint16_t Vehicle_Speed7 :1;
// uint16_t Vehicle_Speed8 :1;
// uint16_t Vehicle_Speed9 :1;
// uint16_t Vehicle_Speed10 :1;
// uint16_t Emergency_Stop :1;
// uint16_t Wireless_State :1;
// uint16_t Forwards :1;
// uint16_t Backwards :1;
// uint16_t Left_Turn :1;
// uint16_t Right_Turn :1;
// uint16_t Vehicle_Speed1 :1;
// uint16_t Vehicle_Speed2 :1;
// uint16_t Roughening_Start :1;//拉毛开启
// uint16_t Roughening_Stop :1;//拉毛关闭
// uint16_t LaneChangeDistance_0 :1;//换道距离0 -5
// uint16_t LaneChangeDistance_1 :1;//
// uint16_t LaneChangeDistance_2 :1;//
// uint16_t LaneChangeDistance_3 :1;//
// uint16_t LaneChangeDistance_4 :1;//
// uint16_t LaneChangeDistance_5 :1;//
// uint16_t Horizontal_Task :1;//水平作业
// uint16_t Vertical_Task :1;//竖直作业
// uint16_t LaneChange_Up_Left :1;//左上换道
// uint16_t LaneChange_Right_Down :1;//右下换道
// uint16_t NULL0 :1;//
// uint16_t NULL1 :1;//
// uint16_t End_Up :1;//前端上升
// uint16_t End_Down :1;//前端下降
//}DHRoughening;
typedef struct _DHRoughening
{
uint16_t Forward_Backward_Speed;
uint16_t Left_Right_Turn_Speed;
uint16_t Left_Compensation;
uint16_t Right_Compensation;
uint16_t Vehicle_Speed3 :1;
uint16_t Vehicle_Speed4 :1;
uint16_t Vehicle_Speed5 :1;
uint16_t Vehicle_Speed6 :1;
uint16_t Vehicle_Speed7 :1;
uint16_t Vehicle_Speed8 :1;
uint16_t Vehicle_Speed9 :1;
uint16_t Vehicle_Speed10 :1;
uint16_t Emergency_Stop :1;
uint16_t Wireless_State :1;
uint16_t Forwards :1;
uint16_t Backwards :1;
uint16_t Left_Turn :1;
uint16_t Right_Turn :1;
uint16_t Vehicle_Speed1 :1;
uint16_t Vehicle_Speed2 :1;
uint16_t Roughening_Start :1;//拉毛开启
uint16_t Roughening_Stop :1;//拉毛关闭
uint16_t NULLValue :6;//换道距离0 -5
uint16_t Horizontal_Task :1;//水平作业
uint16_t Vertical_Task :1;//竖直作业
uint16_t LaneChange_Vertical_Up :1;//竖直上换道
uint16_t LaneChange_Vertical_Down :1;//竖直下换道
uint16_t LaneChange_Horizontal_Left :1;//水平左换道
uint16_t LaneChange_Horizontal_Right:1;//水平右左换道
uint16_t End_Up :1;//前端上升
uint16_t End_Down :1;//前端下降
}DHRoughening;
extern DHRoughening DHRougheningContrller;
void read_DHRoughening_Data(void);
void decode_DHRoughening(uint8_t *buffer, uint16_t length);
void set_DHRoughening_Display(uint16_t LeftCompensation, uint16_t RightCompensation,
uint16_t Angle, uint16_t Speed);
void send_to_DHRoughening();
int32_t DHRougheningGetSpeed(DHRoughening DHRougheningContrller);
int32_t DHRougheningGetLaneChangeDistance(DHRoughening DHRougheningContrller);
#endif /* INC_MSP_MSP_DH_ROUGHENING_H_ */

17
BHBF_Robot_Washing_01/BASE/Inc/MSP/msp_DMKE_485_Motor.h

@ -0,0 +1,17 @@
/*
* msp_DMK_485_Motor.h
*
* Created on: Jan 21, 2025
* Author: akeguo
*/
#ifndef INC_MSP_MSP_DMKE_485_MOTOR_H_
#define INC_MSP_MSP_DMKE_485_MOTOR_H_
#include "../../BASE/Inc/BSP/BHBF_ROBOT.h"
#include "bsp_DMKE.pb.h"
extern DMKE_struct_define *DMKE_Motors[3];
void DMAKE_intialize(struct UARTHandler *Handler);
#endif /* INC_MSP_MSP_DMKE_485_MOTOR_H_ */

13
BHBF_Robot_Washing_01/BASE/Inc/MSP/msp_Force_Sensor.h

@ -0,0 +1,13 @@
/*
* msp_Force_Sensor.h
*
* Created on: Oct 8, 2024
* Author: akeguo
*/
#ifndef INC_MSP_MSP_FORCE_SENSOR_H_
#define INC_MSP_MSP_FORCE_SENSOR_H_
#include "../../BASE/Inc/BSP/bsp_MB_host.h"
extern void force_sensor_intialize(struct UARTHandler *Handler);
extern int32_t* ForceValue;
#endif /* INC_MSP_MSP_FORCE_SENSOR_H_ */

15
BHBF_Robot_Washing_01/BASE/Inc/MSP/msp_JTBATTERY.h

@ -0,0 +1,15 @@
/*
* msp_JTBATTERY.h
*
* Created on: Oct 26, 2023
* Author: shiya
*/
#ifndef INC_MSP_MSP_JTBATTERY_H_
#define INC_MSP_MSP_JTBATTERY_H_
#include "../../BASE/Inc/BSP/bsp_include.h"
#endif /* INC_MSP_MSP_JTBATTERY_H_ */

18
BHBF_Robot_Washing_01/BASE/Inc/MSP/msp_LeiSai_ISV2_CAN.h

@ -0,0 +1,18 @@
/*
* msp_LeiSai_ISV2_CAN.h
*
* Created on: Oct 22, 2024
* Author: akeguo
*/
#ifndef INC_MSP_MSP_LEISAI_ISV2_CAN_H_
#define INC_MSP_MSP_LEISAI_ISV2_CAN_H_
#include "../../BASE/Inc/BSP/BHBF_ROBOT.h"
#include "../../BASE/Inc/BSP/bsp_FDCAN.h"
#include "msp_LeiSai_ISV2CAN.pb.h"
void LeiSai_CANSendMessageSDO(int MotorID, uint8_t Function, uint16_t ControlWord,
uint8_t subWord, int32_t ControlWordValue);
void LeiSai_CANSendMessageSDO_ADD_To_SendList(int MotorID, uint8_t Function,
uint16_t ControlWord, uint8_t subWord, int32_t ControlWordValue);
#endif /* INC_MSP_MSP_LEISAI_ISV2_CAN_H_ */

16
BHBF_Robot_Washing_01/BASE/Inc/MSP/msp_MK32_1.h

@ -0,0 +1,16 @@
/*
* msp_MK32_1.h
*
* Created on: Oct 8, 2024
* Author: akeguo
*/
#ifndef INC_MSP_MSP_MK32_1_H_
#define INC_MSP_MSP_MK32_1_H_
#include "../../BASE/Inc/BSP/bsp_UART.h"
#include "msp_MK32.pb.h"
void Sbus_Data_Count(uint8_t *buf, int32_t *But_Value);
extern SP_MSP_MK32_Button *P_MK32;
//
void MK32_Sbus_UART_Handler_intialize(struct UARTHandler* Handler);
#endif /* INC_MSP_MSP_MK32_1_H_ */

33
BHBF_Robot_Washing_01/BASE/Inc/MSP/msp_OBD.h

@ -0,0 +1,33 @@
/*
* msp_OBD.h
*
* Created on: Oct 26, 2023
* Author: shiya
*
* 1.bootloader
* 2.GV
* 2ms上传一帧报文
*
* 3.GV上传选项
*
*
* 4.CV的值
* 5.CV的值
* 6.CV的值更新入EEPROM
* 7.CV的值存入EEPROM
* 8.EEPROM读取CV的值
* GF_MSP_OBD_Init()
*
*/
#ifndef INC_MSP_MSP_OBD_H_
#define INC_MSP_MSP_OBD_H_
#include "../../BASE/Inc/BSP/bsp_include.h"
uint8_t GF_MSP_OBD_Init(uint8_t FDCAN_CH);
void GF_MSP_OBD_Rx_CallBack();
void GF_MSP_OBD_Run_Timer(void);
#endif /* INC_MSP_MSP_OBD_H_ */

27
BHBF_Robot_Washing_01/BASE/Inc/MSP/msp_PID.h

@ -0,0 +1,27 @@
/*
* msp_PID.h
*
* Created on: 2024122
* Author: Administrator
*/
#ifndef INC_MSP_MSP_PID_H_
#define INC_MSP_MSP_PID_H_
#include "../../BASE/Inc/BSP/bsp_include.h"
void GF_MSP_Auto_Motion_adj(double Current_Angle, double Auto_Speed, double Auto_Speed_Max, double System_time ,double *W_Speed_1);
void GF_MSP_Auto_adj_Unicycle(double Current_Angle_11,double Desire_Angle_11, double Auto_Speed, double Auto_Speed_Max, double System_time ,double *W_Speed_1);
void GF_MSP_Auto_Motion_adj_Com(double Current_Angle, double Horizontal_Compen_Angle ,double Auto_Speed, double Auto_Speed_Max, double System_time ,double *W_Speed_1);
void GF_MSP_PID_Now_Der_adj_Com(double Current_Angle,double Desire_Angle_Input, double Auto_Speed, double Auto_Speed_Max, double System_time ,double *W_Speed_1);
int Angle_Tune_PID(float CurrentAngle, float TargetAngle, int Position_KP,
int Position_KI, int Position_KD, int MaxValue);
#endif /* INC_MSP_MSP_PID_H_ */

32
BHBF_Robot_Washing_01/BASE/Inc/MSP/msp_Steering_Engine.h

@ -0,0 +1,32 @@
/*
* bsp_steering_engine.h
*
* Created on: Jul 29, 2024
* Author: akeguo
*/
#ifndef INC_MSP_MSP_STEERING_ENGINE_H_
#define INC_MSP_MSP_STEERING_ENGINE_H_
#include <stdio.h>
#include <string.h>
#include "../../BASE/Inc/BSP/bsp_MB_host.h"
#include "stdio.h"
#include "../../BASE/Inc/BSP/bsp_UART.h"
#include "usart.h"
#include "gpio.h"
extern int32_t* Desulfurizer_Steering_Set_Speed;
extern int32_t* Desulfurizer_Steering_Angle;
extern int32_t* Desulfurizer_Steering_Current;
extern int32_t* Desulfurizer_Steering_Real_Angle;
void setSteeringRobotProtectionMode();
void read_steering_Angle();
void steering_set_angle();
//FSUS_STATUS FSUS_ReadData(uint8_t servo_id, uint8_t address, uint8_t *sendbytes, uint8_t *length);
void read_steering_current();
void decode_steering_angle(uint8_t *buffer, uint16_t length);
#endif /* INC_MSP_MSP_STEERING_ENGINE_H_ */

62
BHBF_Robot_Washing_01/BASE/Inc/MSP/msp_TI5MOTOR.h

@ -0,0 +1,62 @@
/*
* msp_TI5MOTOR.h
*
* Created on: Oct 26, 2023
* Author: shiya
*
*/
#ifndef INC_MSP_MSP_TI5MOTOR_H_
#define INC_MSP_MSP_TI5MOTOR_H_
#include "../../BASE/Inc/BSP/bsp_include.h"
#include "msp_Motor.pb.h"
#define DF_MSP_Ti5Motor_PositionMode 44
#define DF_MSP_Ti5Motor_SpeedMode 43
#define DF_MSP_Ti5Motor_CurrentMode 42
#define DF_MSP_Ti5Motor_State_Read 41
void DecodeTi5MotorCAN(uint32_t canID, uint8_t *buffer, uint32_t length);
extern int32_t Function_code;
//电机的ID必须是连续的,第一个电机ID需要在此定义
#define DF_MSP_Ti5Motor_StartID 0
//#define DF_MSP_Ti5Motor_StartID 1
//需要将此函数放置到对应的CAN接收中断函数中
void GF_MSP_Ti5Motor_CANRx_Callback();
//需要每间隔2ms执行一次
void GF_MSP_Ti5Motor_Control_Timer();
//void GF_Tis_Control_Single();
void GF_MSP_Ti5Motor_Error_Clean();
//uint8_t Motor_Control_Motor_Index;
//uint8_t Motor_Control_State;
//
void FiveByteCommand(int8_t MotorID, uint8_t command, int32_t content,FDCANHandler *Ti5_Motor_Controller,int WaitTime);
void OneByteCommand(int8_t MotorID, uint8_t command,FDCANHandler *Ti5_Motor_Controller,int WaitTime);
void Motor_Stop(uint8_t id,FDCANHandler *Ti5_Motor_Controller,int WaitTime);
void Motor_ClearFault(uint8_t id,FDCANHandler *Ti5_Motor_Controller,int WaitTime);
void Motor_SetVelocityModeAndTargetVelocity(uint8_t id, int32_t targetSpeed,FDCANHandler *Ti5_Motor_Controller,int WaitTime);
void MotorSpeedSetup();
void Motor_GetFaultState(uint8_t id,FDCANHandler *Ti5_Motor_Controller,int WaitTime);
void GetCSPByCommand(uint8_t id,FDCANHandler *Ti5_Motor_Controller,int WaitTime);
//void Ti5_Motor_Controller_intialize(FDCANHandler *Handler);
void SetMaximumAllowablePositiveVelocity(uint8_t id, int32_t maxSpeed,FDCANHandler *Ti5_Motor_Controller,int WaitTime);
void SetMinimumAllowableNegativeVelocity(uint8_t id, int32_t minmaxSpeed,FDCANHandler *Ti5_Motor_Controller,int WaitTime);
void SetMaximumPositivePosition(uint8_t id, int32_t position,FDCANHandler *Ti5_Motor_Controller,int WaitTime);
/// <summary>
/// 获取最小负向位置 减速机角度为:(返回值/65536/减速比)*360<
/// </summary>
void SetCurrentModeAndTargetCurent(uint8_t id, int32_t targetCurrent,FDCANHandler *Ti5_Motor_Controller,int WaitTime);
void SetMinimumNegativePosition(uint8_t id, int32_t position,FDCANHandler *Ti5_Motor_Controller,int WaitTime);
#endif /* INC_MSP_MSP_TI5MOTOR_H_ */

21
BHBF_Robot_Washing_01/BASE/Inc/MSP/msp_TL720D.h

@ -0,0 +1,21 @@
/*
* msp_TL720D.h
*
* Created on: Jul 19, 2024
* Author: bihon
*/
#ifndef INC_MSP_MSP_TL720D_H_
#define INC_MSP_MSP_TL720D_H_
#include <stdio.h>
#include <string.h>
#include "../../BASE/Inc/BSP/bsp_MB_host.h"
#include "stdio.h"
#include "../../BASE/Inc/BSP/bsp_UART.h"
#include "usart.h"
#include "gpio.h"
void TL720D_intialize(struct UARTHandler *Handler);
extern MSP_TL720DParameters* SP_MSP_RF_TL720D_Parameters_In;
extern int32_t *RobotAngle;//机器人角度
#endif /* INC_MSP_MSP_TL720D_H_ */

85
BHBF_Robot_Washing_01/BASE/Inc/MSP/msp_TTMotor_ZQ.h

@ -0,0 +1,85 @@
/*
* msp_TTMotor_ZQ.h
*
* Created on: Oct 10, 2024
* Author: akeguo
*/
#ifndef INC_MSP_MSP_TTMOTOR_ZQ_H_
#define INC_MSP_MSP_TTMOTOR_ZQ_H_
#include "../../BASE/Inc/BSP/bsp_include.h"
#include "../../BASE/Inc/BSP/bsp_FDCAN.h"
#include "fsm.h"
#define DF_MSP_TT_Motor_PositionMode 01
#define DF_MSP_TT_Motor_SpeedMode 02
#define DF_MSP_TT_Motor_CurrentMode 03
#define DF_MSP_TT_Motor_Posi_Now 04
#define TT_One_Deg_Count 11014///32768*121/360(减速比121)=11014
#define TT_Left_limt 84080 //-775000+75*11014
#define TT_Right_limt -1568020 //-775000-75*11014
//#define Sw_Rust_Mid_Posi -775000 //-775000-75*11014
//double Sw_Rust_Mid_Posi=-775000;//需检测修改
#define DF_MSP_TT_Motor_StartID 2
void SwingMotorSetCheckTargetPositon();
void TT_Analytic_Fun(int32_t ID_A_T_A, char *buffer);
extern int SwingMotorID;
extern int LeftMotorID;
extern int RightMotorID;
extern void ActivateMotor(int MotorID, FDCANHandler *ZQ_Motor_Controller,
int32_t WaitTime) ;
extern void CANSendMessageSDO_ADD_To_SendList(int MotorID, uint8_t Function,
uint16_t ControlWord, uint8_t subWord, int32_t ControlWordValue,
FDCANHandler *ZQ_Motor_Controller, int32_t WaitTime);
//位置速度模式
extern void Postion_Velcocity_Run_SetParameter(int MotorID, int TargetPosition,
int TargetSpeed, int AccTime, int DecTime,
FDCANHandler *ZQ_Motor_Controller, int32_t WaitTime);
extern void Postion_Velcocity_Set_Position(int MotorID, int TargetPosition,
FDCANHandler *ZQ_Motor_Controller, int32_t WaitTime) ;
extern void Driver_ReadError(int MotorID, FDCANHandler *ZQ_Motor_Controller,
int32_t WaitTime);
extern void SetMotorTargetPosition(int MotorID, int32_t TargetPosition,
FDCANHandler *ZQ_Motor_Controller, int32_t WaitTime) ;
extern void Postion_Velcocity_Stop(int MotorID, FDCANHandler *ZQ_Motor_Controller,
int32_t WaitTime) ;
extern void SetCurrentPositionZero(int MotorID, FDCANHandler *ZQ_Motor_Controller,
int32_t WaitTime) ;
extern void Swing_Motor_Set_Target_Position() ;
extern void Swing_Motor_Read_ReachedEnd() ;
extern void Set_Current_Positon_Zero(uint8_t MotorID,
FDCANHandler *ZQ_Motor_Controller, int32_t WaitTime) ;
extern void TT_Request_Position(uint32_t Motor_ID_1,
FDCANHandler *ZQ_Motor_Controller, int32_t WaitTime) ;
extern void TT_Request_Velocity(uint32_t Motor_ID_1,
FDCANHandler *ZQ_Motor_Controller, int32_t WaitTime) ;
extern void TT_Request_Fault(uint32_t Motor_ID_1,
FDCANHandler *ZQ_Motor_Controller, int32_t WaitTime) ;
extern void TT_Request_Current(uint32_t Motor_ID_1,
FDCANHandler *ZQ_Motor_Controller, int32_t WaitTime);
extern void TT_Analytic_Fun(int32_t ID_A_T_A, char *buffer);
extern void SpeedModeSetup(int MotorID,FDCANHandler *ZQ_Motor_Controller,int32_t WaitTime,int32_t Acc, int32_t Dec, int32_t TargetVelocity); //设定速度模式,并更改相关速度
extern void TT_Analytic_Fun(int32_t ID_A_T_A, char *buffer);
extern void TT_SpeedMode_Set_TargetSpeed(uint32_t MotorID,FDCANHandler *ZQ_Motor_Controller,int32_t WaitTime,int32_t TargetSpeed);
#endif /* INC_MSP_MSP_TTMOTOR_ZQ_H_ */

21
BHBF_Robot_Washing_01/BASE/Inc/MSP/msp_WH_LTE_7S0.h

@ -0,0 +1,21 @@
/*
* bsp_WH_LTE_7S0.h
*
* Created on: Sep 14, 2024
* Author: akeguo
*/
#ifndef INC_BSP_BSP_WH_LTE_7S0_H_
#define INC_BSP_BSP_WH_LTE_7S0_H_
#include "stdint.h"
extern struct UARTHandler *wh_LTE_7S0_Handler;
//void WH_LTE_7S0_intialize(struct UARTHandler *Handler);
void Send_WH_LTE_7S0_Data(uint8_t* data,int length);
void WH_LTE_7S0_intialize(struct UARTHandler *Handler);
void decode_received_data_from_computer(uint8_t *buffer, uint16_t length);
void decode_command_from_wh_LTE_7S0(uint8_t *buffer, uint16_t length);
void UpdateGV();
extern char NeedToFeedBackToComputer;
#endif /* INC_BSP_BSP_WH_LTE_7S0_H_ */

26
BHBF_Robot_Washing_01/BASE/Inc/MSP/msp_Wire_Sensor.h

@ -0,0 +1,26 @@
/*
* msp_wire_sensor.h
*
* Created on: Jul 29, 2024
* Author: akeguo
*/
#ifndef INC_MSP_MSP_WIRE_SENSOR_H_
#define INC_MSP_MSP_WIRE_SENSOR_H_
//拉线传感器
#include <stdio.h>
#include <string.h>
#include "../../BASE/Inc/BSP/bsp_MB_host.h"
#include "stdio.h"
#include "../../BASE/Inc/BSP/bsp_UART.h"
#include "usart.h"
#include "gpio.h"
void decode_Length(uint8_t *buffer, uint16_t length);
void read_wire_sensor_length();
void wire_sensor_intialize(struct UARTHandler* Handler);
extern int32_t* Desulfurizer_Wire_Length;
extern int32_t *Desulfurizer_Thickness;
#endif /* INC_MSP_MSP_WIRE_SENSOR_H_ */

67
BHBF_Robot_Washing_01/BASE/Src/BSP/BHBF_ROBOT.c

@ -0,0 +1,67 @@
/*
* BHBF_ROBOT.c
*
* Created on: Oct 26, 2023
* Author: shiya
*/
#include "fsm.h"
#include "BHBF_ROBOT.h"
#include <string.h>
#include "bsp_log.h"
#include "msp_DH_Remote_Controller.h"
#include "bsp_FDCAN.h"
#include "msp_DAM_Relay.h"
//7 motors
MotorParameters *Motor[7];
//Motor Error
int32_t *Motor_ID_Errors[7] =
{ 0 };
//ComError
int32_t* SystemErrorCode;
ErrorData* SystemErrorData;
TT_MotorParameters* TT_Motor[4];
//Declare a CV and initialize CV
CV_struct_define CV =
{ 0 };
//Declare a GV and initialize CV
GV_struct_define GV =
{ 0 };
//Declare a PV and initialize CV
//PV_struct_define PV =
//{ 0 };
IV_struct_define IV ={ 0 };
void GF_MainLoop_Jump(int32_t Next_Index_U, int32_t Next_Index_N);
void SET_BIT_1(int32_t* num,int32_t k)
{
*num=((*num) | (1 << (k)));
}
void SET_BIT_0(int32_t* num,int32_t k)
{
*num=((*num) & ~(1 << (k)));
}
int32_t Get_BIT(int32_t* num,int32_t k)
{
// return (*num >> (k -1)) & 1;
return (*num >> (k)) & 1;
}
//100ms执行一次
void GF_WatchDog_Loop()
{
//硬件看门狗复位
//HAL_GPIO_TogglePin(RST_WDI_GPIO_Port, RST_WDI_Pin); //Hardware Watchdog,kicking the dog
//硬件看门狗复位
}

636
BHBF_Robot_Washing_01/BASE/Src/BSP/DLT/DLTuc.c

@ -0,0 +1,636 @@
/**
* @file DLTuc.c
* @author Teodor Rosolowski
* @date 1 Jul 2022
* @brief This file is a part of DLTuc library
*
* In this source file you will find entire implementation of the DLTuc lib.
*
* Requirments:
* Around ~2kB of RAM
* Check Configuration file and defines:
* DLT_TRANSMIT_RING_BUFFER_SIZE, DLT_TRANSMIT_MAX_SINGLE_MESSAGE_SIZE
*
*/
/*
* *******************************************************************************************
* Includes
* *******************************************************************************************
* */
#include "DLT/DLTuc.h"
#include "stdio.h"
#include "stdint.h"
#include "stdbool.h"
#include <stdarg.h>
#include <string.h>
/*
* *******************************************************************************************
* Local defines
* *******************************************************************************************
* */
/**!
* \brief DLT_ACT_HEADER_SIZE - actual DLT header size
* \details Standard Header + Extended + TypeInfo
* Don't modify it if you aren't sure what are you doing!!!
*/
#define DLT_ACT_HEADER_SIZE 32
/**!
* \brief DLT_MINIMUM_LOG_DROP_PERIOD
* \details minimum period between two drop info log
*/
#define DLT_MINIMUM_LOG_DROP_PERIOD 200
/*
* *******************************************************************************************
* Local types
* *******************************************************************************************
* */
/* Prototypes to improve readability.. */
/*typedefs for future use..*/
// typedef
// {
// uint32_t HeaderStart;
// BaseHeaderConfig_t BaseHeaderConfig;
// uint8_t MessageCounter;
// uint16_t MessageLength;
// uint32_t EcuId;
// uint32_t TimeStamp;
// }DLT_BaseHeader_t;
// typedef
// {
// DLT_DebugLevel_t DebugLevel;
// uint8_t NumberOfArguments;
// uint32_t AppId;
// uint32_t ContexID;
// TypeInfo_t TypeInfo;
// uint16_t Argument1;
// }DLT_ExtendedHeader_t;
//char DLT_LOG_ENABLE_LEVEL= 7;
char DLT_LOG_ENABLE_LEVEL= 0;
/**!
* \brief RB_Status
* \details ---
* */
typedef enum
{
RB_OK = 0,
RB_ERROR = 1
} RB_Status;
/**!
* \brief DltRingBufferTransmit_t
* \details ---
* */
typedef struct DltRingBufferTransmit_Tag
{
uint16_t Head; // Pointer to write
uint16_t Tail; // Pointer to read
bool readyToTransmit[DLT_TRANSMIT_RING_BUFFER_SIZE];
uint8_t dataSize[DLT_TRANSMIT_RING_BUFFER_SIZE]; // Array to keep message size
} DltRingBufferTransmit_t;
/**!
* \brief BluRingBufferReceive_t
* \details ---
* */
typedef struct BluRingBufferReceive_Tag
{
uint16_t Head; // Pointer to write
uint16_t Tail; // Pointer to read
uint8_t MessageSize[DLT_RECEIVE_RING_BUFFER_SIZE]; // Array to keep message size
bool ReadyToRead[DLT_RECEIVE_RING_BUFFER_SIZE];
} BluRingBufferReceive_t;
/**
* *******************************************************************************************
* Static variables
* *******************************************************************************************
* */
/**!
* \brief ExtSerialTrDataFunctionCb
* \details ---
* */
static void (*ExtSerialTrDataFunctionCb)(uint8_t *DltLogData, uint8_t Size);
static void (*ExtSerialRecDataFunctionCb)(uint8_t *RecDataBuff, uint16_t Size);
static void (*ExtInfoInjectionDataRcvdCb)(uint32_t AppId, uint32_t ConId,uint32_t ServId,uint8_t *Data, uint16_t Size);
static uint32_t (*GetSystemTimeMs)(void);
/**!
* \brief LogDroppedFlag
* \details ---
* */
static bool LogDroppedFlag =false;
static uint32_t PrevLogDropSendTime = 0u;
static uint8_t DltLogDroppedInfo[] = "LOG DROPPED!!!";
static uint8_t DltLogDroppedInfoBuffer[60] = {0}; /* TODO: Remove magic number..*/
static uint8_t DLtLogDroppedSize = 0;
static uint8_t ActDltMessageCounter =0;
static DltRingBufferTransmit_t DltTrsmtRingBuffer = {.readyToTransmit[0]=true};
static uint8_t DltTrsmtMessagesTab[DLT_TRANSMIT_RING_BUFFER_SIZE][DLT_TRANSMIT_MAX_SINGLE_MESSAGE_SIZE];
static BluRingBufferReceive_t BleMainReceiveRingBuffer;
static uint8_t BluMainReceiveMessagesTab[DLT_RECEIVE_RING_BUFFER_SIZE][DLT_REC_SINGLE_MESSAGE_MAX_SIZE];
static volatile uint8_t TransmitReadyStateFlag = true; /*TmpFromDma for example*/
/*
*********************************************************************************************
* Prototypes of static functions
********************************************************************************************
*/
/*!
************************************************************************************************
* \brief PrepareDltHeader
* \details A very lazy implementation of DLT Header - but it works fine
* Please refer to: https://www.autosar.org/fileadmin/user_upload/standards/foundation/1-0/AUTOSAR_PRS_DiagnosticLogAndTraceProtocol.pdf
************************************************************************************************/
static void PrepareDltHeader(uint8_t Level, uint32_t AppId, uint32_t ContextId, uint16_t size,uint8_t *headerAddrStart);
/*!
************************************************************************************************
* \brief DLT_RB_TransmitRead Function to read data from ring buffer
* \details --
* \param RingBuffer_t *Buf - pointer to Ring Buffer structure
* \param out MessageSize - size of the "DltLogData" (return value)
* \param out MessagePointer - pointer to the message stored in RingBuffer (return value)
* \return RB_OK if something read succesfully, otherwise RB_ERROR
* */
static RB_Status DLT_RB_TransmitRead(DltRingBufferTransmit_t *Buf, uint8_t *MessageSize, uint8_t **MessagePointer);
/*!
************************************************************************************************
* \brief DLT_RB_GetNextWriteIndex
* \details --
* \param in RingBuffer_t *Buf - pointer to Ring Buffer structure
* \param out writeIndex - next index where DLT data should be stored, can be used only if fun return "RB_OK"
* \return RB_OK if index available, otherwise RB_ERROR
************************************************************************************************/
static RB_Status DLT_RB_GetNextWriteIndex(DltRingBufferTransmit_t *Buf,uint16_t *writeIndex);
/*!
************************************************************************************************
* \brief DLT_RB_Receive_GetNextMessageAddress
* \details Function used to work with DMA - direct write to ring buffer by DMA
* \param in Buf -
* \param in WriteAddress -
************************************************************************************************/
static RB_Status DLT_RB_Receive_GetNextMessageAddress(BluRingBufferReceive_t *Buf, uint8_t **WriteAddress);
/*!
************************************************************************************************
* \brief DLT_RB_Receive_Read Function to read data from ring buffer
* \details --
* \param RingBuffer_t *Buf - pointer to Ring Buffer structure
* \param out MessageSize - size of the "BleLogData" (return value)
* \param out MessagePointer - pointer to the message stored in RingBuffer (return value)
*
* */
static RB_Status DLT_RB_Receive_Read(BluRingBufferReceive_t *Buf, uint8_t *MessageSize, uint8_t **MessagePointer);
/*
*********************************************************************************************
* Static functions implementation
********************************************************************************************
*/
static RB_Status DLT_RB_Receive_GetNextMessageAddress(BluRingBufferReceive_t *Buf, uint8_t **WriteAddress)
{
/* TODO: The implementation isn't optimal...*/
static uint8_t DefaultBlindBuffer[DLT_REC_SINGLE_MESSAGE_MAX_SIZE];
/*Mark previous message as ready to read*/
Buf->ReadyToRead[Buf->Head] = true;
// Compute new Head pointer value of a ring buffer
uint16_t HeadTmp = (Buf->Head + 1) % DLT_RECEIVE_RING_BUFFER_SIZE;
// Check if there is one free space ahead the Head buffer
if(HeadTmp == Buf->Tail)
{
/*Even if buffer is full data must be received somewhere to don't crush application/ dma*/
*WriteAddress = DefaultBlindBuffer;
// There is no space in the buffer - return an error
return RB_ERROR;
}
Buf->ReadyToRead[HeadTmp] = false;
Buf->MessageSize[HeadTmp] = DLT_RECEIVE_RING_BUFFER_SIZE;
Buf->Head = HeadTmp;
*WriteAddress = &BluMainReceiveMessagesTab[HeadTmp][0];
// Everything is ok - return OK status
return RB_OK;
}
static RB_Status DLT_RB_Receive_Read(BluRingBufferReceive_t *Buf, uint8_t *MessageSize, uint8_t **MessagePointer)
{
if(Buf->ReadyToRead[Buf->Tail] == false)
{
/*Any message in ring buffer isn't ready to read*/
return RB_ERROR;
}
/*Mark again as not ready to read*/
Buf->ReadyToRead[Buf->Tail] = false;
// Check if Tail hit Head
if(Buf->Head == Buf->Tail)
{
// If yes - there is nothing to read
return RB_ERROR;
}
// Write current value from buffer to pointer from argument
*MessageSize = Buf->MessageSize[Buf->Tail];
*MessagePointer = &BluMainReceiveMessagesTab[Buf->Tail][0];
// Calculate new Tail pointer
Buf->Tail = (Buf->Tail + 1) % DLT_RECEIVE_RING_BUFFER_SIZE;
// Everything is ok - return OK status
return RB_OK;
}
static RB_Status DLT_RB_TransmitRead(DltRingBufferTransmit_t *Buf, uint8_t *MessageSize, uint8_t **MessagePointer)
{
// Check if Tail hit Head
if(Buf->Head == Buf->Tail)
{
// If yes - there is nothing to read
return RB_ERROR;
}
else if(true == Buf->readyToTransmit[Buf->Tail])
{
// Write current value from buffer to pointer from argument
*MessageSize = Buf->dataSize[Buf->Tail];
*MessagePointer = &DltTrsmtMessagesTab[Buf->Tail][0];
// Calculate new Tail pointer
Buf->Tail = (Buf->Tail + 1) % DLT_TRANSMIT_RING_BUFFER_SIZE;
// Everything is ok - return OK status
return RB_OK;
}
else
{
/* Message still not ready to transmit */
return RB_ERROR;
}
}
static RB_Status DLT_RB_GetNextWriteIndex(DltRingBufferTransmit_t *Buf,uint16_t *writeIndex)
{
DLTuc_OS_CRITICAL_START();
// Calculate new Head pointer value
uint8_t HeadTmp = (Buf->Head + 1) % DLT_TRANSMIT_RING_BUFFER_SIZE;
// Check if there is one free space ahead the Head buffer
if(HeadTmp == Buf->Tail)
{
DLTuc_OS_CRITICAL_END();
// There is no space in the buffer - return an error
return RB_ERROR;
}
Buf->Head = HeadTmp;
Buf->readyToTransmit[Buf->Head] = false;
*writeIndex = Buf->Head;
DLTuc_OS_CRITICAL_END();
return RB_OK;
}
static void PrepareDltHeader(uint8_t Level, uint32_t AppId, uint32_t ContextId, uint16_t size,uint8_t *headerAddrStart)
{
uint32_t ActualTime = 0;
if(GetSystemTimeMs != NULL)
{
ActualTime = GetSystemTimeMs() * 10U;
/*Multiply by 10 to get value in MS also in DLTViewer
*Reson: Resolution in DLT Viewer is equal: 10^-4
*/
}
if(size > ((UINT8_MAX -1) - DLT_ACT_HEADER_SIZE) )
{
/*Error to handle, or please develop this function to handle input size > UINT8_MAX */
// while(1)
// {
// /*For development phase: lock the app*/
// }
size = size - DLT_ACT_HEADER_SIZE -1;
}
/*START HEADER*/
headerAddrStart[0] = 0x44; /*'D'*/
headerAddrStart[1] = 0x4c; /*'L'*/
headerAddrStart[2] = 0x53; /*'S'*/
headerAddrStart[3] = 0x01; /*'0x01'*/
headerAddrStart[4] = 0x35; /*'Dlt base header config
* Use extended header - true
* MSBF - false
* With ECU ID - true
* With Seesion ID - false
* With time stamp - true
* version number -random
'*/
headerAddrStart[5] = ActDltMessageCounter++; /*'Message counter value '*/
/*TODO: - it must be fixed!!!! - Length*/
headerAddrStart[6] = 0x00; /*Message length general*/
// headerAddrStart[7] = 0x37; /*'Message length general '*/
headerAddrStart[7]=28+size; /*General size */
uint32_t TempEcuId = DLT_LOG_ECUID_VALUE;
/*ECU ID*/
headerAddrStart[8]= ((uint8_t*)&TempEcuId)[3];
headerAddrStart[9]= ((uint8_t*)&TempEcuId)[2];
headerAddrStart[10]= ((uint8_t*)&TempEcuId)[1];
headerAddrStart[11]= ((uint8_t*)&TempEcuId)[0];
/*Time stamp*/
headerAddrStart[12]= ((uint8_t*)&ActualTime)[3];
headerAddrStart[13]= ((uint8_t*)&ActualTime)[2];
headerAddrStart[14]= ((uint8_t*)&ActualTime)[1];
headerAddrStart[15]= ((uint8_t*)&ActualTime)[0];
/*Extended header --verbose | type serial*/
// headerAddrStart[16]= 0x41; /**/
headerAddrStart[16]= (Level << 4) | 1;
/*Number of arguments*/
headerAddrStart[17]= 0x01; /**/
/*App id */
headerAddrStart[18]= ((uint8_t*)&AppId)[3];
headerAddrStart[19]= ((uint8_t*)&AppId)[2];
headerAddrStart[20]= ((uint8_t*)&AppId)[1];
headerAddrStart[21]= ((uint8_t*)&AppId)[0];
/*Contex ID (4 bytes*/
headerAddrStart[22]= ((uint8_t*)&ContextId)[3];
headerAddrStart[23]= ((uint8_t*)&ContextId)[2];
headerAddrStart[24]= ((uint8_t*)&ContextId)[1];
headerAddrStart[25]= ((uint8_t*)&ContextId)[0];
/*Type info*/
headerAddrStart[26]= 0x01; /**/
headerAddrStart[27]= 0x82; /**/
headerAddrStart[28]= 0x00; /**/
headerAddrStart[29]= 0x00; /**/
/*Argument 1*/
headerAddrStart[30]= size;
/* Size of the load in simplified form, please verify in documentation of DLT protcool documentation */
headerAddrStart[31]= 0x00; /**/
}
/*
****************************************************************************************************
* Exported functions implementation.
* Descriptions are added in header file
*****************************************************************************************************
*/
void DLTuc_RawDataReceiveDone(uint16_t Size)
{
static uint8_t *MessageReceiveBufferAddress = NULL;
uint8_t *MessageToRead_p = NULL;
uint8_t MessageToReadSize= 0U;
DLT_RB_Receive_GetNextMessageAddress(&BleMainReceiveRingBuffer,&MessageReceiveBufferAddress);
if(ExtSerialRecDataFunctionCb != NULL){
ExtSerialRecDataFunctionCb(MessageReceiveBufferAddress,DLT_REC_SINGLE_MESSAGE_MAX_SIZE);
}
/*
* The receive buffer isn't handled fully correctly, it require deeper investigation.
* However, it is possible to receive the Injection messages, and base commands if are transmitted with breakes..
* Received DTL messages are divided by the "IDLE" irq for now.., not by the size and etc...
*/
if(DLT_RB_Receive_Read(&BleMainReceiveRingBuffer, &MessageToReadSize,&MessageToRead_p) == RB_OK)
{
if(MessageToRead_p[4] == 53) /**/
{
/*Use Extended, with EcuId, with Timestamp, end at[15]
then Extended data as follow:
[16] ==22-? - non verbose, type: control, MSTP: fatal
[17] numOfArgs == 1 - TODO: Only 1 argument is for nowsupported!!!
[18-21] - AppId
[22-25] - ContexId
[26-29] - ServiceId
[30-33] - Size*/
uint32_t AppId = MessageToRead_p[21] << 24 |MessageToRead_p[20] << 16 | MessageToRead_p[19] << 8 | MessageToRead_p[18] << 0;
uint32_t RecContexId = MessageToRead_p[25] << 24 |MessageToRead_p[24] << 16 | MessageToRead_p[23] << 8 | MessageToRead_p[22] << 0;
uint32_t RecServiceId = MessageToRead_p[29] << 24 |MessageToRead_p[28] << 16 | MessageToRead_p[27] << 8 | MessageToRead_p[26] << 0;
if(RecServiceId >= DLT_SERVICE_ID_CALLSW_CINJECTION)
{
if(NULL != ExtInfoInjectionDataRcvdCb)
{
/*MSB LSB, wtf..?, it is somehow mixed? */
uint32_t DltDatSize = MessageToRead_p[33] << 24 | MessageToRead_p[32] << 16 | MessageToRead_p[31] << 8 | MessageToRead_p[30] << 0;
ExtInfoInjectionDataRcvdCb(AppId,RecContexId,RecServiceId,&MessageToRead_p[34],(uint16_t)DltDatSize);
}
}
else if(RecServiceId == DLT_SERVICE_ID_SET_LOG_LEVEL)
{
uint32_t NewLogLevel = MessageToRead_p[30];
LOG("Set new log level request: %d How you triggered it?? , not supported", NewLogLevel);
/* It is handled correctly by DLT Viewer?? */
}
else if(RecServiceId == DLT_SERVICE_ID_SET_DEFAULT_LOG_LEVEL)
{
uint32_t NewLogLevel = MessageToRead_p[30];
LOG("Set default log level request: %d", NewLogLevel);
LOG("Not supported yet, I'm too lazy :)");
}
else if(DLT_SERVICE_ID_GET_SOFTWARE_VERSION == RecServiceId)
{
LOG("ECU_SW_VERSION: %d", DLT_ECU_SW_VER);
/*TODO: The lib should send here answer of control message... */
}
else if(DLT_SERVICE_ID_GET_DEFAULT_LOG_LEVEL == RecServiceId)
{
LOG("Default log level: %d", DLT_LOG_ENABLE_LEVEL);
}
}
}
}
void DLTuc_RegisterInjectionDataReceivedCb(
void InjectionDataRcvd(uint32_t AppId, uint32_t ConId,uint32_t ServId,uint8_t *Data, uint16_t Size))
{
ExtInfoInjectionDataRcvdCb = InjectionDataRcvd;
}
void DLTuc_RegisterReceiveSerialDataFunction(void LLSerialRecDataFunctionC(uint8_t *DltLogData, uint16_t Size))
{
ExtSerialRecDataFunctionCb = LLSerialRecDataFunctionC;
if(ExtSerialRecDataFunctionCb != NULL)
{
ExtSerialRecDataFunctionCb(&BluMainReceiveMessagesTab[0][0],DLT_REC_SINGLE_MESSAGE_MAX_SIZE);
}
}
void DLTuc_RegisterTransmitSerialDataFunction(void LLSerialTrDataFunctionC(uint8_t *DltLogData, uint8_t Size))
{
ExtSerialTrDataFunctionCb = LLSerialTrDataFunctionC;
/*Preapre LOG DROP Info Log*/
/* 0x444C5443 - In Ascii code it is: DLTC. It is more convience to put magic numbers here :) */
PrepareDltHeader(DL_ERROR,0x444C5443, 0x444C5443,sizeof(DltLogDroppedInfo),DltLogDroppedInfoBuffer);
for(int i=0; i<sizeof(DltLogDroppedInfo); i++)
{
DltLogDroppedInfoBuffer[i+DLT_ACT_HEADER_SIZE] = DltLogDroppedInfo[i];
}
DLtLogDroppedSize = DLT_ACT_HEADER_SIZE + sizeof(DltLogDroppedInfo);
}
void DLTuc_MessageTransmitDone(void)
{
uint8_t TmpMessageSize=0;
uint8_t *TmpMessagePointer = NULL;
uint32_t ActualSysTime = 0u;
if(GetSystemTimeMs != NULL)
{
ActualSysTime = GetSystemTimeMs();
}
if(LogDroppedFlag == true && (ActualSysTime - PrevLogDropSendTime > DLT_MINIMUM_LOG_DROP_PERIOD) )
{
/* If DLTuc will always send the DROP Message info,
* then will not read any message from RB..*/
PrevLogDropSendTime = ActualSysTime;
LogDroppedFlag = false;
if(ExtSerialTrDataFunctionCb != NULL)
{
ExtSerialTrDataFunctionCb(DltLogDroppedInfoBuffer, DLtLogDroppedSize);
}
return;
}
DLTuc_OS_CRITICAL_START();
if(DLT_RB_TransmitRead(&DltTrsmtRingBuffer,&TmpMessageSize,&TmpMessagePointer) == RB_OK)
{
if(ExtSerialTrDataFunctionCb != NULL)
{
DLTuc_OS_CRITICAL_END();
ExtSerialTrDataFunctionCb(TmpMessagePointer, TmpMessageSize);
}
}
else
{
TransmitReadyStateFlag = true;
}
DLTuc_OS_CRITICAL_END();
}
void DLTuc_LogOutVarArgs(DltLogLevel_t Level, uint32_t AppId, uint32_t ContextId, uint8_t *Payload, ...)
{
uint16_t Size; /* */
uint8_t TmpMessageSize=0U; /* */
uint8_t *TmpMessagePointer = NULL; /* */
uint16_t writeIndex = 0U; /* */
if(DLT_RB_GetNextWriteIndex(&DltTrsmtRingBuffer,&writeIndex) != RB_OK)
{
DLTuc_OS_CRITICAL_START();
LogDroppedFlag = true;
DLTuc_OS_CRITICAL_END();
}
else
{
/* Put the DLT message data directly in ring buffer*/
va_list ap; /* */
va_start(ap, Payload);
Size = vsprintf((char *)&(DltTrsmtMessagesTab[writeIndex][DLT_ACT_HEADER_SIZE]), (char *)Payload,ap);
va_end(ap);
Size += DLT_ACT_HEADER_SIZE;
/*Add additional zeros on the end of message - thanks to that it work stable */
Size++;
DltTrsmtMessagesTab[writeIndex][Size] = 0U;
Size++;
DltTrsmtMessagesTab[writeIndex][Size] = 0U;
PrepareDltHeader(Level,AppId,ContextId,Size,&(DltTrsmtMessagesTab[writeIndex][0]));
Size = Size + DLT_ACT_HEADER_SIZE;
DltTrsmtRingBuffer.dataSize[writeIndex] = Size;
DLTuc_OS_CRITICAL_START();
DltTrsmtRingBuffer.readyToTransmit[writeIndex] = true;
DLTuc_OS_CRITICAL_END();
}
DLTuc_OS_CRITICAL_START();
if(TransmitReadyStateFlag == true)
{
if(DLT_RB_TransmitRead(&DltTrsmtRingBuffer,&TmpMessageSize,&TmpMessagePointer) == RB_OK)
{
if(TmpMessageSize != 0U)
{
TransmitReadyStateFlag = false;
DLTuc_OS_CRITICAL_END();
/*Log transmission must be started in this contex...*/
/***********************************************/
/* It may be a bug in implementation - it must be investigated.. */
/* It's important to be aware of this fact!!*/
/***********************************************/
if(ExtSerialTrDataFunctionCb != NULL)
{
ExtSerialTrDataFunctionCb(TmpMessagePointer, TmpMessageSize);
}
else
{
// while(1); /*Please Register the callback...*/
}
}
}
}
DLTuc_OS_CRITICAL_END();
}
void DLTuc_RegisterGetTimeStampMsCallback(uint32_t GetSysTime(void))
{
GetSystemTimeMs = GetSysTime;
}

90
BHBF_Robot_Washing_01/BASE/Src/BSP/bsp_DLT_Log.c

@ -0,0 +1,90 @@
/*
* bsp_DLT_Log.c
*
* Created on: Aug 8, 2024
* Author: akeguo
*/
#include "bsp_DLT_Log.h"
#define DLT_LOG_CONTEX "MAIN"
#define DLT_LOG_APPID "NUM1"
uint32_t GetSysTime(void);
void DltInjectDataRcvd(uint32_t AppId, uint32_t ConId, uint32_t ServId,
uint8_t *Data, uint16_t Size);
void DLT_LowLevelReceiveDmaToIdle(uint8_t *rxBuf, uint16_t size);
void DLT_DataReceiveEndCallback(uint8_t *rxBuf, uint16_t Size);
void DLT_DataTransmit(uint8_t *DltLogData, uint8_t Size);
struct UARTHandler *dLT_Log_UART_Handler;
void dLT_Log_intialize(struct UARTHandler *Handler)
{
dLT_Log_UART_Handler = Handler;
//log_info("angle_encoder_intialize");
dLT_Log_UART_Handler->UART_Decode = DLT_DataReceiveEndCallback;
/*Register Low Level Transmit/Receive functions for DLTuc Library*/
DLTuc_RegisterTransmitSerialDataFunction(DLT_DataTransmit);
DLTuc_RegisterReceiveSerialDataFunction(DLT_LowLevelReceiveDmaToIdle);
DLTuc_RegisterGetTimeStampMsCallback(GetSysTime); /*Register GetSysTime function*/
/*The function "GetSysTime" must return the time in ms*/
DLTuc_RegisterInjectionDataReceivedCb(DltInjectDataRcvd);
}
/*This CallBack was registered in main function using function: DLTuc_RegisterTransmitSerialDataFunction*/
void DLT_DataTransmit(uint8_t *DltLogData, uint8_t Size)
{
dLT_Log_UART_Handler->AddSendList(dLT_Log_UART_Handler,DltLogData,Size,100,NULL);
DLTuc_MessageTransmitDone();
}
/*CallBacks used by ucDltLibrary section end..*/
void DLT_DataReceiveEndCallback(uint8_t *rxBuf, uint16_t Size)
{
if(Size==3)
{
if(rxBuf[2])
{
DLT_LOG_ENABLE_LEVEL=7;
}
else
{
DLT_LOG_ENABLE_LEVEL=0;
}
}
DLTuc_RawDataReceiveDone(Size);
/*
*In case of STM32 HAL lib, you have to subsitute this function using:
*void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
*/
}
//HAL_UARTEx_RxEventCallback
void DLT_LowLevelReceiveDmaToIdle(uint8_t *rxBuf, uint16_t Size)
{
memcpy(rxBuf, dLT_Log_UART_Handler->Rx_Buf, Size);
}
void DltInjectDataRcvd(uint32_t AppId, uint32_t ConId, uint32_t ServId,
uint8_t *Data, uint16_t Size)
{
LOG("RecInjectionData: %s, ServId: %d Size: %d", Data, ServId, Size)
}
uint32_t GetSysTime(void)
{
return HAL_GetTick();
}

570
BHBF_Robot_Washing_01/BASE/Src/BSP/bsp_EEPROM.c

@ -0,0 +1,570 @@
/*
* bsp_EEPROM.c
*
* Created on: Oct 26, 2023
* Author: shiya
*/
#include "bsp_EEPROM.h"
void bsp_InitI2C(void);
void i2c_Start(void);
void i2c_Stop(void);
void i2c_SendByte(uint8_t _ucByte);
uint8_t i2c_ReadByte(void);
uint8_t i2c_WaitAck(void);
void i2c_Ack(void);
void i2c_NAck(void);
uint8_t i2c_CheckDevice(uint8_t _Address);
uint16_t App_Download_EEPROM_Addr= 1024;
/* 定义读写SCL和SDA的宏 */
#define I2C_SCL_GPIO EEPROM_SCL_GPIO_Port
#define I2C_SDA_GPIO EEPROM_SDA_GPIO_Port
#define I2C_SCL_PIN EEPROM_SCL_Pin
#define I2C_SDA_PIN EEPROM_SDA_Pin
#define I2C_SCL_1() I2C_SCL_GPIO->BSRR = I2C_SCL_PIN /* SCL = 1 */
#define I2C_SCL_0() I2C_SCL_GPIO->BSRR = ((uint32_t)I2C_SCL_PIN << 16U) /* SCL = 0 */
#define I2C_SDA_1() I2C_SDA_GPIO->BSRR = I2C_SDA_PIN /* SDA = 1 */
#define I2C_SDA_0() I2C_SDA_GPIO->BSRR = ((uint32_t)I2C_SDA_PIN << 16U) /* SDA = 0 */
#define I2C_SDA_READ() ((I2C_SDA_GPIO->IDR & I2C_SDA_PIN) != 0) /* 读SDA口线状态 */
#define I2C_SCL_READ() ((I2C_SCL_GPIO->IDR & I2C_SCL_PIN) != 0) /* 读SCL口线状态 */
uint8_t GF_BSP_EEPROM_Init(void)
{
bsp_InitI2C();
return(GF_BSP_EEPROM_CheckOK());
}
/*
*********************************************************************************************************
* : bsp_InitI2C
* : I2C总线的GPIOIO的方式实现
* :
* :
*********************************************************************************************************
*/
void bsp_InitI2C(void)
{
GPIO_InitTypeDef gpio_init;
gpio_init.Mode = GPIO_MODE_OUTPUT_OD; /* 设置开漏输出 */
gpio_init.Pull = GPIO_NOPULL; /* 上下拉电阻不使能 */
gpio_init.Speed = GPIO_SPEED_FREQ_LOW; // GPIO_SPEED_FREQ_HIGH; /* GPIO速度等级 */
gpio_init.Pin = I2C_SCL_PIN;
HAL_GPIO_Init(I2C_SCL_GPIO, &gpio_init);
gpio_init.Pin = I2C_SDA_PIN;
HAL_GPIO_Init(I2C_SDA_GPIO, &gpio_init);
/* 给一个停止信号, 复位I2C总线上的所有设备到待机模式 */
i2c_Stop();
}
/*
*********************************************************************************************************
* : i2c_Delay
* : I2C总线位延迟400KHz
* :
* :
*********************************************************************************************************
*/
static void i2c_Delay(void)
{
GF_BSP_TIMER_DelayUS(2);
}
/*
*********************************************************************************************************
* : i2c_Start
* : CPU发起I2C总线启动信号
* :
* :
*********************************************************************************************************
*/
void i2c_Start(void)
{
/* 当SCL高电平时,SDA出现一个下跳沿表示I2C总线启动信号 */
I2C_SDA_1();
I2C_SCL_1();
i2c_Delay();
I2C_SDA_0();
i2c_Delay();
I2C_SCL_0();
i2c_Delay();
}
/*
*********************************************************************************************************
* : i2c_Start
* : CPU发起I2C总线停止信号
* :
* :
*********************************************************************************************************
*/
void i2c_Stop(void)
{
/* 当SCL高电平时,SDA出现一个上跳沿表示I2C总线停止信号 */
I2C_SDA_0();
i2c_Delay();
I2C_SCL_1();
i2c_Delay();
I2C_SDA_1();
i2c_Delay();
}
/*
*********************************************************************************************************
* : i2c_SendByte
* : CPU向I2C总线设备发送8bit数据
* : _ucByte
* :
*********************************************************************************************************
*/
void i2c_SendByte(uint8_t _ucByte)
{
uint8_t i;
/* 先发送字节的高位bit7 */
for (i = 0; i < 8; i++)
{
if (_ucByte & 0x80)
{
I2C_SDA_1();
}
else
{
I2C_SDA_0();
}
i2c_Delay();
I2C_SCL_1();
i2c_Delay();
I2C_SCL_0();
I2C_SCL_0(); /* 2019-03-14 针对GT811电容触摸,添加一行,相当于延迟几十ns */
if (i == 7)
{
I2C_SDA_1(); // 释放总线
}
_ucByte <<= 1; /* 左移一个bit */
}
}
/*
*********************************************************************************************************
* : i2c_ReadByte
* : CPU从I2C总线设备读取8bit数据
* :
* :
*********************************************************************************************************
*/
uint8_t i2c_ReadByte(void)
{
uint8_t i;
uint8_t value;
/* 读到第1个bit为数据的bit7 */
value = 0;
for (i = 0; i < 8; i++)
{
value <<= 1;
I2C_SCL_1();
i2c_Delay();
if (I2C_SDA_READ())
{
value++;
}
I2C_SCL_0();
i2c_Delay();
}
return value;
}
/*
*********************************************************************************************************
* : i2c_WaitAck
* : CPU产生一个时钟ACK应答信号
* :
* : 01
*********************************************************************************************************
*/
uint8_t i2c_WaitAck(void)
{
uint8_t re;
I2C_SDA_1(); /* CPU释放SDA总线 */
i2c_Delay();
I2C_SCL_1(); /* CPU驱动SCL = 1, 此时器件会返回ACK应答 */
i2c_Delay();
if (I2C_SDA_READ()) /* CPU读取SDA口线状态 */
{
re = 1;
}
else
{
re = 0;
}
I2C_SCL_0();
i2c_Delay();
return re;
}
/*
*********************************************************************************************************
* : i2c_Ack
* : CPU产生一个ACK信号
* :
* :
*********************************************************************************************************
*/
void i2c_Ack(void)
{
I2C_SDA_0(); /* CPU驱动SDA = 0 */
i2c_Delay();
I2C_SCL_1(); /* CPU产生1个时钟 */
i2c_Delay();
I2C_SCL_0();
i2c_Delay();
I2C_SDA_1(); /* CPU释放SDA总线 */
i2c_Delay();
}
/*
*********************************************************************************************************
* : i2c_NAck
* : CPU产生1个NACK信号
* :
* :
*********************************************************************************************************
*/
void i2c_NAck(void)
{
I2C_SDA_1(); /* CPU驱动SDA = 1 */
i2c_Delay();
I2C_SCL_1(); /* CPU产生1个时钟 */
i2c_Delay();
I2C_SCL_0();
i2c_Delay();
}
/*
*********************************************************************************************************
* : i2c_CheckDevice
* : I2C总线设备CPU向发送设备地址
* : _AddressI2C总线地址
* : 0 1
*********************************************************************************************************
*/
uint8_t i2c_CheckDevice(uint8_t _Address)
{
uint8_t ucAck;
if (I2C_SDA_READ() && I2C_SCL_READ())
{
i2c_Start(); /* 发送启动信号 */
/* 发送设备地址+读写控制bit(0 = w, 1 = r) bit7 先传 */
i2c_SendByte(_Address | I2C_WR);
ucAck = i2c_WaitAck(); /* 检测设备的ACK应答 */
i2c_Stop(); /* 发送停止信号 */
return ucAck;
}
return 1; /* I2C总线异常 */
}
/*
*********************************************************************************************************
* : ee_CheckOk
* : EERPOM是否正常
* :
* : 1 0
*********************************************************************************************************
*/
uint8_t GF_BSP_EEPROM_CheckOK(void)
{
if (i2c_CheckDevice(EE_DEV_ADDR) == 0)
{
return 1;
}
else
{
/* 失败后,切记发送I2C总线停止信号 */
i2c_Stop();
return 0;
}
}
/*
*********************************************************************************************************
* : GF_BSP_EEPROM_ReadBytes
* : EEPROM指定地址处开始读取若干数据
* : _usAddress :
* _usSize :
* _pReadBuf :
* : 0 1
*********************************************************************************************************
*/
uint8_t GF_BSP_EEPROM_ReadBytes(uint8_t *_pReadBuf, uint16_t _usAddress, uint16_t _usSize)
{
uint16_t i;
/* 采用串行EEPROM随即读取指令序列,连续读取若干字节 */
/* 第1步:发起I2C总线启动信号 */
i2c_Start();
/* 第2步:发起控制字节,高7bit是地址,bit0是读写控制位,0表示写,1表示读 */
i2c_SendByte(EE_DEV_ADDR | I2C_WR); /* 此处是写指令 */
/* 第3步:发送ACK */
if (i2c_WaitAck() != 0)
{
goto cmd_fail; /* EEPROM器件无应答 */
}
/* 第4步:发送字节地址,24C02只有256字节,因此1个字节就够了,如果是24C04以上,那么此处需要连发多个地址 */
if (EE_ADDR_BYTES == 1)
{
i2c_SendByte((uint8_t)_usAddress);
if (i2c_WaitAck() != 0)
{
goto cmd_fail; /* EEPROM器件无应答 */
}
}
else
{
i2c_SendByte(_usAddress >> 8);
if (i2c_WaitAck() != 0)
{
goto cmd_fail; /* EEPROM器件无应答 */
}
i2c_SendByte(_usAddress&0xff);
if (i2c_WaitAck() != 0)
{
goto cmd_fail; /* EEPROM器件无应答 */
}
}
/* 第6步:重新启动I2C总线。下面开始读取数据 */
i2c_Start();
/* 第7步:发起控制字节,高7bit是地址,bit0是读写控制位,0表示写,1表示读 */
i2c_SendByte(EE_DEV_ADDR | I2C_RD); /* 此处是读指令 */
/* 第8步:发送ACK */
if (i2c_WaitAck() != 0)
{
goto cmd_fail; /* EEPROM器件无应答 */
}
/* 第9步:循环读取数据 */
for (i = 0; i < _usSize; i++)
{
_pReadBuf[i] = i2c_ReadByte(); /* 读1个字节 */
/* 每读完1个字节后,需要发送Ack, 最后一个字节不需要Ack,发Nack */
if (i != _usSize - 1)
{
i2c_Ack(); /* 中间字节读完后,CPU产生ACK信号(驱动SDA = 0) */
}
else
{
i2c_NAck(); /* 最后1个字节读完后,CPU产生NACK信号(驱动SDA = 1) */
}
}
/* 发送I2C总线停止信号 */
i2c_Stop();
return 1; /* 执行成功 */
cmd_fail: /* 命令执行失败后,切记发送停止信号,避免影响I2C总线上其他设备 */
/* 发送I2C总线停止信号 */
i2c_Stop();
return 0;
}
/*
*********************************************************************************************************
* : GF_BSP_EEPROM_WriteBytes
* : EEPROM指定地址写入若干数据
* : _usAddress :
* _usSize :
* _pWriteBuf :
* : 0 1
*********************************************************************************************************
*/
uint8_t GF_BSP_EEPROM_WriteBytes(uint8_t *_pWriteBuf, uint16_t _usAddress, uint16_t _usSize)
{
uint16_t i,m;
uint16_t usAddr;
/*
EEPROM不像读操作可以连续读取很多字节page
24xx02page size = 8
1
: page wirte操作
*/
usAddr = _usAddress;
for (i = 0; i < _usSize; i++)
{
/* 当发送第1个字节或是页面首地址时,需要重新发起启动信号和地址 */
if ((i == 0) || (usAddr & (EE_PAGE_SIZE - 1)) == 0)
{
/* 第0步:发停止信号,启动内部写操作 */
i2c_Stop();
/* 通过检查器件应答的方式,判断内部写操作是否完成, 一般小于 10ms
CLK频率为200KHz时30
*/
for (m = 0; m < 1000; m++)
{
/* 第1步:发起I2C总线启动信号 */
i2c_Start();
/* 第2步:发起控制字节,高7bit是地址,bit0是读写控制位,0表示写,1表示读 */
i2c_SendByte(EE_DEV_ADDR | I2C_WR); /* 此处是写指令 */
/* 第3步:发送一个时钟,判断器件是否正确应答 */
if (i2c_WaitAck() == 0)
{
break;
}
}
if (m == 1000)
{
goto cmd_fail; /* EEPROM器件写超时 */
}
/* 第4步:发送字节地址,24C02只有256字节,因此1个字节就够了,如果是24C04以上,那么此处需要连发多个地址 */
if (EE_ADDR_BYTES == 1)
{
i2c_SendByte((uint8_t)usAddr);
if (i2c_WaitAck() != 0)
{
goto cmd_fail; /* EEPROM器件无应答 */
}
}
else
{
i2c_SendByte(usAddr >> 8);
if (i2c_WaitAck() != 0)
{
goto cmd_fail; /* EEPROM器件无应答 */
}
i2c_SendByte(usAddr&0xff);
if (i2c_WaitAck() != 0)
{
goto cmd_fail; /* EEPROM器件无应答 */
}
}
}
/* 第6步:开始写入数据 */
i2c_SendByte(_pWriteBuf[i]);
/* 第7步:发送ACK */
if (i2c_WaitAck() != 0)
{
goto cmd_fail; /* EEPROM器件无应答 */
}
usAddr++; /* 地址增1 */
}
/* 命令执行成功,发送I2C总线停止信号 */
i2c_Stop();
/* 通过检查器件应答的方式,判断内部写操作是否完成, 一般小于 10ms
CLK频率为200KHz时30
*/
for (m = 0; m < 1000; m++)
{
/* 第1步:发起I2C总线启动信号 */
i2c_Start();
/* 第2步:发起控制字节,高7bit是地址,bit0是读写控制位,0表示写,1表示读 */
#if EE_ADDR_A8 == 1
i2c_SendByte(EE_DEV_ADDR | I2C_WR | ((_usAddress >> 7) & 0x0E)); /* 此处是写指令 */
#else
i2c_SendByte(EE_DEV_ADDR | I2C_WR); /* 此处是写指令 */
#endif
/* 第3步:发送一个时钟,判断器件是否正确应答 */
if (i2c_WaitAck() == 0)
{
break;
}
}
if (m == 1000)
{
goto cmd_fail; /* EEPROM器件写超时 */
}
/* 命令执行成功,发送I2C总线停止信号 */
i2c_Stop();
return 1;
cmd_fail: /* 命令执行失败后,切记发送停止信号,避免影响I2C总线上其他设备 */
/* 发送I2C总线停止信号 */
i2c_Stop();
return 0;
}
CV_struct_define GF_BSP_EEPROM_Get_CV(void)
{
CV_struct_define cv= {0};
//char buffer[sizeof(CV_struct_define)];
GF_BSP_EEPROM_ReadBytes(&cv, GF_BSP_EEPROM_CV_struct_define_Start_Address, sizeof(CV_struct_define));
return cv;
}
uint8_t GF_BSP_EEPROM_Set_CV(CV_struct_define cv)
{
return GF_BSP_EEPROM_WriteBytes((uint8_t*)&cv,GF_BSP_EEPROM_CV_struct_define_Start_Address,sizeof(CV_struct_define));
}
IAP_struct_define GF_BSP_EEPROM_Get_IAP(void)
{
IAP_struct_define iap= {0};
GF_BSP_EEPROM_ReadBytes(&iap, IAP_struct_define_Start_Address, sizeof(IAP_struct_define));
return iap;
}
uint8_t GF_BSP_EEPROM_Set_IAP(IAP_struct_define iap)
{
return GF_BSP_EEPROM_WriteBytes((uint8_t*)&iap,IAP_struct_define_Start_Address,sizeof(IAP_struct_define));
}
PV_struct_define GF_BSP_EEPROM_Get_PV(void)
{
CV_struct_define cv=GF_BSP_EEPROM_Get_CV();
return cv.PV;
}
uint8_t GF_BSP_EEPROM_Set_PV(PV_struct_define pv)
{
CV_struct_define cv=GF_BSP_EEPROM_Get_CV();
cv.PV=pv;
return GF_BSP_EEPROM_Set_CV(cv);
}

26
BHBF_Robot_Washing_01/BASE/Src/BSP/bsp_Error_Detect.c

@ -0,0 +1,26 @@
/*
* bsp_Error_Detect.c
*
* Created on: Oct 23, 2024
* Author: akeguo
*/
#include "bsp_Error_Detect.h"
void ErrorDetect();
HardWareController *HardWareErrorController;
void Error_Detect_Intialzie(uint16_t DispacherPeriod)
{
HardWareErrorController = (HardWareController*) malloc(
sizeof(HardWareController));
HardWareErrorController->pComHWHead = NULL;
HardWareErrorController->pComHWTail = NULL;
HardWareErrorController->Add_PCOMHardWare = ComHardWare_List_Add_t;
HardWareErrorController->Set_PCOMHardWare = Set_PCOMHardWare_t;
HardWareErrorController->PCOMHardWare_Check = PCOMHardWare_Check_t;
HardWareErrorController->DispacherCallTime = DispacherPeriod;//check the communicaton every 50ms
GF_BSP_Interrupt_Add_CallBack(
DF_BSP_InterCall_TIM8_2ms_PeriodElapsedCallback, ErrorDetect);
}
void ErrorDetect()
{
HardWareErrorController->PCOMHardWare_Check(HardWareErrorController);
}

356
BHBF_Robot_Washing_01/BASE/Src/BSP/bsp_FDCAN.c

@ -0,0 +1,356 @@
/*
* bsp_FDCAN.c
*
* Created on: Oct 26, 2023
* Author: shiya
*/
#include "bsp_FDCAN.h"
#include "main.h"
#include <stdlib.h>
#include "bsp_Error.pb.h"
#include "msp_TI5MOTOR.h"
FDCANHandler FD_CAN_1_Handler; //自定义结构体
FDCANHandler FD_CAN_2_Handler;
FDCAN_RxHeaderTypeDef CAN_RX_HDR;
uint8_t CAN_Buf[8];
uint8_t CAN_Buf_2[8];
int32_t CAN_ID;
int32_t CAN_ID_2;
uint8_t GF_BSP_FDCAN_Init(void)
{
if (HAL_FDCAN_ActivateNotification(&hfdcan1, FDCAN_IT_RX_FIFO0_NEW_MESSAGE,
0) != HAL_OK)
{
Error_Handler();
}
if (HAL_FDCAN_ActivateNotification(&hfdcan1, FDCAN_IT_BUS_OFF, 0) != HAL_OK)
{
Error_Handler();
}
HAL_FDCAN_Start(&hfdcan1);
if (HAL_FDCAN_ActivateNotification(&hfdcan2, FDCAN_IT_RX_FIFO0_NEW_MESSAGE,
0) != HAL_OK)
{
Error_Handler();
}
if (HAL_FDCAN_ActivateNotification(&hfdcan2, FDCAN_IT_BUS_OFF, 0) != HAL_OK)
{
Error_Handler();
}
HAL_FDCAN_Start(&hfdcan2);
return 1;
}
void HAL_FDCAN_ErrorStatusCallback(FDCAN_HandleTypeDef *hfdcan,
uint32_t ErrorStatusITs)
{
if (hfdcan->Instance == FDCAN1)
{
MX_FDCAN1_Init();
}
if (hfdcan->Instance == FDCAN2)
{
MX_FDCAN2_Init();
}
}
void HAL_FDCAN_RxFifo0Callback(FDCAN_HandleTypeDef *hfdcan, uint32_t RxFifo0ITs)
{
if (hfdcan->Instance == FDCAN1)
{
if (HAL_FDCAN_GetRxMessage(hfdcan, FDCAN_RX_FIFO0, &CAN_RX_HDR, CAN_Buf)
== HAL_OK)
{
CAN_ID = FD_CAN_1_Handler.ReceivedFrameID =
(uint32_t) CAN_RX_HDR.Identifier;
#if NewCANSendVersion
FD_CAN_1_Handler.ReceivedLength = (uint32_t) CAN_RX_HDR.DataLength;
#else
FD_CAN_1_Handler.ReceivedLength = (uint32_t) CAN_RX_HDR.DataLength>>16;
#endif
if (FD_CAN_1_Handler.CAN_Decode != NULL )
{
FD_CAN_1_Handler.CAN_Decode(FD_CAN_1_Handler.ReceivedFrameID,
CAN_Buf, FD_CAN_1_Handler.ReceivedLength);
}
GF_BSP_Interrupt_Run_CallBack(DF_BSP_InterCall_FDCAN1_RxFifo0Callback);
}
} else if (hfdcan->Instance == FDCAN2)
{
if (HAL_FDCAN_GetRxMessage(hfdcan, FDCAN_RX_FIFO0, &CAN_RX_HDR,
CAN_Buf_2) == HAL_OK)
{
CAN_ID_2 = FD_CAN_2_Handler.ReceivedFrameID =
(uint32_t) CAN_RX_HDR.Identifier;
#if NewCANSendVersion
FD_CAN_2_Handler.ReceivedLength = (uint32_t) CAN_RX_HDR.DataLength;
#else
FD_CAN_2_Handler.ReceivedLength = (uint32_t) CAN_RX_HDR.DataLength>>16;
#endif
if (FD_CAN_2_Handler.CAN_Decode != NULL)
{
FD_CAN_2_Handler.CAN_Decode(FD_CAN_2_Handler.ReceivedFrameID,
CAN_Buf_2, FD_CAN_2_Handler.ReceivedLength);
}
GF_BSP_Interrupt_Run_CallBack(DF_BSP_InterCall_FDCAN2_RxFifo0Callback);
}
}
}
FDCAN_TxHeaderTypeDef TXHeader1;
FDCAN_TxHeaderTypeDef TXHeader2;
void GF_BSP_FDCAN_Senddata(uint8_t FDCAN_CH, uint32_t FrameID,
uint8_t DataLength, uint8_t *Txdata)
{
if (DataLength > 8)
{
return;
}
if (FDCAN_CH == 1)
{
TXHeader1.BitRateSwitch = FDCAN_BRS_OFF;
#if NewCANSendVersion
TXHeader1.DataLength = (uint32_t) DataLength;
#else
TXHeader1.DataLength = (uint32_t) DataLength << 16;
#endif
// FDCAN_DLC_BYTES_8//数据长度大于8的话会有错误
// FDCAN_DLC_BYTES_8//数据长度大于8的话会有错误
TXHeader1.FDFormat = FDCAN_CLASSIC_CAN;
TXHeader1.IdType = FDCAN_STANDARD_ID;
TXHeader1.Identifier = FrameID;
TXHeader1.TxFrameType = FDCAN_DATA_FRAME;
HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan1, &TXHeader1, Txdata);
} else if (FDCAN_CH == 2)
{
TXHeader2.BitRateSwitch = FDCAN_BRS_OFF;
#if NewCANSendVersion
TXHeader2.DataLength = (uint32_t) DataLength;
#else
TXHeader2.DataLength = (uint32_t) DataLength << 16;
#endif
//TXHeader2.DataLength = (uint32_t) DataLength << 16; //数据长度大于8的话会有错误
TXHeader2.FDFormat = FDCAN_CLASSIC_CAN;
TXHeader2.IdType = FDCAN_STANDARD_ID;
TXHeader2.Identifier = FrameID;
TXHeader2.TxFrameType = FDCAN_DATA_FRAME;
HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan2, &TXHeader2, Txdata);
}
}
void GF_BSP_CANHandler_Init(int can1_sendListPeriod, int can1_DispacherPeriod,
int can2_sendListPeriod, int can2_DispacherPeriod)
{
GF_BSP_CANHandler_Init_CAN(&FD_CAN_1_Handler, &hfdcan1, can1_sendListPeriod,
can1_DispacherPeriod);
GF_BSP_CANHandler_Init_CAN(&FD_CAN_2_Handler, &hfdcan2, can2_sendListPeriod,
can2_DispacherPeriod);
GF_BSP_Interrupt_Add_CallBack(
DF_BSP_InterCall_TIM8_2ms_PeriodElapsedCallback, GF_BSP_CAN_Timer);
}
void GF_BSP_CANHandler_Init_CAN(FDCANHandler *handler,
FDCAN_HandleTypeDef *canfd, int sendListPeriod, int DispacherPeriod)
{
handler->canfd = canfd;
handler->dispacherController = (DispacherController*) malloc(
sizeof(DispacherController));
handler->dispacherController->pHead = NULL;
handler->dispacherController->pTail = NULL;
handler->dispacherController->Dispacher_Enable = 1;
handler->dispacherController->DispacherCallTime = DispacherPeriod ; // call the function every 50 ms
handler->dispacherController->Dispacher_Counter = 0;
handler->dispacherController->DispacherNumber = 0;
handler->dispacherController->Add_Dispatcher_List = Dispatcher_List_Add_t;
handler->dispacherController->Dispatcher_Run = Dispatch_t;
handler->timeSpan = 2;
handler->SendList_time_Count = 0;
handler->AddCANSendList = CANHandlerAddTxList;
handler->SendList_Period = sendListPeriod;
handler->CAN_Send = CAN_Send_t;
handler->CAN_Send_Data = CAN_Send_Data_t;
}
DispacherController *can_dispacherController;
HardWareController *can_HardWareController;
void GF_BSP_CAN_Timer() //2ms一次
{
can_dispacherController = FD_CAN_1_Handler.dispacherController;
if (FD_CAN_1_Handler.pCurrentCANSendHadler != NULL)
{
GF_CAN_Send_List_Send(&FD_CAN_1_Handler);
} else
{
can_dispacherController = FD_CAN_1_Handler.dispacherController;
can_dispacherController->Dispatcher_Run(can_dispacherController);
}
if (FD_CAN_2_Handler.pCurrentCANSendHadler != NULL)
{
GF_CAN_Send_List_Send(&FD_CAN_2_Handler);
} else
{
can_dispacherController = FD_CAN_2_Handler.dispacherController;
can_dispacherController->Dispatcher_Run(can_dispacherController);
}
}
void GF_CAN_Send_List_Send(FDCANHandler *handler)
{
handler->SendList_time_Count++;
if (handler->timeSpan * handler->SendList_time_Count
>= handler->SendList_Period)
{
handler->SendList_time_Count = 0;
handler->SendListExists = 1;
if (handler->pCurrentCANSendHadler != NULL)
{
//拷贝数据到相关的代码中,然后发送
handler->SendFrameID=handler->pCurrentCANSendHadler->CAN_ID;
//handler->CAN_Decode = handler->pCurrentCANSendHadler->CAN_Decode; //
memcpy(handler->Tx_Buf, handler->pCurrentCANSendHadler->Tx_Buf,
handler->pCurrentCANSendHadler->SendLength);
handler->SendList_Period=handler->pCurrentCANSendHadler->SendListTimePeriod;
handler->SendLength = handler->pCurrentCANSendHadler->SendLength;
handler->CAN_Send_Data(handler);
if (handler->pCurrentCANSendHadler->pNext != NULL)
{
CANSendHandler *temp = handler->pCurrentCANSendHadler->pNext;
free(handler->pCurrentCANSendHadler); //清除内存
handler->pCurrentCANSendHadler = temp;
} else
{
free(handler->pCurrentCANSendHadler); //清除内存
handler->pCurrentCANSendHadler = NULL;
}
} else
{
handler->SendListExists = 0;
}
}
}
void CAN_Send_t(struct _FDCANHandler *fd, uint32_t FrameID, uint8_t DataLength,
uint8_t *Txdata)
{
Function_code=Txdata[0];
if (DataLength > 8)
{
return;
}
if (fd->canfd == &hfdcan1)
{
TXHeader1.BitRateSwitch = FDCAN_BRS_OFF;
#if NewCANSendVersion
TXHeader1.DataLength = (uint32_t) DataLength ;
#else
TXHeader1.DataLength = (uint32_t) DataLength << 16; //数据长度大于8的话会有错误
#endif
TXHeader1.FDFormat = FDCAN_CLASSIC_CAN;
TXHeader1.IdType = FDCAN_STANDARD_ID;
TXHeader1.Identifier = FrameID;
TXHeader1.TxFrameType = FDCAN_DATA_FRAME;
HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan1, &TXHeader1, Txdata);
} else if (fd->canfd == &hfdcan2)
{
TXHeader2.BitRateSwitch = FDCAN_BRS_OFF;
#if NewCANSendVersion
TXHeader2.DataLength = (uint32_t) DataLength ;
#else
TXHeader2.DataLength = (uint32_t) DataLength << 16; //数据长度大于8的话会有错误
#endif
//TXHeader2.DataLength = (uint32_t) DataLength << 16; //数据长度大于8的话会有错误
TXHeader2.FDFormat = FDCAN_CLASSIC_CAN;
TXHeader2.IdType = FDCAN_STANDARD_ID;
TXHeader2.Identifier = FrameID;
TXHeader2.TxFrameType = FDCAN_DATA_FRAME;
HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan2, &TXHeader2, Txdata);
}
}
void CAN_Send_Data_t(struct _FDCANHandler *fd)
{
CAN_Send_t(fd, fd->SendFrameID, fd->SendLength, fd->Tx_Buf);
}
void CANHandlerAddTxList(FDCANHandler *handler, uint32_t CAN_ID,
uint8_t SendLength, uint8_t *Tx_Buf,uint32_t sendListTimePeriod,
void (*CAN_Decode)(uint32_t, uint8_t*, uint32_t))
{
CANSendHandler *pTmp = NULL; //临时指针
//临时指针2用于逐个申请内存
pTmp = (CANSendHandler*) malloc(sizeof(CANSendHandler));
memcpy(pTmp->Tx_Buf, Tx_Buf, SendLength);
pTmp->pNext = NULL;
pTmp->CAN_ID=CAN_ID;
pTmp->SendLength = SendLength;
//pTmp->CAN_Decode = CAN_Decode;
pTmp->SendListTimePeriod=sendListTimePeriod;
//if NULL, call intialize one
if (handler->pCurrentCANSendHadler == NULL)
{
handler->pCurrentCANSendHadler = pTmp; //空链表
} else
{
char i = 0;
//插到尾部
CANSendHandler *phead = NULL;
phead = handler->pCurrentCANSendHadler;
while (phead->pNext != NULL)
{
i++;
phead = phead->pNext;
}
phead->pNext = pTmp;
}
}

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save