mirror of
https://github.com/n5ac/smartsdr-dsp.git
synced 2026-01-25 17:40:19 +01:00
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:
commit
12df08f2d0
9
.gitignore
vendored
9
.gitignore
vendored
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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=""${workspace_loc:/${ProjName}}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/ThumbDV}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/CODEC2_FREEDV}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/SmartSDR_Interface}""/>
|
||||
</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=""../../Firmware/lib""/>
|
||||
</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=""${workspace_loc:/${ProjName}/CODEC2_FREEDV}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/SmartSDR_Interface}""/>
|
||||
</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=""${workspace_loc:/${ProjName}/CODEC2_FREEDV}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/SmartSDR_Interface}""/>
|
||||
</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=""../../Firmware/lib""/>
|
||||
</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=""${workspace_loc:/${ProjName}}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/ThumbDV}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/CODEC2_FREEDV}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/SmartSDR_Interface}""/>
|
||||
</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=""../../Firmware/lib""/>
|
||||
</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=""${workspace_loc:/${ProjName}/CODEC2_FREEDV}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/ThumbDV}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/ThumbDV}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/SmartSDR_Interface}""/>
|
||||
</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=""${workspace_loc:/${ProjName}}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/ThumbDV}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/SmartSDR_Interface}""/>
|
||||
</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=""../../Firmware/lib""/>
|
||||
</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>
|
||||
|
|
|
|||
|
|
@ -1,4 +0,0 @@
|
|||
CODEC2_FREEDV/codebook.d: ../CODEC2_FREEDV/codebook.c \
|
||||
../CODEC2_FREEDV/defines.h
|
||||
|
||||
../CODEC2_FREEDV/defines.h:
|
||||
|
|
@ -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 ' '
|
||||
|
||||
|
||||
|
|
@ -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 ' '
|
||||
|
||||
|
||||
|
|
@ -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
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
################################################################################
|
||||
# Automatically-generated file. Do not edit!
|
||||
################################################################################
|
||||
|
||||
USER_OBJS :=
|
||||
|
||||
LIBS := -lm -lpthread -lrt
|
||||
|
||||
|
|
@ -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 \
|
||||
|
||||
|
|
@ -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 ' '
|
||||
|
||||
|
||||
|
|
@ -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.
|
||||
|
||||
|
|
|
|||
|
|
@ -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
321
DSP_API/ThumbDV/slow_data.c
Normal 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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
43
DSP_API/ThumbDV/slow_data.h
Normal file
43
DSP_API/ThumbDV/slow_data.h
Normal 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_*/
|
||||
|
||||
43
pc/CODEC2 GUI/CODEC2 GUI/App.config
Normal file
43
pc/CODEC2 GUI/CODEC2 GUI/App.config
Normal 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>
|
||||
120
pc/CODEC2 GUI/CODEC2 GUI/AssemblyInfo.cs
Normal file
120
pc/CODEC2 GUI/CODEC2 GUI/AssemblyInfo.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
524
pc/CODEC2 GUI/CODEC2 GUI/DstarInfo.cs
Normal file
524
pc/CODEC2 GUI/CODEC2 GUI/DstarInfo.cs
Normal 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("&", 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("&", 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
63
pc/CODEC2 GUI/CODEC2 GUI/Form1.Designer.cs
generated
63
pc/CODEC2 GUI/CODEC2 GUI/Form1.Designer.cs
generated
|
|
@ -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;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -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 |
BIN
pc/CODEC2 GUI/CODEC2 GUI/Images/dstar.ico
Normal file
BIN
pc/CODEC2 GUI/CODEC2 GUI/Images/dstar.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.4 KiB |
270
pc/CODEC2 GUI/CODEC2 GUI/MainForm.Designer.cs
generated
Normal file
270
pc/CODEC2 GUI/CODEC2 GUI/MainForm.Designer.cs
generated
Normal 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;
|
||||
}
|
||||
}
|
||||
|
||||
353
pc/CODEC2 GUI/CODEC2 GUI/MainForm.cs
Normal file
353
pc/CODEC2 GUI/CODEC2 GUI/MainForm.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
290
pc/CODEC2 GUI/CODEC2 GUI/MainForm.resx
Normal file
290
pc/CODEC2 GUI/CODEC2 GUI/MainForm.resx
Normal 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>
|
||||
|
|
@ -46,7 +46,7 @@ namespace CODEC2_GUI
|
|||
{
|
||||
Application.EnableVisualStyles();
|
||||
Application.SetCompatibleTextRenderingDefault(false);
|
||||
Application.Run(new Form1());
|
||||
Application.Run(new MainForm());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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")]
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
51
pc/CODEC2 GUI/CODEC2 GUI/ReflectorOrRepeater.cs
Normal file
51
pc/CODEC2 GUI/CODEC2 GUI/ReflectorOrRepeater.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
107
pc/CODEC2 GUI/CODEC2 GUI/RepeaterModule.Designer.cs
generated
Normal file
107
pc/CODEC2 GUI/CODEC2 GUI/RepeaterModule.Designer.cs
generated
Normal 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;
|
||||
}
|
||||
}
|
||||
143
pc/CODEC2 GUI/CODEC2 GUI/RepeaterModule.cs
Normal file
143
pc/CODEC2 GUI/CODEC2 GUI/RepeaterModule.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
180
pc/CODEC2 GUI/CODEC2 GUI/SelectForm.Designer.cs
generated
Normal file
180
pc/CODEC2 GUI/CODEC2 GUI/SelectForm.Designer.cs
generated
Normal 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;
|
||||
}
|
||||
}
|
||||
204
pc/CODEC2 GUI/CODEC2 GUI/SelectForm.cs
Normal file
204
pc/CODEC2 GUI/CODEC2 GUI/SelectForm.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
123
pc/CODEC2 GUI/CODEC2 GUI/SelectForm.resx
Normal file
123
pc/CODEC2 GUI/CODEC2 GUI/SelectForm.resx
Normal 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>
|
||||
164
pc/CODEC2 GUI/CODEC2 GUI/ThumbDV_GUI.csproj
Normal file
164
pc/CODEC2 GUI/CODEC2 GUI/ThumbDV_GUI.csproj
Normal 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>
|
||||
22
pc/CODEC2 GUI/CODEC2 GUI/ThumbDV_GUI.sln
Normal file
22
pc/CODEC2 GUI/CODEC2 GUI/ThumbDV_GUI.sln
Normal 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
|
||||
300
pc/CODEC2 GUI/CODEC2 GUI/dstarctl.Designer.cs
generated
Normal file
300
pc/CODEC2 GUI/CODEC2 GUI/dstarctl.Designer.cs
generated
Normal 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;
|
||||
}
|
||||
}
|
||||
578
pc/CODEC2 GUI/CODEC2 GUI/dstarctl.cs
Normal file
578
pc/CODEC2 GUI/CODEC2 GUI/dstarctl.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
144
pc/CODEC2 GUI/CODEC2 GUI/dstarctl.resx
Normal file
144
pc/CODEC2 GUI/CODEC2 GUI/dstarctl.resx
Normal 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>
|
||||
117
pc/CODEC2 GUI/CODEC2 GUI/dstarlistitem.Designer.cs
generated
Normal file
117
pc/CODEC2 GUI/CODEC2 GUI/dstarlistitem.Designer.cs
generated
Normal 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;
|
||||
}
|
||||
}
|
||||
478
pc/CODEC2 GUI/CODEC2 GUI/dstarlistitem.cs
Normal file
478
pc/CODEC2 GUI/CODEC2 GUI/dstarlistitem.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
147
pc/CODEC2 GUI/CODEC2 GUI/dstarlistitem.resx
Normal file
147
pc/CODEC2 GUI/CODEC2 GUI/dstarlistitem.resx
Normal 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>
|
||||
|
|
@ -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
|
||||
|
||||
Loading…
Reference in a new issue