Merge branch 'thumbDV_support' of github.com:n5ac/smartsdr-dsp into thumbDV_support

Conflicts:
	pc/CODEC2 GUI/CODEC2 GUI/Form1.Designer.cs
	pc/CODEC2 GUI/CODEC2 GUI/Form1.cs
	pc/CODEC2 GUI/CODEC2 GUI/Properties/AssemblyInfo.cs
	pc/CODEC2 GUI/CODEC2 GUI/Properties/Resources.Designer.cs
	pc/CODEC2 GUI/CODEC2 GUI/Properties/Settings.Designer.cs
This commit is contained in:
Ed Gonzalez 2015-08-31 10:54:53 -05:00
commit 12df08f2d0
44 changed files with 5027 additions and 1320 deletions

9
.gitignore vendored
View file

@ -3,6 +3,7 @@
*.ko
*.obj
*.elf
obj
# Libraries
*.lib
@ -21,3 +22,11 @@
*.i*86
*.x86_64
*.hex
# Others
.metadata
.vs
bin
Debug
Release
.settings

View file

@ -1,182 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
<storageModule moduleId="org.eclipse.cdt.core.settings">
<cconfiguration id="cdt.managedbuild.config.gnu.exe.release.455329745.1404386624">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.exe.release.455329745.1404386624" moduleId="org.eclipse.cdt.core.settings" name="Release">
<externalSettings/>
<extensions>
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactName="freedv" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.exe.release.455329745.1404386624" name="Release" parent="cdt.managedbuild.config.gnu.exe.release" postbuildStep="cp freedv /nfsroots/microburst/home/root/">
<folderInfo id="cdt.managedbuild.config.gnu.exe.release.455329745.1404386624." name="/" resourcePath="">
<toolChain id="cdt.managedbuild.toolchain.gnu.exe.release.1160619980" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.exe.release">
<targetPlatform id="cdt.managedbuild.target.gnu.platform.exe.release.2078660954" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.exe.release"/>
<builder arguments="-k" buildPath="${workspace_loc:/Firmware/Release}" command="make" enableAutoBuild="true" id="cdt.managedbuild.target.gnu.builder.exe.release.1266404460" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="unlimited" superClass="cdt.managedbuild.target.gnu.builder.exe.release"/>
<tool id="cdt.managedbuild.tool.gnu.archiver.base.1606076205" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
<tool command="g++" commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}" id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.1484401702" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release">
<option id="gnu.cpp.compiler.exe.release.option.optimization.level.1439486041" name="Optimization Level" superClass="gnu.cpp.compiler.exe.release.option.optimization.level" value="gnu.cpp.compiler.optimization.level.most" valueType="enumerated"/>
<option id="gnu.cpp.compiler.exe.release.option.debugging.level.1676376187" name="Debug Level" superClass="gnu.cpp.compiler.exe.release.option.debugging.level" value="gnu.cpp.compiler.debugging.level.none" valueType="enumerated"/>
<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.417250856" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
</tool>
<tool command="arm-angstrom-linux-gnueabi-gcc" commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}" id="cdt.managedbuild.tool.gnu.c.compiler.exe.release.1604589678" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.release">
<option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.exe.release.option.optimization.level.111807076" name="Optimization Level" superClass="gnu.c.compiler.exe.release.option.optimization.level" value="gnu.c.optimization.level.most" valueType="enumerated"/>
<option id="gnu.c.compiler.exe.release.option.debugging.level.664177896" name="Debug Level" superClass="gnu.c.compiler.exe.release.option.debugging.level" value="gnu.c.debugging.level.none" valueType="enumerated"/>
<option id="gnu.c.compiler.option.include.paths.1817958224" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/ThumbDV}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/CODEC2_FREEDV}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/SmartSDR_Interface}&quot;"/>
</option>
<option id="gnu.c.compiler.option.misc.other.289247507" name="Other flags" superClass="gnu.c.compiler.option.misc.other" value="-c -fmessage-length=0 -lpthread" valueType="string"/>
<option id="gnu.c.compiler.option.optimization.flags.1176187569" name="Other optimization flags" superClass="gnu.c.compiler.option.optimization.flags" value="-mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -ftree-vectorize" valueType="string"/>
<option id="gnu.c.compiler.option.preprocessor.def.symbols.311927134" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols"/>
<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1521355092" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
</tool>
<tool command="arm-angstrom-linux-gnueabi-gcc" id="cdt.managedbuild.tool.gnu.c.linker.exe.release.1167769276" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.release">
<option id="gnu.c.link.option.paths.1933035464" name="Library search path (-L)" superClass="gnu.c.link.option.paths" valueType="libPaths">
<listOptionValue builtIn="false" value="&quot;../../Firmware/lib&quot;"/>
</option>
<option id="gnu.c.link.option.libs.482381341" name="Libraries (-l)" superClass="gnu.c.link.option.libs" valueType="libs">
<listOptionValue builtIn="false" value="rt"/>
<listOptionValue builtIn="false" value="pthread"/>
<listOptionValue builtIn="false" value="m"/>
</option>
<option id="gnu.c.link.option.other.567856856" name="Other options (-Xlinker [option])" superClass="gnu.c.link.option.other" valueType="stringList">
<listOptionValue builtIn="false" value="-Map=Firmware.map"/>
</option>
<option id="gnu.c.link.option.ldflags.2115200729" name="Linker flags" superClass="gnu.c.link.option.ldflags" value="" valueType="string"/>
<inputType id="cdt.managedbuild.tool.gnu.c.linker.input.2045838810" superClass="cdt.managedbuild.tool.gnu.c.linker.input">
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
</inputType>
</tool>
<tool command="arm-angstrom-linux-gnueabi-gcc" commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}" id="cdt.managedbuild.tool.gnu.cpp.linker.exe.release.1184656717" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.exe.release">
<option id="gnu.cpp.link.option.libs.730254841" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" valueType="libs">
<listOptionValue builtIn="false" value="pthread"/>
<listOptionValue builtIn="false" value="rt"/>
<listOptionValue builtIn="false" value="m"/>
</option>
<option id="gnu.cpp.link.option.flags.1495700194" name="Linker flags" superClass="gnu.cpp.link.option.flags" value="-rdynamic" valueType="string"/>
<inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1750213952" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
</inputType>
</tool>
<tool command="arm-angstrom-linux-gnueabi-as" id="cdt.managedbuild.tool.gnu.assembler.exe.release.1619994206" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.release">
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.1602152836" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
</tool>
</toolChain>
</folderInfo>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
</cconfiguration>
<cconfiguration id="cdt.managedbuild.config.gnu.exe.debug.1561919164.675793495">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.exe.debug.1561919164.675793495" moduleId="org.eclipse.cdt.core.settings" name="Debug">
<externalSettings/>
<extensions>
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactName="freedv" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.exe.debug.1561919164.675793495" name="Debug" parent="cdt.managedbuild.config.gnu.exe.debug" postbuildStep="cp freedv /nfsroots/microburst/home/root/" prebuildStep="">
<folderInfo id="cdt.managedbuild.config.gnu.exe.debug.1561919164.675793495." name="/" resourcePath="">
<toolChain id="cdt.managedbuild.toolchain.gnu.exe.debug.1475068675" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.exe.debug">
<targetPlatform id="cdt.managedbuild.target.gnu.platform.exe.debug.589235019" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.exe.debug"/>
<builder arguments="" autoBuildTarget="all" buildPath="${workspace_loc:../../bin}" cleanBuildTarget="clean" command="make" enableAutoBuild="true" enableCleanBuild="true" enabledIncrementalBuild="true" id="cdt.managedbuild.target.gnu.builder.exe.debug.2090001764" incrementalBuildTarget="all" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="unlimited" stopOnErr="false" superClass="cdt.managedbuild.target.gnu.builder.exe.debug"/>
<tool id="cdt.managedbuild.tool.gnu.archiver.base.410562789" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
<tool command="g++" commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}" id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.2124708629" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug">
<option id="gnu.cpp.compiler.exe.debug.option.optimization.level.1216963028" name="Optimization Level" superClass="gnu.cpp.compiler.exe.debug.option.optimization.level" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/>
<option id="gnu.cpp.compiler.exe.debug.option.debugging.level.590046405" name="Debug Level" superClass="gnu.cpp.compiler.exe.debug.option.debugging.level" value="gnu.cpp.compiler.debugging.level.max" valueType="enumerated"/>
<option id="gnu.cpp.compiler.option.include.paths.1577984969" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/CODEC2_FREEDV}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/SmartSDR_Interface}&quot;"/>
</option>
<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1803519384" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
</tool>
<tool command="arm-angstrom-linux-gnueabi-gcc" commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}" id="cdt.managedbuild.tool.gnu.c.compiler.exe.debug.1918981003" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.debug">
<option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.exe.debug.option.optimization.level.1587290616" name="Optimization Level" superClass="gnu.c.compiler.exe.debug.option.optimization.level" value="gnu.c.optimization.level.none" valueType="enumerated"/>
<option id="gnu.c.compiler.exe.debug.option.debugging.level.456806579" name="Debug Level" superClass="gnu.c.compiler.exe.debug.option.debugging.level" value="gnu.c.debugging.level.max" valueType="enumerated"/>
<option id="gnu.c.compiler.option.include.paths.1501760220" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/CODEC2_FREEDV}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/SmartSDR_Interface}&quot;"/>
</option>
<option id="gnu.c.compiler.option.misc.other.926596463" name="Other flags" superClass="gnu.c.compiler.option.misc.other" value="-c -fmessage-length=0 -lpthread" valueType="string"/>
<option id="gnu.c.compiler.option.debugging.other.1803329599" name="Other debugging flags" superClass="gnu.c.compiler.option.debugging.other" value="-ggdb -g3 -fstack-protector-all -funwind-tables" valueType="string"/>
<option id="gnu.c.compiler.option.optimization.flags.1001299157" name="Other optimization flags" superClass="gnu.c.compiler.option.optimization.flags" value="-mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -ftree-vectorize" valueType="string"/>
<option id="gnu.c.compiler.option.debugging.prof.859940599" name="Generate prof information (-p)" superClass="gnu.c.compiler.option.debugging.prof" value="false" valueType="boolean"/>
<option id="gnu.c.compiler.option.debugging.gprof.401972374" name="Generate gprof information (-pg)" superClass="gnu.c.compiler.option.debugging.gprof" value="false" valueType="boolean"/>
<option id="gnu.c.compiler.option.preprocessor.def.symbols.2034718315" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" valueType="definedSymbols">
<listOptionValue builtIn="false" value="DEBUG"/>
</option>
<option id="gnu.c.compiler.option.include.files.326579579" name="Include files (-include)" superClass="gnu.c.compiler.option.include.files"/>
<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1061662189" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
</tool>
<tool command="arm-angstrom-linux-gnueabi-gcc" commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS} " id="cdt.managedbuild.tool.gnu.c.linker.exe.debug.753633908" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.debug">
<option id="gnu.c.link.option.ldflags.1711171964" name="Linker flags" superClass="gnu.c.link.option.ldflags" value="-rdynamic" valueType="string"/>
<option id="gnu.c.link.option.libs.1593474497" name="Libraries (-l)" superClass="gnu.c.link.option.libs" valueType="libs">
<listOptionValue builtIn="false" value="rt"/>
<listOptionValue builtIn="false" value="pthread"/>
<listOptionValue builtIn="false" value="m"/>
</option>
<option id="gnu.c.link.option.paths.862698517" name="Library search path (-L)" superClass="gnu.c.link.option.paths" valueType="libPaths">
<listOptionValue builtIn="false" value="&quot;../../Firmware/lib&quot;"/>
</option>
<option id="gnu.c.link.option.shared.939772358" name="Shared (-shared)" superClass="gnu.c.link.option.shared" value="false" valueType="boolean"/>
<option id="gnu.c.link.option.other.869487483" name="Other options (-Xlinker [option])" superClass="gnu.c.link.option.other" valueType="stringList">
<listOptionValue builtIn="false" value="-Map=Firmware.map"/>
</option>
<option id="gnu.c.link.option.debugging.prof.1475259916" name="Generate prof information (-p)" superClass="gnu.c.link.option.debugging.prof" value="false" valueType="boolean"/>
<option id="gnu.c.link.option.debugging.gprof.398525211" name="Generate gprof information (-pg)" superClass="gnu.c.link.option.debugging.gprof" value="false" valueType="boolean"/>
<option id="gnu.c.link.option.userobjs.670724704" name="Other objects" superClass="gnu.c.link.option.userobjs"/>
<option id="gnu.c.link.option.soname.1724293399" name="Shared object name (-Wl,-soname=)" superClass="gnu.c.link.option.soname" value="" valueType="string"/>
<inputType id="cdt.managedbuild.tool.gnu.c.linker.input.444795674" superClass="cdt.managedbuild.tool.gnu.c.linker.input">
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
</inputType>
</tool>
<tool command="arm-angstrom-linux-gnueabi-gcc" id="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug.1959280251" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug">
<option id="gnu.cpp.link.option.libs.2052278252" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" valueType="libs">
<listOptionValue builtIn="false" value="pthread"/>
<listOptionValue builtIn="false" value="rt"/>
<listOptionValue builtIn="false" value="m"/>
</option>
<option id="gnu.cpp.link.option.flags.945180533" name="Linker flags" superClass="gnu.cpp.link.option.flags" value="-rdynamic" valueType="string"/>
<inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1755417844" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
</inputType>
</tool>
<tool command="arm-angstrom-linux-gnueabi-as" id="cdt.managedbuild.tool.gnu.assembler.exe.debug.52486719" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.debug">
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.1395261162" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
</tool>
</toolChain>
</folderInfo>
<fileInfo id="cdt.managedbuild.config.gnu.exe.debug.1561919164.675793495.lib/libcrypto.a" name="libcrypto.a" rcbsApplicability="disable" resourcePath="lib/libcrypto.a" toolsToInvoke=""/>
<fileInfo id="cdt.managedbuild.config.gnu.exe.debug.1561919164.675793495.lib/libssl.a" name="libssl.a" rcbsApplicability="disable" resourcePath="lib/libssl.a" toolsToInvoke=""/>
<fileInfo id="cdt.managedbuild.config.gnu.exe.debug.1561919164.675793495.hwl/hwl_spi.c" name="hwl_spi.c" rcbsApplicability="disable" resourcePath="hwl/hwl_spi.c" toolsToInvoke="cdt.managedbuild.tool.gnu.c.compiler.exe.debug.1489556063">
<tool id="cdt.managedbuild.tool.gnu.c.compiler.exe.debug.1489556063" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.debug.1918981003">
<option id="gnu.c.compiler.option.optimization.flags.813210058" name="Other optimization flags" superClass="gnu.c.compiler.option.optimization.flags" value="-mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp " valueType="string"/>
<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1363831854" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
</tool>
</fileInfo>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
</cconfiguration>
<cconfiguration id="cdt.managedbuild.config.gnu.exe.release.455329745.1404386624.1765509816">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.exe.release.455329745.1404386624.1765509816" moduleId="org.eclipse.cdt.core.settings" name="ThumbDV_Release">
<externalSettings/>
@ -190,7 +14,7 @@
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactName="thumbdv" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.exe.release.455329745.1404386624.1765509816" name="ThumbDV_Release" parent="cdt.managedbuild.config.gnu.exe.release" postbuildStep="cp thumbdv /nfsroots/microburst/home/root/">
<configuration artifactName="thumbdv" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.exe.release.455329745.1404386624.1765509816" name="ThumbDV_Release" parent="cdt.managedbuild.config.gnu.exe.release" postbuildStep="">
<folderInfo id="cdt.managedbuild.config.gnu.exe.release.455329745.1404386624.1765509816." name="/" resourcePath="">
<toolChain id="cdt.managedbuild.toolchain.gnu.exe.release.2071852954" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.exe.release">
<targetPlatform id="cdt.managedbuild.target.gnu.platform.exe.release.1507208472" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.exe.release"/>
@ -201,21 +25,21 @@
<option id="gnu.cpp.compiler.exe.release.option.debugging.level.659391275" name="Debug Level" superClass="gnu.cpp.compiler.exe.release.option.debugging.level" value="gnu.cpp.compiler.debugging.level.none" valueType="enumerated"/>
<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1471059699" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
</tool>
<tool command="arm-angstrom-linux-gnueabi-gcc" commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}" id="cdt.managedbuild.tool.gnu.c.compiler.exe.release.1305639214" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.release">
<tool command="arm-linux-gnueabi-gcc" commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}" id="cdt.managedbuild.tool.gnu.c.compiler.exe.release.1305639214" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.release">
<option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.exe.release.option.optimization.level.647544514" name="Optimization Level" superClass="gnu.c.compiler.exe.release.option.optimization.level" value="gnu.c.optimization.level.most" valueType="enumerated"/>
<option id="gnu.c.compiler.exe.release.option.debugging.level.1653886956" name="Debug Level" superClass="gnu.c.compiler.exe.release.option.debugging.level" value="gnu.c.debugging.level.none" valueType="enumerated"/>
<option id="gnu.c.compiler.option.include.paths.1892851487" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/ThumbDV}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/CODEC2_FREEDV}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/SmartSDR_Interface}&quot;"/>
</option>
<option id="gnu.c.compiler.option.misc.other.2117180814" name="Other flags" superClass="gnu.c.compiler.option.misc.other" value="-c -fmessage-length=0 -lpthread" valueType="string"/>
<option id="gnu.c.compiler.option.optimization.flags.1009255072" name="Other optimization flags" superClass="gnu.c.compiler.option.optimization.flags" value="-mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -ftree-vectorize" valueType="string"/>
<option id="gnu.c.compiler.option.preprocessor.def.symbols.2118993357" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols"/>
<option id="gnu.c.compiler.option.dialect.std.1831515322" name="Language standard" superClass="gnu.c.compiler.option.dialect.std" value="gnu.c.compiler.dialect.default" valueType="enumerated"/>
<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1381777350" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
</tool>
<tool command="arm-angstrom-linux-gnueabi-gcc" id="cdt.managedbuild.tool.gnu.c.linker.exe.release.539834230" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.release">
<tool command="arm-linux-gnueabi-gcc" id="cdt.managedbuild.tool.gnu.c.linker.exe.release.539834230" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.release">
<option id="gnu.c.link.option.paths.593721395" name="Library search path (-L)" superClass="gnu.c.link.option.paths" valueType="libPaths">
<listOptionValue builtIn="false" value="&quot;../../Firmware/lib&quot;"/>
</option>
@ -245,7 +69,7 @@
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
</inputType>
</tool>
<tool command="arm-angstrom-linux-gnueabi-as" id="cdt.managedbuild.tool.gnu.assembler.exe.release.825234294" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.release">
<tool command="arm-linux-gnueabi-as" id="cdt.managedbuild.tool.gnu.assembler.exe.release.825234294" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.release">
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.1550773879" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
</tool>
</toolChain>
@ -267,7 +91,7 @@
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactName="thumbdv" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.exe.debug.1561919164.675793495.954644819" name="ThumbDV_Debug" parent="cdt.managedbuild.config.gnu.exe.debug" postbuildStep="cp thumbdv /nfsroots/microburst/home/root/" prebuildStep="">
<configuration artifactName="thumbdv" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.exe.debug.1561919164.675793495.954644819" name="ThumbDV_Debug" parent="cdt.managedbuild.config.gnu.exe.debug" postbuildStep="" prebuildStep="">
<folderInfo id="cdt.managedbuild.config.gnu.exe.debug.1561919164.675793495.954644819." name="/" resourcePath="">
<toolChain id="cdt.managedbuild.toolchain.gnu.exe.debug.537899118" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.exe.debug">
<targetPlatform id="cdt.managedbuild.target.gnu.platform.exe.debug.192715654" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.exe.debug"/>
@ -282,13 +106,12 @@
</option>
<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1562312530" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
</tool>
<tool command="arm-angstrom-linux-gnueabi-gcc" commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}" id="cdt.managedbuild.tool.gnu.c.compiler.exe.debug.2095437572" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.debug">
<tool command="arm-linux-gnueabi-gcc" commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}" id="cdt.managedbuild.tool.gnu.c.compiler.exe.debug.2095437572" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.debug">
<option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.exe.debug.option.optimization.level.686601172" name="Optimization Level" superClass="gnu.c.compiler.exe.debug.option.optimization.level" value="gnu.c.optimization.level.none" valueType="enumerated"/>
<option id="gnu.c.compiler.exe.debug.option.debugging.level.50794825" name="Debug Level" superClass="gnu.c.compiler.exe.debug.option.debugging.level" value="gnu.c.debugging.level.max" valueType="enumerated"/>
<option id="gnu.c.compiler.option.include.paths.1981926866" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/CODEC2_FREEDV}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/ThumbDV}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/ThumbDV}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/SmartSDR_Interface}&quot;"/>
</option>
<option id="gnu.c.compiler.option.misc.other.1057497227" name="Other flags" superClass="gnu.c.compiler.option.misc.other" value="-c -fmessage-length=0 -lpthread" valueType="string"/>
@ -300,9 +123,10 @@
<listOptionValue builtIn="false" value="DEBUG"/>
</option>
<option id="gnu.c.compiler.option.include.files.949443204" name="Include files (-include)" superClass="gnu.c.compiler.option.include.files"/>
<option id="gnu.c.compiler.option.dialect.std.224213537" name="Language standard" superClass="gnu.c.compiler.option.dialect.std" value="gnu.c.compiler.dialect.default" valueType="enumerated"/>
<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.252305069" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
</tool>
<tool command="arm-angstrom-linux-gnueabi-gcc" commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS} " id="cdt.managedbuild.tool.gnu.c.linker.exe.debug.2144927630" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.debug">
<tool command="arm-linux-gnueabi-gcc" commandLinePattern="${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS} " id="cdt.managedbuild.tool.gnu.c.linker.exe.debug.2144927630" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.debug">
<option id="gnu.c.link.option.ldflags.1025040973" name="Linker flags" superClass="gnu.c.link.option.ldflags" value="-rdynamic" valueType="string"/>
<option id="gnu.c.link.option.libs.2079493028" name="Libraries (-l)" superClass="gnu.c.link.option.libs" valueType="libs">
<listOptionValue builtIn="false" value="rt"/>
@ -337,7 +161,7 @@
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
</inputType>
</tool>
<tool command="arm-angstrom-linux-gnueabi-as" id="cdt.managedbuild.tool.gnu.assembler.exe.debug.1079285663" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.debug">
<tool command="arm-linux-gnueabi-as" id="cdt.managedbuild.tool.gnu.assembler.exe.debug.1079285663" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.debug">
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.906031255" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
</tool>
</toolChain>
@ -354,6 +178,73 @@
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
</cconfiguration>
<cconfiguration id="cdt.managedbuild.config.gnu.exe.debug.1123319373">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.exe.debug.1123319373" moduleId="org.eclipse.cdt.core.settings" name="Debug">
<externalSettings/>
<extensions>
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactName="thumbdv" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.exe.debug.1123319373" name="Debug" parent="cdt.managedbuild.config.gnu.exe.debug">
<folderInfo id="cdt.managedbuild.config.gnu.exe.debug.1123319373." name="/" resourcePath="">
<toolChain id="cdt.managedbuild.toolchain.gnu.exe.debug.135558959" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.exe.debug">
<targetPlatform id="cdt.managedbuild.target.gnu.platform.exe.debug.1664200855" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.exe.debug"/>
<builder buildPath="${workspace_loc:/DSP_API}/Debug" id="cdt.managedbuild.target.gnu.builder.exe.debug.1630925757" keepEnvironmentInBuildfile="false" name="Gnu Make Builder" superClass="cdt.managedbuild.target.gnu.builder.exe.debug"/>
<tool id="cdt.managedbuild.tool.gnu.archiver.base.1646365699" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.178865484" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug">
<option id="gnu.cpp.compiler.exe.debug.option.optimization.level.1676264233" name="Optimization Level" superClass="gnu.cpp.compiler.exe.debug.option.optimization.level" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/>
<option id="gnu.cpp.compiler.exe.debug.option.debugging.level.492380600" name="Debug Level" superClass="gnu.cpp.compiler.exe.debug.option.debugging.level" value="gnu.cpp.compiler.debugging.level.max" valueType="enumerated"/>
</tool>
<tool id="cdt.managedbuild.tool.gnu.c.compiler.exe.debug.6020742" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.debug">
<option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.exe.debug.option.optimization.level.1115077957" name="Optimization Level" superClass="gnu.c.compiler.exe.debug.option.optimization.level" valueType="enumerated"/>
<option id="gnu.c.compiler.exe.debug.option.debugging.level.808232689" name="Debug Level" superClass="gnu.c.compiler.exe.debug.option.debugging.level" value="gnu.c.debugging.level.max" valueType="enumerated"/>
<option id="gnu.c.compiler.option.include.paths.849100602" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/ThumbDV}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/SmartSDR_Interface}&quot;"/>
</option>
<option id="gnu.c.compiler.option.dialect.std.789654788" name="Language standard" superClass="gnu.c.compiler.option.dialect.std" value="gnu.c.compiler.dialect.default" valueType="enumerated"/>
<option id="gnu.c.compiler.option.preprocessor.def.symbols.921022350" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" valueType="definedSymbols">
<listOptionValue builtIn="false" value="DEBUG"/>
</option>
<option id="gnu.c.compiler.option.optimization.flags.652093285" name="Other optimization flags" superClass="gnu.c.compiler.option.optimization.flags" value="-ftree-vectorize" valueType="string"/>
<option id="gnu.c.compiler.option.debugging.other.1789455642" name="Other debugging flags" superClass="gnu.c.compiler.option.debugging.other" value="-ggdb -g3 -fstack-protector-all -funwind-tables" valueType="string"/>
<option id="gnu.c.compiler.option.misc.other.2048476274" name="Other flags" superClass="gnu.c.compiler.option.misc.other" value="-c -fmessage-length=0 -lpthread" valueType="string"/>
<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.882862181" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
</tool>
<tool id="cdt.managedbuild.tool.gnu.c.linker.exe.debug.1632667335" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.debug">
<option id="gnu.c.link.option.libs.1384921770" name="Libraries (-l)" superClass="gnu.c.link.option.libs" valueType="libs">
<listOptionValue builtIn="false" value="rt"/>
<listOptionValue builtIn="false" value="pthread"/>
<listOptionValue builtIn="false" value="m"/>
</option>
<option id="gnu.c.link.option.paths.1500008865" name="Library search path (-L)" superClass="gnu.c.link.option.paths" valueType="libPaths">
<listOptionValue builtIn="false" value="&quot;../../Firmware/lib&quot;"/>
</option>
<option id="gnu.c.link.option.other.2078769507" name="Other options (-Xlinker [option])" superClass="gnu.c.link.option.other" valueType="stringList">
<listOptionValue builtIn="false" value="-Map=Firmware.map"/>
</option>
<inputType id="cdt.managedbuild.tool.gnu.c.linker.input.1757655897" superClass="cdt.managedbuild.tool.gnu.c.linker.input">
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
</inputType>
</tool>
<tool id="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug.2106176645" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug"/>
<tool id="cdt.managedbuild.tool.gnu.assembler.exe.debug.340381532" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.debug">
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.857123865" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
</tool>
</toolChain>
</folderInfo>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
</cconfiguration>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<project id="DSP_API.null.1167863079" name="DSP_API"/>
@ -418,4 +309,5 @@
</scannerConfigBuildInfo>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
</cproject>

View file

@ -1,4 +0,0 @@
CODEC2_FREEDV/codebook.d: ../CODEC2_FREEDV/codebook.c \
../CODEC2_FREEDV/defines.h
../CODEC2_FREEDV/defines.h:

View file

@ -1,96 +0,0 @@
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
# Add inputs and outputs from these tool invocations to the build variables
C_SRCS += \
../CODEC2_FREEDV/codebook.c \
../CODEC2_FREEDV/codebookd.c \
../CODEC2_FREEDV/codebookdt.c \
../CODEC2_FREEDV/codebookge.c \
../CODEC2_FREEDV/codebookjnd.c \
../CODEC2_FREEDV/codebookjvm.c \
../CODEC2_FREEDV/codebookvq.c \
../CODEC2_FREEDV/codebookvqanssi.c \
../CODEC2_FREEDV/codec2.c \
../CODEC2_FREEDV/dump.c \
../CODEC2_FREEDV/fdmdv.c \
../CODEC2_FREEDV/fifo.c \
../CODEC2_FREEDV/freedv_api.c \
../CODEC2_FREEDV/golay23.c \
../CODEC2_FREEDV/interp.c \
../CODEC2_FREEDV/kiss_fft.c \
../CODEC2_FREEDV/lpc.c \
../CODEC2_FREEDV/lsp.c \
../CODEC2_FREEDV/nlp.c \
../CODEC2_FREEDV/pack.c \
../CODEC2_FREEDV/phase.c \
../CODEC2_FREEDV/postfilter.c \
../CODEC2_FREEDV/quantise.c \
../CODEC2_FREEDV/sine.c \
../CODEC2_FREEDV/varicode.c
OBJS += \
./CODEC2_FREEDV/codebook.o \
./CODEC2_FREEDV/codebookd.o \
./CODEC2_FREEDV/codebookdt.o \
./CODEC2_FREEDV/codebookge.o \
./CODEC2_FREEDV/codebookjnd.o \
./CODEC2_FREEDV/codebookjvm.o \
./CODEC2_FREEDV/codebookvq.o \
./CODEC2_FREEDV/codebookvqanssi.o \
./CODEC2_FREEDV/codec2.o \
./CODEC2_FREEDV/dump.o \
./CODEC2_FREEDV/fdmdv.o \
./CODEC2_FREEDV/fifo.o \
./CODEC2_FREEDV/freedv_api.o \
./CODEC2_FREEDV/golay23.o \
./CODEC2_FREEDV/interp.o \
./CODEC2_FREEDV/kiss_fft.o \
./CODEC2_FREEDV/lpc.o \
./CODEC2_FREEDV/lsp.o \
./CODEC2_FREEDV/nlp.o \
./CODEC2_FREEDV/pack.o \
./CODEC2_FREEDV/phase.o \
./CODEC2_FREEDV/postfilter.o \
./CODEC2_FREEDV/quantise.o \
./CODEC2_FREEDV/sine.o \
./CODEC2_FREEDV/varicode.o
C_DEPS += \
./CODEC2_FREEDV/codebook.d \
./CODEC2_FREEDV/codebookd.d \
./CODEC2_FREEDV/codebookdt.d \
./CODEC2_FREEDV/codebookge.d \
./CODEC2_FREEDV/codebookjnd.d \
./CODEC2_FREEDV/codebookjvm.d \
./CODEC2_FREEDV/codebookvq.d \
./CODEC2_FREEDV/codebookvqanssi.d \
./CODEC2_FREEDV/codec2.d \
./CODEC2_FREEDV/dump.d \
./CODEC2_FREEDV/fdmdv.d \
./CODEC2_FREEDV/fifo.d \
./CODEC2_FREEDV/freedv_api.d \
./CODEC2_FREEDV/golay23.d \
./CODEC2_FREEDV/interp.d \
./CODEC2_FREEDV/kiss_fft.d \
./CODEC2_FREEDV/lpc.d \
./CODEC2_FREEDV/lsp.d \
./CODEC2_FREEDV/nlp.d \
./CODEC2_FREEDV/pack.d \
./CODEC2_FREEDV/phase.d \
./CODEC2_FREEDV/postfilter.d \
./CODEC2_FREEDV/quantise.d \
./CODEC2_FREEDV/sine.d \
./CODEC2_FREEDV/varicode.d
# Each subdirectory must supply rules for building sources it contributes
CODEC2_FREEDV/%.o: ../CODEC2_FREEDV/%.c
@echo 'Building file: $<'
@echo 'Invoking: GCC C Compiler'
arm-linux-gnueabihf-gcc -static -I"/home/graham/workspace/smartsdr-dsp/DSP_API" -I"/home/graham/workspace/smartsdr-dsp/DSP_API/SmartSDR_Interface" -I"/home/graham/workspace/smartsdr-dsp/DSP_API/CODEC2_FREEDV" -O3 -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
@echo 'Finished building: $<'
@echo ' '

View file

@ -1,60 +0,0 @@
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
# Add inputs and outputs from these tool invocations to the build variables
C_SRCS += \
../SmartSDR_Interface/cmd_basics.c \
../SmartSDR_Interface/cmd_engine.c \
../SmartSDR_Interface/discovery_client.c \
../SmartSDR_Interface/hal_buffer.c \
../SmartSDR_Interface/hal_listener.c \
../SmartSDR_Interface/hal_vita.c \
../SmartSDR_Interface/io_utils.c \
../SmartSDR_Interface/sched_waveform.c \
../SmartSDR_Interface/smartsdr_dsp_api.c \
../SmartSDR_Interface/status_processor.c \
../SmartSDR_Interface/traffic_cop.c \
../SmartSDR_Interface/utils.c \
../SmartSDR_Interface/vita_output.c
OBJS += \
./SmartSDR_Interface/cmd_basics.o \
./SmartSDR_Interface/cmd_engine.o \
./SmartSDR_Interface/discovery_client.o \
./SmartSDR_Interface/hal_buffer.o \
./SmartSDR_Interface/hal_listener.o \
./SmartSDR_Interface/hal_vita.o \
./SmartSDR_Interface/io_utils.o \
./SmartSDR_Interface/sched_waveform.o \
./SmartSDR_Interface/smartsdr_dsp_api.o \
./SmartSDR_Interface/status_processor.o \
./SmartSDR_Interface/traffic_cop.o \
./SmartSDR_Interface/utils.o \
./SmartSDR_Interface/vita_output.o
C_DEPS += \
./SmartSDR_Interface/cmd_basics.d \
./SmartSDR_Interface/cmd_engine.d \
./SmartSDR_Interface/discovery_client.d \
./SmartSDR_Interface/hal_buffer.d \
./SmartSDR_Interface/hal_listener.d \
./SmartSDR_Interface/hal_vita.d \
./SmartSDR_Interface/io_utils.d \
./SmartSDR_Interface/sched_waveform.d \
./SmartSDR_Interface/smartsdr_dsp_api.d \
./SmartSDR_Interface/status_processor.d \
./SmartSDR_Interface/traffic_cop.d \
./SmartSDR_Interface/utils.d \
./SmartSDR_Interface/vita_output.d
# Each subdirectory must supply rules for building sources it contributes
SmartSDR_Interface/%.o: ../SmartSDR_Interface/%.c
@echo 'Building file: $<'
@echo 'Invoking: GCC C Compiler'
arm-linux-gnueabihf-gcc -static -I"/home/graham/workspace/smartsdr-dsp/DSP_API" -I"/home/graham/workspace/smartsdr-dsp/DSP_API/SmartSDR_Interface" -I"/home/graham/workspace/smartsdr-dsp/DSP_API/CODEC2_FREEDV" -O3 -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
@echo 'Finished building: $<'
@echo ' '

View file

@ -1,51 +0,0 @@
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
-include ../makefile.init
RM := rm -rf
# All of the sources participating in the build are defined here
-include sources.mk
-include SmartSDR_Interface/subdir.mk
-include CODEC2_FREEDV/subdir.mk
-include subdir.mk
-include objects.mk
ifneq ($(MAKECMDGOALS),clean)
ifneq ($(strip $(C_DEPS)),)
-include $(C_DEPS)
endif
endif
-include ../makefile.defs
# Add inputs and outputs from these tool invocations to the build variables
# All Target
all: freedv
# Tool invocations
freedv: $(OBJS) $(USER_OBJS)
@echo 'Building target: $@'
@echo 'Invoking: GCC C Linker'
arm-linux-gnueabihf-gcc -static -o "freedv" $(OBJS) $(USER_OBJS) $(LIBS)
@echo 'Finished building target: $@'
@echo ' '
$(MAKE) --no-print-directory post-build
# Other Targets
clean:
-$(RM) $(OBJS)$(C_DEPS)$(EXECUTABLES) freedv
-@echo ' '
post-build:
-@echo 'Install in BeagleBone at /home/debian/bin'
-scp freedv root@192.168.20.33:/home/debian/bin/
-@echo ' '
.PHONY: all clean dependents
.SECONDARY: post-build
-include ../makefile.targets

View file

@ -1,8 +0,0 @@
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
USER_OBJS :=
LIBS := -lm -lpthread -lrt

View file

@ -1,19 +0,0 @@
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
O_SRCS :=
C_SRCS :=
S_UPPER_SRCS :=
OBJ_SRCS :=
ASM_SRCS :=
OBJS :=
C_DEPS :=
EXECUTABLES :=
# Every subdirectory with source files must be described here
SUBDIRS := \
. \
SmartSDR_Interface \
CODEC2_FREEDV \

View file

@ -1,30 +0,0 @@
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
# Add inputs and outputs from these tool invocations to the build variables
C_SRCS += \
../circular_buffer.c \
../main.c \
../resampler.c
OBJS += \
./circular_buffer.o \
./main.o \
./resampler.o
C_DEPS += \
./circular_buffer.d \
./main.d \
./resampler.d
# Each subdirectory must supply rules for building sources it contributes
%.o: ../%.c
@echo 'Building file: $<'
@echo 'Invoking: GCC C Compiler'
arm-linux-gnueabihf-gcc -static -I"/home/graham/workspace/smartsdr-dsp/DSP_API" -I"/home/graham/workspace/smartsdr-dsp/DSP_API/SmartSDR_Interface" -I"/home/graham/workspace/smartsdr-dsp/DSP_API/CODEC2_FREEDV" -O3 -Wall -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
@echo 'Finished building: $<'
@echo ' '

View file

@ -304,52 +304,53 @@ void sched_waveform_setOwnCall1( uint32 slice , const char * owncall1 ) {
}
void sched_waveform_setOwnCall2( uint32 slice , const char * owncall2 ) {
/* Ignore slice for now */
char string[10];
strncpy( string, owncall2, 5 );
charReplace( string, ' ', ( char ) 0x7F );
memset( _dstar->outgoing_header.own_call2, ' ', 4 );
/* We limit the copy to the string length so that
* we can fill the rest of the string with spaces to
* comply with DSTAR
*/
uint32 copy_len = strlen( owncall2 );
if ( copy_len > 5 )
copy_len = 5;
strncpy( _dstar->outgoing_header.own_call2, string, copy_len );
memset( _dstar->outgoing_header.own_call2, ' ', 4 );
/* Enforce termination */
_dstar->outgoing_header.own_call2[4] = '\0';
if (strlen(owncall2) > 0)
{
strncpy( string, owncall2, 4);
string[4] = 0;
charReplace( string, ( char ) 0x7F, ' ' );
uint32 copy_len = strlen( owncall2 );
if ( copy_len > 4 )
copy_len = 4;
strncpy( _dstar->outgoing_header.own_call2, string, copy_len );
}
dstar_dumpHeader( &( _dstar->outgoing_header ) );
}
void sched_waveform_setMessage( uint32 slice, const char * message)
{
/* Ignore slice for now */
char string[SLOW_DATA_MESSAGE_LENGTH_BYTES + 1 ];
strncpy( string, message, SLOW_DATA_MESSAGE_LENGTH_BYTES + 1);
charReplace( string, ' ', ( char ) 0x7F );
memset(_dstar->slow_encoder->message, ' ', SLOW_DATA_MESSAGE_LENGTH_BYTES);
/* We limit the copy to the string length so that
* we can fill the rest of the string with spaces to
* comply with DSTAR
*/
uint32 copy_len = strlen( string );
if ( copy_len > SLOW_DATA_MESSAGE_LENGTH_BYTES )
copy_len = SLOW_DATA_MESSAGE_LENGTH_BYTES;
strncpy(_dstar->slow_encoder->message, string, copy_len);
memset(_dstar->slow_encoder->message, ' ', SLOW_DATA_MESSAGE_LENGTH_BYTES);
/* Enforce termination */
_dstar->slow_encoder->message[SLOW_DATA_MESSAGE_LENGTH_BYTES] = '\0';
/* Ignore slice for now */
if (strlen(message) > 0)
{
strncpy( string, message, SLOW_DATA_MESSAGE_LENGTH_BYTES);
string[SLOW_DATA_MESSAGE_LENGTH_BYTES] = 0;
charReplace( string, ( char ) 0x7F, ' ' );
uint32 copy_len = strlen( string );
if ( copy_len > SLOW_DATA_MESSAGE_LENGTH_BYTES )
copy_len = SLOW_DATA_MESSAGE_LENGTH_BYTES;
strncpy(_dstar->slow_encoder->message, string, copy_len);
}
output( "TX Message: '%s'\n", _dstar->slow_encoder->message );
}
void sched_waveform_setFD( int fd ) {
@ -520,8 +521,16 @@ static void * _sched_waveform_thread( void * param ) {
for ( j = 0 ; j < nout ; j++ )
cbWriteShort( RX3_cb, speech_out[j] );
}
if (_dstar->rx_state == END_PATTERN)
{
char msg[64];
sprintf( msg, "waveform status slice=%d RX=END", _dstar->slice);
tc_sendSmartSDRcommand( msg, FALSE, NULL );
}
}
// Check for >= 160 samples in RX3_cb, convert to floats
// and spin the upsampler. Move output to RX4_cb.

View file

@ -603,7 +603,8 @@ void dstar_updateStatus( DSTAR_MACHINE machine, uint32 slice, enum STATUS_TYPE
}
char status[200] = {0};
char header_string[200] = {0};
char header_string[256] = {0};
char message_string[21];
/* Make copy to replace spaces with special char */
@ -634,19 +635,30 @@ void dstar_updateStatus( DSTAR_MACHINE machine, uint32 slice, enum STATUS_TYPE
charReplace( ( char * )h.destination_rptr, ' ', ( char ) 0x7F );
charReplace( ( char * )h.departure_rptr, ' ', ( char ) 0x7F );
charReplace( ( char * )h.companion_call, ' ', ( char ) 0x7F );
charReplace((char *) h.companion_call, ' ', ( char ) 0x7F );
charReplace( ( char * )h.own_call1, ' ', ( char ) 0x7F );
charReplace( ( char * )h.own_call2, ' ', ( char ) 0x7F );
sprintf( header_string, "destination_rptr_tx=%s departure_rptr_tx=%s companion_call_tx=%s own_call1_tx=%s own_call2_tx=%s",
h.destination_rptr, h.departure_rptr, h.companion_call, h.own_call1, h.own_call2 );
if (machine->slow_encoder != NULL && machine->slow_encoder->message[0] != 0)
{
memcpy( message_string, machine->slow_encoder->message, sizeof( message_string ) );
message_string[sizeof( message_string ) - 1] = 0;
charReplace( message_string, ' ', ( char ) 0x7F );
sprintf( header_string + strlen(header_string), " message_tx=%s", message_string);
}
sprintf( status, "waveform status slice=%d %s", slice, header_string );
tc_sendSmartSDRcommand( status, FALSE, NULL );
break;
case STATUS_SLOW_DATA_MESSAGE:
sprintf( status, "waveform status slice=%d message=%s", slice, machine->slow_decoder->message_string);
memcpy( message_string, machine->slow_decoder->message_string, sizeof( message_string ) );
message_string[sizeof( message_string ) - 1] = 0;
charReplace( message_string, ' ', ( char ) 0x7F );
sprintf( status, "waveform status slice=%d message=%s", slice, message_string);
tc_sendSmartSDRcommand( status, FALSE, NULL );
break;
}

321
DSP_API/ThumbDV/slow_data.c Normal file
View file

@ -0,0 +1,321 @@
///*! \file slow_data.c
// *
// * Handles scrambling and descrambling of DSTAR Header
// *
// * \date 25-AUG-2015
// * \author Ed Gonzalez KG5FBT
// */
/* *****************************************************************************
*
* Copyright (C) 2012-2014 FlexRadio Systems.
*
* 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/>.
*
* Contact Information:
* email: gpl<at>flexradiosystems.com
* Mail: FlexRadio Systems, Suite 1-150, 4616 W. Howard LN, Austin, TX 78728
*
* ************************************************************************** */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "slow_data.h"
#include "DStarDefines.h"
#include "dstar.h"
#include "gmsk_modem.h"
#include "thumbDV.h"
uint32 slow_data_createDecoder(SLOW_DATA_DECODER slow_decoder)
{
SLOW_DATA_DECODER decoder = ( SLOW_DATA_DECODER ) safe_malloc(sizeof(slow_data_decoder)) ;
if ( decoder == NULL ) {
output("Could not allocate slow data decoder\n");
return FAIL;
}
memset(decoder, 0, sizeof(slow_data_decoder));
decoder->decode_state = FIRST_FRAME;
slow_decoder = decoder;
return SUCCESS;
}
static void _slow_data_processHeaderBytes(DSTAR_MACHINE dstar)
{
uint32 i = 0;
dstar_pfcs pfcs;
pfcs.crc16 = 0xFFFF;
SLOW_DATA_DECODER slow_decoder = (SLOW_DATA_DECODER) dstar->slow_decoder;
BOOL bits[RADIO_HEADER_LENGTH_BITS] = {0};
gmsk_bytesToBits(slow_decoder->header_bytes, bits, RADIO_HEADER_LENGTH_BITS);
for ( i = 0 ; i < 312 ; i += 8 ) {
dstar_pfcsUpdate( &pfcs, bits + i);
}
BOOL pfcs_match = FALSE;
pfcs_match = dstar_pfcsCheck( &pfcs, bits + 312 );
if ( pfcs_match ) {
output("SLOW DATA HEADER PARSED\n");
dstar_processHeader(slow_decoder->header_bytes, &dstar->incoming_header);
dstar_updateStatus( dstar, dstar->slice, STATUS_RX );
}
slow_data_resetDecoder(dstar);
}
static void _slow_data_processMessage(DSTAR_MACHINE dstar)
{
char message[21];
uint32 i, j;
for ( i = 0 ; i < 4 ; i++ ) {
for ( j = 0 ; j < 5 ; j++ ) {
message[(i*5) + j] = dstar->slow_decoder->message[i][j];
}
}
message[20] = '\0';
strncpy(dstar->slow_decoder->message_string, message, 21);
output("SLOW DATA MESSAGE PARSED = '%s'\n", message);
dstar_updateStatus(dstar, dstar->slice, STATUS_SLOW_DATA_MESSAGE);
slow_data_resetDecoder(dstar);
}
void slow_data_createEncodeBytes(DSTAR_MACHINE dstar)
{
uint32 i = 0;
uint32 j = 0;
SLOW_DATA_ENCODER encoder = dstar->slow_encoder;
uint32 message_index = 0;
dstar_pfcs pfcs;
/* Set all bytes to 0x66 */
memset(encoder->message_bytes, 0x66, SLOW_DATA_PACKET_LEN_BYTES * FRAMES_BETWEEN_SYNC);
/* Generate Message Bytes */
for ( i = 0 ; i < 4 ; i++ ) {
encoder->message_bytes[(i * 6)] = SLOW_DATA_TYPE_MESSAGE | i;
for ( j = 1 ; j < 6 ; j++ ) {
encoder->message_bytes[(i * 6) + j] = encoder->message[message_index++];
}
}
thumbDV_dump("MESSAGE BYTES", encoder->message_bytes, SLOW_DATA_PACKET_LEN_BYTES * FRAMES_BETWEEN_SYNC);
/* Generate HEADER Bytes */
/* Set all bytes to 0x66 */
memset(encoder->header_bytes, 0x66, SLOW_DATA_PACKET_LEN_BYTES * FRAMES_BETWEEN_SYNC);
uint32 header_index = 0;
unsigned char header_bytes[RADIO_HEADER_LENGTH_BYTES] = {0};
dstar_headerToBytes(&dstar->outgoing_header, header_bytes);
pfcs.crc16 = 0xFFFF;
dstar_pfcsUpdateBuffer( &pfcs, header_bytes, 312 / 8 );
dstar_pfcsResult( &pfcs, header_bytes + 312 / 8 );
uint32 bits_left = RADIO_HEADER_LENGTH_BYTES;
uint32 second_loop_limit = 0;
for ( i = 0 ; i < RADIO_HEADER_LENGTH_BYTES / 5 + 1; i++ ) {
if ( bits_left >= 5 )
second_loop_limit = 6;
else
second_loop_limit = bits_left;
encoder->header_bytes[(i * 6)] = SLOW_DATA_TYPE_HEADER | (second_loop_limit - 1);
for ( j = 1 ; j < second_loop_limit ; j++ ) {
encoder->header_bytes[(i * 6) + j] = header_bytes[header_index++];
}
bits_left -= 5;
}
thumbDV_dump("Header bytes", encoder->header_bytes, SLOW_DATA_PACKET_LEN_BYTES * FRAMES_BETWEEN_SYNC);
slow_data_resetEncoder(dstar);
}
void slow_data_getEncodeBytes( DSTAR_MACHINE dstar, unsigned char * bytes , uint32 num_bytes)
{
uint32 i = 0;
memset(bytes, 0x66, num_bytes);
SLOW_DATA_ENCODER encoder = dstar->slow_encoder;
switch ( encoder->encode_state ) {
case MESSAGE_TX:
if ( encoder->message_index != 0 && encoder->message_index % 3 != 0 ) {
output("Message indexing problem. message_index = %d\n", encoder->message_index);
slow_data_resetEncoder(dstar);
break;
}
for ( i = 0 ; i < SLOW_DATA_PACKET_LEN_BYTES ; i++ ) {
bytes[i] = encoder->message_bytes[encoder->message_index++];
}
if ( encoder->message_index >= SLOW_DATA_PACKET_LEN_BYTES * FRAMES_BETWEEN_SYNC ) {
/* Done sending the message change to header state */
encoder->message_index = 0;
encoder->encode_state = HEADER_TX;
}
break;
case HEADER_TX:
if ( encoder->header_index != 0 && encoder->header_index % 3 != 0 ) {
output("Header indexing problem. header_index = %d\n", encoder->header_index);
slow_data_resetEncoder(dstar);
break;
}
for ( i = 0 ; i < SLOW_DATA_PACKET_LEN_BYTES ; i++ ) {
bytes[i] = encoder->header_bytes[encoder->header_index++];
}
if ( encoder->header_index >= SLOW_DATA_PACKET_LEN_BYTES * FRAMES_BETWEEN_SYNC ) {
/* Done sending header. Reset index and keep sending header slow data */
encoder->header_index = 0;
}
break;
}
}
void slow_data_resetEncoder(DSTAR_MACHINE dstar)
{
dstar->slow_encoder->encode_state = MESSAGE_TX;
dstar->slow_encoder->message_index = 0;
dstar->slow_encoder->header_index = 0;
}
void slow_data_resetDecoder(DSTAR_MACHINE dstar)
{
dstar->slow_decoder->decode_state = FIRST_FRAME;
dstar->slow_decoder->header_array_index = 0;
dstar->slow_decoder->message_index = 0;
}
void slow_data_addDecodeData(DSTAR_MACHINE dstar, unsigned char * data, uint32 data_len)
{
if ( data_len != SLOW_DATA_PACKET_LEN_BYTES ) {
output("Invalid data length - slow_data_addData\n");
return;
}
SLOW_DATA_DECODER slow_decoder = (SLOW_DATA_DECODER) (dstar->slow_decoder);
if ( slow_decoder == NULL ) {
output("NULL slow_decoder\n");
return;
}
uint32 i = 0;
switch(slow_decoder->decode_state) {
case FIRST_FRAME:
{
//output("FIRST FRAME\n");
switch(data[0] & SLOW_DATA_TYPE_MASK ) {
case SLOW_DATA_TYPE_HEADER:
{
for ( i = 1 ; i < 3 ; i++ ) {
slow_decoder->header_bytes[slow_decoder->header_array_index++] =
data[i];
if ( slow_decoder->header_array_index >= RADIO_HEADER_LENGTH_BYTES )
{
_slow_data_processHeaderBytes(dstar);
break;
}
}
slow_decoder->decode_state = HEADER_SECOND_FRAME;
break;
}
case SLOW_DATA_TYPE_MESSAGE:
{
uint32 message_index = data[0] & SLOW_DATA_LENGTH_MASK;
if ( message_index != slow_decoder->message_index ) {
output("Out of order SLOW DATA MESSAGE SKIPPING\n");
slow_decoder->message_index = 0;
break;
}
for ( i = 1 ; i < 3 ; i++ ) {
slow_decoder->message[message_index][i - 1 ] = data[i];
}
slow_decoder->decode_state = MESSAGE_SECOND_FRAME;
break;
}
default:
//output("SLOW DATA BYTES 0x%X 0x%X 0x%X \n", data[0], data[1], data[2]);
break;
}
break;
}
case HEADER_SECOND_FRAME:
{
//output("HEADER SECOND FRAME\n");
if ( slow_decoder->header_array_index == 0 ) {
/* We reached the end of the array so we need to reset and find the first frame again */
slow_decoder->decode_state = FIRST_FRAME;
break;
}
for ( i = 0 ; i < 3 ; i++ ) {
slow_decoder->header_bytes[slow_decoder->header_array_index++] =
data[i];
if ( slow_decoder->header_array_index >= RADIO_HEADER_LENGTH_BYTES )
{
_slow_data_processHeaderBytes(dstar);
break;
}
}
slow_decoder->decode_state = FIRST_FRAME;
break;
}
case MESSAGE_SECOND_FRAME:
{
for ( i = 0 ; i < 3 ; i++ ) {
slow_decoder->message[slow_decoder->message_index][i+2] = data[i];
}
slow_decoder->message_index++;
if ( slow_decoder->message_index >= 4 ) {
_slow_data_processMessage(dstar);
}
slow_decoder->decode_state = FIRST_FRAME;
break;
}
}
}

View file

@ -0,0 +1,43 @@
///*! \file slow_data.h
// *
// * Handles scrambling and descrambling of DSTAR Header
// *
// * \date 25-AUG-2015
// * \author Ed Gonzalez KG5FBT
// */
/* *****************************************************************************
*
* Copyright (C) 2012-2014 FlexRadio Systems.
*
* 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/>.
*
* Contact Information:
* email: gpl<at>flexradiosystems.com
* Mail: FlexRadio Systems, Suite 1-150, 4616 W. Howard LN, Austin, TX 78728
*
* ************************************************************************** */
#ifndef THUMBDV_SLOW_DATA_H_
#define THUMBDV_SLOW_DATA_H_
#include "dstar.h"
#include "common.h"
#include "DStarDefines.h"
void slow_data_addDecodeData(DSTAR_MACHINE dstar, unsigned char * data, uint32 data_len);
void slow_data_resetDecoder(DSTAR_MACHINE dstar);
void slow_data_resetEncoder(DSTAR_MACHINE dstar);
void slow_data_getEncodeBytes( DSTAR_MACHINE dstar, unsigned char * bytes, uint32 num_bytes );
void slow_data_createEncodeBytes(DSTAR_MACHINE dstar);
#endif /* THUMBDV_SLOW_DATA_H_*/

View file

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="CODEC2_GUI.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/>
</sectionGroup>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="CODEC2_GUI.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
</startup>
<userSettings>
<CODEC2_GUI.Properties.Settings>
<setting name="URList" serializeAs="String">
<value />
</setting>
<setting name="MainPosition" serializeAs="String">
<value />
</setting>
<setting name="RPT1List" serializeAs="String">
<value />
</setting>
<setting name="RPT2List" serializeAs="String">
<value />
</setting>
<setting name="MYCallSign" serializeAs="String">
<value />
</setting>
<setting name="MESSAGEList" serializeAs="String">
<value />
</setting>
</CODEC2_GUI.Properties.Settings>
</userSettings>
<applicationSettings>
<CODEC2_GUI.Properties.Settings>
<setting name="LogEntryMax" serializeAs="String">
<value>1000</value>
</setting>
</CODEC2_GUI.Properties.Settings>
</applicationSettings>
</configuration>

View file

@ -0,0 +1,120 @@
/*******************************************************************************
* AssemblyInfo.cs
*
* Helper class that holds Assembly Info
*
* Created on: 2015-08-23
* Author: Mark Hanson / AA3RK / MKCM Software, LLC.
*
*
*******************************************************************************
*
* Copyright (C) 2015 FlexRadio Systems.
* 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/>.
*
* Contact: gpl<AT>flexradio<DOT>com or
*
* GPL C/O FlexRadio Systems
* 4616 W. Howard Lane
* Suite 1-150
* Austin, TX USA 78728
*
******************************************************************************/
using System;
using System.IO;
using System.Reflection;
namespace CODEC2_GUI
{
public class AssemblyInfo
{
public AssemblyInfo(Assembly assembly)
{
if (assembly == null)
throw new ArgumentNullException("assembly");
this.assembly = assembly;
}
private readonly Assembly assembly;
/// <summary>
/// Gets the title property
/// </summary>
public string ProductTitle
{
get
{
return GetAttributeValue<AssemblyTitleAttribute>(a => a.Title,
Path.GetFileNameWithoutExtension(assembly.CodeBase));
}
}
/// <summary>
/// Gets the application's version
/// </summary>
public string Version
{
get
{
string result = string.Empty;
Version version = assembly.GetName().Version;
if (version != null)
return version.ToString();
else
return "1.0.0.0";
}
}
/// <summary>
/// Gets the description about the application.
/// </summary>
public string Description
{
get { return GetAttributeValue<AssemblyDescriptionAttribute>(a => a.Description); }
}
/// <summary>
/// Gets the product's full name.
/// </summary>
public string Product
{
get { return GetAttributeValue<AssemblyProductAttribute>(a => a.Product); }
}
/// <summary>
/// Gets the copyright information for the product.
/// </summary>
public string Copyright
{
get { return GetAttributeValue<AssemblyCopyrightAttribute>(a => a.Copyright); }
}
/// <summary>
/// Gets the company information for the product.
/// </summary>
public string Company
{
get { return GetAttributeValue<AssemblyCompanyAttribute>(a => a.Company); }
}
protected string GetAttributeValue<TAttr>(Func<TAttr,
string> resolveFunc, string defaultResult = null) where TAttr : Attribute
{
object[] attributes = assembly.GetCustomAttributes(typeof(TAttr), false);
if (attributes.Length > 0)
return resolveFunc((TAttr)attributes[0]);
else
return defaultResult;
}
}
}

View file

@ -0,0 +1,524 @@
/*******************************************************************************
* DstarInfo.cs
*
* Helper class which collects DSTAR information
*
* Created on: 2015-08-22
* Author: Mark Hanson / AA3RK / MKCM Software, LLC.
*
*
*******************************************************************************
*
* Copyright (C) 2015 FlexRadio Systems.
* 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/>.
*
* Contact: gpl<AT>flexradio<DOT>com or
*
* GPL C/O FlexRadio Systems
* 4616 W. Howard Lane
* Suite 1-150
* Austin, TX USA 78728
*
******************************************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using System.IO;
using System.Net.Http.Headers;
using System.Reflection;
using System.Xml;
namespace CODEC2_GUI
{
public class DstarInfo
{
public DstarInfo()
{
}
private static HttpClient _client;
private static HttpClient client
{
get
{
if (_client == null)
_client = new HttpClient() { BaseAddress = new Uri("http://apps.dstarinfo.com") };
return _client;
}
}
private static string eventvalidation;
private static string viewstate;
private static string viewstategenerator;
private List<ReflectorOrRepeater> Repeaters_;
public List<ReflectorOrRepeater> Repeaters
{
get
{
if (Repeaters_ == null)
{
LoadRepeaters();
if (Repeaters_ == null)
Repeaters_ = new List<ReflectorOrRepeater>();
}
return Repeaters_;
}
}
private List<ReflectorOrRepeater> Reflectors_;
public List<ReflectorOrRepeater> Refelectors
{
get
{
if (Reflectors_ == null)
{
LoadReflectors();
if (Reflectors_ == null || Reflectors_.Count == 0)
{
try
{
FetchAndSaveReflectorList();
}
catch { }
}
}
return Reflectors_;
}
}
public bool FetchAndSaveRepeaterList(string area)
{
bool result = false;
try
{
List<ReflectorOrRepeater> rptrs = GetDStarRepeaterByArea(area);
if (rptrs != null && rptrs.Count > 0)
{
SaveRepeaters(rptrs);
Repeaters_ = rptrs;
result = true;
}
}
catch (Exception ex)
{
string msg = "Fetch and save Repeater list failed!";
System.Diagnostics.Debug.WriteLine(string.Format("{0} {1}", msg, ex.Message));
throw new ApplicationException(msg, ex);
}
return result;
}
public bool FetchAndSaveReflectorList()
{
bool result = false;
try
{
List<ReflectorOrRepeater> refs = GetDStarInfoReflectors();
if (refs != null && refs.Count > 0)
{
SaveReflectors(refs);
Reflectors_ = refs;
result = true;
}
}
catch(Exception ex)
{
string msg = "Fetch and save Relflector list failed!";
System.Diagnostics.Debug.WriteLine(string.Format("{0} {1}", msg, ex.Message));
throw new ApplicationException(msg, ex);
}
return result;
}
public List<string> GetDStarRepeaterAreas()
{
List<string> rptareas = new List<string>();
string htmlAreas = string.Empty;
try
{
if (client != null)
{
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "D-STAR_Repeater_List.aspx");
Task<HttpResponseMessage> resp = client.SendAsync(request);
resp.Wait();
resp.Result.EnsureSuccessStatusCode();
Task<Stream> strm = resp.Result.Content.ReadAsStreamAsync();
strm.Wait();
using (StreamReader sr = new StreamReader(strm.Result, System.Text.Encoding.UTF8))
{
htmlAreas = sr.ReadToEnd();
}
}
viewstate = getHiddenValues(htmlAreas, "id=\"__VIEWSTATE\" value=\"");
viewstategenerator = getHiddenValues(htmlAreas, "id=\"__VIEWSTATEGENERATOR\" value=\"");
eventvalidation = getHiddenValues(htmlAreas, "id=\"__EVENTVALIDATION\" value=\"");
// parsing HTML select of areas
// start by finding "<select name=\"Countries1\""
int ofs = htmlAreas.IndexOf("<select name=\"Countries1\"");
if (ofs > 0)
{
// find end of select
int ofs2 = htmlAreas.IndexOf("</select>", ofs + 23);
if (ofs2 > 0)
{
string selVals = htmlAreas.Substring(ofs, ofs2 - ofs);
int ofs3 = 0;
int ofs4 = 0;
while (ofs4 < selVals.Length)
{
ofs4 = selVals.IndexOf("<option ", ofs3);
if (ofs4 > 0)
{
ofs4 += 8;
ofs3 = selVals.IndexOf("value=\"", ofs4);
if (ofs3 > 0)
{
ofs3 += 7;
ofs4 = selVals.IndexOf("\"", ofs3);
string val = selVals.Substring(ofs3, ofs4 - ofs3);
val = System.Net.WebUtility.HtmlDecode(val);
ofs3 = ofs4;
rptareas.Add(val);
}
}
else
break;
}
}
}
}
catch (Exception ex)
{
string msg = "Fetch Repeater Areas list failed!";
System.Diagnostics.Debug.WriteLine(string.Format("{0} {1}", msg, ex.Message));
throw new ApplicationException(msg, ex);
}
return rptareas;
}
private string getHiddenValues(string str, string prefix)
{
int ofs = str.IndexOf(prefix);
if (ofs > 0)
{
ofs += prefix.Length;
int ofs2 = str.IndexOf("\"", ofs);
if (ofs2 > ofs)
{
return str.Substring(ofs, ofs2 - ofs);
}
}
return null;
}
public List<ReflectorOrRepeater> GetDStarRepeaterByArea(string area)
{
string htmlRptrs = string.Empty;
if (client != null)
{
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "D-STAR_Repeater_List.aspx");
request.Content = new FormUrlEncodedContent(new [] {
new KeyValuePair<string, string>("__EVENTARGUMENT", string.Empty),
new KeyValuePair<string, string>("__EVENTTARGET", "Countries1"),
new KeyValuePair<string, string>("__EVENTVALIDATION", eventvalidation ?? string.Empty),
new KeyValuePair<string, string>("__LASTFOCUS", string.Empty),
new KeyValuePair<string, string>("__VIEWSTATE", viewstate ?? string.Empty),
new KeyValuePair<string, string>("__VIEWSTATEENCRYPTED", string.Empty),
new KeyValuePair<string, string>("__VIEWSTATEGENERATOR", viewstategenerator ?? string.Empty),
new KeyValuePair<string, string>("Countries1", System.Net.WebUtility.HtmlEncode(area)),
});
Task<HttpResponseMessage> resp = client.SendAsync(request);
resp.Wait();
resp.Result.EnsureSuccessStatusCode();
Task<Stream> strm = resp.Result.Content.ReadAsStreamAsync();
strm.Wait();
using (StreamReader sr = new StreamReader(strm.Result, System.Text.Encoding.UTF8))
{
htmlRptrs = sr.ReadToEnd();
}
}
List<ReflectorOrRepeater> rptr = new List<ReflectorOrRepeater>();
// parsing HTML table of repeaters
// find the start of table of repeaters
int ofs = htmlRptrs.IndexOf("<table id=\"ListView1_itemPlaceholderContainer\"");
if (ofs > 0)
{
// find end of table
int ofs2 = htmlRptrs.IndexOf("</table>", ofs + 46);
if (ofs2 > 0)
{
string selVals = htmlRptrs.Substring(ofs, ofs2 - ofs + 8);
// fix improper ampersand html encoding
string[] doms = System.Text.RegularExpressions.Regex.Split(selVals, @"&(?!\w{1,3};)");
selVals = string.Join("&amp;", doms);
XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n" + selVals);
XmlNodeList xnl = xdoc.SelectNodes("//tr");
foreach (XmlNode xn in xnl)
{
ReflectorOrRepeater rr = new ReflectorOrRepeater();
string city = null;
string cty_state = null;
string modC = null;
string modB = null;
string modA = null;
XmlNodeList dnl = xn.SelectNodes("descendant::span");
foreach (XmlNode dn in dnl)
{
foreach (XmlAttribute xa in dn.Attributes)
{
if (xa.Name == "id")
{
if (xa.Value.StartsWith("ListView1_CityLabel"))
city = dn.InnerText;
else if (xa.Value.StartsWith("ListView1_CountryStateLabel"))
cty_state = dn.InnerText;
else if (xa.Value.StartsWith("ListView1_C_ModLabel"))
modC = dn.InnerText;
else if (xa.Value.StartsWith("ListView1_B_ModLabel"))
modB = dn.InnerText;
else if (xa.Value.StartsWith("ListView1_A_ModLabel"))
modA = dn.InnerText;
}
}
}
XmlNode fn = xn.FirstChild; // td
if (fn != null)
fn = fn.FirstChild; // a
if (fn != null && fn.Attributes != null)
{
XmlAttribute xlnk = fn.Attributes["href"];
if (xlnk != null)
{
string lnk = xlnk.Value;
if (!string.IsNullOrEmpty(lnk))
{
int idx = lnk.IndexOf("?Repeater=");
if (idx > 0)
{
string cs = System.Net.WebUtility.UrlDecode(lnk.Substring(idx + 10));
rr.Name = cs;
rr.Desc = string.Format("{0}|{1}|C:{2}|B:{3}|A:{4}", city ?? string.Empty, cty_state ?? string.Empty, modC ?? string.Empty, modB ?? string.Empty, modA ?? string.Empty);
rptr.Add(rr);
}
}
}
}
}
}
}
return rptr;
}
private List<ReflectorOrRepeater> GetDStarInfoReflectors()
{
string htmlReflector = string.Empty;
if (client != null)
{
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "reflectors.aspx");
Task<HttpResponseMessage> resp = client.SendAsync(request);
resp.Wait();
resp.Result.EnsureSuccessStatusCode();
Task<Stream> strm = resp.Result.Content.ReadAsStreamAsync();
strm.Wait();
using (StreamReader sr = new StreamReader(strm.Result, System.Text.Encoding.UTF8))
{
htmlReflector = sr.ReadToEnd();
}
}
List<ReflectorOrRepeater> refs = new List<ReflectorOrRepeater>();
int ofs = htmlReflector.IndexOf("<table>");
if (ofs > 0)
ofs = htmlReflector.IndexOf("<table", ofs + 7);
if (ofs > 0)
{
// find end of name span
int ofs2 = htmlReflector.IndexOf("</table>", ofs + 7);
if (ofs2 > 0)
{
string dom = htmlReflector.Substring(ofs, ofs2 - ofs + 8)
.Replace("target=_blank", string.Empty); // format issue for xml parse
// fix improper ampersand html encoding
string[] doms = System.Text.RegularExpressions.Regex.Split(dom, @"&(?!\w{1,3};)");
dom = string.Join("&amp;", doms);
XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n" + dom);
XmlNodeList xnl = xdoc.SelectNodes("//tr");
foreach (XmlNode xn in xnl)
{
ReflectorOrRepeater rr = new ReflectorOrRepeater();
string refl = null;
string loc = null;
XmlNodeList dnl = xn.SelectNodes("descendant::span");
foreach (XmlNode dn in dnl)
{
foreach (XmlAttribute xa in dn.Attributes)
{
if (xa.Name == "id")
{
if (xa.Value.StartsWith("ListView1_ReflectorLabel"))
refl = dn.InnerText;
else if (xa.Value.StartsWith("ListView1_LocationLabel"))
loc = dn.InnerText;
}
}
}
if (!string.IsNullOrEmpty(refl))
{
rr.Name = refl;
rr.Desc = loc ?? string.Empty;
refs.Add(rr);
}
}
}
}
return refs;
}
private void SaveRepeaters(List<ReflectorOrRepeater> refs)
{
if (refs == null || refs.Count == 0)
return;
string fname = GetBaseAppDataPath("Repeaters.txt");
using (StreamWriter sw = new StreamWriter(fname))
{
foreach (ReflectorOrRepeater rf in refs)
{
sw.WriteLine("{0}|{1}", rf.Name, rf.Desc);
}
sw.Close();
}
}
private void SaveReflectors(List<ReflectorOrRepeater> refs)
{
if (refs == null || refs.Count == 0)
return;
string fname = GetBaseAppDataPath("Reflectors.txt");
using (StreamWriter sw = new StreamWriter(fname))
{
foreach (ReflectorOrRepeater rf in refs)
{
sw.WriteLine("{0}|{1}", rf.Name, rf.Desc);
}
sw.Close();
}
}
private void LoadRepeaters()
{
try
{
string fname = GetBaseAppDataPath("Repeaters.txt");
List<ReflectorOrRepeater> refs = new List<ReflectorOrRepeater>();
using (StreamReader sr = new StreamReader(fname))
{
while (!sr.EndOfStream)
{
string line = sr.ReadLine();
string[] vals = line.Split('|');
if (vals.Length >= 2)
{
refs.Add(new ReflectorOrRepeater() { Name = vals[0], Desc = string.Join("|", vals, 1, vals.Length - 1) });
}
}
sr.Close();
}
Repeaters_ = refs;
}
catch { }
}
private void LoadReflectors()
{
try
{
string fname = GetBaseAppDataPath("Reflectors.txt");
List<ReflectorOrRepeater> refs = new List<ReflectorOrRepeater>();
using (StreamReader sr = new StreamReader(fname))
{
while (!sr.EndOfStream)
{
string line = sr.ReadLine();
string[] vals = line.Split('|');
if (vals.Length == 2)
{
refs.Add(new ReflectorOrRepeater() { Name = vals[0], Desc = vals[1] });
}
}
sr.Close();
}
Reflectors_ = refs;
}
catch { }
}
private static string rootappdata;
private static string GetBaseAppDataPath(string fname)
{
if (rootappdata == null)
{
string basepath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
AssemblyInfo ai = new AssemblyInfo(Assembly.GetAssembly(typeof(MainForm)));
string mybasepath = System.IO.Path.Combine(basepath, ai.Company.Replace(' ', '_'), ai.ProductTitle.Replace(' ', '_'));
if (!System.IO.Directory.Exists(mybasepath))
System.IO.Directory.CreateDirectory(mybasepath);
rootappdata = mybasepath;
}
return System.IO.Path.Combine(rootappdata, fname);
}
}
}

View file

@ -1,63 +0,0 @@
namespace CODEC2_GUI
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.label1 = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(196, 105);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(123, 13);
this.label1.TabIndex = 0;
this.label1.Text = "No DSTAR (DSTR) Slice";
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(519, 236);
this.Controls.Add(this.label1);
this.Name = "Form1";
this.Text = "DSTAR";
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label label1;
}
}

View file

@ -1,758 +0,0 @@
/*******************************************************************************
* Form1.cs
*
* An example GUI showing how to interface to the FlexRadio Modem API
*
* Created on: 2014-08-28
* Author: Eric / KE5DTO
*
*******************************************************************************
*
* Copyright (C) 2014 FlexRadio Systems.
* 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/>.
*
* Contact: gpl<AT>flexradio<DOT>com or
*
* GPL C/O FlexRadio Systems
* 4616 W. Howard Lane
* Suite 1-150
* Austin, TX USA 78728
*
******************************************************************************/
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Flex.Smoothlake.FlexLib;
namespace CODEC2_GUI
{
public partial class Form1 : Form
{
private bool _radioConnected = false;
private Radio _radio = null;
//private List<Slice> _slices;
private List<Slice> _waveformSlices;
public Form1()
{
InitializeComponent();
_waveformSlices = new List<Slice>();
}
private void Form1_Load(object sender, EventArgs e)
{
API.RadioAdded += new API.RadioAddedEventHandler(API_RadioAdded);
API.RadioRemoved += new API.RadioRemovedEventHandler(API_RadioRemoved);
API.Init();
}
//*************************************
// API Event Handlers
//*************************************
void API_RadioAdded(Radio radio)
{
// if we have already connected to another radio, ignore this one
if(_radioConnected) return;
// set the flag so that we don't try to connect to other radios
_radioConnected = true;
// save a reference to the radio
_radio = radio;
// attach Slice event handlers
_radio.SliceAdded += new Radio.SliceAddedEventHandler(_radio_SliceAdded);
_radio.SliceRemoved += new Radio.SliceRemovedEventHandler(_radio_SliceRemoved);
// connect to the radio
_radio.Connect();
}
void API_RadioRemoved(Radio radio)
{
}
//*************************************
// Radio Event Handlers
//*************************************
void _radio_SliceAdded(Slice slc)
{
//if(_slices.Contains(slc)) return;
//_slices.Add(slc);
slc.PropertyChanged += new PropertyChangedEventHandler(slc_PropertyChanged);
slc.WaveformStatusReceived += new Slice.WaveformStatusReceivedEventHandler(slc_WaveformStatusReceived);
if (InvokeRequired)
{
Invoke(new MethodInvoker(delegate
{
CheckDemodMode(slc);
}));
}
else
{
CheckDemodMode(slc);
}
}
void _radio_SliceRemoved(Slice slc)
{
if (_waveformSlices.Contains(slc))
{
// yes -- tear down any GUI components
if (InvokeRequired)
{
Invoke(new MethodInvoker(delegate
{
RemoveWaveformSliceControls(slc);
}));
}
else
{
RemoveWaveformSliceControls(slc);
}
// now remove it
_waveformSlices.Remove(slc);
}
slc.PropertyChanged -= slc_PropertyChanged;
slc.WaveformStatusReceived -= slc_WaveformStatusReceived;
}
//*************************************
// Slice Event Handlers
//*************************************
void slc_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (InvokeRequired)
{
Invoke(new MethodInvoker(delegate
{
slc_PropertyChanged(sender, e.PropertyName);
}));
}
else
{
slc_PropertyChanged(sender, e.PropertyName);
}
}
void slc_PropertyChanged(object sender, string property_name)
{
Slice slc = sender as Slice;
if (slc == null) return;
switch (property_name)
{
case "DemodMode":
// Is the mode set to FreeDV?
CheckDemodMode(slc);
break;
}
}
private void CheckDemodMode(Slice slc)
{
if (slc.DemodMode == "DSTR")
{
// yes -- is this Slice already in the list?
if (!_waveformSlices.Contains(slc))
{
// no -- lets go add it
_waveformSlices.Add(slc);
slc.SendWaveformCommand("status");
// now create GUI components to go with it
AddFDVSliceControls(slc);
}
}
else
{
// was this Slice in FreeDV mode before?
if (_waveformSlices.Contains(slc))
{
// yes -- tear down any GUI components
RemoveWaveformSliceControls(slc);
// now remove it
_waveformSlices.Remove(slc);
}
}
}
void slc_WaveformStatusReceived(Slice slc, string status)
{
string[] words = status.Split(' ');
foreach (string kv in words)
{
string[] tokens = kv.Split('=');
if (tokens.Length != 2)
{
continue;
}
string key = tokens[0];
string value = tokens[1];
value = value.Replace('\u007f', ' ');
Control c = null;
TextBox txtbox = null;
switch (key.ToLower())
{
case "destination_rptr_rx":
c = FindControlByName(this, "destinationRptrOut" + slc.Index);
if (c == null) continue;
txtbox = c as TextBox;
if (txtbox == null) continue;
if (InvokeRequired)
{
Invoke(new MethodInvoker(delegate
{
txtbox.Text = value;
}));
}
else
{
txtbox.Text = value;
}
break;
case "departure_rptr_rx":
c = FindControlByName(this, "departureRptrOut" + slc.Index);
if (c == null) continue;
txtbox = c as TextBox;
if (txtbox == null) continue;
if (InvokeRequired)
{
Invoke(new MethodInvoker(delegate
{
txtbox.Text = value;
}));
}
else
{
txtbox.Text = value;
}
break;
case "companion_call_rx":
c = FindControlByName(this, "companionCallOut" + slc.Index);
if (c == null) continue;
txtbox = c as TextBox;
if (txtbox == null) continue;
if (InvokeRequired)
{
Invoke(new MethodInvoker(delegate
{
txtbox.Text = value;
}));
}
else
{
txtbox.Text = value;
}
break;
case "own_call1_rx":
c = FindControlByName(this, "ownCall1Out" + slc.Index);
if (c == null) continue;
txtbox = c as TextBox;
if (txtbox == null) continue;
if (InvokeRequired)
{
Invoke(new MethodInvoker(delegate
{
txtbox.Text = value;
}));
}
else
{
txtbox.Text = value;
}
break;
case "own_call2_rx":
c = FindControlByName(this, "ownCall2Out" + slc.Index);
if (c == null) continue;
txtbox = c as TextBox;
if (txtbox == null) continue;
if (InvokeRequired)
{
Invoke(new MethodInvoker(delegate
{
txtbox.Text = value;
}));
}
else
{
txtbox.Text = value;
}
break;
case "destination_rptr_tx":
c = FindControlByName(this, "destinationRptrIn" + slc.Index);
if (c == null) continue;
txtbox = c as TextBox;
if (txtbox == null) continue;
if (InvokeRequired)
{
Invoke(new MethodInvoker(delegate
{
txtbox.Text = value;
}));
}
else
{
txtbox.Text = value;
}
break;
case "departure_rptr_tx":
c = FindControlByName(this, "departureRptrIn" + slc.Index);
if (c == null) continue;
txtbox = c as TextBox;
if (txtbox == null) continue;
if (InvokeRequired)
{
Invoke(new MethodInvoker(delegate
{
txtbox.Text = value;
}));
}
else
{
txtbox.Text = value;
}
break;
case "companion_call_tx":
c = FindControlByName(this, "companionCallIn" + slc.Index);
if (c == null) continue;
txtbox = c as TextBox;
if (txtbox == null) continue;
if (InvokeRequired)
{
Invoke(new MethodInvoker(delegate
{
txtbox.Text = value;
}));
}
else
{
txtbox.Text = value;
}
break;
case "own_call1_tx":
c = FindControlByName(this, "ownCall1In" + slc.Index);
if (c == null) continue;
txtbox = c as TextBox;
if (txtbox == null) continue;
if (InvokeRequired)
{
Invoke(new MethodInvoker(delegate
{
txtbox.Text = value;
}));
}
else
{
txtbox.Text = value;
}
break;
case "own_call2_tx":
c = FindControlByName(this, "ownCall2In" + slc.Index);
if (c == null) continue;
txtbox = c as TextBox;
if (txtbox == null) continue;
if (InvokeRequired)
{
Invoke(new MethodInvoker(delegate
{
txtbox.Text = value;
}));
}
else
{
txtbox.Text = value;
}
break;
}
}
}
//*************************************
// GUI Routines
//*************************************
private void AddFDVSliceControls(Slice slc)
{
lock (this)
{
int index = _waveformSlices.IndexOf(slc);
label1.Visible = false;
int vertical_offset = 30;
this.SuspendLayout();
Label myInfo = new Label();
myInfo.Text = "MY INFO";
Label rxInfo = new Label();
rxInfo.Text = "RX INFO";
Label destinationRptrInLabel = new Label();
destinationRptrInLabel.Text = "Destination Repeater:";
destinationRptrInLabel.Anchor = AnchorStyles.Left;
Label departureRptrInLabel = new Label();
departureRptrInLabel.Text = "Departure Repeater:";
Label companionCallInLabel = new Label();
companionCallInLabel.Text = "Companion Call:";
Label ownCall1InLabel = new Label();
ownCall1InLabel.Text = "Own Call 1:";
Label ownCall2InLabel = new Label();
ownCall2InLabel.Text = "Own Call 2:";
TextBox destinationRptrIn = new TextBox();
TextBox departureRptrIn = new TextBox();
TextBox companionCallIn = new TextBox();
TextBox ownCall1In = new TextBox();
TextBox ownCall2In = new TextBox();
Label destinationRptrOutLabel = new Label();
destinationRptrOutLabel.Text = "Destination Repeater:";
Label departureRptrOutLabel = new Label();
departureRptrOutLabel.Text = "Departure Repeater:";
Label companionCallOutLabel = new Label();
companionCallOutLabel.Text = "Companion Call:";
Label ownCall1OutLabel = new Label();
ownCall1OutLabel.Text = "Own Call 1:";
Label ownCall2OutLabel = new Label();
ownCall2OutLabel.Text = "Own Call 2:";
TextBox destinationRptrOut = new TextBox();
TextBox departureRptrOut = new TextBox();
TextBox companionCallOut = new TextBox();
TextBox ownCall1Out = new TextBox();
TextBox ownCall2Out = new TextBox();
GroupBox groupbox = new GroupBox();
groupbox.SuspendLayout();
//
// groupBox
//
groupbox.Controls.Add(myInfo);
groupbox.Controls.Add(rxInfo);
groupbox.Controls.Add(destinationRptrInLabel);
groupbox.Controls.Add(departureRptrInLabel);
groupbox.Controls.Add(companionCallInLabel);
groupbox.Controls.Add(ownCall1InLabel);
groupbox.Controls.Add(ownCall2InLabel);
groupbox.Controls.Add(destinationRptrIn);
groupbox.Controls.Add(departureRptrIn);
groupbox.Controls.Add(companionCallIn);
groupbox.Controls.Add(ownCall1In);
groupbox.Controls.Add(ownCall2In);
groupbox.Controls.Add(destinationRptrOutLabel);
groupbox.Controls.Add(departureRptrOutLabel);
groupbox.Controls.Add(companionCallOutLabel);
groupbox.Controls.Add(ownCall1OutLabel);
groupbox.Controls.Add(ownCall2OutLabel);
groupbox.Controls.Add(destinationRptrOut);
groupbox.Controls.Add(departureRptrOut);
groupbox.Controls.Add(companionCallOut);
groupbox.Controls.Add(ownCall1Out);
groupbox.Controls.Add(ownCall2Out);
groupbox.Location = new Point(10, 10 + index * 220);
groupbox.Name = "grpSlice" + index;
groupbox.Size = new Size(500, 220);
groupbox.Text = "Slice " + SliceIndexToLetter(slc.Index);
myInfo.Location = new Point(75, 30);
myInfo.Size = new Size(100, 20);
myInfo.TextAlign = ContentAlignment.MiddleCenter;
rxInfo.Location = new Point(325, 30);
rxInfo.Size = new Size(100, 20);
rxInfo.TextAlign = ContentAlignment.MiddleCenter;
//
// destinationRptrIn
//
destinationRptrInLabel.Location = new Point(10, 30 + vertical_offset);
destinationRptrInLabel.Size = new Size(120, 20);
destinationRptrIn.Location = new Point(130, 30 + vertical_offset);
destinationRptrIn.Name = "destinationRptrIn" + slc.Index;
destinationRptrIn.Size = new Size(100, 20);
destinationRptrIn.PreviewKeyDown += new PreviewKeyDownEventHandler(txtIn_PreviewKeyDown);
//
// departureRptrIn
departureRptrInLabel.Location = new Point(10, 60 + vertical_offset);
departureRptrInLabel.Size = new Size(120, 20);
departureRptrIn.Location = new Point(130, 60 + vertical_offset);
departureRptrIn.Name = "departureRptrIn" + slc.Index;
departureRptrIn.Size = new Size(100, 20);
departureRptrIn.PreviewKeyDown += new PreviewKeyDownEventHandler(txtIn_PreviewKeyDown);
companionCallInLabel.Location = new Point(10, 90 + vertical_offset);
companionCallInLabel.Size = new Size(120, 20);
companionCallIn.Location = new Point(130, 90 + vertical_offset);
companionCallIn.Name = "companionCallIn" + slc.Index;
companionCallIn.Size = new Size(100, 20);
companionCallIn.PreviewKeyDown += new PreviewKeyDownEventHandler(txtIn_PreviewKeyDown);
ownCall1InLabel.Location = new Point(10, 120 + vertical_offset);
ownCall1InLabel.Size = new Size(120, 20);
ownCall1In.Location = new Point(130, 120 + vertical_offset);
ownCall1In.Name = "ownCall1In" + slc.Index;
ownCall1In.Size = new Size(100, 20);
ownCall1In.PreviewKeyDown += new PreviewKeyDownEventHandler(txtIn_PreviewKeyDown);
ownCall2InLabel.Location = new Point(10, 150 + vertical_offset);
ownCall2InLabel.Size = new Size(120, 20);
ownCall2In.Location = new Point(130, 150 + vertical_offset);
ownCall2In.Name = "ownCall2In" + slc.Index;
ownCall2In.Size = new Size(100, 20);
ownCall2In.PreviewKeyDown += new PreviewKeyDownEventHandler(txtIn_PreviewKeyDown);
/* OUT indicates it get's retrieved by the radio */
destinationRptrOutLabel.Location = new Point(250, 30 + vertical_offset);
destinationRptrOutLabel.Size = new Size(120, 20);
destinationRptrOut.Location = new Point(250 + 120, 30 + vertical_offset);
destinationRptrOut.Name = "destinationRptrOut" + slc.Index;
destinationRptrOut.Size = new Size(100, 20);
destinationRptrOut.ReadOnly = true;
departureRptrOutLabel.Location = new Point(250, 60 + vertical_offset);
departureRptrOutLabel.Size = new Size(120, 20);
departureRptrOut.Location = new Point(250 + 120, 60 + vertical_offset);
departureRptrOut.Name = "departureRptrOut" + slc.Index;
departureRptrOut.Size = new Size(100, 20);
departureRptrOut.ReadOnly = true;
companionCallOutLabel.Location = new Point(250, 90 + vertical_offset);
companionCallOutLabel.Size = new Size(120, 20);
companionCallOut.Location = new Point(250 + 120, 90 + vertical_offset);
companionCallOut.Name = "companionCallOut" + slc.Index;
companionCallOut.Size = new Size(100, 20);
companionCallOut.ReadOnly = true;
ownCall1OutLabel.Location = new Point(250, 120 + vertical_offset);
ownCall1OutLabel.Size = new Size(120, 20);
ownCall1Out.Location = new Point(250 + 120, 120 + vertical_offset);
ownCall1Out.Name = "ownCall1Out" + slc.Index;
ownCall1Out.Size = new Size(100, 20);
ownCall1Out.ReadOnly = true;
ownCall2OutLabel.Location = new Point(250, 150 + vertical_offset);
ownCall2OutLabel.Size = new Size(120, 20);
ownCall2Out.Location = new Point(250 + 120, 150 + vertical_offset);
ownCall2Out.Name = "ownCall2Out" + slc.Index;
ownCall2Out.Size = new Size(100, 20);
ownCall2Out.ReadOnly = true;
//
// Form1
//
if (groupbox.Bottom > this.Height)
this.Height += 180;
this.Controls.Add(groupbox);
groupbox.ResumeLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
}
void txtIn_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
if (e.KeyCode != Keys.Enter && e.KeyCode != Keys.Tab) return;
TextBox txt = sender as TextBox;
if (txt == null) return;
string text = txt.Name.Substring(0, txt.Name.Length - 1);
string slice = txt.Name.Substring(txt.Name.Length - 1, 1);
int slice_index = 0;
bool b = Int32.TryParse(slice, out slice_index);
if (!b)
{
return;
}
txt.Text = txt.Text.ToUpper();
string cmd = "";
switch (text)
{
case "destinationRptrIn":
cmd = "set destination_rptr=" + txt.Text.Replace(" ", "\u007f");
break;
case "departureRptrIn":
cmd = "set departure_rptr=" + txt.Text.Replace(" ", "\u007f");
break;
case "companionCallIn":
cmd = "set companion_call=" + txt.Text.Replace(" ", "\u007f");
break;
case "ownCall1In":
cmd = "set own_call1=" + txt.Text.Replace(" ", "\u007f");
break;
case "ownCall2In":
cmd = "set own_call2=" + txt.Text.Replace(" ", "\u007f");
break;
default:
break;
}
if (cmd == "")
return;
// first we need to find the slice that goes with this control
foreach(Slice slc in _waveformSlices)
{
if (slc.Index == slice_index)
{
// now that we have found the slice, we need to send a waveform command to set the string
slc.SendWaveformCommand(cmd);
return;
}
}
}
private void RemoveWaveformSliceControls(Slice slc)
{
lock (this)
{
this.SuspendLayout();
int index = _waveformSlices.IndexOf(slc);
// find the right groupbox and remove it
for (int i = 0; i < this.Controls.Count; i++)
{
Control c = this.Controls[i];
GroupBox groupbox = c as GroupBox;
if (groupbox == null) continue;
int temp;
bool b = int.TryParse(groupbox.Name.Substring("grpSlice".Length), out temp);
if (!b) continue;
// is this the one we are looking for?
if (temp == index)
{
// yes -- remove the whole groupbox
this.Controls.Remove(groupbox);
i--;
// detach the PreviewKeyDown event
foreach (Control c2 in groupbox.Controls)
{
if (c2.Name.Contains("In"))
{
TextBox txt = c2 as TextBox;
txt.PreviewKeyDown -= txtIn_PreviewKeyDown;
}
}
groupbox.Controls.Clear();
}
// is this one below the one we are removing?
else if (temp > index)
{
// yes -- move it on up
groupbox.Top -= 180;
groupbox.Name = "grpSlice" + (temp - 1);
}
}
if (_waveformSlices.Count == 1)
label1.Visible = true;
this.ResumeLayout(false);
this.PerformLayout();
}
}
private Control FindControlByName(Control start_control, string name)
{
foreach (Control c in start_control.Controls)
{
if (c.Name == name) return c;
if (c.GetType() == typeof(GroupBox))
{
Control result = FindControlByName(c, name);
if (result != null) return result;
}
}
return null;
}
//*************************************
// GUI Routines
//*************************************
private string SliceIndexToLetter(int index)
{
return Convert.ToChar('A' + index).ToString();
}
}
public class VerticalProgressBar : ProgressBar
{
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.Style |= 0x04;
return cp;
}
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

View file

@ -0,0 +1,270 @@
namespace CODEC2_GUI
{
partial class MainForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
this.lblNoDstar = new System.Windows.Forms.Label();
this.sliceFlow = new System.Windows.Forms.FlowLayoutPanel();
this.menuStrip1 = new System.Windows.Forms.MenuStrip();
this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.reloadDStarRepeaterListToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.selectAreaToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.reloadDStarInfoRelectorListToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
this.saveLogToFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
this.closeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.clearURListToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.logList = new System.Windows.Forms.ListBox();
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.toolStripContainer1 = new System.Windows.Forms.ToolStripContainer();
this.menuStrip1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.Panel1.SuspendLayout();
this.splitContainer1.Panel2.SuspendLayout();
this.splitContainer1.SuspendLayout();
this.toolStripContainer1.ContentPanel.SuspendLayout();
this.toolStripContainer1.TopToolStripPanel.SuspendLayout();
this.toolStripContainer1.SuspendLayout();
this.SuspendLayout();
//
// lblNoDstar
//
this.lblNoDstar.Anchor = System.Windows.Forms.AnchorStyles.None;
this.lblNoDstar.AutoSize = true;
this.lblNoDstar.Location = new System.Drawing.Point(236, 24);
this.lblNoDstar.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblNoDstar.Name = "lblNoDstar";
this.lblNoDstar.Size = new System.Drawing.Size(241, 21);
this.lblNoDstar.TabIndex = 4;
this.lblNoDstar.Text = "No DSTAR (DSTR) Slice";
//
// sliceFlow
//
this.sliceFlow.AutoScroll = true;
this.sliceFlow.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.sliceFlow.Dock = System.Windows.Forms.DockStyle.Fill;
this.sliceFlow.Location = new System.Drawing.Point(0, 0);
this.sliceFlow.Name = "sliceFlow";
this.sliceFlow.Size = new System.Drawing.Size(762, 200);
this.sliceFlow.TabIndex = 1;
this.sliceFlow.TabStop = true;
//
// menuStrip1
//
this.menuStrip1.Dock = System.Windows.Forms.DockStyle.None;
this.menuStrip1.ImageScalingSize = new System.Drawing.Size(20, 20);
this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.fileToolStripMenuItem,
this.editToolStripMenuItem});
this.menuStrip1.Location = new System.Drawing.Point(0, 0);
this.menuStrip1.Name = "menuStrip1";
this.menuStrip1.Size = new System.Drawing.Size(762, 28);
this.menuStrip1.TabIndex = 0;
this.menuStrip1.Text = "menuStrip1";
//
// fileToolStripMenuItem
//
this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.reloadDStarRepeaterListToolStripMenuItem,
this.reloadDStarInfoRelectorListToolStripMenuItem,
this.toolStripSeparator1,
this.saveLogToFileToolStripMenuItem,
this.toolStripSeparator2,
this.closeToolStripMenuItem});
this.fileToolStripMenuItem.Name = "fileToolStripMenuItem";
this.fileToolStripMenuItem.Size = new System.Drawing.Size(44, 24);
this.fileToolStripMenuItem.Text = "&File";
//
// reloadDStarRepeaterListToolStripMenuItem
//
this.reloadDStarRepeaterListToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.selectAreaToolStripMenuItem});
this.reloadDStarRepeaterListToolStripMenuItem.Name = "reloadDStarRepeaterListToolStripMenuItem";
this.reloadDStarRepeaterListToolStripMenuItem.Size = new System.Drawing.Size(262, 26);
this.reloadDStarRepeaterListToolStripMenuItem.Text = "Reload DStar Repeater List";
this.reloadDStarRepeaterListToolStripMenuItem.DropDownOpening += new System.EventHandler(this.reloadDStarRepeaterListToolStripMenuItem_DropDownOpening);
//
// selectAreaToolStripMenuItem
//
this.selectAreaToolStripMenuItem.Enabled = false;
this.selectAreaToolStripMenuItem.Name = "selectAreaToolStripMenuItem";
this.selectAreaToolStripMenuItem.Size = new System.Drawing.Size(159, 26);
this.selectAreaToolStripMenuItem.Text = "Select Area";
//
// reloadDStarInfoRelectorListToolStripMenuItem
//
this.reloadDStarInfoRelectorListToolStripMenuItem.Name = "reloadDStarInfoRelectorListToolStripMenuItem";
this.reloadDStarInfoRelectorListToolStripMenuItem.Size = new System.Drawing.Size(262, 26);
this.reloadDStarInfoRelectorListToolStripMenuItem.Text = "Reload DStar Relector List";
this.reloadDStarInfoRelectorListToolStripMenuItem.Click += new System.EventHandler(this.reloadDStarInfoRelectorListToolStripMenuItem_Click);
//
// toolStripSeparator1
//
this.toolStripSeparator1.Name = "toolStripSeparator1";
this.toolStripSeparator1.Size = new System.Drawing.Size(259, 6);
//
// saveLogToFileToolStripMenuItem
//
this.saveLogToFileToolStripMenuItem.Name = "saveLogToFileToolStripMenuItem";
this.saveLogToFileToolStripMenuItem.Size = new System.Drawing.Size(262, 26);
this.saveLogToFileToolStripMenuItem.Text = "&Save Log to File...";
this.saveLogToFileToolStripMenuItem.Click += new System.EventHandler(this.saveLogToFileToolStripMenuItem_Click);
//
// toolStripSeparator2
//
this.toolStripSeparator2.Name = "toolStripSeparator2";
this.toolStripSeparator2.Size = new System.Drawing.Size(259, 6);
//
// closeToolStripMenuItem
//
this.closeToolStripMenuItem.Name = "closeToolStripMenuItem";
this.closeToolStripMenuItem.Size = new System.Drawing.Size(262, 26);
this.closeToolStripMenuItem.Text = "&Close";
this.closeToolStripMenuItem.Click += new System.EventHandler(this.closeToolStripMenuItem_Click);
//
// editToolStripMenuItem
//
this.editToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.clearURListToolStripMenuItem});
this.editToolStripMenuItem.Name = "editToolStripMenuItem";
this.editToolStripMenuItem.Size = new System.Drawing.Size(47, 24);
this.editToolStripMenuItem.Text = "&Edit";
//
// clearURListToolStripMenuItem
//
this.clearURListToolStripMenuItem.Name = "clearURListToolStripMenuItem";
this.clearURListToolStripMenuItem.Size = new System.Drawing.Size(186, 26);
this.clearURListToolStripMenuItem.Text = "Clear MRU Lists";
this.clearURListToolStripMenuItem.Click += new System.EventHandler(this.clearURListToolStripMenuItem_Click);
//
// logList
//
this.logList.Dock = System.Windows.Forms.DockStyle.Fill;
this.logList.FormattingEnabled = true;
this.logList.IntegralHeight = false;
this.logList.ItemHeight = 20;
this.logList.Location = new System.Drawing.Point(0, 0);
this.logList.Name = "logList";
this.logList.ScrollAlwaysVisible = true;
this.logList.Size = new System.Drawing.Size(762, 121);
this.logList.TabIndex = 2;
//
// splitContainer1
//
this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1;
this.splitContainer1.Location = new System.Drawing.Point(0, 0);
this.splitContainer1.Name = "splitContainer1";
this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal;
//
// splitContainer1.Panel1
//
this.splitContainer1.Panel1.Controls.Add(this.lblNoDstar);
this.splitContainer1.Panel1.Controls.Add(this.sliceFlow);
this.splitContainer1.Panel1MinSize = 200;
//
// splitContainer1.Panel2
//
this.splitContainer1.Panel2.Controls.Add(this.logList);
this.splitContainer1.Panel2MinSize = 50;
this.splitContainer1.Size = new System.Drawing.Size(762, 325);
this.splitContainer1.SplitterDistance = 200;
this.splitContainer1.TabIndex = 0;
//
// toolStripContainer1
//
//
// toolStripContainer1.ContentPanel
//
this.toolStripContainer1.ContentPanel.Controls.Add(this.splitContainer1);
this.toolStripContainer1.ContentPanel.Size = new System.Drawing.Size(762, 325);
this.toolStripContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
this.toolStripContainer1.Location = new System.Drawing.Point(0, 0);
this.toolStripContainer1.Name = "toolStripContainer1";
this.toolStripContainer1.Size = new System.Drawing.Size(762, 353);
this.toolStripContainer1.TabIndex = 1;
this.toolStripContainer1.Text = "toolStripContainer1";
//
// toolStripContainer1.TopToolStripPanel
//
this.toolStripContainer1.TopToolStripPanel.Controls.Add(this.menuStrip1);
//
// MainForm
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.ClientSize = new System.Drawing.Size(762, 353);
this.Controls.Add(this.toolStripContainer1);
this.Font = new System.Drawing.Font("Courier New", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MainMenuStrip = this.menuStrip1;
this.Margin = new System.Windows.Forms.Padding(4);
this.MinimumSize = new System.Drawing.Size(200, 200);
this.Name = "MainForm";
this.Text = "FLEX 6000 DSTAR";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing);
this.Load += new System.EventHandler(this.Form1_Load);
this.menuStrip1.ResumeLayout(false);
this.menuStrip1.PerformLayout();
this.splitContainer1.Panel1.ResumeLayout(false);
this.splitContainer1.Panel1.PerformLayout();
this.splitContainer1.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
this.splitContainer1.ResumeLayout(false);
this.toolStripContainer1.ContentPanel.ResumeLayout(false);
this.toolStripContainer1.TopToolStripPanel.ResumeLayout(false);
this.toolStripContainer1.TopToolStripPanel.PerformLayout();
this.toolStripContainer1.ResumeLayout(false);
this.toolStripContainer1.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Label lblNoDstar;
private System.Windows.Forms.FlowLayoutPanel sliceFlow;
private System.Windows.Forms.ListBox logList;
private System.Windows.Forms.SplitContainer splitContainer1;
private System.Windows.Forms.MenuStrip menuStrip1;
private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem closeToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem editToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem clearURListToolStripMenuItem;
private System.Windows.Forms.ToolStripContainer toolStripContainer1;
private System.Windows.Forms.ToolStripMenuItem reloadDStarInfoRelectorListToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem reloadDStarRepeaterListToolStripMenuItem;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
private System.Windows.Forms.ToolStripMenuItem saveLogToFileToolStripMenuItem;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
private System.Windows.Forms.ToolStripMenuItem selectAreaToolStripMenuItem;
}
}

View file

@ -0,0 +1,353 @@
/*******************************************************************************
* MainForm.cs
*
* An example GUI showing how to interface to the FlexRadio Modem API
*
* Created on: 2014-08-28
* Author: Eric / KE5DTO
*
* Enhancements: Mark Hanson / AA3RK / MKCM Software, LLC.
*
*******************************************************************************
*
* Copyright (C) 2014 FlexRadio Systems.
* 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/>.
*
* Contact: gpl<AT>flexradio<DOT>com or
*
* GPL C/O FlexRadio Systems
* 4616 W. Howard Lane
* Suite 1-150
* Austin, TX USA 78728
*
******************************************************************************/
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Flex.Smoothlake.FlexLib;
using System.IO;
namespace CODEC2_GUI
{
public partial class MainForm : Form
{
private bool _radioConnected = false;
private Radio _radio = null;
public BindingList<string> LogQueue { get; set; }
public MainForm()
{
InitializeComponent();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (this.WindowState == FormWindowState.Normal)
Properties.Settings.Default.MainPosition =
string.Format("{0},{1},{2},{3},{4}",
this.Left, this.Top, this.Width, this.Height,
splitContainer1.SplitterDistance);
Properties.Settings.Default.Save();
}
private void Form1_Load(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(Properties.Settings.Default.MainPosition))
{
string[] cords = Properties.Settings.Default.MainPosition.Split(',');
if (cords.Length == 5)
{
this.Left = Convert.ToInt32(cords[0]);
this.Top = Convert.ToInt32(cords[1]);
this.Width = Convert.ToInt32(cords[2]);
this.Height = Convert.ToInt32(cords[3]);
splitContainer1.SplitterDistance = Convert.ToInt32(cords[4]);
}
}
API.RadioAdded += new API.RadioAddedEventHandler(API_RadioAdded);
API.RadioRemoved += new API.RadioRemovedEventHandler(API_RadioRemoved);
API.Init();
LogQueue = new BindingList<string>();
logList.DataSource = LogQueue;
}
//*************************************
// API Event Handlers
//*************************************
void API_RadioAdded(Radio radio)
{
// if we have already connected to another radio, ignore this one
if(_radioConnected) return;
// set the flag so that we don't try to connect to other radios
_radioConnected = true;
// save a reference to the radio
_radio = radio;
// attach Slice event handlers
_radio.SliceAdded += new Radio.SliceAddedEventHandler(_radio_SliceAdded);
_radio.SliceRemoved += new Radio.SliceRemovedEventHandler(_radio_SliceRemoved);
// connect to the radio
_radio.Connect();
}
void API_RadioRemoved(Radio radio)
{
}
//*************************************
// Radio Event Handlers
//*************************************
void _radio_SliceAdded(Slice slc)
{
if (InvokeRequired)
{
Invoke(new MethodInvoker(delegate
{
_radio_SliceAdded(slc);
}));
return;
}
// get existing DStar list items
List<dstarlistitem> lst = new List<dstarlistitem>(sliceFlow.Controls.Cast<dstarlistitem>());
sliceFlow.Controls.Clear();
// create new item
dstarlistitem dli = new dstarlistitem();
dli.slice = slc;
dli.LogEvent += Dli_LogEvent;
lst.Add(dli);
// sort items by slice index
lst.Sort((dstarlistitem x, dstarlistitem y) => { return x.slice.Index - y.slice.Index; });
// update flow control
sliceFlow.Controls.AddRange(lst.ToArray());
// set no slice indicator
lblNoDstar.Visible = sliceFlow.Controls.Count == 0;
}
private void Dli_LogEvent(object sender, LogEventArgs e)
{
// current selection
int sel = logList.SelectedIndex;
int maxlogsentry = Properties.Settings.Default.LogEntryMax;
while (LogQueue.Count > maxlogsentry)
{
LogQueue.RemoveAt(maxlogsentry);
}
if (LogQueue.Count == 0)
LogQueue.Add(e.LogEntry);
else
LogQueue.Insert(0, e.LogEntry);
// maintain top selected item if was selected or no selection
if (logList.SelectedIndex == -1 || sel == 0)
logList.SelectedIndex = 0;
}
void _radio_SliceRemoved(Slice slc)
{
if (InvokeRequired)
{
Invoke(new MethodInvoker(delegate
{
_radio_SliceRemoved(slc);
}));
return;
}
foreach (dstarlistitem dli in sliceFlow.Controls)
{
if (dli.slice == slc)
{
dli.LogEvent -= Dli_LogEvent;
dli.slice = null;
sliceFlow.Controls.Remove(dli);
break;
}
}
// set no slice indicator
lblNoDstar.Visible = sliceFlow.Controls.Count == 0;
}
private void closeToolStripMenuItem_Click(object sender, EventArgs e)
{
Close();
}
private void clearURListToolStripMenuItem_Click(object sender, EventArgs e)
{
Properties.Settings.Default.URList = string.Empty;
Properties.Settings.Default.RPT1List = string.Empty;
Properties.Settings.Default.RPT2List = string.Empty;
Properties.Settings.Default.Save();
foreach(dstarlistitem dli in sliceFlow.Controls)
{
dli.ClearMYList();
dli.ClearRPT1List();
dli.ClearRPT2List();
dli.ClearMESSAGEList();
}
}
private void reloadDStarInfoRelectorListToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
DstarInfo di = new DstarInfo();
di.FetchAndSaveReflectorList();
SelectForm sf = new SelectForm();
sf.showOnly = true;
sf.Mode = SelectForm.RMode.Reflector;
sf.Owner = this;
sf.Show();
}
catch(Exception ex)
{
StringBuilder sb = new StringBuilder();
Exception ex1 = ex;
while(ex1 != null)
{
sb.AppendLine(ex1.Message);
ex1 = ex1.InnerException;
}
MessageBox.Show(sb.ToString(), "Load DSTARINFO Error!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
}
private void reloadDStarRepeaterListToolStripMenuItemList(string area)
{
try
{
DstarInfo di = new DstarInfo();
di.FetchAndSaveRepeaterList(area);
SelectForm sf = new SelectForm();
sf.showOnly = true;
sf.repeaterOnly = true;
sf.Mode = SelectForm.RMode.Repeater;
sf.Owner = this;
sf.Show();
}
catch (Exception ex)
{
StringBuilder sb = new StringBuilder();
Exception ex1 = ex;
while (ex1 != null)
{
sb.AppendLine(ex1.Message);
ex1 = ex1.InnerException;
}
MessageBox.Show(sb.ToString(), "Load DSTARINFO Error!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
}
private void saveLogToFileToolStripMenuItem_Click(object sender, EventArgs e)
{
if (LogQueue.Count() == 0)
{
MessageBox.Show(this, "There are no log entries!", "Save Log Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
SaveFileDialog sfd = new SaveFileDialog();
sfd.OverwritePrompt = true;
sfd.DefaultExt = ".TXT";
sfd.Filter = "Text (*.TXT)|.TXT\0";
sfd.Title = "Save Log File";
sfd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
if (sfd.ShowDialog() == DialogResult.OK)
{
using (StreamWriter sw = File.CreateText(sfd.FileName))
{
foreach (string str in LogQueue)
{
sw.WriteLine(str);
}
sw.Close();
}
}
}
private void reloadDStarRepeaterListToolStripMenuItem_DropDownOpening(object sender, EventArgs e)
{
for (int idx = reloadDStarRepeaterListToolStripMenuItem.DropDownItems.Count - 1; idx > 0; idx--)
{
reloadDStarRepeaterListToolStripMenuItem.DropDownItems.RemoveAt(idx);
}
try
{
DstarInfo di = new DstarInfo();
List<string> areas = di.GetDStarRepeaterAreas();
if (areas != null && areas.Count > 0)
{
foreach (string area in areas)
{
ToolStripMenuItem ti = new ToolStripMenuItem(area);
ti.Click += RepeaterAreaSelection_Click;
reloadDStarRepeaterListToolStripMenuItem.DropDownItems.Add(ti);
}
}
}
catch (Exception ex)
{
StringBuilder sb = new StringBuilder();
Exception ex1 = ex;
while (ex1 != null)
{
sb.AppendLine(ex1.Message);
ex1 = ex1.InnerException;
}
MessageBox.Show(sb.ToString(), "Load DSTARINFO Repeater Area Info Error!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
}
private void RepeaterAreaSelection_Click(object sender, EventArgs e)
{
ToolStripMenuItem ti = sender as ToolStripMenuItem;
reloadDStarRepeaterListToolStripMenuItemList(ti.Text);
}
}
public class VerticalProgressBar : ProgressBar
{
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.Style |= 0x04;
return cp;
}
}
}
}

View file

@ -0,0 +1,290 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAMDAAAAEAIACoJQAAFgAAACgAAAAwAAAAYAAAAAEAIAAAAAAAgCUAAAAAAAAAAAAAAAAAAAAA
AADp6QD/6ekA/+npAP/p6QD/6ekA/+npAP/p6QD/6ekA/+npAP/p6QD/6ekA/+npAP/p6QD/6ekA/+np
AP/p6QD/6ekA/+npAP/p6QD/6ekA/+npAP/p6QD/6ekA/+npAP/p6QD/6ekA/+npAP/p6QD/6ekA/+np
AP/p6QD/6ekA/+npAP/p6QD/6ekA/+npAP/p6QD/6ekA/+npAP/p6QD/6ekA/+npAP/p6QD/6ekA/+np
AP/p6QD/6ekA/+npAP/p5AD/6eQA/+nkAP/p5AD/6eQA/+nkAP/p5AD/6eQA/+nkAP/p5AD/6eQA/+nk
AP/p5AD/6eQA/+nkAP/p5AD/6eQA/+nkAP/p5AD/6eQA/+nkAP/p5AD/6eQA/+nkAP/p5AD/6eQA/+nk
AP/p5AD/6eQA/+nkAP/p5AD/6eQA/+nkAP/p5AD/6eQA/+nkAP/p5AD/6eQA/+nkAP/p5AD/6eQA/+nk
AP/p5AD/6eQA/+nkAP/p5AD/6eQA/+nkAP/p3wH/sqsB/5uVAf+blQH/m5UB/5uVAf/KwQH/6d8B/+nf
Af/p3wH/6d8B/+nfAf/VzAH/n5gB/5uVAf+blQH/r6gB/93UAf/p3wH/6d8B/+nfAf/p3wH/49kB/7my
Af/IwAH/6d8B/+nfAf/p3wH/x78B/6SdAf/PxgH/6d8B/+nfAf/p3wH/6N4B/8S8Af+lngH/0McB/7au
Af/GvgH/6N4B/+nfAf/p3wH/6d8B/+nfAf/YzgH/pJ0B/+nfAf/q2gL/Qz4B/wAAAP8AAAD/AAAA/wAA
AP8vLAD/h34B/+raAv/q2gL/6toC/6icAf9GQQH/BAMA/wAAAP8AAAD/FBMA/19YAf/JuwL/6toC/+ra
Av/q2gL/1cYC/1pUAf+HfgH/6toC/+raAv/p2QL/gnkB/xoYAP+XjQH/6toC/+raAv/q2gL/5dYC/3tz
Af8cGwD/npMB/1BKAf9/dgH/59cC/+raAv/q2gL/6toC/+raAv9qYwH/CAgA/+raAv/q1QP/TkcB/31y
Av/q1QP/6tUD/8SzA/9aUgH/BQQA/4J3Av/q1QP/q5sC/ycjAP89OAH/sKAC/+rVA//q1QP/w7EC/1lR
Af+fkQL/5tID/+rVA//q1QP/1cID/1pSAf+HewL/6tUD/+rVA//q1QP/0L4D/0dAAf9+cgL/4c0D/+rV
A//q1QP/4s0D/1NLAf9VTgH/6tUD/1BJAf9/cwL/59ID/+rVA//q1QP/6tUD/+rVA/9GPwH/hXkC/+rV
A//r0AT/TkUB/31vAv/r0AT/69AE/+vQBP/r0AT/ZVoC/y0oAf/r0AT/eWsC/0M8Af/QuAT/69AE/+vQ
BP/r0AT/69AE/29iAv9rXwL/3sUE/+vQBP/r0AT/1r0E/1pQAv+HeAL/69AE/+vQBP/r0AT/48kE/31v
Av8ZFgD/RT0B/05FAf9ORQH/SkEB/xcUAP+ZhwP/69AE/1BHAf9/cQL/6M4E/+vQBP/r0AT/69AE/+vQ
BP9GPgH/hnYC/+vQBP/rzAT/TkQB/31tAv/rzAT/68wE/+vMBP/rzAT/sZoD/yUgAf+EcgL/68wE/+vM
BP/rzAT/68wE/+vMBP/rzAT/68wE/29gAv9rXQL/3sEE/+vMBP/rzAT/1roE/1pOAv+HdgL/68wE/+vM
BP/rzAT/68wE/6CLA/8AAAD/MSoB/05EAf9ORAH/GhYA/yIeAf+5oQP/68wE/1BGAf9/bgL/6MoE/+vM
BP/rzAT/4cME/3tqAv9HPgH/1LgE/+vMBP/sxwX/T0IC/35qA//sxwX/7McF/+zHBf/sxwX/5sIF/09C
Av+EcAP/7McF/+zHBf/sxwX/7McF/+zHBf/sxwX/xKUE/1pMAv+ghwP/6MQF/+zHBf/sxwX/17UF/1tM
Av+IcwP/7McF/+zHBf/sxwX/7McF/8KkBP84MAH/knsD/+zHBf/sxwX/TkIC/1dJAv/cugX/7McF/1FE
Av8rJQH/TkIC/09CAv9PQgL/RDoB/xgUAf+CbQP/5cEF/+zHBf/swgb/T0EC/35nA//swgb/7MIG/+zC
Bv/swgb/5r0G/09BAv+EbQP/7MIG/8ynBf97ZQP/BwYA/wAAAP8AAAD/FBEB/19OAv/LpwX/7MIG/+zC
Bv/swgb/17EF/1tLAv+IcAP/7MIG/+zCBv/swgb/7MIG/9y1Bv9vWwP/OzEC/8ikBf+lhwT/CQgA/5t/
BP/swgb/7MIG/1FCAv8rJAH/TkAC/09BAv9PQQL/T0EC/zMqAf9ANAL/1a8F/+zCBv/tvQf/Tz8C/35l
BP/tvQf/7b0H/+29B//tvQf/5rgH/08/Av+FagT/7b0H/4ltBP87LwL/l3kE/55+Bf+efgX/so4F/+Gz
B//tvQf/7b0H/+29B//tvQf/2KwG/1tJA/+JbQT/7b0H/+29B//tvQf/7b0H/+29B/+kggX/Tz8C/8mg
Bv+lhAX/EA0A/+29B//tvQf/7b0H/1FAAv+AZgT/6rsH/+29B//tvQf/7b0H/9GnBv9KOwL/ooEF/+29
B//tuAj/Tz0D/35iBP/tuAj/7bgI/+24CP/tuAj/l3YF/xoUAf+ogwb/x5oH/zotAv+7kQb/7bgI/+24
CP/tuAj/7bgI/+24CP/tuAj/7bgI/+24CP/tuAj/2KcH/1tHA/+JagX/7bgI/+24CP/tuAj/7bgI/+24
CP+9kgb/MygC/3pfBP8OCwD/QTMC/+24CP/tuAj/7bgI/1E/A/+AZAT/6rYI/+24CP/tuAj/7bgI/+24
CP9HNwL/h2kF/+24CP/ttAj/TzwD/35gBP/ttAj/7bQI/+20CP/ttAj/MycC/y4jAv/ttAj/x5cH/zos
Av+7jgb/7bQI/+20CP/ttAj/xZYH/4RkBP/Mmwf/7bQI/+20CP/ttAj/2KQH/1tFA/+JaAX/7bQI/+20
CP/ttAj/7bQI/+20CP/ttAj/W0UD/3pcBP8OCwD/pHwG/+20CP/ttAj/7bQI/1E9A/+AYQT/6rII/+20
CP/ttAj/7bQI/+20CP9HNgL/h2YF/+20CP/urwn/TDgD/1U+A/+fdQb/n3UG/3hZBf8MCQD/IxkB/8SQ
B//urwn/7q8J/4llBf87KwL/mHAG/591Bv+TbAb/QjED/0c0A//Mlgj/rX8H/591Bv+fdQb/kWoF/z4t
Av9bQwP/n3UG/591Bv+gdQb/w48H/+6vCf/urwn/fFsF/w0KAP8ZEwH/vYsH/+6vCf/urwn/7q8J/1E8
A/9XQAP/nXMG/591Bv+fdQb/n3UG/2VKBP9INQP/154I/+6vCf/uqgr/RDED/wAAAP8AAAD/AAAA/wAA
AP9fRAT/vYcI/+6qCv/uqgr/7qoK/82TCf98WQX/BwUA/wAAAP8NCQH/XkME/8qQCP/uqgr/KR0C/wAA
AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8CAQD/akwE/+6qCv/uqgr/vYcI/yUbAv9JNAP/7qoK/+6q
Cv/uqgr/7qoK/1E6A/8AAAD/AAAA/wAAAP8AAAD/AAAA/zwrA/+idAf/56UK/+6qCv/vpQv/76UL/++l
C//vpQv/76UL/++lC//vpQv/76UL/++lC//vpQv/76UL/++lC//vpQv/76UL/++lC//vpQv/76UL/++l
C//vpQv/76UL/++lC//vpQv/76UL/++lC//vpQv/76UL/++lC//vpQv/76UL/++lC//vpQv/76UL/++l
C//vpQv/76UL/++lC//vpQv/76UL/++lC//vpQv/76UL/++lC//vpQv/76UL/++lC//vpQv/76UL/++l
C//voAz/76AM/++gDP/voAz/76AM/++gDP/voAz/76AM/++gDP/voAz/76AM/++gDP/voAz/76AM/++g
DP/voAz/76AM/++gDP/voAz/76AM/++gDP/voAz/76AM/++gDP/voAz/76AM/++gDP/voAz/76AM/++g
DP/voAz/76AM/++gDP/voAz/76AM/++gDP/voAz/76AM/++gDP/voAz/76AM/++gDP/voAz/76AM/++g
DP/voAz/76AM/++gDP/wnAz/8JwM//CcDP/wnAz/8JwM//CcDP/wnAz/8JwM//CcDP/wnAz/8JwM//Cc
DP/wnAz/8JwM//CcDP/wnAz/8JwM//CcDP/wnAz/8JwM//CcDP/wnAz/8JwM//CcDP/wnAz/8JwM//Cc
DP/wnAz/8JwM//CcDP/wnAz/8JwM//CcDP/wnAz/8JwM//CcDP/wnAz/8JwM//CcDP/wnAz/8JwM//Cc
DP/wnAz/8JwM//CcDP/wnAz/8JwM//CcDP/wlw3/8JcN//CXDf/wlw3/8JcN//CXDf/wlw3/8JcN//CX
Df/wlw3/8JcN//CXDf/wlw3/8JcN//CXDf/wlw3/8JcN//CXDf/wlw3/8JcN//CXDf/wlw3/8JcN//CX
Df/wlw3/8JcN//CXDf/wlw3/8JcN//CXDf/wlw3/8JcN//CXDf/wlw3/8JcN//CXDf/wlw3/8JcN//CX
Df/wlw3/8JcN//CXDf/wlw3/8JcN//CXDf/wlw3/8JcN//CXDf/xkg7/8ZIO//GSDv/xkg7/8ZIO//GS
Dv/xkg7/8ZIO//GSDv/xkg7/8ZIO//GSDv/xkg7/8ZIO//GSDv/xkg7/8ZIO//GSDv/xkg7/8ZIO//GS
Dv/xkg7/8ZIO//GSDv/xkg7/8ZIO//GSDv/xkg7/8ZIO//GSDv/xkg7/8ZIO//GSDv/xkg7/8ZIO//GS
Dv/xkg7/8ZIO//GSDv/xkg7/8ZIO//GSDv/xkg7/8ZIO//GSDv/xkg7/8ZIO//GSDv/xjQ//8Y0P//GN
D//xjQ//8Y0P//GND//xjQ//8Y0P//GND//zmin/9rNf//azX//2s1//8Y0P//GND//xjQ//8Y0P//GN
D//xjQ//9rNf//azX//xjQ//8Y0P//GND//xjQ//8Y0P//GND//zmin/9rNf//SmRP/xjQ//8Y0P//GN
D//xjQ//8Y0P//GND//0pkT/9rNf//OaKf/xjQ//8Y0P//GND//xjQ//8Y0P//GND//xjQ//8Y0P//GN
D//xiBD/8YgQ//GIEP/xiBD/8YgQ//GIEP/xiBD/8YgQ//e9ev/85Mr/////////////////+tev//Si
RP/xiBD/8YgQ//SiRP/616/////////////616//9KJE//GIEP/xiBD/8YgQ//e9ev/85Mr///////3x
5P/616//8YgQ//GIEP/xiBD/8YgQ//rXr//98eT///////zkyv/3vXr/8YgQ//GIEP/xiBD/8YgQ//GI
EP/xiBD/8YgQ//GIEP/yhBD/8oQQ//KEEP/yhBD/8oQQ//KEEP/yhBD/85Iq//zkyv/+8eT/9Z9E//KE
EP/4u3r///////nIlP/yhBD/8oQQ///////85Mr/8oQQ//KEEP/85Mr///////KEEP/yhBD/9q1g////
///4u3r/8oQQ//WfRP/+8eT/+9av//KEEP/yhBD/+9av//7x5P/1n0T/8oQQ//i7ev//////9q1g//KE
EP/yhBD/8oQQ//KEEP/yhBD/8oQQ//KEEP/yfxH/8n8R//J/Ef/yfxH/8n8R//J/Ef/yfxH/9qpg////
///1m0X/8n8R//J/Ef/yfxH/+caV///////yfxH/+Lh6//ziyv/zjSv/8n8R//J/Ef/zjSv//OLK//i4
ev/yfxH//OLK//nGlf/yfxH/8n8R//J/Ef/1m0X//vDk//WbRf/1m0X//vDk//WbRf/yfxH/8n8R//J/
Ef/5xpX//OLK//J/Ef/yfxH/8n8R//J/Ef/yfxH/8n8R//J/Ef/zehL/83oS//N6Ev/zehL/83oS//N6
Ev/zehL/96Zh///////zehL/83oS//N6Ev/zehL/96Zh///////zehL/+9Ow//vTsP/zehL/83oS//N6
Ev/zehL/+9Ow//vTsP/zehL///////emYf/zehL/83oS//N6Ev/zehL///////emYf/3pmH///////N6
Ev/zehL/83oS//N6Ev/3pmH///////N6Ev/zehL/83oS//N6Ev/zehL/83oS//N6Ev/zdRP/83UT//N1
E//zdRP/83UT//N1E//zdRP/96Ni///////4snz/83UT//N1E//zdRP//ODK///////zdRP/+9Gw//vR
sP/zdRP/83UT//N1E//zdRP/+9Gw//vRsP/zdRP///////ejYv/zdRP/83UT//N1E//zdRP///////ej
Yv/3o2L///////N1E//zdRP/83UT//N1E//3o2L///////N1E//zdRP/83UT//N1E//zdRP/83UT//N1
E//0cBT/9HAU//RwFP/0cBT/9HAU//RwFP/0cBT/+KBi////////////+r+W//igYv/938r///////ig
Yv/0cBT/+8+x//vPsf/0cBT/9HAU//RwFP/0cBT/+8+x//vPsf/0cBT///////igYv/0cBT/9HAU//Rw
FP/0cBT///////igYv/4oGL///////RwFP/0cBT/9HAU//RwFP/4oGL///////RwFP/0cBT/9HAU//Rw
FP/0cBT/9HAU//RwFP/0axX/9GsV//RrFf/0axX/9GsV//RrFf/0axX/+Jxj///////4nGP//d7L////
////////+Jxj//V7L//0axX/+86x//vOsf/0axX/9GsV//RrFf/0axX/+86x//vOsf/0axX///////ic
Y//0axX/9GsV//RrFf/0axX///////icY//4nGP///////RrFf/0axX/9GsV//RrFf/4nGP///////Rr
Ff/0axX/9GsV//RrFf/0axX/9GsV//RrFf/1ZxX/9WcV//VnFf/1ZxX/9WcV//VnFf/1ZxX/+Jpj////
///1ZxX/9WcV//VnFf/1ZxX/9WcV//VnFf/1ZxX//Myx//zMsf/1ZxX/9WcV//VnFf/1ZxX//Myx//zM
sf/1ZxX///////iaY//1ZxX/9WcV//VnFf/1ZxX///////iaY//4mmP///////VnFf/1ZxX/9WcV//Vn
Ff/4mmP///////VnFf/1ZxX/9WcV//VnFf/1ZxX/9WcV//VnFf/1Yhb/9WIW//ViFv/1Yhb/9WIW//Vi
Fv/1Yhb/9nMw//3cy//5qH3/9WIW//ViFv/1Yhb/94RJ//zLsf/1Yhb/94RJ//7t5f/3hEn/9WIW//Vi
Fv/3hEn//u3l//eESf/1Yhb/+7mX//3cy//1Yhb/9WIW//ViFv/5qH3//dzL//ZzMP/2czD//dzL//mo
ff/1Yhb/9WIW//ViFv/93Mv/+7mX//ViFv/1Yhb/9WIW//ViFv/1Yhb/9WIW//ViFv/1XRf/9V0X//Vd
F//1XRf/9V0X//VdF//1XRf/9V0X//mlfv//////+7eX//iTZP/4k2T///////iTZP/1XRf/9V0X//3b
y///////+JNk//iTZP///////dvL//VdF//1XRf/94FK//7t5f/928v/+JNk//u3l///////+aV+//Vd
F//1XRf/+aV+///////7t5f/+JNk//3by//+7eX/94FK//VdF//1XRf/9V0X//VdF//1XRf/9V0X//Vd
F//2WBj/9lgY//ZYGP/2WBj/9lgY//ZYGP/2WBj/9lgY//ZYGP/5kGX//drL////////////+ZBl//dq
Mf/2WBj/9lgY//dqMf/5kGX////////////5kGX/92ox//ZYGP/2WBj/9lgY//h9S//7tJj///////3a
y//5kGX/9lgY//ZYGP/2WBj/9lgY//mQZf/92sv///////u0mP/4fUv/9lgY//ZYGP/2WBj/9lgY//ZY
GP/2WBj/9lgY//ZYGP/2Uxn/9lMZ//ZTGf/2Uxn/9lMZ//ZTGf/2Uxn/9lMZ//ZTGf/2Uxn/9lMZ//ZT
Gf/2Uxn/9lMZ//ZTGf/2Uxn/9lMZ//ZTGf/2Uxn/9lMZ//ZTGf/2Uxn/9lMZ//ZTGf/2Uxn/9lMZ//ZT
Gf/2Uxn/9lMZ//ZTGf/2Uxn/9lMZ//ZTGf/2Uxn/9lMZ//ZTGf/2Uxn/9lMZ//ZTGf/2Uxn/9lMZ//ZT
Gf/2Uxn/9lMZ//ZTGf/2Uxn/9lMZ//ZTGf/3Txn/908Z//dPGf/3Txn/908Z//dPGf/3Txn/908Z//dP
Gf/3Txn/908Z//dPGf/3Txn/908Z//dPGf/3Txn/908Z//dPGf/3Txn/908Z//dPGf/3Txn/908Z//dP
Gf/3Txn/908Z//dPGf/3Txn/908Z//dPGf/3Txn/908Z//dPGf/3Txn/908Z//dPGf/3Txn/908Z//dP
Gf/3Txn/908Z//dPGf/3Txn/908Z//dPGf/3Txn/908Z//dPGf/3Shr/90oa//dKGv/3Shr/90oa//dK
Gv/3Shr/90oa//dKGv/3Shr/90oa//dKGv/3Shr/90oa//dKGv/3Shr/90oa//dKGv/3Shr/90oa//dK
Gv/3Shr/90oa//dKGv/3Shr/90oa//dKGv/3Shr/90oa//dKGv/3Shr/90oa//dKGv/3Shr/90oa//dK
Gv/3Shr/90oa//dKGv/3Shr/90oa//dKGv/3Shr/90oa//dKGv/3Shr/90oa//dKGv/4RRv/+EUb//hF
G//4RRv/+EUb//puTf/6bk3/+EUb//hFG//4RRv/+EUb//hFG//4RRv/+EUb//hFG//6bk3/+oNn//qD
Z//6g2f/+oNn//qDZ//6g2f/+m5N//hFG//6g2f/+oNn//qDZ//6g2f/+oNn//qDZ//6g2f/+oNn//pu
Tf/6bk3/+m5N//hFG//4RRv/+EUb//hFG//4RRv/+EUb//hFG//4RRv/+m5N//puTf/4RRv/+EUb//hF
G//4QBz/+EAc//hAHP/4QBz/+EAc//2/s//9v7P/+EAc//hAHP/4QBz/+EAc//hAHP/4QBz/+EAc//hA
HP/9v7P//////////////////////////////////b+z//hAHP//////////////////////////////
//////////////2/s//9v7P//unl//pqTv/4QBz/+EAc//hAHP/4QBz/+EAc//hAHP/6ak7//unl//2/
s//4QBz/+EAc//hAHP/5Ox3/+Tsd//k7Hf/5Ox3/+Tsd//2+tP/9vrT/+Tsd//k7Hf/5Ox3/+Tsd//k7
Hf/5Ox3/+Tsd//k7Hf/9vrT//b60//k7Hf/5Ox3/+Tsd//k7Hf/5Ox3/+Tsd//k7Hf//////+3xo//k7
Hf/5Ox3/+Tsd//k7Hf/5Ox3/+Tsd//k7Hf/5Ox3//tPM///////6Zk//+Tsd//k7Hf/5Ox3/+Tsd//pm
T////////tPM//k7Hf/5Ox3/+Tsd//k7Hf/5Nx3/+Tcd//k3Hf/5Nx3/+Tcd//28tP/9vLT/+Tcd//k3
Hf/5Nx3/+Tcd//k3Hf/5Nx3/+Tcd//k3Hf/9vLT//by0//k3Hf/5Nx3/+Tcd//k3Hf/5Nx3/+Tcd//k3
Hf//////+3po//k3Hf/5Nx3/+Tcd//k3Hf/5Nx3/+Tcd//k3Hf/5Nx3/+k02//7SzP/+6OX/+mNP//k3
Hf/5Nx3/+mNP//7o5f/+0sz/+k02//k3Hf/5Nx3/+Tcd//k3Hf/5Mh7/+TIe//kyHv/5Mh7/+TIe//27
tP/9u7T/+TIe//kyHv/5Mh7/+TIe//kyHv/5Mh7/+TIe//kyHv/9u7T//bu0//kyHv/5Mh7/+TIe//ky
Hv/5Mh7/+TIe//kyHv//////+3Zp//kyHv/5Mh7/+TIe//kyHv/5Mh7/+TIe//kyHv/5Mh7/+TIe//ky
Hv/+0c3///////pfT//6X0////////7Rzf/5Mh7/+TIe//kyHv/5Mh7/+TIe//kyHv/6LR//+i0f//ot
H//6LR//+i0f//25tP/9ubT/+i0f//otH//6LR//+i0f//otH//6LR//+i0f//otH//9ubT//bm0//ot
H//6LR//+i0f//otH//6LR//+i0f//otH////////HNq//otH//6LR//+i0f//otH//6LR//+i0f//ot
H//6LR//+i0f//otH//7RDj//tDN//7n5v/+5+b//tDN//tEOP/6LR//+i0f//otH//6LR//+i0f//ot
H//6KCD/+igg//ooIP/6KCD/+igg//23tf/////////////////////////////////9t7X/+igg//oo
IP/9t7X//be1//ooIP/6KCD/+igg//ooIP/6KCD/+igg//ooIP//////////////////////////////
/////////HBq//ooIP/6KCD/+igg//ooIP/6KCD/+1dR////////////+1dR//ooIP/6KCD/+igg//oo
IP/6KCD/+igg//ooIP/7IyH/+yMh//sjIf/7IyH/+yMh//62tf/+zs3//Gxr//xsa//8bGv//Gxr//xs
a//8U1L/+yMh//sjIf/+trX//ra1//sjIf/7IyH/+yMh//sjIf/7IyH/+yMh//sjIf///////Z2c//xs
a//8bGv//Gxr//xsa//8bGv/+zs5//sjIf/7IyH/+yMh//sjIf/8U1L//+bm//7Ozf/+zs3//+bm//xT
Uv/7IyH/+yMh//sjIf/7IyH/+yMh//sjIf/7HyH/+x8h//sfIf/7HyH/+x8h//60tf/+tLX/+x8h//sf
If/7HyH/+x8h//sfIf/7HyH/+x8h//sfIf/+tLX//rS1//sfIf/7HyH/+x8h//sfIf/7HyH/+x8h//sf
If///////Gpr//sfIf/7HyH/+x8h//sfIf/7HyH/+x8h//sfIf/7HyH/+x8h//xQUv///////s3N//sf
If/7HyH//s3N///////8UFL/+x8h//sfIf/7HyH/+x8h//sfIf/8GiL//Boi//waIv/8GiL//Boi//6z
tf/+s7X//Boi//waIv/8GiL//Boi//waIv/8GiL//Boi//waIv/+s7X//rO1//waIv/8GiL//Boi//wa
Iv/8GiL//Boi//waIv///////WZs//waIv/8GiL//Boi//waIv/8GiL//Boi//waIv/8GiL//UxT///l
5v/+zM7//DM6//waIv/8GiL//DM6//7Mzv//5eb//UxT//waIv/8GiL//Boi//waIv/8FSP//BUj//wV
I//8FSP//BUj//6xtv/+y87//WNs//1jbP/9Y2z//WNs//1jbP/9Y2z//WNs//wVI//+sbb//rG2//wV
I//8FSP//BUj//wVI//8FSP//BUj//wVI////////pad//1jbP/9Y2z//WNs//1jbP/9Y2z//WNs//1I
U//9SFP///////7Lzv/8FSP//BUj//wVI//8FSP//BUj//wVI//+y87///////1IU//8FSP//BUj//wV
I//9ECT//RAk//0QJP/9ECT//RAk//6vtv////////////////////////////////////////////0Q
JP/+r7b//q+2//0QJP/9ECT//RAk//0QJP/9ECT//RAk//0QJP//////////////////////////////
//////////////6vtv/+r7b//8rO//0qPP/9ECT//RAk//0QJP/9ECT//RAk//0QJP/9Kjz//8rO//6v
tv/9ECT//RAk//0QJP/9CyX//Qsl//0LJf/9CyX//Qsl//0LJf/9CyX//Qsl//0LJf/9CyX//Qsl//0L
Jf/9CyX//Qsl//0LJf/9CyX//Qsl//0LJf/9CyX//Qsl//0LJf/9CyX//Qsl//0LJf/9CyX//Qsl//0L
Jf/9CyX//Qsl//0LJf/9CyX//Qsl//0LJf/9CyX//Qsl//0LJf/9CyX//Qsl//0LJf/9CyX//Qsl//0L
Jf/9CyX//Qsl//0LJf/9CyX//Qsl//0LJf/+Byb//gcm//4HJv/+Byb//gcm//4HJv/+Byb//gcm//4H
Jv/+Byb//gcm//4HJv/+Byb//gcm//4HJv/+Byb//gcm//4HJv/+Byb//gcm//4HJv/+Byb//gcm//4H
Jv/+Byb//gcm//4HJv/+Byb//gcm//4HJv/+Byb//gcm//4HJv/+Byb//gcm//4HJv/+Byb//gcm//4H
Jv/+Byb//gcm//4HJv/+Byb//gcm//4HJv/+Byb//gcm//4HJv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAA=
</value>
</data>
</root>

View file

@ -46,7 +46,7 @@ namespace CODEC2_GUI
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
Application.Run(new MainForm());
}
}
}

View file

@ -5,12 +5,12 @@ using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("ThumbDV_DSTAR")]
[assembly: AssemblyTitle("ThumbDV VODEC GUI")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("FlexRadio Systems")]
[assembly: AssemblyProduct("ThumbDV_DSTAR")]
[assembly: AssemblyCopyright("Copyright © FlexRadio Systems 2014")]
[assembly: AssemblyProduct("ThumbDV_GUI")]
[assembly: AssemblyCopyright("Copyright © FlexRadio Systems 2014-2015")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyVersion("1.4.0.2")]
[assembly: AssemblyFileVersion("1.4.0.2")]

View file

@ -8,7 +8,7 @@
// </auto-generated>
//------------------------------------------------------------------------------
namespace ThumbDV_DSTAR_GUI.Properties {
namespace CODEC2_GUI.Properties {
using System;
@ -39,7 +39,7 @@ namespace ThumbDV_DSTAR_GUI.Properties {
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ThumbDV_DSTAR_GUI.Properties.Resources", typeof(Resources).Assembly);
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("CODEC2_GUI.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;

View file

@ -8,11 +8,11 @@
// </auto-generated>
//------------------------------------------------------------------------------
namespace ThumbDV_DSTAR_GUI.Properties {
namespace CODEC2_GUI.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
@ -22,5 +22,86 @@ namespace ThumbDV_DSTAR_GUI.Properties {
return defaultInstance;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string URList {
get {
return ((string)(this["URList"]));
}
set {
this["URList"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string MainPosition {
get {
return ((string)(this["MainPosition"]));
}
set {
this["MainPosition"] = value;
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("1000")]
public int LogEntryMax {
get {
return ((int)(this["LogEntryMax"]));
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string RPT1List {
get {
return ((string)(this["RPT1List"]));
}
set {
this["RPT1List"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string RPT2List {
get {
return ((string)(this["RPT2List"]));
}
set {
this["RPT2List"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string MYCallSign {
get {
return ((string)(this["MYCallSign"]));
}
set {
this["MYCallSign"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string MESSAGEList {
get {
return ((string)(this["MESSAGEList"]));
}
set {
this["MESSAGEList"] = value;
}
}
}
}

View file

@ -1,7 +1,27 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="CODEC2_GUI.Properties" GeneratedClassName="Settings">
<Profiles />
<Settings>
<Setting Name="URList" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="MainPosition" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="LogEntryMax" Type="System.Int32" Scope="Application">
<Value Profile="(Default)">1000</Value>
</Setting>
<Setting Name="RPT1List" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="RPT2List" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="MYCallSign" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="MESSAGEList" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
</Settings>
</SettingsFile>

View file

@ -0,0 +1,51 @@
/*******************************************************************************
* ReflectorOrRepeater.cs
*
* DStar Repeater / Reflector Model
*
* Created on: 2015-08-27
* Author: Mark Hanson / AA3RK / MKCM Software, LLC.
*
*
*******************************************************************************
*
* Copyright (C) 2015 FlexRadio Systems.
* 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/>.
*
* Contact: gpl<AT>flexradio<DOT>com or
*
* GPL C/O FlexRadio Systems
* 4616 W. Howard Lane
* Suite 1-150
* Austin, TX USA 78728
*
******************************************************************************/
namespace CODEC2_GUI
{
public class ReflectorOrRepeater
{
public string Name { get; set; }
public string Desc { get; set; }
public double Frequency { get; set; }
public double Offset { get; set; }
public string RepeaterName
{
get
{
if (Frequency == 0)
return Name;
return string.Format("{0}~{1}~{2}", Name ?? string.Empty, Frequency, Offset);
}
}
}
}

View file

@ -0,0 +1,107 @@
namespace CODEC2_GUI
{
partial class RepeaterModule
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.button3 = new System.Windows.Forms.Button();
this.btnCancel = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(30, 29);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(224, 40);
this.button1.TabIndex = 0;
this.button1.Text = "button1";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// button2
//
this.button2.Location = new System.Drawing.Point(30, 87);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(224, 40);
this.button2.TabIndex = 0;
this.button2.Text = "button1";
this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// button3
//
this.button3.Location = new System.Drawing.Point(30, 145);
this.button3.Name = "button3";
this.button3.Size = new System.Drawing.Size(224, 40);
this.button3.TabIndex = 0;
this.button3.Text = "button1";
this.button3.UseVisualStyleBackColor = true;
this.button3.Click += new System.EventHandler(this.button3_Click);
//
// btnCancel
//
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnCancel.Location = new System.Drawing.Point(30, 203);
this.btnCancel.Name = "btnCancel";
this.btnCancel.Size = new System.Drawing.Size(224, 40);
this.btnCancel.TabIndex = 0;
this.btnCancel.Text = "Cancel";
this.btnCancel.UseVisualStyleBackColor = true;
this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
//
// RepeaterModule
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.btnCancel;
this.ClientSize = new System.Drawing.Size(282, 281);
this.Controls.Add(this.btnCancel);
this.Controls.Add(this.button3);
this.Controls.Add(this.button2);
this.Controls.Add(this.button1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "RepeaterModule";
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.Text = "Repeater Module";
this.Load += new System.EventHandler(this.RepeaterModule_Load);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.Button button3;
private System.Windows.Forms.Button btnCancel;
}
}

View file

@ -0,0 +1,143 @@
/*******************************************************************************
* RepeaterModule.cs
*
* DStar Repeater Selection Dialog
*
* Created on: 2015-08-27
* Author: Mark Hanson / AA3RK / MKCM Software, LLC.
*
*
*******************************************************************************
*
* Copyright (C) 2015 FlexRadio Systems.
* 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/>.
*
* Contact: gpl<AT>flexradio<DOT>com or
*
* GPL C/O FlexRadio Systems
* 4616 W. Howard Lane
* Suite 1-150
* Austin, TX USA 78728
*
******************************************************************************/
using System;
using System.Windows.Forms;
namespace CODEC2_GUI
{
public partial class RepeaterModule : Form
{
public string RptName
{
get; set;
}
public string RptDesc
{
get; set;
}
public ReflectorOrRepeater SelectedRpt
{
get; set;
}
private double[] Frequency = new double[3];
private double[] Offset = new double[3];
public RepeaterModule()
{
InitializeComponent();
}
private void RepeaterModule_Load(object sender, EventArgs e)
{
button1.Visible = false;
button2.Visible = false;
button3.Visible = false;
string[] vals = RptDesc.Split('|');
for (int idx = 3; idx < vals.Length; idx++)
{
string[] mod = vals[idx].Split(':');
if (mod.Length != 2)
continue;
string[] fr = mod[1].Split(' ');
if (fr.Length == 0 || string.IsNullOrEmpty(fr[0]))
continue;
if (mod[0] == "A")
{
button1.Visible = true;
Frequency[0] = fr.Length > 0 ? Convert.ToDouble(fr[0]) : 0;
Offset[0] = fr.Length > 1 ? Convert.ToDouble(fr[1]) : 0;
button1.Text = string.Format("Mod A {0:#.000} MHz; {1:#.0} MHz", Frequency[0], Offset[0]);
}
else if (mod[0] == "B")
{
button2.Visible = true;
Frequency[1] = fr.Length > 0 ? Convert.ToDouble(fr[0]) : 0;
Offset[1] = fr.Length > 1 ? Convert.ToDouble(fr[1]) : 0;
button2.Text = string.Format("Mod B {0:#.000} MHz; {1:#.0} MHz", Frequency[1], Offset[1]);
}
else if (mod[0] == "C")
{
button3.Visible = true;
Frequency[2] = fr.Length > 0 ? Convert.ToDouble(fr[0]) : 0;
Offset[2] = fr.Length > 1 ? Convert.ToDouble(fr[1]) : 0;
button3.Text = string.Format("Mod C {0:#.000} MHz; {1:#.0} MHz", Frequency[2], Offset[2]);
}
}
}
private void btnCancel_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
Close();
}
private void button1_Click(object sender, EventArgs e)
{
SelectedRpt = new ReflectorOrRepeater();
SelectedRpt.Name = string.Format("{0,-7}A", RptName.Trim());
SelectedRpt.Desc = RptDesc;
SelectedRpt.Frequency = Frequency[0];
SelectedRpt.Offset = Offset[0];
DialogResult = DialogResult.OK;
Close();
}
private void button2_Click(object sender, EventArgs e)
{
SelectedRpt = new ReflectorOrRepeater();
SelectedRpt.Name = string.Format("{0,-7}B", RptName.Trim());
SelectedRpt.Desc = RptDesc;
SelectedRpt.Frequency = Frequency[1];
SelectedRpt.Offset = Offset[1];
DialogResult = DialogResult.OK;
Close();
}
private void button3_Click(object sender, EventArgs e)
{
SelectedRpt = new ReflectorOrRepeater();
SelectedRpt.Name = string.Format("{0,-7}C", RptName.Trim());
SelectedRpt.Desc = RptDesc;
SelectedRpt.Frequency = Frequency[2];
SelectedRpt.Offset = Offset[2];
DialogResult = DialogResult.OK;
Close();
}
}
}

View file

@ -0,0 +1,180 @@
namespace CODEC2_GUI
{
partial class SelectForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.btnSelect = new System.Windows.Forms.Button();
this.btnCancel = new System.Windows.Forms.Button();
this.listView1 = new System.Windows.Forms.ListView();
this.nameCol = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.descCol = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components);
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.rb3 = new System.Windows.Forms.RadioButton();
this.rb2 = new System.Windows.Forms.RadioButton();
this.rb1 = new System.Windows.Forms.RadioButton();
((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).BeginInit();
this.groupBox1.SuspendLayout();
this.SuspendLayout();
//
// btnSelect
//
this.btnSelect.DialogResult = System.Windows.Forms.DialogResult.OK;
this.btnSelect.Location = new System.Drawing.Point(115, 281);
this.btnSelect.Name = "btnSelect";
this.btnSelect.Size = new System.Drawing.Size(101, 33);
this.btnSelect.TabIndex = 1;
this.btnSelect.Text = "Select";
this.btnSelect.UseVisualStyleBackColor = true;
this.btnSelect.Click += new System.EventHandler(this.btnSelect_Click);
//
// btnCancel
//
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnCancel.Location = new System.Drawing.Point(431, 281);
this.btnCancel.Name = "btnCancel";
this.btnCancel.Size = new System.Drawing.Size(101, 33);
this.btnCancel.TabIndex = 2;
this.btnCancel.Text = "Cancel";
this.btnCancel.UseVisualStyleBackColor = true;
this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
//
// listView1
//
this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.nameCol,
this.descCol});
this.listView1.FullRowSelect = true;
this.listView1.HideSelection = false;
this.listView1.Location = new System.Drawing.Point(12, 64);
this.listView1.MultiSelect = false;
this.listView1.Name = "listView1";
this.listView1.Size = new System.Drawing.Size(653, 205);
this.listView1.TabIndex = 0;
this.listView1.UseCompatibleStateImageBehavior = false;
this.listView1.View = System.Windows.Forms.View.Details;
//
// nameCol
//
this.nameCol.Text = "Name";
this.nameCol.Width = 100;
//
// descCol
//
this.descCol.Text = "Description";
this.descCol.Width = 515;
//
// bindingSource1
//
this.bindingSource1.DataMember = "items";
//
// groupBox1
//
this.groupBox1.Controls.Add(this.rb3);
this.groupBox1.Controls.Add(this.rb2);
this.groupBox1.Controls.Add(this.rb1);
this.groupBox1.Location = new System.Drawing.Point(13, 3);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(652, 49);
this.groupBox1.TabIndex = 3;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "Mode";
//
// rb3
//
this.rb3.AutoSize = true;
this.rb3.Location = new System.Drawing.Point(404, 22);
this.rb3.Name = "rb3";
this.rb3.Size = new System.Drawing.Size(229, 25);
this.rb3.TabIndex = 2;
this.rb3.TabStop = true;
this.rb3.Text = "Reflector Commands";
this.rb3.UseVisualStyleBackColor = true;
this.rb3.CheckedChanged += new System.EventHandler(this.rb3_CheckedChanged);
//
// rb2
//
this.rb2.AutoSize = true;
this.rb2.Location = new System.Drawing.Point(230, 22);
this.rb2.Name = "rb2";
this.rb2.Size = new System.Drawing.Size(141, 25);
this.rb2.TabIndex = 1;
this.rb2.TabStop = true;
this.rb2.Text = "Reflectors";
this.rb2.UseVisualStyleBackColor = true;
this.rb2.CheckedChanged += new System.EventHandler(this.rb2_CheckedChanged);
//
// rb1
//
this.rb1.AutoSize = true;
this.rb1.Location = new System.Drawing.Point(41, 22);
this.rb1.Name = "rb1";
this.rb1.Size = new System.Drawing.Size(130, 25);
this.rb1.TabIndex = 0;
this.rb1.TabStop = true;
this.rb1.Text = "Repeaters";
this.rb1.UseVisualStyleBackColor = true;
this.rb1.Click += new System.EventHandler(this.rb1_Click);
//
// SelectForm
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.CancelButton = this.btnCancel;
this.ClientSize = new System.Drawing.Size(677, 326);
this.ControlBox = false;
this.Controls.Add(this.groupBox1);
this.Controls.Add(this.listView1);
this.Controls.Add(this.btnCancel);
this.Controls.Add(this.btnSelect);
this.Font = new System.Drawing.Font("Courier New", 11F);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
this.Name = "SelectForm";
this.Text = "Select";
this.Load += new System.EventHandler(this.SelectForm_Load);
((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).EndInit();
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Button btnSelect;
private System.Windows.Forms.Button btnCancel;
private System.Windows.Forms.ListView listView1;
private System.Windows.Forms.ColumnHeader nameCol;
private System.Windows.Forms.ColumnHeader descCol;
private System.Windows.Forms.BindingSource bindingSource1;
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.RadioButton rb3;
private System.Windows.Forms.RadioButton rb2;
private System.Windows.Forms.RadioButton rb1;
}
}

View file

@ -0,0 +1,204 @@
/*******************************************************************************
* SelectForm.cs
*
* DStar Repeater / Reflector Selection Dialog
*
* Created on: 2015-08-23
* Author: Mark Hanson / AA3RK / MKCM Software, LLC.
*
*
*******************************************************************************
*
* Copyright (C) 2015 FlexRadio Systems.
* 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/>.
*
* Contact: gpl<AT>flexradio<DOT>com or
*
* GPL C/O FlexRadio Systems
* 4616 W. Howard Lane
* Suite 1-150
* Austin, TX USA 78728
*
******************************************************************************/
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
namespace CODEC2_GUI
{
public partial class SelectForm : Form
{
public enum RMode { Repeater, Reflector, ReflectorCmd };
public RMode Mode { get; set; }
public bool showOnly { get; set; }
public bool repeaterOnly { get; set; }
public string SelectedName { get; set; }
public string SelectedDesc { get; set; }
private IEnumerable<ReflectorOrRepeater> ReflectorList { get; set; }
private IEnumerable<ReflectorOrRepeater> RepeaterList { get; set; }
private IEnumerable<ReflectorOrRepeater> ReflectorCmdList { get; set; }
public SelectForm()
{
InitializeComponent();
ReflectorCmdList = new List<ReflectorOrRepeater>() {
{ new ReflectorOrRepeater() { Name = " U", Desc = "Unlink command"} },
{ new ReflectorOrRepeater() { Name = " I", Desc = "Info command" } },
{ new ReflectorOrRepeater() { Name = " E", Desc = "Echo command" } }
};
}
private void SelectForm_Load(object sender, EventArgs e)
{
if (showOnly)
{
btnSelect.Visible = false;
btnCancel.Text = "Close";
}
DstarInfo di = new DstarInfo();
if (repeaterOnly)
{
Mode = RMode.Repeater;
rb1.Checked = true;
rb2.Visible = false;
rb3.Visible = false;
if (di.Repeaters == null || di.Repeaters.Count == 0)
{
MessageBox.Show(this, "Load / Reload Repeater List from File Menu!", "Select Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
DialogResult = DialogResult.Cancel;
Close();
return;
}
RepeaterList = di.Repeaters;
}
else
{
if (di.Refelectors == null || di.Refelectors.Count == 0)
{
MessageBox.Show(this, "Load / Reload Reflectors List from File Menu!", "Select Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
DialogResult = DialogResult.Cancel;
Close();
return;
}
ReflectorList = di.Refelectors;
rb1.Visible = false;
if (Mode == RMode.Repeater)
Mode = RMode.Reflector;
switch (Mode)
{
case RMode.Repeater:
rb1.Checked = true;
break;
case RMode.Reflector:
rb2.Checked = true;
break;
case RMode.ReflectorCmd:
rb3.Checked = true;
break;
}
}
setlistitems();
}
private void setlistitems()
{
listView1.Items.Clear();
IEnumerable<ReflectorOrRepeater> rlist;
switch(Mode)
{
case RMode.Reflector:
rlist = ReflectorList;
break;
case RMode.ReflectorCmd:
rlist = ReflectorCmdList;
break;
case RMode.Repeater:
default:
rlist = RepeaterList;
break;
}
if (rlist != null)
{
foreach (ReflectorOrRepeater rr in rlist)
{
listView1.Items.Add(new ListViewItem(new string[] { rr.Name, rr.Desc }));
}
}
if (listView1.Items.Count > 0)
listView1.SelectedIndices.Add(0);
listView1.Select();
}
private void btnSelect_Click(object sender, EventArgs e)
{
if (listView1.SelectedItems.Count > 0)
{
SelectedName = listView1.SelectedItems[0].Text;
StringBuilder sb = new StringBuilder();
foreach(ListViewItem.ListViewSubItem lvi in listView1.SelectedItems[0].SubItems)
{
sb.AppendFormat("{0}{1}", sb.Length > 0 ? "|" : string.Empty, lvi.Text);
}
SelectedDesc = sb.ToString();
DialogResult = DialogResult.OK;
Close();
}
else
MessageBox.Show(this, "Nothing selected!", "Information");
}
private void btnCancel_Click(object sender, EventArgs e)
{
Close();
}
private void rb1_Click(object sender, EventArgs e)
{
if (rb1.Checked)
{
Mode = RMode.Repeater;
setlistitems();
}
}
private void rb2_CheckedChanged(object sender, EventArgs e)
{
if (rb2.Checked)
{
Mode = RMode.Reflector;
setlistitems();
}
}
private void rb3_CheckedChanged(object sender, EventArgs e)
{
if (rb3.Checked)
{
Mode = RMode.ReflectorCmd;
setlistitems();
}
}
}
}

View file

@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="bindingSource1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View file

@ -0,0 +1,164 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{4BD2FDA2-298F-4FFD-86AD-F7A677ABD93E}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>CODEC2_GUI</RootNamespace>
<AssemblyName>ThumbDV_DSTAR_GUI</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>x86</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>x86</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>Images\dstar.ico</ApplicationIcon>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\x86\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="Flex.UiWpfFramework">
<HintPath>..\..\..\..\..\SmartSDR_1_14_21_References\Flex.UiWpfFramework.dll</HintPath>
</Reference>
<Reference Include="FlexLib">
<HintPath>..\..\..\..\..\SmartSDR_1_14_21_References\FlexLib.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Data" />
<Reference Include="System.Net" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="AssemblyInfo.cs" />
<Compile Include="dstarctl.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="dstarctl.Designer.cs">
<DependentUpon>dstarctl.cs</DependentUpon>
</Compile>
<Compile Include="DstarInfo.cs" />
<Compile Include="dstarlistitem.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="dstarlistitem.Designer.cs">
<DependentUpon>dstarlistitem.cs</DependentUpon>
</Compile>
<Compile Include="MainForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="MainForm.Designer.cs">
<DependentUpon>MainForm.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="ReflectorOrRepeater.cs" />
<Compile Include="RepeaterModule.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="RepeaterModule.Designer.cs">
<DependentUpon>RepeaterModule.cs</DependentUpon>
</Compile>
<Compile Include="SelectForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="SelectForm.Designer.cs">
<DependentUpon>SelectForm.cs</DependentUpon>
</Compile>
<EmbeddedResource Include="dstarctl.resx">
<DependentUpon>dstarctl.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="dstarlistitem.resx">
<DependentUpon>dstarlistitem.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="MainForm.resx">
<DependentUpon>MainForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<EmbeddedResource Include="RepeaterModule.resx">
<DependentUpon>RepeaterModule.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="SelectForm.resx">
<DependentUpon>SelectForm.cs</DependentUpon>
</EmbeddedResource>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<Content Include="Images\dstar.ico" />
<Content Include="Licenses\FlexLib License.txt" />
<Content Include="Licenses\gpl-3.0.txt" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View file

@ -0,0 +1,22 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.23107.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ThumbDV_GUI", "ThumbDV_GUI.csproj", "{4BD2FDA2-298F-4FFD-86AD-F7A677ABD93E}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x86 = Debug|x86
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{4BD2FDA2-298F-4FFD-86AD-F7A677ABD93E}.Debug|x86.ActiveCfg = Debug|x86
{4BD2FDA2-298F-4FFD-86AD-F7A677ABD93E}.Debug|x86.Build.0 = Debug|x86
{4BD2FDA2-298F-4FFD-86AD-F7A677ABD93E}.Release|x86.ActiveCfg = Release|x86
{4BD2FDA2-298F-4FFD-86AD-F7A677ABD93E}.Release|x86.Build.0 = Release|x86
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View file

@ -0,0 +1,300 @@
namespace CODEC2_GUI
{
partial class dstarctl
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.mycallsign = new System.Windows.Forms.Label();
this.urcallsign = new System.Windows.Forms.Label();
this.rpt1 = new System.Windows.Forms.Label();
this.rpt2 = new System.Windows.Forms.Label();
this.mytxt = new System.Windows.Forms.TextBox();
this.mynotetxt = new System.Windows.Forms.TextBox();
this.urtxt = new System.Windows.Forms.ComboBox();
this.rpt1txt = new System.Windows.Forms.ComboBox();
this.rpt2txt = new System.Windows.Forms.ComboBox();
this.rbDV = new System.Windows.Forms.RadioButton();
this.rbDR = new System.Windows.Forms.RadioButton();
this.mynote = new System.Windows.Forms.Label();
this.rpt1tip = new System.Windows.Forms.ToolTip(this.components);
this.rpt2tip = new System.Windows.Forms.ToolTip(this.components);
this.urtip = new System.Windows.Forms.ToolTip(this.components);
this.mytip = new System.Windows.Forms.ToolTip(this.components);
this.mynotetip = new System.Windows.Forms.ToolTip(this.components);
this.dvtip = new System.Windows.Forms.ToolTip(this.components);
this.drtip = new System.Windows.Forms.ToolTip(this.components);
this.btnReset = new System.Windows.Forms.Button();
this.btnRef = new System.Windows.Forms.Button();
this.btnRpt = new System.Windows.Forms.Button();
this.msgtxt = new System.Windows.Forms.ComboBox();
this.lblMESSAGE = new System.Windows.Forms.Label();
this.msgtip = new System.Windows.Forms.ToolTip(this.components);
this.SuspendLayout();
//
// mycallsign
//
this.mycallsign.AutoSize = true;
this.mycallsign.Location = new System.Drawing.Point(3, 64);
this.mycallsign.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.mycallsign.Name = "mycallsign";
this.mycallsign.Size = new System.Drawing.Size(43, 21);
this.mycallsign.TabIndex = 2;
this.mycallsign.Text = "MY:";
//
// urcallsign
//
this.urcallsign.AutoSize = true;
this.urcallsign.Location = new System.Drawing.Point(3, 106);
this.urcallsign.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.urcallsign.Name = "urcallsign";
this.urcallsign.Size = new System.Drawing.Size(43, 21);
this.urcallsign.TabIndex = 6;
this.urcallsign.Text = "UR:";
//
// rpt1
//
this.rpt1.AutoSize = true;
this.rpt1.Location = new System.Drawing.Point(316, 64);
this.rpt1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.rpt1.Name = "rpt1";
this.rpt1.Size = new System.Drawing.Size(65, 21);
this.rpt1.TabIndex = 9;
this.rpt1.Text = "RPT1:";
//
// rpt2
//
this.rpt2.AutoSize = true;
this.rpt2.Location = new System.Drawing.Point(316, 110);
this.rpt2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.rpt2.Name = "rpt2";
this.rpt2.Size = new System.Drawing.Size(65, 21);
this.rpt2.TabIndex = 12;
this.rpt2.Text = "RPT2:";
//
// mytxt
//
this.mytxt.Location = new System.Drawing.Point(53, 60);
this.mytxt.Margin = new System.Windows.Forms.Padding(4);
this.mytxt.MaxLength = 8;
this.mytxt.Name = "mytxt";
this.mytxt.Size = new System.Drawing.Size(110, 28);
this.mytxt.TabIndex = 3;
this.mytxt.TextChanged += new System.EventHandler(this.mytxt_TextChanged);
//
// mynotetxt
//
this.mynotetxt.Location = new System.Drawing.Point(200, 62);
this.mynotetxt.Margin = new System.Windows.Forms.Padding(4);
this.mynotetxt.MaxLength = 4;
this.mynotetxt.Name = "mynotetxt";
this.mynotetxt.Size = new System.Drawing.Size(77, 28);
this.mynotetxt.TabIndex = 5;
this.mynotetxt.TextChanged += new System.EventHandler(this.mynotetxt_TextChanged);
//
// urtxt
//
this.urtxt.Items.AddRange(new object[] {
"CQCQCQ"});
this.urtxt.Location = new System.Drawing.Point(53, 102);
this.urtxt.Margin = new System.Windows.Forms.Padding(4);
this.urtxt.MaxLength = 8;
this.urtxt.Name = "urtxt";
this.urtxt.Size = new System.Drawing.Size(152, 28);
this.urtxt.TabIndex = 7;
this.urtxt.SelectedIndexChanged += new System.EventHandler(this.urtxt_SelectedIndexChanged);
this.urtxt.TextChanged += new System.EventHandler(this.urtxt_TextChanged);
//
// rpt1txt
//
this.rpt1txt.Location = new System.Drawing.Point(387, 60);
this.rpt1txt.Margin = new System.Windows.Forms.Padding(4);
this.rpt1txt.MaxLength = 8;
this.rpt1txt.Name = "rpt1txt";
this.rpt1txt.Size = new System.Drawing.Size(231, 28);
this.rpt1txt.TabIndex = 10;
this.rpt1txt.SelectedIndexChanged += new System.EventHandler(this.rpt1txt_SelectedIndexChanged);
this.rpt1txt.TextChanged += new System.EventHandler(this.rpt1txt_TextChanged);
//
// rpt2txt
//
this.rpt2txt.Location = new System.Drawing.Point(387, 106);
this.rpt2txt.Margin = new System.Windows.Forms.Padding(4);
this.rpt2txt.MaxLength = 8;
this.rpt2txt.Name = "rpt2txt";
this.rpt2txt.Size = new System.Drawing.Size(231, 28);
this.rpt2txt.TabIndex = 13;
this.rpt2txt.SelectedIndexChanged += new System.EventHandler(this.rpt2txt_SelectedIndexChanged);
this.rpt2txt.TextChanged += new System.EventHandler(this.rpt2txt_TextChanged);
//
// rbDV
//
this.rbDV.AutoSize = true;
this.rbDV.Location = new System.Drawing.Point(192, 9);
this.rbDV.Margin = new System.Windows.Forms.Padding(4);
this.rbDV.Name = "rbDV";
this.rbDV.Size = new System.Drawing.Size(53, 25);
this.rbDV.TabIndex = 0;
this.rbDV.TabStop = true;
this.rbDV.Text = "DV";
this.rbDV.UseVisualStyleBackColor = true;
this.rbDV.Click += new System.EventHandler(this.rbDV_Click);
//
// rbDR
//
this.rbDR.AutoSize = true;
this.rbDR.Location = new System.Drawing.Point(267, 9);
this.rbDR.Margin = new System.Windows.Forms.Padding(4);
this.rbDR.Name = "rbDR";
this.rbDR.Size = new System.Drawing.Size(53, 25);
this.rbDR.TabIndex = 1;
this.rbDR.TabStop = true;
this.rbDR.Text = "DR";
this.rbDR.UseVisualStyleBackColor = true;
this.rbDR.Click += new System.EventHandler(this.rbDR_Click);
//
// mynote
//
this.mynote.AutoSize = true;
this.mynote.Location = new System.Drawing.Point(173, 62);
this.mynote.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.mynote.Name = "mynote";
this.mynote.Size = new System.Drawing.Size(21, 21);
this.mynote.TabIndex = 4;
this.mynote.Text = "/";
//
// btnReset
//
this.btnReset.Location = new System.Drawing.Point(351, 7);
this.btnReset.Margin = new System.Windows.Forms.Padding(4);
this.btnReset.Name = "btnReset";
this.btnReset.Size = new System.Drawing.Size(77, 29);
this.btnReset.TabIndex = 14;
this.btnReset.Text = "Reset";
this.btnReset.UseVisualStyleBackColor = true;
this.btnReset.Visible = false;
this.btnReset.Click += new System.EventHandler(this.btnReset_Click);
//
// btnRef
//
this.btnRef.Location = new System.Drawing.Point(228, 102);
this.btnRef.Name = "btnRef";
this.btnRef.Size = new System.Drawing.Size(61, 31);
this.btnRef.TabIndex = 8;
this.btnRef.Text = "Ref";
this.btnRef.UseVisualStyleBackColor = true;
this.btnRef.Click += new System.EventHandler(this.btnRef_Click);
//
// btnRpt
//
this.btnRpt.Location = new System.Drawing.Point(638, 58);
this.btnRpt.Name = "btnRpt";
this.btnRpt.Size = new System.Drawing.Size(61, 33);
this.btnRpt.TabIndex = 11;
this.btnRpt.Text = "Rpt";
this.btnRpt.UseVisualStyleBackColor = true;
this.btnRpt.Click += new System.EventHandler(this.btnRpt_Click);
//
// msgtxt
//
this.msgtxt.FormattingEnabled = true;
this.msgtxt.Location = new System.Drawing.Point(156, 157);
this.msgtxt.MaxLength = 20;
this.msgtxt.Name = "msgtxt";
this.msgtxt.Size = new System.Drawing.Size(462, 28);
this.msgtxt.TabIndex = 15;
this.msgtxt.SelectedIndexChanged += new System.EventHandler(this.msgtxt_SelectedIndexChanged);
this.msgtxt.TextChanged += new System.EventHandler(this.msgtxt_TextChanged);
//
// lblMESSAGE
//
this.lblMESSAGE.AutoSize = true;
this.lblMESSAGE.Location = new System.Drawing.Point(34, 157);
this.lblMESSAGE.Name = "lblMESSAGE";
this.lblMESSAGE.Size = new System.Drawing.Size(98, 21);
this.lblMESSAGE.TabIndex = 16;
this.lblMESSAGE.Text = "Message:";
//
// dstarctl
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.Controls.Add(this.lblMESSAGE);
this.Controls.Add(this.msgtxt);
this.Controls.Add(this.btnRpt);
this.Controls.Add(this.btnRef);
this.Controls.Add(this.btnReset);
this.Controls.Add(this.rbDR);
this.Controls.Add(this.rbDV);
this.Controls.Add(this.rpt2txt);
this.Controls.Add(this.rpt1txt);
this.Controls.Add(this.urtxt);
this.Controls.Add(this.mynotetxt);
this.Controls.Add(this.mytxt);
this.Controls.Add(this.rpt2);
this.Controls.Add(this.rpt1);
this.Controls.Add(this.urcallsign);
this.Controls.Add(this.mynote);
this.Controls.Add(this.mycallsign);
this.Font = new System.Drawing.Font("Courier New", 11F);
this.Margin = new System.Windows.Forms.Padding(4);
this.Name = "dstarctl";
this.Size = new System.Drawing.Size(730, 198);
this.Load += new System.EventHandler(this.dstarctl_Load);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label mycallsign;
private System.Windows.Forms.Label urcallsign;
private System.Windows.Forms.Label rpt1;
private System.Windows.Forms.Label rpt2;
private System.Windows.Forms.TextBox mytxt;
private System.Windows.Forms.TextBox mynotetxt;
private System.Windows.Forms.ComboBox urtxt;
private System.Windows.Forms.ComboBox rpt1txt;
private System.Windows.Forms.ComboBox rpt2txt;
private System.Windows.Forms.RadioButton rbDV;
private System.Windows.Forms.RadioButton rbDR;
private System.Windows.Forms.Label mynote;
private System.Windows.Forms.ToolTip rpt1tip;
private System.Windows.Forms.ToolTip rpt2tip;
private System.Windows.Forms.ToolTip urtip;
private System.Windows.Forms.ToolTip mytip;
private System.Windows.Forms.ToolTip mynotetip;
private System.Windows.Forms.ToolTip dvtip;
private System.Windows.Forms.ToolTip drtip;
private System.Windows.Forms.Button btnReset;
private System.Windows.Forms.Button btnRef;
private System.Windows.Forms.Button btnRpt;
private System.Windows.Forms.ComboBox msgtxt;
private System.Windows.Forms.Label lblMESSAGE;
private System.Windows.Forms.ToolTip msgtip;
}
}

View file

@ -0,0 +1,578 @@
/*******************************************************************************
* dstarctl.cs
*
* UI Control for DSTAR Settings
*
* Created on: 2015-08-20
* Author: Mark Hanson / AA3RK / MKCM Software, LLC.
*
*
*******************************************************************************
*
* Copyright (C) 2015 FlexRadio Systems.
* 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/>.
*
* Contact: gpl<AT>flexradio<DOT>com or
*
* GPL C/O FlexRadio Systems
* 4616 W. Howard Lane
* Suite 1-150
* Austin, TX USA 78728
*
******************************************************************************/
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace CODEC2_GUI
{
public partial class dstarctl : UserControl, INotifyPropertyChanged
{
[Flags]
public enum ModifyFlags : byte
{
NOFLAGS = 0,
MYFLAG = 1,
NOTEFLAG = 2,
URFLAG = 4,
RPT1FLAG = 8,
RPT2FLAG = 16,
DRFLAG = 32,
MESSAGE = 64
}
public ModifyFlags Modified { get; set; }
private bool DRModeOrig;
private string MYOrig = string.Empty;
private string NOTEOrig = string.Empty;
private string UROrig = string.Empty;
private string RPT1Orig = string.Empty;
private string RPT2Orig = string.Empty;
private string MESSAGEOrig = string.Empty;
private bool inreset;
public bool DRMode
{
get
{
return rbDR.Checked;
}
set
{
if ((rbDV.Checked && value) || (rbDR.Checked && !value) || (!rbDV.Checked && !rbDR.Checked))
{
rbDV.Checked = !value;
rbDR.Checked = value;
Modified = Modified & ~ModifyFlags.DRFLAG;
rpt1txt.Enabled =
rpt1.Enabled =
rpt2.Enabled =
btnRpt.Visible =
rpt2txt.Enabled =
value;
OnPropertyChanged("DRMode");
}
DRModeOrig = value;
}
}
public string MY
{
get
{
return mytxt.Text.ToUpper();
}
set
{
if (value == null)
value = string.Empty;
if (string.Compare(value, mytxt.Text, true) != 0)
{
mytxt.Text = value.ToUpper();
Modified = Modified & ~ModifyFlags.MYFLAG;
OnPropertyChanged("MY");
}
MYOrig = value;
updateReset();
}
}
public string NOTE
{
get
{
return mynotetxt.Text;
}
set
{
if (value == null)
value = string.Empty;
if (string.Compare(value, mynotetxt.Text, true) != 0)
{
mynotetxt.Text = value;
Modified = Modified & ~ModifyFlags.NOTEFLAG;
OnPropertyChanged("NOTE");
}
NOTEOrig = value;
updateReset();
}
}
public string UR
{
get
{
return urtxt.Text.ToUpper();
}
set
{
if (value == null)
value = string.Empty;
if (string.Compare(value, urtxt.Text, true) != 0)
{
urtxt.Text = value.ToUpper();
Modified = Modified & ~ModifyFlags.URFLAG;
OnPropertyChanged("UR");
}
UROrig = value;
updateReset();
}
}
public string RPT1
{
get
{
return rpt1txt.Text.ToUpper();
}
set
{
if (value == null)
value = string.Empty;
if (rpt1txt.Text.StartsWith(value) == false)
{
inreset = true;
value = value.ToUpper();
int idx = rpt1txt.FindString(value);
if (idx >= 0)
{
rpt1txt.SelectedIndex = idx;
value = rpt1txt.Text;
}
else
rpt1txt.Text = value;
inreset = false;
Modified = Modified & ~ModifyFlags.RPT1FLAG;
OnPropertyChanged("RPT1");
}
RPT1Orig = value;
updateReset();
}
}
public string RPT2
{
get
{
return DRMode ? rpt2txt.Text.ToUpper() : string.Empty;
}
set
{
if (value == null)
value = string.Empty;
if (string.Compare(value, rpt2txt.Text, true) != 0)
{
rpt2txt.Text = value.ToUpper();
Modified = Modified & ~ModifyFlags.RPT2FLAG;
OnPropertyChanged("RPT2");
}
RPT2Orig = value;
updateReset();
}
}
public string MESSAGE
{
get
{
return msgtxt.Text;
}
set
{
if (value == null)
value = string.Empty;
if (string.Compare(value, msgtxt.Text, true) != 0)
{
msgtxt.Text = value.ToUpper();
Modified = Modified & ~ModifyFlags.MESSAGE;
OnPropertyChanged("MESSAGE");
}
MESSAGEOrig = value;
updateReset();
}
}
public List<string> URList
{
get
{
List<string> lst = new List<string>(urtxt.Items.Cast<string>());
int i = lst.IndexOf("CQCQCQ");
if (i >= 0)
lst.RemoveAt(i);
return lst;
}
set
{
urtxt.Items.Clear();
if (value != null && value.Count > 0)
{
if (!value.Contains("CQCQCQ"))
urtxt.Items.Add("CQCQCQ");
urtxt.Items.AddRange(value.ToArray());
}
else
urtxt.Items.Add("CQCQCQ");
}
}
public List<string> RPT1List
{
get
{
List<string> lst = new List<string>(rpt1txt.Items.Cast<string>());
return lst;
}
set
{
rpt1txt.Items.Clear();
if (value != null && value.Count > 0)
{
rpt1txt.Items.AddRange(value.ToArray());
}
}
}
public List<string> RPT2List
{
get
{
List<string> lst = new List<string>(rpt2txt.Items.Cast<string>());
return lst;
}
set
{
rpt2txt.Items.Clear();
if (value != null && value.Count > 0)
{
rpt2txt.Items.AddRange(value.ToArray());
}
}
}
public List<string> MESSAGEList
{
get
{
List<string> lst = new List<string>(msgtxt.Items.Cast<string>());
return lst;
}
set
{
msgtxt.Items.Clear();
if (value != null && value.Count > 0)
{
msgtxt.Items.AddRange(value.ToArray());
}
}
}
public dstarctl()
{
InitializeComponent();
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string prop)
{
if (inreset)
return;
if (prop == "Modified")
{
btnReset.Visible = Modified != ModifyFlags.NOFLAGS;
}
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
private void rbDV_Click(object sender, EventArgs e)
{
if (rbDR.Checked == true)
rbDR.Checked = false;
Modified = Modified & ~ModifyFlags.DRFLAG;
rpt1txt.Enabled = false;
rpt1txt.Text = string.Empty;
rpt2txt.Text = string.Empty;
rpt1.Enabled = false;
rpt2.Enabled = false;
rpt2txt.Enabled = false;
btnRpt.Visible = false;
OnPropertyChanged("DRMode");
OnPropertyChanged("Modified");
}
private void rbDR_Click(object sender, EventArgs e)
{
if (rbDV.Checked == true)
rbDV.Checked = false;
Modified = Modified | ModifyFlags.DRFLAG;
rpt1txt.Enabled = true;
rpt1.Enabled = true;
rpt2.Enabled = true;
rpt2txt.Enabled = true;
btnRpt.Visible = true;
OnPropertyChanged("DRMode");
OnPropertyChanged("Modified");
}
private void dstarctl_Load(object sender, EventArgs e)
{
Modified = ModifyFlags.NOFLAGS;
btnReset.Visible = false;
rpt1tip.SetToolTip(rpt1txt, "Access / Area Callsign");
rpt2tip.SetToolTip(rpt2txt, "Link / Gateway Callsign");
urtip.SetToolTip(urtxt, "Destination Callsign (CQ, Individual Callsign or Reflector Command)");
mytip.SetToolTip(mytxt, "MY Callsign (8 chars max)");
mynotetip.SetToolTip(mynotetxt, "Note (4 chars max)");
dvtip.SetToolTip(rbDV, "DStar Simplex Mode");
drtip.SetToolTip(rbDR, "DStar Repeater Mode");
msgtip.SetToolTip(msgtxt, "Slow Data Message (20 chars max)");
}
private void mytxt_TextChanged(object sender, EventArgs e)
{
if (inreset)
return;
Modified = Modified | ModifyFlags.MYFLAG;
OnPropertyChanged("MY");
OnPropertyChanged("Modified");
}
private void mynotetxt_TextChanged(object sender, EventArgs e)
{
if (inreset)
return;
Modified = Modified | ModifyFlags.NOTEFLAG;
OnPropertyChanged("NOTE");
OnPropertyChanged("Modified");
}
private void urtxt_TextChanged(object sender, EventArgs e)
{
if (inreset)
return;
Modified = Modified | ModifyFlags.URFLAG;
OnPropertyChanged("UR");
OnPropertyChanged("Modified");
}
private void rpt1txt_TextChanged(object sender, EventArgs e)
{
if (inreset)
return;
Modified = Modified | ModifyFlags.RPT1FLAG;
OnPropertyChanged("RPT1");
OnPropertyChanged("Modified");
}
private void rpt2txt_TextChanged(object sender, EventArgs e)
{
if (inreset)
return;
Modified = Modified | ModifyFlags.RPT2FLAG;
OnPropertyChanged("RPT2");
OnPropertyChanged("Modified");
}
private void msgtxt_TextChanged(object sender, EventArgs e)
{
if (inreset)
return;
Modified = Modified | ModifyFlags.MESSAGE;
OnPropertyChanged("MESSAGE");
OnPropertyChanged("Modified");
}
private void rpt1txt_SelectedIndexChanged(object sender, EventArgs e)
{
if (inreset)
return;
Modified = Modified | ModifyFlags.RPT1FLAG;
OnPropertyChanged("RPT1");
OnPropertyChanged("Modified");
}
private void rpt2txt_SelectedIndexChanged(object sender, EventArgs e)
{
if (inreset)
return;
Modified = Modified | ModifyFlags.RPT2FLAG;
OnPropertyChanged("RPT2");
OnPropertyChanged("Modified");
}
private void urtxt_SelectedIndexChanged(object sender, EventArgs e)
{
if (inreset)
return;
Modified = Modified | ModifyFlags.URFLAG;
OnPropertyChanged("UR");
OnPropertyChanged("Modified");
}
private void msgtxt_SelectedIndexChanged(object sender, EventArgs e)
{
if (inreset)
return;
Modified = Modified | ModifyFlags.MESSAGE;
OnPropertyChanged("MESSAGE");
OnPropertyChanged("Modified");
}
private void updateReset()
{
bool isorig = (MYOrig == MY && NOTEOrig == NOTE && UROrig == UR &&
RPT1Orig == RPT1 && RPT2Orig == RPT2 && MESSAGEOrig == MESSAGE);
if (btnReset.Visible == isorig)
{
btnReset.Visible = !isorig;
if (isorig)
Modified = ModifyFlags.NOFLAGS;
}
OnPropertyChanged("Modified");
}
private void btnReset_Click(object sender, EventArgs e)
{
inreset = true;
rbDV.Checked = !DRModeOrig;
rbDR.Checked = DRModeOrig;
mytxt.Text = MYOrig;
mynotetxt.Text = NOTEOrig;
urtxt.Text = UROrig;
rpt1txt.Text = RPT1Orig;
rpt2txt.Text = RPT2Orig;
rpt1txt.Enabled =
rpt1.Enabled =
rpt2.Enabled =
btnRpt.Visible =
rpt2txt.Enabled =
DRModeOrig;
msgtxt.Text = MESSAGEOrig;
btnReset.Visible = false;
inreset = false;
Modified = ModifyFlags.NOFLAGS;
OnPropertyChanged("MY");
OnPropertyChanged("NOTE");
OnPropertyChanged("UR");
OnPropertyChanged("RPT1");
OnPropertyChanged("RPT2");
OnPropertyChanged("MESSAGE");
OnPropertyChanged("Modified");
}
private void btnRef_Click(object sender, EventArgs e)
{
try
{
SelectForm sf = new SelectForm();
sf.Owner = this.TopLevelControl as Form;
sf.repeaterOnly = false;
if (sf.ShowDialog() == DialogResult.OK)
{
//if (sf.Mode == SelectForm.RMode.Repeater)
// urtxt.Text = "/" + sf.SelectedName.Split(' ')[0];
//else
if (sf.Mode == SelectForm.RMode.Reflector)
urtxt.Text = string.Format("{0,-7}L", sf.SelectedName);
else
urtxt.Text = sf.SelectedName;
Modified = Modified | ModifyFlags.URFLAG;
OnPropertyChanged("UR");
OnPropertyChanged("Modified");
}
}
catch (Exception ex)
{
StringBuilder sb = new StringBuilder();
Exception ex1 = ex;
while (ex1 != null)
{
sb.AppendLine(ex1.Message);
ex1 = ex1.InnerException;
}
MessageBox.Show(sb.ToString(), "Select DSTARINFO Error!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
}
private void btnRpt_Click(object sender, EventArgs e)
{
try
{
SelectForm sf = new SelectForm();
sf.repeaterOnly = true;
sf.Owner = this.TopLevelControl as Form;
if (sf.ShowDialog() == DialogResult.OK)
{
RepeaterModule rpm = new RepeaterModule();
rpm.Owner = this.TopLevelControl as Form;
rpm.RptName = sf.SelectedName;
rpm.RptDesc = sf.SelectedDesc;
if (rpm.ShowDialog() == DialogResult.OK)
{
rpt1txt.Text = rpm.SelectedRpt.RepeaterName;
Modified = Modified | ModifyFlags.RPT1FLAG;
OnPropertyChanged("RPT1");
OnPropertyChanged("Modified");
}
}
}
catch (Exception ex)
{
StringBuilder sb = new StringBuilder();
Exception ex1 = ex;
while (ex1 != null)
{
sb.AppendLine(ex1.Message);
ex1 = ex1.InnerException;
}
MessageBox.Show(sb.ToString(), "Select DSTARINFO Error!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
}
}
}

View file

@ -0,0 +1,144 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="rpt1tip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="rpt2tip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>120, 17</value>
</metadata>
<metadata name="urtip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>223, 17</value>
</metadata>
<metadata name="mytip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>312, 17</value>
</metadata>
<metadata name="mynotetip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>407, 17</value>
</metadata>
<metadata name="dvtip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>533, 17</value>
</metadata>
<metadata name="drtip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>624, 17</value>
</metadata>
<metadata name="msgtip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>713, 17</value>
</metadata>
</root>

View file

@ -0,0 +1,117 @@
namespace CODEC2_GUI
{
partial class dstarlistitem
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(dstarlistitem));
this.btnCommit = new System.Windows.Forms.Button();
this.lblName = new System.Windows.Forms.Label();
this.lblMode = new System.Windows.Forms.Label();
this.dstarctl1 = new CODEC2_GUI.dstarctl();
this.SuspendLayout();
//
// btnCommit
//
this.btnCommit.Location = new System.Drawing.Point(565, 5);
this.btnCommit.Margin = new System.Windows.Forms.Padding(4);
this.btnCommit.Name = "btnCommit";
this.btnCommit.Size = new System.Drawing.Size(103, 29);
this.btnCommit.TabIndex = 1;
this.btnCommit.Text = "Commit";
this.btnCommit.UseVisualStyleBackColor = true;
this.btnCommit.Click += new System.EventHandler(this.btnCommit_Click);
//
// lblName
//
this.lblName.AutoSize = true;
this.lblName.Location = new System.Drawing.Point(6, 9);
this.lblName.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblName.Name = "lblName";
this.lblName.Size = new System.Drawing.Size(65, 21);
this.lblName.TabIndex = 2;
this.lblName.Text = "Slice";
//
// lblMode
//
this.lblMode.AutoSize = true;
this.lblMode.Location = new System.Drawing.Point(98, 9);
this.lblMode.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblMode.Name = "lblMode";
this.lblMode.Size = new System.Drawing.Size(54, 21);
this.lblMode.TabIndex = 3;
this.lblMode.Text = "Mode";
//
// dstarctl1
//
this.dstarctl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.dstarctl1.DRMode = false;
this.dstarctl1.Font = new System.Drawing.Font("Courier New", 11F);
this.dstarctl1.Location = new System.Drawing.Point(-1, -1);
this.dstarctl1.Margin = new System.Windows.Forms.Padding(4);
this.dstarctl1.MESSAGE = "";
this.dstarctl1.Modified = CODEC2_GUI.dstarctl.ModifyFlags.NOFLAGS;
this.dstarctl1.MY = "";
this.dstarctl1.Name = "dstarctl1";
this.dstarctl1.NOTE = "";
this.dstarctl1.RPT1 = "";
this.dstarctl1.RPT1List = ((System.Collections.Generic.List<string>)(resources.GetObject("dstarctl1.RPT1List")));
this.dstarctl1.RPT2 = "";
this.dstarctl1.RPT2List = ((System.Collections.Generic.List<string>)(resources.GetObject("dstarctl1.RPT2List")));
this.dstarctl1.Size = new System.Drawing.Size(731, 208);
this.dstarctl1.TabIndex = 0;
this.dstarctl1.UR = "";
this.dstarctl1.URList = ((System.Collections.Generic.List<string>)(resources.GetObject("dstarctl1.URList")));
//
// dstarlistitem
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.Controls.Add(this.lblMode);
this.Controls.Add(this.lblName);
this.Controls.Add(this.btnCommit);
this.Controls.Add(this.dstarctl1);
this.Font = new System.Drawing.Font("Courier New", 10.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.Margin = new System.Windows.Forms.Padding(4);
this.Name = "dstarlistitem";
this.Size = new System.Drawing.Size(734, 206);
this.Load += new System.EventHandler(this.dstarlistitem_Load);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private dstarctl dstarctl1;
private System.Windows.Forms.Button btnCommit;
private System.Windows.Forms.Label lblName;
private System.Windows.Forms.Label lblMode;
}
}

View file

@ -0,0 +1,478 @@
/*******************************************************************************
* DstarListItem.cs
*
* DStar Flow List Item control
*
* Created on: 2015-08-22
* Author: Mark Hanson / AA3RK / MKCM Software, LLC.
*
*
*******************************************************************************
*
* Copyright (C) 2015 FlexRadio Systems.
* 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/>.
*
* Contact: gpl<AT>flexradio<DOT>com or
*
* GPL C/O FlexRadio Systems
* 4616 W. Howard Lane
* Suite 1-150
* Austin, TX USA 78728
*
******************************************************************************/
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Flex.Smoothlake.FlexLib;
namespace CODEC2_GUI
{
public partial class dstarlistitem : UserControl
{
public event EventHandler<LogEventArgs> LogEvent;
private Slice _slice;
public Slice slice
{
get { return _slice; }
set
{
if (_slice == value)
return;
if (_slice != null && value == null)
{
_slice.PropertyChanged -= slc_PropertyChanged;
_slice.WaveformStatusReceived -= slc_WaveformStatusReceived;
this.Enabled = false;
this.Visible = false;
return;
}
_slice = value;
_slice.PropertyChanged += new PropertyChangedEventHandler(slc_PropertyChanged);
_slice.WaveformStatusReceived += new Slice.WaveformStatusReceivedEventHandler(slc_WaveformStatusReceived);
lblName.Text = "Slice " + Convert.ToChar(0x41 + _slice.Index).ToString();
this.Enabled = true;
this.Visible = true;
slc_PropertyChanged(_slice, new PropertyChangedEventArgs("DemodMode"));
}
}
//*************************************
// Slice Event Handlers
//*************************************
void slc_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (InvokeRequired)
{
Invoke(new MethodInvoker(delegate
{
slc_PropertyChanged(sender, e.PropertyName);
}));
}
else
{
slc_PropertyChanged(sender, e.PropertyName);
}
}
void slc_PropertyChanged(object sender, string property_name)
{
Slice slc = sender as Slice;
if (slc == null) return;
switch (property_name)
{
case "DemodMode":
// Is the mode set to FreeDV?
CheckDemodMode(slc);
break;
}
}
private void CheckDemodMode(Slice slc)
{
if (slc.DemodMode == "DSTR" || slc.DemodMode == "D*FM")
{
this.Enabled = true;
dstarctl1.Visible = true;
slc.SendWaveformCommand("status");
}
else
{
this.Enabled = false;
dstarctl1.Visible = false;
}
lblMode.Text = slc.DemodMode;
}
private int headerCount;
private bool headerSent;
private string headerInfo;
private bool messageSent;
private string messageInfo;
void slc_WaveformStatusReceived(Slice slc, string status)
{
if (InvokeRequired)
{
Invoke(new MethodInvoker(delegate
{
slc_WaveformStatusReceived(slc, status);
}));
return;
}
string logMY = null;
string logNote = null;
string logUR = null;
string logRPT1 = null;
string logRPT2 = null;
bool setDRMode = false;
string logMessage = null;
bool rxEnd = false;
string[] words = status.Split(' ');
foreach (string kv in words)
{
string[] tokens = kv.Split('=');
if (tokens.Length != 2)
{
continue;
}
string key = tokens[0];
string value = tokens[1];
value = value.Replace('\u007f', ' ').Trim();
switch (key.ToLower())
{
case "destination_rptr_tx":
dstarctl1.RPT2 = value == "DIRECT" ? string.Empty : value;
setDRMode = true;
break;
case "departure_rptr_tx":
dstarctl1.RPT1 = value == "DIRECT" ? string.Empty : value;
setDRMode = true;
break;
case "companion_call_tx":
dstarctl1.UR = value;
break;
case "own_call1_tx":
if (string.IsNullOrEmpty(value) || value == "CALLSIGN")
{
if (!string.IsNullOrEmpty(Properties.Settings.Default.MYCallSign))
dstarctl1.MY = Properties.Settings.Default.MYCallSign;
else
dstarctl1.MY = string.Empty;
}
else
dstarctl1.MY = value;
break;
case "own_call2_tx":
dstarctl1.NOTE = value;
break;
case "message_tx":
dstarctl1.MESSAGE = value;
break;
case "destination_rptr_rx":
logRPT2 = value == "DIRECT" ? string.Empty : value;
break;
case "departure_rptr_rx":
logRPT1 = value == "DIRECT" ? string.Empty : value;
break;
case "companion_call_rx":
headerCount++;
logUR = value;
break;
case "own_call1_rx":
logMY = value;
break;
case "own_call2_rx":
logNote = value;
break;
case "message":
logMessage = value;
break;
case "rx":
if (value == "END")
rxEnd = true;
break;
}
}
if (setDRMode)
{
dstarctl1.DRMode = string.IsNullOrEmpty(dstarctl1.RPT1) ? false : true;
}
if (LogEvent != null)
{
string msg = null;
// format message if present
if (!string.IsNullOrWhiteSpace(logMessage))
msg = string.Format(" MSG:{0}", logMessage.Trim());
// determine if it is new
if (msg != null && (messageInfo == null || string.Compare(messageInfo, msg, true) != 0))
{
messageInfo = msg;
messageSent = false;
}
// determin if header info
if (!string.IsNullOrEmpty(logMY) && !string.IsNullOrEmpty(logUR))
{
// format header info
string hdr = string.Format("CALLED: {0,-8} CALLER: {1,-13}{2}",
logUR, logMY + (string.IsNullOrEmpty(logNote) ? string.Empty : "/" + logNote),
string.IsNullOrEmpty(logRPT1) ? string.Empty : string.Format(" RPT1: {0,-8} RPT2: {1,-8}", logRPT1, logRPT2));
// see if header is new
if (headerInfo == null || string.Compare(headerInfo, hdr, true) != 0)
{
headerInfo = hdr;
headerSent = false;
}
}
// builder header
StringBuilder sb = new StringBuilder();
bool msg2snd = (messageInfo != null && messageSent == false);
// log info if we get header for third time or finally got message
bool hdr2snd = (headerInfo != null && headerSent == false && (headerCount > 3 || msg2snd));
if (hdr2snd || msg2snd)
sb.Append(DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"));
if (hdr2snd)
{
headerSent = true;
sb.AppendFormat(" {0}", headerInfo);
}
if (msg2snd)
{
messageSent = true;
sb.AppendFormat(" {0}", logMessage);
}
if (sb.Length > 0)
LogEvent(this, new LogEventArgs(sb.ToString()));
if (rxEnd) // reset header cache if end of RX
{
headerSent = messageSent = false;
headerCount = 0;
headerInfo = null;
messageInfo = null;
}
}
else
headerCount = 0;
btnCommit.Enabled = dstarctl1.Modified != dstarctl.ModifyFlags.NOFLAGS;
}
public dstarlistitem()
{
InitializeComponent();
}
private void dstarlistitem_Load(object sender, EventArgs e)
{
dstarctl1.PropertyChanged += Dstarctl1_PropertyChanged;
if (!string.IsNullOrEmpty(Properties.Settings.Default.URList))
{
dstarctl1.URList = Properties.Settings.Default.URList.Split('|').ToList();
dstarctl1.RPT1List = Properties.Settings.Default.RPT1List.Split('|').ToList();
dstarctl1.RPT2List = Properties.Settings.Default.RPT2List.Split('|').ToList();
dstarctl1.MESSAGEList = Properties.Settings.Default.MESSAGEList.Split('|').ToList();
}
}
private void Dstarctl1_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == "Modified")
{
btnCommit.Enabled = dstarctl1.Modified != dstarctl.ModifyFlags.NOFLAGS;
}
}
private void btnCommit_Click(object sender, EventArgs e)
{
if (dstarctl1.DRMode && string.IsNullOrEmpty(dstarctl1.RPT1))
{
MessageBox.Show(this, "DR Mode requires RPT1 value!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return;
}
string cmd;
string rpt1 = string.IsNullOrEmpty(dstarctl1.RPT1) ? "DIRECT" : dstarctl1.RPT1;
string rpt2 = string.IsNullOrEmpty(dstarctl1.RPT2) ? "DIRECT" : dstarctl1.RPT2;
cmd = "set destination_rptr=" + rpt2.Replace(" ", "\u007f");
_slice.SendWaveformCommand(cmd);
string ur = dstarctl1.UR;
cmd = "set companion_call=" + ur.Replace(" ", "\u007f");
_slice.SendWaveformCommand(cmd);
string my = dstarctl1.MY;
cmd = "set own_call1=" + my.Replace(" ", "\u007f");
_slice.SendWaveformCommand(cmd);
string note = dstarctl1.NOTE;
cmd = "set own_call2=" + note.Replace(" ", "\u007f");
_slice.SendWaveformCommand(cmd);
string message = dstarctl1.MESSAGE;
cmd = "set message=" + message.Replace(" ", "\u007f");
_slice.SendWaveformCommand(cmd);
if (string.IsNullOrEmpty(dstarctl1.RPT1))
{
_slice.SendWaveformCommand("set departure_rptr=DIRECT");
}
else
{
string[] srpt1 = dstarctl1.RPT1.Split('~');
if (srpt1.Length > 0)
{
cmd = "set departure_rptr=" + srpt1[0].Replace(" ", "\u007f");
_slice.SendWaveformCommand(cmd);
if (srpt1.Length > 1)
{
try
{
_slice.Freq = Convert.ToDouble(srpt1[1]);
if (srpt1.Length > 2)
{
double ofs = Convert.ToDouble(srpt1[2]);
_slice.FMRepeaterOffsetFreq = Math.Abs(ofs);
_slice.RepeaterOffsetDirection = ofs == 0 ? FMTXOffsetDirection.Simplex :
(ofs < 0 ? FMTXOffsetDirection.Down : FMTXOffsetDirection.Up);
}
else
{
_slice.FMRepeaterOffsetFreq = 0;
_slice.RepeaterOffsetDirection = FMTXOffsetDirection.Simplex;
}
}
catch(Exception ex)
{
StringBuilder sb = new StringBuilder();
Exception ex1 = ex;
while (ex1 != null)
{
sb.AppendLine(ex1.Message);
ex1 = ex1.InnerException;
}
MessageBox.Show(sb.ToString(), "Set Slice Error!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
}
}
}
dstarctl1.Modified = dstarctl.ModifyFlags.NOFLAGS;
btnCommit.Enabled = false;
dstarctl1.MY = my;
dstarctl1.NOTE = note;
dstarctl1.UR = ur;
dstarctl1.RPT1 = rpt1 == "DIRECT" ? string.Empty : rpt1;
dstarctl1.RPT2 = rpt2 == "DIRECT" ? string.Empty : rpt2;
dstarctl1.DRMode = !string.IsNullOrEmpty(dstarctl1.RPT1);
// add new UR entry to dropdown list
List<string> lst = new List<string>(dstarctl1.URList);
ur = ur.ToUpper();
if (!lst.Contains(ur))
{
lst.Add(ur);
dstarctl1.URList = lst;
Properties.Settings.Default.URList = string.Join("|", lst);
}
if (dstarctl1.DRMode)
{
if (rpt1.Length > 0 && rpt1 != "DIRECT")
{
lst = new List<string>(dstarctl1.RPT1List);
rpt1 = rpt1.ToUpper();
if (!lst.Contains(rpt1))
{
lst.Add(rpt1);
dstarctl1.RPT1List = lst;
Properties.Settings.Default.RPT1List = string.Join("|", lst);
}
}
if (rpt2.Length > 0 && rpt2 != "DIRECT")
{
lst = new List<string>(dstarctl1.RPT2List);
rpt2 = rpt2.ToUpper();
if (!lst.Contains(rpt2))
{
lst.Add(rpt2);
dstarctl1.RPT2List = lst;
Properties.Settings.Default.RPT2List = string.Join("|", lst);
}
}
}
if (message.Length > 0)
{
lst = new List<string>(dstarctl1.MESSAGEList);
if (!lst.Contains(message))
{
lst.Add(message);
dstarctl1.MESSAGEList = lst;
Properties.Settings.Default.MESSAGEList = string.Join("|", lst);
}
}
if (!string.IsNullOrEmpty(my))
Properties.Settings.Default.MYCallSign = my;
}
public void ClearMYList()
{
dstarctl1.URList = new List<string>();
}
public void ClearRPT1List()
{
dstarctl1.RPT1List = new List<string>();
}
public void ClearRPT2List()
{
dstarctl1.RPT2List = new List<string>();
}
public void ClearMESSAGEList()
{
dstarctl1.MESSAGEList = new List<string>();
}
}
public class LogEventArgs : EventArgs
{
public string LogEntry { get; set; }
public LogEventArgs(string logentry)
{
LogEntry = logentry;
}
}
}

View file

@ -0,0 +1,147 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="dstarctl1.RPT1List" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAJoBbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1u
ZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0sIG1zY29ybGliLCBWZXJzaW9u
PTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OQUB
AAAAMFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZwMAAAAGX2l0
ZW1zBV9zaXplCF92ZXJzaW9uBgAACAgCAAAACQMAAAAAAAAAAAAAABEDAAAAAAAAAAs=
</value>
</data>
<data name="dstarctl1.RPT2List" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAJoBbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1u
ZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0sIG1zY29ybGliLCBWZXJzaW9u
PTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OQUB
AAAAMFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZwMAAAAGX2l0
ZW1zBV9zaXplCF92ZXJzaW9uBgAACAgCAAAACQMAAAAAAAAAAAAAABEDAAAAAAAAAAs=
</value>
</data>
<data name="dstarctl1.URList" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAJoBbXNjb3JsaWIsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1u
ZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5XV0sIG1zY29ybGliLCBWZXJzaW9u
PTQuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OQUB
AAAAMFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RgMVtbU3lzdGVtLlN0cmluZwMAAAAGX2l0
ZW1zBV9zaXplCF92ZXJzaW9uBgAACAgCAAAACQMAAAAAAAAAAgAAABEDAAAABAAAAA0ECw==
</value>
</data>
</root>

View file

@ -0,0 +1,51 @@
;
#define MyAppName "Flex DSTAR Waveform"
#define MyAppVersion "1.4.0.2"
#define MyAppPublisher "FlexRadio Systems, LLC"
#define MyAppURL "http://www.flexradio.com/"
#define MyAppExeName "ThumbDV_DSTAR_GUI.exe"
[Setup]
AppId={{2AA4AC17-A170-4825-9BE9-D9974CCC9444}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
VersionInfoVersion={#MyAppVersion}
AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName=FlexRadio Systems\ThumbDV DSTAR
DisableDirPage=yes
DefaultGroupName=Flex DSTAR Waveform
DisableProgramGroupPage=yes
OutputBaseFilename=FlexDSTARWaveform
SetupIconFile=..\CODEC2 GUI\Images\dstar.ico
Compression=lzma
SolidCompression=yes
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files]
Source: "..\CODEC2 GUI\bin\x86\Release\ThumbDV_DSTAR_GUI.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\CODEC2 GUI\bin\x86\Release\ThumbDV_DSTAR_GUI.exe.config"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\CODEC2 GUI\bin\x86\Release\Flex.UiWpfFramework.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\CODEC2 GUI\bin\x86\Release\FlexLib.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\CODEC2 GUI\bin\x86\Release\Ionic.Zip.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\CODEC2 GUI\bin\x86\Release\Util.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\CODEC2 GUI\bin\x86\Release\Vita.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\..\..\DSP_API\ThumbDV_Release\ThumbDV.ssdr_waveform"; DestDir: {userappdata}\FlexRadio Systems\Waveforms; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
[Icons]
Name: "{commonprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent