first commit

This commit is contained in:
2022-08-24 08:39:13 +02:00
commit e663300109
2491 changed files with 2231094 additions and 0 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

+68
View File
@@ -0,0 +1,68 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="ilg.gnumcueclipse.debug.gdbjtag.openocd.launchConfigurationType">
<stringAttribute key="bad_container_name" value="\mchf-eclipse\supp"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.PERIPHERALS" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;peripherals&gt;&#13;&#10;&lt;peripheral name=&quot;RTC&quot;/&gt;&#13;&#10;&lt;peripheral name=&quot;PWR&quot;/&gt;&#13;&#10;&lt;peripheral name=&quot;RCC&quot;/&gt;&#13;&#10;&lt;peripheral name=&quot;NVIC&quot;/&gt;&#13;&#10;&lt;peripheral name=&quot;OTG_FS_DEVICE&quot;/&gt;&#13;&#10;&lt;peripheral name=&quot;OTG_FS_GLOBAL&quot;/&gt;&#13;&#10;&lt;peripheral name=&quot;GPIOB&quot;/&gt;&#13;&#10;&lt;peripheral name=&quot;GPIOA&quot;/&gt;&#13;&#10;&lt;peripheral name=&quot;GPIOD&quot;/&gt;&#13;&#10;&lt;peripheral name=&quot;GPIOE&quot;/&gt;&#13;&#10;&lt;peripheral name=&quot;GPIOC&quot;/&gt;&#13;&#10;&lt;peripheral name=&quot;SPI2&quot;/&gt;&#13;&#10;&lt;/peripherals&gt;&#13;&#10;"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doContinue" value="true"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doDebugInRam" value="false"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doFirstReset" value="true"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doGdbServerAllocateConsole" value="true"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doGdbServerAllocateTelnetConsole" value="false"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doSecondReset" value="true"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doStartGdbServer" value="true"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.enableSemihosting" value="false"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.firstResetType" value="init"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbClientOtherCommands" value="set mem inaccessible-by-default off"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbClientOtherOptions" value=""/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbServerConnectionAddress" value=""/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbServerExecutable" value="${openocd_path}/${openocd_executable}"/>
<intAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbServerGdbPortNumber" value="3333"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbServerLog" value=""/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbServerOther" value="-f support/MCHF.cfg"/>
<intAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbServerTelnetPortNumber" value="4444"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.otherInitCommands" value=""/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.otherRunCommands" value=""/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.secondResetType" value="halt"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageFileName" value=""/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageOffset" value=""/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.ipAddress" value="localhost"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.jtagDevice" value="GNU MCU OpenOCD"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.loadImage" value="true"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.loadSymbols" value="true"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.pcRegister" value="8010000"/>
<intAttribute key="org.eclipse.cdt.debug.gdbjtag.core.portNumber" value="3333"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setPcRegister" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setResume" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setStopAt" value="true"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.stopAt" value="main"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.symbolsFileName" value=""/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.symbolsOffset" value=""/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useFileForImage" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useFileForSymbols" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useProjBinaryForImage" value="true"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useProjBinaryForSymbols" value="true"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useRemoteTarget" value="true"/>
<stringAttribute key="org.eclipse.cdt.debug.mi.core.commandFactory" value="Standard (Windows)"/>
<stringAttribute key="org.eclipse.cdt.debug.mi.core.protocol" value="mi"/>
<booleanAttribute key="org.eclipse.cdt.debug.mi.core.verboseMode" value="false"/>
<stringAttribute key="org.eclipse.cdt.dsf.gdb.DEBUG_NAME" value="${cross_prefix}gdb${cross_suffix}"/>
<booleanAttribute key="org.eclipse.cdt.dsf.gdb.UPDATE_THREADLIST_ON_SUSPEND" value="false"/>
<intAttribute key="org.eclipse.cdt.launch.ATTR_BUILD_BEFORE_LAUNCH_ATTR" value="2"/>
<stringAttribute key="org.eclipse.cdt.launch.COREFILE_PATH" value=""/>
<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_REGISTER_GROUPS" value=""/>
<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="DebugBootloaderMCHF/bl-mchf.elf"/>
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_ATTR" value="mchf-eclipse"/>
<booleanAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_AUTO_ATTR" value="false"/>
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_ID_ATTR" value="ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.433341838.1988579444"/>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/mchf-eclipse"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="4"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
</listAttribute>
<stringAttribute key="org.eclipse.dsf.launch.MEMORY_BLOCKS" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;memoryBlockExpressionList context=&quot;Context string&quot;&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;134283264&quot; label=&quot;0x8010000&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;134217728&quot; label=&quot;0x8000000&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;134250496&quot; label=&quot;0x8008000&quot;/&gt;&#13;&#10;&lt;/memoryBlockExpressionList&gt;&#13;&#10;"/>
<stringAttribute key="process_factory_id" value="org.eclipse.cdt.dsf.gdb.GdbProcessFactory"/>
<stringAttribute key="saved_expressions&lt;seperator&gt;Unknown" value="0x20000000000,0x20000,0x200000,0x20010000,0x20011000,0x20001000,0x20002000,0x2001A000,0x2001D000,0x2002D000,0x2003D000,0x20030000,0x80008000,0x8008000,0x800C000"/>
</launchConfiguration>
@@ -0,0 +1,68 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="ilg.gnuarmeclipse.debug.gdbjtag.openocd.launchConfigurationType">
<stringAttribute key="bad_container_name" value="\mchf-eclipse\supp"/>
<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.PERIPHERALS" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;peripherals&gt;&#13;&#10;&lt;peripheral name=&quot;GPIOA&quot;/&gt;&#13;&#10;&lt;peripheral name=&quot;OTG_FS_DEVICE&quot;/&gt;&#13;&#10;&lt;peripheral name=&quot;OTG_FS_GLOBAL&quot;/&gt;&#13;&#10;&lt;/peripherals&gt;&#13;&#10;"/>
<booleanAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.openocd.doContinue" value="true"/>
<booleanAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.openocd.doDebugInRam" value="false"/>
<booleanAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.openocd.doFirstReset" value="true"/>
<booleanAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.openocd.doGdbServerAllocateConsole" value="true"/>
<booleanAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.openocd.doGdbServerAllocateTelnetConsole" value="false"/>
<booleanAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.openocd.doSecondReset" value="true"/>
<booleanAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.openocd.doStartGdbServer" value="true"/>
<booleanAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.openocd.enableSemihosting" value="true"/>
<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.openocd.firstResetType" value="init"/>
<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.openocd.gdbClientOtherCommands" value="set mem inaccessible-by-default off"/>
<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.openocd.gdbClientOtherOptions" value=""/>
<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.openocd.gdbServerConnectionAddress" value=""/>
<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.openocd.gdbServerExecutable" value="${openocd_path}/${openocd_executable}"/>
<intAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.openocd.gdbServerGdbPortNumber" value="3333"/>
<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.openocd.gdbServerLog" value=""/>
<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.openocd.gdbServerOther" value="-f support/MCHF.cfg"/>
<intAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.openocd.gdbServerTelnetPortNumber" value="4444"/>
<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.openocd.otherInitCommands" value=""/>
<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.openocd.otherRunCommands" value=""/>
<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.openocd.secondResetType" value="halt"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageFileName" value=""/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageOffset" value=""/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.ipAddress" value="localhost"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.jtagDevice" value="GNU ARM OpenOCD"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.loadImage" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.loadSymbols" value="true"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.pcRegister" value="8010000"/>
<intAttribute key="org.eclipse.cdt.debug.gdbjtag.core.portNumber" value="3333"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setPcRegister" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setResume" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setStopAt" value="true"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.stopAt" value="main"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.symbolsFileName" value=""/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.symbolsOffset" value=""/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useFileForImage" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useFileForSymbols" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useProjBinaryForImage" value="true"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useProjBinaryForSymbols" value="true"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useRemoteTarget" value="true"/>
<stringAttribute key="org.eclipse.cdt.debug.mi.core.commandFactory" value="Standard (Windows)"/>
<stringAttribute key="org.eclipse.cdt.debug.mi.core.protocol" value="mi"/>
<booleanAttribute key="org.eclipse.cdt.debug.mi.core.verboseMode" value="false"/>
<stringAttribute key="org.eclipse.cdt.dsf.gdb.DEBUG_NAME" value="${cross_prefix}gdb${cross_suffix}"/>
<booleanAttribute key="org.eclipse.cdt.dsf.gdb.UPDATE_THREADLIST_ON_SUSPEND" value="false"/>
<intAttribute key="org.eclipse.cdt.launch.ATTR_BUILD_BEFORE_LAUNCH_ATTR" value="2"/>
<stringAttribute key="org.eclipse.cdt.launch.COREFILE_PATH" value=""/>
<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_REGISTER_GROUPS" value=""/>
<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="DebugMCHF\fw-mchf.elf"/>
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_ATTR" value="mchf-eclipse"/>
<booleanAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_AUTO_ATTR" value="false"/>
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_ID_ATTR" value="ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.433341838"/>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/mchf-eclipse"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="4"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
</listAttribute>
<stringAttribute key="org.eclipse.dsf.launch.MEMORY_BLOCKS" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;memoryBlockExpressionList context=&quot;Context string&quot;/&gt;&#13;&#10;"/>
<stringAttribute key="process_factory_id" value="org.eclipse.cdt.dsf.gdb.GdbProcessFactory"/>
<stringAttribute key="saved_expressions&lt;seperator&gt;Unknown" value="0x20000000000,0x20000,0x200000,0x20010000,0x20011000,0x20001000,0x20002000,0x2001A000,0x2001D000,0x2002D000,0x2003D000,0x20030000,0x80008000,0x8008000,0x800C000"/>
</launchConfiguration>
+71
View File
@@ -0,0 +1,71 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="ilg.gnumcueclipse.debug.gdbjtag.openocd.launchConfigurationType">
<stringAttribute key="bad_container_name" value="\mchf-eclipse\supp"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.PERIPHERALS" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;peripherals&gt;&#13;&#10;&lt;peripheral name=&quot;GPIOA&quot;/&gt;&#13;&#10;&lt;peripheral name=&quot;OTG_FS_DEVICE&quot;/&gt;&#13;&#10;&lt;peripheral name=&quot;OTG_FS_GLOBAL&quot;/&gt;&#13;&#10;&lt;peripheral name=&quot;DMA1&quot;/&gt;&#13;&#10;&lt;/peripherals&gt;&#13;&#10;"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doContinue" value="true"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doDebugInRam" value="false"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doFirstReset" value="true"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doGdbServerAllocateConsole" value="true"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doGdbServerAllocateTelnetConsole" value="false"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doSecondReset" value="true"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doStartGdbCLient" value="true"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doStartGdbServer" value="true"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.enableSemihosting" value="true"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.firstResetType" value="init"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbClientOtherCommands" value="set mem inaccessible-by-default off"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbClientOtherOptions" value=""/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbServerConnectionAddress" value=""/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbServerExecutable" value="${openocd_path}/${openocd_executable}"/>
<intAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbServerGdbPortNumber" value="3333"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbServerLog" value=""/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbServerOther" value="-f support/MCHF.cfg"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbServerTclPortNumber" value="6666"/>
<intAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbServerTelnetPortNumber" value="4444"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.otherInitCommands" value=""/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.otherRunCommands" value=""/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.secondResetType" value="halt"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.svdPath" value=""/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageFileName" value=""/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageOffset" value=""/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.ipAddress" value="localhost"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.jtagDevice" value="GNU MCU OpenOCD"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.loadImage" value="true"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.loadSymbols" value="true"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.pcRegister" value="8010000"/>
<intAttribute key="org.eclipse.cdt.debug.gdbjtag.core.portNumber" value="3333"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setPcRegister" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setResume" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setStopAt" value="true"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.stopAt" value="main"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.symbolsFileName" value=""/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.symbolsOffset" value=""/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useFileForImage" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useFileForSymbols" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useProjBinaryForImage" value="true"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useProjBinaryForSymbols" value="true"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useRemoteTarget" value="true"/>
<stringAttribute key="org.eclipse.cdt.debug.mi.core.commandFactory" value="Standard (Windows)"/>
<stringAttribute key="org.eclipse.cdt.debug.mi.core.protocol" value="mi"/>
<booleanAttribute key="org.eclipse.cdt.debug.mi.core.verboseMode" value="false"/>
<stringAttribute key="org.eclipse.cdt.dsf.gdb.DEBUG_NAME" value="${cross_prefix}gdb${cross_suffix}"/>
<booleanAttribute key="org.eclipse.cdt.dsf.gdb.UPDATE_THREADLIST_ON_SUSPEND" value="false"/>
<intAttribute key="org.eclipse.cdt.launch.ATTR_BUILD_BEFORE_LAUNCH_ATTR" value="2"/>
<stringAttribute key="org.eclipse.cdt.launch.COREFILE_PATH" value=""/>
<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_REGISTER_GROUPS" value=""/>
<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="DebugMCHF/fw-mchf.elf"/>
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_ATTR" value="mchf-eclipse"/>
<booleanAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_AUTO_ATTR" value="false"/>
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_ID_ATTR" value="ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.433341838"/>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/mchf-eclipse"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="4"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
</listAttribute>
<stringAttribute key="org.eclipse.dsf.launch.MEMORY_BLOCKS" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;memoryBlockExpressionList context=&quot;Context string&quot;&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;134283264&quot; label=&quot;0x8010000&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;134217728&quot; label=&quot;0x8000000&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;537001984&quot; label=&quot;0x20020000&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;537001984&quot; label=&quot;0x20020000&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;536870912&quot; label=&quot;0x20000000&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;537001984&quot; label=&quot;0x20020000&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;536973808&quot; label=&quot;0x200191F0&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;536910408&quot; label=&quot;0x20009a48&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;536892944&quot; label=&quot;0x20005610&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;536893456&quot; label=&quot;0x20005810&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;536893196&quot; label=&quot;0x2000570C&quot;/&gt;&#13;&#10;&lt;/memoryBlockExpressionList&gt;&#13;&#10;"/>
<stringAttribute key="process_factory_id" value="org.eclipse.cdt.dsf.gdb.GdbProcessFactory"/>
<stringAttribute key="saved_expressions&lt;seperator&gt;Unknown" value="0x8008000,0x800C000,0x200089b8,0x200189b8,0x2001F000,0x200089ac,0x20017F3C &lt;..,0x20017F3C &lt;..,0x20017F3C,0x20000000,0x200000000,0x200017F3C,0x20020000,0x200089b0,0x20005610"/>
</launchConfiguration>
+15
View File
@@ -0,0 +1,15 @@
# This is an MCHF board with a single STM32F407VGTx chip.
# Generated by System Workbench for STM32
source [find interface/stlink-v2.cfg]
#source [find interface/stlink-v2-1.cfg]
set WORKAREASIZE 0x20000
transport select "hla_swd"
source [find target/stm32f4x.cfg]
#source [find target/stm32f7x.cfg]
# use hardware reset, connect under reset
reset_config none
+65
View File
@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="ilg.gnumcueclipse.debug.gdbjtag.openocd.launchConfigurationType">
<stringAttribute key="bad_container_name" value="\mchf-eclipse\supp"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.PERIPHERALS" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;peripherals&gt;&#13;&#10;&lt;peripheral name=&quot;RTC&quot;/&gt;&#13;&#10;&lt;peripheral name=&quot;GPIOC&quot;/&gt;&#13;&#10;&lt;peripheral name=&quot;PWR&quot;/&gt;&#13;&#10;&lt;peripheral name=&quot;RCC&quot;/&gt;&#13;&#10;&lt;peripheral name=&quot;NVIC&quot;/&gt;&#13;&#10;&lt;peripheral name=&quot;OTG_FS_DEVICE&quot;/&gt;&#13;&#10;&lt;peripheral name=&quot;OTG_FS_GLOBAL&quot;/&gt;&#13;&#10;&lt;/peripherals&gt;&#13;&#10;"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doContinue" value="true"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doDebugInRam" value="false"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doFirstReset" value="true"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doGdbServerAllocateConsole" value="true"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doGdbServerAllocateTelnetConsole" value="false"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doSecondReset" value="true"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doStartGdbServer" value="true"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.enableSemihosting" value="false"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.firstResetType" value="init"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbClientOtherCommands" value="set mem inaccessible-by-default off"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbClientOtherOptions" value=""/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbServerConnectionAddress" value=""/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbServerExecutable" value="${openocd_path}/${openocd_executable}"/>
<intAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbServerGdbPortNumber" value="3333"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbServerLog" value=""/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbServerOther" value="-f support/ovi40.cfg"/>
<intAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbServerTelnetPortNumber" value="4444"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.otherInitCommands" value=""/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.otherRunCommands" value=""/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.secondResetType" value="halt"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageFileName" value=""/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageOffset" value=""/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.ipAddress" value="localhost"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.jtagDevice" value="GNU MCU OpenOCD"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.loadImage" value="true"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.loadSymbols" value="true"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.pcRegister" value="8010000"/>
<intAttribute key="org.eclipse.cdt.debug.gdbjtag.core.portNumber" value="3333"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setPcRegister" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setResume" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setStopAt" value="true"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.stopAt" value="main"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.symbolsFileName" value=""/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.symbolsOffset" value=""/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useFileForImage" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useFileForSymbols" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useProjBinaryForImage" value="true"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useProjBinaryForSymbols" value="true"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useRemoteTarget" value="true"/>
<stringAttribute key="org.eclipse.cdt.debug.mi.core.commandFactory" value="Standard (Windows)"/>
<stringAttribute key="org.eclipse.cdt.debug.mi.core.protocol" value="mi"/>
<booleanAttribute key="org.eclipse.cdt.debug.mi.core.verboseMode" value="false"/>
<stringAttribute key="org.eclipse.cdt.dsf.gdb.DEBUG_NAME" value="${cross_prefix}gdb${cross_suffix}"/>
<booleanAttribute key="org.eclipse.cdt.dsf.gdb.UPDATE_THREADLIST_ON_SUSPEND" value="false"/>
<intAttribute key="org.eclipse.cdt.launch.ATTR_BUILD_BEFORE_LAUNCH_ATTR" value="2"/>
<stringAttribute key="org.eclipse.cdt.launch.COREFILE_PATH" value=""/>
<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_REGISTER_GROUPS" value=""/>
<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="DebugBootloaderOVI40/bl-40sdr.elf"/>
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_ATTR" value="mchf-eclipse"/>
<booleanAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_AUTO_ATTR" value="false"/>
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_ID_ATTR" value="ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.433341838.1988579444.812079502"/>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/mchf-eclipse"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="4"/>
</listAttribute>
<stringAttribute key="org.eclipse.dsf.launch.MEMORY_BLOCKS" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;memoryBlockExpressionList context=&quot;Context string&quot;&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;134283264&quot; label=&quot;0x8010000&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;134217728&quot; label=&quot;0x8000000&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;134250496&quot; label=&quot;0x8008000&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;1610629120&quot; label=&quot;0x60004000&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;1610612736&quot; label=&quot;0x60000000&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;1610620928&quot; label=&quot;0x60002000&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;1610616832&quot; label=&quot;0x60001000&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;1610625024&quot; label=&quot;0x60003000&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;536836642&quot; label=&quot;0x1FFF7A22&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;537378816&quot; label=&quot;0x2007C000&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;3758157056&quot; label=&quot;0xE000ED00&quot;/&gt;&#13;&#10;&lt;/memoryBlockExpressionList&gt;&#13;&#10;"/>
<stringAttribute key="process_factory_id" value="org.eclipse.cdt.dsf.gdb.GdbProcessFactory"/>
<stringAttribute key="saved_expressions&lt;seperator&gt;Unknown" value="0x20000000000,0x20000,0x200000,0x20010000,0x20011000,0x20001000,0x20002000,0x2001A000,0x2001D000,0x2002D000,0x2003D000,0x20030000,0x80008000,0x8008000,0x800C000"/>
</launchConfiguration>
+65
View File
@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="ilg.gnumcueclipse.debug.gdbjtag.openocd.launchConfigurationType">
<stringAttribute key="bad_container_name" value="\mchf-eclipse\supp"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.PERIPHERALS" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;peripherals/&gt;&#13;&#10;"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doContinue" value="true"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doDebugInRam" value="false"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doFirstReset" value="true"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doGdbServerAllocateConsole" value="true"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doGdbServerAllocateTelnetConsole" value="false"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doSecondReset" value="true"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doStartGdbServer" value="true"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.enableSemihosting" value="false"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.firstResetType" value="init"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbClientOtherCommands" value="set mem inaccessible-by-default off"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbClientOtherOptions" value=""/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbServerConnectionAddress" value=""/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbServerExecutable" value="${openocd_path}/${openocd_executable}"/>
<intAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbServerGdbPortNumber" value="3333"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbServerLog" value=""/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbServerOther" value="-f support/ovi40.cfg"/>
<intAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbServerTelnetPortNumber" value="4444"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.otherInitCommands" value=""/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.otherRunCommands" value=""/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.secondResetType" value="halt"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageFileName" value=""/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageOffset" value=""/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.ipAddress" value="localhost"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.jtagDevice" value="GNU MCU OpenOCD"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.loadImage" value="true"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.loadSymbols" value="true"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.pcRegister" value="8010000"/>
<intAttribute key="org.eclipse.cdt.debug.gdbjtag.core.portNumber" value="3333"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setPcRegister" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setResume" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setStopAt" value="true"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.stopAt" value="main"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.symbolsFileName" value=""/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.symbolsOffset" value=""/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useFileForImage" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useFileForSymbols" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useProjBinaryForImage" value="true"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useProjBinaryForSymbols" value="true"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useRemoteTarget" value="true"/>
<stringAttribute key="org.eclipse.cdt.debug.mi.core.commandFactory" value="Standard (Windows)"/>
<stringAttribute key="org.eclipse.cdt.debug.mi.core.protocol" value="mi"/>
<booleanAttribute key="org.eclipse.cdt.debug.mi.core.verboseMode" value="false"/>
<stringAttribute key="org.eclipse.cdt.dsf.gdb.DEBUG_NAME" value="${cross_prefix}gdb${cross_suffix}"/>
<booleanAttribute key="org.eclipse.cdt.dsf.gdb.UPDATE_THREADLIST_ON_SUSPEND" value="false"/>
<intAttribute key="org.eclipse.cdt.launch.ATTR_BUILD_BEFORE_LAUNCH_ATTR" value="2"/>
<stringAttribute key="org.eclipse.cdt.launch.COREFILE_PATH" value=""/>
<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_REGISTER_GROUPS" value=""/>
<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="DebugOVI40/fw-40sdr.elf"/>
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_ATTR" value="mchf-eclipse"/>
<booleanAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_AUTO_ATTR" value="false"/>
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_ID_ATTR" value="ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.433341838.1123244320"/>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/mchf-eclipse"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="4"/>
</listAttribute>
<stringAttribute key="org.eclipse.dsf.launch.MEMORY_BLOCKS" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;memoryBlockExpressionList context=&quot;Context string&quot;&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;134283264&quot; label=&quot;0x8010000&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;134217728&quot; label=&quot;0x8000000&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;134250496&quot; label=&quot;0x8008000&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;134266880&quot; label=&quot;0x800C000&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;3758157056&quot; label=&quot;0xE000ED00&quot;/&gt;&#13;&#10;&lt;/memoryBlockExpressionList&gt;&#13;&#10;"/>
<stringAttribute key="process_factory_id" value="org.eclipse.cdt.dsf.gdb.GdbProcessFactory"/>
<stringAttribute key="saved_expressions&lt;seperator&gt;Unknown" value="0x20000000000,0x20000,0x200000,0x20010000,0x20011000,0x20001000,0x20002000,0x2001A000,0x2001D000,0x2002D000,0x2003D000,0x20030000,0x80008000,0x8008000,0x800C000"/>
</launchConfiguration>
+65
View File
@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="ilg.gnumcueclipse.debug.gdbjtag.openocd.launchConfigurationType">
<stringAttribute key="bad_container_name" value="\mchf-eclipse\supp"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.PERIPHERALS" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;peripherals&gt;&#13;&#10;&lt;peripheral name=&quot;RTC&quot;/&gt;&#13;&#10;&lt;peripheral name=&quot;GPIOC&quot;/&gt;&#13;&#10;&lt;peripheral name=&quot;PWR&quot;/&gt;&#13;&#10;&lt;peripheral name=&quot;RCC&quot;/&gt;&#13;&#10;&lt;peripheral name=&quot;NVIC&quot;/&gt;&#13;&#10;&lt;peripheral name=&quot;OTG_FS_DEVICE&quot;/&gt;&#13;&#10;&lt;peripheral name=&quot;OTG_FS_GLOBAL&quot;/&gt;&#13;&#10;&lt;/peripherals&gt;&#13;&#10;"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doContinue" value="true"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doDebugInRam" value="false"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doFirstReset" value="true"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doGdbServerAllocateConsole" value="true"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doGdbServerAllocateTelnetConsole" value="false"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doSecondReset" value="true"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doStartGdbServer" value="true"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.enableSemihosting" value="false"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.firstResetType" value="init"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbClientOtherCommands" value="set mem inaccessible-by-default off"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbClientOtherOptions" value=""/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbServerConnectionAddress" value=""/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbServerExecutable" value="${openocd_path}/${openocd_executable}"/>
<intAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbServerGdbPortNumber" value="3333"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbServerLog" value=""/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbServerOther" value="-f support/ovi40h7.cfg"/>
<intAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbServerTelnetPortNumber" value="4444"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.otherInitCommands" value=""/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.otherRunCommands" value=""/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.secondResetType" value="halt"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageFileName" value=""/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageOffset" value=""/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.ipAddress" value="localhost"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.jtagDevice" value="GNU MCU OpenOCD"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.loadImage" value="true"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.loadSymbols" value="true"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.pcRegister" value="8010000"/>
<intAttribute key="org.eclipse.cdt.debug.gdbjtag.core.portNumber" value="3333"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setPcRegister" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setResume" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setStopAt" value="true"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.stopAt" value="main"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.symbolsFileName" value=""/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.symbolsOffset" value=""/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useFileForImage" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useFileForSymbols" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useProjBinaryForImage" value="true"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useProjBinaryForSymbols" value="true"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useRemoteTarget" value="true"/>
<stringAttribute key="org.eclipse.cdt.debug.mi.core.commandFactory" value="Standard (Windows)"/>
<stringAttribute key="org.eclipse.cdt.debug.mi.core.protocol" value="mi"/>
<booleanAttribute key="org.eclipse.cdt.debug.mi.core.verboseMode" value="false"/>
<stringAttribute key="org.eclipse.cdt.dsf.gdb.DEBUG_NAME" value="${cross_prefix}gdb${cross_suffix}"/>
<booleanAttribute key="org.eclipse.cdt.dsf.gdb.UPDATE_THREADLIST_ON_SUSPEND" value="false"/>
<intAttribute key="org.eclipse.cdt.launch.ATTR_BUILD_BEFORE_LAUNCH_ATTR" value="2"/>
<stringAttribute key="org.eclipse.cdt.launch.COREFILE_PATH" value=""/>
<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_REGISTER_GROUPS" value=""/>
<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="DebugBootloaderOVI40H7/bl-ovi40.elf"/>
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_ATTR" value="mchf-eclipse"/>
<booleanAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_AUTO_ATTR" value="false"/>
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_ID_ATTR" value="ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.433341838.1123244320.487780019.741727183"/>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/mchf-eclipse"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="4"/>
</listAttribute>
<stringAttribute key="org.eclipse.dsf.launch.MEMORY_BLOCKS" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;memoryBlockExpressionList context=&quot;Context string&quot;&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;134283264&quot; label=&quot;0x8010000&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;134217728&quot; label=&quot;0x8000000&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;134250496&quot; label=&quot;0x8008000&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;1610629120&quot; label=&quot;0x60004000&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;1610612736&quot; label=&quot;0x60000000&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;1610620928&quot; label=&quot;0x60002000&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;1610616832&quot; label=&quot;0x60001000&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;1610625024&quot; label=&quot;0x60003000&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;536836642&quot; label=&quot;0x1FFF7A22&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;537378816&quot; label=&quot;0x2007C000&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;3758157056&quot; label=&quot;0xE000ED00&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;134610944&quot; label=&quot;0x8060000&quot;/&gt;&#13;&#10;&lt;/memoryBlockExpressionList&gt;&#13;&#10;"/>
<stringAttribute key="process_factory_id" value="org.eclipse.cdt.dsf.gdb.GdbProcessFactory"/>
<stringAttribute key="saved_expressions&lt;seperator&gt;Unknown" value="0x20000000000,0x20000,0x200000,0x20010000,0x20011000,0x20001000,0x20002000,0x2001A000,0x2001D000,0x2002D000,0x2003D000,0x20030000,0x80008000,0x8008000,0x800C000"/>
</launchConfiguration>
+68
View File
@@ -0,0 +1,68 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="ilg.gnumcueclipse.debug.gdbjtag.openocd.launchConfigurationType">
<stringAttribute key="bad_container_name" value="\mchf-eclipse\supp"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.PERIPHERALS" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;peripherals&gt;&#13;&#10;&lt;peripheral name=&quot;GPIOA&quot;/&gt;&#13;&#10;&lt;/peripherals&gt;&#13;&#10;"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doContinue" value="true"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doDebugInRam" value="false"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doFirstReset" value="true"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doGdbServerAllocateConsole" value="true"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doGdbServerAllocateTelnetConsole" value="false"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doSecondReset" value="true"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doStartGdbCLient" value="true"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.doStartGdbServer" value="true"/>
<booleanAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.enableSemihosting" value="false"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.firstResetType" value="init"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbClientOtherCommands" value="set mem inaccessible-by-default off"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbClientOtherOptions" value=""/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbServerConnectionAddress" value=""/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbServerExecutable" value="${openocd_path}/${openocd_executable}"/>
<intAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbServerGdbPortNumber" value="3333"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbServerLog" value=""/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbServerOther" value="-f support/ovi40h7.cfg"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbServerTclPortNumber" value="6666"/>
<intAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.gdbServerTelnetPortNumber" value="4444"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.otherInitCommands" value=""/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.otherRunCommands" value=""/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.openocd.secondResetType" value="halt"/>
<stringAttribute key="ilg.gnumcueclipse.debug.gdbjtag.svdPath" value=""/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageFileName" value=""/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageOffset" value=""/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.ipAddress" value="localhost"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.jtagDevice" value="GNU MCU OpenOCD"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.loadImage" value="true"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.loadSymbols" value="true"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.pcRegister" value="8010000"/>
<intAttribute key="org.eclipse.cdt.debug.gdbjtag.core.portNumber" value="3333"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setPcRegister" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setResume" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setStopAt" value="true"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.stopAt" value="main"/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.symbolsFileName" value=""/>
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.symbolsOffset" value=""/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useFileForImage" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useFileForSymbols" value="false"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useProjBinaryForImage" value="true"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useProjBinaryForSymbols" value="true"/>
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useRemoteTarget" value="true"/>
<stringAttribute key="org.eclipse.cdt.debug.mi.core.commandFactory" value="Standard (Windows)"/>
<stringAttribute key="org.eclipse.cdt.debug.mi.core.protocol" value="mi"/>
<booleanAttribute key="org.eclipse.cdt.debug.mi.core.verboseMode" value="false"/>
<stringAttribute key="org.eclipse.cdt.dsf.gdb.DEBUG_NAME" value="${cross_prefix}gdb${cross_suffix}"/>
<booleanAttribute key="org.eclipse.cdt.dsf.gdb.UPDATE_THREADLIST_ON_SUSPEND" value="false"/>
<intAttribute key="org.eclipse.cdt.launch.ATTR_BUILD_BEFORE_LAUNCH_ATTR" value="1"/>
<stringAttribute key="org.eclipse.cdt.launch.COREFILE_PATH" value=""/>
<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_REGISTER_GROUPS" value=""/>
<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="DebugOVI40H7/fw-ovi40.elf"/>
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_ATTR" value="mchf-eclipse"/>
<booleanAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_AUTO_ATTR" value="false"/>
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_ID_ATTR" value="ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.433341838.1123244320.487780019"/>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/mchf-eclipse"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="4"/>
</listAttribute>
<stringAttribute key="org.eclipse.dsf.launch.MEMORY_BLOCKS" value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;memoryBlockExpressionList context=&quot;Context string&quot;&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;134283264&quot; label=&quot;0x8010000&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;134217728&quot; label=&quot;0x8000000&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;134250496&quot; label=&quot;0x8008000&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;134266880&quot; label=&quot;0x800C000&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;3758157056&quot; label=&quot;0xE000ED00&quot;/&gt;&#13;&#10;&lt;memoryBlockExpression address=&quot;134610944&quot; label=&quot;0x8060000&quot;/&gt;&#13;&#10;&lt;/memoryBlockExpressionList&gt;&#13;&#10;"/>
<stringAttribute key="process_factory_id" value="org.eclipse.cdt.dsf.gdb.GdbProcessFactory"/>
<stringAttribute key="saved_expressions&lt;seperator&gt;Unknown" value="0x20000000000,0x20000,0x200000,0x20010000,0x20011000,0x20001000,0x20002000,0x2001A000,0x2001D000,0x2002D000,0x2003D000,0x20030000,0x80008000,0x8008000,0x800C000"/>
</launchConfiguration>
+12
View File
@@ -0,0 +1,12 @@
Using the recent GNU ARM Eclipse v2.11
(https://gnuarmeclipse.github.io/)
and following the installation instructions to the letter
including the Packs Download (takes a while).
The eclipse-mars-gnuarm-mchf-preferences.epf contains the exported
preferences from Eclipse Mars with a working debug configuration.
If you already configured Eclipse, you may not want to use it, then
follow the "images" in Eclipse-Debug-Settings to create a debug
configuration by making the entries marked with red boxes in
a new GDB OpenOCD Debug Configuration.
You should be able to debug live with an ST-LINK V2 in
no time at all.
+222
View File
@@ -0,0 +1,222 @@
Index: codec2-dev/src/fdmdv.c
===================================================================
--- codec2-dev/src/fdmdv.c (revision 2846)
+++ codec2-dev/src/fdmdv.c (working copy)
@@ -50,11 +50,21 @@
#include "machdep.h"
static int sync_uw[] = {1,-1,1,-1,1,-1};
-
#ifdef __EMBEDDED__
#define printf gdb_stdio_printf
#endif
+#ifndef ARM_MATH_CM4
+ #define SINF(a) sinf(a)
+ #define COSF(a) cosf(a)
+#else
+ #define SINF(a) arm_sin_f32(a)
+ #define COSF(a) arm_cos_f32(a)
+#endif
+
+static const COMP pi_on_4 = { .70710678118654752439, .70710678118654752439 }; // COSF(PI/4) , SINF(PI/4)
+
+
/*--------------------------------------------------------------------------* \
FUNCTION....: fdmdv_create
@@ -110,8 +120,8 @@
This helped PAPR for a few dB. We don't need to adjust rx
phase as DQPSK takes care of that. */
- f->phase_tx[c].real = cosf(2.0*PI*c/(Nc+1));
- f->phase_tx[c].imag = sinf(2.0*PI*c/(Nc+1));
+ f->phase_tx[c].real = COSF(2.0*PI*c/(Nc+1));
+ f->phase_tx[c].imag = SINF(2.0*PI*c/(Nc+1));
f->phase_rx[c].real = 1.0;
f->phase_rx[c].imag = 0.0;
@@ -124,12 +134,12 @@
f->prev_tx_symbols[Nc].real = 2.0;
fdmdv_set_fsep(f, FSEP);
- f->freq[Nc].real = cosf(2.0*PI*0.0/FS);
- f->freq[Nc].imag = sinf(2.0*PI*0.0/FS);
+ f->freq[Nc].real = COSF(2.0*PI*0.0/FS);
+ f->freq[Nc].imag = SINF(2.0*PI*0.0/FS);
f->freq_pol[Nc] = 2.0*PI*0.0/FS;
- f->fbb_rect.real = cosf(2.0*PI*FDMDV_FCENTRE/FS);
- f->fbb_rect.imag = sinf(2.0*PI*FDMDV_FCENTRE/FS);
+ f->fbb_rect.real = COSF(2.0*PI*FDMDV_FCENTRE/FS);
+ f->fbb_rect.imag = SINF(2.0*PI*FDMDV_FCENTRE/FS);
f->fbb_pol = 2.0*PI*FDMDV_FCENTRE/FS;
f->fbb_phase_tx.real = 1.0;
f->fbb_phase_tx.imag = 0.0;
@@ -257,15 +267,15 @@
for(c=0; c<f->Nc/2; c++) {
carrier_freq = (-f->Nc/2 + c)*f->fsep;
- f->freq[c].real = cosf(2.0*PI*carrier_freq/FS);
- f->freq[c].imag = sinf(2.0*PI*carrier_freq/FS);
+ f->freq[c].real = COSF(2.0*PI*carrier_freq/FS);
+ f->freq[c].imag = SINF(2.0*PI*carrier_freq/FS);
f->freq_pol[c] = 2.0*PI*carrier_freq/FS;
}
for(c=f->Nc/2; c<f->Nc; c++) {
carrier_freq = (-f->Nc/2 + c + 1)*f->fsep;
- f->freq[c].real = cosf(2.0*PI*carrier_freq/FS);
- f->freq[c].imag = sinf(2.0*PI*carrier_freq/FS);
+ f->freq[c].real = COSF(2.0*PI*carrier_freq/FS);
+ f->freq[c].imag = SINF(2.0*PI*carrier_freq/FS);
f->freq_pol[c] = 2.0*PI*carrier_freq/FS;
}
}
@@ -676,6 +686,12 @@
if (f >= 4)
memcpy(&pilot_lut[M*(f-4)], pilot, M*sizeof(COMP));
}
+
+ // create complex conjugate since we need this and only this later on
+ for (f=0;f<4*M;f++)
+ {
+ pilot_lut[f] = cconj(pilot_lut[f]);
+ }
}
@@ -806,10 +822,18 @@
f->pilot_baseband2[i] = f->pilot_baseband2[i+nin];
}
+#ifndef ARM_MATH_CM4
for(i=0,j=NPILOTBASEBAND-nin; i<nin; i++,j++) {
- f->pilot_baseband1[j] = cmult(rx_fdm[i], cconj(pilot[i]));
- f->pilot_baseband2[j] = cmult(rx_fdm[i], cconj(prev_pilot[i]));
+ f->pilot_baseband1[j] = cmult(rx_fdm[i], pilot[i]);
+ f->pilot_baseband2[j] = cmult(rx_fdm[i], prev_pilot[i]);
}
+#else
+ // TODO: Maybe a handwritten mult taking advantage of rx_fdm[0] being
+ // used twice would be faster but this is for sure faster than
+ // the implementation above in any case.
+ arm_cmplx_mult_cmplx_f32(&rx_fdm[0].real,&pilot[0].real,&f->pilot_baseband1[NPILOTBASEBAND-nin].real,nin);
+ arm_cmplx_mult_cmplx_f32(&rx_fdm[0].real,&prev_pilot[0].real,&f->pilot_baseband2[NPILOTBASEBAND-nin].real,nin);
+#endif
lpf_peak_pick(&foff1, &max1, f->pilot_baseband1, f->pilot_lpf1, f->fft_pilot_cfg, f->S1, nin, do_fft);
lpf_peak_pick(&foff2, &max2, f->pilot_baseband2, f->pilot_lpf2, f->fft_pilot_cfg, f->S2, nin, do_fft);
@@ -840,8 +864,8 @@
float mag;
int i;
- foff_rect.real = cosf(2.0*PI*foff/FS);
- foff_rect.imag = sinf(2.0*PI*foff/FS);
+ foff_rect.real = COSF(2.0*PI*foff/FS);
+ foff_rect.imag = SINF(2.0*PI*foff/FS);
for(i=0; i<nin; i++) {
*foff_phase_rect = cmult(*foff_phase_rect, foff_rect);
rx_fdm_fcorr[i] = cmult(rx_fdm[i], *foff_phase_rect);
@@ -992,7 +1016,41 @@
return dec_rate*acc;
}
+/*---------------------------------------------------------------------------*\
+ FUNCTION....: fir_filter2()
+ AUTHOR......: David Rowe
+ DATE CREATED: July 2014
+
+ Helper fir filter function which runs 2x same filter on two sets of data.
+\*---------------------------------------------------------------------------*/
+
+static void fir_filter2(float acc[2], float mem[], float coeff[], const unsigned int dec_rate) {
+ acc[0] = 0.0;
+ acc[1] = 0.0;
+
+ float c,m1,m2,a1,a2;
+ float* inpCmplx = &mem[0];
+ float* coeffPtr = &coeff[0];
+
+ int m;
+
+ for(m=0; m<NFILTER; m+=dec_rate) {
+ c = *coeffPtr;
+ m1 = inpCmplx[0];
+ m2 = inpCmplx[1];
+ a1 = c * m1;
+ a2 = c * m2;
+ acc[0] += a1;
+ inpCmplx+= dec_rate*2;
+ acc[1] += a2;
+ coeffPtr+= dec_rate;
+ }
+
+ acc[0] *= dec_rate;
+ acc[1] *= dec_rate;
+}
+
/*---------------------------------------------------------------------------*\
FUNCTION....: down_convert_and_rx_filter()
@@ -1049,8 +1107,8 @@
//PROFILE_SAMPLE(windback_start);
windback_phase = -freq_pol[c]*NFILTER;
- windback_phase_rect.real = cosf(windback_phase);
- windback_phase_rect.imag = sinf(windback_phase);
+ windback_phase_rect.real = COSF(windback_phase);
+ windback_phase_rect.imag = SINF(windback_phase);
phase_rx[c] = cmult(phase_rx[c],windback_phase_rect);
//PROFILE_SAMPLE_AND_LOG(downconvert_start, windback_start, " windback");
@@ -1082,8 +1140,9 @@
for(m=0; m<NFILTER; m++)
rx_filt[c][k] = cadd(rx_filt[c][k], fcmult(gt_alpha5_root[m], rx_baseband[st+i+m]));
#else
- rx_filt[c][k].real = fir_filter(&rx_baseband[st+i].real, (float*)gt_alpha5_root, dec_rate);
- rx_filt[c][k].imag = fir_filter(&rx_baseband[st+i].imag, (float*)gt_alpha5_root, dec_rate);
+ // rx_filt[c][k].real = fir_filter(&rx_baseband[st+i].real, (float*)gt_alpha5_root, dec_rate);
+ // rx_filt[c][k].imag = fir_filter(&rx_baseband[st+i].imag, (float*)gt_alpha5_root, dec_rate);
+ fir_filter2(&rx_filt[c][k].real,&rx_baseband[st+i].real, (float*)gt_alpha5_root, dec_rate);
#endif
}
//PROFILE_SAMPLE_AND_LOG2(filter_start, " filter");
@@ -1155,8 +1214,8 @@
out single DFT at frequency 2*pi/P */
x.real = 0.0; x.imag = 0.0;
- freq.real = cosf(2*PI/P);
- freq.imag = sinf(2*PI/P);
+ freq.real = COSF(2*PI/P);
+ freq.imag = SINF(2*PI/P);
phase.real = 1.0;
phase.imag = 0.0;
@@ -1213,13 +1272,10 @@
COMP rx_symbols[], int old_qpsk_mapping)
{
int c;
- COMP pi_on_4;
COMP d;
int msb=0, lsb=0;
float ferr, norm;
- pi_on_4.real = cosf(PI/4.0);
- pi_on_4.imag = sinf(PI/4.0);
/* Extra 45 degree clockwise lets us use real and imag axis as
decision boundaries. "norm" makes sure the phase subtraction
@@ -1296,11 +1352,8 @@
float s[NC+1];
COMP refl_symbols[NC+1];
float n[NC+1];
- COMP pi_on_4;
int c;
- pi_on_4.real = cosf(PI/4.0);
- pi_on_4.imag = sinf(PI/4.0);
/* mag of each symbol is distance from origin, this gives us a
vector of mags, one for each carrier. */
+14
View File
@@ -0,0 +1,14 @@
cd ../drivers/freedv
SRCFILES=`grep -L "/* THIS IS A G" *.c *.h`
CODEC2_PATH=../../../../codec2-dev/src
for i in $SRCFILES
do
XI="$CODEC2_PATH/$i"
if [ -f "$XI" ]
then
cp $XI $i
else
echo $i not found
fi
done
@@ -0,0 +1,110 @@
#Tue Feb 16 09:39:10 CET 2016
@org.eclipse.debug.ui=3.11.100.v20150731-1137
@org.eclipse.ui.ide=3.11.0.v20150825-2158
/instance/org.eclipse.cdt.core/indexer/skipMacroReferences=false
/instance/ilg.gnuarmeclipse.debug.gdbjtag.openocd/gdb.server.doStart=true
@org.eclipse.cdt.ui=5.11.0.201509131935
/instance/org.eclipse.debug.core//org.eclipse.debug.core.PREFERRED_DELEGATES/org.eclipse.cdt.launch.remoteApplicationLaunchType=org.eclipse.rse.remotecdt.dsf.debug,debug,;
/instance/org.eclipse.cdt.mylyn.ui/org.eclipse.mylyn.cdt.ui.run.count.3_3_0=1
/instance/org.eclipse.cdt.core/indexer/skipTypeReferences=false
/instance/org.eclipse.ui.ide/PROBLEMS_FILTERS_MIGRATE=true
/instance/org.eclipse.ui.editors/overviewRuler_migration=migrated_3.1
/instance/org.eclipse.core.resources/version=1
/instance/org.eclipse.core.runtime/line.separator=\n
@org.eclipse.core.resources=3.10.1.v20150725-1910
/instance/org.eclipse.ui/showIntro=false
/instance/org.eclipse.ui.workbench/UIActivities.org.eclipse.cdt.debug.dsfgdbActivity=true
@org.eclipse.rse.ui=3.3.100.201503112018
/instance/org.eclipse.rse.ui/org.eclipse.rse.preferences.order.connections=pcb.Local
@ilg.gnuarmeclipse.debug.gdbjtag.openocd=3.2.1.201602101653
@org.eclipse.debug.core=3.10.0.v20150303-1130
/instance/org.eclipse.mylyn.tasks.ui/org.eclipse.mylyn.tasks.ui.filters.nonmatching.encouraged=true
@org.eclipse.oomph.workingsets=1.2.0.v20150915-0926
/configuration/org.eclipse.ui.ide/MAX_RECENT_WORKSPACES=5
@org.eclipse.ui.workbench=3.107.0.v20150825-2206
/instance/ilg.gnuarmeclipse.debug.gdbjtag.openocd/gdb.client.commands=set mem inaccessible-by-default off
file_export_version=3.0
@org.eclipse.cdt.core=5.11.0.201509131935
@org.eclipse.rse.core=3.3.100.201407181907
/instance/org.eclipse.core.net/org.eclipse.core.net.hasMigrated=true
/instance/org.eclipse.team.ui/org.eclipse.team.ui.first_time=false
/instance/org.eclipse.mylyn.tasks.ui/migrated.task.repositories.secure.store=true
/instance/org.eclipse.debug.core//org.eclipse.debug.core.PREFERRED_DELEGATES/org.eclipse.cdt.debug.gdbjtag.launchConfigurationType=org.eclipse.cdt.debug.gdbjtag.core.dsfLaunchDelegate,debug,;
/instance/org.eclipse.cdt.core.prj-mchf-eclipse/indexer/preferenceScope=0
/instance/org.eclipse.cdt.core/indexer/indexOnOpen=false
/instance/org.eclipse.ui.ide/platformState=1455563484884
/instance/org.eclipse.cdt.core/indexer/skipIncludedFilesLargerThanMB=16
@org.eclipse.core.net=1.2.300.v20141118-1725
/instance/org.eclipse.cdt.core/indexer/skipReferences=false
/instance/org.eclipse.core.resources/encoding=UTF-8
/instance/org.eclipse.cdt.managedbuilder.core/properties/mchf-eclipse.ilg.gnuarmeclipse.managedbuild.cross.target.elf.760754411/ilg.gnuarmeclipse.managedbuild.cross.config.elf.release.563472857=ilg.gnuarmeclipse.managedbuild.cross.tool.c.linker.1357867660\=rebuildState\\\=true\\r\\n\r\nilg.gnuarmeclipse.managedbuild.cross.toolchain.elf.release.1668167853\=rebuildState\\\=true\\r\\n\r\nilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler.833539941\=rebuildState\\\=true\\r\\n\r\nilg.gnuarmeclipse.managedbuild.cross.tool.printsize.1146300300\=rebuildState\\\=true\\r\\n\r\nilg.gnuarmeclipse.managedbuild.cross.tool.createflash.873251154\=rebuildState\\\=true\\r\\n\r\nilg.gnuarmeclipse.managedbuild.cross.tool.createlisting.443738704\=rebuildState\\\=true\\r\\n\r\nilg.gnuarmeclipse.managedbuild.cross.tool.assembler.1268992358\=rebuildState\\\=true\\r\\n\r\nilg.gnuarmeclipse.managedbuild.cross.tool.cpp.linker.629732904\=rebuildState\\\=true\\r\\n\r\nilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.606680054\=rebuildState\\\=true\\r\\n\r\nilg.gnuarmeclipse.managedbuild.cross.tool.archiver.98451563\=rebuildState\\\=true\\r\\n\r\n
/instance/org.eclipse.debug.core//org.eclipse.debug.core.PREFERRED_DELEGATES/org.eclipse.cdt.launch.postmortemLaunchType=org.eclipse.cdt.dsf.gdb.launch.coreCLaunch,debug,;
/instance/org.eclipse.mylyn.monitor.ui/org.eclipse.mylyn.monitor.activity.tracking.enabled.checked=true
\!/=
@org.eclipse.cdt.debug.core=7.7.0.201509131935
@org.eclipse.mylyn.monitor.ui=3.17.0.v20150828-2041
/instance/org.eclipse.core.resources/description.autobuilding=false
@org.eclipse.cdt.dsf.ui=2.5.0.201509131935
/instance/org.eclipse.cdt.core/indexer/useHeuristicIncludeResolution=true
/instance/org.eclipse.debug.ui/org.eclipse.debug.ui.MemoryView.RenderingViewPane.1=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?>\r\n<persistedMemoryRenderings>\r\n<memoryRendering memoryBlock\="1574521638" renderingId\="ilg.gnuarmeclipse.debug.gdbjtag.memoryRendering"/>\r\n</persistedMemoryRenderings>\r\n
@org.eclipse.ui.editors=3.9.0.v20150213-1939
@org.eclipse.core.variables=3.2.800.v20130819-1716
/instance/ilg.gnuarmeclipse.debug.gdbjtag.openocd/gdb.openocd.doDebugInRam=false
/instance/org.eclipse.cdt.core/indexer/skipFilesLargerThanMB=8
/instance/org.eclipse.cdt.ui/useQuickDiffPrefPage=true
/configuration/org.eclipse.ui.ide/RECENT_WORKSPACES=
/instance/org.eclipse.debug.core//org.eclipse.debug.core.PREFERRED_DELEGATES/org.eclipse.cdt.launch.attachLaunchType=org.eclipse.cdt.dsf.gdb.launch.attachCLaunch,debug,;
/instance/ilg.gnuarmeclipse.debug.gdbjtag.openocd/gdb.server.other=-f support/MCHF.cfg
/instance/org.eclipse.ui.ide/quickStart=false
/instance/org.eclipse.cdt.core/indexer/skipImplicitReferences=false
/instance/org.eclipse.oomph.workingsets/working.set.group=<?xml version\="1.0" encoding\="UTF-8"?>\n<workingsets\:WorkingSetGroup xmi\:version\="2.0" xmlns\:xmi\="http\://www.omg.org/XMI" xmlns\:workingsets\="http\://www.eclipse.org/oomph/workingsets/1.0"/>\n
/instance/org.eclipse.debug.ui/org.eclipse.debug.ui.PREF_LAUNCH_PERSPECTIVES=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?>\r\n<launchPerspectives/>\r\n
/instance/ilg.gnuarmeclipse.debug.gdbjtag.openocd/gdb.openocd.doPreRunReset=true
/instance/ilg.gnuarmeclipse.debug.gdbjtag.openocd/gdb.client.other=
/instance/org.eclipse.mylyn.context.core/mylyn.attention.migrated=true
@org.eclipse.mylyn.context.core=3.17.0.v20150625-2044
/instance/org.eclipse.debug.ui/org.eclipse.debug.ui.UseContextualLaunch=false
/instance/org.eclipse.cdt.managedbuilder.core/properties/mchf-eclipse.ilg.gnuarmeclipse.managedbuild.cross.target.elf.760754411/ilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.433341838=ilg.gnuarmeclipse.managedbuild.cross.tool.createlisting.1315515641\=rebuildState\\\=false\\r\\n\r\nilg.gnuarmeclipse.managedbuild.cross.tool.cpp.compiler.1301137147\=rebuildState\\\=false\\r\\n\r\nilg.gnuarmeclipse.managedbuild.cross.tool.createflash.1618780674\=rebuildState\\\=false\\r\\n\r\nilg.gnuarmeclipse.managedbuild.cross.tool.c.linker.431714468\=rebuildState\\\=false\\r\\n\r\nilg.gnuarmeclipse.managedbuild.cross.config.elf.debug.433341838\=rcState\\\=0\\r\\nrebuildState\\\=false\\r\\n\r\nilg.gnuarmeclipse.managedbuild.cross.tool.assembler.1708414410\=rebuildState\\\=false\\r\\n\r\nilg.gnuarmeclipse.managedbuild.cross.tool.archiver.426523710\=rebuildState\\\=false\\r\\n\r\nilg.gnuarmeclipse.managedbuild.cross.toolchain.elf.debug.680557654\=rebuildState\\\=false\\r\\n\r\nilg.gnuarmeclipse.managedbuild.cross.tool.printsize.693017885\=rebuildState\\\=false\\r\\n\r\nilg.gnuarmeclipse.managedbuild.cross.tool.c.compiler.255939792\=rebuildState\\\=false\\r\\n\r\nilg.gnuarmeclipse.managedbuild.cross.tool.cpp.linker.1298670015\=rebuildState\\\=false\\r\\n\r\n
@org.eclipse.core.runtime=3.11.1.v20150903-1804
@org.eclipse.cdt.mylyn.ui=3.17.0.v20150625-2044
/instance/org.eclipse.debug.ui/preferredDetailPanes=DefaultDetailPane\:DefaultDetailPane|
/instance/org.eclipse.ui.ide/tipsAndTricks=true
/instance/org.eclipse.cdt.core/indexer/indexerId=org.eclipse.cdt.core.fastIndexer
/instance/org.eclipse.cdt.ui/spelling_locale_initialized=true
/instance/ilg.gnuarmeclipse.debug.gdbjtag.openocd/gdb.client.executable=${cross_prefix}gdb${cross_suffix}
/instance/ilg.gnuarmeclipse.debug.gdbjtag.openocd/gdb.openocd.enableSemihosting=false
/instance/ilg.gnuarmeclipse.debug.gdbjtag.openocd/gdb.openocd.preRunReset.type=halt
/instance/org.eclipse.debug.ui/org.eclipse.debug.ui.user_view_bindings=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?>\r\n<viewBindings>\r\n<view id\="org.eclipse.debug.ui.MemoryView">\r\n<perspective id\="org.eclipse.debug.ui.DebugPerspective" userAction\="closed"/>\r\n</view>\r\n<view id\="org.eclipse.debug.ui.RegisterView">\r\n<perspective id\="org.eclipse.debug.ui.DebugPerspective" userAction\="closed"/>\r\n</view>\r\n<view id\="org.eclipse.debug.ui.ModuleView">\r\n<perspective id\="org.eclipse.debug.ui.DebugPerspective" userAction\="closed"/>\r\n</view>\r\n<view id\="ilg.gnuarmeclipse.debug.gdbjtag.ui.views.PeripheralsView">\r\n<perspective id\="org.eclipse.debug.ui.DebugPerspective" userAction\="closed"/>\r\n</view>\r\n<view id\="org.eclipse.debug.ui.VariableView">\r\n<perspective id\="org.eclipse.debug.ui.DebugPerspective" userAction\="closed"/>\r\n</view>\r\n<view id\="org.eclipse.debug.ui.DebugView">\r\n<perspective id\="org.eclipse.debug.ui.DebugPerspective" userAction\="closed"/>\r\n</view>\r\n<view id\="org.eclipse.debug.ui.BreakpointView">\r\n<perspective id\="org.eclipse.debug.ui.DebugPerspective" userAction\="closed"/>\r\n</view>\r\n<view id\="org.eclipse.ui.console.ConsoleView">\r\n<perspective id\="org.eclipse.debug.ui.DebugPerspective" userAction\="closed"/>\r\n</view>\r\n</viewBindings>\r\n
/instance/org.eclipse.cdt.ui/useAnnotationsPrefPage=true
/instance/org.eclipse.cdt.core/indexer/indexAllFiles=true
@org.eclipse.team.ui=3.7.200.v20150203-1452
/instance/ilg.gnuarmeclipse.debug.gdbjtag.openocd/gdb.openocd.doInitialReset=true
/instance/org.eclipse.mylyn.tasks.ui/org.eclipse.mylyn.tasks.ui.filters.nonmatching=true
@org.eclipse.mylyn.tasks.ui=3.17.0.v20150909-1822
@org.eclipse.egit.core=4.0.3.201509231615-r
/instance/ilg.gnuarmeclipse.debug.gdbjtag.openocd/gdb.server.executable=${openocd_path}/${openocd_executable}
/instance/org.eclipse.debug.core//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,;
/instance/org.eclipse.ui.ide/SAVE_ALL_BEFORE_BUILD=true
/instance/org.eclipse.core.variables/org.eclipse.core.variables.valueVariables=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?>\r\n<valueVariables>\r\n<valueVariable description\="Name of the QEMU executable" name\="qemu_executable" readOnly\="false" value\="qemu-system-gnuarmeclipse.exe"/>\r\n<valueVariable description\="Path to J-Link installation folder" name\="jlink_path" readOnly\="false" value\=""/>\r\n<valueVariable description\="Name of the OpenOCD executable" name\="openocd_executable" readOnly\="false" value\="openocd.exe"/>\r\n<valueVariable description\="Name of the J-Link executable" name\="jlink_gdbserver" readOnly\="false" value\="JLinkGDBServerCL.exe"/>\r\n<valueVariable description\="Path to the QEMU installation folder" name\="qemu_path" readOnly\="false" value\=""/>\r\n<valueVariable description\="Path to the OpenOCD installation folder" name\="openocd_path" readOnly\="false" value\="C\:/Program Files/GNU ARM Eclipse/OpenOCD/bin"/>\r\n</valueVariables>\r\n
/configuration/org.eclipse.ui.ide/RECENT_WORKSPACES_PROTOCOL=3
/configuration/org.eclipse.core.net/org.eclipse.core.net.hasMigrated=true
/instance/org.eclipse.cdt.ui/content_assist_disabled_computers=org.eclipse.cdt.ui.parserProposalCategory\u0000org.eclipse.cdt.ui.textProposalCategory\u0000
/instance/org.eclipse.cdt.core/indexer/indexUnusedHeadersWithDefaultLang=true
/instance/org.eclipse.cdt.dsf.ui/useAnnotationsPrefPage=true
/instance/org.eclipse.egit.core/GitRepositoriesView.GitDirectories=E\:\\Hacking\\ham\\MCHF\\my-sw\\mchf-github\\.git;
/instance/org.eclipse.debug.ui/preferredTargets=org.eclipse.cdt.debug.ui.toggleCBreakpointTarget,org.eclipse.cdt.debug.ui.toggleCDynamicPrintfTarget\:org.eclipse.cdt.debug.ui.toggleCBreakpointTarget|
/instance/org.eclipse.ui.ide/EXIT_PROMPT_ON_CLOSE_LAST_WINDOW=false
/instance/org.eclipse.cdt.core/indexer/updatePolicy=0
/instance/org.eclipse.debug.ui/org.eclipse.debug.ui.MemoryView.orientation=0
/instance/org.eclipse.cdt.debug.core/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
/instance/ilg.gnuarmeclipse.debug.gdbjtag.openocd/gdb.openocd.preRun.other=
/instance/org.eclipse.cdt.core/indexer/indexAllHeaderVersions=false
@org.eclipse.ui=3.107.0.v20150507-1945
/instance/org.eclipse.debug.ui/pref_state_memento.org.eclipse.debug.ui.DebugVieworg.eclipse.debug.ui.DebugView=<?xml version\="1.0" encoding\="UTF-8"?>\r\n<DebugViewMemento org.eclipse.debug.ui.BREADCRUMB_DROPDOWN_AUTO_EXPAND\="false"/>
/instance/ilg.gnuarmeclipse.debug.gdbjtag.openocd/gdb.openocd.initialReset.type=init
@org.eclipse.cdt.managedbuilder.core=8.3.0.201509131935
/instance/org.eclipse.ui.workbench//org.eclipse.ui.commands/state/org.eclipse.ui.navigator.resources.nested.changeProjectPresentation/org.eclipse.ui.commands.radioState=false
/instance/ilg.gnuarmeclipse.debug.gdbjtag.openocd/gdb.openocd.init.other=
/instance/org.eclipse.debug.ui/pref_state_memento.ilg.gnuarmeclipse.debug.gdbjtag.ui.views.PeripheralsView=<?xml version\="1.0" encoding\="UTF-8"?>\r\n<VariablesViewMemento org.eclipse.debug.ui.SASH_DETAILS_PART\="315" org.eclipse.debug.ui.SASH_VIEW_PART\="684">\r\n<PRESENTATION_CONTEXT_PROPERTIES IMemento.internal.id\="PeripheralsView">\r\n<BOOLEAN BOOLEAN\="true" IMemento.internal.id\="org.eclipse.debug.ui.check"/>\r\n</PRESENTATION_CONTEXT_PROPERTIES>\r\n</VariablesViewMemento>
/instance/org.eclipse.cdt.core/indexer/indexAllVersionsSpecificHeaders=
/configuration/org.eclipse.ui.ide/SHOW_WORKSPACE_SELECTION_DIALOG=false
@@ -0,0 +1,184 @@
import struct
import sys
class octaveRecord:
def __init__(self):
self.rname = ""
self.rtype = ""
self.rrows = 0
self.rcols = 0
self.record = []
def dumpCell(self,cell,of):
if (self.rtype == "complex"):
of.write(" ({:f},{:f})".format(cell.real,cell.imag))
elif (self.rtype == "float"):
of.write(" {:f}".format(cell))
elif (self.rtype == "int"):
of.write(" {}".format(cell))
elif (self.rtype == "matrix"):
of.write(" {}".format(cell))
def dumpData(self,of):
for row in self.record:
for cell in row:
self.dumpCell(cell,of)
of.write("\n")
def dump(self,of):
of.write("# name: " + self.rname+ "\n")
of.write("# type: " + self.rtype+ "\n")
of.write("# rows: " + str(self.rrows) + "\n")
of.write("# columns: " + str(self.rcols)+ "\n")
self.dumpData(of)
of.write("\n")
of.flush()
def get_dev(self,a,b):
if (self.rtype == "complex"):
iD = 10000.0
rD = 10000.0
if abs(a.real - b.real) > 0.000001:
rD = abs(a.real / (a.real - b.real))
if abs(a.imag - b.imag) > 0.0:
iD = abs(a.imag / (a.imag - b.imag))
return max(rD,iD)
else:
return abs(a / (a - b))
def compare(self,rec2,of):
of.write(self.rname + ": ")
if ( self.rrows == rec2.rrows):
if (self.rcols == rec2.rcols):
#iterate over both arrays and compare the values
for rowA,rowB in zip(self.record,rec2.record):
for cellA,cellB in zip(rowA,rowB):
res = ''
if (cellA == cellB):
res = '' # 'o'
elif self.get_dev(cellA,cellB) > 100.0:
res = '' # '#'
else:
of.write(str(self.get_dev(cellA,cellB)) +":")
self.dumpCell(cellA,of)
of.write(" /")
self.dumpCell(cellB,of)
of.write(" ")
of.write(res)
of.write("\n")
else:
of.write("col numbers differ\n")
else:
print of.write("row numbers differ")
of.flush()
def intStr2float(hexValStr):
return struct.unpack('f',struct.pack('L',int(hexValStr,16)))
def get_complex(word,FloatAsHexString):
real = 0.0
imag = 0.0
if FloatAsHexString:
real = intStr2float(word.split(",")[0].split("(")[1])[0]
imag = intStr2float(word.split(",")[1].split(")")[0])[0]
else:
real = float(word.split(",")[0].split("(")[1])
imag = float(word.split(",")[1].split(")")[0])
return complex(real,imag)
def get_float(word,FloatAsHexString):
if FloatAsHexString:
return intStr2float(word)[0]
else:
return float(word)
def get_int(word):
return int(word)
def readFromDump(fileName, FloatAsHexString = True):
rname=""
rhex=False
rtype=""
rvalues= {}
rcols=0
rrows=0
rheaderWrite=True
outOfSync = True
f = open(fileName, 'r')
recArray = []
record = octaveRecord()
records = []
for line in f:
if outOfSync == False:
words = line.split()
if words:
if (words[0] == "#"):
if (words[1] == "name:"):
rname=words[2]
elif (words[1] == "type:"):
rtype=words[2]
elif (words[1] == "rows:"):
rrows=int(words[2])
elif (words[1] == "columns:"):
rcols=int(words[2])
rheaderWrite = True
elif (words[1] == "hex:"):
rhex = words[2] == "true"
else:
if (rheaderWrite):
recArray = []
rheaderWrite = False
record.rname = rname
record.rtype = rtype
record.rrows = rrows
record.rcols = rcols
if (rtype == "complex"):
compArray = []
for word in words:
compArray.append(get_complex(word,FloatAsHexString))
recArray.append(compArray)
elif (rtype == "float"):
compArray = []
for word in words:
compArray.append(get_float(word,FloatAsHexString))
recArray.append(compArray)
elif (rtype == "int"):
compArray = []
for word in words:
compArray.append(get_int(word))
recArray.append(compArray)
elif (rtype == "matrix"):
compArray = []
for word in words:
compArray.append(get_float(word,rhex))
recArray.append(compArray)
if (len(recArray) == rrows):
record.record = recArray
records.append(record)
record = octaveRecord()
rhex = False
else:
outOfSync = line.startswith("# Created by tfdmdv.c") == False
f.close()
return records
records = readFromDump('tfdmdv_out_reference.txt')
records2 = readFromDump('tfdmdv_out.txt')
outputFile = open('log2.out', 'wt')
for rA,rB in zip(records,records2):
rA.compare(rB,outputFile)
#for record in records2:
# record.dump(outputFile)
outputFile.flush()
outputFile.close()
+210
View File
@@ -0,0 +1,210 @@
#!/usr/bin/env python3
#
# Intel HEX to ST microelectronics DfuSe file converter
# Copyright (C)2015 Thomas Kindler <mail@t-kindler.de>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
import os
import struct
import argparse
from zlib import crc32
from intelhex import IntelHex
def load_hex():
"""
Load hex or binary file.
:return: intelhex object
"""
if args.verbose:
print ("Loading %s..." % args.source)
try:
ih = IntelHex()
if args.format == "hex":
ih.loadhex(args.source)
else:
ih.loadbin(args.source, args.start_addr)
except Exception as e:
print (e)
exit(1)
if args.verbose:
print (" Start: 0x%08x" % ih.minaddr())
print (" End : 0x%08x" % ih.maxaddr())
return ih
def save_dfu(ih):
"""
Save as STMicroelectronics DfuSe file.
see UM0391 - DfuSe File Format Specification
:param ih: intelhex object
"""
if args.verbose:
print ("Saving %s..." % args.target)
print (" Device ID: 0x%04x:0x%04x" % (args.vid, args.pid))
print (" Target name: %s" % args.target_name)
# Image element
#
image_data = ih.tobinarray()
if len(image_data) != len(bytes(image_data)):
# catch and correct python2.7 issue using this hack
image_data = ih.tobinstr()
data = struct.pack(
"<II",
ih.minaddr(), # dwElementAddress
len(image_data) # dwElementSize
) + bytes(image_data) # Data
# Target prefix
#
szTargetName = args.target_name.encode("ascii")
data = struct.pack(
"<6sBI255sII",
b"Target", # szSignature
0, # bAlternateSetting
1, # bTargetNamed
szTargetName, # szTargetName
len(data), # dwTargetSize
1 # dwNbElements
) + data
# Prefix
#
data = struct.pack(
"<5sBIB",
b"DfuSe", # szSignature
0x01, # bVersion,
len(data)+11, # DFUImageSize,
1 # bTargets
) + data
# Suffix
#
data += struct.pack(
"<HHHH3sB",
0xFFFF, # bcdDevice
args.pid, # idProduct
args.vid, # idVendor
0x011a, # bdcDFU
b"UFD", # ucDfuSignature
16 # bLength
)
dwCRC = ~crc32(data) & 0xFFFFFFFF
data += struct.pack(
"<I",
dwCRC # dwCRC
)
try:
open(args.target, "wb").write(data)
except Exception as e:
print (e)
exit(1)
# Parse arguments
#
DEFAULT_DEVICE = "0x0483:0xdf11"
parser = argparse.ArgumentParser(
description="Convert hex files to STMicroelectronics DfuSe format"
)
parser.add_argument(
"--version",
action="version",
version="%(prog)s 1.1.0"
)
parser.add_argument(
"-q", "--quiet", dest="verbose",
default=True,
action="store_false",
help="do not print status messages"
)
parser.add_argument(
"source", help="source file"
)
parser.add_argument(
"target", nargs = "?",
help="target file"
)
parser.add_argument(
"-f", "--format",
default="hex", choices=["hex", "bin"],
help="source file format (default: %(default)s)"
)
parser.add_argument(
"-s", "--start", dest="start_addr",
help="set start address (for bin files)"
)
parser.add_argument(
"-d", "--device",
default=DEFAULT_DEVICE,
help="device VID:PID (default: %(default)s)"
)
parser.add_argument(
"-n", "--name", dest="target_name",
default="application",
help="target name (default: %(default)s)"
)
args=parser.parse_args()
# Check arguments
#
if args.target == None:
(root, ext) = os.path.splitext(args.source)
args.target = root + ".dfu"
if args.format == "bin":
if args.start_addr == None:
print ("option --start required for binary files")
exit(1)
args.start_addr = int(args.start_addr, 0)
else:
if args.start_addr != None:
print ("option --start not allowed for hex files")
exit(1)
args.vid = int(args.device.split(':', 1)[0], 0)
args.pid = int(args.device.split(':', 1)[1], 0)
# Convert file
#
save_dfu( load_hex() )
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,357 @@
#!/usr/bin/python
# (c) Alexander Belchenko, 2007, 2009
"""Benchmarking.
Run each test 3 times and get median value.
Using 10K array as base test time.
Each other test compared with base with next formula::
Tc * Nb
q = ---------
Tb * Nc
Here:
* Tc - execution time of current test
* Tb - execution time of base
* Nb - array size of base (10K)
* Nc - array size of current test
If resulting value is ``q <= 1.0`` it's the best possible result,
i.e. time increase proportionally to array size.
"""
from cStringIO import StringIO
import gc
import sys
import time
import intelhex
def median(values):
"""Return median value for the list of values.
@param values: list of values for processing.
@return: median value.
"""
values.sort()
n = int(len(values) / 2)
return values[n]
def run_test(func, fobj):
"""Run func with argument fobj and measure execution time.
@param func: function for test
@param fobj: data for test
@return: execution time
"""
gc.disable()
try:
begin = time.time()
func(fobj)
end = time.time()
finally:
gc.enable()
return end - begin
def run_readtest_N_times(func, hexstr, n):
"""Run each test N times.
@param func: function for test
@param hexstr: string with content of hex file to read
@param n: times to repeat.
@return: (median time, times list)
"""
assert n > 0
times = []
for i in range(n):
sio = StringIO(hexstr)
times.append(run_test(func, sio))
sio.close()
t = median(times)
return t, times
def run_writetest_N_times(func, n):
"""Run each test N times.
@param func: function for test
@param n: times to repeat.
@return: (median time, times list)
"""
assert n > 0
times = []
for i in range(n):
sio = StringIO()
times.append(run_test(func, sio))
sio.close()
t = median(times)
return t, times
def time_coef(tc, nc, tb, nb):
"""Return time coefficient relative to base numbers.
@param tc: current test time
@param nc: current test data size
@param tb: base test time
@param nb: base test data size
@return: time coef.
"""
tc = float(tc)
nc = float(nc)
tb = float(tb)
nb = float(nb)
q = (tc * nb) / (tb * nc)
return q
def get_test_data(n1, offset, n2):
"""Create test data on given pattern.
@param n1: size of first part of array at base address 0.
@param offset: offset for second part of array.
@param n2: size of second part of array at given offset.
@return: (overall size, hex file, IntelHex object)
"""
# make IntelHex object
ih = intelhex.IntelHex()
addr = 0
for i in range(n1):
ih[addr] = addr % 256
addr += 1
addr += offset
for i in range(n2):
ih[addr] = addr % 256
addr += 1
# make hex file
sio = StringIO()
ih.write_hex_file(sio)
hexstr = sio.getvalue()
sio.close()
#
return n1+n2, hexstr, ih
def get_base_10K():
"""Base 10K"""
return get_test_data(10000, 0, 0)
def get_100K():
return get_test_data(100000, 0, 0)
def get_100K_100K():
return get_test_data(100000, 1000000, 100000)
def get_0_100K():
return get_test_data(0, 1000000, 100000)
def get_1M():
return get_test_data(1000000, 0, 0)
class Measure(object):
"""Measure execution time helper."""
data_set = [
# (data name, getter)
('base 10K', get_base_10K), # first should be base numbers
('100K', get_100K),
('1M', get_1M),
('100K+100K', get_100K_100K),
('0+100K', get_0_100K),
]
def __init__(self, n=3, read=True, write=True):
self.n = n
self.read = read
self.write = write
self.results = []
def measure_one(self, data):
"""Do measuring of read and write operations.
@param data: 3-tuple from get_test_data
@return: (time readhex, time writehex)
"""
_unused, hexstr, ih = data
tread, twrite = 0.0, 0.0
if self.read:
tread = run_readtest_N_times(intelhex.IntelHex, hexstr, self.n)[0]
if self.write:
twrite = run_writetest_N_times(ih.write_hex_file, self.n)[0]
return tread, twrite
def measure_all(self):
for name, getter in self.data_set:
data = getter()
times = self.measure_one(data)
self.results.append((name, times, data[0]))
def print_report(self, to_file=None):
if to_file is None:
to_file = sys.stdout
base_title, base_times, base_n = self.results[0]
base_read, base_write = base_times
read_report = ['%-10s\t%7.3f' % (base_title, base_read)]
write_report = ['%-10s\t%7.3f' % (base_title, base_write)]
for item in self.results[1:]:
cur_title, cur_times, cur_n = item
cur_read, cur_write = cur_times
if self.read:
qread = time_coef(cur_read, cur_n,
base_read, base_n)
read_report.append('%-10s\t%7.3f\t%7.3f' % (cur_title,
cur_read,
qread))
if self.write:
qwrite = time_coef(cur_write, cur_n,
base_write, base_n)
write_report.append('%-10s\t%7.3f\t%7.3f' % (cur_title,
cur_write,
qwrite))
if self.read:
to_file.write('Read operation:\n')
to_file.write('\n'.join(read_report))
to_file.write('\n\n')
if self.write:
to_file.write('Write operation:\n')
to_file.write('\n'.join(write_report))
to_file.write('\n\n')
HELP = """\
Usage: python _bench.py [OPTIONS]
Options:
-h this help
-n N repeat tests N times
-r run only tests for read operation
-w run only tests for write operation
If option -r or -w is not specified then all tests will be run.
"""
def main(argv=None):
"""Main function to run benchmarks.
@param argv: command-line arguments.
@return: exit code (0 is OK).
"""
import getopt
# default values
test_read = None
test_write = None
n = 3 # number of repeat
if argv is None:
argv = sys.argv[1:]
try:
opts, args = getopt.getopt(argv, 'hn:rw', [])
for o,a in opts:
if o == '-h':
print(HELP)
return 0
elif o == '-n':
n = int(a)
elif o == '-r':
test_read = True
elif o == '-w':
test_write = True
if args:
raise getopt.GetoptError('Arguments are not used.')
except getopt.GetoptError, msg:
txt = str(msg)
print(txt)
return 1
if (test_read, test_write) == (None, None):
test_read = test_write = True
m = Measure(n, test_read, test_write)
m.measure_all()
m.print_report()
return 0
if __name__ == '__main__':
sys.exit(main(sys.argv[1:]))
"""
Some Results
************
21/04/2007 revno.40
Python 2.5 @ Windows XP, Intel Celeron M CPU 430 @ 1.73GHz
Read operation:
base 10K 0.031
100K 0.360 1.161
1M 3.500 1.129
100K+100K 0.719 1.160
0+100K 0.360 1.161
Write operation:
base 10K 0.031
100K 0.297 0.958
1M 2.953 0.953
100K+100K 1.328 2.142
0+100K 0.312 1.006
21/04/2007 revno.46
Python 2.5 @ Windows XP, Intel Celeron M CPU 430 @ 1.73GHz
Read operation:
base 10K 0.016
100K 0.203 1.269
1M 2.000 1.250
100K+100K 0.422 1.319
0+100K 0.203 1.269
Write operation:
base 10K 0.031
100K 0.297 0.958
1M 2.969 0.958
100K+100K 1.328 2.142
0+100K 0.312 1.006
22/04/2007 revno.48
Python 2.5 @ Windows XP, Intel Celeron M CPU 430 @ 1.73GHz
Read operation:
base 10K 0.016
100K 0.187 1.169
1M 1.891 1.182
100K+100K 0.406 1.269
0+100K 0.188 1.175
Write operation:
base 10K 0.031
100K 0.296 0.955
1M 2.969 0.958
100K+100K 1.328 2.142
0+100K 0.312 1.006
19/08/2008 revno.72
Python 2.5.2 @ Windows XP, Intel Celeron M CPU 430 @ 1.73GHz
Read operation:
base 10K 0.016
100K 0.171 1.069
1M 1.734 1.084
100K+100K 0.375 1.172
0+100K 0.172 1.075
Write operation:
base 10K 0.016
100K 0.156 0.975
1M 1.532 0.957
100K+100K 0.344 1.075
0+100K 0.156 0.975
"""
@@ -0,0 +1,57 @@
# Copyright (c) 2011, Bernhard Leiner
# All rights reserved.
#
# Redistribution and use in source and binary forms,
# with or without modification, are permitted provided
# that the following conditions are met:
#
# * Redistributions of source code must retain
# the above copyright notice, this list of conditions
# and the following disclaimer.
# * Redistributions in binary form must reproduce
# the above copyright notice, this list of conditions
# and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of the author nor the names
# of its contributors may be used to endorse
# or promote products derived from this software
# without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
# BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
# AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
# IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
# OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
# OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
'''Compatibility functions for python 2 and 3.
@author Bernhard Leiner (bleiner AT gmail com)
@version 1.0
'''
__docformat__ = "javadoc"
import sys
if sys.version_info[0] >= 3:
def asbytes(s):
if isinstance(s, bytes):
return s
return s.encode('latin1')
def asstr(s):
if isinstance(s, str):
return s
return s.decode('latin1')
else:
asbytes = str
asstr = str
File diff suppressed because it is too large Load Diff
+27
View File
@@ -0,0 +1,27 @@
from setuptools import setup
def readme():
with open('README.md') as f:
return f.read()
setup(name='hex2dfu',
version='0.1',
packages=['hex2dfu'],
description='hex file converter to dfu',
url='https://github.com/pjsg/hex2dfu',
author='Philip Gladstone',
install_requires=[
'intelhex>=2.2.1',
'markdown',
'docopt',
],
test_suite='nose.collector',
tests_require=[
'nose',
],
include_package_data=True,
long_description=readme(),
zip_safe=False,
entry_points={
'console_scripts': ['hex2dfu=hex2dfu:main'],
})
+23
View File
@@ -0,0 +1,23 @@
# This is an MCHF board with a single STM32F407VGTx chip.
# Generated by System Workbench for STM32
source [find interface/stlink-v2.cfg]
#source [find interface/stlink-v2-1.cfg]
set WORKAREASIZE 0x20000
transport select "hla_swd"
#source [find target/stm32f4x.cfg]
source [find target/stm32f7x.cfg]
# use hardware reset, connect under reset
reset_config none
## code to unprotect a protected STM32F7
## normally no required
#init
#reset halt
#stm32f2x unlock 0
#reset halt
#exit
+28
View File
@@ -0,0 +1,28 @@
# This is an MCHF board with a single STM32F407VGTx chip.
# Generated by System Workbench for STM32
source [find interface/stlink-v2.cfg]
#source [find interface/stlink-v2-1.cfg]
set WORKAREASIZE 0x20000
transport select "hla_swd"
set ENABLE_LOW_POWER 0
set CONNECT_UNDER_RESET 1
set STOP_WATCHDOG 1
debug_level 2
#source [find target/stm32f4x.cfg]
source [find target/stm32h7x_dual_bank.cfg]
# use hardware reset, connect under reset
reset_config none
## code to unprotect a protected STM32F7
## normally no required
#init
#reset halt
#stm32f2x unlock 0
#reset halt
#exit
+225
View File
@@ -0,0 +1,225 @@
"""
This module contains experimental code for using the (extend) UHSDR API
This program is free software: you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation, either version 3 of the License, or (at your option) any later
version.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
this program. If not, see <http://www.gnu.org/licenses/>.
"""
from __future__ import print_function
__author__ = "DB4PLE"
__copyright__ = "Copyright 2018, UHSDR project"
__credits__ = ["DB4PLE"]
__license__ = "GPLv3"
__status__ = "Prototype"
import sys
import os
class CatCmdFt817:
"""
List of used/supported FT817 CAT command codes
This list includes the officially known FT817 codes (including the "undocumented" ones)
"""
READ_EEPROM = 0xBB
WRITE_EEPROM = 0xBC
PTT_STATE = 0xF7
class CatCmd(CatCmdFt817):
"""
This list extends the FT817 by the special UHSDR codes implemented only in the UHSDR dialect
of FT817 CAT (which must be different from the FT817 ones)
"""
UHSDR_ID = 0x42
"""
this will return the bytes ['U', 'H' , 'S', 'D', 'R' ] and is used to identify an UHSDR with high enough firmware level
"""
class UhsdrConfigIndex:
"""
this is a completely incomplete list of config value indicies as used in the UHSDR firmware
we list only the absolutely necessary ids here for the moment (those must never change in different firmware versions, would break this code)
"""
VER_MAJOR = 176
VER_MINOR = 310
VER_BUILD = 171
NUMBER_OF_ENTRIES = 407
def eprint(*args, **kwargs):
"""
a small function to print to stderr, used for error and logging messages
"""
print(*args, file=sys.stderr, **kwargs)
class catSerial:
"""
Low Level FT817 CAT protocol handling on a serial communication
"""
def __init__(self, comObj):
self.comObj = comObj
def sendCommand(self, command):
bytesWritten = self.comObj.write(command)
return bytesWritten == 5
def readResponse(self,count):
response = self.comObj.read(count)
return (len(response) == count,response)
class catCommands:
"""
CAT API: Here we have direct access to CAT API ations, each logical API function has its direct counterpart in this
class
We do not implement any extra control logic in here, just the call of the API function and returning the response
This may be enriched to have all availabl CAT API functions, right now it is just what we need now
"""
def __init__(self, catObj):
self.catObj = catObj
def execute(self, cmd, count):
if self.catObj.sendCommand(cmd):
ok,res = self.catObj.readResponse(count)
return ok,bytearray(res)
else:
return (False,bytearray([]))
def readEEPROM(self, addr):
cmd = bytearray([ (addr & 0xff00)>>8,addr & 0xff, 0x00, 0x00, CatCmd.READ_EEPROM])
ok,res = self.execute(cmd,2)
if ok:
return res[1] * 256 + res[0]
else:
return ok
def readUHSDR(self):
cmd = bytearray([ 0x00, 0x00 , 0x00, 0x00, CatCmd.UHSDR_ID])
ok,res = self.execute(cmd,5)
return res == bytearray("UHSDR", 'utf-8')
def readPttState(self):
cmd = bytearray([ 0x00, 0x00 , 0x00, 0x00, CatCmd.PTT_STATE])
ok,res = self.execute(cmd,5)
return res
def writeEEPROM(self, addr, value16bit):
cmd = bytearray([ (addr & 0xff00)>>8,addr & 0xff, (value16bit & 0xff) >> 0, (value16bit & 0xff00) >> 8, CatCmd.WRITE_EEPROM])
ok,res = self.execute(cmd,1)
return ok
def readUHSDRConfig(self, index):
return self.readEEPROM(index + 0x8000);
def writeUHSDRConfig(self, index, value):
return self.writeEEPROM(index + 0x8000, value);
class UhsdrConfig():
"""
CONFIG MANAGEMENT: Handling of reading / writing TRX configurations, detection of TRX presence etc.
This class represents high-level actions, should involve proper parameter checking etc.
"""
def __init__(self, catObj):
self.catObj = catObj
def getVersion(self):
"""
return firmware version as integer tuple (major,minor,build)
or (False,False,False) if something goes wrong
"""
return (self.catObj.readUHSDRConfig(UhsdrConfigIndex.VER_MAJOR),
self.catObj.readUHSDRConfig(UhsdrConfigIndex.VER_MINOR),
self.catObj.readUHSDRConfig(UhsdrConfigIndex.VER_BUILD))
def isUhsdrConnected(self):
"""
we test if an UHSDR with extended API is connected by using an identification API call not present
on a FT817 or older UHSDR / mcHF firmwares
returns: True if a suitable TRX is connected, False otherwise
"""
return self.catObj.readUHSDR()
#
def getConfigValueCount(self):
return self.catObj.readUHSDRConfig(UhsdrConfigIndex.NUMBER_OF_ENTRIES)
def getValue(self, index):
# TODO: do some range checking here
return self.catObj.readUHSDRConfig(index)
def setValue(self, index, value):
# TODO: do some range checking here
retval = False
if self.catObj.writeUHSDRConfig(index, value):
retval = value == self.getValue(index)
return retval
def configToJson(self):
"""
read the configuration from TRX into a data dictionary
returns tuple with boolean success state and read data
right now the returned JSON structure is quite simple
we store the version number as list of 3 integers under the 'version' key
we store the date and time of backup as UTC under the 'when' key
we store each configuration value as addr/value pair under the 'eeprom' key
"""
from datetime import datetime
retval = False
valList = []
self.data = {}
self.data['version'] = self.getVersion()
self.data['when'] = str(datetime.utcnow())
self.data['eeprom'] = []
numberOfValues = self.getConfigValueCount()
for index in range(numberOfValues):
val = self.getValue(index)
valList.append(val)
self.data['eeprom'].append({ 'addr' : index , 'value' : val })
retval = all(val is not False for val in valList) or len(valList) != 0
return retval,self.data
def jsonToConfig(self,data):
"""
write the configuration in passed data dictionary to TRX
returns tuple with boolean success state and human readable return msg
data dictionary must conform to format generated by configToJson()
"""
retval = True
retmsg = "OK"
if data['when'] != None and len(data['version']) == 3 and len(data['eeprom']) == data['eeprom'][UhsdrConfigIndex.NUMBER_OF_ENTRIES]['value']:
numberOfValues = data['eeprom'][UhsdrConfigIndex.NUMBER_OF_ENTRIES]['value']
# we do not restore index 0 as it contains EEPROM type. This is never changed during configuration backup, too dangerous
for index in range(numberOfValues):
addr = data['eeprom'][index]['addr']
value = data['eeprom'][index]['value']
if addr != 0:
if self.setValue(addr,value) == False:
retmsg = "Restoring value {} at addr {} failed".format(value,addr)
retval = False
break
else:
retmsg = "Configuration data failed consistency check"
retval = False
return retval,retmsg
@@ -0,0 +1,148 @@
"""
This module contains experimental code for using the (extend) UHSDR API
and contains a small commandline client for backup and restore of
the UHSDR configuration data from/to a TRX
This program is free software: you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation, either version 3 of the License, or (at your option) any later
version.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
this program. If not, see <http://www.gnu.org/licenses/>.
"""
from __future__ import print_function
__author__ = "DB4PLE"
__copyright__ = "Copyright 2018, UHSDR project"
__credits__ = ["DB4PLE"]
__license__ = "GPLv3"
__status__ = "Prototype"
import sys
import json
import os
import uhsdr
def listUHSDRSerial():
"""
list serial ports. For new pySerial version we return only the real UHSDR device, otherwise just a list of serial port objects
returns tupel (Boolean,List) True if UHSDR filter was active, False otherwise, second element is actual list of info for com ports.
"""
import serial
import serial.tools.list_ports;
from distutils.version import StrictVersion
# UHSDR uses USB VID:PID=0483:5732
retval = False,[]
if StrictVersion(serial.VERSION) >= StrictVersion("3.0"):
retval = True,[ comport.device for comport in serial.tools.list_ports.comports() if comport.vid == 0x0483 and comport.pid == 0x5732 ]
else:
uhsdr.eprint("pySerial version ",serial.VERSION," is too old for detecting UHSDR device, using full serial port list")
retval = False,[ vars(comport) for comport in serial.tools.list_ports.comports()]
return retval
def backupRestoreApp():
import serial
"""
Simple command line tool to backup/restore the configuration from/to TRX
"""
if False and "idlelib" in sys.modules:
uhsdr.eprint("Running in IDLE GUI, please set parameters directly in script, search for #change ")
#change parameters here
sys.argv = [sys.argv[0],'--port','15','-b']
#no more changes below
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-b","--backup", help="backup the UHSDR TRX configuration to file", action="store_true")
parser.add_argument("-r","--restore", help="restore the UHSDR TRX configuration from file", action="store_true")
parser.add_argument("-p","--port", help="UHSDR serial port either by number (COM<num> in Windows, Linux /dev/ttyACM<num>) or full device name ( e.g. '/dev/cu.modemABCD', all operating systems )", type=str, default="undefined serial port name")
parser.add_argument("-f","--file", help="filename to backup to/restore from, if not defined 'uhsdr_config.json' is used", type=str, default="uhsdr_config.json")
args = parser.parse_args()
print("This program backups and restores the configuration of UHSDR TRX via USB")
if args.port == -1:
print("Use -h to get more information")
print("")
isFiltered, uhsdrDeviceList = listUHSDRSerial()
if uhsdrDeviceList == []:
uhsdr.eprint("No suitable serial port detected, make sure to connect UHSDR TRX")
else:
if isFiltered:
uhsdr.eprint("List of detected UHSDR TRX")
else:
uhsdr.eprint("List of detected serial ports:")
uhsdr.eprint(uhsdrDeviceList)
uhsdr.eprint("Please specify valid UHSDR TRX serial port number(!) with -p / --port")
else:
try:
int(args.port);
comPort= ("COM" if os.name == "nt" else "/dev/ttyACM") + str(args.port)
except:
comPort = args.port
uhsdr.eprint("Opening serial port ",comPort,":")
try:
mySer = serial.Serial(comPort, 38400, timeout=0.500, parity=serial.PARITY_NONE)
except:
uhsdr.eprint("... failed")
raise
uhsdr.eprint("... okay")
myCom = uhsdr.catSerial(mySer)
myCAT = uhsdr.catCommands(myCom)
myUHSDR = uhsdr.UhsdrConfig(myCAT)
uhsdr.eprint("Detecting if UHSDR is connected: ")
if myUHSDR.isUhsdrConnected():
uhsdr.eprint("... yes")
version = myUHSDR.getVersion()
print("Detected UHSDR Firmware Version", version)
if args.backup:
uhsdr.eprint("Reading configuration from UHSDR TRX:")
ok,data = myUHSDR.configToJson()
if ok:
uhsdr.eprint("... success. Now saving in file:")
with open(args.file, 'w') as outfile:
try:
json.dump(data, outfile, indent=4)
uhsdr.eprint("... saved to " + args.file + " file")
except:
uhsdr.eprint("... failed to save to " + args.file + " file")
raise
outfile.close()
else:
uhsdr.eprint("... could not read data sucessfully")
elif args.restore:
with open(args.file, 'r') as infile:
data = json.load(infile)
uhsdr.eprint("Sending configuration to UHSDR TRX:")
ok,msg = myUHSDR.jsonToConfig(data)
if ok:
uhsdr.eprint("... restored all data from " + args.file + " file")
print("ACTIVATING RESTORED CONFIGURATION: Switch off TRX WITHOUT saving configuration -> Press Band+ and Power buttons")
print("")
print("ATTENTION: In case of an accidential restore:")
print("Press Power button to save running configuration, overwriting the restored values in configuration memory.")
else:
uhsdr.eprint("... problem occured: ",msg)
infile.close()
else:
uhsdr.eprint("... could not find a connected UHSDR with extended CAT commands (required)")
mySer.close()
if __name__ == "__main__":
backupRestoreApp()
+152
View File
@@ -0,0 +1,152 @@
# script for stm32h7x family
#
# stm32h7 devices support both JTAG and SWD transports.
#
source [find target/swj-dp.tcl]
source [find mem_helper.tcl]
if { [info exists CHIPNAME] } {
set _CHIPNAME $CHIPNAME
} else {
set _CHIPNAME stm32h7x
}
set _ENDIAN little
# Work-area is a space in RAM used for flash programming
# By default use 64kB
if { [info exists WORKAREASIZE] } {
set _WORKAREASIZE $WORKAREASIZE
} else {
set _WORKAREASIZE 0x10000
}
#jtag scan chain
if { [info exists CPUTAPID] } {
set _CPUTAPID $CPUTAPID
} else {
if { [using_jtag] } {
set _CPUTAPID 0x6ba00477
} {
set _CPUTAPID 0x6ba02477
}
}
swj_newdap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID
if { [info exists BSTAPID] } {
set _BSTAPID1 $BSTAPID
} else {
# See STM Document RM0399
# Section 40.6.1
# STM32H74xxI
set _BSTAPID1 0x06450041
}
if {[using_jtag]} {
swj_newdap $_CHIPNAME bs -irlen 5 -expected-id $_BSTAPID1
}
set _TARGETNAME $_CHIPNAME.cpu
target create $_TARGETNAME cortex_m -endian $_ENDIAN -chain-position $_TARGETNAME
$_TARGETNAME configure -work-area-phys 0x20000000 -work-area-size $_WORKAREASIZE -work-area-backup 0
set _FLASHNAME $_CHIPNAME.flash
flash bank $_FLASHNAME stm32h7x 0x08000000 0 0 0 $_TARGETNAME
# check for second flash bank
if { [regexp -nocase {stm32h74..i..|stm32h75..i..} $_CHIPNAME] } {
# STM32H7xxxI 2Mo have a dual bank flash.
# Add the second flash bank.
set _FLASHNAME $_CHIPNAME.flash1
flash bank $_FLASHNAME stm32h7x 0x08100000 0 0 0 $_TARGETNAME
}
# Clock after reset is HSI at 64 MHz, no need of PLL
if { [info exists CLOCK_FREQ] } {
set _CLOCK_FREQ $CLOCK_FREQ
} else {
set _CLOCK_FREQ 1800
}
adapter_khz 1800
adapter_nsrst_delay 100
if {[using_jtag]} {
jtag_ntrst_delay 100
}
if {![using_hla]} {
# if srst is not fitted use SYSRESETREQ to
# perform a soft reset
cortex_m reset_config sysresetreq
}
$_TARGETNAME configure -event trace-config {
# Set TRACE_CLKEN; TRACE_MODE is set to async; when using sync
# change this value accordingly to configure trace pins
# assignment
mmw 0x5C001004 0x00100000 0
}
$_TARGETNAME configure -event reset-init {
global ENABLE_LOW_POWER
global STOP_WATCHDOG
global _CLOCK_FREQ
# Not done in target examine-end because device can be under reset and we get comm errors
# Enable D3 and D1 DBG clocks
# DBGMCU_CR |= DBG_CKEN_D3 | DBG_CKEN_D1
mmw 0x5C001004 0x00600000 0
if { [expr ($ENABLE_LOW_POWER == 1)] } {
# Enable debug during low power modes (uses more power)
# DBGMCU_CR |= DBG_STANDBY | DBG_STOP | DBG_SLEEP in D3, D2 & D1 Domains
mmw 0x5C001004 0x000001BF 0
}
if { [expr ($ENABLE_LOW_POWER == 0)] } {
# Disable debug during low power modes
# DBGMCU_CR |= ~(DBG_STANDBY | DBG_STOP | DBG_SLEEP)
mmw 0x5C001004 0 0x000001BF
}
if { [expr ($STOP_WATCHDOG == 1)] } {
# Stop watchdog counters during halt
# DBGMCU_D1APB1_FZ |= DBG_WWDG1_STOP
mmw 0x5C001034 0x00000040 0
# DBGMCU_D2APB1_FZ |= DBG_WWDG2_STOP
mmw 0x5C00103C 0x00000800 0
# DBGMCU_D3APB1_FZ |= DBG_WDGLSD2_STOP | DBG_WDGLSD1_STOP
mmw 0x5C001054 0x000C0000 0
}
if { [expr ($STOP_WATCHDOG == 0)] } {
# Don't stop watchdog counters during halt
# DBGMCU_D1APB1_FZ |= ~DBG_WWDG1_STOP
mmw 0x5C001034 0 0x00000040
# DBGMCU_D2APB1_FZ |= ~DBG_WWDG2_STOP
mmw 0x5C00103C 0 0x00000800
# DBGMCU_D3APB1_FZ |= ~(DBG_WDGLSD2_STOP | DBG_WDGLSD1_STOP)
mmw 0x5C001054 0 0x000C0000
}
if { [expr ($ENABLE_LOW_POWER == 0)] && [expr ($STOP_WATCHDOG == 0)] } {
# Disable D3 and D1 DBG clocks
# DBGMCU_CR |= ~(DBG_CKEN_D3 | DBG_CKEN_D1)
mmw 0x5C001004 0 0x00600000
}
# Clock after reset is HSI at 64 MHz, no need of PLL
adapter_khz $_CLOCK_FREQ
}
$_TARGETNAME configure -event gdb-attach {
global CONNECT_UNDER_RESET
# Needed to be able to use the connect_assert_srst in reset_config
# otherwise, can't read device flash size register
if { [expr ($CONNECT_UNDER_RESET == 1)] } {
reset init
}
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+14
View File
@@ -0,0 +1,14 @@
cd ../drivers/freedv
SRCFILES=`grep -L "/* THIS IS A G" *.c *.h`
CODEC2_PATH=../../../../codec2-dev/src
for i in $SRCFILES
do
XI="$CODEC2_PATH/$i"
if [ -f "$XI" ]
then
cp "$i" "$XI"
else
echo $i was not found at $XI
fi
done
Binary file not shown.

After

Width:  |  Height:  |  Size: 484 KiB

@@ -0,0 +1 @@
2019-07-15 15:42:15.426467743 +0200
@@ -0,0 +1,44 @@
#!/usr/bin/env bash
# 2017-01-01 HB9ocq - removed WA (escape commas)
# automated build only by DF8OE
if [ "$1" == "auto" ] && [ ! -f ../DF8OE ]; then
exit 0
fi
if [ "$1" == "test" ]; then
mkdir ../handbook-test 2>/dev/null
cp -v uhsdr-logo.png support/ui/menu > /dev/zero
(cd support/ui/menu \
&& python2 ./ui_menu_structure_c2py.py | python - \
&& python2 ./ui_menu_structure_graph.py > ../../../../handbook-test/ui_menu_structure_graph.gv \
&& dot -Tsvg -o../../../../handbook-test/ui_menu_structure_graph.svg ../../../../handbook-test/ui_menu_structure_graph.gv \
&& dot -Tpng -o../../../../handbook-test/ui_menu_structure_graph.png ../../../../handbook-test/ui_menu_structure_graph.gv \
)
(cd support/ui/menu \
&& python2 ./ui_menu_structure_mdtable.py > ../../../../handbook-test/ui_menu_structure_mdtable.md \
)
echo "menu-handbook-test build completed."
exit 0
fi
if [ "$(cat support/ui/menu/menu-handbook-build.timestamp 2>/dev/null)" == "$(stat -c%y drivers/ui/menu/ui_menu_structure.c)" ]; then
echo "menu-handbook already up2date"
else
# extract UI Menu Descriptor data from source code and generate graph + table for handbook
echo "building menu-handbook..."
cp -v uhsdr-logo.png support/ui/menu > /dev/zero
(cd support/ui/menu \
&& python2 ./ui_menu_structure_c2py.py | python - \
&& python2 ./ui_menu_structure_graph.py > ui_menu_structure_graph.gv \
&& dot -Tsvg -oui_menu_structure_graph.svg ui_menu_structure_graph.gv \
&& dot -Tpng -oui_menu_structure_graph.png ui_menu_structure_graph.gv \
)
(cd support/ui/menu \
&& python2 ./ui_menu_structure_mdtable.py > ui_menu_structure_mdtable.md \
)
(echo $(stat -c%y drivers/ui/menu/ui_menu_structure.c) > support/ui/menu/menu-handbook-build.timestamp)
echo "menu-handbook build completed."
fi
Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

@@ -0,0 +1,132 @@
#!/usr/bin/python
"""
2016-12-30 HB9ocq - extract uhsdr LCD-menu definition data from C-cource
and transform to Python, showing on stdout
WARNING: THIS BASES HEAVILY UPON (UN-)DISCIPLINE IN C SYNTAX ! ! !
WARNING: ANY CHANGE OF DEFINITIONS AND DECLARATIONS IN $INPUT_C_SRC
POTENTIALLY BREAKS THIS TRANSFORMATION ! ! !
LAST WARNING: YOU HAVE BEEN WARNED ! ! !
2017-01-01 HB9ocq - replacement for prototype shell script (ui_menu_structure_c2py.sh)
for improved parsing accuracy (avoids issues with commas and
all uppercase text in UiMenuDesc(...))
2017-01-06 HB9ocq - following change in definition of MenuDescriptor
AFTERLAST WARNING: BINDS EVEN TIGHTER TO WRITING DISCIPLINE IN C SYNTAX ! ! !
"""
import subprocess
# this points from HERE to the 'mchf-eclipse' directory of our project
MCHF_BASEDIR = r"../../../"
MCHF_VERSIONFILE = MCHF_BASEDIR + r'src/uhsdr_version.h'
# the ONLY C-source we do read AND understand
INPUT_C_SRC = MCHF_BASEDIR + r"drivers/ui/menu/ui_menu_structure.c"
# reading version from uhsdr_version.h
MAJ = subprocess.check_output('cat ' + MCHF_VERSIONFILE + ' | cut -d " " -f 2 | grep "TRX4M" | egrep -e "^[^#]" | grep "MAJOR" | cut -d "\\"" -f 2 | tr -d $"\n"', shell = True)
MIN = subprocess.check_output('cat ' + MCHF_VERSIONFILE + ' | cut -d " " -f 2 | grep "TRX4M" | egrep -e "^[^#]" | grep "MINOR" | cut -d "\\"" -f 2 | tr -d $"\n"', shell = True)
REL = subprocess.check_output('cat ' + MCHF_VERSIONFILE + ' | cut -d " " -f 2 | grep "TRX4M" | egrep -e "^[^#]" | grep "RELEASE" | cut -d "\\"" -f 2 | tr -d $"\n"', shell = True)
BUILD_ID = MAJ + "." + MIN + "." + REL
# reading version from mchf.bin
#BUILD_ID = subprocess.check_output('grep -aPo "(?<=fwv-)[^fwt]+" ../../../mchf.bin | cut -d "" -f 1 | tr -d $"\n"', shell = True)
#print("##DBG## BUILD_ID = '{}'".format(BUILD_ID))
from datetime import datetime
TS_NOW = datetime.now().replace(microsecond=0).isoformat()
#-----------------------------------------------------
# read in the whole C source
menu_csrc = []
with open(INPUT_C_SRC, 'r') as f:
menu_csrc = f.readlines()
MENU_DESCRIPTOR = []
"""
MENU_DESCRIPTOR is the datastructure we're gonna build
MENU_DESCRIPTOR is a list of dicts with entries "MENU_ID" "ME_KIND" "NR" "LABEL" "DESC"
e.g. [ ... { 'MENU_ID': "TOP",
'ME_KIND': "GROUP",
'NR': "MENU_BASE",
'LABEL': "Standard Menu",
'DESC': ":soon:" },
...]
"""
import re
MENULN_REO = re.compile( # pattern for lines..
r'^\s+{\s*' # ..starting with whitespace + a left brace
+ r'(?P<MENU_ID>MENU_[\w]+)' # ..an identifier 'MENU_xxx', we call it MENU_ID
+ r'[,\s]+'
+ r'(?P<ME_KIND>MENU_[\w]+)' # ..a 2nd id 'MENU_xxx', we call it ME_KIND
+ r'[,\s]+'
+ r'(?P<NR>[\w]+)' # ..a 3rd rather long id 'yy...zz', we call it NR
+ r'[,\s]+'
+ r'.*[^,]' # ..show conditional entries, too
# + r'NULL' # .. this would show only non-conditional entries
+ r'[,\s]+'
+ r'"(?P<LABEL>[^"]*)"' # ..n chars in quotes, we call this LABEL
+ r'[,\s]+'
+ r'UiMenuDesc\("(?P<DESC>[^"]*)"\s*\)' # ..a UiMenuDesc in quotes, we call it DESC
+ r'.*}.*$' # ..unintresting rest, incl. right brace
)
# each line of the C source...
for ln in menu_csrc:
# ...gets RE-searched for the interesting data,
m = MENULN_REO.search(ln)
if m: # ...as things match: keep the ready-cooked dict
MENU_DESCRIPTOR.append(m.groupdict())
if [] == MENU_DESCRIPTOR:
print('ERROR: MENU_DESCRIPTOR is empty! (no lines defining UiMenu entries found in "{}".'.format(INPUT_C_SRC))
exit(-1)
#-----------------------------------------------------
OUTPUT = """\
#!/usr/bin/env python
#
# WARNING: generated data! DO NOT EDIT MANUALLY ! ! !
#
# generated at {TS_NOW} by "{__file__}"
#
# out of {INPUT_C_SRC} ({BUILD_ID})
#
BUILD_ID = "{BUILD_ID}"
MENU_DESCRIPTOR = {}
#EOFILE
"""
from pprint import pformat
# are we running as a program?
if '__main__' == __name__:
print(OUTPUT.format(pformat(MENU_DESCRIPTOR), **globals()))
exit(0)
#EOFILE
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 MiB

@@ -0,0 +1,118 @@
#!/usr/bin/python
"""
2017-01-01 HB9ocq - support program to document the menu structure of uhsdr amateur radio firmware
2017-01-06 HB9ocq - following change in definition of MenuDescriptor
relies upon module ui_menu_structure_c2py.py in the same directory
"""
from ui_menu_structure_c2py import MENU_DESCRIPTOR, BUILD_ID
# MENU_DESCRIPTOR is a list of dicts with entries "MENU_ID" "ME_KIND" "NR" "LABEL"
# e.g. [ ... { 'MENU_ID': "TOP",
# 'ME_KIND': "GROUP",
# 'NR': "MENU_BASE",
# 'LABEL': "Standard Menu",
# 'DESC': ":soon:" },
# ...]
from datetime import datetime
TS_NOW = datetime.now().replace(microsecond=0).isoformat()
#-----------------------------------------------------
GEN_SENTENCE = r'generated at {TS_NOW} by "{__file__}"'.format(**globals())
OUTPUT = ""
# preface/header
OUTPUT += r"""
#
# WARNING: generated data! DO NOT EDIT MANUALLY ! ! !
#
# {GEN_SENTENCE}
#
# mcHF SDR TRX v{BUILD_ID} - Menu Structure Diagram in DOT-language
#
# (see <http://www.graphviz.org/content/dot-language> )
#
digraph mcHF_menus {{
graph [ fontsize = 14,
label = "\nmcHF v{BUILD_ID} - Menus Overview\n{GS2}",
];
rankdir=LR
nodesep=.05
# - - - -
""".format(GS2=GEN_SENTENCE.replace('"', '\\"'), **globals())
# artificial node for MENU_TOP
OUTPUT += """
"MENU_TOP" [
shape = none
image = "uhsdr-logo.png"
label = ""
];
"""
# body - nodes
for md in MENU_DESCRIPTOR:
if((0 != md['NR']) and ('MENU_STOP' != md['ME_KIND'])):
# declare a node for id
OUTPUT += """
"{NR}" [
label = "{NR} | {LABEL}"
shape = record
];
""".format(**md).replace('<', '\<').replace('>', '\>')
# body - edges
for mId in set([md['MENU_ID'] for md in MENU_DESCRIPTOR]):
# start subgraph for every "parent"
OUTPUT += """
# - - - -
subgraph "{0}" {{
label = "{0} beef.0f.dead.e5e1"
""".format(mId)
for md in MENU_DESCRIPTOR:
if((0 != md['NR']) and ('MENU_STOP' != md['ME_KIND']) and (mId == md['MENU_ID'])):
# ...add an edge
OUTPUT += """
{MENU_ID} -> {NR}
""".format(**md)
OUTPUT += """
}} ## END subgraph {MENU_ID}
""".format(**md)
# footer
OUTPUT += """
# - - - -
}
#EOFILE
"""
# are we running as a program?
if '__main__' == __name__:
print(OUTPUT)
exit(0)
#EOFILE
File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 288 KiB

@@ -0,0 +1,327 @@
[//]: # ( )
[//]: # ( WARNING: generated data! DO NOT EDIT MANUALLY ! ! ! )
[//]: # ( )
[//]: # ( generated at 2019-07-15T15:44:19 by "./ui_menu_structure_mdtable.py" )
[//]: # ( )
[//]: # ( mcHF SDR TRX v.. - Menu Structure Diagram as MarkDown-Table )
[//]: # ( )
[//]: # ( see <https://help.github.com/categories/writing-on-github/> )
[//]: # ( )
# uhsdr firmware v.. - UI Menu Overview
generated at 2019-07-15T15:44:19 by "./ui_menu_structure_mdtable.py"
## Standard Menu (`MENU_BASE`)
| LABEL ( NR) | DESCRIPTION |
| --------------------------------------------------------------------------- | ---------------------------------------------- |
| **LSB/USB Auto Select** ( MENU_SSB_AUTO_MODE_SELECT) | If enabled, the appropriate sideband mode for SSB and FreeDV is chosen as default for each band by its frequency. |
| **Digital Modes** ( MENU_DIGI_DISABLE) | Disable appearance of digital modes when pressing Mode button |
| **CW Mode** ( MENU_CW_DISABLE) | Disable appearance of CW mode when pressing Mode button |
| **AM Mode** ( MENU_AM_DISABLE) | Disable appearance of AM mode when pressing Mode button |
| **SyncAM Mode** ( MENU_DEMOD_SAM) | Disable appearance of SyncAM modes when pressing Mode button |
| **SAM PLL locking range** ( MENU_SAM_PLL_LOCKING_RANGE) | SAM PLL Locking Range in Hz: this determines how far up and down from the carrier frequency of an AM station we can offtune the receiver, so that the PLL will still lock to the carrier. |
| **SAM PLL step response** ( MENU_SAM_PLL_STEP_RESPONSE) | Step response = Zeta = damping factor of the SAM PLL. Sets the stability and transient response of the PLL. Larger values give faster lock even if you are offtune, but PLL is also more sensitive. |
| **SAM PLL bandwidth in Hz** ( MENU_SAM_PLL_BANDWIDTH) | Bandwidth of the PLL loop = OmegaN in Hz: smaller bandwidth = more stable lock. FAST LOCK SAM PLL - set Step response and PLL bandwidth to large values [eg. 80 / 350]; DX (SLOW & STABLE) SAM PLL - set Step response and PLL bandwidth to small values [eg. 30 / 100]. |
| **SAM Fade Leveler** ( MENU_SAM_FADE_LEVELER) | Fade leveler (in AM/SAM mode) ON/OFF. Fade leveler is helpful in situations with very fast QSB of the carrier ´flutter´. It is designed to remove the rapidly changing carrier and replace it with a more stable carrier. If there is no QSB on the carrier, there is no change. |
| **FM Mode** ( MENU_FM_MODE_ENABLE) | Disable appearance of FM mode when pressing Mode button |
| **FM Sub Tone Gen** ( MENU_FM_GEN_SUBAUDIBLE_TONE) | Enable generation of CTCSS tones during FM transmissions. |
| **FM Sub Tone Det** ( MENU_FM_DET_SUBAUDIBLE_TONE) | Enable detection of CTCSS tones during FM receive. RX is muted unless tone is detected. |
| **FM Tone Burst** ( MENU_FM_TONE_BURST_MODE) | Enabled sending of short tone at beginning of each FM transmission. Used to open repeaters. Available frequencies are 1750 Hz and 2135 Hz. |
| **FM Deviation** ( MENU_FM_DEV_MODE) | Select between normal and narrow deviation (5 and 2.5kHz) for FM RX/TX |
| **AGC WDSP Mode** ( MENU_AGC_WDSP_MODE) | Choose a bundle of preset AGC parameters for the WDSP AGC: FAST / MED / SLOW / LONG / very LONG or switch OFF the AGC. |
| **AGC WDSP Slope** ( MENU_AGC_WDSP_SLOPE) | Slope of the AGC is the difference between the loudest signal and the quietest signal after the AGC action has taken place. Given in dB. |
| **AGC WDSP Decay** ( MENU_AGC_WDSP_TAU_DECAY) | Time constant for the AGC decay (speed of recovery of the AGC gain) in milliseconds. |
| **AGC WDSP Threshold** ( MENU_AGC_WDSP_THRESH) | ´Threshold´ = ´Knee´ of the AGC: input signal level from which on the AGC action takes place. AGC threshold should be placed/adjusted just above the band noise for every particular RX situation to allow for optimal AGC action. The blue AGC box indicates when AGC action takes place and helps in adjusting this threshold. |
| **AGC WDSP Hang enable** ( MENU_AGC_WDSP_HANG_ENABLE) | Enable/Disable Hang AGC function: If enabled: after the signal has decreased, the gain of the AGC is held constant for a certain time period (the hang time) in order to allow for speech pauses without disturbing noise because of fast acting AGC. |
| **AGC WDSP Hang time** ( MENU_AGC_WDSP_HANG_TIME) | Hang AGC: hang time is the time period over which the AGC gain is held constant when in AGC Hang mode. After this period the gain is increased fast. |
| **AGC WDSP Hang threshold** ( MENU_AGC_WDSP_HANG_THRESH) | ´Threshold´ for the Hang AGC: Hang AGC is useful for medium to strong signals. The Hang threshold determines the signal strength a signal has to exceed for Hang AGC to take place. |
| **AGC WDSP Hang Decay** ( MENU_AGC_WDSP_TAU_HANG_DECAY) | Time constant for the Hang AGC decay (speed of recovery of the AGC gain after hang time has expired) in milliseconds. |
| **RX Codec Gain** ( MENU_CODEC_GAIN_MODE) | Sets the Codec IQ signal gain. Higher values represent higher gain. If set to AUTO the mcHF controls the gain so that the best dynamic range is used. |
| **RX/TX Freq Xlate** ( MENU_RX_FREQ_CONV) | Controls offset of the receiver IQ signal base frequency from the dial frequency. Use of +/-12Khz is recommended. Switching it to OFF is not recommended as it disables certain features. |
| **Mic Input Gain** ( MENU_MIC_GAIN) | Microphone gain. Also changeable via Encoder 3 if Microphone is selected as Input |
| **Line Input Gain** ( MENU_LINE_GAIN) | LineIn gain. Also changeable via Encoder 3 if LineIn Left (L>L) or LineIn Right (L>R) is selected as Input |
| **TX Audio Compress** ( MENU_TX_COMPRESSION_LEVEL) | Control the TX audio compressor. Higher values give more compression. Set to CUSTOM for user defined compression parameters. See below. Also changeable via Encoder 1 (CMP). |
| **TX ALC Release Time** ( MENU_ALC_RELEASE) | If Audio Compressor Config is set to CUSTOM, sets the value of the Audio Compressor Release time. Otherwise shows predefined value of selected compression level. |
| **TX ALC Input Gain** ( MENU_ALC_POSTFILT_GAIN) | If Audio Compressor Config is set to CUSTOM, sets the value of the ALC Input Gain. Otherwise shows predefined value of selected compression level. |
| **RX NB Setting** ( MENU_NOISE_BLANKER_SETTING) | Set the Noise Blanker strength. Higher values mean more agressive blanking. Also changeable using Encoder 2 if Noise Blanker is active. |
| **DSP NR Strength** ( MENU_DSP_NR_STRENGTH) | Set the Noise Reduction Strength. Higher values mean more agressive noise reduction but also higher CPU load. Use with extreme care. Also changeable using Encoder 2 if DSP is active. |
| **TCXO Off/On/Stop** ( MENU_TCXO_MODE) | The software TCXO can be turned ON (set frequency is adjusted so that generated frequency matches the wanted frequency); OFF (no correction or measurement done); or STOP (no correction but measurement). |
| **TCXO Temp. (C/F)** ( MENU_TCXO_C_F) | Show the measure TCXO temperature in Celsius or Fahrenheit. |
| **Backup Config** ( MENU_BACKUP_CONFIG) | Backup your I2C Configuration to flash. If you don't have suitable I2C EEPROM installed this function is not available. |
| **Low Voltage Shutdown** ( MENU_LOW_POWER_SHUTDOWN) | Shutdown automatically when supply voltage is below threshold for 60 seconds (only in RX). |
| **Restore Config** ( MENU_RESTORE_CONFIG) | Restore your I2C Configuration from flash. If you don't have suitable I2C EEPROM installed this function is not available. |
## Configuration Menu (`MENU_CONF`)
| LABEL ( NR) | DESCRIPTION |
| --------------------------------------------------------------------------- | ---------------------------------------------- |
| **Save Out-Of-Band Freq.** ( CONFIG_FREQ_MEM_LIMIT_RELAX) | Select ON to save and restore frequencies which do not fit into the band during configuration saving (Power-Off or long press on Menu button) |
| **TX on Out-Of-Band Freq.** ( CONFIG_TX_OUT_ENABLE) | Permit low power transmission even if the frequency is out of the official ham bands. DO NOT USE WITH CONNECTED ANTENNA! Use a dummy load! |
| **Transmit Disable** ( CONFIG_TX_DISABLE) | Disable all transmissions unconditionally. In CW you will be able to hear a sidetone but no transmission is made. |
| **Menu SW on TX disable** ( CONFIG_AUDIO_MAIN_SCREEN_MENU_SWITCH) | Control if the screen automatically adapts Encoder value focus when switching between RX and TX. |
| **TX Mute LineOut** ( CONFIG_MUTE_LINE_OUT_TX) | During transmission with frequency translation off, line out will carry one of the two signal channels. Good for CW but not very useful otherwise. You may switch this signal off here. |
| **TX Initial Muting Time** ( CONFIG_TXRX_SWITCH_AUDIO_MUTE) | When switching from RX to TX the audio and HF output will be muted for roughly VALUE ms. There are now several minimum times for muting defined in the firmware:<br/><br/> Input from Mic: 40ms<br/> Input from Line In: 40ms<br/> Digital Inputs (CW, USB): less than 1ms.<br/><br/> If the user defined 'TX Initial Muting Time' is set to more than zero, the maximum of both fixed input time and user defined time is used. Your microphone PTT switch is a potential source of noise if Mic is input! You need to increase the delay or change switches! |
| **Max Volume** ( CONFIG_MAX_VOLUME) | Set maximum speaker&headphone volume. |
| **Lineout Gain** ( CONFIG_LINEOUT_GAIN) | Set the constant gain level for the analog lineout jack |
| **Key Beep Frequency** ( CONFIG_BEEP_FREQ) | Set key beep frequency in Hz. |
| **Key Beep Volume** ( CONFIG_BEEP_VOLUME) | Set key beep volume. |
| **CAT Running In Sandbox** ( CONFIG_CAT_IN_SANDBOX) | If On, frequency Changes made via CAT will not automatically switch bands and affect the manually selected frequencies. |
| **CAT-DIQ-FREQ-XLAT** ( CONFIG_CAT_XLAT) | Select which frequency is reported via CAT Interface to the connected PC in Digital IQ Mode. If ON, it reports the displayed frequency. If OFF, it reports the center frequency, which is more useful with SDR programs. |
| **PTT via virtual RTS** ( CONFIG_CAT_PTT_RTS) | The virtual serial port signal RTS can be used to switch to TX. Use with care, many CAT-able programs also set RTS to aktiv and make the TRX go to TX mode. |
| **XVTR Offs/Mult** ( CONFIG_XVTR_OFFSET_MULT) | When connecting to a transverter, set this to 1 and set the XVERTER Offset to the LO Frequency of it. The mcHF frequency is multiplied by this factor before the offset is added, so anything but 1 will result in each Hz in the mcHF being displayed as 2 to 10 Hz change on display. |
| **XVTR Offset** ( CONFIG_XVTR_FREQUENCY_OFFSET) | When transverter mode is enabled, this value is added to the mcHF frequency after being multiplied with the XVTR Offs/Mult. Use Step+ to set a good step width, much less turns with the dial knob if it is set to 1Mhz |
| **Step Button Swap** ( CONFIG_STEP_SIZE_BUTTON_SWAP) | If ON, Step- behaves like Step+ and vice versa. |
| **Band+/- Button Swap** ( CONFIG_BAND_BUTTON_SWAP) | If ON, Band- behaves like Band+ and vice versa. |
| **RTC Start** ( CONFIG_RTC_START) | Start using the RTC and use the modified button layout. Will reboot your mcHF. Please use only if you completed the RTC mod otherwise you will need to disconnect battery and power and reboot to get a working mcHF. This menu is only visible if Backup RAM (VBat) was detected. |
| **RTC Hour** ( CONFIG_RTC_HOUR) | Sets the Real Time Clock Hour. Needs HW Modifications. |
| **RTC Min** ( CONFIG_RTC_MIN) | Sets the Real Time Clock Minutes. Needs HW Modifications. |
| **RTC Seconds** ( CONFIG_RTC_SEC) | Sets the Real Time Clock Seconds. Needs HW Modifications. |
| **RTC Reset** ( CONFIG_RTC_RESET) | Full Reset of STM32 RTC. Can be used to simulate first start with RTC mod completed |
| **RTC Calibration** ( CONFIG_RTC_CALIB) | Sets the Real Time Clock Frequency calibration value in ppm. 1s/day deviation equals 11.57 ppm deviation |
| **Voltmeter Cal.** ( CONFIG_VOLTMETER_CALIBRATION) | Adjusts the displayed value of the voltmeter. |
| **Low Voltage Threshold** ( CONFIG_LOW_POWER_THRESHOLD) | Voltage threshold for voltage warning colors and auto shutdown. |
| **Freq. Calibrate** ( CONFIG_FREQUENCY_CALIBRATE) | Adjust the frequency correction of the local oscillator. Measure TX frequency and adjust until both match. Or use receive a know reference signal and zero-beat it and then adjust. More information in the Wiki. |
| **Pwr. Display mW** ( CONFIG_FWD_REV_PWR_DISP) | Shows the forward and reverse power values in mW, can be used to calibrate the SWR meter. |
| **Pwr. Det. Null** ( CONFIG_RF_FWD_PWR_NULL) | Set the forward and reverse power sensors ADC zero power offset. This setting is enabled ONLY when Disp. Pwr (mW), is enabled. Needs SWR meter hardware modification to work. See Wiki Adjustment and Calibration. |
| **SWR/PWR Meter FWD/REV Swap** ( CONFIG_FWD_REV_SENSE_SWAP) | Exchange the assignment of the Power/SWR FWD and REV measurement ADC. Use if your power meter does not show anything during TX. |
| **I2C1 Bus Speed** ( CONFIG_I2C1_SPEED) | Sets speed of the I2C1 bus (Si570 oscillator and MCP9801 temperature sensor). Higher speeds provide quicker RX/TX switching but may also cause tuning issues (red digits). Be careful with speeds above 200 kHz. |
| **I2C2 Bus Speed** ( CONFIG_I2C2_SPEED) | Sets speed of the I2C2 bus (Audio Codec and I2C EEPROM). Higher speeds provide quicker RX/TX switching, configuration save and power off. Speeds above 200 kHz are not recommended for unmodified mcHF. Many modified mcHF seem to run with 300kHz without problems. |
| **RX IQ Auto Correction** ( CONFIG_IQ_AUTO_CORRECTION) | Receive IQ phase and amplitude imbalance can be automatically adjusted by the mcHF. Switch ON/OFF here. If OFF, it takes the following menu values for compensating the imbalance. The automatic algorithm achieves up to 60dB mirror rejection. See Wiki Adjustments and Calibration. |
| **RX IQ Balance (80m)** ( CONFIG_80M_RX_IQ_GAIN_BAL) | IQ Balance Adjust for all receive if frequency translation is NOT OFF. Requires USB/LSB/CW mode to be changeable.See Wiki Adjustments and Calibration. |
| **RX IQ Phase (80m)** ( CONFIG_80M_RX_IQ_PHASE_BAL) | IQ Phase Adjust for all receive if frequency translation is NOT OFF. Requires USB/LSB/CW mode to be changeable.See Wiki Adjustments and Calibration. |
| **RX IQ Balance (10m)** ( CONFIG_10M_RX_IQ_GAIN_BAL) | IQ Balance Adjust for all receive if frequency translation is NOT OFF. Requires USB/LSB/CW mode to be changeable.See Wiki Adjustments and Calibration. |
| **RX IQ Phase (10m)** ( CONFIG_10M_RX_IQ_PHASE_BAL) | IQ Phase Adjust for all receive if frequency translation is NOT OFF. Requires USB/LSB/CW mode to be changeable. See Wiki Adjustments and Calibration. |
| **TX IQ Balance (80m)** ( CONFIG_80M_TX_IQ_GAIN_BAL) | IQ Phase Adjust for all transmission if frequency translation is NOT OFF. Requires USB or LSB mode to be changeable. See Wiki Adjustments and Calibration. |
| **TX IQ Phase (80m)** ( CONFIG_80M_TX_IQ_PHASE_BAL) | IQ Phase Adjust for all transmission if frequency translation is NOT OFF. Requires USB or LSB mode to be changeable. See Wiki Adjustments and Calibration. |
| **TX IQ Balance (10m)** ( CONFIG_10M_TX_IQ_GAIN_BAL) | IQ Phase Adjust for all transmission if frequency translation is NOT OFF. Requires USB or LSB mode to be changeable. See Wiki Adjustments and Calibration. |
| **TX IQ Phase (10m)** ( CONFIG_10M_TX_IQ_PHASE_BAL) | IQ Phase Adjust for all transmission if frequency translation is NOT OFF. Requires USB or LSB mode to be changeable. See Wiki Adjustments and Calibration. |
| **TX IQ Balance (80m,CW)** ( CONFIG_80M_TX_IQ_GAIN_BAL_TRANS_OFF) | IQ Balance Adjust for CW transmissions (and all transmission if frequency translation is OFF). See Wiki Adjustments and Calibration. |
| **TX IQ Phase (80m,CW)** ( CONFIG_80M_TX_IQ_PHASE_BAL_TRANS_OFF) | IQ Phase Adjust for CW transmissions (and all transmission if frequency translation is OFF).See Wiki Adjustments and Calibration. |
| **TX IQ Balance (10m,CW)** ( CONFIG_10M_TX_IQ_GAIN_BAL_TRANS_OFF) | IQ Balance Adjust for CW transmissions (and all transmission if frequency translation is OFF).See Wiki Adjustments and Calibration. |
| **TX IQ Phase (10m,CW)** ( CONFIG_10M_TX_IQ_PHASE_BAL_TRANS_OFF) | IQ Phase Adjust for CW transmissions (and all transmission if frequency translation is OFF).See Wiki Adjustments and Calibration. |
| **DSP NR BufLen** ( CONFIG_DSP_NR_DECORRELATOR_BUFFER_LENGTH) | DSP LMS noise reduction: length of the audio buffer that is used for simulation of a reference for the LMS algorithm. The longer the buffer, the better the performance, but this buffer length must always be larger than the number of taps in the FIR filter used. Thus, a larger buffer (and larger FIR filter) uses more MCU resources. |
| **DSP NR FIR NumTaps** ( CONFIG_DSP_NR_FFT_NUMTAPS) | DSP LMS noise reduction: Number of taps in the DSP noise reduction FIR filter. The larger the number of taps in the filter, the better the performance, but the slower the performance of the filter and the mcHF. |
| **DSP NR Post-AGC** ( CONFIG_DSP_NR_POST_AGC_SELECT) | DSP LMS noise reduction: Perform the DSP LMS noise reduction BEFORE or AFTER the AGC. NO = before AGC, YES = after AGC. |
| **DSP Notch ConvRate** ( CONFIG_DSP_NOTCH_CONVERGE_RATE) | DSP LMS automatic notch filter: |
| **DSP Notch BufLen** (CONFIG_DSP_NOTCH_DECORRELATOR_BUFFER_LENGTH) | DSP LMS automatic notch filter: length of the audio buffer that is used for simulation of a reference for the LMS algorithm. The longer the buffer, the better -and the slower- the performance, but this buffer length must always be larger than the number of taps in the FIR filter used. Thus, a larger buffer (and larger FIR filter) uses more MCU resources. |
| **DSP Notch FIRNumTap** ( CONFIG_DSP_NOTCH_FFT_NUMTAPS) | DSP LMS automatic notch filter: Number of taps in the DSP automatic notch FIR filter. The larger the number of taps in the filter, the better the performance, but the slower the performance of the filter and the mcHF. |
| **DSP Notch ConvRate** ( CONFIG_DSP_NOTCH_CONVERGE_RATE) | DSP LMS automatic notch filter: |
| **DSP Notch BufLen** (CONFIG_DSP_NOTCH_DECORRELATOR_BUFFER_LENGTH) | DSP LMS automatic notch filter: length of the audio buffer that is used for simulation of a reference for the LMS algorithm. The longer the buffer, the better -and the slower- the performance, but this buffer length must always be larger than the number of taps in the FIR filter used. Thus, a larger buffer (and larger FIR filter) uses more MCU resources. |
| **DSP Notch FIRNumTap** ( CONFIG_DSP_NOTCH_FFT_NUMTAPS) | DSP LMS automatic notch filter: Number of taps in the DSP automatic notch FIR filter. The larger the number of taps in the filter, the better the performance, but the slower the performance of the filter and the mcHF. |
| **Rst Conf EEPROM** ( CONFIG_RESET_SER_EEPROM) | Clear the EEPROM so that at next start all stored configuration data is reset to the values stored in Flash (see Backup/Restore). |
## Display Menu (`MENU_DISPLAY`)
| LABEL ( NR) | DESCRIPTION |
| --------------------------------------------------------------------------- | ---------------------------------------------- |
| **LCD Auto Blank** ( CONFIG_LCD_AUTO_OFF_MODE) | After x seconds LCD turns dark and LCD data sections stop. So power consumption is decreased and RX hum is decreased, too. LCD operation starts when using any button or the touchscreen. |
| **Step Size Marker** ( CONFIG_FREQ_STEP_MARKER_LINE) | If enabled, you'll see a line under the digit which is currently representing the selected tuning step size |
| **Filter BW Display** ( CONFIG_DISP_FILTER_BANDWIDTH) | Colour of the horizontal Filter Bandwidth indicator bar. |
| **Spectrum Size** ( MENU_SPECTRUM_SIZE) | Change height of spectrum display |
| **Spectrum Filter** ( MENU_SPECTRUM_FILTER_STRENGTH) | Lowpass filter for the spectrum FFT. Low values: fast and nervous spectrum; High values: slow and calm spectrum. |
| **Spec FreqScale Colour** ( MENU_SPECTRUM_FREQSCALE_COLOUR) | Colour of the small frequency digits under the spectrum display. |
| **TX Carrier Colour** ( MENU_SPECTRUM_CENTER_LINE_COLOUR) | Colour of the vertical line indicating the TX carrier frequency in the spectrum or waterdall display. |
| **Scope Light** ( MENU_SCOPE_LIGHT_ENABLE) | The scope uses bars (NORMAL) or points (LIGHT) to represent data. LIGHT is a little less resource intensive. |
| **Scope 1/Speed** ( MENU_SCOPE_SPEED) | Lower Values: Higher refresh rate. Set to 0 to disable scope. |
| **Scope AGC Adj.** ( MENU_SCOPE_AGC_ADJUST) | Adjusting of scope / waterfall AGC for fitting graphs to screen |
| **Scope Trace Colour** ( MENU_SCOPE_TRACE_COLOUR) | Set colour of scope |
| **Scope BW Trace Colour** ( MENU_SCOPE_TRACE_HL_COLOUR) | Set colour of highlighted BW scope |
| **Scope BW BCKgr Colour** ( MENU_SCOPE_BACKGROUND_HL_COLOUR) | Set colour of highlighted BW background |
| **Scope Grid Colour** ( MENU_SCOPE_GRID_COLOUR) | Set colour of scope grid |
| **Scope Div.** ( MENU_SCOPE_DB_DIVISION) | Set rf range for scope |
| **Wfall 1/Speed** ( MENU_WFALL_SPEED) | Lower Values: Higher refresh rate. Set to 0 to disable waterfall. |
| **Wfall Colours** ( MENU_WFALL_COLOR_SCHEME) | Select colour scheme for waterfall display. |
| **Wfall Step Size** ( MENU_WFALL_STEP_SIZE) | How many lines are moved in a single screen update |
| **Wfall Contrast** ( MENU_WFALL_CONTRAST) | Adjust to fit your personal input level range to displayable colour range for waterfall |
| **Upper Meter Colour** ( MENU_METER_COLOUR_UP) | Set the colour of the scale of combined S/Power-Meter |
| **Lower Meter Colour** ( MENU_METER_COLOUR_DOWN) | Set the colour of the scale of combined SWR/AUD/ALC-Meter |
| **dBm display** ( MENU_DBM_DISPLAY) | RX signal power (measured within the filter bandwidth) can be displayed in dBm or normalized as dBm/Hz. This value is supposed to be quite accurate to +-3dB. Preferably use low spectrum display magnify settings. Accuracy is lower for very very weak and very very strong signals. |
| **dBm calibrate** ( MENU_DBM_CALIBRATE) | dBm display calibration. Just an offset (in dB) that is added to the internally calculated dBm or dBm/Hz value. |
| **S-Meter Attack** ( CONFIG_SMETER_ATTACK) | Attack controls how quickly the S-Meter reacts to rising signal levels, higher values represent quicker reaction |
| **S-Meter Decay** ( CONFIG_SMETER_DECAY) | Decay controls how quickly the S-Meter reacts to falling signal levels, higher values represent quicker reaction |
| **Freq display font** ( MENU_FREQ_FONT) | Font selection for frequency display. Allows selection of old/modern fonts |
| **Menu Inverse Scrolling** ( MENU_UI_INVERSE_SCROLLING) | Inverts Enc2/Enc3 behavior in menu up/down and show/hide UI scrolling actions, used for side-mounted encoder dials. |
## CW Mode Settings (`MENU_CW`)
| LABEL ( NR) | DESCRIPTION |
| --------------------------------------------------------------------------- | ---------------------------------------------- |
| **CW Keyer Mode** ( MENU_KEYER_MODE) | Select how the mcHF interprets the connected keyer signals. Supported modes: Iambic A and B Keyer (IAM A/B), Straight Key (STR_K), and Ultimatic Keyer (ULTIM) |
| **CW Keyer Speed** ( MENU_KEYER_SPEED) | Keyer Speed for the automatic keyer modes in WpM. Also changeable via Encoder 3 if in CW Mode. |
| **CW Keyer Weight** ( MENU_KEYER_WEIGHT) | Keyer Dit/Pause ratio for the automatic keyer modes. Higher values increase length of dit, decreases length of pause so that the total time is still according to the set WpM value. |
| **CW Sidetone Gain** ( MENU_SIDETONE_GAIN) | Audio volume for the monitor sidetone in CW TX. Also changeable via Encoder 1 if in CW Mode. |
| **CW Side/Offset Freq** ( MENU_SIDETONE_FREQUENCY) | Sidetone Frequency (also Offset frequency, see CW Freq. Offset below) |
| **CW Paddle Reverse** ( MENU_PADDLE_REVERSE) | Dit is Dah and Dah is Dit. Use if your keyer needs reverse meaning of the paddles. |
| **CW TX->RX Delay** ( MENU_CW_TX_RX_DELAY) | How long to stay in CW TX mode after stop sending a signal. |
| **CW Freq. Offset** ( MENU_CW_OFFSET_MODE) | TX: display is TX frequency if received frequency was zero-beated. DISP: display is RX frequency if received signal is matched to sidetone. SHIFT: LO shifts, display is RX frequency if signal is matched to sidetone. |
| **CW LSB/USB Select** ( MENU_CW_AUTO_MODE_SELECT) | Set appropriate sideband mode for CW. If AUTO, sideband is chosen for bands by its frequency. A long press on Mode button gets the other sideband mode |
| **CW decoder enable** ( MENU_CW_DECODER) | enable experimental CW decoding |
| **Signal threshold** ( MENU_CW_DECODER_THRESH) | All signals above this threshold are intepreted as a dit or daah |
| **Tune helper** ( MENU_CW_DECODER_SNAP_ENABLE) | graphical tune helper: adjust frequency until yellow vertical line is in centre of green box --> right on CW carrier frequency |
| **Blocksize for Goertzel** ( MENU_CW_DECODER_BLOCKSIZE) | How many samples are taken for the signal detection with the Goertzel algorithm? |
| **Noise cancel** ( MENU_CW_DECODER_NOISECANCEL) | Enable/disable noise canceler for CW decoder |
| **Spike cancel** ( MENU_CW_DECODER_SPIKECANCEL) | Enable/disable spike canceler or short cancel for CW decoder |
| **AGC for decoder** ( MENU_CW_DECODER_USE_3_GOERTZEL) | Enable/disable AGC for CW decoder |
| **show CW LED** ( MENU_CW_DECODER_SHOW_CW_LED) | Enable/disable LED for CW decoder |
## Filter Selection (`MENU_FILTER`)
| LABEL ( NR) | DESCRIPTION |
| --------------------------------------------------------------------------- | ---------------------------------------------- |
| **SSB Filter 1** ( MENU_FP_SSB_01) | Filter bandwidth #1 when toggling with filter select button in LSB or USB. |
| **SSB Filter 2** ( MENU_FP_SSB_02) | Filter bandwidth #2 when toggling with filter select button in LSB or USB. |
| **SSB Filter 3** ( MENU_FP_SSB_03) | Filter bandwidth #3 when toggling with filter select button in LSB or USB. |
| **SSB Filter 4** ( MENU_FP_SSB_04) | Filter bandwidth #4 when toggling with filter select button in LSB or USB. |
| **CW Filter 1** ( MENU_FP_CW_01) | Filter bandwidth #1 when toggling with filter select button in CW. |
| **CW Filter 2** ( MENU_FP_CW_02) | Filter bandwidth #2 when toggling with filter select button in CW. |
| **CW Filter 3** ( MENU_FP_CW_03) | Filter bandwidth #3 when toggling with filter select button in CW. |
| **CW Filter 4** ( MENU_FP_CW_04) | Filter bandwidth #4 when toggling with filter select button in CW. |
| **AM/SAM Filter 1** ( MENU_FP_AM_01) | Filter bandwidth #1 when toggling with filter select button in AM & SAM. |
| **AM/SAM Filter 2** ( MENU_FP_AM_02) | Filter bandwidth #2 when toggling with filter select button in AM & SAM. |
| **AM/SAM Filter 3** ( MENU_FP_AM_03) | Filter bandwidth #3 when toggling with filter select button in AM & SAM. |
| **AM/SAM Filter 4** ( MENU_FP_AM_04) | Filter bandwidth #4 when toggling with filter select button in AM & SAM. |
| **AM TX Audio Filter** ( CONFIG_AM_TX_FILTER_DISABLE) | Select if AM-TX signal is filtered (strongly recommended to agree to regulations) |
| **SSB TX Audio Filter2** ( CONFIG_SSB_TX_FILTER) | Select if SSB-TX signal is filtered (strongly recommended to agree to regulations) |
## PA Configuration (`MENU_POW`)
| LABEL ( NR) | DESCRIPTION |
| --------------------------------------------------------------------------- | ---------------------------------------------- |
| **Tune Power Level** ( CONFIG_TUNE_POWER_LEVEL) | Select the power level for TUNE operation. May be set using the selected power level or have a fixed power level. |
| **Tune Tone (SSB)** ( CONFIG_TUNE_TONE_MODE) | Select if single tone or two tone is generated during TUNE operation. Not persistent. |
| **CW PA Bias (If >0 )** ( CONFIG_CW_PA_BIAS) | If set to a value above 0, this BIAS is used during CW transmission; otherwise normal BIAS is used during CW |
| **Reduce Power on Low Bands** ( CONFIG_REDUCE_POWER_ON_LOW_BANDS) | If set (recommended!) frequencies below 8Mhz (40m or lower) require higher power adjust values (four times). This permits better control of generated power on these frequencies. |
| **Reduce Power on High Bands** ( CONFIG_REDUCE_POWER_ON_HIGH_BANDS) | If set frequencies above 8Mhz (30m or higher) require higher power adjust values (four times). This permits better control of generated power on these frequencies. |
| **PA Bias** ( CONFIG_PA_BIAS) | Defines the BIAS value of the PA. See Adjustment and Calibration for more information. |
| **2200m 5W PWR Adjust** ( CONFIG_2200M_5W_ADJUST) | Defines the internal power adjustment factor to achieve 5W power on this band. See Adjustment and Calibration for more information. |
| **630m 5W PWR Adjust** ( CONFIG_630M_5W_ADJUST) | Defines the internal power adjustment factor to achieve 5W power on this band. See Adjustment and Calibration for more information. |
| **160m 5W PWR Adjust** ( CONFIG_160M_5W_ADJUST) | Defines the internal power adjustment factor to achieve 5W power on this band. See Adjustment and Calibration for more information. |
| **80m 5W PWR Adjust** ( CONFIG_80M_5W_ADJUST) | Defines the internal power adjustment factor to achieve 5W power on this band. See Adjustment and Calibration for more information. |
| **60m 5W PWR Adjust** ( CONFIG_60M_5W_ADJUST) | Defines the internal power adjustment factor to achieve 5W power on this band. See Adjustment and Calibration for more information. |
| **40m 5W PWR Adjust** ( CONFIG_40M_5W_ADJUST) | Defines the internal power adjustment factor to achieve 5W power on this band. See Adjustment and Calibration for more information. |
| **30m 5W PWR Adjust** ( CONFIG_30M_5W_ADJUST) | Defines the internal power adjustment factor to achieve 5W power on this band. See Adjustment and Calibration for more information. |
| **20m 5W PWR Adjust** ( CONFIG_20M_5W_ADJUST) | Defines the internal power adjustment factor to achieve 5W power on this band. See Adjustment and Calibration for more information. |
| **17m 5W PWR Adjust** ( CONFIG_17M_5W_ADJUST) | Defines the internal power adjustment factor to achieve 5W power on this band. See Adjustment and Calibration for more information. |
| **15m 5W PWR Adjust** ( CONFIG_15M_5W_ADJUST) | Defines the internal power adjustment factor to achieve 5W power on this band. See Adjustment and Calibration for more information. |
| **12m 5W PWR Adjust** ( CONFIG_12M_5W_ADJUST) | Defines the internal power adjustment factor to achieve 5W power on this band. See Adjustment and Calibration for more information. |
| **10m 5W PWR Adjust** ( CONFIG_10M_5W_ADJUST) | Defines the internal power adjustment factor to achieve 5W power on this band. See Adjustment and Calibration for more information. |
| **6m 5W PWR Adjust** ( CONFIG_6M_5W_ADJUST) | Defines the internal power adjustment factor to achieve 5W power on this band. See Adjustment and Calibration for more information. |
| **4m 5W PWR Adjust** ( CONFIG_4M_5W_ADJUST) | Defines the internal power adjustment factor to achieve 5W power on this band. See Adjustment and Calibration for more information. |
| **2m 5W PWR Adjust** ( CONFIG_2M_5W_ADJUST) | Defines the internal power adjustment factor to achieve 5W power on this band. See Adjustment and Calibration for more information. |
| **70cm 5W PWR Adjust** ( CONFIG_70CM_5W_ADJUST) | Defines the internal power adjustment factor to achieve 5W power on this band. See Adjustment and Calibration for more information. |
| **23cm 5W PWR Adjust** ( CONFIG_23CM_5W_ADJUST) | Defines the internal power adjustment factor to achieve 5W power on this band. See Adjustment and Calibration for more information. |
| **2200m Full PWR Adjust** ( CONFIG_2200M_FULL_POWER_ADJUST) | Defines the internal power adjustment factor to achieve full power on this band. Check the output signal when adjusting for full power! See Adjustment and Calibration for more information. |
| **630m Full PWR Adjust** ( CONFIG_630M_FULL_POWER_ADJUST) | Defines the internal power adjustment factor to achieve full power on this band. Check the output signal when adjusting for full power! See Adjustment and Calibration for more information. |
| **160m Full PWR Adjust** ( CONFIG_160M_FULL_POWER_ADJUST) | Defines the internal power adjustment factor to achieve full power on this band. Check the output signal when adjusting for full power! See Adjustment and Calibration for more information. |
| **80m Full PWR Adjust** ( CONFIG_80M_FULL_POWER_ADJUST) | Defines the internal power adjustment factor to achieve full power on this band. Check the output signal when adjusting for full power! See Adjustment and Calibration for more information. |
| **60m Full PWR Adjust** ( CONFIG_60M_FULL_POWER_ADJUST) | Defines the internal power adjustment factor to achieve full power on this band. Check the output signal when adjusting for full power! See Adjustment and Calibration for more information. |
| **40m Full PWR Adjust** ( CONFIG_40M_FULL_POWER_ADJUST) | Defines the internal power adjustment factor to achieve full power on this band. Check the output signal when adjusting for full power! See Adjustment and Calibration for more information. |
| **30m Full PWR Adjust** ( CONFIG_30M_FULL_POWER_ADJUST) | Defines the internal power adjustment factor to achieve full power on this band. Check the output signal when adjusting for full power! See Adjustment and Calibration for more information. |
| **20m Full PWR Adjust** ( CONFIG_20M_FULL_POWER_ADJUST) | Defines the internal power adjustment factor to achieve full power on this band. Check the output signal when adjusting for full power! See Adjustment and Calibration for more information. |
| **17m Full PWR Adjust** ( CONFIG_17M_FULL_POWER_ADJUST) | Defines the internal power adjustment factor to achieve full power on this band. Check the output signal when adjusting for full power! See Adjustment and Calibration for more information. |
| **15m Full PWR Adjust** ( CONFIG_15M_FULL_POWER_ADJUST) | Defines the internal power adjustment factor to achieve full power on this band. Check the output signal when adjusting for full power! See Adjustment and Calibration for more information. |
| **12m Full PWR Adjust** ( CONFIG_12M_FULL_POWER_ADJUST) | Defines the internal power adjustment factor to achieve full power on this band. Check the output signal when adjusting for full power! See Adjustment and Calibration for more information. |
| **10m Full PWR Adjust** ( CONFIG_10M_FULL_POWER_ADJUST) | Defines the internal power adjustment factor to achieve full power on this band. Check the output signal when adjusting for full power! See Adjustment and Calibration for more information. |
| **6m Full PWR Adjust** ( CONFIG_6M_FULL_POWER_ADJUST) | Defines the internal power adjustment factor to achieve full power on this band. Check the output signal when adjusting for full power! See Adjustment and Calibration for more information. |
| **4m Full PWR Adjust** ( CONFIG_4M_FULL_POWER_ADJUST) | Defines the internal power adjustment factor to achieve full power on this band. Check the output signal when adjusting for full power! See Adjustment and Calibration for more information. |
| **2m Full PWR Adjust** ( CONFIG_2M_FULL_POWER_ADJUST) | Defines the internal power adjustment factor to achieve full power on this band. Check the output signal when adjusting for full power! See Adjustment and Calibration for more information. |
| **70cm Full PWR Adjust** ( CONFIG_70CM_FULL_POWER_ADJUST) | Defines the internal power adjustment factor to achieve full power on this band. Check the output signal when adjusting for full power! See Adjustment and Calibration for more information. |
| **23cm Full PWR Adjust** ( CONFIG_23CM_FULL_POWER_ADJUST) | Defines the internal power adjustment factor to achieve full power on this band. Check the output signal when adjusting for full power! See Adjustment and Calibration for more information. |
| **2200m Coupling Adj.** ( CONFIG_FWD_REV_COUPLING_2200M_ADJ) | Power Meter Adjustment factor for the 2200m band power values. See Wiki. |
| **630m Coupling Adj.** ( CONFIG_FWD_REV_COUPLING_630M_ADJ) | Power Adjustment factor for the 630m band power values. See Wiki. |
| **160m Coupling Adj.** ( CONFIG_FWD_REV_COUPLING_160M_ADJ) | Power Meter Adjustment factor for the 160m band power values. See Wiki. |
| **80m Coupling Adj.** ( CONFIG_FWD_REV_COUPLING_80M_ADJ) | Power Meter Adjustment factor for the 80m band power values. See Wiki. |
| **40m Coupling Adj.** ( CONFIG_FWD_REV_COUPLING_40M_ADJ) | Power Meter Adjustment factor for the 40m and 60m band power values. See Wiki. |
| **20m Coupling Adj.** ( CONFIG_FWD_REV_COUPLING_20M_ADJ) | Power Meter Adjustment factor for the 20m and 30m band power values. See Wiki. |
| **15m Coupling Adj.** ( CONFIG_FWD_REV_COUPLING_15M_ADJ) | Power Meter Adjustment factor for the 10m - 17m bands power values. See Wiki. |
| **6m Coupling Adj.** ( CONFIG_FWD_REV_COUPLING_6M_ADJ) | Power Meter Adjustment factor for the 6m band power values. See Wiki. |
| **2m Coupling Adj.** ( CONFIG_FWD_REV_COUPLING_2M_ADJ) | Power Meter Adjustment factor for the 2m band power values. See Wiki. |
| **70cm Coupling Adj.** ( CONFIG_FWD_REV_COUPLING_70CM_ADJ) | Power Meter Adjustment factor for the 70cm band power values. See Wiki. |
| **23cm Coupling Adj.** ( CONFIG_FWD_REV_COUPLING_23CM_ADJ) | Power Meter Adjustment factor for the 23cm band power values. See Wiki. |
## System Info (`MENU_SYSINFO`)
| LABEL ( NR) | DESCRIPTION |
| --------------------------------------------------------------------------- | ---------------------------------------------- |
| **Display** ( INFO_DISPLAY) | Displays working mode (SPI/parallel |
| **Disp. Controller** ( INFO_DISPLAY_CTRL) | identified LCD controller chip |
| **Oscillator** ( INFO_OSC_NAME) | Local oscillator type |
| **SI570** ( INFO_SI570) | Startup frequency and I2C address of local oscillator Type SI570 |
| **EEPROM** ( INFO_EEPROM) | type of serial EEPROM and its capacity |
| **Touchscreen** ( INFO_TP) | touchscreen state |
| **CPU** ( INFO_CPU) | identification of fitted MCU |
| **Flash Size (kB)** ( INFO_FLASH) | flash size of MCU |
| **RAM Size (kB)** ( INFO_RAM) | RAM size of MCU |
| **Firmware** ( INFO_FW_VERSION) | firmware version |
| **Build** ( INFO_BUILD) | firmware: timestamp of building |
| **Bootloader** ( INFO_BL_VERSION) | bootloader version |
| **RF Board** ( INFO_RFBOARD) | Displays the detected RF Board hardware identification. |
| **Audio Codec Presence** ( INFO_CODEC) | Audio Codec I2C communication successfully tested? This is not a full test of the Audio Codec functionality, it only reports if I2C communication reported no problem talking to the codec. |
| **Audio Codec Twinpeaks Corr.** ( INFO_CODEC_TWINPEAKS) | In some cases the audio codec needs to be restarted to produce correct IQ. The IQ auto correction detects this. If this fixes the problem, Done is displayed, Failed otherwise |
| **Backup RAM Battery** ( INFO_VBAT) | Battery Support for Backup RAM present? |
| **Real Time Clock** ( INFO_RTC) | Battery Supported Real Time Clock present? |
| **FW license** ( INFO_LICENCE) | Display license of firmware |
| **HW license** ( INFO_HWLICENCE) | Display license of hardware |
## Debug/Exper. Settings (`MENU_DEBUG`)
| LABEL ( NR) | DESCRIPTION |
| --------------------------------------------------------------------------- | ---------------------------------------------- |
| **Enable Debug Info Display** ( MENU_DEBUG_ENABLE_INFO) | Enable debug outputs on LCD for testing purposes (touch screen coordinates, load) and audio interrupt duration indication via green led |
| **CW Shift Keeps Signal** ( MENU_DEBUG_CW_OFFSET_SHIFT_KEEP_SIGNAL) | Enable automatic sidetone correction for CW OFFSET MODE = SHIFT. If you tuned in SSB to a CW signal around the sidetone frequency, you'll keep that signal when going to CW. Even if you switch from USB to CW-LSB etc. |
| **TX Audio via USB** ( MENU_DEBUG_TX_AUDIO) | If enabled, send generated audio to PC during TX. |
| **FT817 Clone Transmit** ( MENU_DEBUG_CLONEOUT) | Will in future send out memory data to an FT817 Clone Info (to be used with CHIRP). |
| **FT817 Clone Receive** ( MENU_DEBUG_CLONEIN) | Will in future get memory data from an FT817 Clone Info (to be used with CHIRP). |
| **Show gains** ( MENU_DEBUG_NR_GAIN_SHOW) | Debugging: show gains of spectral noise reduction |
| **NR beta** ( MENU_DEBUG_NR_BETA) | time constant beta for spectral noise reduction, leave at 0.85 |
| **NR asnr** ( MENU_DEBUG_NR_ASNR) | Devel 2 NR: asnr |
| **NR smooth wd.** ( MENU_DEBUG_NR_GAIN_SMOOTH_WIDTH) | Devel 2 NR: width of gain smoothing window |
| **NR smooth thr.** ( MENU_DEBUG_NR_GAIN_SMOOTH_THRESHOLD) | Devel 2 NR: threhold for gain smoothing |
| **STEREO Enable** ( MENU_DEBUG_ENABLE_STEREO) | Enable stereo demodulation modes |
| **leaky LMS** ( MENU_DEBUG_LEAKY_LMS) | Use leaky LMS noise reduction instead of built-in CMSIS LMS algorithm |
| **NR no taps** ( MENU_DEBUG_ANR_TAPS) | Number of taps of leaky LMS noise reduction |
| **NR delay** ( MENU_DEBUG_ANR_DELAY) | Delay length of leaky LMS noise reduction |
| **NR gain** ( MENU_DEBUG_ANR_GAIN) | Gain of leaky LMS noise reduction |
| **NR leak** ( MENU_DEBUG_ANR_LEAK) | Leak of leaky LMS noise reduction |
| **Si5351a PLL Reset** ( MENU_DEBUG_OSC_SI5351_PLLRESET) | Debug Setting: Select when the Si5351a does a PLL RESET |
| **HMC1023 Coarse** ( MENU_DEBUG_HMC1023_COARSE) | Debug Setting: Change LPF HMC1023LP5E coarse bandwidth |
| **HMC1023 Fine** ( MENU_DEBUG_HMC1023_FINE) | Debug Setting: Change LPF HMC1023LP5E fine bandwidth |
| **HMC1023 Gain 10db** ( MENU_DEBUG_HMC1023_GAIN) | Debug Setting: Switch LPF HMC1023LP5E +10db Amp on/off |
| **HMC1023 Bypass** ( MENU_DEBUG_HMC1023_BYPASS) | Debug Setting: Set HMC1023 to bypass mode |
| **HMC1023 Opamp Bias** ( MENU_DEBUG_HMC1023_OPAMP) | Debug Setting: Switch LPF HMC1023LP5E Opamp Bias |
| **HMC1023 Driver Bias** ( MENU_DEBUG_HMC1023_DRVR) | Debug Setting: Set HMC1023 Driver Bias |
| **Trigger Twinpeaks Corr.** ( MENU_DEBUG_TWINPEAKS_CORR_RUN) | Trigger Twinpeaks Correction Manually if IQ Auto Correction is enabled, otherwise you will see 'Not Possible' |
| **TX IQ Balance (20m)** ( CONFIG_20M_TX_IQ_GAIN_BAL) | IQ Balance Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 14.100 MHz. |
| **TX IQ Phase (20m)** ( CONFIG_20M_TX_IQ_PHASE_BAL) | IQ Phase Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 14.100 MHz. |
| **TX IQ Balance (15m)** ( CONFIG_15M_TX_IQ_GAIN_BAL) | IQ Balance Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 21.100 MHz. |
| **TX IQ Phase (15m)** ( CONFIG_15M_TX_IQ_PHASE_BAL) | IQ Phase Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 21.100 MHz. |
| **TX IQ Balance (10mUp)** ( CONFIG_10M_UP_TX_IQ_GAIN_BAL) | IQ Balance Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 29.650 MHz. |
| **TX IQ Phase (10mUp)** ( CONFIG_10M_UP_TX_IQ_PHASE_BAL) | IQ Phase Adjust for all transmission if frequency translation is NOT OFF. Calibrate on 29.650 MHz. |
| **TX IQ Balance (20m,CW)** ( CONFIG_20M_TX_IQ_GAIN_BAL_TRANS_OFF) | IQ Balance Adjust for all transmission if frequency translation is OFF. Calibrate on 14.100 MHz. |
| **TX IQ Phase (20m,CW)** ( CONFIG_20M_TX_IQ_PHASE_BAL_TRANS_OFF) | IQ Phase Adjust for all transmission if frequency translation is OFF. Calibrate on 14.100 MHz. |
| **TX IQ Balance (15m,CW)** ( CONFIG_15M_TX_IQ_GAIN_BAL_TRANS_OFF) | IQ Balance Adjust for all transmission if frequency translation is OFF. Calibrate on 21.100 MHz. |
| **TX IQ Phase (15m,CW)** ( CONFIG_15M_TX_IQ_PHASE_BAL_TRANS_OFF) | IQ Phase Adjust for all transmission if frequency translation is OFF. Calibrate on 21.100 MHz. |
| **TX IQ Balance (10mUp,CW)** ( CONFIG_10M_UP_TX_IQ_GAIN_BAL_TRANS_OFF) | IQ Balance Adjust for all transmission if frequency translation is OFF. Calibrate on 29.650 MHz. |
| **TX IQ Phase (10mUp,CW)** ( CONFIG_10M_UP_TX_IQ_PHASE_BAL_TRANS_OFF) | IQ Phase Adjust for all transmission if frequency translation is OFF. Calibrate on 29.650 MHz. |
| **VSWR Protect.threshold** ( MENU_DEBUG_VSWR_PROTECTION_THRESHOLD) | If not OFF, on TX/tune the bias of PA will be down to 0 etc when exceeding the specified value of VSWR |
| **Rst Conf EEPROM** ( CONFIG_RESET_SER_EEPROM_SIGNATURE) | Clear the EEPROMi signature but keep all config values. This is mainly for debugging purposes). |
| **FreeDV Mode** ( MENU_DEBUG_FREEDV_MODE) | Change active FreeDV mode. Please note, you have to reboot to activate new mode |
| **FreeDV Squelch threshold** ( MENU_DEBUG_FREEDV_SQL_THRESHOLD) | If not OFF, FreeDV will squelch if detected SNR is below set value. |
| **Smooth dynamic tune** ( MENU_DEBUG_SMOOTH_DYN_TUNE) | Activate smooth dynamic tune. |
| **Band Definition** ( MENU_DEBUG_BANDEF_SELECT) | Select which band definition to use for ham bands (Original UHSDR or IARU Region 1 - 3 |
[//]: # ( EOFILE )
@@ -0,0 +1,102 @@
#!/usr/bin/python
"""
2016-12-24 HB9ocq, DB4ple - support program to document the menu structure of uhsdr amateur radio firmware
2017-01-01 HB9ocq - refinement
2017-01-06 HB9ocq - following change in definition of MenuDescriptor
relies upon module ui_menu_structure_c2py.py in the same directory
"""
from ui_menu_structure_c2py import MENU_DESCRIPTOR, BUILD_ID
# MENU_DESCRIPTOR is a list of dicts with entries "MENU_ID" "ME_KIND" "NR" "LABEL" "DESC"
# e.g. [ ... { 'MENU_ID': "TOP",
# 'ME_KIND': "GROUP",
# 'NR': "MENU_BASE",
# 'LABEL': "Standard Menu",
# 'DESC': ":soon:"},
# ...]
from datetime import datetime
TS_NOW = datetime.now().replace(microsecond=0).isoformat()
# all unique MENU_IDs
am = set([md['MENU_ID'] for md in MENU_DESCRIPTOR]) ## random order
# forced ORDER ## 2017-01-01 HB9ocq - arbitrary selection, feel free to rearrange
am = ['MENU_TOP',
'MENU_BASE',
'MENU_CONF',
'MENU_FILTER',
'MENU_CW',
'MENU_POW',
'MENU_DISPLAY',
'MENU_SYSINFO',
'MENU_DEBUG',
]
#-----------------------------------------------------
GEN_SENTENCE = r'generated at {TS_NOW} by "{__file__}"'.format(**globals())
OUTPUT = ""
# preface/header
OUTPUT += r"""
[//]: # ( )
[//]: # ( WARNING: generated data! DO NOT EDIT MANUALLY ! ! ! )
[//]: # ( )
[//]: # ( {GEN_SENTENCE} )
[//]: # ( )
[//]: # ( mcHF SDR TRX v{BUILD_ID} - Menu Structure Diagram as MarkDown-Table )
[//]: # ( )
[//]: # ( see <https://help.github.com/categories/writing-on-github/> )
[//]: # ( )
# uhsdr firmware v{BUILD_ID} - UI Menu Overview
{GEN_SENTENCE}
""".format(**globals())
# a paragraph for every group
for gm in [md for md in MENU_DESCRIPTOR if (('MENU_GROUP' == md['ME_KIND']) and (md['NR'] in am))]:
# header H2
OUTPUT += r"""
## {LABEL} (`{NR}`)
""".format(**gm)
# table header
OUTPUT += """
| {:<25} ({:>43}) | {:<46} | """.format("LABEL", "NR", "DESCRIPTION")
OUTPUT += """
| {0:-<25}------{0:->43}- | {0:-<46} | """.format("-")
# table rows
for md in MENU_DESCRIPTOR:
if((0 != md['NR']) and ('MENU_STOP' != md['ME_KIND']) and (gm['NR'] == md['MENU_ID'])):
# for sensible entries only
md['LABEL'] = "**{LABEL}**".format(**md)
OUTPUT += """
| {LABEL:<29} ({NR:>43}) | {DESC:<46} | """.format(**md)
OUTPUT += "\n\n"
# footer
OUTPUT += r"""
[//]: # ( EOFILE )
"""
# are we running as a program?
if '__main__' == __name__:
print(OUTPUT)
exit(0)
#EOFILE