- Storing an error code from a response on UMB offline request

- Sending status on any UMB errors detected
pull/2/head
Mateusz Lubecki 2020-04-11 21:37:01 +02:00
rodzic 033ccdd50d
commit 13796f63f6
15 zmienionych plików z 204 dodań i 76 usunięć

Wyświetl plik

@ -234,42 +234,42 @@
<configuration 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="${cross_rm} -rf" description="" id="ilg.gnuarmeclipse.managedbuild.cross.config.elf.release.1905520139" name="Release" parent="ilg.gnuarmeclipse.managedbuild.cross.config.elf.release">
<folderInfo id="ilg.gnuarmeclipse.managedbuild.cross.config.elf.release.1905520139." name="/" resourcePath="">
<toolChain id="ilg.gnuarmeclipse.managedbuild.cross.toolchain.elf.release.1321065803" name="Cross ARM GCC" superClass="ilg.gnuarmeclipse.managedbuild.cross.toolchain.elf.release">
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level.1432589103" name="Optimization Level" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level" value="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level.size" valueType="enumerated"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.messagelength.2040794882" name="Message length (-fmessage-length=0)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.messagelength" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.signedchar.1525868211" name="'char' is signed (-fsigned-char)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.signedchar" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.functionsections.115297527" name="Function sections (-ffunction-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.functionsections" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.datasections.358155238" name="Data sections (-fdata-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.datasections" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.level.254671374" name="Debug level" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.level"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.format.372129711" name="Debug format" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.format"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.allwarn.1898991829" name="Enable all common warnings (-Wall)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.allwarn" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.extrawarn.1384253198" name="Enable extra warnings (-Wextra)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.extrawarn" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.freestanding.1474503896" name="Assume freestanding environment (-ffreestanding)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.freestanding" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.toolchain.name.1164499272" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.toolchain.name" value="GNU Tools for ARM Embedded Processors" valueType="string"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.architecture.1186919090" name="Architecture" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.architecture" value="ilg.gnuarmeclipse.managedbuild.cross.option.architecture.arm" valueType="enumerated"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.family.498480515" name="ARM family" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.family" value="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.mcpu.cortex-m3" valueType="enumerated"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.instructionset.1609093818" name="Instruction set" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.instructionset" value="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.instructionset.thumb" valueType="enumerated"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.prefix.1575763280" name="Prefix" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.prefix" value="arm-none-eabi-" valueType="string"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.c.268652809" name="C compiler" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.c" value="gcc" valueType="string"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.cpp.1530233960" name="C++ compiler" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.cpp" value="g++" valueType="string"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.ar.601574981" name="Archiver" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.ar" value="ar" valueType="string"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.objcopy.1286721808" name="Hex/Bin converter" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.objcopy" value="objcopy" valueType="string"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.objdump.58384500" name="Listing generator" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.objdump" value="objdump" valueType="string"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.size.337940637" name="Size command" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.size" value="size" valueType="string"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.make.1183929474" name="Build command" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.make" value="make" valueType="string"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.rm.1371938612" name="Remove command" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.rm" value="rm" valueType="string"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.createflash.1632058013" name="Create flash image" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.createflash" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.printsize.1411824993" name="Print size" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.printsize" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level.1432589103" name="Optimization Level" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level" useByScannerDiscovery="true" value="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.level.size" valueType="enumerated"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.messagelength.2040794882" name="Message length (-fmessage-length=0)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.messagelength" useByScannerDiscovery="true" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.signedchar.1525868211" name="'char' is signed (-fsigned-char)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.signedchar" useByScannerDiscovery="true" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.functionsections.115297527" name="Function sections (-ffunction-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.functionsections" useByScannerDiscovery="true" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.datasections.358155238" name="Data sections (-fdata-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.datasections" useByScannerDiscovery="true" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.level.254671374" name="Debug level" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.level" useByScannerDiscovery="true"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.format.372129711" name="Debug format" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.debugging.format" useByScannerDiscovery="true"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.allwarn.1898991829" name="Enable all common warnings (-Wall)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.allwarn" useByScannerDiscovery="true" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.extrawarn.1384253198" name="Enable extra warnings (-Wextra)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.warnings.extrawarn" useByScannerDiscovery="true" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.freestanding.1474503896" name="Assume freestanding environment (-ffreestanding)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.optimization.freestanding" useByScannerDiscovery="true" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.toolchain.name.1164499272" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.toolchain.name" useByScannerDiscovery="false" value="GNU Tools for ARM Embedded Processors" valueType="string"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.architecture.1186919090" name="Architecture" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.architecture" useByScannerDiscovery="false" value="ilg.gnuarmeclipse.managedbuild.cross.option.architecture.arm" valueType="enumerated"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.family.498480515" name="ARM family" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.family" useByScannerDiscovery="false" value="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.mcpu.cortex-m3" valueType="enumerated"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.instructionset.1609093818" name="Instruction set" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.instructionset" useByScannerDiscovery="false" value="ilg.gnuarmeclipse.managedbuild.cross.option.arm.target.instructionset.thumb" valueType="enumerated"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.prefix.1575763280" name="Prefix" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.prefix" useByScannerDiscovery="false" value="arm-none-eabi-" valueType="string"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.c.268652809" name="C compiler" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.c" useByScannerDiscovery="false" value="gcc" valueType="string"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.cpp.1530233960" name="C++ compiler" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.cpp" useByScannerDiscovery="false" value="g++" valueType="string"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.ar.601574981" name="Archiver" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.ar" useByScannerDiscovery="false" value="ar" valueType="string"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.objcopy.1286721808" name="Hex/Bin converter" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.objcopy" useByScannerDiscovery="false" value="objcopy" valueType="string"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.objdump.58384500" name="Listing generator" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.objdump" useByScannerDiscovery="false" value="objdump" valueType="string"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.size.337940637" name="Size command" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.size" useByScannerDiscovery="false" value="size" valueType="string"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.make.1183929474" name="Build command" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.make" useByScannerDiscovery="false" value="make" valueType="string"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.command.rm.1371938612" name="Remove command" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.command.rm" useByScannerDiscovery="false" value="rm" valueType="string"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.createflash.1632058013" name="Create flash image" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.createflash" useByScannerDiscovery="false" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.printsize.1411824993" name="Print size" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.addtools.printsize" useByScannerDiscovery="false" value="true" valueType="boolean"/>
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="ilg.gnuarmeclipse.managedbuild.cross.targetPlatform.234489538" isAbstract="false" osList="all" superClass="ilg.gnuarmeclipse.managedbuild.cross.targetPlatform"/>
<builder buildPath="${workspace_loc:/proba3-vldiscovery}/Release" id="ilg.gnuarmeclipse.managedbuild.cross.builder.335665954" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" superClass="ilg.gnuarmeclipse.managedbuild.cross.builder"/>
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.assembler.21921314" name="Cross ARM GNU Assembler" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.assembler">
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.usepreprocessor.677688064" name="Use preprocessor" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.usepreprocessor" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.include.paths.1140371832" name="Include paths (-I)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.include.paths" valueType="includePath">
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.usepreprocessor.677688064" name="Use preprocessor" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.usepreprocessor" useByScannerDiscovery="false" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.include.paths.1140371832" name="Include paths (-I)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.include.paths" useByScannerDiscovery="false" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;../include&quot;"/>
<listOptionValue builtIn="false" value="&quot;../system/include&quot;"/>
<listOptionValue builtIn="false" value="&quot;../system/include/cmsis&quot;"/>
<listOptionValue builtIn="false" value="&quot;../system/include/stm32f1-stdperiph&quot;"/>
</option>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.defs.1082382042" name="Defined symbols (-D)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.defs" valueType="definedSymbols">
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.defs.1082382042" name="Defined symbols (-D)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.assembler.defs" useByScannerDiscovery="false" valueType="definedSymbols">
<listOptionValue builtIn="false" value="OS_USE_TRACE_SEMIHOSTING_DEBUG"/>
<listOptionValue builtIn="false" value="STM32F10X_MD_VL"/>
<listOptionValue builtIn="false" value="USE_STDPERIPH_DRIVER"/>
@ -280,6 +280,7 @@
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.879859241" name="Cross ARM C Compiler" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler">
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.include.paths.1107333580" name="Include paths (-I)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.include.paths" useByScannerDiscovery="false" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;../include&quot;"/>
<listOptionValue builtIn="false" value="&quot;../system/include/aprs&quot;"/>
<listOptionValue builtIn="false" value="&quot;../system/include&quot;"/>
<listOptionValue builtIn="false" value="&quot;../system/include/cmsis&quot;"/>
<listOptionValue builtIn="false" value="&quot;../system/include/stm32f1-stdperiph&quot;"/>
@ -295,6 +296,7 @@
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler.176156905" name="Cross ARM C++ Compiler" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler">
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.include.paths.843080906" name="Include paths (-I)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.compiler.include.paths" useByScannerDiscovery="false" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;../include&quot;"/>
<listOptionValue builtIn="false" value="&quot;../system/include/aprs&quot;"/>
<listOptionValue builtIn="false" value="&quot;../system/include&quot;"/>
<listOptionValue builtIn="false" value="&quot;../system/include/cmsis&quot;"/>
<listOptionValue builtIn="false" value="&quot;../system/include/stm32f1-stdperiph&quot;"/>
@ -325,17 +327,17 @@
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.usenewlibnano.304408116" name="Use newlib-nano (--specs=nano.specs)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.linker.usenewlibnano" value="true" valueType="boolean"/>
</tool>
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.linker.1018533854" name="Cross ARM C++ Linker" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.linker">
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.gcsections.1346809662" name="Remove unused sections (-Xlinker --gc-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.gcsections" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.paths.441490646" name="Library search path (-L)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.paths" valueType="libPaths">
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.gcsections.1346809662" name="Remove unused sections (-Xlinker --gc-sections)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.gcsections" useByScannerDiscovery="false" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.paths.441490646" name="Library search path (-L)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.paths" useByScannerDiscovery="false" valueType="libPaths">
<listOptionValue builtIn="false" value="&quot;../ldscripts&quot;"/>
</option>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.scriptfile.2127610610" name="Script files (-T)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.scriptfile" valueType="stringList">
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.scriptfile.2127610610" name="Script files (-T)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.scriptfile" useByScannerDiscovery="false" valueType="stringList">
<listOptionValue builtIn="false" value="mem.ld"/>
<listOptionValue builtIn="false" value="libs.ld"/>
<listOptionValue builtIn="false" value="sections.ld"/>
</option>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.nostart.798552405" name="Do not use standard start files (-nostartfiles)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.nostart" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.usenewlibnano.711675791" name="Use newlib-nano (--specs=nano.specs)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.usenewlibnano" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.nostart.798552405" name="Do not use standard start files (-nostartfiles)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.nostart" useByScannerDiscovery="false" value="true" valueType="boolean"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.usenewlibnano.711675791" name="Use newlib-nano (--specs=nano.specs)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.cpp.linker.usenewlibnano" useByScannerDiscovery="false" value="true" valueType="boolean"/>
<inputType id="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.linker.input.1290850385" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.cpp.linker.input">
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
@ -351,7 +353,7 @@
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.wide.1519378390" name="Wide lines (--wide|-w)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.createlisting.wide" value="true" valueType="boolean"/>
</tool>
<tool id="ilg.gnuarmeclipse.managedbuild.cross.tool.printsize.2014280904" name="Cross ARM GNU Print Size" superClass="ilg.gnuarmeclipse.managedbuild.cross.tool.printsize">
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.printsize.format.89298116" name="Size format" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.printsize.format"/>
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.printsize.format.89298116" name="Size format" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.printsize.format" useByScannerDiscovery="false"/>
</tool>
</toolChain>
</folderInfo>

1
.gitignore vendored
Wyświetl plik

@ -3,5 +3,6 @@
*.map
station_config.h
Debug/
Release/
*.hex
*.elf

Wyświetl plik

@ -1,5 +1,9 @@
ParaTNC Hardware Revision A
===========================
This documentation covers few different hardware revisions. Each secion which is
specific to certain Hw Rev is marked by a letter.
If section or point is universal across all revision it doesn't have any explicit
marking.
1. INTRODUCTION
ParaTNC is not only a software which runs on the STM32VLDISCOVERY board. Let's
@ -44,24 +48,70 @@ the controler. Then the application provided by STMicroelectronics
could be used to download the HEX file into the micro.
4. CONNECTORS PINOUT (BACK EDGE)
4. CONNECTORS PINOUT (BACK EDGE) - HW-RevA
-------------------------------------------------------------------------------
|RS485B , RS485A| |+5Vis, OneWire, AGND| |TX20, AGND, +5Vis, DTR| \r\n
|RS485B , RS485A| |+5Vsw, OneWire, AGND| |TX20, AGND, +5Vsw, DTR| \r\n
|+12V, +5V, +5Vi, +3V3, AGND, GND|
Where:
RS485A and RS485B -> RS485 bus, protected by TVS (Clamping diodes)
OneWire -> Isolated one wire bus
TX20 -> Isolated data bus from LaCrosse TX20 anemometer
DTR -> Enable pin for TX20 anemometer. Permamently pulled down do AGND
+5Vi -> Isolated +5V generated by internal DC-DC converter
+5Vsw -> Switched and Isolated +5V. This line could be power cycled by
the micro if no communication will be received from either the
anemometer or one wire thermometer
+3V3 -> Main uC supply voltage regulated internally by LDO
+12V -> Main supply voltage, hooked in paralel to DC jack
AGND -> Analog GND for radio and sensors
GND -> Main ParaTNC common with DC jack
4. CONNECTORS PINOUT (BACK EDGE) - HW-RevB
-------------------------------------------------------------------------------
|RS485B , RS485A| |+12V, AGND, +5Vi, +5Vsw, +5V, GND| |+5Vsw, OneWire, AGND|
|AGND, TX20-SPD, DIRECTION, +5Vsw|
Where:
RS485A and RS485B -> RS485 bus, protected by TVS (Clamping diodes)
OneWire -> Isolated one wire bus
TX20-SPD -> Isolated data bus from LaCrosse TX20 anemometer or
an windspeed input (pulse out) from mechanical anemometer
DIRECTION -> Wind direction input (pot wiper) from mechanical anemometer
DTR -> Enable pin for TX20 anemometer. Permamently pulled down do AGND
+5Vi -> Isolated +5V generated by internal DC-DC converter
+5Vsw -> Switched and Isolated +5V. This line could be power cycled by
the micro if no communication will be received from either the
anemometer or one wire thermometer
+12V -> Main supply voltage, hooked in paralel to DC jack
AGND -> Analog GND for radio and sensors
GND -> Main ParaTNC common with DC jack
4. CONNECTORS PINOUT (BACK EDGE) - HW-RevC
-------------------------------------------------------------------------------
|+12V, AGND, +5Vi, +5sw, OC-OUT, GND| |RS485B , RS485A| |+5Vsw, OneWire, AGND|
|AGND, TX20-SPD, DIRECTION, +5Vsw|
Where:
RS485A and RS485B -> RS485 bus, protected by TVS (Clamping diodes)
OneWire -> Isolated one wire bus
TX20 -> Isolated data bus from LaCrosse TX20 anemometer
DTR -> Enable pin for TX20 anemometer. Permamently pulled down do AGND
+5Vi -> Isolated +5V generated by internal DC-DC converter
+5Vis -> Switched and Isolated +5V. This line could be power cycled by
the micro if no communication will be received from either the
anemometer or one wire thermometer
+3V3 -> Main uC supply voltage regulated internally by LDO
+12V -> Main supply voltage, hooked in paralel to DC jack
AGND -> Analog GND for radio and sensors
GND -> Main ParaTNC common with DC jack
TX20-SPD -> Isolated data bus from LaCrosse TX20 anemometer or
an windspeed input (pulse out) from mechanical anemometer
DIRECTION -> Wind direction input (pot wiper) from mechanical anemometer
+5Vi -> Isolated +5V generated by internal DC-DC converter
+5Vsw -> Switched and Isolated +5V. This line could be power cycled by
the micro if no communication will be received from either the
anemometer or one wire thermometer
OC-OUT -> Additional isolated open-collector output
+12V -> Main supply voltage, hooked in paralel to DC jack
AGND -> Analog GND for sensors (BUT NOT RADIO!!)
GND -> Main ParaTNC common with DC jack
5. RJ45 (RS232) pinout
The RJ45 jack on the front of the PCB is NOT THE ETHERNET! Please don't plug

42
README
Wyświetl plik

@ -1,4 +1,4 @@
ParaTNC version DE07, March 22th 2020
ParaTNC version DE07, April 11th 2020
-----------------------------------------
1. INTRODUCTION
@ -12,6 +12,7 @@ ParaAPRS supports key elements of what good APRS device should have:
-> Weather station with support for various meteo sensors. Full list od supported devices in point 5.
-> Extensive telemetry with an information about the count of receved, transmitted and digipeated frames plus status of weather sensors.
-> Support for VE.Direct serial protocol used in Victron PV charging controllers. The data about currents and voltages in the PV system are transmitted using APRS telemetry.
-> Support for UMB Binary porotocol as a mater.
ParaAPRS can be used as a standalone weather station controller w/o using the radio transmission. The sw
by default sends the measuremenets values
@ -20,10 +21,13 @@ by default sends the measuremenets values
The ParaTNC software can run on STM32VLDISCOVERY board but it really shows it full potential od it's own
dedicated hardware. This not only rub out all bodge wires required with prototype board. It gives
few features which are hardly not possible without dedicated PCB
a) Three different grounds separated one from the another
a) Two different grounds separated one from the another (HW Revision A and B)
-> Controller
-> DB9 connector used to interface with a radio and Wind & Temperature sensor
aa) ONLY IN HW REVISION C: Three different grounds separated one from the another
-> Controller
-> DB9 connector used to interface with a radio
-> Wind and temperature sensor
-> Wind and temperature sensor including RS485 bus
b) Isolated DC-DC coverter to supply sensors with an option to connect another external power supply itself
c) A relay used as a watchdog to reset wind & temperature sensor in case that no communication will be received.
d) RS232 serial port avaliable on Cisco style RJ45 connector.
@ -39,7 +43,7 @@ parts, separately for software and hardware. Firstly in case of software an end
WITH THE NEWEST TAG marked as non-beta (like DE07). ParaTNC repository is used for daily development, so the last commit
can even sometimes don't compile at all, or consist some major bugs. 
Hardware workarounds in HW Revision A, now fixed in Revision B:
Hardware workarounds in HW Revision A:
-> Missing resistor in series with base of transistor T2. External 1k must be added in series with TX line
-> Foortprint location of R7 (RX_LVL) and R8 (TX_LVL) helipots are 'not optimal'. If 'normal' pots are to be used the vertical
version must be chosen as flat one won't fit due to neighbouring components location.
@ -49,12 +53,15 @@ Hardware workarounds in HW Revision A, now fixed in Revision B:
pulse output for windspeed and potentiometer (resistance output) for direction is ongoing and should be
avaliable in HW-Revision B and further SW releases.
Hardware workarounds in HW Revision B:
-> Few missing traces in micro supply. Few bodge wired needs to be added. Please look at hardware-revision-b-errata.jpg in 'hardware'
4. LICENSING
ParaTNC software and hardware are licensed under terms included to the source code in 'LICENSE' file
5. SUPPORTED METEO SENSORS
a) Wind sensors:
- TX20 (not in production)
- TX20 (not in manufacturing anymore)
- Davis 6410 or any another analogue anemometer with resisntance as a direction output and impulses as a windspeed
WARNING: Currently support on software testing phase. Not avaliable in Hardware Revision A due to lack of circuitry
- Lufft V200A/Ventus or any other UMB compatible device.
@ -74,7 +81,7 @@ Most of Victron devices have a support both for binary and text serial protocol.
always enabled and a device will send from its own telegrams each couple of seconds. The communication via VE.Direct is
avaliable through dedicated socket on the charging controller which is just 3.3V TTL levels UART, so no external ICs is
required to connect the PV controller to an evaluation board. In the MPPT series the comm socket is located on the bottom
side of the chargin controller below the fuse holder.
side of the charging controller below the fuse holder.
Exact pinout of the VE.Direct comm socket is as follows, assuming that terminal screws are facing down:
-> Ground
@ -107,7 +114,8 @@ DS_QF_DEGRAD - Quality Factor for One Wire temperature sensor is DEGRADATED
DS_QF_NAVBLE - Quality Factor for One Wire temperature sensor is NOT AVALIABLE
MS_QF_NAVBLE - Quality Factor for MS5611 pressure sensor ins NOT AVALIABLE
DHT_QF_NAVBLE - Quality Factor for DHT22 humidity & temperature is NOT AVALIABLE
TX20_SLEW - LaCrosse TX20 anemometer driver dropped at least one measuremenet due to excesive slew rate.
WIND_QF_DEGR - LaCrosse TX20 anemometer driver dropped at least one measuremenet due to excesive slew rate.
WIND_QF_NAVB -
Explantion of Quality Factors: Each measuremenets signal is kept along with the Quality Factor which represents the sensor condition
and value validity. If the QF is set to FULL it means that no communication problems happened between one telemetry cycle and another
@ -122,14 +130,27 @@ difference between two consecutive measuremenets excedes hardcoded limit (9m/s)
At this point ParaTNC is delivered in form of source code which needs to be manually compiled by the user. Most options are
configured by #define in './include/station_config.h' and then hard-coded by the C preprocessor during compilation. An example file
consist a lot of comments which explains what is what, but generally an user can choose there which mode should be enabled:
Hardware Revision A:
-> KISS TNC
-> KISS TNC + DIGI
-> KISS TNC + DIGI + METEO
-> VICTRON + DIGI + METEO
-> VICTRON + DIGI
As You see there is no option to use a KISS modem and the VE.Direct protocol in the same time as the software support only
one UART in the micro. The KISS modem runs on default speed of 9600 bps. Telemetry is enabled by default and it will
Hardware Revision B & C:
-> KISS TNC
-> KISS TNC + DIGI
-> KISS TNC + DIGI + METEO
-> KISS TNC + VICTRON + DIGI + METEO
-> KISS TNC + VICTRON + DIGI
-> KISS TNC + UMB-MASTER + DIGI + METEO
In Hardware Revision A there is no option to use a KISS modem and the VE.Direct protocol in the same time as only
one UART in the micro is used and handled by software. In hardware revisions B and C two UARTS are used and handled by
the software. The KISS modem is always enabled and avaliable on RJ45 Cisco style jack.
The KISS modem runs on default speed of 9600 bps. Telemetry is enabled by default and it will
trasmit channels values each 10 minutes and full channel descriptions each 70 minutes.
@ -150,7 +171,8 @@ When everything is installed the reporistory can be cloned to local harddrive by
The example config file is named 'station_config_example.h' and should be edited and then renamed to
'station_config.h'. When everything is configured it is a time to go to 'Debug' directory and invoke
command 'make' there. The source should be automatically compiled and new hex file 'ParaTNC.hex'
should appear in the same directory.
should appear in the same directory. Please do not use Release configuration!! It is screwed and produces an
application which doesn't works exactly as it should because of optimalization configuration.
Finished building target: ParaTNC.elf

Wyświetl plik

@ -4,7 +4,7 @@
#include "aprs/ax25.h"
#define SW_VER "DE07"
#define SW_DATE "10042020"
#define SW_DATE "11042020"
#define SYSTICK_TICKS_PER_SECONDS 100
#define SYSTICK_TICKS_PERIOD 10
@ -31,6 +31,10 @@ extern unsigned short rx10m, tx10m, digi10m, kiss10m;
uint16_t main_get_adc_sample(void);
inline uint32_t main_get_master_time(void) {
return master_time;
}
inline void main_wait_for_tx_complete(void) {
while(main_afsk.sending == 1);
}

Wyświetl plik

@ -131,8 +131,7 @@ static void message_callback(struct AX25Msg *msg) {
}
int
main(int argc, char* argv[])
{
main(int argc, char* argv[]){
// Send a greeting to the trace device (skipped on Release).
// trace_puts("Hello ARM World!");

Wyświetl plik

@ -17,6 +17,9 @@
uint8_t packet_tx_beacon_interval = _BCN_INTERVAL;
uint8_t packet_tx_beacon_counter = 0;
uint8_t packet_tx_error_status_interval = 2;
uint8_t packet_tx_error_status_counter = 0;
#ifdef _METEO
uint8_t packet_tx_meteo_interval = _WX_INTERVAL;
uint8_t packet_tx_meteo_counter = 0;
@ -38,6 +41,7 @@ void packet_tx_handler(void) {
uint16_t ln = 0;
packet_tx_beacon_counter++;
packet_tx_error_status_counter++;
packet_tx_telemetry_counter++;
packet_tx_telemetry_descr_counter++;
#ifdef _METEO
@ -45,17 +49,21 @@ void packet_tx_handler(void) {
packet_tx_meteo_kiss_counter++;
#endif
#if defined(_UMB_MASTER)
umb_construct_status_str(&rte_wx_umb_context, main_own_aprs_msg, sizeof(main_own_aprs_msg), &ln, master_time);
if (packet_tx_error_status_counter >= packet_tx_error_status_interval) {
#if defined(_UMB_MASTER)
umb_construct_status_str(&rte_wx_umb_context, main_own_aprs_msg, sizeof(main_own_aprs_msg), &ln, master_time);
// if there is anything to send
if (ln > 0) {
beacon_send_from_user_content(sizeof(main_own_aprs_msg), main_own_aprs_msg);
// if there is anything to send
if (ln > 0) {
beacon_send_from_user_content(ln, main_own_aprs_msg);
main_wait_for_tx_complete();
main_wait_for_tx_complete();
}
#endif
packet_tx_error_status_counter = 0;
}
#endif
if (packet_tx_beacon_counter >= packet_tx_beacon_interval) {
@ -73,7 +81,7 @@ void packet_tx_handler(void) {
// _DALLAS_AS_TELEM wil be set during compilation wx packets will be filled by temperature from MS5611 sensor
SendWXFrame(&VNAME, rte_wx_temperature_valid, rte_wx_pressure_valid);
#else
SendWXFrame(rte_wx_average_windspeed, rte_wx_max_windspeed, rte_wx_average_winddirection, rte_wx_temperature_average_dallas_valid, rte_wx_pressure_valid);
SendWXFrame(rte_wx_average_windspeed, rte_wx_max_windspeed, rte_wx_average_winddirection, rte_wx_temperature_average_dallas_valid, rte_wx_pressure_valid);
#endif
@ -174,6 +182,7 @@ void packet_tx_handler(void) {
main_wait_for_tx_complete();
#endif
umb_clear_error_history(&rte_wx_umb_context);
packet_tx_telemetry_descr_counter = 0;
}

Wyświetl plik

@ -22,6 +22,8 @@ typedef struct umb_context_t {
uint8_t nok_error_it;
uint16_t last_fault_channel;
uint32_t time_of_last_nok;
uint32_t time_of_last_comms_timeout;

Wyświetl plik

@ -26,6 +26,7 @@ umb_retval_t umb_pooling_handler(umb_context_t* ctx, umb_call_reason_t r, uint32
umb_retval_t umb_master_callback(umb_frame_t* frame, umb_context_t* ctx);
umb_qf_t umb_get_current_qf(umb_context_t* ctx, uint32_t master_time);
void umb_construct_status_str(umb_context_t* ctx, char* out_buffer, uint16_t buffer_size, uint16_t* status_string_ln, uint32_t master_time);
void umb_clear_error_history(umb_context_t* ctx);
uint16_t umb_get_windspeed(void);
uint16_t umb_get_windgusts(void);

Wyświetl plik

@ -176,6 +176,8 @@ void telemetry_send_status(ve_direct_average_struct* avg, ve_direct_error_reason
void telemetry_send_chns_description(void) {
while (main_afsk.sending == 1);
memset(main_own_aprs_msg, 0x00, sizeof(main_own_aprs_msg));
#if (_SSID == 0)
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ":%s :PARM.Rx10min,Tx10min,Digi10min,HostTx10m,Tempre,DS_QF_FULL,DS_QF_DEGRAD,DS_QF_NAVBLE,MS_QF_NAVBLE,DHT_QF_NAVBLE,WIND_QF_DEGR,WIND_QF_NAVB", _CALL);
#endif
@ -309,6 +311,8 @@ void telemetry_send_values( uint8_t rx_pkts,
dht_qf_navaliable = '0';
}
memset(main_own_aprs_msg, 0x00, sizeof(main_own_aprs_msg));
#ifdef _DALLAS_AS_TELEM
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, "T#%03d,%03d,%03d,%03d,%03d,%03d,%c%c%c%c%c%c%c0", telemetry_counter++, rx_pkts, tx_pkts, digi_pkts, kiss_pkts, scaled_temperature, qf, degr, nav, ms_qf_navaliable, dht_qf_navaliable, anemometer_degradated, anemometer_navble);
#else
@ -327,6 +331,7 @@ void telemetry_send_values( uint8_t rx_pkts,
}
void telemetry_send_status(void) {
memset(main_own_aprs_msg, 0x00, sizeof(main_own_aprs_msg));
main_own_aprs_msg_len = sprintf(main_own_aprs_msg, ">ParaTNC firmware %s-%s by SP8EBC", SW_VER, SW_DATE);
ax25_sendVia(&main_ax25, main_own_path, main_own_path_ln, main_own_aprs_msg, main_own_aprs_msg_len);
afsk_txStart(&main_afsk);

Wyświetl plik

@ -13,6 +13,8 @@
#include "station_config.h"
#include <string.h>
void SendWXFrame(uint16_t windspeed, uint16_t windgusts, uint16_t winddirection, float temperatura, float cisnienie) {

Wyświetl plik

@ -9,6 +9,7 @@
#include "../umb_master/umb_0x23_offline_data.h"
#include "station_config.h"
#include "rte_wx.h"
#include "main.h"
#define UNSIGNED_CHAR 0x10
#define SIGNED_CHAR 0x11
@ -72,10 +73,11 @@ umb_retval_t umb_0x23_offline_data_callback(umb_frame_t* frame, umb_context_t* c
// temporary float point buffer to handle this type
float temp = 0.0f;
// fetch the channel number
channel = frame->payload[1] | (frame->payload[2] << 8);
// check if status is OK
if (status == 0x00) {
// fetch the channel number
channel = frame->payload[1] | (frame->payload[2] << 8);
// fetch the value type
type = frame->payload[3];
@ -168,6 +170,22 @@ umb_retval_t umb_0x23_offline_data_callback(umb_frame_t* frame, umb_context_t* c
// if not stop further processing
ctx->state = UMB_STATUS_ERROR;
ctx->last_fault_channel = channel;
// copy current error code to the buffer
ctx->nok_error_codes[ctx->nok_error_it] = status;
// move the iterator through the buffer
ctx->nok_error_it++;
// check if and end of the buffer is reach here
ctx->nok_error_it %= UMB_CONTEXT_ERR_HISTORY_LN;
// trigger the status frame
ctx->trigger_status_msg = 1;
ctx->time_of_last_nok = main_get_master_time();
output = UMB_NOK_STATUS_GOT_WITH_RESP;
}

Wyświetl plik

@ -64,7 +64,7 @@ umb_retval_t umb_0x26_status_callback(umb_frame_t* frame, umb_context_t* ctx) {
}
// storing the time when last error code will be stored
ctx->time_of_last_nok = master_time;
ctx->time_of_last_nok = main_get_master_time();
// trigger the status message with a content of fault store
ctx->trigger_status_msg = 1;

Wyświetl plik

@ -11,13 +11,13 @@
void umb_channel_pool(umb_frame_t *frame, umb_context_t *ctx) {
#if defined(_UMB_MASTER)
if (ctx->channel_number_it > UMB_CHANNELS_STORAGE_CAPAC)
if (ctx->channel_number_it >= UMB_CHANNELS_STORAGE_CAPAC)
ctx->channel_number_it = 0;
uint16_t curr_chn = ctx->channel_numbers[ctx->channel_number_it];
ctx->current_channel = curr_chn;
if (curr_chn != 0xFFFFu) {
if (curr_chn != 0xFFFFu && curr_chn != 0x0u) {
umb_0x23_offline_data_request(frame, ctx, curr_chn);
}

Wyświetl plik

@ -39,6 +39,8 @@ void umb_master_init(umb_context_t* ctx) {
ctx->time_of_last_successful_comms = 0;
ctx->last_fault_channel = 0;
for (int i = 0; i < UMB_CONTEXT_ERR_HISTORY_LN; i++) {
ctx->nok_error_codes[i] = 0;
}
@ -394,10 +396,11 @@ void umb_construct_status_str(umb_context_t* ctx, char* out_buffer, uint16_t buf
for (int i = 0; i < buffer_size; i++)
out_buffer[i] = '\0';
string_ln = snprintf(out_buffer, buffer_size, ">UMB Status: [TIME= 0x%x, TLN= 0x%x, TLCT= 0x%x, ERRS= [",
string_ln = snprintf(out_buffer, buffer_size, ">UMB Status: [TIME= 0x%x, TLN= 0x%x, TLCT= 0x%x, LFC= %d ERRS= [",
(int)master_time,
(int)local_tln,
(int)local_tlct);
(int)local_tlct,
(int)ctx->last_fault_channel);
for (int i = 0; i < UMB_CONTEXT_ERR_HISTORY_LN; i++ ) {
// print the string representation of the error code into the buffer
sprintf_out = snprintf(local, 11, "0x%02x, ", ctx->nok_error_codes[i]);
@ -417,6 +420,16 @@ void umb_construct_status_str(umb_context_t* ctx, char* out_buffer, uint16_t buf
*status_string_ln = string_ln;
}
void umb_clear_error_history(umb_context_t* ctx) {
ctx->last_fault_channel = 0;
for (int i = 0; i < UMB_CONTEXT_ERR_HISTORY_LN; i++) {
ctx->nok_error_codes[i] = 0;
}
ctx->trigger_status_msg = 0;
}
uint16_t umb_get_windspeed(void) {