Merge branch 'debian/latest' into raspbian/bullseye
This commit is contained in:
		
						commit
						6a25dc0295
					
				|  | @ -54,6 +54,7 @@ extern int CWIDLeft; | |||
| extern int CWIDRight; | ||||
| extern int CWIDType; | ||||
| extern bool afterTraffic; | ||||
| extern bool darkTheme; | ||||
| 
 | ||||
| extern "C" int RSID_SABM[4]; | ||||
| extern "C" int RSID_UI[4]; | ||||
|  | @ -115,6 +116,7 @@ void GetPortSettings(int Chan) | |||
| 
 | ||||
| 	fx25_mode[Chan] = getAX25Param("FX25", FX25_MODE_RX).toInt(); | ||||
| 	il2p_mode[Chan] = getAX25Param("IL2P", IL2P_MODE_NONE).toInt(); | ||||
| 	il2p_crc[Chan] = getAX25Param("IL2PCRC", 0).toInt(); | ||||
| 	RSID_UI[Chan] = getAX25Param("RSID_UI", 0).toInt(); | ||||
| 	RSID_SABM[Chan] = getAX25Param("RSID_SABM", 0).toInt(); | ||||
| 	RSID_SetModem[Chan] = getAX25Param("RSID_SetModem", 0).toInt(); | ||||
|  | @ -303,6 +305,8 @@ void getSettings() | |||
| 
 | ||||
| 	} | ||||
| 
 | ||||
| 	darkTheme = settings->value("Init/darkTheme", false).toBool(); | ||||
| 
 | ||||
| 	delete(settings); | ||||
| } | ||||
| 
 | ||||
|  | @ -347,6 +351,7 @@ void SavePortSettings(int Chan) | |||
| 	saveAX25Param("MyDigiCall", MyDigiCall[Chan]); | ||||
| 	saveAX25Param("FX25", fx25_mode[Chan]); | ||||
| 	saveAX25Param("IL2P", il2p_mode[Chan]); | ||||
| 	saveAX25Param("IL2PCRC", il2p_crc[Chan]); | ||||
| 	saveAX25Param("RSID_UI", RSID_UI[Chan]); | ||||
| 	saveAX25Param("RSID_SABM", RSID_SABM[Chan]); | ||||
| 	saveAX25Param("RSID_SetModem", RSID_SetModem[Chan]); | ||||
|  | @ -463,6 +468,8 @@ void saveSettings() | |||
| 	settings->setValue("Modem/CWIDType", CWIDType); | ||||
| 	settings->setValue("Modem/afterTraffic", afterTraffic); | ||||
| 
 | ||||
| 	settings->setValue("Init/darkTheme", darkTheme); | ||||
| 
 | ||||
| 	saveAX25Params(0); | ||||
| 	saveAX25Params(1); | ||||
| 	saveAX25Params(2); | ||||
|  |  | |||
|  | @ -737,6 +737,19 @@ | |||
|          <string>Retries</string> | ||||
|         </property> | ||||
|        </widget> | ||||
|        <widget class="QCheckBox" name="CRC_A"> | ||||
|         <property name="geometry"> | ||||
|          <rect> | ||||
|           <x>200</x> | ||||
|           <y>280</y> | ||||
|           <width>53</width> | ||||
|           <height>21</height> | ||||
|          </rect> | ||||
|         </property> | ||||
|         <property name="text"> | ||||
|          <string>CRC</string> | ||||
|         </property> | ||||
|        </widget> | ||||
|       </widget> | ||||
|      </widget> | ||||
|     </widget> | ||||
|  | @ -1445,6 +1458,19 @@ | |||
|          </property> | ||||
|         </item> | ||||
|        </widget> | ||||
|        <widget class="QCheckBox" name="CRC_B"> | ||||
|         <property name="geometry"> | ||||
|          <rect> | ||||
|           <x>200</x> | ||||
|           <y>280</y> | ||||
|           <width>53</width> | ||||
|           <height>21</height> | ||||
|          </rect> | ||||
|         </property> | ||||
|         <property name="text"> | ||||
|          <string>CRC</string> | ||||
|         </property> | ||||
|        </widget> | ||||
|       </widget> | ||||
|       <widget class="QLabel" name="label_88"> | ||||
|        <property name="geometry"> | ||||
|  | @ -2202,6 +2228,19 @@ | |||
|          </rect> | ||||
|         </property> | ||||
|        </widget> | ||||
|        <widget class="QCheckBox" name="CRC_C"> | ||||
|         <property name="geometry"> | ||||
|          <rect> | ||||
|           <x>200</x> | ||||
|           <y>280</y> | ||||
|           <width>53</width> | ||||
|           <height>21</height> | ||||
|          </rect> | ||||
|         </property> | ||||
|         <property name="text"> | ||||
|          <string>CRC</string> | ||||
|         </property> | ||||
|        </widget> | ||||
|       </widget> | ||||
|       <widget class="QComboBox" name="IL2PModeC"> | ||||
|        <property name="geometry"> | ||||
|  | @ -2956,6 +2995,19 @@ | |||
|          </rect> | ||||
|         </property> | ||||
|        </widget> | ||||
|        <widget class="QCheckBox" name="CRC_D"> | ||||
|         <property name="geometry"> | ||||
|          <rect> | ||||
|           <x>200</x> | ||||
|           <y>280</y> | ||||
|           <width>53</width> | ||||
|           <height>21</height> | ||||
|          </rect> | ||||
|         </property> | ||||
|         <property name="text"> | ||||
|          <string>CRC</string> | ||||
|         </property> | ||||
|        </widget> | ||||
|       </widget> | ||||
|       <widget class="QComboBox" name="IL2PModeD"> | ||||
|        <property name="geometry"> | ||||
|  | @ -3041,6 +3093,9 @@ | |||
|       <property name="text"> | ||||
|        <string>Save</string> | ||||
|       </property> | ||||
|       <property name="default"> | ||||
|        <bool>true</bool> | ||||
|       </property> | ||||
|      </widget> | ||||
|     </item> | ||||
|     <item> | ||||
|  |  | |||
|  | @ -1,292 +0,0 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||||
|   <ItemGroup Label="ProjectConfigurations"> | ||||
|     <ProjectConfiguration Include="Release|Win32"> | ||||
|       <Configuration>Release</Configuration> | ||||
|       <Platform>Win32</Platform> | ||||
|     </ProjectConfiguration> | ||||
|     <ProjectConfiguration Include="Debug|Win32"> | ||||
|       <Configuration>Debug</Configuration> | ||||
|       <Platform>Win32</Platform> | ||||
|     </ProjectConfiguration> | ||||
|   </ItemGroup> | ||||
|   <PropertyGroup Label="Globals"> | ||||
|     <ProjectGuid>{4EDE958E-D0AC-37B4-81F7-78313A262DCD}</ProjectGuid> | ||||
|     <RootNamespace>QtSoundModem</RootNamespace> | ||||
|     <Keyword>QtVS_v304</Keyword> | ||||
|     <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion> | ||||
|     <WindowsTargetPlatformMinVersion>10.0.19041.0</WindowsTargetPlatformMinVersion> | ||||
|     <QtMsBuild Condition="'$(QtMsBuild)'=='' or !Exists('$(QtMsBuild)\qt.targets')">$(MSBuildProjectDirectory)\QtMsBuild</QtMsBuild> | ||||
|   </PropertyGroup> | ||||
|   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> | ||||
|     <PlatformToolset>v141</PlatformToolset> | ||||
|     <OutputDirectory>release\</OutputDirectory> | ||||
|     <ATLMinimizesCRunTimeLibraryUsage>false</ATLMinimizesCRunTimeLibraryUsage> | ||||
|     <CharacterSet>NotSet</CharacterSet> | ||||
|     <ConfigurationType>Application</ConfigurationType> | ||||
|     <IntermediateDirectory>release\</IntermediateDirectory> | ||||
|     <PrimaryOutput>QtSoundModem</PrimaryOutput> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> | ||||
|     <PlatformToolset>v141</PlatformToolset> | ||||
|     <OutputDirectory>debug\</OutputDirectory> | ||||
|     <ATLMinimizesCRunTimeLibraryUsage>false</ATLMinimizesCRunTimeLibraryUsage> | ||||
|     <CharacterSet>NotSet</CharacterSet> | ||||
|     <ConfigurationType>Application</ConfigurationType> | ||||
|     <IntermediateDirectory>debug\</IntermediateDirectory> | ||||
|     <PrimaryOutput>QtSoundModem</PrimaryOutput> | ||||
|   </PropertyGroup> | ||||
|   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> | ||||
|   <Target Name="QtMsBuildNotFound" BeforeTargets="CustomBuild;ClCompile" Condition="!Exists('$(QtMsBuild)\qt.targets') or !Exists('$(QtMsBuild)\qt.props')"> | ||||
|     <Message Importance="High" Text="QtMsBuild: could not locate qt.targets, qt.props; project may not build correctly." /> | ||||
|   </Target> | ||||
|   <ImportGroup Label="ExtensionSettings" /> | ||||
|   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> | ||||
|     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" /> | ||||
|   </ImportGroup> | ||||
|   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> | ||||
|     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" /> | ||||
|   </ImportGroup> | ||||
|   <PropertyGroup Label="UserMacros" /> | ||||
|   <ImportGroup Condition="Exists('$(QtMsBuild)\qt_defaults.props')"> | ||||
|     <Import Project="$(QtMsBuild)\qt_defaults.props" /> | ||||
|   </ImportGroup> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> | ||||
|     <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir> | ||||
|     <IntDir>$(SolutionDir)Intermed\$(Platform)\$(Configuration)\</IntDir> | ||||
|     <TargetName>QtSoundModem</TargetName> | ||||
|     <IgnoreImportLibrary>true</IgnoreImportLibrary> | ||||
|     <LinkIncremental>true</LinkIncremental> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> | ||||
|     <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir> | ||||
|     <IntDir>$(SolutionDir)Intermed\$(Platform)\$(Configuration)\\</IntDir> | ||||
|     <TargetName>QtSoundModem</TargetName> | ||||
|     <IgnoreImportLibrary>true</IgnoreImportLibrary> | ||||
|     <LinkIncremental>false</LinkIncremental> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Label="QtSettings" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> | ||||
|     <QtInstall>5.14</QtInstall> | ||||
|     <QtModules>core;network;gui;widgets;serialport</QtModules> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Label="QtSettings" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> | ||||
|     <QtInstall>5.14.2</QtInstall> | ||||
|     <QtModules>core;network;gui;widgets;serialport</QtModules> | ||||
|   </PropertyGroup> | ||||
|   <ImportGroup Condition="Exists('$(QtMsBuild)\qt.props')"> | ||||
|     <Import Project="$(QtMsBuild)\qt.props" /> | ||||
|   </ImportGroup> | ||||
|   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> | ||||
|     <ClCompile> | ||||
|       <AdditionalIncludeDirectories>rsid;.\GeneratedFiles\$(ConfigurationName);.\GeneratedFiles;.;release;/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> | ||||
|       <AdditionalOptions>-Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 %(AdditionalOptions)</AdditionalOptions> | ||||
|       <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation> | ||||
|       <BrowseInformation>false</BrowseInformation> | ||||
|       <DebugInformationFormat>None</DebugInformationFormat> | ||||
|       <DisableSpecificWarnings>4577;4467;%(DisableSpecificWarnings)</DisableSpecificWarnings> | ||||
|       <ExceptionHandling>Sync</ExceptionHandling> | ||||
|       <ObjectFileName>$(IntDir)</ObjectFileName> | ||||
|       <Optimization>MaxSpeed</Optimization> | ||||
|       <PreprocessorDefinitions>_WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;NDEBUG;QT_NO_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||||
|       <PreprocessToFile>false</PreprocessToFile> | ||||
|       <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName> | ||||
|       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> | ||||
|       <SuppressStartupBanner>true</SuppressStartupBanner> | ||||
|       <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType> | ||||
|       <WarningLevel>Level3</WarningLevel> | ||||
|       <MultiProcessorCompilation>true</MultiProcessorCompilation> | ||||
|     </ClCompile> | ||||
|     <Link> | ||||
|       <AdditionalDependencies>libfftw3f-3.lib;shell32.lib;setupapi.lib;WS2_32.Lib;%(AdditionalDependencies)</AdditionalDependencies> | ||||
|       <AdditionalLibraryDirectories>C:\opensslx86\lib;C:\Utils\my_sql\mysql-5.7.25-win32\lib;C:\Utils\postgresqlx86\pgsql\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> | ||||
|       <AdditionalOptions>"/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" %(AdditionalOptions)</AdditionalOptions> | ||||
|       <DataExecutionPrevention>true</DataExecutionPrevention> | ||||
|       <GenerateDebugInformation>false</GenerateDebugInformation> | ||||
|       <IgnoreImportLibrary>true</IgnoreImportLibrary> | ||||
|       <LinkIncremental>false</LinkIncremental> | ||||
|       <OptimizeReferences>true</OptimizeReferences> | ||||
|       <OutputFile>$(OutDir)QtSoundModem.exe</OutputFile> | ||||
|       <RandomizedBaseAddress>true</RandomizedBaseAddress> | ||||
|       <SubSystem>Windows</SubSystem> | ||||
|       <SuppressStartupBanner>true</SuppressStartupBanner> | ||||
|     </Link> | ||||
|     <Midl> | ||||
|       <DefaultCharType>Unsigned</DefaultCharType> | ||||
|       <EnableErrorChecks>None</EnableErrorChecks> | ||||
|       <WarningLevel>0</WarningLevel> | ||||
|     </Midl> | ||||
|     <ResourceCompile> | ||||
|       <PreprocessorDefinitions>_WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;NDEBUG;QT_NO_DEBUG;QT_WIDGETS_LIB;QT_GUI_LIB;QT_NETWORK_LIB;QT_SERIALPORT_LIB;QT_CORE_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||||
|     </ResourceCompile> | ||||
|     <QtMoc> | ||||
|       <CompilerFlavor>msvc</CompilerFlavor> | ||||
|       <Include>./$(Configuration)/moc_predefs.h</Include> | ||||
|       <ExecutionDescription>Moc'ing %(Identity)...</ExecutionDescription> | ||||
|       <DynamicSource>output</DynamicSource> | ||||
|       <QtMocDir>$(IntDir)</QtMocDir> | ||||
|       <QtMocFileName>moc_%(Filename).cpp</QtMocFileName> | ||||
|     </QtMoc> | ||||
|     <QtRcc> | ||||
|       <InitFuncName>QtSoundModem</InitFuncName> | ||||
|       <Compression>default</Compression> | ||||
|       <ExecutionDescription>Rcc'ing %(Identity)...</ExecutionDescription> | ||||
|       <QtRccDir>$(IntDir)</QtRccDir> | ||||
|       <QtRccFileName>qrc_%(Filename).cpp</QtRccFileName> | ||||
|     </QtRcc> | ||||
|     <QtUic> | ||||
|       <ExecutionDescription>Uic'ing %(Identity)...</ExecutionDescription> | ||||
|       <QtUicDir>$(IntDir)</QtUicDir> | ||||
|       <QtUicFileName>ui_%(Filename).h</QtUicFileName> | ||||
|     </QtUic> | ||||
|   </ItemDefinitionGroup> | ||||
|   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> | ||||
|     <ClCompile> | ||||
|       <AdditionalIncludeDirectories>.\GeneratedFiles\$(ConfigurationName);.\GeneratedFiles;.;debug;/include;rsid;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> | ||||
|       <AdditionalOptions>-Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 %(AdditionalOptions)</AdditionalOptions> | ||||
|       <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation> | ||||
|       <BrowseInformation>false</BrowseInformation> | ||||
|       <DebugInformationFormat>EditAndContinue</DebugInformationFormat> | ||||
|       <DisableSpecificWarnings>4577;4467;%(DisableSpecificWarnings)</DisableSpecificWarnings> | ||||
|       <ExceptionHandling>Sync</ExceptionHandling> | ||||
|       <ObjectFileName>$(IntDir)</ObjectFileName> | ||||
|       <Optimization>Disabled</Optimization> | ||||
|       <PreprocessorDefinitions>_WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||||
|       <PreprocessToFile>false</PreprocessToFile> | ||||
|       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> | ||||
|       <SuppressStartupBanner>true</SuppressStartupBanner> | ||||
|       <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType> | ||||
|       <WarningLevel>Level3</WarningLevel> | ||||
|       <MultiProcessorCompilation>true</MultiProcessorCompilation> | ||||
|       <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName> | ||||
|     </ClCompile> | ||||
|     <Link> | ||||
|       <AdditionalDependencies>libfftw3f-3.lib;shell32.lib;setupapi.lib;WS2_32.Lib;%(AdditionalDependencies)</AdditionalDependencies> | ||||
|       <AdditionalLibraryDirectories>C:\opensslx86\lib;C:\Utils\my_sql\mysql-5.7.25-win32\lib;C:\Utils\postgresqlx86\pgsql\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> | ||||
|       <AdditionalOptions>"/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" %(AdditionalOptions)</AdditionalOptions> | ||||
|       <DataExecutionPrevention>true</DataExecutionPrevention> | ||||
|       <GenerateDebugInformation>true</GenerateDebugInformation> | ||||
|       <IgnoreImportLibrary>true</IgnoreImportLibrary> | ||||
|       <OutputFile>$(OutDir)\QtSoundModem.exe</OutputFile> | ||||
|       <RandomizedBaseAddress>true</RandomizedBaseAddress> | ||||
|       <SubSystem>Windows</SubSystem> | ||||
|       <SuppressStartupBanner>true</SuppressStartupBanner> | ||||
|       <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers> | ||||
|     </Link> | ||||
|     <Midl> | ||||
|       <DefaultCharType>Unsigned</DefaultCharType> | ||||
|       <EnableErrorChecks>None</EnableErrorChecks> | ||||
|       <WarningLevel>0</WarningLevel> | ||||
|     </Midl> | ||||
|     <ResourceCompile> | ||||
|       <PreprocessorDefinitions>_WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;QT_WIDGETS_LIB;QT_GUI_LIB;QT_NETWORK_LIB;QT_SERIALPORT_LIB;QT_CORE_LIB;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||||
|     </ResourceCompile> | ||||
|     <QtMoc> | ||||
|       <CompilerFlavor>msvc</CompilerFlavor> | ||||
|       <Include>./$(Configuration)/moc_predefs.h</Include> | ||||
|       <ExecutionDescription>Moc'ing %(Identity)...</ExecutionDescription> | ||||
|       <DynamicSource>output</DynamicSource> | ||||
|       <QtMocDir>$(IntDir)</QtMocDir> | ||||
|       <QtMocFileName>moc_%(Filename).cpp</QtMocFileName> | ||||
|     </QtMoc> | ||||
|     <QtRcc> | ||||
|       <InitFuncName>QtSoundModem</InitFuncName> | ||||
|       <Compression>default</Compression> | ||||
|       <ExecutionDescription>Rcc'ing %(Identity)...</ExecutionDescription> | ||||
|       <QtRccDir>$(IntDir)</QtRccDir> | ||||
|       <QtRccFileName>qrc_%(Filename).cpp</QtRccFileName> | ||||
|     </QtRcc> | ||||
|     <QtUic> | ||||
|       <ExecutionDescription>Uic'ing %(Identity)...</ExecutionDescription> | ||||
|       <QtUicDir>$(IntDir)</QtUicDir> | ||||
|       <QtUicFileName>ui_%(Filename).h</QtUicFileName> | ||||
|     </QtUic> | ||||
|   </ItemDefinitionGroup> | ||||
|   <ItemGroup> | ||||
|     <ClCompile Include="ARDOPC.c" /> | ||||
|     <ClCompile Include="BusyDetect.c" /> | ||||
|     <ClCompile Include="Config.cpp" /> | ||||
|     <ClCompile Include="dw9600.c" /> | ||||
|     <ClCompile Include="hid.c" /> | ||||
|     <ClCompile Include="il2p.c"> | ||||
|       <CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">CompileAsC</CompileAs> | ||||
|     </ClCompile> | ||||
|     <ClCompile Include="Modulate.c" /> | ||||
|     <ClCompile Include="QtSoundModem.cpp" /> | ||||
|     <ClCompile Include="rsid.c" /> | ||||
|     <ClCompile Include="RSUnit.c" /> | ||||
|     <ClCompile Include="SMMain.c" /> | ||||
|     <ClCompile Include="ShowFilter.cpp" /> | ||||
|     <ClCompile Include="SoundInput.c" /> | ||||
|     <ClCompile Include="UZ7HOUtils.c" /> | ||||
|     <ClCompile Include="ardopSampleArrays.c" /> | ||||
|     <ClCompile Include="ax25.c" /> | ||||
|     <ClCompile Include="ax25_agw.c" /> | ||||
|     <ClCompile Include="ax25_demod.c" /> | ||||
|     <ClCompile Include="ax25_fec.c" /> | ||||
|     <ClCompile Include="ax25_l2.c" /> | ||||
|     <ClCompile Include="ax25_mod.c" /> | ||||
|     <ClCompile Include="berlekamp.c" /> | ||||
|     <ClCompile Include="galois.c" /> | ||||
|     <ClCompile Include="kiss_mode.c" /> | ||||
|     <ClCompile Include="main.cpp" /> | ||||
|     <ClCompile Include="ofdm.c" /> | ||||
|     <ClCompile Include="pktARDOP.c" /> | ||||
|     <ClCompile Include="rs.c" /> | ||||
|     <ClCompile Include="sm_main.c" /> | ||||
|     <ClCompile Include="tcpCode.cpp" /> | ||||
|     <ClCompile Include="Waveout.c" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <QtMoc Include="QtSoundModem.h"> | ||||
|     </QtMoc> | ||||
|     <ClInclude Include="UZ7HOStuff.h" /> | ||||
|     <QtMoc Include="tcpCode.h"> | ||||
|     </QtMoc> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <CustomBuild Include="debug\moc_predefs.h.cbt"> | ||||
|       <FileType>Document</FileType> | ||||
|       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> | ||||
|       <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\mkspecs\features\data\dummy.cpp;%(AdditionalInputs)</AdditionalInputs> | ||||
|       <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">cl -Bx"$(QTDIR)\bin\qmake.exe" -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -Zi -MDd -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -wd4467 -E $(QTDIR)\mkspecs\features\data\dummy.cpp 2>NUL >debug\moc_predefs.h</Command> | ||||
|       <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Generate moc_predefs.h</Message> | ||||
|       <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">debug\moc_predefs.h;%(Outputs)</Outputs> | ||||
|     </CustomBuild> | ||||
|     <CustomBuild Include="release\moc_predefs.h.cbt"> | ||||
|       <FileType>Document</FileType> | ||||
|       <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\mkspecs\features\data\dummy.cpp;%(AdditionalInputs)</AdditionalInputs> | ||||
|       <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">cl -Bx"$(QTDIR)\bin\qmake.exe" -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -O2 -MD -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -wd4467 -E $(QTDIR)\mkspecs\features\data\dummy.cpp 2>NUL >release\moc_predefs.h</Command> | ||||
|       <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Generate moc_predefs.h</Message> | ||||
|       <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">release\moc_predefs.h;%(Outputs)</Outputs> | ||||
|       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> | ||||
|     </CustomBuild> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <QtUic Include="ModemDialog.ui"> | ||||
|     </QtUic> | ||||
|     <QtUic Include="QtSoundModem.ui"> | ||||
|     </QtUic> | ||||
|     <QtUic Include="calibrateDialog.ui"> | ||||
|     </QtUic> | ||||
|     <QtUic Include="devicesDialog.ui"> | ||||
|     </QtUic> | ||||
|     <QtUic Include="filterWindow.ui"> | ||||
|     </QtUic> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <QtRcc Include="QtSoundModem.qrc"> | ||||
|     </QtRcc> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <ResourceCompile Include=".\QtSoundModem_resource.rc" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <Image Include="QtSoundModem.ico" /> | ||||
|   </ItemGroup> | ||||
|   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> | ||||
|   <ImportGroup Condition="Exists('$(QtMsBuild)\qt.targets')"> | ||||
|     <Import Project="$(QtMsBuild)\qt.targets" /> | ||||
|   </ImportGroup> | ||||
|   <ImportGroup Label="ExtensionTargets" /> | ||||
| </Project> | ||||
|  | @ -1,288 +0,0 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||||
|   <ItemGroup Label="ProjectConfigurations"> | ||||
|     <ProjectConfiguration Include="Release|Win32"> | ||||
|       <Configuration>Release</Configuration> | ||||
|       <Platform>Win32</Platform> | ||||
|     </ProjectConfiguration> | ||||
|     <ProjectConfiguration Include="Debug|Win32"> | ||||
|       <Configuration>Debug</Configuration> | ||||
|       <Platform>Win32</Platform> | ||||
|     </ProjectConfiguration> | ||||
|   </ItemGroup> | ||||
|   <PropertyGroup Label="Globals"> | ||||
|     <ProjectGuid>{4EDE958E-D0AC-37B4-81F7-78313A262DCD}</ProjectGuid> | ||||
|     <RootNamespace>QtSoundModem</RootNamespace> | ||||
|     <Keyword>QtVS_v304</Keyword> | ||||
|     <WindowsTargetPlatformVersion>10.0.19041.0</WindowsTargetPlatformVersion> | ||||
|     <WindowsTargetPlatformMinVersion>10.0.19041.0</WindowsTargetPlatformMinVersion> | ||||
|     <QtMsBuild Condition="'$(QtMsBuild)'=='' or !Exists('$(QtMsBuild)\qt.targets')">$(MSBuildProjectDirectory)\QtMsBuild</QtMsBuild> | ||||
|   </PropertyGroup> | ||||
|   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> | ||||
|     <PlatformToolset>v141</PlatformToolset> | ||||
|     <OutputDirectory>release\</OutputDirectory> | ||||
|     <ATLMinimizesCRunTimeLibraryUsage>false</ATLMinimizesCRunTimeLibraryUsage> | ||||
|     <CharacterSet>NotSet</CharacterSet> | ||||
|     <ConfigurationType>Application</ConfigurationType> | ||||
|     <IntermediateDirectory>release\</IntermediateDirectory> | ||||
|     <PrimaryOutput>QtSoundModem</PrimaryOutput> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> | ||||
|     <PlatformToolset>v141</PlatformToolset> | ||||
|     <OutputDirectory>debug\</OutputDirectory> | ||||
|     <ATLMinimizesCRunTimeLibraryUsage>false</ATLMinimizesCRunTimeLibraryUsage> | ||||
|     <CharacterSet>NotSet</CharacterSet> | ||||
|     <ConfigurationType>Application</ConfigurationType> | ||||
|     <IntermediateDirectory>debug\</IntermediateDirectory> | ||||
|     <PrimaryOutput>QtSoundModem</PrimaryOutput> | ||||
|   </PropertyGroup> | ||||
|   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> | ||||
|   <Target Name="QtMsBuildNotFound" BeforeTargets="CustomBuild;ClCompile" Condition="!Exists('$(QtMsBuild)\qt.targets') or !Exists('$(QtMsBuild)\qt.props')"> | ||||
|     <Message Importance="High" Text="QtMsBuild: could not locate qt.targets, qt.props; project may not build correctly." /> | ||||
|   </Target> | ||||
|   <ImportGroup Label="ExtensionSettings" /> | ||||
|   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> | ||||
|     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" /> | ||||
|   </ImportGroup> | ||||
|   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> | ||||
|     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" /> | ||||
|   </ImportGroup> | ||||
|   <PropertyGroup Label="UserMacros" /> | ||||
|   <ImportGroup Condition="Exists('$(QtMsBuild)\qt_defaults.props')"> | ||||
|     <Import Project="$(QtMsBuild)\qt_defaults.props" /> | ||||
|   </ImportGroup> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> | ||||
|     <OutDir>C:\Dev\Msdev2005\projects\QT\QtSoundModem\Win32\Debug\</OutDir> | ||||
|     <IntDir>C:\Dev\Msdev2005\projects\QT\QtSoundModem\Intermed\Win32\Debug\</IntDir> | ||||
|     <TargetName>QtSoundModem</TargetName> | ||||
|     <IgnoreImportLibrary>true</IgnoreImportLibrary> | ||||
|     <LinkIncremental>true</LinkIncremental> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> | ||||
|     <OutDir>C:\Dev\Msdev2005\projects\QT\QtSoundModem\Win32\Release\</OutDir> | ||||
|     <IntDir>C:\Dev\Msdev2005\projects\QT\QtSoundModem\Intermed\Win32\Release\</IntDir> | ||||
|     <TargetName>QtSoundModem</TargetName> | ||||
|     <IgnoreImportLibrary>true</IgnoreImportLibrary> | ||||
|     <LinkIncremental>false</LinkIncremental> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Label="QtSettings" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> | ||||
|     <QtInstall>5.14.2_msvc2017</QtInstall> | ||||
|     <QtModules>core;network;gui;widgets;serialport</QtModules> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Label="QtSettings" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> | ||||
|     <QtInstall>5.14.2_msvc2017</QtInstall> | ||||
|     <QtModules>core;network;gui;widgets;serialport</QtModules> | ||||
|   </PropertyGroup> | ||||
|   <ImportGroup Condition="Exists('$(QtMsBuild)\qt.props')"> | ||||
|     <Import Project="$(QtMsBuild)\qt.props" /> | ||||
|   </ImportGroup> | ||||
|   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> | ||||
|     <ClCompile> | ||||
|       <AdditionalIncludeDirectories>rsid;.\GeneratedFiles\$(ConfigurationName);.\GeneratedFiles;.;release;/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> | ||||
|       <AdditionalOptions>-Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 %(AdditionalOptions)</AdditionalOptions> | ||||
|       <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation> | ||||
|       <BrowseInformation>false</BrowseInformation> | ||||
|       <DebugInformationFormat>None</DebugInformationFormat> | ||||
|       <DisableSpecificWarnings>4577;4467;%(DisableSpecificWarnings)</DisableSpecificWarnings> | ||||
|       <ExceptionHandling>Sync</ExceptionHandling> | ||||
|       <ObjectFileName>$(IntDir)</ObjectFileName> | ||||
|       <Optimization>MaxSpeed</Optimization> | ||||
|       <PreprocessorDefinitions>_WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;NDEBUG;QT_NO_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||||
|       <PreprocessToFile>false</PreprocessToFile> | ||||
|       <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName> | ||||
|       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> | ||||
|       <SuppressStartupBanner>true</SuppressStartupBanner> | ||||
|       <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType> | ||||
|       <WarningLevel>Level3</WarningLevel> | ||||
|       <MultiProcessorCompilation>true</MultiProcessorCompilation> | ||||
|     </ClCompile> | ||||
|     <Link> | ||||
|       <AdditionalDependencies>libfftw3f-3.lib;shell32.lib;setupapi.lib;WS2_32.Lib;%(AdditionalDependencies)</AdditionalDependencies> | ||||
|       <AdditionalLibraryDirectories>C:\opensslx86\lib;C:\Utils\my_sql\mysql-5.7.25-win32\lib;C:\Utils\postgresqlx86\pgsql\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> | ||||
|       <AdditionalOptions>"/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" %(AdditionalOptions)</AdditionalOptions> | ||||
|       <DataExecutionPrevention>true</DataExecutionPrevention> | ||||
|       <GenerateDebugInformation>false</GenerateDebugInformation> | ||||
|       <IgnoreImportLibrary>true</IgnoreImportLibrary> | ||||
|       <LinkIncremental>false</LinkIncremental> | ||||
|       <OptimizeReferences>true</OptimizeReferences> | ||||
|       <OutputFile>$(OutDir)\QtSoundModem.exe</OutputFile> | ||||
|       <RandomizedBaseAddress>true</RandomizedBaseAddress> | ||||
|       <SubSystem>Windows</SubSystem> | ||||
|       <SuppressStartupBanner>true</SuppressStartupBanner> | ||||
|     </Link> | ||||
|     <Midl> | ||||
|       <DefaultCharType>Unsigned</DefaultCharType> | ||||
|       <EnableErrorChecks>None</EnableErrorChecks> | ||||
|       <WarningLevel>0</WarningLevel> | ||||
|     </Midl> | ||||
|     <ResourceCompile> | ||||
|       <PreprocessorDefinitions>_WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;NDEBUG;QT_NO_DEBUG;QT_WIDGETS_LIB;QT_GUI_LIB;QT_NETWORK_LIB;QT_SERIALPORT_LIB;QT_CORE_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||||
|     </ResourceCompile> | ||||
|     <QtMoc> | ||||
|       <CompilerFlavor>msvc</CompilerFlavor> | ||||
|       <Include>./$(Configuration)/moc_predefs.h</Include> | ||||
|       <ExecutionDescription>Moc'ing %(Identity)...</ExecutionDescription> | ||||
|       <DynamicSource>output</DynamicSource> | ||||
|       <QtMocDir>$(IntDir)</QtMocDir> | ||||
|       <QtMocFileName>moc_%(Filename).cpp</QtMocFileName> | ||||
|     </QtMoc> | ||||
|     <QtRcc> | ||||
|       <InitFuncName>QtSoundModem</InitFuncName> | ||||
|       <Compression>default</Compression> | ||||
|       <ExecutionDescription>Rcc'ing %(Identity)...</ExecutionDescription> | ||||
|       <QtRccDir>$(IntDir)</QtRccDir> | ||||
|       <QtRccFileName>qrc_%(Filename).cpp</QtRccFileName> | ||||
|     </QtRcc> | ||||
|     <QtUic> | ||||
|       <ExecutionDescription>Uic'ing %(Identity)...</ExecutionDescription> | ||||
|       <QtUicDir>$(IntDir)</QtUicDir> | ||||
|       <QtUicFileName>ui_%(Filename).h</QtUicFileName> | ||||
|     </QtUic> | ||||
|   </ItemDefinitionGroup> | ||||
|   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> | ||||
|     <ClCompile> | ||||
|       <AdditionalIncludeDirectories>.\GeneratedFiles\$(ConfigurationName);.\GeneratedFiles;.;debug;/include;rsid;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> | ||||
|       <AdditionalOptions>-Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 %(AdditionalOptions)</AdditionalOptions> | ||||
|       <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation> | ||||
|       <BrowseInformation>false</BrowseInformation> | ||||
|       <DebugInformationFormat>EditAndContinue</DebugInformationFormat> | ||||
|       <DisableSpecificWarnings>4577;4467;%(DisableSpecificWarnings)</DisableSpecificWarnings> | ||||
|       <ExceptionHandling>Sync</ExceptionHandling> | ||||
|       <ObjectFileName>$(IntDir)</ObjectFileName> | ||||
|       <Optimization>Disabled</Optimization> | ||||
|       <PreprocessorDefinitions>_WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||||
|       <PreprocessToFile>false</PreprocessToFile> | ||||
|       <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> | ||||
|       <SuppressStartupBanner>true</SuppressStartupBanner> | ||||
|       <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType> | ||||
|       <WarningLevel>Level3</WarningLevel> | ||||
|       <MultiProcessorCompilation>true</MultiProcessorCompilation> | ||||
|       <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName> | ||||
|     </ClCompile> | ||||
|     <Link> | ||||
|       <AdditionalDependencies>libfftw3f-3.lib;shell32.lib;setupapi.lib;WS2_32.Lib;%(AdditionalDependencies)</AdditionalDependencies> | ||||
|       <AdditionalLibraryDirectories>C:\opensslx86\lib;C:\Utils\my_sql\mysql-5.7.25-win32\lib;C:\Utils\postgresqlx86\pgsql\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> | ||||
|       <AdditionalOptions>"/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" %(AdditionalOptions)</AdditionalOptions> | ||||
|       <DataExecutionPrevention>true</DataExecutionPrevention> | ||||
|       <GenerateDebugInformation>true</GenerateDebugInformation> | ||||
|       <IgnoreImportLibrary>true</IgnoreImportLibrary> | ||||
|       <OutputFile>$(OutDir)\QtSoundModem.exe</OutputFile> | ||||
|       <RandomizedBaseAddress>true</RandomizedBaseAddress> | ||||
|       <SubSystem>Windows</SubSystem> | ||||
|       <SuppressStartupBanner>true</SuppressStartupBanner> | ||||
|       <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers> | ||||
|     </Link> | ||||
|     <Midl> | ||||
|       <DefaultCharType>Unsigned</DefaultCharType> | ||||
|       <EnableErrorChecks>None</EnableErrorChecks> | ||||
|       <WarningLevel>0</WarningLevel> | ||||
|     </Midl> | ||||
|     <ResourceCompile> | ||||
|       <PreprocessorDefinitions>_WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;QT_WIDGETS_LIB;QT_GUI_LIB;QT_NETWORK_LIB;QT_SERIALPORT_LIB;QT_CORE_LIB;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||||
|     </ResourceCompile> | ||||
|     <QtMoc> | ||||
|       <CompilerFlavor>msvc</CompilerFlavor> | ||||
|       <Include>./$(Configuration)/moc_predefs.h</Include> | ||||
|       <ExecutionDescription>Moc'ing %(Identity)...</ExecutionDescription> | ||||
|       <DynamicSource>output</DynamicSource> | ||||
|       <QtMocDir>$(IntDir)</QtMocDir> | ||||
|       <QtMocFileName>moc_%(Filename).cpp</QtMocFileName> | ||||
|     </QtMoc> | ||||
|     <QtRcc> | ||||
|       <InitFuncName>QtSoundModem</InitFuncName> | ||||
|       <Compression>default</Compression> | ||||
|       <ExecutionDescription>Rcc'ing %(Identity)...</ExecutionDescription> | ||||
|       <QtRccDir>$(IntDir)</QtRccDir> | ||||
|       <QtRccFileName>qrc_%(Filename).cpp</QtRccFileName> | ||||
|     </QtRcc> | ||||
|     <QtUic> | ||||
|       <ExecutionDescription>Uic'ing %(Identity)...</ExecutionDescription> | ||||
|       <QtUicDir>$(IntDir)</QtUicDir> | ||||
|       <QtUicFileName>ui_%(Filename).h</QtUicFileName> | ||||
|     </QtUic> | ||||
|   </ItemDefinitionGroup> | ||||
|   <ItemGroup> | ||||
|     <ClCompile Include="ARDOPC.c" /> | ||||
|     <ClCompile Include="BusyDetect.c" /> | ||||
|     <ClCompile Include="Config.cpp" /> | ||||
|     <ClCompile Include="hid.c" /> | ||||
|     <ClCompile Include="Modulate.c" /> | ||||
|     <ClCompile Include="QtSoundModem.cpp" /> | ||||
|     <ClCompile Include="rsid.c" /> | ||||
|     <ClCompile Include="RSUnit.c" /> | ||||
|     <ClCompile Include="SMMain.c" /> | ||||
|     <ClCompile Include="ShowFilter.cpp" /> | ||||
|     <ClCompile Include="SoundInput.c" /> | ||||
|     <ClCompile Include="UZ7HOUtils.c" /> | ||||
|     <ClCompile Include="ardopSampleArrays.c" /> | ||||
|     <ClCompile Include="ax25.c" /> | ||||
|     <ClCompile Include="ax25_agw.c" /> | ||||
|     <ClCompile Include="ax25_demod.c" /> | ||||
|     <ClCompile Include="ax25_fec.c" /> | ||||
|     <ClCompile Include="ax25_l2.c" /> | ||||
|     <ClCompile Include="ax25_mod.c" /> | ||||
|     <ClCompile Include="berlekamp.c" /> | ||||
|     <ClCompile Include="galois.c" /> | ||||
|     <ClCompile Include="kiss_mode.c" /> | ||||
|     <ClCompile Include="main.cpp" /> | ||||
|     <ClCompile Include="ofdm.c" /> | ||||
|     <ClCompile Include="pktARDOP.c" /> | ||||
|     <ClCompile Include="rs.c" /> | ||||
|     <ClCompile Include="sm_main.c" /> | ||||
|     <ClCompile Include="tcpCode.cpp" /> | ||||
|     <ClCompile Include="Waveout.c" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <QtMoc Include="QtSoundModem.h"> | ||||
|     </QtMoc> | ||||
|     <ClInclude Include="UZ7HOStuff.h" /> | ||||
|     <QtMoc Include="tcpCode.h"> | ||||
|     </QtMoc> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <CustomBuild Include="debug\moc_predefs.h.cbt"> | ||||
|       <FileType>Document</FileType> | ||||
|       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> | ||||
|       <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\mkspecs\features\data\dummy.cpp;%(AdditionalInputs)</AdditionalInputs> | ||||
|       <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">cl -Bx"$(QTDIR)\bin\qmake.exe" -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -Zi -MDd -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -wd4467 -E $(QTDIR)\mkspecs\features\data\dummy.cpp 2>NUL >debug\moc_predefs.h</Command> | ||||
|       <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Generate moc_predefs.h</Message> | ||||
|       <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">debug\moc_predefs.h;%(Outputs)</Outputs> | ||||
|     </CustomBuild> | ||||
|     <CustomBuild Include="release\moc_predefs.h.cbt"> | ||||
|       <FileType>Document</FileType> | ||||
|       <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\mkspecs\features\data\dummy.cpp;%(AdditionalInputs)</AdditionalInputs> | ||||
|       <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">cl -Bx"$(QTDIR)\bin\qmake.exe" -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -O2 -MD -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -wd4467 -E $(QTDIR)\mkspecs\features\data\dummy.cpp 2>NUL >release\moc_predefs.h</Command> | ||||
|       <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Generate moc_predefs.h</Message> | ||||
|       <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">release\moc_predefs.h;%(Outputs)</Outputs> | ||||
|       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> | ||||
|     </CustomBuild> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <QtUic Include="ModemDialog.ui"> | ||||
|     </QtUic> | ||||
|     <QtUic Include="QtSoundModem.ui"> | ||||
|     </QtUic> | ||||
|     <QtUic Include="calibrateDialog.ui"> | ||||
|     </QtUic> | ||||
|     <QtUic Include="devicesDialog.ui"> | ||||
|     </QtUic> | ||||
|     <QtUic Include="filterWindow.ui"> | ||||
|     </QtUic> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <QtRcc Include="QtSoundModem.qrc"> | ||||
|     </QtRcc> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <ResourceCompile Include=".\QtSoundModem_resource.rc" /> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <Image Include="QtSoundModem.ico" /> | ||||
|   </ItemGroup> | ||||
|   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> | ||||
|   <ImportGroup Condition="Exists('$(QtMsBuild)\qt.targets')"> | ||||
|     <Import Project="$(QtMsBuild)\qt.targets" /> | ||||
|   </ImportGroup> | ||||
|   <ImportGroup Label="ExtensionTargets" /> | ||||
| </Project> | ||||
							
								
								
									
										525
									
								
								QtSoundModem.cpp
									
									
									
									
									
								
							
							
						
						
									
										525
									
								
								QtSoundModem.cpp
									
									
									
									
									
								
							|  | @ -51,17 +51,18 @@ along with QtSoundModem.  If not, see http://www.gnu.org/licenses | |||
| 
 | ||||
| 
 | ||||
| QImage *Constellation[4]; | ||||
| QImage *Waterfall[4] = { 0,0,0,0 }; | ||||
| QImage *Header[4]; | ||||
| QImage *Waterfall = 0; | ||||
| QLabel *DCDLabel[4]; | ||||
| QLineEdit *chanOffsetLabel[4]; | ||||
| QImage *DCDLed[4]; | ||||
| 
 | ||||
| QImage *RXLevel; | ||||
| QImage *RXLevel2; | ||||
| 
 | ||||
| QLabel *WaterfallCopy; | ||||
| 
 | ||||
| QLabel *WaterfallCopy[2]; | ||||
| QLabel *HeaderCopy[2]; | ||||
| QLabel * RXLevelCopy; | ||||
| QLabel * RXLevel2Copy; | ||||
| 
 | ||||
| QTextEdit * monWindowCopy; | ||||
| 
 | ||||
|  | @ -73,6 +74,8 @@ QList<QSerialPortInfo> Ports = QSerialPortInfo::availablePorts(); | |||
| 
 | ||||
| void saveSettings(); | ||||
| void getSettings(); | ||||
| void DrawModemFreqRange(); | ||||
| 
 | ||||
| extern "C" void CloseSound(); | ||||
| extern "C" void GetSoundDevices(); | ||||
| extern "C" char modes_name[modes_count][21]; | ||||
|  | @ -120,11 +123,10 @@ extern "C" | |||
| 	int Freq_Change(int Chan, int Freq); | ||||
| 	void set_speed(int snd_ch, int Modem); | ||||
| 	void init_speed(int snd_ch); | ||||
| 	void wf_pointer(int snd_ch); | ||||
| 	void FourierTransform(int NumSamples, short * RealIn, float * RealOut, float * ImagOut, int InverseTransform); | ||||
| 	void dofft(short * in, float * outr, float * outi); | ||||
| 	void init_raduga(); | ||||
| 	void wf_Scale(int Chan); | ||||
| 	void DrawFreqTicks(); | ||||
| 	void AGW_Report_Modem_Change(int port); | ||||
| 	char * strlop(char * buf, char delim); | ||||
| 	void sendRSID(int Chan, int dropTX); | ||||
|  | @ -157,7 +159,10 @@ int WaterfallMin = 00; | |||
| int WaterfallMax = 6000; | ||||
| 
 | ||||
| int Configuring = 0; | ||||
| bool lockWaterfall = false; | ||||
| bool inWaterfall = false; | ||||
| 
 | ||||
| extern "C" int NeedWaterfallHeaders; | ||||
| extern "C" float BinSize; | ||||
| 
 | ||||
| extern "C" { int RSID_SABM[4]; } | ||||
|  | @ -175,6 +180,12 @@ QRgb red = qRgb(255, 0, 0); | |||
| QRgb yellow = qRgb(255, 255, 0); | ||||
| QRgb cyan = qRgb(0, 255, 255); | ||||
| 
 | ||||
| QRgb txText = qRgb(192, 0, 0); | ||||
| QRgb rxText = qRgb(0, 0, 192); | ||||
| 
 | ||||
| bool darkTheme = true; | ||||
| bool minimizeonStart = true; | ||||
| 
 | ||||
| // Indexed colour list from ARDOPC
 | ||||
| 
 | ||||
| #define WHITE 0 | ||||
|  | @ -198,7 +209,7 @@ QRgb vbColours[16] = { qRgb(255, 255, 255), qRgb(255, 99, 71), qRgb(255, 215, 0) | |||
| 						qRgb(218, 165, 32), qRgb(255, 0, 255) }; | ||||
| 
 | ||||
| unsigned char  WaterfallLines[2][80][4096] = { 0 }; | ||||
| int NextWaterfallLine[2] = { 0 }; | ||||
| int NextWaterfallLine[2] = {0, 0}; | ||||
| 
 | ||||
| unsigned int LastLevel = 255; | ||||
| unsigned int LastBusy = 255; | ||||
|  | @ -307,8 +318,20 @@ void QtSoundModem::resizeEvent(QResizeEvent* event) | |||
| 
 | ||||
| 	QRect r = geometry(); | ||||
| 
 | ||||
| 	int A, B, C, W; | ||||
| 	int modemBoxHeight = 30; | ||||
| 	QRect r1 = ui.monWindow->geometry(); | ||||
| 	QRect r2 = ui.centralWidget->geometry(); | ||||
| 
 | ||||
| 	int modemBoxHeight = 34; | ||||
| 	 | ||||
| 	int Width = r.width(); | ||||
| 	int Height = r.height() - 25; | ||||
| 
 | ||||
| 	int monitorTop; | ||||
| 	int monitorHeight; | ||||
| 	int sessionTop; | ||||
| 	int sessionHeight = 0; | ||||
| 	int waterfallsTop; | ||||
| 	int waterfallsHeight = WaterfallImageHeight; | ||||
| 
 | ||||
| 	ui.modeB->setVisible(soundChannel[1]); | ||||
| 	ui.centerB->setVisible(soundChannel[1]); | ||||
|  | @ -331,78 +354,46 @@ void QtSoundModem::resizeEvent(QResizeEvent* event) | |||
| 	if (soundChannel[2] || soundChannel[3]) | ||||
| 		modemBoxHeight = 60; | ||||
| 
 | ||||
| 	ui.Waterfall->setVisible(0); | ||||
| 
 | ||||
| 	A = r.height() - 25;   // No waterfalls
 | ||||
| 	monitorTop = modemBoxHeight + 1; | ||||
| 
 | ||||
| 	if (UsingBothChannels && Secondwaterfall) | ||||
| 	// Now have one waterfall label containing headers and waterfalls
 | ||||
| 
 | ||||
| 		if (Firstwaterfall || Secondwaterfall) | ||||
| 			ui.Waterfall->setVisible(1); | ||||
| 
 | ||||
| 	if (AGWServ) | ||||
| 	{ | ||||
| 		// Two waterfalls
 | ||||
| 
 | ||||
| 		ui.WaterfallA->setVisible(1); | ||||
| 		ui.HeaderA->setVisible(1); | ||||
| 		ui.WaterfallB->setVisible(1); | ||||
| 		ui.HeaderB->setVisible(1); | ||||
| 
 | ||||
| 		A = r.height() - 258;   // Top of Waterfall A
 | ||||
| 		B = A + 115;			// Top of Waterfall B
 | ||||
| 		sessionTable->setVisible(true); | ||||
| 		sessionHeight = 150; | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		// One waterfall
 | ||||
| 
 | ||||
| 		// Could be Left or Right
 | ||||
| 
 | ||||
| 		if (Firstwaterfall) | ||||
| 		{ | ||||
| 			if (soundChannel[0] == RIGHT) | ||||
| 			{ | ||||
| 				ui.WaterfallA->setVisible(0); | ||||
| 				ui.HeaderA->setVisible(0); | ||||
| 				ui.WaterfallB->setVisible(1); | ||||
| 				ui.HeaderB->setVisible(1); | ||||
| 			} | ||||
| 			else | ||||
| 			{ | ||||
| 				ui.WaterfallA->setVisible(1); | ||||
| 				ui.HeaderA->setVisible(1); | ||||
| 				ui.WaterfallB->setVisible(0); | ||||
| 				ui.HeaderB->setVisible(0); | ||||
| 		sessionTable->setVisible(false); | ||||
| 	} | ||||
| 
 | ||||
| 			A = r.height() - 145;   // Top of Waterfall A
 | ||||
| 		} | ||||
| 		else | ||||
| 			A = r.height() - 25;   // Top of Waterfall A
 | ||||
| 	// if only displaying one Waterfall, change height of waterfall area
 | ||||
| 
 | ||||
| 	if (UsingBothChannels == 0  || (Firstwaterfall == 0) || (Secondwaterfall == 0)) | ||||
| 	{ | ||||
| 		waterfallsHeight /= 2; | ||||
| 	} | ||||
| 
 | ||||
| 	C = A - 150;			// Bottom of Monitor, Top of connection list
 | ||||
| 	W = r.width(); | ||||
| 	if ((Firstwaterfall == 0) && (Secondwaterfall == 0)) | ||||
| 		waterfallsHeight = 0; | ||||
| 
 | ||||
| 	// Calc Positions of Waterfalls
 | ||||
| 	monitorHeight = Height - sessionHeight - waterfallsHeight - modemBoxHeight; | ||||
| 	waterfallsTop = Height - waterfallsHeight; | ||||
| 	sessionTop = Height - (sessionHeight + waterfallsHeight); | ||||
| 
 | ||||
| 	ui.monWindow->setGeometry(QRect(0, modemBoxHeight, W, C - (modemBoxHeight + 26))); | ||||
| 	sessionTable->setGeometry(QRect(0, C, W, 175)); | ||||
| 	ui.monWindow->setGeometry(QRect(0, monitorTop, Width, monitorHeight)); | ||||
| 
 | ||||
| 	if (UsingBothChannels) | ||||
| 	{ | ||||
| 		ui.HeaderA->setGeometry(QRect(0, A, W, 38)); | ||||
| 		ui.WaterfallA->setGeometry(QRect(0, A + 38, W, 80)); | ||||
| 		ui.HeaderB->setGeometry(QRect(0, B, W, 38)); | ||||
| 		ui.WaterfallB->setGeometry(QRect(0, B + 38, W, 80)); | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		if (soundChannel[0] == RIGHT) | ||||
| 		{ | ||||
| 			ui.HeaderB->setGeometry(QRect(0, A, W, 38)); | ||||
| 			ui.WaterfallB->setGeometry(QRect(0, A + 38, W, 80)); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			ui.HeaderA->setGeometry(QRect(0, A, W, 38)); | ||||
| 			ui.WaterfallA->setGeometry(QRect(0, A + 38, W, 80)); | ||||
| 		} | ||||
| 	} | ||||
| 	if (AGWServ) | ||||
| 		sessionTable->setGeometry(QRect(0, sessionTop, Width, sessionHeight)); | ||||
| 
 | ||||
| 	if (waterfallsHeight) | ||||
| 		ui.Waterfall->setGeometry(QRect(0, waterfallsTop, Width, waterfallsHeight + 2)); | ||||
| } | ||||
| 
 | ||||
| QAction * setupMenuLine(QMenu * Menu, char * Label, QObject * parent, int State) | ||||
|  | @ -426,50 +417,40 @@ void QtSoundModem::menuChecked() | |||
| 	int state = Act->isChecked(); | ||||
| 
 | ||||
| 	if (Act == actWaterfall1) | ||||
| 	{ | ||||
| 		int oldstate = Firstwaterfall; | ||||
| 		Firstwaterfall = state; | ||||
| 
 | ||||
| 		if (state != oldstate) | ||||
| 			initWaterfall(0, state); | ||||
| 
 | ||||
| 	} | ||||
| 	else if (Act == actWaterfall2) | ||||
| 	{ | ||||
| 		int oldstate = Secondwaterfall; | ||||
| 		Secondwaterfall = state; | ||||
| 
 | ||||
| 		if (state != oldstate) | ||||
| 			initWaterfall(1, state); | ||||
| 	initWaterfall(Firstwaterfall | Secondwaterfall); | ||||
| 
 | ||||
| 	} | ||||
| 	saveSettings(); | ||||
| } | ||||
| 
 | ||||
| void QtSoundModem::initWaterfall(int chan, int state) | ||||
| void QtSoundModem::initWaterfall(int state) | ||||
| { | ||||
| 	if (state == 1) | ||||
| 	{ | ||||
| 		if (chan == 0) | ||||
| 		{ | ||||
| 			ui.WaterfallA = new QLabel(ui.centralWidget); | ||||
| 			WaterfallCopy[0] = ui.WaterfallA; | ||||
| 	//	if (ui.Waterfall)
 | ||||
| 	//	{
 | ||||
| 	//		delete ui.Waterfall;
 | ||||
| 	//		ui.Waterfall = new QLabel(ui.centralWidget);
 | ||||
| 	//	}
 | ||||
| 		WaterfallCopy = ui.Waterfall; | ||||
| 
 | ||||
| 		Waterfall = new QImage(1024, WaterfallImageHeight + 2, QImage::Format_RGB32); | ||||
| 
 | ||||
| 		NeedWaterfallHeaders = 1; | ||||
| 
 | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 			ui.WaterfallB = new QLabel(ui.centralWidget); | ||||
| 			WaterfallCopy[1] = ui.WaterfallB; | ||||
| 		} | ||||
| 		Waterfall[chan] = new QImage(1024, 80, QImage::Format_RGB32); | ||||
| 		Waterfall[chan]->fill(black); | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		delete(Waterfall[chan]); | ||||
| 		Waterfall[chan] = 0; | ||||
| 		delete(Waterfall); | ||||
| 		Waterfall = 0; | ||||
| 	} | ||||
| 
 | ||||
| 	QSize Size(800, 602);						// Not actually used, but Event constructor needs it
 | ||||
| 
 | ||||
| 	QResizeEvent *event = new QResizeEvent(Size, Size); | ||||
| 	QApplication::sendEvent(this, event); | ||||
| } | ||||
|  | @ -518,7 +499,7 @@ void DoPSKWindows() | |||
| 	constellationDialog->resize(NextX, 140); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| QTimer *wftimer; | ||||
| 
 | ||||
| QtSoundModem::QtSoundModem(QWidget *parent) : QMainWindow(parent) | ||||
| { | ||||
|  | @ -530,6 +511,8 @@ QtSoundModem::QtSoundModem(QWidget *parent) : QMainWindow(parent) | |||
| 
 | ||||
| 	mythis = this; | ||||
| 
 | ||||
| 	getSettings(); | ||||
| 
 | ||||
| 	QSettings mysettings("QtSoundModem.ini", QSettings::IniFormat); | ||||
| 
 | ||||
| 	family = mysettings.value("FontFamily", "Courier New").toString(); | ||||
|  | @ -606,7 +589,7 @@ QtSoundModem::QtSoundModem(QWidget *parent) : QMainWindow(parent) | |||
| 	restoreGeometry(mysettings.value("geometry").toByteArray()); | ||||
| 	restoreState(mysettings.value("windowState").toByteArray()); | ||||
| 
 | ||||
| 	sessionTable = new QTableWidget(this); | ||||
| 	sessionTable = new QTableWidget(ui.centralWidget); | ||||
| 
 | ||||
| 	sessionTable->verticalHeader()->setVisible(FALSE); | ||||
| 	sessionTable->verticalHeader()->setDefaultSectionSize(20); | ||||
|  | @ -615,7 +598,7 @@ QtSoundModem::QtSoundModem(QWidget *parent) : QMainWindow(parent) | |||
| 	sessionTable->setColumnCount(12); | ||||
| 	m_TableHeader << "MyCall" << "DestCall" << "Status" << "Sent pkts" << "Sent Bytes" << "Rcvd pkts" << "Rcvd bytes" << "Rcvd FC" << "FEC corr" << "CPS TX" << "CPS RX" << "Direction"; | ||||
| 
 | ||||
| 	sessionTable->setStyleSheet("QHeaderView::section { background-color:rgb(224, 224, 224) }"); | ||||
| 	mysetstyle(); | ||||
| 
 | ||||
| 	sessionTable->setHorizontalHeaderLabels(m_TableHeader); | ||||
| 	sessionTable->setColumnWidth(0, 80); | ||||
|  | @ -672,14 +655,11 @@ QtSoundModem::QtSoundModem(QWidget *parent) : QMainWindow(parent) | |||
| 	actAbout = ui.menuBar->addAction("&About"); | ||||
| 	connect(actAbout, SIGNAL(triggered()), this, SLOT(doAbout())); | ||||
| 
 | ||||
| 	Header[0] = new QImage(1024, 38, QImage::Format_RGB32); | ||||
| 	Header[1] = new QImage(1024, 38, QImage::Format_RGB32); | ||||
| 	RXLevel = new QImage(150, 10, QImage::Format_RGB32); | ||||
| 	RXLevel->fill(white); | ||||
| 	ui.RXLevel->setPixmap(QPixmap::fromImage(*RXLevel)); | ||||
| 	RXLevelCopy = ui.RXLevel; | ||||
| 
 | ||||
| 
 | ||||
| 	DCDLabel[0] = new QLabel(this); | ||||
| 	DCDLabel[0]->setObjectName(QString::fromUtf8("DCDLedA")); | ||||
| 	DCDLabel[0]->setGeometry(QRect(280, 31, 12, 12)); | ||||
|  | @ -720,42 +700,16 @@ QtSoundModem::QtSoundModem(QWidget *parent) : QMainWindow(parent) | |||
| 	chanOffsetLabel[2] = ui.RXOffsetC; | ||||
| 	chanOffsetLabel[3] = ui.RXOffsetD; | ||||
| 
 | ||||
| 	WaterfallCopy = ui.Waterfall; | ||||
| 
 | ||||
| 	//	Waterfall[0]->setColorCount(16);
 | ||||
| 	//	Waterfall[1]->setColorCount(16);
 | ||||
| 	initWaterfall(Firstwaterfall | Secondwaterfall); | ||||
| 
 | ||||
| 
 | ||||
| 	//	for (i = 0; i < 16; i++)
 | ||||
| 	//	{
 | ||||
| 	//	Waterfall[0]->setColor(i, vbColours[i]);
 | ||||
| 	//		Waterfall[1]->setColor(i, vbColours[i]);
 | ||||
| 	//	}
 | ||||
| 
 | ||||
| 	WaterfallCopy[0] = ui.WaterfallA; | ||||
| 	WaterfallCopy[1] = ui.WaterfallB; | ||||
| 
 | ||||
| 	initWaterfall(0, 1); | ||||
| 	initWaterfall(1, 1); | ||||
| 
 | ||||
| 	Header[0]->fill(black); | ||||
| 	Header[1]->fill(black); | ||||
| 
 | ||||
| 	HeaderCopy[0] = ui.HeaderA; | ||||
| 	HeaderCopy[1] = ui.HeaderB; | ||||
| 	monWindowCopy = ui.monWindow; | ||||
| 
 | ||||
| 	ui.monWindow->document()->setMaximumBlockCount(10000); | ||||
| 
 | ||||
| //	connect(ui.monWindow, SIGNAL(selectionChanged()), this, SLOT(onTEselectionChanged()));
 | ||||
| 
 | ||||
| 	ui.HeaderA->setPixmap(QPixmap::fromImage(*Header[0])); | ||||
| 	ui.HeaderB->setPixmap(QPixmap::fromImage(*Header[1])); | ||||
| 
 | ||||
| 	wf_pointer(soundChannel[0]); | ||||
| 	wf_pointer(soundChannel[1]); | ||||
| 	wf_Scale(0); | ||||
| 	wf_Scale(1); | ||||
| 
 | ||||
| 	connect(ui.modeA, SIGNAL(currentIndexChanged(int)), this, SLOT(clickedSlotI(int))); | ||||
| 	connect(ui.modeB, SIGNAL(currentIndexChanged(int)), this, SLOT(clickedSlotI(int))); | ||||
| 	connect(ui.modeC, SIGNAL(currentIndexChanged(int)), this, SLOT(clickedSlotI(int))); | ||||
|  | @ -785,7 +739,6 @@ QtSoundModem::QtSoundModem(QWidget *parent) : QMainWindow(parent) | |||
| 
 | ||||
| 	ui.DCDSlider->setValue(dcd_threshold); | ||||
| 
 | ||||
| 
 | ||||
| 	char valChar[32]; | ||||
| 	sprintf(valChar, "RX Offset %d", rxOffset); | ||||
| 	ui.RXOffsetLabel->setText(valChar); | ||||
|  | @ -811,7 +764,7 @@ QtSoundModem::QtSoundModem(QWidget *parent) : QMainWindow(parent) | |||
| 	connect(timer, SIGNAL(timeout()), this, SLOT(MyTimerSlot())); | ||||
| 	timer->start(100); | ||||
| 
 | ||||
| 	QTimer *wftimer = new QTimer(this); | ||||
| 	wftimer = new QTimer(this); | ||||
| 	connect(wftimer, SIGNAL(timeout()), this, SLOT(doRestartWF())); | ||||
| 	wftimer->start(1000 * 300); | ||||
| 
 | ||||
|  | @ -885,7 +838,7 @@ void extSetOffset(int chan) | |||
| 	sprintf(valChar, "%d", chanOffset[chan]); | ||||
| 	chanOffsetLabel[chan]->setText(valChar); | ||||
| 
 | ||||
| 	wf_pointer(soundChannel[chan]); | ||||
| 	NeedWaterfallHeaders = true; | ||||
| 
 | ||||
| 	pnt_change[0] = 1; | ||||
| 	pnt_change[1] = 1; | ||||
|  | @ -928,6 +881,18 @@ void QtSoundModem::MyTimerSlot() | |||
| 		DoPSKWindows(); | ||||
| 	} | ||||
| 
 | ||||
| 	if (NeedWaterfallHeaders) | ||||
| 	{ | ||||
| 		NeedWaterfallHeaders = 0; | ||||
| 
 | ||||
| 		if (Waterfall) | ||||
| 		{ | ||||
| 			Waterfall->fill(black); | ||||
| 			DrawModemFreqRange(); | ||||
| 			DrawFreqTicks(); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	show_grid(); | ||||
| } | ||||
| 
 | ||||
|  | @ -1101,8 +1066,7 @@ void QtSoundModem::clickedSlotI(int i) | |||
| 		sprintf(valChar, "RX Offset %d",rxOffset); | ||||
| 		ui.RXOffsetLabel->setText(valChar); | ||||
| 
 | ||||
| 		wf_pointer(soundChannel[0]); | ||||
| 		wf_pointer(soundChannel[1]); | ||||
| 		NeedWaterfallHeaders = true; | ||||
| 
 | ||||
| 		pnt_change[0] = 1; | ||||
| 		pnt_change[1] = 1; | ||||
|  | @ -1276,10 +1240,13 @@ void QtSoundModem::clickedSlot() | |||
| 	{ | ||||
| 		bool ok; | ||||
| 		Font = QFontDialog::getFont(&ok, QFont(Font, this)); | ||||
| 
 | ||||
| 		if (ok) | ||||
| 		{ | ||||
| 			// the user clicked OK and font is set to the font the user selected
 | ||||
| 			QApplication::setFont(Font); | ||||
| 			sessionTable->horizontalHeader()->setFont(Font);  | ||||
| 
 | ||||
| 			saveSettings(); | ||||
| 		} | ||||
| 		else | ||||
|  | @ -1287,7 +1254,7 @@ void QtSoundModem::clickedSlot() | |||
| 			// the user canceled the dialog; font is set to the initial
 | ||||
| 			// value, in this case Helvetica [Cronyx], 10
 | ||||
| 
 | ||||
| 			QApplication::setFont(Font); | ||||
| //			QApplication::setFont(Font);
 | ||||
| 
 | ||||
| 		} | ||||
| 		return; | ||||
|  | @ -1480,6 +1447,11 @@ void QtSoundModem::doModems() | |||
| 	Dlg->IL2PModeC->setCurrentIndex(il2p_mode[2]); | ||||
| 	Dlg->IL2PModeD->setCurrentIndex(il2p_mode[3]); | ||||
| 
 | ||||
| 	Dlg->CRC_A->setChecked(il2p_crc[0]); | ||||
| 	Dlg->CRC_B->setChecked(il2p_crc[1]); | ||||
| 	Dlg->CRC_C->setChecked(il2p_crc[2]); | ||||
| 	Dlg->CRC_D->setChecked(il2p_crc[3]); | ||||
| 
 | ||||
| 	Dlg->CWIDCall->setText(CWIDCall); | ||||
| 	Dlg->CWIDInterval->setText(QString::number(CWIDInterval)); | ||||
| 	Dlg->CWIDMark->setText(CWIDMark); | ||||
|  | @ -1569,6 +1541,12 @@ extern "C" void get_exclude_list(char * line, TStringList * list); | |||
| void QtSoundModem::modemaccept() | ||||
| { | ||||
| 	modemSave(); | ||||
| 
 | ||||
| 	AGW_Report_Modem_Change(0); | ||||
| 	AGW_Report_Modem_Change(1); | ||||
| 	AGW_Report_Modem_Change(2); | ||||
| 	AGW_Report_Modem_Change(3); | ||||
| 
 | ||||
| 	delete(Dlg); | ||||
| 	saveSettings(); | ||||
| 
 | ||||
|  | @ -1698,6 +1676,11 @@ void QtSoundModem::modemSave() | |||
| 	il2p_mode[2] = Dlg->IL2PModeC->currentIndex(); | ||||
| 	il2p_mode[3] = Dlg->IL2PModeD->currentIndex(); | ||||
| 
 | ||||
| 	il2p_crc[0] = Dlg->CRC_A->isChecked(); | ||||
| 	il2p_crc[1] = Dlg->CRC_B->isChecked(); | ||||
| 	il2p_crc[2] = Dlg->CRC_C->isChecked(); | ||||
| 	il2p_crc[3] = Dlg->CRC_D->isChecked(); | ||||
| 
 | ||||
| 	recovery[0] = Dlg->recoverBitA->currentIndex(); | ||||
| 	recovery[1] = Dlg->recoverBitB->currentIndex(); | ||||
| 	recovery[2] = Dlg->recoverBitC->currentIndex(); | ||||
|  | @ -1749,7 +1732,6 @@ void QtSoundModem::modemSave() | |||
| 	for (i = 0; i < 4; i++) | ||||
| 	{ | ||||
| 		initTStringList(&list_digi_callsigns[i]); | ||||
| 
 | ||||
| 		get_exclude_list(MyDigiCall[i], &list_digi_callsigns[i]); | ||||
| 	} | ||||
| 
 | ||||
|  | @ -1766,6 +1748,7 @@ void QtSoundModem::modemSave() | |||
| 	Q = Dlg->LPFWidthD->text(); | ||||
| 	lpf[3] = Q.toInt(); | ||||
| */ | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| void QtSoundModem::modemreject() | ||||
|  | @ -2139,6 +2122,7 @@ void QtSoundModem::doDevices() | |||
| 	Dev->DualPTT->setChecked(DualPTT); | ||||
| 
 | ||||
| 	Dev->multiCore->setChecked(multiCore); | ||||
| 	Dev->darkTheme->setChecked(darkTheme); | ||||
| 
 | ||||
| 	Dev->WaterfallMin->setCurrentIndex(Dev->WaterfallMin->findText(QString::number(WaterfallMin), Qt::MatchFixedString)); | ||||
| 	Dev->WaterfallMax->setCurrentIndex(Dev->WaterfallMax->findText(QString::number(WaterfallMax), Qt::MatchFixedString)); | ||||
|  | @ -2150,6 +2134,33 @@ void QtSoundModem::doDevices() | |||
| 
 | ||||
| } | ||||
| 
 | ||||
| void QtSoundModem::mysetstyle() | ||||
| { | ||||
| 	if (darkTheme) | ||||
| 	{ | ||||
| 		qApp->setStyleSheet( | ||||
| 			"QWidget {color: white; background-color: black}" | ||||
| 			"QTabBar::tab {color: rgb(127, 127, 127); background-color: black}" | ||||
| 			"QTabBar::tab::selected {color: white}" | ||||
| 			"QPushButton {border-style: outset; border-width: 2px; border-color: rgb(127, 127, 127)}" | ||||
| 			"QPushButton::default {border-style: outset; border-width: 2px; border-color: white}"); | ||||
| 
 | ||||
| 		sessionTable->setStyleSheet("QHeaderView::section { background-color:rgb(40, 40, 40) }"); | ||||
| 
 | ||||
| 		txText = qRgb(255, 127, 127); | ||||
| 		rxText = qRgb(173, 216, 230); | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		qApp->setStyleSheet(""); | ||||
| 
 | ||||
| 		sessionTable->setStyleSheet("QHeaderView::section { background-color:rgb(224, 224, 224) }"); | ||||
| 
 | ||||
| 		txText = qRgb(192, 0, 0); | ||||
| 		rxText = qRgb(0, 0, 192); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| void QtSoundModem::deviceaccept() | ||||
| { | ||||
| 	QVariant Q = Dev->inputDevice->currentText(); | ||||
|  | @ -2251,7 +2262,6 @@ void QtSoundModem::deviceaccept() | |||
| 	if (UsingLeft && UsingRight) | ||||
| 		UsingBothChannels = 1; | ||||
| 
 | ||||
| 
 | ||||
| 	SCO = Dev->singleChannelOutput->isChecked(); | ||||
| 	raduga = Dev->colourWaterfall->isChecked(); | ||||
| 	AGWServ = Dev->AGWEnabled->isChecked(); | ||||
|  | @ -2275,6 +2285,8 @@ void QtSoundModem::deviceaccept() | |||
| 	DualPTT = Dev->DualPTT->isChecked(); | ||||
| 	TX_rotate = Dev->txRotation->isChecked(); | ||||
| 	multiCore = Dev->multiCore->isChecked(); | ||||
| 	darkTheme = Dev->darkTheme->isChecked(); | ||||
| 	mysetstyle(); | ||||
| 
 | ||||
| 	if (Dev->CAT->isChecked()) | ||||
| 		PTTMode = PTTCAT; | ||||
|  | @ -2360,8 +2372,7 @@ void QtSoundModem::deviceaccept() | |||
| 	ClosePTTPort(); | ||||
| 	OpenPTTPort(); | ||||
| 
 | ||||
| 	wf_pointer(soundChannel[0]); | ||||
| 	wf_pointer(soundChannel[1]); | ||||
| 	NeedWaterfallHeaders = true; | ||||
| 
 | ||||
| 	delete(Dev); | ||||
| 	saveSettings(); | ||||
|  | @ -2406,33 +2417,55 @@ void QtSoundModem::handleButton(int Port, int Type) | |||
| 	doCalib(Port, Type); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| void QtSoundModem::doRestartWF() | ||||
| { | ||||
| 	if (Firstwaterfall) | ||||
| 	if (inWaterfall) | ||||
| 	{ | ||||
| 		initWaterfall(0, 0); | ||||
| 		initWaterfall(0, 1); | ||||
| 		// in waterfall update thread
 | ||||
| 
 | ||||
| 		wftimer->start(5000); | ||||
| 		return; | ||||
| 	} | ||||
| 		 | ||||
| 	if (Secondwaterfall) | ||||
| 	lockWaterfall = true; | ||||
| 
 | ||||
| 	if (Firstwaterfall | Secondwaterfall) | ||||
| 	{ | ||||
| 		initWaterfall(1, 0); | ||||
| 		initWaterfall(1, 1); | ||||
| 		initWaterfall(0); | ||||
| 		initWaterfall(1); | ||||
| 	} | ||||
| 
 | ||||
| 	delete(RXLevel); | ||||
| 	delete(ui.RXLevel); | ||||
| 	ui.RXLevel = new QLabel(ui.centralWidget); | ||||
| 	RXLevelCopy = ui.RXLevel; | ||||
| 	ui.RXLevel->setGeometry(QRect(780, 17, 150, 12)); | ||||
| //	ui.RXLevel->setFrameShape(QFrame::Box);
 | ||||
| //	ui.RXLevel->setFrameShadow(QFrame::Sunken);
 | ||||
| 	ui.RXLevel->setGeometry(QRect(780, 14, 150, 11)); | ||||
| 	ui.RXLevel->setFrameShape(QFrame::Box); | ||||
| 	ui.RXLevel->setFrameShadow(QFrame::Sunken); | ||||
| 
 | ||||
| 	delete(RXLevel2); | ||||
| 	delete(ui.RXLevel2); | ||||
| 
 | ||||
| 	ui.RXLevel2 = new QLabel(ui.centralWidget); | ||||
| 	RXLevel2Copy = ui.RXLevel2; | ||||
| 
 | ||||
| 	ui.RXLevel2->setGeometry(QRect(780, 23, 150, 11)); | ||||
| 	ui.RXLevel2->setFrameShape(QFrame::Box); | ||||
| 	ui.RXLevel2->setFrameShadow(QFrame::Sunken); | ||||
| 
 | ||||
| 	RXLevel = new QImage(150, 10, QImage::Format_RGB32); | ||||
| 	RXLevel->fill(cyan); | ||||
| //	ui.RXLevel->setPixmap(QPixmap::fromImage(*RXLevel));
 | ||||
| 
 | ||||
| 	RXLevel2 = new QImage(150, 10, QImage::Format_RGB32); | ||||
| 	RXLevel2->fill(white); | ||||
| 
 | ||||
| 	ui.RXLevel->setVisible(1); | ||||
| 	if (UsingBothChannels) | ||||
| 		ui.RXLevel2->setVisible(1); | ||||
| 
 | ||||
| 	lockWaterfall = false; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  | @ -2489,7 +2522,7 @@ void QtSoundModem::RefreshSpectrum(unsigned char * Data) | |||
| 
 | ||||
| 	// Last 4 bytes are level busy and Tuning lines
 | ||||
| 
 | ||||
| 	Waterfall[0]->fill(Black); | ||||
| 	Waterfall->fill(Black); | ||||
| 
 | ||||
| 	if (Data[206] != LastLevel) | ||||
| 	{ | ||||
|  | @ -2510,13 +2543,13 @@ void QtSoundModem::RefreshSpectrum(unsigned char * Data) | |||
| 		if (val > 63) | ||||
| 			val = 63; | ||||
| 
 | ||||
| 		Waterfall[0]->setPixel(i, val, Yellow); | ||||
| 		Waterfall->setPixel(i, val, Yellow); | ||||
| 		if (val < 62) | ||||
| 			Waterfall[0]->setPixel(i, val + 1, Gold); | ||||
| 			Waterfall->setPixel(i, val + 1, Gold); | ||||
| 		Data++; | ||||
| 	} | ||||
| 
 | ||||
| 	ui.WaterfallA->setPixmap(QPixmap::fromImage(*Waterfall[0])); | ||||
| 	ui.Waterfall->setPixmap(QPixmap::fromImage(*Waterfall)); | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
|  | @ -2552,7 +2585,7 @@ void QtSoundModem::RefreshWaterfall(int snd_ch, unsigned char * Data) | |||
| { | ||||
| 	int j; | ||||
| 	unsigned char * Line; | ||||
| 	int len = Waterfall[0]->bytesPerLine(); | ||||
| 	int len = Waterfall->bytesPerLine(); | ||||
| 	int TopLine = NextWaterfallLine[snd_ch]; | ||||
| 
 | ||||
| 	// Write line to cyclic buffer then draw starting with the line just written
 | ||||
|  | @ -2565,16 +2598,15 @@ void QtSoundModem::RefreshWaterfall(int snd_ch, unsigned char * Data) | |||
| 
 | ||||
| 	for (j = 63; j > 0; j--) | ||||
| 	{ | ||||
| 		Line = Waterfall[0]->scanLine(j); | ||||
| 		Line = Waterfall->scanLine(j); | ||||
| 		memcpy(Line, &WaterfallLines[snd_ch][TopLine++][0], len); | ||||
| 		if (TopLine > 63) | ||||
| 			TopLine = 0; | ||||
| 	} | ||||
| 
 | ||||
| 	ui.WaterfallA->setPixmap(QPixmap::fromImage(*Waterfall[0])); | ||||
| 	ui.Waterfall->setPixmap(QPixmap::fromImage(*Waterfall)); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| void QtSoundModem::sendtoTrace(char * Msg, int tx) | ||||
| { | ||||
| 	const QTextCursor old_cursor = monWindowCopy->textCursor(); | ||||
|  | @ -2587,9 +2619,9 @@ void QtSoundModem::sendtoTrace(char * Msg, int tx) | |||
| 	// Insert the text at the position of the cursor (which is the end of the document).
 | ||||
| 
 | ||||
| 	if (tx) | ||||
| 		monWindowCopy->setTextColor(qRgb(192, 0, 0)); | ||||
| 		monWindowCopy->setTextColor(txText); | ||||
| 	else | ||||
| 		monWindowCopy->setTextColor(qRgb(0, 0, 192)); | ||||
| 		monWindowCopy->setTextColor(rxText); | ||||
| 
 | ||||
| 	monWindowCopy->textCursor().insertText(Msg); | ||||
| 
 | ||||
|  | @ -2651,50 +2683,54 @@ extern "C" int nonGUIMode; | |||
| 
 | ||||
| // This draws the Frequency Scale on Waterfall
 | ||||
| 
 | ||||
| extern "C" void wf_Scale(int Chan) | ||||
| extern "C" void DrawFreqTicks() | ||||
| { | ||||
| 	if (nonGUIMode) | ||||
| 		return; | ||||
| 
 | ||||
| 	// Draw Frequency Markers on waterfall header(s);
 | ||||
| 
 | ||||
| 	int x, i; | ||||
| 	char Textxx[20]; | ||||
| 	QImage * bm = Header[Chan]; | ||||
| 	QImage * bm = Waterfall; | ||||
| 
 | ||||
| 	QPainter qPainter(bm); | ||||
| 	qPainter.setBrush(Qt::black); | ||||
| 	qPainter.setPen(Qt::white); | ||||
| 
 | ||||
| 	if (Chan == 0) | ||||
| 		sprintf(Textxx, "Left"); | ||||
| 	else | ||||
| 		sprintf(Textxx, "Right"); | ||||
| 	int Chan; | ||||
| 
 | ||||
| #ifdef WIN32 | ||||
| 		int Top = 3; | ||||
| #else | ||||
| 		int Top = 4; | ||||
| #endif | ||||
| 		int Base = 0; | ||||
| 
 | ||||
| 		for (Chan = 0; Chan < 2; Chan++) | ||||
| 		{ | ||||
| 			if (Chan == 1 || ((UsingBothChannels == 0) && (UsingRight == 1))) | ||||
| 				sprintf(Textxx, "Right"); | ||||
| 			else | ||||
| 				sprintf(Textxx, "Left"); | ||||
| 
 | ||||
| 			qPainter.drawText(2, Top, 100, 20, 0, Textxx); | ||||
| 
 | ||||
| 			// We drew markers every 100 Hz or 100 / binsize pixels
 | ||||
| 
 | ||||
| 
 | ||||
| 			int Markers = ((WaterfallMax - WaterfallMin) / 100) + 5;			// Number of Markers to draw
 | ||||
| 			int Freq = WaterfallMin; | ||||
| 			float PixelsPerMarker = 100.0 / BinSize; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 			for (i = 0; i < Markers; i++) | ||||
| 			{ | ||||
| 				x = round(PixelsPerMarker * i); | ||||
| 				if (x < 1025) | ||||
| 				{ | ||||
| 					if ((Freq % 500) == 0) | ||||
| 				qPainter.drawLine(x, 22, x, 15); | ||||
| 						qPainter.drawLine(x, Base + 22, x, Base + 15); | ||||
| 					else | ||||
| 				qPainter.drawLine(x, 22, x, 18); | ||||
| 						qPainter.drawLine(x, Base + 22, x, Base + 18); | ||||
| 
 | ||||
| 					if ((Freq % 500) == 0) | ||||
| 					{ | ||||
|  | @ -2706,34 +2742,50 @@ extern "C" void wf_Scale(int Chan) | |||
| 				} | ||||
| 				Freq += 100; | ||||
| 			} | ||||
| 	HeaderCopy[Chan]->setPixmap(QPixmap::fromImage(*bm)); | ||||
| 
 | ||||
| 			if (UsingBothChannels == 0) | ||||
| 				break; | ||||
| 
 | ||||
| 			Top += WaterfallTotalPixels; | ||||
| 			Base = WaterfallTotalPixels; | ||||
| 		} | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| // This draws the frequency Markers on the Waterfall
 | ||||
| // These draws the frequency Markers on the Waterfall
 | ||||
| 
 | ||||
| 
 | ||||
| void do_pointer(int waterfall) | ||||
| void DrawModemFreqRange() | ||||
| { | ||||
| 	if (nonGUIMode) | ||||
| 		return; | ||||
| 
 | ||||
| 	// Draws the modem freq bars on waterfall header(s)
 | ||||
| 
 | ||||
| 
 | ||||
| 	int x1, x2, k, pos1, pos2, pos3; | ||||
| 	QImage * bm = Header[waterfall]; | ||||
| 	QImage * bm = Waterfall; | ||||
| 
 | ||||
| 	QPainter qPainter(bm); | ||||
| 	qPainter.setBrush(Qt::NoBrush); | ||||
| 	qPainter.setPen(Qt::white); | ||||
| 
 | ||||
| 	int Chan; | ||||
| 	int LRtoDisplay = LEFT; | ||||
| 	int top = 0; | ||||
| 
 | ||||
| 	for (Chan = 0; Chan < 2; Chan++) | ||||
| 	{ | ||||
| 		if (Chan == 1 || ((UsingBothChannels == 0) && (UsingRight == 1))) | ||||
| 			LRtoDisplay = RIGHT; | ||||
| 
 | ||||
| 		//	bm->fill(black);
 | ||||
| 
 | ||||
| 	qPainter.fillRect(0, 23, 1024, 10, Qt::black); | ||||
| 	//	qPainter.fillRect(top, 23, 1024, 10, Qt::black);
 | ||||
| 
 | ||||
| 		// We drew markers every 100 Hz or 100 / binsize pixels
 | ||||
| 
 | ||||
| 		float PixelsPerHz = 1.0 / BinSize; | ||||
| 	k = 26; | ||||
| 		k = 26 + top; | ||||
| 
 | ||||
| 		// draw all enabled ports on the ports on this soundcard
 | ||||
| 
 | ||||
|  | @ -2743,20 +2795,7 @@ void do_pointer(int waterfall) | |||
| 
 | ||||
| 		for (int i = 0; i < 4; i++) | ||||
| 		{ | ||||
| 		if (UsingBothChannels == 0) | ||||
| 		{ | ||||
| 			// Only One Waterfall. If first chan is 
 | ||||
| 
 | ||||
| 			if ((waterfall == 0 && soundChannel[i] == RIGHT) || (waterfall == 1 && soundChannel[i] == LEFT)) | ||||
| 				return; | ||||
| 		} | ||||
| 
 | ||||
| 		if (soundChannel[i] == 0) | ||||
| 			continue; | ||||
| 
 | ||||
| 
 | ||||
| 		if (UsingBothChannels == 1) | ||||
| 			if ((waterfall == 0 && soundChannel[i] == RIGHT) || (waterfall == 1 && soundChannel[i] == LEFT)) | ||||
| 			if (soundChannel[i] != LRtoDisplay) | ||||
| 					continue; | ||||
| 
 | ||||
| 			pos1 = roundf((((rxOffset + chanOffset[i] + rx_freq[i]) - 0.5*rx_shift[i]) - WaterfallMin) * PixelsPerHz) - 5; | ||||
|  | @ -2769,7 +2808,7 @@ void do_pointer(int waterfall) | |||
| 			qPainter.drawLine(x1, k, x2, k); | ||||
| 			qPainter.drawLine(x1, k - 3, x1, k + 3); | ||||
| 			qPainter.drawLine(x2, k - 3, x2, k + 3); | ||||
| 		qPainter.drawLine(pos3, k - 3, pos3, k + 3); | ||||
| 			//		qPainter.drawLine(pos3, k - 3, pos3, k + 3);
 | ||||
| 
 | ||||
| 			if (rxOffset || chanOffset[i]) | ||||
| 			{ | ||||
|  | @ -2784,47 +2823,17 @@ void do_pointer(int waterfall) | |||
| 
 | ||||
| 			k += 3; | ||||
| 		} | ||||
| 	HeaderCopy[waterfall]->setPixmap(QPixmap::fromImage(*bm)); | ||||
| 		if (UsingBothChannels == 0) | ||||
| 			break; | ||||
| 
 | ||||
| 		LRtoDisplay = RIGHT; | ||||
| 		top = WaterfallTotalPixels; | ||||
| 	} | ||||
| 
 | ||||
| void wf_pointer(int snd_ch) | ||||
| { | ||||
| 	UNUSED(snd_ch); | ||||
| 
 | ||||
| 	do_pointer(0); | ||||
| 	do_pointer(1); | ||||
| //	do_pointer(2);
 | ||||
| //	do_pointer(3);
 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| void doWaterfallThread(void * param); | ||||
| 
 | ||||
| /*
 | ||||
| #ifdef WIN32 | ||||
| 
 | ||||
| #define pthread_t uintptr_t | ||||
| 
 | ||||
| extern "C" uintptr_t _beginthread(void(__cdecl *start_address)(void *), unsigned stack_size, void *arglist); | ||||
| 
 | ||||
| #else | ||||
| 
 | ||||
| #include <pthread.h> | ||||
| 
 | ||||
| extern "C" pthread_t _beginthread(void(*start_address)(void *), unsigned stack_size, void * arglist) | ||||
| { | ||||
| 	pthread_t thread; | ||||
| 
 | ||||
| 	if (pthread_create(&thread, NULL, (void * (*)(void *))start_address, (void*)arglist) != 0) | ||||
| 		perror("New Thread"); | ||||
| 	else | ||||
| 		pthread_detach(thread); | ||||
| 
 | ||||
| 	return thread; | ||||
| } | ||||
| 
 | ||||
| #endif | ||||
| */ | ||||
| extern "C" void doWaterfall(int snd_ch) | ||||
| { | ||||
| 	if (nonGUIMode) | ||||
|  | @ -2833,6 +2842,9 @@ extern "C" void doWaterfall(int snd_ch) | |||
| 	if (Closing) | ||||
| 		return; | ||||
| 
 | ||||
| 	if (lockWaterfall) | ||||
| 		return; | ||||
| 
 | ||||
| //	if (multiCore)			// Run modems in separate threads
 | ||||
| //		_beginthread(doWaterfallThread, 0, xx);
 | ||||
| //	else
 | ||||
|  | @ -2840,6 +2852,20 @@ extern "C" void doWaterfall(int snd_ch) | |||
| 
 | ||||
| } | ||||
| 
 | ||||
| extern "C" void displayWaterfall() | ||||
| { | ||||
| 	// if we are using both channels but only want right need to extract correct half of Image
 | ||||
| 
 | ||||
| 	if (Waterfall == nullptr) | ||||
| 		return; | ||||
| 
 | ||||
| 	if (UsingBothChannels && (Firstwaterfall == 0)) | ||||
| 		WaterfallCopy->setAlignment(Qt::AlignBottom | Qt::AlignLeft); | ||||
| 	else | ||||
| 		WaterfallCopy->setAlignment(Qt::AlignTop | Qt::AlignLeft); | ||||
| 
 | ||||
| 	WaterfallCopy->setPixmap(QPixmap::fromImage(*Waterfall)); | ||||
| } | ||||
| 
 | ||||
| extern "C" float aFFTAmpl[1024]; | ||||
| extern "C" void SMUpdateBusyDetector(int LR, float * Real, float *Imag); | ||||
|  | @ -2847,12 +2873,19 @@ extern "C" void SMUpdateBusyDetector(int LR, float * Real, float *Imag); | |||
| void doWaterfallThread(void * param) | ||||
| { | ||||
| 	int snd_ch = (int)(size_t)param; | ||||
| 	int WaterfallNumber = snd_ch; | ||||
| 
 | ||||
| 	if (lockWaterfall) | ||||
| 		return; | ||||
| 
 | ||||
| 	if (Configuring) | ||||
| 		return; | ||||
| 
 | ||||
| 	inWaterfall = true;					// don't allow restart waterfall
 | ||||
| 
 | ||||
| 	if (snd_ch == 1 && UsingLeft == 0)	// Only using right
 | ||||
| 		snd_ch = 0;						// Samples are in first buffer
 | ||||
| 
 | ||||
| 	QImage * bm = Waterfall[snd_ch]; | ||||
| 	QImage * bm = Waterfall; | ||||
| 
 | ||||
| 	int  i; | ||||
| 	single  mag; | ||||
|  | @ -2865,9 +2898,8 @@ void doWaterfallThread(void * param) | |||
| 	float RealOut[8192] = { 0 }; | ||||
| 	float ImagOut[8192]; | ||||
| 
 | ||||
| 	if (Configuring) | ||||
| 		return; | ||||
| 
 | ||||
| 	RefreshLevel(CurrentLevel);	// Signal Level
 | ||||
| 
 | ||||
| 	hFFTSize = FFTSize / 2; | ||||
| 
 | ||||
|  | @ -2950,16 +2982,21 @@ void doWaterfallThread(void * param) | |||
| 
 | ||||
| 	SMUpdateBusyDetector(snd_ch, RealOut, ImagOut); | ||||
| 
 | ||||
| 	RefreshLevel(CurrentLevel);	// Signal Level
 | ||||
| 	// we always do fft so we can get centre freq and do busy detect. But only upodate waterfall if on display
 | ||||
| 
 | ||||
| 	if (bm == 0) | ||||
| 		return; | ||||
| 
 | ||||
| 	try | ||||
| 	{ | ||||
| 		inWaterfall = false; | ||||
| 		return; | ||||
| 	} | ||||
| 	if ((Firstwaterfall == 0 && snd_ch == 0) || (Secondwaterfall == 0 && snd_ch == 1)) | ||||
| 	{ | ||||
| 		inWaterfall = false; | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	p = Line; | ||||
| 		lineLen = bm->bytesPerLine(); | ||||
| 	lineLen = 4096; | ||||
| 
 | ||||
| 	if (raduga == DISP_MONO) | ||||
| 	{ | ||||
|  | @ -2985,6 +3022,10 @@ void doWaterfallThread(void * param) | |||
| 	// Scroll
 | ||||
| 
 | ||||
| 	int TopLine = NextWaterfallLine[snd_ch]; | ||||
| 	int TopScanLine = WaterfallHeaderPixels; | ||||
| 
 | ||||
| 	if (snd_ch) | ||||
| 		TopScanLine += WaterfallTotalPixels; | ||||
| 
 | ||||
| 	// Write line to cyclic buffer then draw starting with the line just written
 | ||||
| 
 | ||||
|  | @ -2994,25 +3035,15 @@ void doWaterfallThread(void * param) | |||
| 
 | ||||
| 	for (int j = 79; j > 0; j--) | ||||
| 	{ | ||||
| 			p = bm->scanLine(j); | ||||
| 		p = bm->scanLine(j + TopScanLine); | ||||
| 		memcpy(p, &WaterfallLines[snd_ch][TopLine][0], lineLen); | ||||
| 		TopLine++; | ||||
| 		if (TopLine > 79) | ||||
| 			TopLine = 0; | ||||
| 	} | ||||
| 
 | ||||
| 		WaterfallCopy[WaterfallNumber]->setPixmap(QPixmap::fromImage(*bm)); | ||||
| 		//	WaterfallCopy[snd_ch - 1]->setPixmap(*pm);
 | ||||
| 			//	WaterfallCopy[1]->setPixmap(QPixmap::fromImage(*bm));
 | ||||
| 	inWaterfall = false; | ||||
| } | ||||
| 	catch (const std::exception& e) // caught by reference to base
 | ||||
| 	{ | ||||
| 		qDebug() << " a standard exception was caught, with message '" | ||||
| 			<< e.what() << "'\n"; | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| void QtSoundModem::changeEvent(QEvent* e) | ||||
|  |  | |||
|  | @ -29,7 +29,7 @@ public: | |||
| 	~QtSoundModem(); | ||||
| 
 | ||||
| 	void RefreshWaterfall(int snd_ch, unsigned char * Data); | ||||
| 	void initWaterfall(int chan, int state); | ||||
| 	void initWaterfall(int state); | ||||
| 	void show_grid(); | ||||
| 	void checkforCWID(); | ||||
| 
 | ||||
|  | @ -39,6 +39,7 @@ private slots: | |||
| 
 | ||||
| 	void CWIDTimer(); | ||||
| 	void doDevices(); | ||||
| 	void mysetstyle(); | ||||
| 	void updateFont(); | ||||
| 	void MinimizetoTray(); | ||||
| 	void TrayActivated(QSystemTrayIcon::ActivationReason reason); | ||||
|  | @ -111,3 +112,9 @@ protected: | |||
| 	bool eventFilter(QObject *obj, QEvent *event) override; | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| #define WaterfallDisplayPixels 80 | ||||
| #define WaterfallHeaderPixels 38 | ||||
| #define WaterfallTotalPixels WaterfallDisplayPixels + WaterfallHeaderPixels | ||||
| #define WaterfallImageHeight (WaterfallTotalPixels + WaterfallTotalPixels) | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										159
									
								
								QtSoundModem.ui
									
									
									
									
									
								
							
							
						
						
									
										159
									
								
								QtSoundModem.ui
									
									
									
									
									
								
							|  | @ -6,8 +6,8 @@ | |||
|    <rect> | ||||
|     <x>0</x> | ||||
|     <y>0</y> | ||||
|     <width>962</width> | ||||
|     <height>721</height> | ||||
|     <width>993</width> | ||||
|     <height>900</height> | ||||
|    </rect> | ||||
|   </property> | ||||
|   <property name="maximumSize"> | ||||
|  | @ -50,48 +50,6 @@ | |||
|      </rect> | ||||
|     </property> | ||||
|    </widget> | ||||
|    <widget class="QLabel" name="WaterfallB"> | ||||
|     <property name="geometry"> | ||||
|      <rect> | ||||
|       <x>0</x> | ||||
|       <y>586</y> | ||||
|       <width>959</width> | ||||
|       <height>80</height> | ||||
|      </rect> | ||||
|     </property> | ||||
|     <property name="sizePolicy"> | ||||
|      <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> | ||||
|       <horstretch>0</horstretch> | ||||
|       <verstretch>0</verstretch> | ||||
|      </sizepolicy> | ||||
|     </property> | ||||
|     <property name="minimumSize"> | ||||
|      <size> | ||||
|       <width>600</width> | ||||
|       <height>80</height> | ||||
|      </size> | ||||
|     </property> | ||||
|     <property name="maximumSize"> | ||||
|      <size> | ||||
|       <width>5000</width> | ||||
|       <height>100</height> | ||||
|      </size> | ||||
|     </property> | ||||
|     <property name="font"> | ||||
|      <font> | ||||
|       <pointsize>8</pointsize> | ||||
|      </font> | ||||
|     </property> | ||||
|     <property name="frameShape"> | ||||
|      <enum>QFrame::Box</enum> | ||||
|     </property> | ||||
|     <property name="frameShadow"> | ||||
|      <enum>QFrame::Plain</enum> | ||||
|     </property> | ||||
|     <property name="text"> | ||||
|      <string>Waterfall</string> | ||||
|     </property> | ||||
|    </widget> | ||||
|    <widget class="QLabel" name="label_2"> | ||||
|     <property name="geometry"> | ||||
|      <rect> | ||||
|  | @ -121,25 +79,25 @@ | |||
|      <number>1500</number> | ||||
|     </property> | ||||
|    </widget> | ||||
|    <widget class="QLabel" name="WaterfallA"> | ||||
|    <widget class="QLabel" name="Waterfall"> | ||||
|     <property name="geometry"> | ||||
|      <rect> | ||||
|       <x>80</x> | ||||
|       <y>488</y> | ||||
|       <width>881</width> | ||||
|       <height>80</height> | ||||
|       <height>100</height> | ||||
|      </rect> | ||||
|     </property> | ||||
|     <property name="minimumSize"> | ||||
|      <size> | ||||
|       <width>600</width> | ||||
|       <height>80</height> | ||||
|       <height>100</height> | ||||
|      </size> | ||||
|     </property> | ||||
|     <property name="maximumSize"> | ||||
|      <size> | ||||
|       <width>5000</width> | ||||
|       <height>100</height> | ||||
|       <height>250</height> | ||||
|      </size> | ||||
|     </property> | ||||
|     <property name="font"> | ||||
|  | @ -171,9 +129,9 @@ | |||
|     <property name="geometry"> | ||||
|      <rect> | ||||
|       <x>690</x> | ||||
|       <y>0</y> | ||||
|       <y>2</y> | ||||
|       <width>73</width> | ||||
|       <height>16</height> | ||||
|       <height>13</height> | ||||
|      </rect> | ||||
|     </property> | ||||
|     <property name="text"> | ||||
|  | @ -215,78 +173,6 @@ | |||
|      <number>10</number> | ||||
|     </property> | ||||
|    </widget> | ||||
|    <widget class="QLabel" name="HeaderA"> | ||||
|     <property name="geometry"> | ||||
|      <rect> | ||||
|       <x>25</x> | ||||
|       <y>460</y> | ||||
|       <width>1076</width> | ||||
|       <height>38</height> | ||||
|      </rect> | ||||
|     </property> | ||||
|     <property name="minimumSize"> | ||||
|      <size> | ||||
|       <width>600</width> | ||||
|       <height>10</height> | ||||
|      </size> | ||||
|     </property> | ||||
|     <property name="maximumSize"> | ||||
|      <size> | ||||
|       <width>5000</width> | ||||
|       <height>100</height> | ||||
|      </size> | ||||
|     </property> | ||||
|     <property name="font"> | ||||
|      <font> | ||||
|       <pointsize>8</pointsize> | ||||
|      </font> | ||||
|     </property> | ||||
|     <property name="frameShape"> | ||||
|      <enum>QFrame::Box</enum> | ||||
|     </property> | ||||
|     <property name="frameShadow"> | ||||
|      <enum>QFrame::Plain</enum> | ||||
|     </property> | ||||
|     <property name="text"> | ||||
|      <string>Waterfall</string> | ||||
|     </property> | ||||
|    </widget> | ||||
|    <widget class="QLabel" name="HeaderB"> | ||||
|     <property name="geometry"> | ||||
|      <rect> | ||||
|       <x>10</x> | ||||
|       <y>560</y> | ||||
|       <width>1076</width> | ||||
|       <height>38</height> | ||||
|      </rect> | ||||
|     </property> | ||||
|     <property name="minimumSize"> | ||||
|      <size> | ||||
|       <width>600</width> | ||||
|       <height>10</height> | ||||
|      </size> | ||||
|     </property> | ||||
|     <property name="maximumSize"> | ||||
|      <size> | ||||
|       <width>5000</width> | ||||
|       <height>100</height> | ||||
|      </size> | ||||
|     </property> | ||||
|     <property name="font"> | ||||
|      <font> | ||||
|       <pointsize>8</pointsize> | ||||
|      </font> | ||||
|     </property> | ||||
|     <property name="frameShape"> | ||||
|      <enum>QFrame::Box</enum> | ||||
|     </property> | ||||
|     <property name="frameShadow"> | ||||
|      <enum>QFrame::Plain</enum> | ||||
|     </property> | ||||
|     <property name="text"> | ||||
|      <string>Waterfall</string> | ||||
|     </property> | ||||
|    </widget> | ||||
|    <widget class="QTextEdit" name="monWindow"> | ||||
|     <property name="geometry"> | ||||
|      <rect> | ||||
|  | @ -412,7 +298,7 @@ | |||
|       <x>600</x> | ||||
|       <y>2</y> | ||||
|       <width>87</width> | ||||
|       <height>16</height> | ||||
|       <height>13</height> | ||||
|      </rect> | ||||
|     </property> | ||||
|     <property name="text"> | ||||
|  | @ -487,9 +373,9 @@ | |||
|     <property name="geometry"> | ||||
|      <rect> | ||||
|       <x>780</x> | ||||
|       <y>17</y> | ||||
|       <y>14</y> | ||||
|       <width>150</width> | ||||
|       <height>12</height> | ||||
|       <height>11</height> | ||||
|      </rect> | ||||
|     </property> | ||||
|     <property name="frameShape"> | ||||
|  | @ -508,7 +394,7 @@ | |||
|       <x>780</x> | ||||
|       <y>0</y> | ||||
|       <width>91</width> | ||||
|       <height>16</height> | ||||
|       <height>13</height> | ||||
|      </rect> | ||||
|     </property> | ||||
|     <property name="font"> | ||||
|  | @ -526,13 +412,32 @@ | |||
|      <bool>true</bool> | ||||
|     </property> | ||||
|    </widget> | ||||
|    <widget class="QLabel" name="RXLevel2"> | ||||
|     <property name="geometry"> | ||||
|      <rect> | ||||
|       <x>780</x> | ||||
|       <y>23</y> | ||||
|       <width>150</width> | ||||
|       <height>11</height> | ||||
|      </rect> | ||||
|     </property> | ||||
|     <property name="frameShape"> | ||||
|      <enum>QFrame::Box</enum> | ||||
|     </property> | ||||
|     <property name="frameShadow"> | ||||
|      <enum>QFrame::Sunken</enum> | ||||
|     </property> | ||||
|     <property name="text"> | ||||
|      <string/> | ||||
|     </property> | ||||
|    </widget> | ||||
|   </widget> | ||||
|   <widget class="QMenuBar" name="menuBar"> | ||||
|    <property name="geometry"> | ||||
|     <rect> | ||||
|      <x>0</x> | ||||
|      <y>0</y> | ||||
|      <width>962</width> | ||||
|      <width>993</width> | ||||
|      <height>21</height> | ||||
|     </rect> | ||||
|    </property> | ||||
|  |  | |||
|  | @ -1,34 +0,0 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> | ||||
|     <LocalDebuggerWorkingDirectory>C:\DevProgs\BPQ32\SMTest</LocalDebuggerWorkingDirectory> | ||||
|     <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> | ||||
|     <LocalDebuggerCommandArguments> | ||||
|     </LocalDebuggerCommandArguments> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> | ||||
|     <LocalDebuggerWorkingDirectory>c:\devprogs\bpq32\SMSAT2</LocalDebuggerWorkingDirectory> | ||||
|     <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> | ||||
|     <LocalDebuggerCommandArguments>< d:\samples.wav</LocalDebuggerCommandArguments> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> | ||||
|     <LocalDebuggerWorkingDirectory>.\debug</LocalDebuggerWorkingDirectory> | ||||
|     <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> | ||||
|     <LocalDebuggerWorkingDirectory>C:\DevProgs\BPQ32\SMSat</LocalDebuggerWorkingDirectory> | ||||
|     <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Label="QtSettings" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> | ||||
|     <QtLastBackgroundBuild>2023-08-21T20:12:53.1523329Z</QtLastBackgroundBuild> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="QtSettings"> | ||||
|     <QtLastBackgroundBuild>2022-03-11T19:38:31.5906689Z</QtLastBackgroundBuild> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Label="QtSettings" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> | ||||
|     <QtLastBackgroundBuild>2023-08-18T07:29:42.4175478Z</QtLastBackgroundBuild> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="QtSettings"> | ||||
|     <QtLastBackgroundBuild>2022-03-11T19:38:33.3845083Z</QtLastBackgroundBuild> | ||||
|   </PropertyGroup> | ||||
| </Project> | ||||
|  | @ -1,34 +0,0 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> | ||||
|     <LocalDebuggerWorkingDirectory>C:\Devprogs\bpq32\SMSat2</LocalDebuggerWorkingDirectory> | ||||
|     <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> | ||||
|     <LocalDebuggerCommandArguments> | ||||
|     </LocalDebuggerCommandArguments> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> | ||||
|     <LocalDebuggerWorkingDirectory>c:\devprogs\bpq32\SMSAT2</LocalDebuggerWorkingDirectory> | ||||
|     <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> | ||||
|     <LocalDebuggerCommandArguments>< d:\samples.wav</LocalDebuggerCommandArguments> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> | ||||
|     <LocalDebuggerWorkingDirectory>C:\DevProgs\BPQ32\SMSat</LocalDebuggerWorkingDirectory> | ||||
|     <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> | ||||
|     <LocalDebuggerWorkingDirectory>C:\DevProgs\BPQ32\SMSat</LocalDebuggerWorkingDirectory> | ||||
|     <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Label="QtSettings" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> | ||||
|     <QtLastBackgroundBuild>2022-12-30T15:55:55.0433562Z</QtLastBackgroundBuild> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="QtSettings"> | ||||
|     <QtLastBackgroundBuild>2022-03-11T19:38:31.5906689Z</QtLastBackgroundBuild> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Label="QtSettings" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> | ||||
|     <QtLastBackgroundBuild>2022-12-30T15:55:55.2283725Z</QtLastBackgroundBuild> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="QtSettings"> | ||||
|     <QtLastBackgroundBuild>2022-03-11T19:38:33.3845083Z</QtLastBackgroundBuild> | ||||
|   </PropertyGroup> | ||||
| </Project> | ||||
|  | @ -3,8 +3,7 @@ | |||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> | ||||
|     <LocalDebuggerWorkingDirectory>C:\DevProgs\BPQ32\SMTest</LocalDebuggerWorkingDirectory> | ||||
|     <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> | ||||
|     <LocalDebuggerCommandArguments> | ||||
|     </LocalDebuggerCommandArguments> | ||||
|     <LocalDebuggerCommandArguments>-stylesheet StyleSheet.css</LocalDebuggerCommandArguments> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> | ||||
|     <LocalDebuggerWorkingDirectory>c:\devprogs\bpq32\SMSAT2</LocalDebuggerWorkingDirectory> | ||||
|  | @ -12,23 +11,24 @@ | |||
|     <LocalDebuggerCommandArguments>< d:\samples.wav</LocalDebuggerCommandArguments> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> | ||||
|     <LocalDebuggerWorkingDirectory>.\debug</LocalDebuggerWorkingDirectory> | ||||
|     <LocalDebuggerWorkingDirectory>C:\DevProgs\BPQ32\SMTest</LocalDebuggerWorkingDirectory> | ||||
|     <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> | ||||
|     <LocalDebuggerCommandArguments>-stylesheet StyleSheet.css</LocalDebuggerCommandArguments> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> | ||||
|     <LocalDebuggerWorkingDirectory>C:\DevProgs\BPQ32\SMSat</LocalDebuggerWorkingDirectory> | ||||
|     <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Label="QtSettings" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> | ||||
|     <QtLastBackgroundBuild>2023-09-26T11:58:59.9128543Z</QtLastBackgroundBuild> | ||||
|     <QtLastBackgroundBuild>2023-10-15T11:35:54.9027336Z</QtLastBackgroundBuild> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="QtSettings"> | ||||
|     <QtLastBackgroundBuild>2023-09-26T11:59:00.0378577Z</QtLastBackgroundBuild> | ||||
|     <QtLastBackgroundBuild>2023-10-15T11:35:55.0741785Z</QtLastBackgroundBuild> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Label="QtSettings" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> | ||||
|     <QtLastBackgroundBuild>2023-09-26T11:59:00.1388610Z</QtLastBackgroundBuild> | ||||
|     <QtLastBackgroundBuild>2023-10-15T11:35:55.2661628Z</QtLastBackgroundBuild> | ||||
|   </PropertyGroup> | ||||
|   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="QtSettings"> | ||||
|     <QtLastBackgroundBuild>2023-09-26T11:59:00.2228656Z</QtLastBackgroundBuild> | ||||
|     <QtLastBackgroundBuild>2023-10-15T11:35:55.4659021Z</QtLastBackgroundBuild> | ||||
|   </PropertyGroup> | ||||
| </Project> | ||||
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										1381
									
								
								SMMain-HPLaptop.c
									
									
									
									
									
								
							
							
						
						
									
										1381
									
								
								SMMain-HPLaptop.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										6
									
								
								SMMain.c
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								SMMain.c
									
									
									
									
									
								
							|  | @ -32,6 +32,8 @@ along with QtSoundModem.  If not, see http://www.gnu.org/licenses | |||
| BOOL KISSServ; | ||||
| int KISSPort; | ||||
| 
 | ||||
| int NeedWaterfallHeaders = 0; | ||||
| 
 | ||||
| BOOL AGWServ; | ||||
| int AGWPort; | ||||
| 
 | ||||
|  | @ -566,7 +568,7 @@ int Freq_Change(int Chan, int Freq) | |||
| 	tx_freq[Chan] = Freq; | ||||
| 
 | ||||
| 	pnt_change[Chan] = TRUE; | ||||
| 	wf_pointer(Chan); | ||||
| 	NeedWaterfallHeaders = TRUE; | ||||
| 
 | ||||
| 	return Freq; | ||||
| } | ||||
|  | @ -1203,7 +1205,7 @@ void CM108_set_ptt(int PTTState) | |||
| 
 | ||||
| } | ||||
| 
 | ||||
| float amplitudes[4] = { 32767, 32767, 32767, 32767 }; | ||||
| float amplitudes[4] = { 32000, 32000, 32000, 32000 }; | ||||
| extern float amplitude; | ||||
| 
 | ||||
| void RadioPTT(int snd_ch, BOOL PTTState) | ||||
|  |  | |||
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										23
									
								
								UZ7HOStuff.h
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								UZ7HOStuff.h
									
									
									
									
									
								
							|  | @ -4,8 +4,8 @@ | |||
| //	 My port of UZ7HO's Soundmodem
 | ||||
| //
 | ||||
| 
 | ||||
| #define VersionString "0.0.0.68" | ||||
| #define VersionBytes {0, 0, 0, 68} | ||||
| #define VersionString "0.0.0.71" | ||||
| #define VersionBytes {0, 0, 0, 71} | ||||
| 
 | ||||
| // Added FX25. 4x100 FEC and V27 not Working and disabled
 | ||||
| 
 | ||||
|  | @ -167,6 +167,18 @@ | |||
| //	   Fix Waterfall display when using right channel only
 | ||||
| //	   Allow PTT device to be added 
 | ||||
| 
 | ||||
| // .69	Add basic Dark Theme
 | ||||
| //		Fix some timing bugs in Waterfall and RX Level refresh
 | ||||
| //		Only display session table if AGW interface is enabled
 | ||||
| //		Fix operation with both left and right channels in use
 | ||||
| 
 | ||||
| // .70  Restructure Waterfall area to be a single image 
 | ||||
| 
 | ||||
| // .71	Add IL2P CRC Mode
 | ||||
| //		Improve reliability of waterfall update
 | ||||
| //		Report and set fx.25 and il2p flags to/from BPQ
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| #include <string.h> | ||||
|  | @ -997,6 +1009,7 @@ extern TAX25Port AX25Port[4][port_num]; | |||
| 
 | ||||
| extern int fx25_mode[4]; | ||||
| extern int il2p_mode[4]; | ||||
| extern int il2p_crc[4]; | ||||
| 
 | ||||
| extern int tx_fx25_size[4]; | ||||
| extern int tx_fx25_size_cnt[4]; | ||||
|  | @ -1098,7 +1111,7 @@ int Add(TStringList * Q, string * Entry); | |||
| 
 | ||||
| struct il2p_context_s { | ||||
| 
 | ||||
| 	enum { IL2P_SEARCHING = 0, IL2P_HEADER, IL2P_PAYLOAD, IL2P_DECODE } state; | ||||
| 	enum { IL2P_SEARCHING = 0, IL2P_HEADER, IL2P_PAYLOAD, IL2P_CRC, IL2P_DECODE } state; | ||||
| 
 | ||||
| 	unsigned int acc;	// Accumulate most recent 24 bits for sync word matching.
 | ||||
| 				// Lower 8 bits are also used for accumulating bytes for
 | ||||
|  | @ -1122,8 +1135,12 @@ struct il2p_context_s { | |||
| 	int pc;			// Number of bytes placed in above.
 | ||||
| 
 | ||||
| 	int corrected;		// Number of symbols corrected by RS FEC.
 | ||||
| 
 | ||||
| 	int crccount;			// fec chars collected
 | ||||
| 	unsigned char crc[4];	// the 4 fec chars
 | ||||
| }; | ||||
| 
 | ||||
| extern int NeedWaterfallHeaders; | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| } | ||||
|  |  | |||
							
								
								
									
										45
									
								
								agwlib.h
									
									
									
									
									
								
							
							
						
						
									
										45
									
								
								agwlib.h
									
									
									
									
									
								
							|  | @ -1,45 +0,0 @@ | |||
| 
 | ||||
| #ifndef AGWLIB_H | ||||
| #define AGWLIB_H 1 | ||||
| 
 | ||||
| 
 | ||||
| // Call at beginning to start it up.
 | ||||
| 
 | ||||
| int agwlib_init (char *host, char *port, int (*init_func)(void)); | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| // Send commands to TNC.
 | ||||
| 
 | ||||
| 
 | ||||
| int agwlib_X_register_callsign (int chan, char *call_from); | ||||
| 
 | ||||
| int agwlib_x_unregister_callsign (int chan, char *call_from); | ||||
| 
 | ||||
| int agwlib_G_ask_port_information (void); | ||||
| 
 | ||||
| int agwlib_C_connect (int chan, char *call_from, char *call_to); | ||||
| 
 | ||||
| int agwlib_d_disconnect (int chan, char *call_from, char *call_to); | ||||
| 
 | ||||
| int agwlib_D_send_connected_data (int chan, int pid, char *call_from, char *call_to, int data_len, char *data); | ||||
| 
 | ||||
| int agwlib_Y_outstanding_frames_for_station (int chan, char *call_from, char *call_to); | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| // The application must define these.
 | ||||
| 
 | ||||
| void agw_cb_C_connection_received (int chan, char *call_from, char *call_to, int data_len, char *data); | ||||
| void on_C_connection_received (int chan, char *call_from, char *call_to, int incoming, char *data); | ||||
| 
 | ||||
| void agw_cb_d_disconnected (int chan, char *call_from, char *call_to, int data_len, char *data); | ||||
| 
 | ||||
| void agw_cb_D_connected_data (int chan, char *call_from, char *call_to, int data_len, char *data); | ||||
| 
 | ||||
| void agw_cb_G_port_information (int num_chan, char *chan_descriptions[]); | ||||
| 
 | ||||
| void agw_cb_Y_outstanding_frames_for_station (int chan, char *call_from, char *call_to, int frame_count); | ||||
| 
 | ||||
| 
 | ||||
| #endif | ||||
							
								
								
									
										8
									
								
								ais.h
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								ais.h
									
									
									
									
									
								
							|  | @ -1,8 +0,0 @@ | |||
| 
 | ||||
| 
 | ||||
| void ais_to_nmea (unsigned char *ais, int ais_len, char *nema, int nema_size); | ||||
| 
 | ||||
| int ais_parse (char *sentence, int quiet, char *descr, int descr_size, char *mssi, int mssi_size, double *odlat, double *odlon, | ||||
| 			float *ofknots, float *ofcourse, float *ofalt_m, char *symtab, char *symbol, char *comment, int comment_size); | ||||
| 
 | ||||
| int ais_check_length (int type, int length); | ||||
							
								
								
									
										191
									
								
								aprs_tt.h
									
									
									
									
									
								
							
							
						
						
									
										191
									
								
								aprs_tt.h
									
									
									
									
									
								
							|  | @ -1,191 +0,0 @@ | |||
| 
 | ||||
| /* aprs_tt.h */ | ||||
| 
 | ||||
| #ifndef APRS_TT_H | ||||
| #define APRS_TT_H 1 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * For holding location format specifications from config file. | ||||
|  * Same thing is also useful for macro definitions. | ||||
|  * We have exactly the same situation of looking for a pattern | ||||
|  * match and extracting fixed size groups of digits. | ||||
|  */ | ||||
| 
 | ||||
| struct ttloc_s { | ||||
| 	enum { TTLOC_POINT, TTLOC_VECTOR, TTLOC_GRID, TTLOC_UTM, TTLOC_MGRS, TTLOC_USNG, TTLOC_MACRO, TTLOC_MHEAD, TTLOC_SATSQ, TTLOC_AMBIG } type; | ||||
| 
 | ||||
| 	char pattern[20];	/* e.g. B998, B5bbbdddd, B2xxyy, Byyyxxx, BAxxxx */ | ||||
| 				/* For macros, it should be all fixed digits, */ | ||||
| 				/* and the letters x, y, z.  e.g.  911, xxyyyz */ | ||||
| 
 | ||||
| 	union { | ||||
| 
 | ||||
| 	  struct {	 | ||||
| 	    double lat;		/* Specific locations. */ | ||||
| 	    double lon; | ||||
| 	  } point; | ||||
| 
 | ||||
| 	  struct { | ||||
| 	    double lat;		/* For bearing/direction. */ | ||||
| 	    double lon; | ||||
| 	    double scale;	/* conversion to meters */ | ||||
| 	  } vector; | ||||
| 
 | ||||
| 	  struct { | ||||
| 	    double lat0;	/* yyy all zeros. */ | ||||
| 	    double lon0;	/* xxx */ | ||||
| 	    double lat9;	/* yyy all nines. */ | ||||
| 	    double lon9;	/* xxx */ | ||||
| 	  } grid; | ||||
| 
 | ||||
| 	  struct { | ||||
| 	    double scale; | ||||
| 	    double x_offset; | ||||
| 	    double y_offset; | ||||
| 	    long lzone;		/* UTM zone, should be 1-60 */ | ||||
| 	    char latband;	/* Latitude band if specified, otherwise space or - */ | ||||
| 	    char hemi;		/* UTM Hemisphere, should be 'N' or 'S'. */ | ||||
| 	  } utm; | ||||
| 
 | ||||
| 	  struct { | ||||
| 	    char zone[8];	/* Zone and square for USNG/MGRS */ | ||||
| 	  } mgrs; | ||||
| 
 | ||||
| 	  struct { | ||||
| 	    char prefix[24];	/* should be 10, 6, or 4 digits to be */ | ||||
| 				/* prepended to the received sequence. */ | ||||
| 	  } mhead; | ||||
| 
 | ||||
| 	  struct { | ||||
| 	    char *definition; | ||||
| 	  } macro; | ||||
| 
 | ||||
| 	}; | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| /* Error codes for sending responses to user. */ | ||||
| 
 | ||||
| #define TT_ERROR_OK		0	/* Success. */ | ||||
| #define TT_ERROR_D_MSG		1	/* D was first char of field.  Not implemented yet. */ | ||||
| #define TT_ERROR_INTERNAL	2	/* Internal error.  Shouldn't be here. */ | ||||
| #define TT_ERROR_MACRO_NOMATCH	3	/* No definition for digit sequence. */ | ||||
| #define TT_ERROR_BAD_CHECKSUM	4	/* Bad checksum on call. */ | ||||
| #define TT_ERROR_INVALID_CALL	5	/* Invalid callsign. */ | ||||
| #define TT_ERROR_INVALID_OBJNAME 6	/* Invalid object name. */ | ||||
| #define TT_ERROR_INVALID_SYMBOL	7	/* Invalid symbol specification. */ | ||||
| #define TT_ERROR_INVALID_LOC	8	/* Invalid location. */ | ||||
| #define TT_ERROR_NO_CALL	9	/* No call or object name included. */ | ||||
| #define TT_ERROR_INVALID_MHEAD	10	/* Invalid Maidenhead Locator. */ | ||||
| #define TT_ERROR_INVALID_SATSQ	11	/* Satellite square must be 4 digits. */ | ||||
| #define TT_ERROR_SUFFIX_NO_CALL 12	/* No known callsign for suffix. */ | ||||
| 
 | ||||
| #define TT_ERROR_MAXP1		13	/* Number of items above.  i.e. Last number plus 1. */ | ||||
| 
 | ||||
| 
 | ||||
| #if CONFIG_C		/* Is this being included from config.c? */ | ||||
| 
 | ||||
| /* Must keep in sync with above !!! */ | ||||
| 
 | ||||
| static const char *tt_msg_id[TT_ERROR_MAXP1] = { | ||||
| 	"OK", | ||||
| 	"D_MSG", | ||||
| 	"INTERNAL", | ||||
| 	"MACRO_NOMATCH", | ||||
| 	"BAD_CHECKSUM", | ||||
| 	"INVALID_CALL", | ||||
| 	"INVALID_OBJNAME", | ||||
| 	"INVALID_SYMBOL", | ||||
| 	"INVALID_LOC", | ||||
| 	"NO_CALL", | ||||
| 	"INVALID_MHEAD", | ||||
| 	"INVALID_SATSQ", | ||||
| 	"SUFFIX_NO_CALL" | ||||
| }; | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| /* 
 | ||||
|  * Configuration options for APRStt. | ||||
|  */ | ||||
| 
 | ||||
| #define TT_MAX_XMITS 10 | ||||
| 
 | ||||
| #define TT_MTEXT_LEN 64 | ||||
| 
 | ||||
| 
 | ||||
| struct tt_config_s { | ||||
| 
 | ||||
| 	int gateway_enabled;		/* Send DTMF sequences to APRStt gateway. */ | ||||
| 
 | ||||
| 	int obj_recv_chan;		/* Channel to listen for tones. */ | ||||
| 
 | ||||
| 	int obj_xmit_chan;		/* Channel to transmit object report. */ | ||||
| 					/* -1 for none.  This could happen if we */ | ||||
| 					/* are only sending to application */ | ||||
| 					/* and/or IGate. */ | ||||
| 
 | ||||
| 	int obj_send_to_app;		/* send to attached application(s). */ | ||||
| 
 | ||||
| 	int obj_send_to_ig;		/* send to IGate. */ | ||||
| 
 | ||||
| 	char obj_xmit_via[AX25_MAX_REPEATERS * (AX25_MAX_ADDR_LEN+1)];	 | ||||
| 					/* e.g.  empty or "WIDE2-1,WIDE1-1" */ | ||||
| 	 | ||||
| 	int retain_time;		/* Seconds to keep information about a user. */ | ||||
| 
 | ||||
| 	int num_xmits;			/* Number of times to transmit object report. */ | ||||
| 				 | ||||
| 	int xmit_delay[TT_MAX_XMITS];	/* Delay between them. */ | ||||
| 					/* e.g.  3 seconds before first transmission then */ | ||||
| 					/* delays of 16, 32, seconds etc. in between repeats. */ | ||||
| 
 | ||||
| 	struct ttloc_s *ttloc_ptr;	/* Pointer to variable length array of above. */ | ||||
| 	int ttloc_size;			/* Number of elements allocated. */ | ||||
| 	int ttloc_len;			/* Number of elements actually used. */ | ||||
| 
 | ||||
| 	double corral_lat;		/* The "corral" for unknown locations. */ | ||||
| 	double corral_lon; | ||||
| 	double corral_offset; | ||||
| 	int corral_ambiguity; | ||||
| 
 | ||||
| 	char status[10][TT_MTEXT_LEN];		/* Up to 9 status messages. e.g.  "/enroute" */ | ||||
| 						/* Position 0 means none and can't be changed. */ | ||||
| 
 | ||||
| 	struct { | ||||
| 	  char method[AX25_MAX_ADDR_LEN];	/* SPEECH or MORSE[-n] */ | ||||
| 	  char mtext[TT_MTEXT_LEN];		/* Message text. */ | ||||
| 	} response[TT_ERROR_MAXP1]; | ||||
| 
 | ||||
| 	char ttcmd[80];			/* Command to generate custom audible response. */ | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 	 | ||||
| void aprs_tt_init (struct tt_config_s *p_config, int debug); | ||||
| 
 | ||||
| void aprs_tt_button (int chan, char button); | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| #define APRSTT_LOC_DESC_LEN 32		/* Need at least 26 */ | ||||
| 
 | ||||
| #define APRSTT_DEFAULT_SYMTAB '\\' | ||||
| #define APRSTT_DEFAULT_SYMBOL 'A' | ||||
| 
 | ||||
| 
 | ||||
| void aprs_tt_dao_to_desc (char *dao, char *str); | ||||
| 
 | ||||
| void aprs_tt_sequence (int chan, char *msg); | ||||
| 
 | ||||
| int dw_run_cmd (char *cmd, int oneline, char *result, size_t resultsiz); | ||||
| 
 | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| /* end aprs_tt.h */ | ||||
|  | @ -1,7 +0,0 @@ | |||
| 
 | ||||
| 
 | ||||
| /* audio_stats.h */ | ||||
| 
 | ||||
| 
 | ||||
| extern void audio_stats (int adev, int nchan, int nsamp, int interval); | ||||
| 
 | ||||
							
								
								
									
										47
									
								
								ax25_agw.c
									
									
									
									
									
								
							
							
						
						
									
										47
									
								
								ax25_agw.c
									
									
									
									
									
								
							|  | @ -515,13 +515,15 @@ void on_AGW_Gs_frame(AGWUser * AGW, struct AGWHeader * Frame, Byte * Data) | |||
| { | ||||
| 	// QTSM with a data field is used by QtSM to set/read Modem Params
 | ||||
| 
 | ||||
| 	Byte info[44] = { 0, 255, 24, 3, 100, 15, 6, 0, 1, 0, 0, 0 }; //QTSM Signature
 | ||||
| 	Byte info[48] = { 0, 255, 24, 3, 100, 15, 6, 0, 1, 0, 0, 0 }; //QTSM Signature
 | ||||
| 	int Len = 12; | ||||
| 
 | ||||
| 	if (Frame->DataLength == 32) | ||||
| 	{ | ||||
| 		// BPQ to QTSM private Format. 
 | ||||
| 
 | ||||
| 		// First 4 Freq, 4 to 24 Modem, rest was spare. Use 27-31 for modem control flags (fx.25 il2p etc)
 | ||||
| 
 | ||||
| 		int Freq; | ||||
| 		Byte versionBytes[4] = VersionBytes; | ||||
| 
 | ||||
|  | @ -569,6 +571,13 @@ void on_AGW_Gs_frame(AGWUser * AGW, struct AGWHeader * Frame, Byte * Data) | |||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		if (Data[27] == 2) | ||||
| 		{ | ||||
| 			fx25_mode[Frame->Port] = Data[28]; | ||||
| 			il2p_mode[Frame->Port] = Data[29]; | ||||
| 			il2p_crc[Frame->Port] = Data[30]; | ||||
| 		} | ||||
| 
 | ||||
| 		// Return Freq and Modem
 | ||||
| 
 | ||||
| 		memcpy(&info[12], &rx_freq[Frame->Port], 2); | ||||
|  | @ -577,6 +586,22 @@ void on_AGW_Gs_frame(AGWUser * AGW, struct AGWHeader * Frame, Byte * Data) | |||
| 		memcpy(&info[38], versionBytes, 4); | ||||
| 
 | ||||
| 		Len = 44; | ||||
| 
 | ||||
| 		if (Data[27]) | ||||
| 		{ | ||||
| 			// BPQ understands fx25 and il2p fields
 | ||||
| 
 | ||||
| 			AGW->reportFreqAndModem = 2;			// Can report frequency Modem and flags
 | ||||
| 
 | ||||
| 
 | ||||
| 			Len = 48; | ||||
| 
 | ||||
| 			info[44] = 1;			// Show includes Modem Flags
 | ||||
| 			info[45] = fx25_mode[Frame->Port]; | ||||
| 			info[46] = il2p_mode[Frame->Port]; | ||||
| 			info[47] = il2p_crc[Frame->Port]; | ||||
| 		} | ||||
| 
 | ||||
| 		AGW_send_to_app(AGW->socket, AGW_Gs_Frame(Frame->Port, info, Len)); | ||||
| 		return; | ||||
| 	} | ||||
|  | @ -1337,6 +1362,9 @@ void AGW_Report_Modem_Change(int port) | |||
| 	AGWUser * AGW; | ||||
| 	string * pkt; | ||||
| 
 | ||||
| 	if (soundChannel[port] == 0)		// Not in use
 | ||||
| 		return; | ||||
| 
 | ||||
| 	// I think we send to all AGW sockets
 | ||||
| 
 | ||||
| 	for (i = 0; i < AGWConCount; i++) | ||||
|  | @ -1345,16 +1373,27 @@ void AGW_Report_Modem_Change(int port) | |||
| 
 | ||||
| 		if (AGW->reportFreqAndModem) | ||||
| 		{ | ||||
| 			// QTSM 's' Message with a data field is used by QtSM to set/read Modem Params
 | ||||
| 			// QTSM 'g' Message with a data field is used by QtSM to set/read Modem Params
 | ||||
| 
 | ||||
| 			Byte info[44] = { 0, 255, 24, 3, 100, 15, 6, 0, 1, 0, 0, 0 }; //QTSM Signature
 | ||||
| 			Byte info[48] = { 0, 255, 24, 3, 100, 15, 6, 0, 1, 0, 0, 0 }; //QTSM Signature
 | ||||
| 			int Len = 44; | ||||
| 
 | ||||
| 			// Return Freq and Modem
 | ||||
| 
 | ||||
| 			memcpy(&info[12], &rx_freq[port], 2); | ||||
| 			memcpy(&info[16], modes_name[speed[port]], 20); | ||||
| 			info[37] = speed[port];			// Index
 | ||||
| 			AGW_send_to_app(AGW->socket, AGW_Gs_Frame(port, info, 44)); | ||||
| 
 | ||||
| 			if (AGW->reportFreqAndModem == 2) | ||||
| 			{ | ||||
| 				Len = 48; | ||||
| 
 | ||||
| 				info[44] = 1;			// Show includes Modem Flags
 | ||||
| 				info[45] = fx25_mode[port]; | ||||
| 				info[46] = il2p_mode[port]; | ||||
| 				info[47] = il2p_crc[port]; | ||||
| 			} | ||||
| 			AGW_send_to_app(AGW->socket, AGW_Gs_Frame(port, info, Len)); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  |  | |||
|  | @ -142,6 +142,7 @@ short active_rx_freq[5] = { 1700, 1700,1700,1700,1700 }; | |||
|   | ||||
| int fx25_mode[4] = { 0, 0, 0, 0 }; | ||||
| int il2p_mode[4] = { 0, 0, 0, 0 }; | ||||
| int il2p_crc[4] = { 0, 0, 0, 0 }; | ||||
| 
 | ||||
| int pnt_change[5] = { 0 }; | ||||
| float src_buf[5][2048]; | ||||
|  |  | |||
							
								
								
									
										88
									
								
								ax25_link.h
									
									
									
									
									
								
							
							
						
						
									
										88
									
								
								ax25_link.h
									
									
									
									
									
								
							|  | @ -1,88 +0,0 @@ | |||
| 
 | ||||
| /* ax25_link.h */ | ||||
| 
 | ||||
| 
 | ||||
| #ifndef AX25_LINK_H | ||||
| #define AX25_LINK_H 1 | ||||
| 
 | ||||
| #include "ax25_pad.h"		// for AX25_MAX_INFO_LEN | ||||
| 
 | ||||
| #include "dlq.h"		// for dlq_item_t | ||||
| 
 | ||||
| #include "config.h"		// for struct misc_config_s | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| // Limits and defaults for parameters.
 | ||||
| 
 | ||||
| 
 | ||||
| #define AX25_N1_PACLEN_MIN 1		// Max bytes in Information part of frame.
 | ||||
| #define AX25_N1_PACLEN_DEFAULT 256	// some v2.0 implementations have 128
 | ||||
| #define AX25_N1_PACLEN_MAX AX25_MAX_INFO_LEN	// from ax25_pad.h
 | ||||
| 
 | ||||
| 
 | ||||
| #define AX25_N2_RETRY_MIN 1		// Number of times to retry before giving up.
 | ||||
| #define AX25_N2_RETRY_DEFAULT 10 | ||||
| #define AX25_N2_RETRY_MAX 15 | ||||
| 
 | ||||
| 
 | ||||
| #define AX25_T1V_FRACK_MIN 1		// Number of seconds to wait before retrying.
 | ||||
| #define AX25_T1V_FRACK_DEFAULT 3	// KPC-3+ has 4.  TM-D710A has 3.
 | ||||
| #define AX25_T1V_FRACK_MAX 15 | ||||
| 
 | ||||
| 
 | ||||
| #define AX25_K_MAXFRAME_BASIC_MIN 1		// Window size - number of I frames to send before waiting for ack.
 | ||||
| #define AX25_K_MAXFRAME_BASIC_DEFAULT 4 | ||||
| #define AX25_K_MAXFRAME_BASIC_MAX 7 | ||||
| 
 | ||||
| #define AX25_K_MAXFRAME_EXTENDED_MIN 1 | ||||
| #define AX25_K_MAXFRAME_EXTENDED_DEFAULT 32 | ||||
| #define AX25_K_MAXFRAME_EXTENDED_MAX 63		// In theory 127 but I'm restricting as explained in SREJ handling.
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| // Call once at startup time.
 | ||||
| 
 | ||||
| void ax25_link_init (struct misc_config_s *pconfig); | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| // IMPORTANT:
 | ||||
| 
 | ||||
| // These functions must be called on a single thread, one at a time.
 | ||||
| // The Data Link Queue (DLQ) is used to serialize events from multiple sources.
 | ||||
| 
 | ||||
| // Maybe the dispatch switch should be moved to ax25_link.c so they can all
 | ||||
| // be made static and they can't be called from the wrong place accidentally.
 | ||||
| 
 | ||||
| void dl_connect_request (dlq_item_t *E); | ||||
| 
 | ||||
| void dl_disconnect_request (dlq_item_t *E); | ||||
| 
 | ||||
| void dl_data_request (dlq_item_t *E); | ||||
| 
 | ||||
| void dl_register_callsign (dlq_item_t *E); | ||||
| 
 | ||||
| void dl_unregister_callsign (dlq_item_t *E); | ||||
| 
 | ||||
| void dl_outstanding_frames_request (dlq_item_t *E); | ||||
| 
 | ||||
| void dl_client_cleanup (dlq_item_t *E); | ||||
| 
 | ||||
| 
 | ||||
| void lm_data_indication (dlq_item_t *E); | ||||
| 
 | ||||
| void lm_seize_confirm (dlq_item_t *E); | ||||
| 
 | ||||
| void lm_channel_busy (dlq_item_t *E); | ||||
| 
 | ||||
| 
 | ||||
| void dl_timer_expiry (void); | ||||
| 
 | ||||
| 
 | ||||
| double ax25_link_get_next_timer_expiry (void); | ||||
| 
 | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| /* end ax25_link.h */ | ||||
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										55
									
								
								ax25_pad2.h
									
									
									
									
									
								
							
							
						
						
									
										55
									
								
								ax25_pad2.h
									
									
									
									
									
								
							|  | @ -1,55 +0,0 @@ | |||
| /*-------------------------------------------------------------------
 | ||||
|  * | ||||
|  * Name:	ax25_pad2.h | ||||
|  * | ||||
|  * Purpose:	Header file for using ax25_pad2.c | ||||
|  *		ax25_pad dealt only with UI frames. | ||||
|  *		This adds a facility for the other types: U, s, I. | ||||
|  * | ||||
|  *------------------------------------------------------------------*/ | ||||
| 
 | ||||
| #ifndef AX25_PAD2_H | ||||
| #define AX25_PAD2_H 1 | ||||
| 
 | ||||
| #include "ax25_pad.h" | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| #if AX25MEMDEBUG	// to investigate a memory leak problem
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| packet_t ax25_u_frame_debug (char addrs[AX25_MAX_ADDRS][AX25_MAX_ADDR_LEN], int num_addr, cmdres_t cr, ax25_frame_type_t ftype, int pf, int pid, unsigned char *pinfo, int info_len, char *src_file, int src_line); | ||||
| 
 | ||||
| packet_t ax25_s_frame_debug (char addrs[AX25_MAX_ADDRS][AX25_MAX_ADDR_LEN], int num_addr, cmdres_t cr, ax25_frame_type_t ftype, int modulo, int nr, int pf, unsigned char *pinfo, int info_len, char *src_file, int src_line); | ||||
| 
 | ||||
| packet_t ax25_i_frame_debug (char addrs[AX25_MAX_ADDRS][AX25_MAX_ADDR_LEN], int num_addr, cmdres_t cr, int modulo, int nr, int ns, int pf, int pid, unsigned char *pinfo, int info_len, char *src_file, int src_line); | ||||
| 
 | ||||
| 
 | ||||
| #define ax25_u_frame(a,n,c,f,p,q,i,l) ax25_u_frame_debug(a,n,c,f,p,q,i,l,__FILE__,__LINE__) | ||||
| 
 | ||||
| #define ax25_s_frame(a,n,c,f,m,r,p,i,l) ax25_s_frame_debug(a,n,c,f,m,r,p,i,l,__FILE__,__LINE__) | ||||
| 
 | ||||
| #define ax25_i_frame(a,n,c,m,r,s,p,q,i,l) ax25_i_frame_debug(a,n,c,m,r,s,p,q,i,l,__FILE__,__LINE__) | ||||
| 
 | ||||
| 
 | ||||
| #else | ||||
| 
 | ||||
| packet_t ax25_u_frame (char addrs[AX25_MAX_ADDRS][AX25_MAX_ADDR_LEN], int num_addr, cmdres_t cr, ax25_frame_type_t ftype, int pf, int pid, unsigned char *pinfo, int info_len); | ||||
| 
 | ||||
| packet_t ax25_s_frame (char addrs[AX25_MAX_ADDRS][AX25_MAX_ADDR_LEN], int num_addr, cmdres_t cr, ax25_frame_type_t ftype, int modulo, int nr, int pf, unsigned char *pinfo, int info_len); | ||||
| 
 | ||||
| packet_t ax25_i_frame (char addrs[AX25_MAX_ADDRS][AX25_MAX_ADDR_LEN], int num_addr, cmdres_t cr, int modulo, int nr, int ns, int pf, int pid, unsigned char *pinfo, int info_len); | ||||
| 
 | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| #endif /* AX25_PAD2_H */ | ||||
| 
 | ||||
| /* end ax25_pad2.h */ | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										6
									
								
								beacon.h
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								beacon.h
									
									
									
									
									
								
							|  | @ -1,6 +0,0 @@ | |||
| 
 | ||||
| /* beacon.h */ | ||||
| 
 | ||||
| void beacon_init (struct audio_s *pmodem, struct misc_config_s *pconfig, struct igate_config_s *pigate); | ||||
| 
 | ||||
| void beacon_tracker_set_debug (int level); | ||||
|  | @ -1,62 +0,0 @@ | |||
| 
 | ||||
| 
 | ||||
| #ifndef CDIGIPEATER_H | ||||
| #define CDIGIPEATER_H 1 | ||||
| 
 | ||||
| #include "regex.h" | ||||
| 
 | ||||
| #include "direwolf.h"		/* for MAX_CHANS */ | ||||
| #include "ax25_pad.h"		/* for packet_t */ | ||||
| #include "audio.h"		/* for radio channel properties */ | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * Information required for Connected mode digipeating. | ||||
|  * | ||||
|  * The configuration file reader fills in this information | ||||
|  * and it is passed to cdigipeater_init at application start up time. | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| struct cdigi_config_s { | ||||
| 
 | ||||
| /*
 | ||||
|  * Rules for each of the [from_chan][to_chan] combinations. | ||||
|  */ | ||||
| 	int	enabled[MAX_CHANS][MAX_CHANS];	// Is it enabled for from/to pair?
 | ||||
| 
 | ||||
| 	int has_alias[MAX_CHANS][MAX_CHANS];	// If there was no alias in the config file,
 | ||||
| 						// the structure below will not be set up
 | ||||
| 						// properly and an attempt to use it could
 | ||||
| 						// result in a crash.  (fixed v1.5)
 | ||||
| 						// Not needed for [APRS] DIGIPEAT because
 | ||||
| 						// the alias is mandatory there.
 | ||||
| 	regex_t	alias[MAX_CHANS][MAX_CHANS]; | ||||
| 
 | ||||
| 	char *cfilter_str[MAX_CHANS][MAX_CHANS]; | ||||
| 						// NULL or optional Packet Filter strings such as "t/m".
 | ||||
| }; | ||||
| 
 | ||||
| /*
 | ||||
|  * Call once at application start up time. | ||||
|  */ | ||||
| 
 | ||||
| extern void cdigipeater_init (struct audio_s *p_audio_config, struct cdigi_config_s *p_cdigi_config); | ||||
| 
 | ||||
| /*
 | ||||
|  * Call this for each packet received. | ||||
|  * Suitable packets will be queued for transmission. | ||||
|  */ | ||||
| 
 | ||||
| extern void cdigipeater (int from_chan, packet_t pp); | ||||
| 
 | ||||
| 
 | ||||
| /* Make statistics available. */ | ||||
| 
 | ||||
| int cdigipeater_get_count (int from_chan, int to_chan); | ||||
| 
 | ||||
| 
 | ||||
| #endif  | ||||
| 
 | ||||
| /* end cdigipeater.h */ | ||||
| 
 | ||||
							
								
								
									
										5
									
								
								cm108.h
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								cm108.h
									
									
									
									
									
								
							|  | @ -1,5 +0,0 @@ | |||
| /* Dire Wolf cm108.h */ | ||||
| 
 | ||||
| extern void cm108_find_ptt (char *output_audio_device, char *ptt_device, int ptt_device_size); | ||||
| 
 | ||||
| extern int cm108_set_gpio_pin (char *name, int num, int state); | ||||
							
								
								
									
										262
									
								
								config.h
									
									
									
									
									
								
							
							
						
						
									
										262
									
								
								config.h
									
									
									
									
									
								
							|  | @ -1,262 +0,0 @@ | |||
| 
 | ||||
| /*----------------------------------------------------------------------------
 | ||||
|  *  | ||||
|  * Name:	config.h | ||||
|  * | ||||
|  * Purpose:	 | ||||
|  * | ||||
|  * Description:	 | ||||
|  * | ||||
|  *-----------------------------------------------------------------------------*/ | ||||
| 
 | ||||
| 
 | ||||
| #ifndef CONFIG_H | ||||
| #define CONFIG_H 1 | ||||
| 
 | ||||
| #include "audio.h"		/* for struct audio_s */ | ||||
| #include "digipeater.h"		/* for struct digi_config_s */ | ||||
| #include "cdigipeater.h"		/* for struct cdigi_config_s */ | ||||
| #include "aprs_tt.h"		/* for struct tt_config_s */ | ||||
| #include "igate.h"		/* for struct igate_config_s */ | ||||
| 
 | ||||
| /*
 | ||||
|  * All the leftovers. | ||||
|  * This wasn't thought out.  It just happened. | ||||
|  */ | ||||
| 
 | ||||
| enum beacon_type_e { BEACON_IGNORE, BEACON_POSITION, BEACON_OBJECT, BEACON_TRACKER, BEACON_CUSTOM, BEACON_IGATE }; | ||||
| 
 | ||||
| enum sendto_type_e { SENDTO_XMIT, SENDTO_IGATE, SENDTO_RECV }; | ||||
| 
 | ||||
| 
 | ||||
| #define MAX_BEACONS 30 | ||||
| #define MAX_KISS_TCP_PORTS (MAX_CHANS+1) | ||||
| 
 | ||||
| struct misc_config_s { | ||||
| 
 | ||||
| 	int agwpe_port;		/* TCP Port number for the "AGW TCPIP Socket Interface" */ | ||||
| 
 | ||||
| 	// Previously we allowed only a single TCP port for KISS.
 | ||||
| 	// An increasing number of people want to run multiple radios.
 | ||||
| 	// Unfortunately, most applications don't know how to deal with multi-radio TNCs.
 | ||||
| 	// They ignore the channel on receive and always transmit to channel 0.
 | ||||
| 	// Running multiple instances of direwolf is a work-around but this leads to
 | ||||
| 	// more complex configuration and we lose the cross-channel digipeating capability.
 | ||||
| 	// In release 1.7 we add a new feature to assign a single radio channel to a TCP port.
 | ||||
| 	// e.g.
 | ||||
| 	//	KISSPORT 8001		# default, all channels.  Radio channel = KISS channel.
 | ||||
| 	//
 | ||||
| 	//	KISSPORT 7000 0		# Only radio channel 0 for receive.
 | ||||
| 	//				# Transmit to radio channel 0, ignoring KISS channel.
 | ||||
| 	//
 | ||||
| 	//	KISSPORT 7001 1		# Only radio channel 1 for receive.  KISS channel set to 0.
 | ||||
| 	//				# Transmit to radio channel 1, ignoring KISS channel.
 | ||||
| 
 | ||||
| 	int kiss_port[MAX_KISS_TCP_PORTS];	/* TCP Port number for the "TCP KISS" protocol. */ | ||||
| 	int kiss_chan[MAX_KISS_TCP_PORTS];	/* Radio Channel number for this port or -1 for all.  */ | ||||
| 
 | ||||
| 	int kiss_copy;		/* Data from network KISS client is copied to all others. */ | ||||
| 	int enable_kiss_pt;	/* Enable pseudo terminal for KISS. */ | ||||
| 				/* Want this to be off by default because it hangs */ | ||||
| 				/* after a while if nothing is reading from other end. */ | ||||
| 
 | ||||
| 	char kiss_serial_port[20]; | ||||
| 				/* Serial port name for our end of the */ | ||||
| 				/* virtual null modem for native Windows apps. */ | ||||
| 				/* Version 1.5 add same capability for Linux. */ | ||||
| 
 | ||||
| 	int kiss_serial_speed;	/* Speed, in bps, for the KISS serial port. */ | ||||
| 				/* If 0, just leave what was already there. */ | ||||
| 
 | ||||
| 	int kiss_serial_poll;	/* When using Bluetooth KISS, the /dev/rfcomm0 device */ | ||||
| 				/* will appear and disappear as the remote application */ | ||||
| 				/* opens and closes the virtual COM port. */ | ||||
| 				/* When this is non-zero, we will check periodically to */ | ||||
| 				/* see if the device has appeared and we will open it. */ | ||||
| 
 | ||||
| 	char gpsnmea_port[20];	/* Serial port name for reading NMEA sentences from GPS. */ | ||||
| 				/* e.g. COM22, /dev/ttyACM0 */ | ||||
| 
 | ||||
| 	int gpsnmea_speed;	/* Speed for above, baud, default 4800. */ | ||||
| 
 | ||||
| 	char gpsd_host[20];	/* Host for gpsd server. */ | ||||
| 				/* e.g. localhost, 192.168.1.2 */ | ||||
| 
 | ||||
| 	int gpsd_port;		/* Port number for gpsd server. */ | ||||
| 				/* Default is  2947. */ | ||||
| 
 | ||||
| 				 | ||||
| 	char waypoint_serial_port[20];	/* Serial port name for sending NMEA waypoint sentences */ | ||||
| 				/* to a GPS map display or other mapping application. */ | ||||
| 				/* e.g. COM22, /dev/ttyACM0 */ | ||||
| 				/* Currently no option for setting non-standard speed. */ | ||||
| 				/* This was done in 2014 and no one has complained yet. */ | ||||
| 
 | ||||
| 	char waypoint_udp_hostname[80];	/* Destination host when using UDP. */ | ||||
| 
 | ||||
| 	int waypoint_udp_portnum;	/* UDP port. */ | ||||
| 
 | ||||
| 	int waypoint_formats;	/* Which sentence formats should be generated? */ | ||||
| 
 | ||||
| #define WPL_FORMAT_NMEA_GENERIC 0x01		/* N	$GPWPL */ | ||||
| #define WPL_FORMAT_GARMIN       0x02		/* G	$PGRMW */ | ||||
| #define WPL_FORMAT_MAGELLAN     0x04		/* M	$PMGNWPL */ | ||||
| #define WPL_FORMAT_KENWOOD      0x08		/* K	$PKWDWPL */ | ||||
| #define WPL_FORMAT_AIS          0x10		/* A	!AIVDM */ | ||||
| 
 | ||||
| 
 | ||||
| 	int log_daily_names;	/* True to generate new log file each day. */ | ||||
| 
 | ||||
| 	char log_path[80];	/* Either directory or full file name depending on above. */ | ||||
| 
 | ||||
| 	int dns_sd_enabled;	/* DNS Service Discovery announcement enabled. */ | ||||
| 	char dns_sd_name[64];	/* Name announced on dns-sd; defaults to "Dire Wolf on <hostname>" */ | ||||
| 
 | ||||
| 	int sb_configured;	/* TRUE if SmartBeaconing is configured. */ | ||||
| 	int sb_fast_speed;	/* MPH */ | ||||
| 	int sb_fast_rate;	/* seconds */ | ||||
| 	int sb_slow_speed;	/* MPH */ | ||||
| 	int sb_slow_rate;	/* seconds */ | ||||
| 	int sb_turn_time;	/* seconds */ | ||||
| 	int sb_turn_angle;	/* degrees */ | ||||
| 	int sb_turn_slope;	/* degrees * MPH */ | ||||
| 
 | ||||
| // AX.25 connected mode.
 | ||||
| 
 | ||||
| 	int frack;		/* Number of seconds to wait for ack to transmission. */ | ||||
| 
 | ||||
| 	int retry;		/* Number of times to retry before giving up. */ | ||||
| 
 | ||||
| 	int paclen;		/* Max number of bytes in information part of frame. */ | ||||
| 
 | ||||
| 	int maxframe_basic;	/* Max frames to send before ACK.  mod 8 "Window" size. */ | ||||
| 
 | ||||
| 	int maxframe_extended;	/* Max frames to send before ACK.  mod 128 "Window" size. */ | ||||
| 
 | ||||
| 	int maxv22;		/* Maximum number of unanswered SABME frames sent before */ | ||||
| 				/* switching to SABM.  This is to handle the case of an old */ | ||||
| 				/* TNC which simply ignores SABME rather than replying with FRMR. */ | ||||
| 
 | ||||
| 	char **v20_addrs;	/* Stations known to understand only AX.25 v2.0 so we don't */ | ||||
| 				/* waste time trying v2.2 first. */ | ||||
| 
 | ||||
| 	int v20_count;		/* Number of station addresses in array above. */ | ||||
| 
 | ||||
| 	char **noxid_addrs;	/* Stations known not to understand XID command so don't */ | ||||
| 				/* waste time sending it and eventually giving up. */ | ||||
| 				/* AX.25 for Linux is the one known case, so far, where */ | ||||
| 				/* SABME is implemented but XID is not. */ | ||||
| 
 | ||||
| 	int noxid_count;	/* Number of station addresses in array above. */ | ||||
| 
 | ||||
| 
 | ||||
| // Beacons.
 | ||||
|  			 | ||||
| 	int num_beacons;	/* Number of beacons defined. */ | ||||
| 
 | ||||
| 	struct beacon_s { | ||||
| 
 | ||||
| 	  enum beacon_type_e btype;	/* Position or object. */ | ||||
| 
 | ||||
| 	  int lineno;		/* Line number from config file for later error messages. */ | ||||
| 
 | ||||
| 	  enum sendto_type_e sendto_type; | ||||
| 
 | ||||
| 				/* SENDTO_XMIT	- Usually beacons go to a radio transmitter. */ | ||||
| 				/*		  chan, below is the channel number. */ | ||||
| 				/* SENDTO_IGATE	- Send to IGate, probably to announce my position */ | ||||
| 				/* 		  rather than relying on someone else to hear */ | ||||
| 				/* 		  me on the radio and report me. */ | ||||
| 				/* SENDTO_RECV	- Pretend this was heard on the specified */ | ||||
| 				/* 		  radio channel.  Mostly for testing. It is a */ | ||||
| 				/* 		  convenient way to send packets to attached apps. */ | ||||
| 
 | ||||
| 	  int sendto_chan;	/* Transmit or simulated receive channel for above.  Should be 0 for IGate. */ | ||||
| 
 | ||||
| 	  int delay;		/* Seconds to delay before first transmission. */ | ||||
| 
 | ||||
| 	  int slot;		/* Seconds after hour for slotted time beacons. */ | ||||
| 				/* If specified, it overrides any 'delay' value. */ | ||||
| 
 | ||||
| 	  int every;		/* Time between transmissions, seconds. */ | ||||
| 				/* Remains fixed for PBEACON and OBEACON. */ | ||||
| 				/* Dynamically adjusted for TBEACON. */ | ||||
| 
 | ||||
| 	  time_t next;		/* Unix time to transmit next one. */ | ||||
| 
 | ||||
| 	  char *source;		/* NULL or explicit AX.25 source address to use */ | ||||
| 				/* instead of the mycall value for the channel. */ | ||||
| 
 | ||||
| 	  char *dest;		/* NULL or explicit AX.25 destination to use */ | ||||
| 				/* instead of the software version such as APDW11. */ | ||||
| 
 | ||||
| 	  int compress;		/* Use more compact form? */ | ||||
| 
 | ||||
| 	  char objname[10];	/* Object name.  Any printable characters. */ | ||||
| 
 | ||||
| 	  char *via;		/* Path, e.g. "WIDE1-1,WIDE2-1" or NULL. */ | ||||
| 
 | ||||
| 	  char *custom_info;	/* Info part for handcrafted custom beacon. */ | ||||
| 				/* Ignore the rest below if this is set. */ | ||||
| 
 | ||||
| 	  char *custom_infocmd;	/* Command to generate info part. */ | ||||
| 				/* Again, other options below are then ignored. */ | ||||
| 
 | ||||
| 	  int messaging;	/* Set messaging attribute for position report. */ | ||||
| 				/* i.e. Data Type Indicator of '=' rather than '!' */ | ||||
| 
 | ||||
| 	  double lat;		/* Latitude and longitude. */ | ||||
| 	  double lon; | ||||
| 	  int ambiguity;	/* Number of lower digits to trim from location. 0 (default), 1, 2, 3, 4. */ | ||||
| 	  float alt_m;		/* Altitude in meters. */ | ||||
| 
 | ||||
| 	  char symtab;		/* Symbol table: / or \ or overlay character. */ | ||||
| 	  char symbol;		/* Symbol code. */ | ||||
| 
 | ||||
| 	  float power;		/* For PHG. */ | ||||
| 	  float height;		/* HAAT in feet */ | ||||
| 	  float gain;		/* Original protocol spec was unclear. */ | ||||
| 				/* Addendum 1.1 clarifies it is dBi not dBd. */ | ||||
| 
 | ||||
| 	  char dir[3];		/* 1 or 2 of N,E,W,S, or empty for omni. */ | ||||
| 
 | ||||
| 	  float freq;		/* MHz. */ | ||||
| 	  float tone;		/* Hz. */ | ||||
| 	  float offset;		/* MHz. */ | ||||
| 	 | ||||
| 	  char *comment;	/* Comment or NULL. */ | ||||
| 	  char *commentcmd;	/* Command to append more to Comment or NULL. */ | ||||
| 
 | ||||
| 
 | ||||
| 	} beacon[MAX_BEACONS]; | ||||
| 
 | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| #define MIN_IP_PORT_NUMBER 1024 | ||||
| #define MAX_IP_PORT_NUMBER 49151 | ||||
| 
 | ||||
| 
 | ||||
| #define DEFAULT_AGWPE_PORT 8000		/* Like everyone else. */ | ||||
| #define DEFAULT_KISS_PORT 8001		/* Above plus 1. */ | ||||
| 
 | ||||
| 
 | ||||
| #define DEFAULT_NULLMODEM "COM3"  	/* should be equiv. to /dev/ttyS2 on Cygwin */ | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| extern void config_init (char *fname, struct audio_s *p_modem,  | ||||
| 			struct digi_config_s *digi_config, | ||||
| 			struct cdigi_config_s *cdigi_config, | ||||
| 			struct tt_config_s *p_tt_config, | ||||
| 			struct igate_config_s *p_igate_config, | ||||
| 			struct misc_config_s *misc_config); | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| #endif /* CONFIG_H */ | ||||
| 
 | ||||
| /* end config.h */ | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										6
									
								
								debian/changelog
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								debian/changelog
									
									
									
									
										vendored
									
									
								
							|  | @ -1,3 +1,9 @@ | |||
| qtsoundmodem (0.0.0.71-1) unstable; urgency=medium | ||||
| 
 | ||||
|   * New Upstream Release | ||||
| 
 | ||||
|  -- Dave Hibberd <d@vehibberd.com>  Sun, 17 Dec 2023 14:07:52 +0000 | ||||
| 
 | ||||
| qtsoundmodem (0.0.0.68-1~bpo11+1) bullseye; urgency=medium | ||||
| 
 | ||||
|   * Rebuild for bullseye. | ||||
|  |  | |||
							
								
								
									
										1
									
								
								debian/dirs
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								debian/dirs
									
									
									
									
										vendored
									
									
								
							|  | @ -1 +0,0 @@ | |||
| opt/oarc/QtSoundModem | ||||
|  | @ -1,201 +0,0 @@ | |||
| [General] | ||||
| geometry="@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0z\0\0\0\t\0\0\x4=\0\0\x2\xf9\0\0\0{\0\0\0(\0\0\x4<\0\0\x2\xf8\0\0\0\0\0\0\0\0\x5\0\0\0\0{\0\0\0(\0\0\x4<\0\0\x2\xf8)" | ||||
| windowState=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\0\0\0\x3\xc2\0\0\x2\xb9\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\0) | ||||
| PSKWindow=@Rect(46 499 366 140) | ||||
| FontFamily=Courier New | ||||
| PointSize=12 | ||||
| Weight=50 | ||||
| 
 | ||||
| [AX25_A] | ||||
| Retries=15 | ||||
| HiToneRaise=0 | ||||
| Maxframe=3 | ||||
| FrackTime=5 | ||||
| IdleTime=180 | ||||
| SlotTime=100 | ||||
| Persist=128 | ||||
| RespTime=1500 | ||||
| TXFrmMode=1 | ||||
| FrameCollector=6 | ||||
| ExcludeCallsigns= | ||||
| ExcludeAPRSFrmType= | ||||
| KISSOptimization=0 | ||||
| DynamicFrack=0 | ||||
| BitRecovery=0 | ||||
| NonAX25Frm=0 | ||||
| MEMRecovery=200 | ||||
| IPOLL=80 | ||||
| MyDigiCall= | ||||
| FX25=1 | ||||
| IL2P=2 | ||||
| RSID_UI=0 | ||||
| RSID_SABM=0 | ||||
| RSID_SetModem=0 | ||||
| 
 | ||||
| [Init] | ||||
| SoundMode=0 | ||||
| UDPClientPort=8888 | ||||
| UDPServerPort=8884 | ||||
| TXPort=8884 | ||||
| UDPServer=0 | ||||
| UDPHost=192.168.1.255 | ||||
| TXSampleRate=12000 | ||||
| RXSampleRate=12000 | ||||
| SndRXDeviceName="CABLE-B OUTPUT (VB-AUDIO CABLE " | ||||
| SndTXDeviceName=CABLE-B INPUT (VB-AUDIO CABLE B | ||||
| SCO=0 | ||||
| DualPTT=1 | ||||
| TXRotate=0 | ||||
| DispMode=1 | ||||
| PTT= | ||||
| PTTBAUD=19200 | ||||
| PTTMode=1 | ||||
| PTTOffString= | ||||
| PTTOnString= | ||||
| pttGPIOPin=17 | ||||
| pttGPIOPinR=17 | ||||
| CM108Addr=0xD8C:0x08 | ||||
| HamLibPort=4532 | ||||
| HamLibHost=127.0.0.1 | ||||
| MinimizetoTray=1 | ||||
| multiCore=1 | ||||
| Wisdom=(fftw-3.3.5 fftwf_wisdom #x9e7d4dee #xdb14fed1 #x34bf76a4 #xeb6e8fdf\n  (fftwf_codelet_n2fv_12_avx 0 #x10048 #x10048 #x0 #xb0767e46 #x8d41dd22 #x439264a0 #x18435a99)\n  (fftwf_rdft_rank0_register 0 #x11048 #x11048 #x0 #xff75c762 #x3a0ee093 #x5b78d592 #x6b6be60e)\n  (fftwf_codelet_t2fv_2_avx 0 #x11048 #x11048 #x0 #x34057a74 #x664db78f #xa9524ebc #x606afd88)\n  (fftwf_dft_nop_register 0 #x11048 #x11048 #x0 #x4a593e24 #xb5f06ddf #xf11fe7f2 #xc010b545)\n  (fftwf_dft_bluestein_register 0 #x11048 #x11048 #x0 #x5e17c068 #x1682c5d6 #x89dd79be #x9b951c0f)\n  (fftwf_dft_vrank_geq1_register 0 #x10048 #x10048 #x0 #x2fce15e1 #x178d4f4d #x1e956a41 #xf3fd6b80)\n  (fftwf_codelet_t1fuv_4_sse2 0 #x11048 #x11048 #x0 #x2fb84bc5 #x2792028e #x8ec66ed5 #x47b5f7dc)\n  (fftwf_dft_buffered_register 0 #x11048 #x11048 #x0 #x4f8e87b4 #xec4f2fa0 #x79fe76a1 #xa16e32a5)\n  (fftwf_dft_vrank_geq1_register 0 #x11048 #x11048 #x0 #x8a9c355b #xb6dbadad #xbac1daac #xa866ceb3)\n  (fftwf_dft_r2hc_register 0 #x11048 #x11048 #x0 #x576d5db6 #xa6a15f8a #x875d87d5 #x7561a866)\n  (fftwf_codelet_t1fv_6_avx 0 #x10048 #x10048 #x0 #xd9db29d8 #x3302fcf3 #x19ce6e5d #x869fc341)\n  (fftwf_dft_vrank_geq1_register 0 #x11048 #x11048 #x0 #xf7abab03 #x5f0e79b1 #x1b8367ad #xe5028f2c)\n  (fftwf_codelet_t1fv_12_avx 0 #x10048 #x10048 #x0 #x0b0d3933 #x08267d12 #x45613873 #xde496efe)\n)\n | ||||
| WaterfallMin=0 | ||||
| WaterfallMax=3300 | ||||
| 
 | ||||
| [AX25_B] | ||||
| Retries=15 | ||||
| HiToneRaise=0 | ||||
| Maxframe=3 | ||||
| FrackTime=5 | ||||
| IdleTime=180 | ||||
| SlotTime=100 | ||||
| Persist=128 | ||||
| RespTime=1500 | ||||
| TXFrmMode=1 | ||||
| FrameCollector=6 | ||||
| ExcludeCallsigns= | ||||
| ExcludeAPRSFrmType= | ||||
| KISSOptimization=0 | ||||
| DynamicFrack=0 | ||||
| BitRecovery=0 | ||||
| NonAX25Frm=0 | ||||
| MEMRecovery=200 | ||||
| IPOLL=80 | ||||
| MyDigiCall= | ||||
| FX25=1 | ||||
| IL2P=2 | ||||
| RSID_UI=0 | ||||
| RSID_SABM=0 | ||||
| RSID_SetModem=0 | ||||
| 
 | ||||
| [Modem] | ||||
| NRRcvrPairs1=2 | ||||
| NRRcvrPairs2=2 | ||||
| NRRcvrPairs3=0 | ||||
| NRRcvrPairs4=2 | ||||
| RcvrShift1=50 | ||||
| RcvrShift2=30 | ||||
| RcvrShift3=30 | ||||
| RcvrShift4=30 | ||||
| ModemType1=4 | ||||
| ModemType2=14 | ||||
| ModemType3=0 | ||||
| ModemType4=14 | ||||
| soundChannel1=1 | ||||
| soundChannel2=1 | ||||
| soundChannel3=0 | ||||
| soundChannel4=0 | ||||
| DCDThreshold=40 | ||||
| rxOffset=-100 | ||||
| PreEmphasisAll1=0 | ||||
| PreEmphasisAll2=0 | ||||
| PreEmphasisAll3=0 | ||||
| PreEmphasisAll4=0 | ||||
| PreEmphasisDB1=0 | ||||
| PreEmphasisDB2=0 | ||||
| PreEmphasisDB3=0 | ||||
| PreEmphasisDB4=0 | ||||
| TxDelay1=250 | ||||
| TxDelay2=250 | ||||
| TxDelay3=250 | ||||
| TxDelay4=250 | ||||
| TxTail1=50 | ||||
| TxTail2=50 | ||||
| TxTail3=50 | ||||
| TxTail4=50 | ||||
| CWIDCall= | ||||
| CWIDInterval=0 | ||||
| CWIDLeft=0 | ||||
| CWIDRight=0 | ||||
| CWIDType=1 | ||||
| RXFreq1=1700 | ||||
| RXFreq2=1700 | ||||
| RXFreq3=500 | ||||
| RXFreq4=1700 | ||||
| CWIDMark= | ||||
| afterTraffic=false | ||||
| 
 | ||||
| [AGWHost] | ||||
| Server=1 | ||||
| Port=8000 | ||||
| 
 | ||||
| [KISS] | ||||
| Server=0 | ||||
| Port=8105 | ||||
| 
 | ||||
| [AX25_C] | ||||
| Retries=15 | ||||
| HiToneRaise=0 | ||||
| Maxframe=3 | ||||
| FrackTime=5 | ||||
| IdleTime=180 | ||||
| SlotTime=100 | ||||
| Persist=128 | ||||
| RespTime=1500 | ||||
| TXFrmMode=1 | ||||
| FrameCollector=6 | ||||
| ExcludeCallsigns= | ||||
| ExcludeAPRSFrmType= | ||||
| KISSOptimization=0 | ||||
| DynamicFrack=0 | ||||
| BitRecovery=0 | ||||
| NonAX25Frm=0 | ||||
| MEMRecovery=200 | ||||
| IPOLL=80 | ||||
| MyDigiCall= | ||||
| FX25=1 | ||||
| IL2P=0 | ||||
| RSID_UI=0 | ||||
| RSID_SABM=0 | ||||
| RSID_SetModem=0 | ||||
| 
 | ||||
| [Window] | ||||
| Waterfall1=1 | ||||
| Waterfall2=1 | ||||
| 
 | ||||
| [AX25_D] | ||||
| Retries=15 | ||||
| HiToneRaise=0 | ||||
| Maxframe=3 | ||||
| FrackTime=5 | ||||
| IdleTime=180 | ||||
| SlotTime=100 | ||||
| Persist=128 | ||||
| RespTime=1500 | ||||
| TXFrmMode=1 | ||||
| FrameCollector=6 | ||||
| ExcludeCallsigns= | ||||
| ExcludeAPRSFrmType= | ||||
| KISSOptimization=0 | ||||
| DynamicFrack=0 | ||||
| BitRecovery=0 | ||||
| NonAX25Frm=0 | ||||
| MEMRecovery=200 | ||||
| IPOLL=80 | ||||
| MyDigiCall= | ||||
| FX25=1 | ||||
| IL2P=0 | ||||
| RSID_UI=0 | ||||
| RSID_SABM=0 | ||||
| RSID_SetModem=0 | ||||
|  | @ -1,12 +0,0 @@ | |||
| #define _MSC_EXTENSIONS  | ||||
| #define _INTEGRAL_MAX_BITS 64 | ||||
| #define _MSC_VER 1916 | ||||
| #define _MSC_FULL_VER 191627050 | ||||
| #define _MSC_BUILD 0 | ||||
| #define _WIN32  | ||||
| #define _M_IX86 600 | ||||
| #define _M_IX86_FP 2 | ||||
| #define _CPPRTTI  | ||||
| #define _DEBUG  | ||||
| #define _MT  | ||||
| #define _DLL  | ||||
|  | @ -1,7 +1,7 @@ | |||
| #define _MSC_EXTENSIONS  | ||||
| #define _INTEGRAL_MAX_BITS 64 | ||||
| #define _MSC_VER 1916 | ||||
| #define _MSC_FULL_VER 191627043 | ||||
| #define _MSC_FULL_VER 191627045 | ||||
| #define _MSC_BUILD 0 | ||||
| #define _WIN32  | ||||
| #define _M_IX86 600 | ||||
|  |  | |||
							
								
								
									
										150
									
								
								decode_aprs.h
									
									
									
									
									
								
							
							
						
						
									
										150
									
								
								decode_aprs.h
									
									
									
									
									
								
							|  | @ -1,150 +0,0 @@ | |||
| 
 | ||||
| /* decode_aprs.h */ | ||||
| 
 | ||||
| 
 | ||||
| #ifndef DECODE_APRS_H | ||||
| 
 | ||||
| #define DECODE_APRS_H 1 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| #ifndef G_UNKNOWN | ||||
| #include "latlong.h" | ||||
| #endif | ||||
| 
 | ||||
| #ifndef AX25_MAX_ADDR_LEN | ||||
| #include "ax25_pad.h" | ||||
| #endif  | ||||
| 
 | ||||
| #ifndef APRSTT_LOC_DESC_LEN | ||||
| #include "aprs_tt.h" | ||||
| #endif | ||||
| 
 | ||||
| typedef struct decode_aprs_s { | ||||
| 
 | ||||
| 	int g_quiet;			/* Suppress error messages when decoding. */ | ||||
| 
 | ||||
|         char g_src[AX25_MAX_ADDR_LEN]; | ||||
| 
 | ||||
|         char g_dest[AX25_MAX_ADDR_LEN]; | ||||
| 
 | ||||
|         char g_data_type_desc[100];	/* APRS data type description.  Telemetry descriptions get pretty long. */ | ||||
| 
 | ||||
|         char g_symbol_table;		/* The Symbol Table Identifier character selects one */ | ||||
| 					/* of the two Symbol Tables, or it may be used as */ | ||||
| 					/* single-character (alpha or numeric) overlay, as follows: */ | ||||
| 					 | ||||
| 					/*	/ 	Primary Symbol Table (mostly stations) */ | ||||
| 
 | ||||
| 					/* 	\ 	Alternate Symbol Table (mostly Objects) */ | ||||
| 
 | ||||
| 					/*	0-9 	Numeric overlay. Symbol from Alternate Symbol */ | ||||
| 					/*		Table (uncompressed lat/long data format) */ | ||||
| 
 | ||||
| 					/*	a-j	Numeric overlay. Symbol from Alternate */ | ||||
| 					/*		Symbol Table (compressed lat/long data */ | ||||
| 					/*		format only). i.e. a-j maps to 0-9 */ | ||||
| 
 | ||||
| 					/*	A-Z	Alpha overlay. Symbol from Alternate Symbol Table */ | ||||
| 
 | ||||
| 
 | ||||
|         char g_symbol_code;		/* Where the Symbol Table Identifier is 0-9 or A-Z (or a-j */ | ||||
| 					/* with compressed position data only), the symbol comes from */ | ||||
| 					/* the Alternate Symbol Table, and is overlaid with the */ | ||||
| 					/* identifier (as a single digit or a capital letter). */ | ||||
| 
 | ||||
| 	char g_aprstt_loc[APRSTT_LOC_DESC_LEN];		/* APRStt location from !DAO! */ | ||||
| 
 | ||||
|         double g_lat, g_lon;		/* Location, degrees.  Negative for South or West. */ | ||||
| 					/* Set to G_UNKNOWN if missing or error. */ | ||||
| 
 | ||||
|         char g_maidenhead[12];		/* 4 or 6 (or 8?) character maidenhead locator. */ | ||||
| 
 | ||||
|         char g_name[12];		/* Object or item name. Max. 9 characters. */ | ||||
| 
 | ||||
| 	char g_addressee[12];		/* Addressee for a "message."  Max. 9 characters. */ | ||||
| 					/* Also for Directed Station Query which is a */ | ||||
| 					/* special case of message. */ | ||||
| 
 | ||||
| 	enum message_subtype_e { message_subtype_invalid = 0, | ||||
| 				message_subtype_message, | ||||
| 				message_subtype_ack, | ||||
| 				message_subtype_rej, | ||||
| 				message_subtype_telem_parm, | ||||
| 				message_subtype_telem_unit, | ||||
| 				message_subtype_telem_eqns, | ||||
| 				message_subtype_telem_bits, | ||||
| 				message_subtype_directed_query | ||||
| 		} g_message_subtype;	/* Various cases of the overloaded "message." */ | ||||
| 
 | ||||
| 	char g_message_number[12];	/* Message number.  Should be 1 - 5 alphanumeric characters if used. */ | ||||
| 					/* Addendum 1.1 has new format {mm} or {mm}aa with only two */ | ||||
| 					/* characters for message number and an ack riding piggyback. */ | ||||
| 
 | ||||
|         float g_speed_mph;		/* Speed in MPH.  */ | ||||
| 					/* The APRS transmission uses knots so watch out for */ | ||||
| 					/* conversions when sending and receiving APRS packets. */ | ||||
| 
 | ||||
|         float g_course;			/* 0 = North, 90 = East, etc. */ | ||||
| 	 | ||||
|         int g_power;			/* Transmitter power in watts. */ | ||||
| 
 | ||||
|         int g_height;			/* Antenna height above average terrain, feet. */ | ||||
| 
 | ||||
|         int g_gain;			/* Antenna gain in dB. */ | ||||
| 
 | ||||
|         char g_directivity[12];		/* Direction of max signal strength */ | ||||
| 
 | ||||
|         float g_range;			/* Precomputed radio range in miles. */ | ||||
| 
 | ||||
|         float g_altitude_ft;		/* Feet above median sea level.  */ | ||||
| 					/* I used feet here because the APRS specification */ | ||||
| 					/* has units of feet for alititude.  Meters would be */ | ||||
| 					/* more natural to the other 96% of the world. */ | ||||
| 
 | ||||
|         char g_mfr[80];			/* Manufacturer or application. */ | ||||
| 
 | ||||
|         char g_mic_e_status[32];	/* MIC-E message. */ | ||||
| 
 | ||||
|         double g_freq;			/* Frequency, MHz */ | ||||
| 
 | ||||
|         float g_tone;			/* CTCSS tone, Hz, one fractional digit */ | ||||
| 
 | ||||
|         int g_dcs;			/* Digital coded squelch, print as 3 octal digits. */ | ||||
| 
 | ||||
|         int g_offset;			/* Transmit offset, kHz */ | ||||
| 
 | ||||
| 
 | ||||
| 	char g_query_type[12];		/* General Query: APRS, IGATE, WX, ... */ | ||||
| 					/* Addressee is NOT set. */ | ||||
| 
 | ||||
| 					/* Directed Station Query: exactly 5 characters. */ | ||||
| 					/* APRSD, APRST, PING?, ... */ | ||||
| 					/* Addressee is set. */ | ||||
| 	 | ||||
| 	double g_footprint_lat;		/* A general query may contain a foot print. */ | ||||
| 	double g_footprint_lon;		/* Set all to G_UNKNOWN if not used. */ | ||||
| 	float g_footprint_radius;	/* Radius in miles. */ | ||||
| 
 | ||||
| 	char g_query_callsign[12];	/* Directed query may contain callsign.  */ | ||||
| 					/* e.g. tell me all objects from that callsign. */ | ||||
| 
 | ||||
| 
 | ||||
|         char g_weather[500];		/* Weather.  Can get quite long. Rethink max size. */ | ||||
| 
 | ||||
|         char g_telemetry[256];		/* Telemetry data.  Rethink max size. */ | ||||
| 
 | ||||
|         char g_comment[256];		/* Comment. */ | ||||
| 
 | ||||
| } decode_aprs_t; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| extern void decode_aprs (decode_aprs_t *A, packet_t pp, int quiet, char *third_party_src); | ||||
| 
 | ||||
| extern void decode_aprs_print (decode_aprs_t *A); | ||||
| 
 | ||||
| 
 | ||||
| #endif | ||||
							
								
								
									
										10
									
								
								dedupe.h
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								dedupe.h
									
									
									
									
									
								
							|  | @ -1,10 +0,0 @@ | |||
| 
 | ||||
| 
 | ||||
| void dedupe_init (int ttl); | ||||
| 
 | ||||
| void dedupe_remember (packet_t pp, int chan); | ||||
| 
 | ||||
| int dedupe_check (packet_t pp, int chan); | ||||
| 
 | ||||
| 
 | ||||
| /* end dedupe.h */ | ||||
							
								
								
									
										17
									
								
								demod.h
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								demod.h
									
									
									
									
									
								
							|  | @ -1,17 +0,0 @@ | |||
| 
 | ||||
| 
 | ||||
| /* demod.h */ | ||||
| 
 | ||||
| #include "audio.h" 	/* for struct audio_s */ | ||||
| #include "ax25_pad.h"	/* for alevel_t */ | ||||
| 
 | ||||
| 
 | ||||
| int demod_init (struct audio_s *pa); | ||||
| 
 | ||||
| int demod_get_sample (int a); | ||||
| 
 | ||||
| void demod_process_sample (int chan, int subchan, int sam); | ||||
| 
 | ||||
| void demod_print_agc (int chan, int subchan); | ||||
| 
 | ||||
| alevel_t demod_get_audio_level (int chan, int subchan); | ||||
|  | @ -1,8 +0,0 @@ | |||
| 
 | ||||
| /* demod_afsk.h */ | ||||
| 
 | ||||
| 
 | ||||
| void demod_afsk_init (int samples_per_sec, int baud, int mark_freq, | ||||
| 			int space_freq, char profile, struct demodulator_state_s *D); | ||||
| 
 | ||||
| void demod_afsk_process_sample (int chan, int subchan, int sam, struct demodulator_state_s *D); | ||||
|  | @ -1,7 +0,0 @@ | |||
| 
 | ||||
| /* demod_psk.h */ | ||||
| 
 | ||||
| 
 | ||||
| void demod_psk_init (enum modem_t modem_type, enum v26_e v26_alt, int samples_per_sec, int bps, char profile, struct demodulator_state_s *D); | ||||
| 
 | ||||
| void demod_psk_process_sample (int chan, int subchan, int sam, struct demodulator_state_s *D); | ||||
|  | @ -151,7 +151,7 @@ | |||
|        <rect> | ||||
|         <x>20</x> | ||||
|         <y>304</y> | ||||
|         <width>251</width> | ||||
|         <width>231</width> | ||||
|         <height>17</height> | ||||
|        </rect> | ||||
|       </property> | ||||
|  | @ -582,6 +582,19 @@ | |||
|        <string>to</string> | ||||
|       </property> | ||||
|      </widget> | ||||
|      <widget class="QCheckBox" name="darkTheme"> | ||||
|       <property name="geometry"> | ||||
|        <rect> | ||||
|         <x>260</x> | ||||
|         <y>304</y> | ||||
|         <width>161</width> | ||||
|         <height>17</height> | ||||
|        </rect> | ||||
|       </property> | ||||
|       <property name="text"> | ||||
|        <string>Dark Theme</string> | ||||
|       </property> | ||||
|      </widget> | ||||
|     </widget> | ||||
|     <widget class="QGroupBox" name="groupBox_2"> | ||||
|      <property name="geometry"> | ||||
|  |  | |||
							
								
								
									
										78
									
								
								digipeater.h
									
									
									
									
									
								
							
							
						
						
									
										78
									
								
								digipeater.h
									
									
									
									
									
								
							|  | @ -1,78 +0,0 @@ | |||
| 
 | ||||
| #ifndef DIGIPEATER_H | ||||
| #define DIGIPEATER_H 1 | ||||
| 
 | ||||
| #include "regex.h" | ||||
| 
 | ||||
| #include "direwolf.h"		/* for MAX_CHANS */ | ||||
| #include "ax25_pad.h"		/* for packet_t */ | ||||
| #include "audio.h"		/* for radio channel properties */ | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * Information required for digipeating. | ||||
|  * | ||||
|  * The configuration file reader fills in this information | ||||
|  * and it is passed to digipeater_init at application start up time. | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| struct digi_config_s { | ||||
| 
 | ||||
| 
 | ||||
| 	int	dedupe_time;	/* Don't digipeat duplicate packets */ | ||||
| 				/* within this number of seconds. */ | ||||
| 
 | ||||
| #define DEFAULT_DEDUPE 30 | ||||
| 
 | ||||
| /*
 | ||||
|  * Rules for each of the [from_chan][to_chan] combinations. | ||||
|  */ | ||||
| 
 | ||||
| 	regex_t	alias[MAX_CHANS][MAX_CHANS]; | ||||
| 
 | ||||
| 	regex_t	wide[MAX_CHANS][MAX_CHANS]; | ||||
| 
 | ||||
| 	int	enabled[MAX_CHANS][MAX_CHANS]; | ||||
| 
 | ||||
| 	enum preempt_e { PREEMPT_OFF, PREEMPT_DROP, PREEMPT_MARK, PREEMPT_TRACE } preempt[MAX_CHANS][MAX_CHANS]; | ||||
| 
 | ||||
| 	// ATGP is an ugly hack for the specific need of ATGP which needs more that 8 digipeaters.
 | ||||
| 	// DO NOT put this in the User Guide.  On a need to know basis.
 | ||||
| 
 | ||||
| 	char atgp[MAX_CHANS][MAX_CHANS][AX25_MAX_ADDR_LEN]; | ||||
| 
 | ||||
| 	char *filter_str[MAX_CHANS+1][MAX_CHANS+1]; | ||||
| 						// NULL or optional Packet Filter strings such as "t/m".
 | ||||
| 						// Notice the size of arrays is one larger than normal.
 | ||||
| 						// That extra position is for the IGate.
 | ||||
| 
 | ||||
| 	int regen[MAX_CHANS][MAX_CHANS];	// Regenerate packet.  
 | ||||
| 						// Sort of like digipeating but passed along unchanged.
 | ||||
| }; | ||||
| 
 | ||||
| /*
 | ||||
|  * Call once at application start up time. | ||||
|  */ | ||||
| 
 | ||||
| extern void digipeater_init (struct audio_s *p_audio_config, struct digi_config_s *p_digi_config); | ||||
| 
 | ||||
| /*
 | ||||
|  * Call this for each packet received. | ||||
|  * Suitable packets will be queued for transmission. | ||||
|  */ | ||||
| 
 | ||||
| extern void digipeater (int from_chan, packet_t pp); | ||||
| 
 | ||||
| void digi_regen (int from_chan, packet_t pp); | ||||
| 
 | ||||
| 
 | ||||
| /* Make statistics available. */ | ||||
| 
 | ||||
| int digipeater_get_count (int from_chan, int to_chan); | ||||
| 
 | ||||
| 
 | ||||
| #endif  | ||||
| 
 | ||||
| /* end digipeater.h */ | ||||
| 
 | ||||
							
								
								
									
										148
									
								
								dlq.h
									
									
									
									
									
								
							
							
						
						
									
										148
									
								
								dlq.h
									
									
									
									
									
								
							|  | @ -1,148 +0,0 @@ | |||
| 
 | ||||
| /*------------------------------------------------------------------
 | ||||
|  * | ||||
|  * Module:      dlq.h | ||||
|  * | ||||
|  *---------------------------------------------------------------*/ | ||||
| 
 | ||||
| #ifndef DLQ_H | ||||
| #define DLQ_H 1 | ||||
| 
 | ||||
| #include "ax25_pad.h" | ||||
| #include "audio.h" | ||||
| 
 | ||||
| 
 | ||||
| /* A transmit or receive data block for connected mode. */ | ||||
| 
 | ||||
| typedef struct cdata_s { | ||||
| 	int magic;			/* For integrity checking. */ | ||||
| 
 | ||||
| #define TXDATA_MAGIC 0x09110911 | ||||
| 
 | ||||
| 	struct cdata_s *next;		/* Pointer to next when part of a list. */ | ||||
| 
 | ||||
| 	int pid;			/* Protocol id. */ | ||||
| 
 | ||||
| 	int size;			/* Number of bytes allocated. */ | ||||
| 
 | ||||
| 	int len;			/* Number of bytes actually used. */ | ||||
| 
 | ||||
| 	char data[];			/* Variable length data. */ | ||||
| 
 | ||||
| } cdata_t; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| /* Types of things that can be in queue. */ | ||||
| 
 | ||||
| typedef enum dlq_type_e {DLQ_REC_FRAME, DLQ_CONNECT_REQUEST, DLQ_DISCONNECT_REQUEST, DLQ_XMIT_DATA_REQUEST, DLQ_REGISTER_CALLSIGN, DLQ_UNREGISTER_CALLSIGN, DLQ_OUTSTANDING_FRAMES_REQUEST, DLQ_CHANNEL_BUSY, DLQ_SEIZE_CONFIRM, DLQ_CLIENT_CLEANUP} dlq_type_t; | ||||
| 
 | ||||
| 
 | ||||
| /* A queue item. */ | ||||
| 
 | ||||
| // TODO: call this event rather than item.
 | ||||
| // TODO: should add fences.
 | ||||
| 
 | ||||
| typedef struct dlq_item_s { | ||||
| 
 | ||||
| 	struct dlq_item_s *nextp;	/* Next item in queue. */ | ||||
| 
 | ||||
| 	dlq_type_t type;		/* Type of item. */ | ||||
| 					/* See enum definition above. */ | ||||
| 
 | ||||
| 	int chan;			/* Radio channel of origin. */ | ||||
| 
 | ||||
| // I'm not worried about amount of memory used but this might be a
 | ||||
| // little clearer if a union was used for the different event types.
 | ||||
| 
 | ||||
| // Used for received frame.
 | ||||
| 
 | ||||
| 	int subchan;			/* Winning "subchannel" when using multiple */ | ||||
| 					/* decoders on one channel.  */ | ||||
| 					/* Special case, -1 means DTMF decoder. */ | ||||
| 					/* Maybe we should have a different type in this case? */ | ||||
| 
 | ||||
| 	int slice;			/* Winning slicer. */ | ||||
| 
 | ||||
| 	packet_t pp;			/* Pointer to frame structure. */ | ||||
| 
 | ||||
| 	alevel_t alevel;		/* Audio level. */ | ||||
| 
 | ||||
| 	int is_fx25;			/* Was it from FX.25? */ | ||||
| 
 | ||||
| 	retry_t retries;		/* Effort expended to get a valid CRC. */ | ||||
| 					/* Bits changed for regular AX.25. */ | ||||
| 					/* Number of bytes fixed for FX.25. */ | ||||
| 
 | ||||
| 	char spectrum[MAX_SUBCHANS*MAX_SLICERS+1];	/* "Spectrum" display for multi-decoders. */ | ||||
| 
 | ||||
| // Used by requests from a client application, connect, etc.
 | ||||
| 
 | ||||
| 	char addrs[AX25_MAX_ADDRS][AX25_MAX_ADDR_LEN]; | ||||
| 
 | ||||
| 	int num_addr;			/* Range 2 .. 10. */ | ||||
| 
 | ||||
| 	int client; | ||||
| 
 | ||||
| 
 | ||||
| // Used only by client request to transmit connected data.
 | ||||
| 
 | ||||
| 	cdata_t *txdata; | ||||
| 
 | ||||
| // Used for channel activity change.
 | ||||
| // It is useful to know when the channel is busy either for carrier detect
 | ||||
| // or when we are transmitting.
 | ||||
| 
 | ||||
| 	int activity;			/* OCTYPE_PTT for my transmission start/end. */ | ||||
| 					/* OCTYPE_DCD if we hear someone else. */ | ||||
| 
 | ||||
| 	int status;			/* 1 for active or 0 for quiet. */ | ||||
| 
 | ||||
| } dlq_item_t; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| void dlq_init (void); | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| void dlq_rec_frame (int chan, int subchan, int slice, packet_t pp, alevel_t alevel, int is_fx25, retry_t retries, char *spectrum); | ||||
| 
 | ||||
| void dlq_connect_request (char addrs[AX25_MAX_ADDRS][AX25_MAX_ADDR_LEN], int num_addr, int chan, int client, int pid); | ||||
| 
 | ||||
| void dlq_disconnect_request (char addrs[AX25_MAX_ADDRS][AX25_MAX_ADDR_LEN], int num_addr, int chan, int client); | ||||
| 
 | ||||
| void dlq_outstanding_frames_request (char addrs[AX25_MAX_ADDRS][AX25_MAX_ADDR_LEN], int num_addr, int chan, int client); | ||||
| 
 | ||||
| void dlq_xmit_data_request (char addrs[AX25_MAX_ADDRS][AX25_MAX_ADDR_LEN], int num_addr, int chan, int client, int pid, char *xdata_ptr, int xdata_len); | ||||
| 
 | ||||
| void dlq_register_callsign (char addr[AX25_MAX_ADDR_LEN], int chan, int client); | ||||
| 
 | ||||
| void dlq_unregister_callsign (char addr[AX25_MAX_ADDR_LEN], int chan, int client); | ||||
| 
 | ||||
| void dlq_channel_busy (int chan, int activity, int status); | ||||
| 
 | ||||
| void dlq_seize_confirm (int chan); | ||||
| 
 | ||||
| void dlq_client_cleanup (int client); | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| int dlq_wait_while_empty (double timeout_val); | ||||
| 
 | ||||
| struct dlq_item_s *dlq_remove (void); | ||||
| 
 | ||||
| void dlq_delete (struct dlq_item_s *pitem); | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| cdata_t *cdata_new (int pid, char *data, int len); | ||||
| 
 | ||||
| void cdata_delete (cdata_t *txdata); | ||||
| 
 | ||||
| void cdata_check_leak (void); | ||||
| 
 | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| /* end dlq.h */ | ||||
|  | @ -1,7 +0,0 @@ | |||
| 
 | ||||
| #if (USE_AVAHI_CLIENT|USE_MACOS_DNSSD) | ||||
| 
 | ||||
| char *dns_sd_default_service_name(void); | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
							
								
								
									
										10
									
								
								dns_sd_dw.h
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								dns_sd_dw.h
									
									
									
									
									
								
							|  | @ -1,10 +0,0 @@ | |||
| 
 | ||||
| #if (USE_AVAHI_CLIENT|USE_MACOS_DNSSD) | ||||
| 
 | ||||
| #include "config.h" | ||||
| 
 | ||||
| #define DNS_SD_SERVICE "_kiss-tnc._tcp" | ||||
| 
 | ||||
| void dns_sd_announce (struct misc_config_s *mc); | ||||
| 
 | ||||
| #endif // USE_AVAHI_CLIENT
 | ||||
							
								
								
									
										18
									
								
								dtime_now.h
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								dtime_now.h
									
									
									
									
									
								
							|  | @ -1,18 +0,0 @@ | |||
| 
 | ||||
| 
 | ||||
| extern double dtime_realtime (void); | ||||
| 
 | ||||
| extern double dtime_monotonic (void); | ||||
| 
 | ||||
| 
 | ||||
| void timestamp_now (char *result, int result_size, int show_ms); | ||||
| 
 | ||||
| void timestamp_user_format (char *result, int result_size, char *user_format); | ||||
| 
 | ||||
| void timestamp_filename (char *result, int result_size); | ||||
| 
 | ||||
| 
 | ||||
| // FIXME:  remove temp workaround.
 | ||||
| // Needs many scattered updates.
 | ||||
| 
 | ||||
| #define dtime_now dtime_realtime | ||||
							
								
								
									
										14
									
								
								dtmf.h
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								dtmf.h
									
									
									
									
									
								
							|  | @ -1,14 +0,0 @@ | |||
| /* dtmf.h */ | ||||
| 
 | ||||
| 
 | ||||
| #include "audio.h" | ||||
| 
 | ||||
| void dtmf_init (struct audio_s *p_audio_config, int amp); | ||||
| 
 | ||||
| char dtmf_sample (int c, float input); | ||||
| 
 | ||||
| int dtmf_send (int chan, char *str, int speed, int txdelay, int txtail); | ||||
| 
 | ||||
| 
 | ||||
| /* end dtmf.h */ | ||||
| 
 | ||||
							
								
								
									
										1
									
								
								dw9600.c
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								dw9600.c
									
									
									
									
									
								
							|  | @ -25,6 +25,7 @@ typedef struct TStringList_T | |||
| 
 | ||||
| extern int fx25_mode[4]; | ||||
| extern int il2p_mode[4]; | ||||
| extern int il2p_crc[4]; | ||||
| extern short rx_baudrate[5]; | ||||
| 
 | ||||
| #define FX25_MODE_NONE  0 | ||||
|  |  | |||
							
								
								
									
										61
									
								
								dwgps.h
									
									
									
									
									
								
							
							
						
						
									
										61
									
								
								dwgps.h
									
									
									
									
									
								
							|  | @ -1,61 +0,0 @@ | |||
| 
 | ||||
| /* dwgps.h */ | ||||
| 
 | ||||
| #ifndef DWGPS_H | ||||
| #define DWGPS_H 1 | ||||
| 
 | ||||
| 
 | ||||
| #include <time.h> | ||||
| #include "config.h"	/* for struct misc_config_s */ | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * Values for fix, equivalent to values from libgps. | ||||
|  *	-2 = not initialized. | ||||
|  *	-1 = error communicating with GPS receiver. | ||||
|  *	0 = nothing heard yet. | ||||
|  *	1 = had signal but lost it. | ||||
|  *	2 = 2D. | ||||
|  *	3 = 3D. | ||||
|  * | ||||
|  * Undefined float & double values are set to G_UNKNOWN. | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| enum dwfix_e { DWFIX_NOT_INIT= -2, DWFIX_ERROR= -1, DWFIX_NOT_SEEN=0, DWFIX_NO_FIX=1, DWFIX_2D=2, DWFIX_3D=3 }; | ||||
| 
 | ||||
| typedef enum dwfix_e dwfix_t; | ||||
| 
 | ||||
| typedef struct dwgps_info_s { | ||||
| 	time_t timestamp;	/* When last updated.  System time. */ | ||||
| 	dwfix_t fix;		/* Quality of position fix. */ | ||||
| 	double dlat;		/* Latitude.  Valid if fix >= 2. */ | ||||
| 	double dlon;		/* Longitude. Valid if fix >= 2. */ | ||||
| 	float speed_knots;	/* libgps uses meters/sec but we use GPS usual knots. */ | ||||
| 	float track;		/* What is difference between track and course? */ | ||||
| 	float altitude;		/* meters above mean sea level. Valid if fix == 3. */ | ||||
| } dwgps_info_t; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| void dwgps_init (struct misc_config_s *pconfig, int debug); | ||||
| 
 | ||||
| void dwgps_clear (dwgps_info_t *gpsinfo); | ||||
| 
 | ||||
| dwfix_t dwgps_read (dwgps_info_t *gpsinfo); | ||||
| 
 | ||||
| void dwgps_print (char *msg, dwgps_info_t *gpsinfo); | ||||
| 
 | ||||
| void dwgps_term (void); | ||||
| 
 | ||||
| void dwgps_set_data (dwgps_info_t *gpsinfo); | ||||
| 
 | ||||
| 
 | ||||
| #endif /* DWGPS_H 1 */ | ||||
| 
 | ||||
| /* end dwgps.h */ | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										22
									
								
								dwgpsd.h
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								dwgpsd.h
									
									
									
									
									
								
							|  | @ -1,22 +0,0 @@ | |||
| 
 | ||||
| /* dwgpsd.h   -   For communicating with daemon */ | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| #ifndef DWGPSD_H | ||||
| #define DWGPSD_H 1 | ||||
| 
 | ||||
| #include "config.h" | ||||
| 
 | ||||
| 
 | ||||
| int dwgpsd_init (struct misc_config_s *pconfig, int debug); | ||||
| 
 | ||||
| void dwgpsd_term (void); | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| /* end dwgpsd.h */ | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										32
									
								
								dwgpsnmea.h
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								dwgpsnmea.h
									
									
									
									
									
								
							|  | @ -1,32 +0,0 @@ | |||
| 
 | ||||
| /* dwgpsnmea.h   -   For reading NMEA sentences over serial port */ | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| #ifndef DWGPSNMEA_H | ||||
| #define DWGPSNMEA_H 1 | ||||
| 
 | ||||
| #include "dwgps.h"		/* for dwfix_t */ | ||||
| #include "config.h" | ||||
| #include "serial_port.h"	/* for MYFDTYPE */ | ||||
| 
 | ||||
| 
 | ||||
| int dwgpsnmea_init (struct misc_config_s *pconfig, int debug); | ||||
| 
 | ||||
| MYFDTYPE dwgpsnmea_get_fd(char *wp_port_name, int speed); | ||||
| 
 | ||||
| void dwgpsnmea_term (void); | ||||
| 
 | ||||
| 
 | ||||
| dwfix_t dwgpsnmea_gprmc (char *sentence, int quiet, double *odlat, double *odlon, float *oknots, float *ocourse); | ||||
| 
 | ||||
| dwfix_t dwgpsnmea_gpgga (char *sentence, int quiet, double *odlat, double *odlon, float *oalt, int *onsat); | ||||
| 
 | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| /* end dwgpsnmea.h */ | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										21
									
								
								dwsock.h
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								dwsock.h
									
									
									
									
									
								
							|  | @ -1,21 +0,0 @@ | |||
| 
 | ||||
| /* dwsock.h - Socket helper functions. */ | ||||
| 
 | ||||
| #ifndef DWSOCK_H | ||||
| #define DWSOCK_H 1 | ||||
| 
 | ||||
| #define DWSOCK_IPADDR_LEN 48		// Size of string to hold IPv4 or IPv6 address.
 | ||||
| 					// I think 40 would be adequate but we'll make
 | ||||
| 					// it a little larger just to be safe.
 | ||||
| 					// Use INET6_ADDRSTRLEN (from netinet/in.h) instead?
 | ||||
| 
 | ||||
| int dwsock_init (void); | ||||
| 
 | ||||
| int dwsock_connect (char *hostname, char *port, char *description, int allow_ipv6, int debug, char ipaddr_str[DWSOCK_IPADDR_LEN]); | ||||
| 								/* ipaddr_str needs to be at least SOCK_IPADDR_LEN bytes */ | ||||
| 
 | ||||
| char *dwsock_ia_to_text (int  Family, void * pAddr, char * pStringBuf, size_t StringBufSize); | ||||
| 
 | ||||
| void dwsock_close (int fd); | ||||
| 
 | ||||
| #endif | ||||
|  | @ -1,17 +0,0 @@ | |||
| 
 | ||||
| int encode_position (int messaging, int compressed, double lat, double lon, int ambiguity, int alt_ft, | ||||
| 		char symtab, char symbol,  | ||||
| 		int power, int height, int gain, char *dir, | ||||
| 		int course, int speed_knots, | ||||
| 		float freq, float tone, float offset, | ||||
| 		char *comment, | ||||
| 		char *presult, size_t result_size); | ||||
| 
 | ||||
| int encode_object (char *name, int compressed, time_t thyme, double lat, double lon, int ambiguity, | ||||
| 		char symtab, char symbol,  | ||||
| 		int power, int height, int gain, char *dir, | ||||
| 		int course, int speed_knots, | ||||
| 		float freq, float tone, float offset, char *comment, | ||||
| 		char *presult, size_t result_size); | ||||
| 
 | ||||
| int encode_message (char *addressee, char *text, char *id, char *presult, size_t result_size); | ||||
							
								
								
									
										11
									
								
								fcs_calc.h
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								fcs_calc.h
									
									
									
									
									
								
							|  | @ -1,11 +0,0 @@ | |||
| 
 | ||||
| /* fcs_calc.h */ | ||||
| 
 | ||||
| 
 | ||||
| unsigned short fcs_calc (unsigned char *data, int len); | ||||
| 
 | ||||
| unsigned short crc16 (unsigned char *data, int len, unsigned short seed); | ||||
| 
 | ||||
| /* end fcs_calc.h */ | ||||
| 
 | ||||
| 
 | ||||
|  | @ -1,7 +0,0 @@ | |||
| /* 1200 bits/sec with Audio sample rate = 11025 */ | ||||
| /* Mark freq = 1200, Space freq = 2200 */ | ||||
| 
 | ||||
| static const signed short m_sin_table[9] = { 0 , 7347 , 11257 , 9899 , 3909 , -3909 , -9899 , -11257 , -7347  }; | ||||
| static const signed short m_cos_table[9] = { 11431 , 8756 , 1984 , -5715 , -10741 , -10741 , -5715 , 1984 , 8756  }; | ||||
| static const signed short s_sin_table[9] = { 0 , 10950 , 6281 , -7347 , -10496 , 1327 , 11257 , 5130 , -8314  }; | ||||
| static const signed short s_cos_table[9] = { 11431 , 3278 , -9550 , -8756 , 4527 , 11353 , 1984 , -10215 , -7844  }; | ||||
|  | @ -1,15 +0,0 @@ | |||
| 
 | ||||
| 
 | ||||
| #ifndef FSK_GEN_FILTER_H | ||||
| #define FSK_GEN_FILTER_H 1 | ||||
| 
 | ||||
| #include "audio.h" | ||||
| #include "fsk_demod_state.h" | ||||
| 
 | ||||
| void fsk_gen_filter (int samples_per_sec,  | ||||
| 			int baud,  | ||||
| 			int mark_freq, int space_freq,  | ||||
| 			char profile, | ||||
| 			struct demodulator_state_s *D); | ||||
| 
 | ||||
| #endif | ||||
							
								
								
									
										17
									
								
								gen_tone.h
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								gen_tone.h
									
									
									
									
									
								
							|  | @ -1,17 +0,0 @@ | |||
| /*
 | ||||
|  * gen_tone.h | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| int gen_tone_init (struct audio_s *pp, int amp, int gen_packets); | ||||
| 
 | ||||
| 
 | ||||
| //int gen_tone_open (int nchan, int sample_rate, int bit_rate, int f1, int f2, int amp, char *fname);
 | ||||
| 
 | ||||
| //int gen_tone_open_fd (int nchan, int sample_rate, int bit_rate, int f1, int f2, int amp, int fd)  ;
 | ||||
| 
 | ||||
| //int gen_tone_close (void);
 | ||||
| 
 | ||||
| void tone_gen_put_bit (int chan, int dat); | ||||
| 
 | ||||
| void gen_tone_put_sample (int chan, int a, int sam); | ||||
							
								
								
									
										501
									
								
								grm_sym.h
									
									
									
									
									
								
							
							
						
						
									
										501
									
								
								grm_sym.h
									
									
									
									
									
								
							|  | @ -1,501 +0,0 @@ | |||
| 
 | ||||
| /*
 | ||||
|  * grm_sym.h | ||||
|  * | ||||
|  * Symbol codes for use in $PGRMWPL sentence.  | ||||
|  * | ||||
|  * Copied from  | ||||
|  *	Garmin Device Interface Specification | ||||
|  *	May 19, 2006 | ||||
|  *	Drawing Number: 001-00063-00 Rev. C | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| typedef unsigned short symbol_type_t; | ||||
| 
 | ||||
| enum symbol_type_e | ||||
| { | ||||
| /*---------------------------------------------------------------
 | ||||
| Marine symbols | ||||
| ---------------------------------------------------------------*/ | ||||
| sym_anchor = 0, /* white anchor symbol */ | ||||
| sym_bell = 1, /* white bell symbol */ | ||||
| sym_diamond_grn = 2, /* green diamond symbol */ | ||||
| sym_diamond_red = 3, /* red diamond symbol */ | ||||
| sym_dive1 = 4, /* diver down flag 1 */ | ||||
| sym_dive2 = 5, /* diver down flag 2 */ | ||||
| sym_dollar = 6, /* white dollar symbol */ | ||||
| sym_fish = 7, /* white fish symbol */ | ||||
| sym_fuel = 8, /* white fuel symbol */ | ||||
| sym_horn = 9, /* white horn symbol */ | ||||
| sym_house = 10, /* white house symbol */ | ||||
| sym_knife = 11, /* white knife & fork symbol */ | ||||
| sym_light = 12, /* white light symbol */ | ||||
| sym_mug = 13, /* white mug symbol */ | ||||
| sym_skull = 14, /* white skull and crossbones symbol*/ | ||||
| sym_square_grn = 15, /* green square symbol */ | ||||
| sym_square_red = 16, /* red square symbol */ | ||||
| sym_wbuoy = 17, /* white buoy waypoint symbol */ | ||||
| sym_wpt_dot = 18, /* waypoint dot */ | ||||
| sym_wreck = 19, /* white wreck symbol */ | ||||
| sym_null = 20, /* null symbol (transparent) */ | ||||
| sym_mob = 21, /* man overboard symbol */ | ||||
| sym_buoy_ambr = 22, /* amber map buoy symbol */ | ||||
| sym_buoy_blck = 23, /* black map buoy symbol */ | ||||
| sym_buoy_blue = 24, /* blue map buoy symbol */ | ||||
| sym_buoy_grn = 25, /* green map buoy symbol */ | ||||
| sym_buoy_grn_red = 26, /* green/red map buoy symbol */ | ||||
| sym_buoy_grn_wht = 27, /* green/white map buoy symbol */ | ||||
| sym_buoy_orng = 28, /* orange map buoy symbol */ | ||||
| sym_buoy_red = 29, /* red map buoy symbol */ | ||||
| sym_buoy_red_grn = 30, /* red/green map buoy symbol */ | ||||
| sym_buoy_red_wht = 31, /* red/white map buoy symbol */ | ||||
| sym_buoy_violet = 32, /* violet map buoy symbol */ | ||||
| sym_buoy_wht = 33, /* white map buoy symbol */ | ||||
| sym_buoy_wht_grn = 34, /* white/green map buoy symbol */ | ||||
| sym_buoy_wht_red = 35, /* white/red map buoy symbol */ | ||||
| sym_dot = 36, /* white dot symbol */ | ||||
| sym_rbcn = 37, /* radio beacon symbol */ | ||||
| sym_boat_ramp = 150, /* boat ramp symbol */ | ||||
| sym_camp = 151, /* campground symbol */ | ||||
| sym_restrooms = 152, /* restrooms symbol */ | ||||
| sym_showers = 153, /* shower symbol */ | ||||
| sym_drinking_wtr = 154, /* drinking water symbol */ | ||||
| sym_phone = 155, /* telephone symbol */ | ||||
| sym_1st_aid = 156, /* first aid symbol */ | ||||
| sym_info = 157, /* information symbol */ | ||||
| sym_parking = 158, /* parking symbol */ | ||||
| sym_park = 159, /* park symbol */ | ||||
| sym_picnic = 160, /* picnic symbol */ | ||||
| sym_scenic = 161, /* scenic area symbol */ | ||||
| sym_skiing = 162, /* skiing symbol */ | ||||
| sym_swimming = 163, /* swimming symbol */ | ||||
| sym_dam = 164, /* dam symbol */ | ||||
| sym_controlled = 165, /* controlled area symbol */ | ||||
| sym_danger = 166, /* danger symbol */ | ||||
| sym_restricted = 167, /* restricted area symbol */ | ||||
| sym_null_2 = 168, /* null symbol */ | ||||
| sym_ball = 169, /* ball symbol */ | ||||
| sym_car = 170, /* car symbol */ | ||||
| sym_deer = 171, /* deer symbol */ | ||||
| sym_shpng_cart = 172, /* shopping cart symbol */ | ||||
| sym_lodging = 173, /* lodging symbol */ | ||||
| sym_mine = 174, /* mine symbol */ | ||||
| sym_trail_head = 175, /* trail head symbol */ | ||||
| sym_truck_stop = 176, /* truck stop symbol */ | ||||
| sym_user_exit = 177, /* user exit symbol */ | ||||
| sym_flag = 178, /* flag symbol */ | ||||
| sym_circle_x = 179, /* circle with x in the center */ | ||||
| sym_open_24hr = 180, /* open 24 hours symbol */ | ||||
| sym_fhs_facility = 181, /* U Fishing Hot Spots(tm) Facility */ | ||||
| sym_bot_cond = 182, /* Bottom Conditions */ | ||||
| sym_tide_pred_stn = 183, /* Tide/Current Prediction Station */ | ||||
| sym_anchor_prohib = 184, /* U anchor prohibited symbol */ | ||||
| sym_beacon = 185, /* U beacon symbol */ | ||||
| sym_coast_guard = 186, /* U coast guard symbol */ | ||||
| sym_reef = 187, /* U reef symbol */ | ||||
| sym_weedbed = 188, /* U weedbed symbol */ | ||||
| sym_dropoff = 189, /* U dropoff symbol */ | ||||
| sym_dock = 190, /* U dock symbol */ | ||||
| sym_marina = 191, /* U marina symbol */ | ||||
| sym_bait_tackle = 192, /* U bait and tackle symbol */ | ||||
| sym_stump = 193, /* U stump symbol */ | ||||
| /*---------------------------------------------------------------
 | ||||
| User customizable symbols | ||||
| The values from sym_begin_custom to sym_end_custom inclusive are | ||||
| reserved for the identification of user customizable symbols. | ||||
| ---------------------------------------------------------------*/ | ||||
| sym_begin_custom = 7680, /* first user customizable symbol */ | ||||
| sym_end_custom = 8191, /* last user customizable symbol */ | ||||
| /*---------------------------------------------------------------
 | ||||
| Land symbols | ||||
| ---------------------------------------------------------------*/ | ||||
| sym_is_hwy = 8192, /* interstate hwy symbol */ | ||||
| sym_us_hwy = 8193, /* us hwy symbol */ | ||||
| sym_st_hwy = 8194, /* state hwy symbol */ | ||||
| sym_mi_mrkr = 8195, /* mile marker symbol */ | ||||
| sym_trcbck = 8196, /* TracBack (feet) symbol */ | ||||
| sym_golf = 8197, /* golf symbol */ | ||||
| sym_sml_cty = 8198, /* small city symbol */ | ||||
| sym_med_cty = 8199, /* medium city symbol */ | ||||
| sym_lrg_cty = 8200, /* large city symbol */ | ||||
| sym_freeway = 8201, /* intl freeway hwy symbol */ | ||||
| sym_ntl_hwy = 8202, /* intl national hwy symbol */ | ||||
| sym_cap_cty = 8203, /* capitol city symbol (star) */ | ||||
| sym_amuse_pk = 8204, /* amusement park symbol */ | ||||
| sym_bowling = 8205, /* bowling symbol */ | ||||
| sym_car_rental = 8206, /* car rental symbol */ | ||||
| sym_car_repair = 8207, /* car repair symbol */ | ||||
| sym_fastfood = 8208, /* fast food symbol */ | ||||
| sym_fitness = 8209, /* fitness symbol */ | ||||
| sym_movie = 8210, /* movie symbol */ | ||||
| sym_museum = 8211, /* museum symbol */ | ||||
| sym_pharmacy = 8212, /* pharmacy symbol */ | ||||
| sym_pizza = 8213, /* pizza symbol */ | ||||
| sym_post_ofc = 8214, /* post office symbol */ | ||||
| sym_rv_park = 8215, /* RV park symbol */ | ||||
| sym_school = 8216, /* school symbol */ | ||||
| sym_stadium = 8217, /* stadium symbol */ | ||||
| sym_store = 8218, /* dept. store symbol */ | ||||
| sym_zoo = 8219, /* zoo symbol */ | ||||
| sym_gas_plus = 8220, /* convenience store symbol */ | ||||
| sym_faces = 8221, /* live theater symbol */ | ||||
| sym_ramp_int = 8222, /* ramp intersection symbol */ | ||||
| sym_st_int = 8223, /* street intersection symbol */ | ||||
| sym_weigh_sttn = 8226, /* inspection/weigh station symbol */ | ||||
| sym_toll_booth = 8227, /* toll booth symbol */ | ||||
| sym_elev_pt = 8228, /* elevation point symbol */ | ||||
| sym_ex_no_srvc = 8229, /* exit without services symbol */ | ||||
| sym_geo_place_mm = 8230, /* Geographic place name, man-made */ | ||||
| sym_geo_place_wtr = 8231, /* Geographic place name, water */ | ||||
| sym_geo_place_lnd = 8232, /* Geographic place name, land */ | ||||
| sym_bridge = 8233, /* bridge symbol */ | ||||
| sym_building = 8234, /* building symbol */ | ||||
| sym_cemetery = 8235, /* cemetery symbol */ | ||||
| sym_church = 8236, /* church symbol */ | ||||
| sym_civil = 8237, /* civil location symbol */ | ||||
| sym_crossing = 8238, /* crossing symbol */ | ||||
| sym_hist_town = 8239, /* historical town symbol */ | ||||
| sym_levee = 8240, /* levee symbol */ | ||||
| sym_military = 8241, /* military location symbol */ | ||||
| sym_oil_field = 8242, /* oil field symbol */ | ||||
| sym_tunnel = 8243, /* tunnel symbol */ | ||||
| sym_beach = 8244, /* beach symbol */ | ||||
| sym_forest = 8245, /* forest symbol */ | ||||
| sym_summit = 8246, /* summit symbol */ | ||||
| sym_lrg_ramp_int = 8247, /* large ramp intersection symbol */ | ||||
| sym_lrg_ex_no_srvc = 8248, /* large exit without services smbl */ | ||||
| sym_badge = 8249, /* police/official badge symbol */ | ||||
| sym_cards = 8250, /* gambling/casino symbol */ | ||||
| sym_snowski = 8251, /* snow skiing symbol */ | ||||
| sym_iceskate = 8252, /* ice skating symbol */ | ||||
| sym_wrecker = 8253, /* tow truck (wrecker) symbol */ | ||||
| sym_border = 8254, /* border crossing (port of entry) */ | ||||
| sym_geocache = 8255, /* geocache location */ | ||||
| sym_geocache_fnd = 8256, /* found geocache */ | ||||
| sym_cntct_smiley = 8257, /* Rino contact symbol, "smiley" */ | ||||
| sym_cntct_ball_cap = 8258, /* Rino contact symbol, "ball cap" */ | ||||
| sym_cntct_big_ears = 8259, /* Rino contact symbol, "big ear" */ | ||||
| sym_cntct_spike = 8260, /* Rino contact symbol, "spike" */ | ||||
| sym_cntct_goatee = 8261, /* Rino contact symbol, "goatee" */ | ||||
| sym_cntct_afro = 8262, /* Rino contact symbol, "afro" */ | ||||
| sym_cntct_dreads = 8263, /* Rino contact symbol, "dreads" */ | ||||
| sym_cntct_female1 = 8264, /* Rino contact symbol, "female 1" */ | ||||
| sym_cntct_female2 = 8265, /* Rino contact symbol, "female 2" */ | ||||
| sym_cntct_female3 = 8266, /* Rino contact symbol, "female 3" */ | ||||
| sym_cntct_ranger = 8267, /* Rino contact symbol, "ranger" */ | ||||
| sym_cntct_kung_fu = 8268, /* Rino contact symbol, "kung fu" */ | ||||
| sym_cntct_sumo = 8269, /* Rino contact symbol, "sumo" */ | ||||
| sym_cntct_pirate = 8270, /* Rino contact symbol, "pirate" */ | ||||
| sym_cntct_biker = 8271, /* Rino contact symbol, "biker" */ | ||||
| sym_cntct_alien = 8272, /* Rino contact symbol, "alien" */ | ||||
| sym_cntct_bug = 8273, /* Rino contact symbol, "bug" */ | ||||
| sym_cntct_cat = 8274, /* Rino contact symbol, "cat" */ | ||||
| sym_cntct_dog = 8275, /* Rino contact symbol, "dog" */ | ||||
| sym_cntct_pig = 8276, /* Rino contact symbol, "pig" */ | ||||
| sym_hydrant = 8282, /* water hydrant symbol */ | ||||
| sym_flag_blue = 8284, /* blue flag symbol */ | ||||
| sym_flag_green = 8285, /* green flag symbol */ | ||||
| sym_flag_red = 8286, /* red flag symbol */ | ||||
| sym_pin_blue = 8287, /* blue pin symbol */ | ||||
| sym_pin_green = 8288, /* green pin symbol */ | ||||
| sym_pin_red = 8289, /* red pin symbol */ | ||||
| sym_block_blue = 8290, /* blue block symbol */ | ||||
| sym_block_green = 8291, /* green block symbol */ | ||||
| sym_block_red = 8292, /* red block symbol */ | ||||
| sym_bike_trail = 8293, /* bike trail symbol */ | ||||
| sym_circle_red = 8294, /* red circle symbol */ | ||||
| sym_circle_green = 8295, /* green circle symbol */ | ||||
| sym_circle_blue = 8296, /* blue circle symbol */ | ||||
| sym_diamond_blue = 8299, /* blue diamond symbol */ | ||||
| sym_oval_red = 8300, /* red oval symbol */ | ||||
| sym_oval_green = 8301, /* green oval symbol */ | ||||
| sym_oval_blue = 8302, /* blue oval symbol */ | ||||
| sym_rect_red = 8303, /* red rectangle symbol */ | ||||
| sym_rect_green = 8304, /* green rectangle symbol */ | ||||
| sym_rect_blue = 8305, /* blue rectangle symbol */ | ||||
| sym_square_blue = 8308, /* blue square symbol */ | ||||
| sym_letter_a_red = 8309, /* red letter 'A' symbol */ | ||||
| sym_letter_b_red = 8310, /* red letter 'B' symbol */ | ||||
| sym_letter_c_red = 8311, /* red letter 'C' symbol */ | ||||
| sym_letter_d_red = 8312, /* red letter 'D' symbol */ | ||||
| sym_letter_a_green = 8313, /* green letter 'A' symbol */ | ||||
| sym_letter_c_green = 8314, /* green letter 'C' symbol */ | ||||
| sym_letter_b_green = 8315, /* green letter 'B' symbol */ | ||||
| sym_letter_d_green = 8316, /* green letter 'D' symbol */ | ||||
| sym_letter_a_blue = 8317, /* blue letter 'A' symbol */ | ||||
| sym_letter_b_blue = 8318, /* blue letter 'B' symbol */ | ||||
| sym_letter_c_blue = 8319, /* blue letter 'C' symbol */ | ||||
| sym_letter_d_blue = 8320, /* blue letter 'D' symbol */ | ||||
| sym_number_0_red = 8321, /* red number '0' symbol */ | ||||
| sym_number_1_red = 8322, /* red number '1' symbol */ | ||||
| sym_number_2_red = 8323, /* red number '2' symbol */ | ||||
| sym_number_3_red = 8324, /* red number '3' symbol */ | ||||
| sym_number_4_red = 8325, /* red number '4' symbol */ | ||||
| sym_number_5_red = 8326, /* red number '5' symbol */ | ||||
| sym_number_6_red = 8327, /* red number '6' symbol */ | ||||
| sym_number_7_red = 8328, /* red number '7' symbol */ | ||||
| sym_number_8_red = 8329, /* red number '8' symbol */ | ||||
| sym_number_9_red = 8330, /* red number '9' symbol */ | ||||
| sym_number_0_green = 8331, /* green number '0' symbol */ | ||||
| sym_number_1_green = 8332, /* green number '1' symbol */ | ||||
| sym_number_2_green = 8333, /* green number '2' symbol */ | ||||
| sym_number_3_green = 8334, /* green number '3' symbol */ | ||||
| sym_number_4_green = 8335, /* green number '4' symbol */ | ||||
| sym_number_5_green = 8336, /* green number '5' symbol */ | ||||
| sym_number_6_green = 8337, /* green number '6' symbol */ | ||||
| sym_number_7_green = 8338, /* green number '7' symbol */ | ||||
| sym_number_8_green = 8339, /* green number '8' symbol */ | ||||
| sym_number_9_green = 8340, /* green number '9' symbol */ | ||||
| sym_number_0_blue = 8341, /* blue number '0' symbol */ | ||||
| sym_number_1_blue = 8342, /* blue number '1' symbol */ | ||||
| sym_number_2_blue = 8343, /* blue number '2' symbol */ | ||||
| sym_number_3_blue = 8344, /* blue number '3' symbol */ | ||||
| sym_number_4_blue = 8345, /* blue number '4' symbol */ | ||||
| sym_number_5_blue = 8346, /* blue number '5' symbol */ | ||||
| sym_number_6_blue = 8347, /* blue number '6' symbol */ | ||||
| sym_number_7_blue = 8348, /* blue number '7' symbol */ | ||||
| sym_number_8_blue = 8349, /* blue number '8' symbol */ | ||||
| sym_number_9_blue = 8350, /* blue number '9' symbol */ | ||||
| sym_triangle_blue = 8351, /* blue triangle symbol */ | ||||
| sym_triangle_green = 8352, /* green triangle symbol */ | ||||
| sym_triangle_red = 8353, /* red triangle symbol */ | ||||
| sym_food_asian = 8359, /* asian food symbol */ | ||||
| sym_food_deli = 8360, /* deli symbol */ | ||||
| sym_food_italian = 8361, /* italian food symbol */ | ||||
| sym_food_seafood = 8362, /* seafood symbol */ | ||||
| sym_food_steak = 8363, /* steak symbol */ | ||||
| /*---------------------------------------------------------------
 | ||||
| Aviation symbols | ||||
| ---------------------------------------------------------------*/ | ||||
| sym_airport = 16384, /* airport symbol */ | ||||
| sym_int = 16385, /* intersection symbol */ | ||||
| sym_ndb = 16386, /* non-directional beacon symbol */ | ||||
| sym_vor = 16387, /* VHF omni-range symbol */ | ||||
| sym_heliport = 16388, /* heliport symbol */ | ||||
| sym_private = 16389, /* private field symbol */ | ||||
| sym_soft_fld = 16390, /* soft field symbol */ | ||||
| sym_tall_tower = 16391, /* tall tower symbol */ | ||||
| sym_short_tower = 16392, /* short tower symbol */ | ||||
| sym_glider = 16393, /* glider symbol */ | ||||
| sym_ultralight = 16394, /* ultralight symbol */ | ||||
| sym_parachute = 16395, /* parachute symbol */ | ||||
| sym_vortac = 16396, /* VOR/TACAN symbol */ | ||||
| sym_vordme = 16397, /* VOR-DME symbol */ | ||||
| sym_faf = 16398, /* first approach fix */ | ||||
| sym_lom = 16399, /* localizer outer marker */ | ||||
| sym_map = 16400, /* missed approach point */ | ||||
| sym_tacan = 16401, /* TACAN symbol */ | ||||
| sym_seaplane = 16402, /* Seaplane Base */ | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * Mapping from APRS symbols to Garmin. | ||||
|  */ | ||||
| 
 | ||||
| // TODO:  NEEDS MORE WORK!!!
 | ||||
| 
 | ||||
| 
 | ||||
| #define SYMTAB_SIZE 95 | ||||
| 
 | ||||
| #define sym_default sym_diamond_grn | ||||
| 
 | ||||
| 
 | ||||
| static const symbol_type_t grm_primary_symtab[SYMTAB_SIZE] =  { | ||||
| 
 | ||||
| 	sym_default,		//     00  	 --no-symbol--
 | ||||
| 	sym_cntct_ranger,	//  !  01  	 Police, Sheriff
 | ||||
| 	sym_default,		//  "  02  	 reserved  (was rain)
 | ||||
| 	sym_rbcn,		//  #  03  	 DIGI (white center)
 | ||||
| 	sym_phone,		//  $  04  	 PHONE
 | ||||
| 	sym_rbcn,		//  %  05  	 DX CLUSTER
 | ||||
| 	sym_rbcn,		//  &  06  	 HF GATEway
 | ||||
| 	sym_glider,		//  '  07  	 Small AIRCRAFT
 | ||||
| 	sym_rbcn,		//  (  08  	 Mobile Satellite Station
 | ||||
| 	sym_default,		//  )  09  	 Wheelchair (handicapped)
 | ||||
| 	sym_car,		//  *  10  	 SnowMobile
 | ||||
| 	sym_1st_aid,		//  +  11  	 Red Cross
 | ||||
| 	sym_cntct_ball_cap,	//  ,  12  	 Boy Scouts
 | ||||
| 	sym_house,		//  -  13  	 House QTH (VHF)
 | ||||
| 	sym_default,		//  .  14  	 X
 | ||||
| 	sym_default,		//  /  15  	 Red Dot
 | ||||
| 	sym_default,		//  0  16  	 # circle (obsolete)
 | ||||
| 	sym_default,		//  1  17  	 TBD
 | ||||
| 	sym_default,		//  2  18  	 TBD
 | ||||
| 	sym_default,		//  3  19  	 TBD
 | ||||
| 	sym_default,		//  4  20  	 TBD
 | ||||
| 	sym_default,		//  5  21  	 TBD
 | ||||
| 	sym_default,		//  6  22  	 TBD
 | ||||
| 	sym_default,		//  7  23  	 TBD
 | ||||
| 	sym_default,		//  8  24  	 TBD
 | ||||
| 	sym_default,		//  9  25  	 TBD
 | ||||
| 	sym_default,		//  :  26  	 FIRE
 | ||||
| 	sym_camp,		//  ;  27  	 Campground (Portable ops)
 | ||||
| 	sym_cntct_biker,	//  <  28  	 Motorcycle
 | ||||
| 	sym_default,		//  =  29  	 RAILROAD ENGINE
 | ||||
| 	sym_car,		//  >  30  	 CAR
 | ||||
| 	sym_default,		//  ?  31  	 SERVER for Files
 | ||||
| 	sym_default,		//  @  32  	 HC FUTURE predict (dot)
 | ||||
| 	sym_1st_aid,		//  A  33  	 Aid Station
 | ||||
| 	sym_rbcn,		//  B  34  	 BBS or PBBS
 | ||||
| 	sym_boat_ramp,		//  C  35  	 Canoe
 | ||||
| 	sym_default,		//  D  36  	 
 | ||||
| 	sym_default,		//  E  37  	 EYEBALL (Eye catcher!)
 | ||||
| 	sym_default,		//  F  38  	 Farm Vehicle (tractor)
 | ||||
| 	sym_default,		//  G  39  	 Grid Square (6 digit)
 | ||||
| 	sym_lodging,		//  H  40  	 HOTEL (blue bed symbol)
 | ||||
| 	sym_rbcn,		//  I  41  	 TcpIp on air network stn
 | ||||
| 	sym_default,		//  J  42  	 
 | ||||
| 	sym_school,		//  K  43  	 School
 | ||||
| 	sym_default,		//  L  44  	 PC user
 | ||||
| 	sym_default,		//  M  45  	 MacAPRS
 | ||||
| 	sym_default,		//  N  46  	 NTS Station
 | ||||
| 	sym_parachute,		//  O  47  	 BALLOON
 | ||||
| 	sym_cntct_ranger,	//  P  48  	 Police
 | ||||
| 	sym_default,		//  Q  49  	 TBD
 | ||||
| 	sym_rv_park,		//  R  50  	 REC. VEHICLE
 | ||||
| 	sym_glider,		//  S  51  	 SHUTTLE
 | ||||
| 	sym_default,		//  T  52  	 SSTV
 | ||||
| 	sym_car,		//  U  53  	 BUS
 | ||||
| 	sym_cntct_biker,	//  V  54  	 ATV
 | ||||
| 	sym_default,		//  W  55  	 National WX Service Site
 | ||||
| 	sym_default,		//  X  56  	 HELO
 | ||||
| 	sym_default,		//  Y  57  	 YACHT (sail)
 | ||||
| 	sym_default,		//  Z  58  	 WinAPRS
 | ||||
| 	sym_cntct_smiley,	//  [  59  	 Human/Person (HT)
 | ||||
| 	sym_triangle_green,	//  \  60  	 TRIANGLE(DF station)
 | ||||
| 	sym_default,		//  ]  61  	 MAIL/PostOffice(was PBBS)
 | ||||
| 	sym_glider,		//  ^  62  	 LARGE AIRCRAFT
 | ||||
| 	sym_default,		//  _  63  	 WEATHER Station (blue)
 | ||||
| 	sym_rbcn,		//  `  64  	 Dish Antenna
 | ||||
| 	sym_1st_aid,		//  a  65  	 AMBULANCE
 | ||||
| 	sym_cntct_biker,	//  b  66  	 BIKE
 | ||||
| 	sym_default,		//  c  67  	 Incident Command Post
 | ||||
| 	sym_hydrant,		//  d  68  	 Fire dept
 | ||||
| 	sym_deer,		//  e  69  	 HORSE (equestrian)
 | ||||
| 	sym_hydrant,		//  f  70  	 FIRE TRUCK
 | ||||
| 	sym_glider,		//  g  71  	 Glider
 | ||||
| 	sym_1st_aid,		//  h  72  	 HOSPITAL
 | ||||
| 	sym_default,		//  i  73  	 IOTA (islands on the air)
 | ||||
| 	sym_car,		//  j  74  	 JEEP
 | ||||
| 	sym_car,		//  k  75  	 TRUCK
 | ||||
| 	sym_default,		//  l  76  	 Laptop
 | ||||
| 	sym_rbcn,		//  m  77  	 Mic-E Repeater
 | ||||
| 	sym_default,		//  n  78  	 Node (black bulls-eye)
 | ||||
| 	sym_default,		//  o  79  	 EOC
 | ||||
| 	sym_cntct_dog,		//  p  80  	 ROVER (puppy, or dog)
 | ||||
| 	sym_default,		//  q  81  	 GRID SQ shown above 128 m
 | ||||
| 	sym_rbcn,		//  r  82  	 Repeater
 | ||||
| 	sym_default,		//  s  83  	 SHIP (pwr boat)
 | ||||
| 	sym_truck_stop,		//  t  84  	 TRUCK STOP
 | ||||
| 	sym_truck_stop,		//  u  85  	 TRUCK (18 wheeler)
 | ||||
| 	sym_car,		//  v  86  	 VAN
 | ||||
| 	sym_drinking_wtr,	//  w  87  	 WATER station
 | ||||
| 	sym_default,		//  x  88  	 xAPRS (Unix)
 | ||||
| 	sym_tall_tower,		//  y  89  	 YAGI @ QTH
 | ||||
| 	sym_default,		//  z  90  	 TBD
 | ||||
| 	sym_default,		//  {  91  	 
 | ||||
| 	sym_default,		//  |  92  	 TNC Stream Switch
 | ||||
| 	sym_default,		//  }  93  	 
 | ||||
| 	sym_default };		//  ~  94  	 TNC Stream Switch
 | ||||
| 
 | ||||
| static const symbol_type_t grm_alternate_symtab[SYMTAB_SIZE] =  { | ||||
| 
 | ||||
| 	sym_default,		//     00  	 --no-symbol--
 | ||||
| 	sym_default,		//  !  01  	 EMERGENCY (!)
 | ||||
| 	sym_default,		//  "  02  	 reserved
 | ||||
| 	sym_default,		//  #  03  	 OVERLAY DIGI (green star)
 | ||||
| 	sym_default,		//  $  04  	 Bank or ATM  (green box)
 | ||||
| 	sym_default,		//  %  05  	 Power Plant with overlay
 | ||||
| 	sym_rbcn,		//  &  06  	 I=Igte IGate R=RX T=1hopTX 2=2hopTX
 | ||||
| 	sym_default,		//  '  07  	 Crash (& now Incident sites)
 | ||||
| 	sym_default,		//  (  08  	 CLOUDY (other clouds w ovrly)
 | ||||
| 	sym_hydrant,		//  )  09  	 Firenet MEO, MODIS Earth Obs.
 | ||||
| 	sym_default,		//  *  10  	 SNOW (& future ovrly codes)
 | ||||
| 	sym_default,		//  +  11  	 Church
 | ||||
| 	sym_cntct_female1,	//  ,  12  	 Girl Scouts
 | ||||
| 	sym_house,		//  -  13  	 House (H=HF) (O = Op Present)
 | ||||
| 	sym_default,		//  .  14  	 Ambiguous (Big Question mark)
 | ||||
| 	sym_default,		//  /  15  	 Waypoint Destination
 | ||||
| 	sym_default,		//  0  16  	 CIRCLE (E/I/W=IRLP/Echolink/WIRES)
 | ||||
| 	sym_default,		//  1  17  	 
 | ||||
| 	sym_default,		//  2  18  	 
 | ||||
| 	sym_default,		//  3  19  	
 | ||||
| 	sym_default,		//  4  20  
 | ||||
| 	sym_default,		//  5  21 
 | ||||
| 	sym_default,		//  6  22
 | ||||
| 	sym_default,		//  7  23
 | ||||
| 	sym_default,		//  8  24  	 802.11 or other network node
 | ||||
| 	sym_default,		//  9  25  	 Gas Station (blue pump)
 | ||||
| 	sym_default,		//  :  26  	 Hail (& future ovrly codes)
 | ||||
| 	sym_park,		//  ;  27  	 Park/Picnic area
 | ||||
| 	sym_default,		//  <  28  	 ADVISORY (one WX flag)
 | ||||
| 	sym_rbcn,		//  =  29  	 APRStt Touchtone (DTMF users)
 | ||||
| 	sym_car,		//  >  30  	 OVERLAID CAR
 | ||||
| 	sym_default,		//  ?  31  	 INFO Kiosk  (Blue box with ?)
 | ||||
| 	sym_default,		//  @  32  	 HURRICANE/Trop-Storm
 | ||||
| 	sym_default,		//  A  33  	 overlayBOX DTMF & RFID & XO
 | ||||
| 	sym_default,		//  B  34  	 Blwng Snow (& future codes)
 | ||||
| 	sym_coast_guard,	//  C  35  	 Coast Guard
 | ||||
| 	sym_default,		//  D  36  	 Drizzle (proposed APRStt)
 | ||||
| 	sym_default,		//  E  37  	 Smoke (& other vis codes)
 | ||||
| 	sym_default,		//  F  38  	 Freezng rain (&future codes)
 | ||||
| 	sym_default,		//  G  39  	 Snow Shwr (& future ovrlys)
 | ||||
| 	sym_default,		//  H  40  	 Haze (& Overlay Hazards)
 | ||||
| 	sym_default,		//  I  41  	 Rain Shower
 | ||||
| 	sym_default,		//  J  42  	 Lightning (& future ovrlys)
 | ||||
| 	sym_rbcn,		//  K  43  	 Kenwood HT (W)
 | ||||
| 	sym_light,		//  L  44  	 Lighthouse
 | ||||
| 	sym_default,		//  M  45  	 MARS (A=Army,N=Navy,F=AF)
 | ||||
| 	sym_default,		//  N  46  	 Navigation Buoy
 | ||||
| 	sym_default,		//  O  47  	 Rocket
 | ||||
| 	sym_default,		//  P  48  	 Parking
 | ||||
| 	sym_default,		//  Q  49  	 QUAKE
 | ||||
| 	sym_default,		//  R  50  	 Restaurant
 | ||||
| 	sym_rbcn,		//  S  51  	 Satellite/Pacsat
 | ||||
| 	sym_default,		//  T  52  	 Thunderstorm
 | ||||
| 	sym_default,		//  U  53  	 SUNNY
 | ||||
| 	sym_default,		//  V  54  	 VORTAC Nav Aid
 | ||||
| 	sym_default,		//  W  55  	 # NWS site (NWS options)
 | ||||
| 	sym_pharmacy,		//  X  56  	 Pharmacy Rx (Apothicary)
 | ||||
| 	sym_rbcn,		//  Y  57  	 Radios and devices
 | ||||
| 	sym_default,		//  Z  58  	 
 | ||||
| 	sym_default,		//  [  59  	 W.Cloud (& humans w Ovrly)
 | ||||
| 	sym_default,		//  \  60  	 New overlayable GPS symbol
 | ||||
| 	sym_default,		//  ]  61  	 
 | ||||
| 	sym_glider,		//  ^  62  	 # Aircraft (shows heading)
 | ||||
| 	sym_default,		//  _  63  	 # WX site (green digi)
 | ||||
| 	sym_default,		//  `  64  	 Rain (all types w ovrly)
 | ||||
| 	sym_default,		//  a  65  	 ARRL, ARES, WinLINK
 | ||||
| 	sym_default,		//  b  66  	 Blwng Dst/Snd (& others)
 | ||||
| 	sym_default,		//  c  67  	 CD triangle RACES/SATERN/etc
 | ||||
| 	sym_default,		//  d  68  	 DX spot by callsign
 | ||||
| 	sym_default,		//  e  69  	 Sleet (& future ovrly codes)
 | ||||
| 	sym_default,		//  f  70  	 Funnel Cloud
 | ||||
| 	sym_default,		//  g  71  	 Gale Flags
 | ||||
| 	sym_default,		//  h  72  	 Store. or HAMFST Hh=HAM store
 | ||||
| 	sym_default,		//  i  73  	 BOX or points of Interest
 | ||||
| 	sym_default,		//  j  74  	 WorkZone (Steam Shovel)
 | ||||
| 	sym_car,		//  k  75  	 Special Vehicle SUV,ATV,4x4
 | ||||
| 	sym_default,		//  l  76  	 Areas      (box,circles,etc)
 | ||||
| 	sym_default,		//  m  77  	 Value Sign (3 digit display)
 | ||||
| 	sym_default,		//  n  78  	 OVERLAY TRIANGLE
 | ||||
| 	sym_default,		//  o  79  	 small circle
 | ||||
| 	sym_default,		//  p  80  	 Prtly Cldy (& future ovrlys)
 | ||||
| 	sym_default,		//  q  81  	 
 | ||||
| 	sym_restrooms,		//  r  82  	 Restrooms
 | ||||
| 	sym_default,		//  s  83  	 OVERLAY SHIP/boat (top view)
 | ||||
| 	sym_default,		//  t  84  	 Tornado
 | ||||
| 	sym_car,		//  u  85  	 OVERLAID TRUCK
 | ||||
| 	sym_car,		//  v  86  	 OVERLAID Van
 | ||||
| 	sym_default,		//  w  87  	 Flooding
 | ||||
| 	sym_wreck,		//  x  88  	 Wreck or Obstruction ->X<-
 | ||||
| 	sym_default,		//  y  89  	 Skywarn
 | ||||
| 	sym_default,		//  z  90  	 OVERLAID Shelter
 | ||||
| 	sym_default,		//  {  91  	 Fog (& future ovrly codes)
 | ||||
| 	sym_default,		//  |  92  	 TNC Stream Switch
 | ||||
| 	sym_default,		//  }  93  	 
 | ||||
| 	sym_default };		//  ~  94  	 TNC Stream Switch
 | ||||
| 
 | ||||
							
								
								
									
										17
									
								
								hdlc_send.h
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								hdlc_send.h
									
									
									
									
									
								
							|  | @ -1,17 +0,0 @@ | |||
| 
 | ||||
| /* hdlc_send.h */ | ||||
| 
 | ||||
| // In version 1.7 an extra layer of abstraction was added here.
 | ||||
| // Rather than calling hdlc_send_frame, we now use another function
 | ||||
| // which sends AX.25, FX.25, or IL2P depending on
 | ||||
| 
 | ||||
| #include "ax25_pad.h" | ||||
| #include "audio.h" | ||||
| 
 | ||||
| int layer2_send_frame (int chan, packet_t pp, int bad_fcs, struct audio_s *audio_config_p); | ||||
| 
 | ||||
| int layer2_preamble_postamble (int chan, int flags, int finish, struct audio_s *audio_config_p); | ||||
| 
 | ||||
| /* end hdlc_send.h */ | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										128
									
								
								igate.h
									
									
									
									
									
								
							
							
						
						
									
										128
									
								
								igate.h
									
									
									
									
									
								
							|  | @ -1,128 +0,0 @@ | |||
| 
 | ||||
| /*----------------------------------------------------------------------------
 | ||||
|  *  | ||||
|  * Name:	igate.h | ||||
|  * | ||||
|  * Purpose:	Interface to the Internet Gateway functions. | ||||
|  * | ||||
|  *-----------------------------------------------------------------------------*/ | ||||
| 
 | ||||
| 
 | ||||
| #ifndef IGATE_H | ||||
| #define IGATE_H 1 | ||||
| 
 | ||||
| 
 | ||||
| #include "ax25_pad.h" | ||||
| #include "digipeater.h" | ||||
| #include "audio.h" | ||||
| 
 | ||||
| 
 | ||||
| #define DEFAULT_IGATE_PORT 14580 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| struct igate_config_s { | ||||
| 
 | ||||
| /*
 | ||||
|  * For logging into the IGate server. | ||||
|  */ | ||||
| 	char t2_server_name[40];	/* Tier 2 IGate server name. */ | ||||
| 
 | ||||
| 	int t2_server_port;		/* Typically 14580. */ | ||||
| 
 | ||||
| 	char t2_login[AX25_MAX_ADDR_LEN];/* e.g. WA9XYZ-15 */ | ||||
| 					/* Note that the ssid could be any two alphanumeric */ | ||||
| 					/* characters not just 1 thru 15. */ | ||||
| 					/* Could be same or different than the radio call(s). */ | ||||
| 					/* Not sure what the consequences would be. */ | ||||
| 
 | ||||
| 	char t2_passcode[8];		/* Max. 5 digits. Could be "-1". */ | ||||
| 
 | ||||
| 	char *t2_filter;		/* Optional filter for IS -> RF direction. */ | ||||
| 					/* This is the "server side" filter. */ | ||||
| 					/* A better name would be subscription or something */ | ||||
| 					/* like that because we can only ask for more. */ | ||||
| 
 | ||||
| /*
 | ||||
|  * For transmitting. | ||||
|  */ | ||||
| 	int tx_chan;			/* Radio channel for transmitting. */ | ||||
| 					/* 0=first, etc.  -1 for none. */ | ||||
| 					/* Presently IGate can transmit on only a single channel. */ | ||||
| 					/* A future version might generalize this.  */ | ||||
| 					/* Each transmit channel would have its own client side filtering. */ | ||||
| 
 | ||||
| 	char tx_via[80];		/* VIA path for transmitting third party packets. */ | ||||
| 					/* Usual text representation.  */ | ||||
| 					/* Must start with "," if not empty so it can */ | ||||
| 					/* simply be inserted after the destination address. */ | ||||
| 
 | ||||
| 	int max_digi_hops;		/* Maximum number of digipeater hops possible for via path. */ | ||||
| 					/* Derived from the SSID when last character of address is a digit. */ | ||||
| 					/* e.g.  "WIDE1-1,WIDE5-2" would be 3. */ | ||||
| 					/* This is useful to know so we can determine how many */ | ||||
| 					/* stations we might be able to reach. */ | ||||
| 
 | ||||
| 	int tx_limit_1;			/* Max. packets to transmit in 1 minute. */ | ||||
| 
 | ||||
| 	int tx_limit_5;			/* Max. packets to transmit in 5 minutes. */ | ||||
| 
 | ||||
| 	int igmsp;			/* Number of message sender position reports to allow. */ | ||||
| 					/* Common practice is to default to 1.  */ | ||||
| 					/* We allow additional flexibility of 0 to disable feature */ | ||||
| 					/* or a small number to allow more. */ | ||||
| 
 | ||||
| /*
 | ||||
|  * Receiver to IS data options. | ||||
|  */ | ||||
| 	int rx2ig_dedupe_time;		/* seconds.  0 to disable. */ | ||||
| 
 | ||||
| /*
 | ||||
|  * Special SATgate mode to delay packets heard directly. | ||||
|  */ | ||||
| 	int satgate_delay;		/* seconds.  0 to disable. */ | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| #define IGATE_TX_LIMIT_1_DEFAULT 6 | ||||
| #define IGATE_TX_LIMIT_1_MAX     20 | ||||
| 
 | ||||
| #define IGATE_TX_LIMIT_5_DEFAULT 20 | ||||
| #define IGATE_TX_LIMIT_5_MAX     80 | ||||
| 
 | ||||
| #define IGATE_RX2IG_DEDUPE_TIME 0		/* Issue 85.  0 means disable dupe checking in RF>IS direction. */ | ||||
| 						/* See comments in rx_to_ig_remember & rx_to_ig_allow. */ | ||||
| 						/* Currently there is no configuration setting to change this. */ | ||||
| 
 | ||||
| #define DEFAULT_SATGATE_DELAY 10 | ||||
| #define MIN_SATGATE_DELAY 5 | ||||
| #define MAX_SATGATE_DELAY 30 | ||||
| 
 | ||||
| 
 | ||||
| /* Call this once at startup */ | ||||
| 
 | ||||
| void igate_init (struct audio_s *p_audio_config, struct igate_config_s *p_igate_config, struct digi_config_s *p_digi_config, int debug_level); | ||||
| 
 | ||||
| /* Call this with each packet received from the radio. */ | ||||
| 
 | ||||
| void igate_send_rec_packet (int chan, packet_t recv_pp); | ||||
| 
 | ||||
| /* This when digipeater transmits.  Set bydigi to 1 . */ | ||||
| 
 | ||||
| void ig_to_tx_remember (packet_t pp, int chan, int bydigi); | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| /* Get statistics for IGATE status beacon. */ | ||||
| 
 | ||||
| int igate_get_msg_cnt (void); | ||||
| 
 | ||||
| int igate_get_pkt_cnt (void); | ||||
| 
 | ||||
| int igate_get_upl_cnt (void); | ||||
| 
 | ||||
| int igate_get_dnl_cnt (void); | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| #endif | ||||
							
								
								
									
										170
									
								
								il2p.c
									
									
									
									
									
								
							
							
						
						
									
										170
									
								
								il2p.c
									
									
									
									
									
								
							|  | @ -42,11 +42,44 @@ along with QtSoundModem.  If not, see http://www.gnu.org/licenses | |||
| 
 | ||||
| // IP2P receive code (il2p_rec_bit) is called from the bit receiving code in ax25_demod.c, so includes parallel decoders
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| #include "UZ7HOStuff.h" | ||||
| 
 | ||||
| #include <stdint.h>	// for uint64_t | ||||
| 
 | ||||
|  // Oct 2023 Nino has added an optional crc
 | ||||
| 
 | ||||
| // Hamming(7,4) Encoding Table
 | ||||
| // Enter this table with the 4-bit value to be encoded.
 | ||||
| // Returns 7-bit encoded value, with high bit zero'd.
 | ||||
| 
 | ||||
| uint8_t Hamming74EncodeTable[16] = { 0x0, 0x71, 0x62, 0x13, 0x54, 0x25, 0x36, 0x47, 0x38, 0x49, 0x5a, 0x2b, 0x6c, 0x1d, 0xe, 0x7f }; | ||||
| 
 | ||||
| // Hamming(7,4) Decoding Table
 | ||||
| // Enter this table with 7-bit encoded value, high bit masked.
 | ||||
| // Returns 4-bit decoded value.
 | ||||
| 
 | ||||
| uint16_t Hamming74DecodeTable[128] = { \ | ||||
| 	  0x0, 0x0, 0x0, 0x3, 0x0, 0x5, 0xe, 0x7, \ | ||||
| 	  0x0, 0x9, 0xe, 0xb, 0xe, 0xd, 0xe, 0xe, \ | ||||
| 	  0x0, 0x3, 0x3, 0x3, 0x4, 0xd, 0x6, 0x3, \ | ||||
| 	  0x8, 0xd, 0xa, 0x3, 0xd, 0xd, 0xe, 0xd, \ | ||||
| 	  0x0, 0x5, 0x2, 0xb, 0x5, 0x5, 0x6, 0x5, \ | ||||
| 	  0x8, 0xb, 0xb, 0xb, 0xc, 0x5, 0xe, 0xb, \ | ||||
| 	  0x8, 0x1, 0x6, 0x3, 0x6, 0x5, 0x6, 0x6, \ | ||||
| 	  0x8, 0x8, 0x8, 0xb, 0x8, 0xd, 0x6, 0xf, \ | ||||
| 	  0x0, 0x9, 0x2, 0x7, 0x4, 0x7, 0x7, 0x7, \ | ||||
| 	  0x9, 0x9, 0xa, 0x9, 0xc, 0x9, 0xe, 0x7, \ | ||||
| 	  0x4, 0x1, 0xa, 0x3, 0x4, 0x4, 0x4, 0x7, \ | ||||
| 	  0xa, 0x9, 0xa, 0xa, 0x4, 0xd, 0xa, 0xf, \ | ||||
| 	  0x2, 0x1, 0x2, 0x2, 0xc, 0x5, 0x2, 0x7, \ | ||||
| 	  0xc, 0x9, 0x2, 0xb, 0xc, 0xc, 0xc, 0xf, \ | ||||
| 	  0x1, 0x1, 0x2, 0x1, 0x4, 0x1, 0x6, 0xf, \ | ||||
| 	  0x8, 0x1, 0xa, 0xf, 0xc, 0xf, 0xf, 0xf }; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| void Debugprintf(const char * format, ...); | ||||
| int SMUpdatePhaseConstellation(int chan, float * Phases, float * Mags, int intPSKPhase, int Count); | ||||
| 
 | ||||
|  | @ -109,7 +142,6 @@ int MaxMagIndex = 0; | |||
| #ifndef FX25_H | ||||
| #define FX25_H | ||||
| 
 | ||||
| #include <stdint.h>	// for uint64_t | ||||
| 
 | ||||
| extern unsigned int pskStates[4]; | ||||
| 
 | ||||
|  | @ -343,6 +375,7 @@ struct packet_s { | |||
| 	unsigned char frame_data[AX25_MAX_PACKET_LEN + 1]; | ||||
| 	/* Raw frame contents, without the CRC. */ | ||||
| 
 | ||||
| 	unsigned char crc[4];		// received crc
 | ||||
| 
 | ||||
| 	int magic2;		/* Will get stomped on if above overflows. */ | ||||
| }; | ||||
|  | @ -1015,6 +1048,39 @@ void multi_modem_process_rec_packet(int snd_ch, int subchan, int slice, packet_t | |||
| 
 | ||||
| 	sprintf(Mode, "IL2P %d", centreFreq); | ||||
| 
 | ||||
| 	// check crc if enabled
 | ||||
| 
 | ||||
| 	if (il2p_crc[snd_ch]) | ||||
| 	{ | ||||
| 		unsigned short CRCMSG; | ||||
| 		unsigned short CRCCALC; | ||||
| 		uint8_t crc[4]; | ||||
| 
 | ||||
| 		// check crc if enabled
 | ||||
| 
 | ||||
| 			// The four encoded CRC bytes are arranged :
 | ||||
| 			// | CRC3 | CRC2 | CRC1 | CRC0 | but we store as received, so F->crc[0] is CRC3
 | ||||
| 			// CRC3 encoded from high nibble of 16 - bit CRC value (from crc2)
 | ||||
| 			// CRC0 encoded from low nibble of 16 - bit CRC value (from crc1)
 | ||||
| 
 | ||||
| 		crc[0] = Hamming74DecodeTable[(pp->crc[0] & 0x7f)]; | ||||
| 		crc[1] = Hamming74DecodeTable[(pp->crc[1] & 0x7f)]; | ||||
| 		crc[2] = Hamming74DecodeTable[(pp->crc[2] & 0x7f)]; | ||||
| 		crc[3] = Hamming74DecodeTable[(pp->crc[3] & 0x7f)]; | ||||
| 
 | ||||
| 		CRCMSG = crc[0] << 12 | crc[1] << 8 | crc[2] << 4 | crc[3]; | ||||
| 
 | ||||
| 		CRCCALC = get_fcs(pp->frame_data, pp->frame_len); | ||||
| 
 | ||||
| 		if (CRCCALC != CRCMSG) | ||||
| 		{ | ||||
| 			Debugprintf("CRC Error Decoder %d  Received %x Sent %x", subchan, CRCCALC, CRCMSG); | ||||
| 	//		freeString(data);
 | ||||
| 	//		ax25_delete(pp);
 | ||||
| 	//		return;
 | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	stringAdd(data, pp->frame_data, pp->frame_len + 2);  // QTSM assumes a CRC
 | ||||
| 
 | ||||
| 	ax25_delete(pp); | ||||
|  | @ -3151,6 +3217,13 @@ int il2p_type_1_header(packet_t pp, int max_fec, unsigned char *hdr) | |||
| 	ax25_get_addr_no_ssid(pp, AX25_SOURCE, src_addr); | ||||
| 	int src_ssid = ax25_get_ssid(pp, AX25_SOURCE); | ||||
| 
 | ||||
| 	if ((pp->frame_data[6] & 0x80) == (pp->frame_data[13] & 0x80)) | ||||
| 	{ | ||||
| 		// Both C bits are the same (ax.25 v1) so can't be sent as type 1 as will be changed
 | ||||
| 
 | ||||
| 		return -1; | ||||
| 	} | ||||
| 
 | ||||
| 	unsigned char *a = (unsigned char *)dst_addr; | ||||
| 	for (int i = 0; *a != '\0'; i++, a++) { | ||||
| 		if (*a < ' ' || *a > '_') { | ||||
|  | @ -4008,8 +4081,20 @@ void il2p_rec_bit(int chan, int subchan, int slice, int dbit) | |||
| 						F->pc = 0; | ||||
| 						F->state = IL2P_PAYLOAD; | ||||
| 					} | ||||
| 					else if (F->eplen == 0) {	// No payload.
 | ||||
| 					else if (F->eplen == 0) | ||||
| 					{ | ||||
| 						// No payload.
 | ||||
| 
 | ||||
| 						F->pc = 0; | ||||
| 
 | ||||
| 						if (il2p_crc[chan]) | ||||
| 						{ | ||||
| 							// enter collect crc state
 | ||||
| 
 | ||||
| 							F->crccount = 0; | ||||
| 							F->state = IL2P_CRC; | ||||
| 						} | ||||
| 						else | ||||
| 							F->state = IL2P_DECODE; | ||||
| 					} | ||||
| 					else {			// Error.
 | ||||
|  | @ -4039,16 +4124,47 @@ void il2p_rec_bit(int chan, int subchan, int slice, int dbit) | |||
| 			else { | ||||
| 				F->spayload[F->pc++] = (~F->acc) & 0xff; | ||||
| 			} | ||||
| 			if (F->pc == F->eplen) { | ||||
| 			if (F->pc == F->eplen) | ||||
| 			{ | ||||
| 				// got frame. See if need crc
 | ||||
| 
 | ||||
| 				// TODO?: for symmetry it seems like we should clarify the payload before combining.
 | ||||
| 				if (il2p_crc[chan]) | ||||
| 				{ | ||||
| 					// enter collect crc state
 | ||||
| 
 | ||||
| 					F->crccount = 0; | ||||
| 					F->state = IL2P_CRC; | ||||
| 				} | ||||
| 				else | ||||
| 					F->state = IL2P_DECODE; | ||||
| 			} | ||||
| 		} | ||||
| 		break; | ||||
| 
 | ||||
| 	case IL2P_CRC: | ||||
| 
 | ||||
| 		F->bc++; | ||||
| 		if (F->bc == 8) | ||||
| 		{ | ||||
| 			// full byte has been collected.
 | ||||
| 			F->bc = 0; | ||||
| 			if (!F->polarity) | ||||
| 				F->crc[F->crccount++] = F->acc & 0xff; | ||||
| 			else | ||||
| 				F->crc[F->crccount++] = (~F->acc) & 0xff; | ||||
| 
 | ||||
| 			if (F->crccount == 4) | ||||
| 			{ | ||||
| 				// have all crc bytes. enter DECODE
 | ||||
| 
 | ||||
| 				F->state = IL2P_DECODE; | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 			break; | ||||
| 
 | ||||
| 	case IL2P_DECODE: | ||||
| 
 | ||||
| 		// We get here after a good header and any payload has been collected.
 | ||||
| 		// Processing is delayed by one bit but I think it makes the logic cleaner.
 | ||||
| 		// During unit testing be sure to send an extra bit to flush it out at the end.
 | ||||
|  | @ -4077,6 +4193,18 @@ void il2p_rec_bit(int chan, int subchan, int slice, int dbit) | |||
| 
 | ||||
| 			// TODO: Could we put last 3 arguments in packet object rather than passing around separately?
 | ||||
| 
 | ||||
| 			// if using crc pass received crc to packet object
 | ||||
| 
 | ||||
| 			if (il2p_crc[chan]) | ||||
| 			{ | ||||
| 				//copy crc bytes to packet object
 | ||||
| 
 | ||||
| 				pp->crc[0] = F->crc[0]; | ||||
| 				pp->crc[1] = F->crc[1]; | ||||
| 				pp->crc[2] = F->crc[2]; | ||||
| 				pp->crc[3] = F->crc[3]; | ||||
| 			} | ||||
| 
 | ||||
| 			multi_modem_process_rec_packet(chan, subchan, slice, pp, alevel, retries, is_fx25, slice, centreFreq[chan]); | ||||
| 		} | ||||
| 	}   // end block for local variables.
 | ||||
|  | @ -4269,13 +4397,19 @@ static void send_bit(int chan, int b, int polarity); | |||
|  * | ||||
|  *--------------------------------------------------------------*/ | ||||
| 
 | ||||
| 
 | ||||
| string * il2p_send_frame(int chan, packet_t pp, int max_fec, int polarity) | ||||
| { | ||||
| 	unsigned char encoded[IL2P_MAX_PACKET_SIZE]; | ||||
| 	unsigned char encoded[IL2P_MAX_PACKET_SIZE] = ""; | ||||
| 	string * packet = newString(); | ||||
| 	int preamblecount; | ||||
| 	unsigned char preamble[1024]; | ||||
| 
 | ||||
| 	// The data includes the 2 byte crc but length doesn't
 | ||||
| 
 | ||||
| 	uint8_t crc1 = pp->frame_data[pp->frame_len];			// Low 8 bits
 | ||||
| 	uint8_t crc2 = pp->frame_data[pp->frame_len + 1];		// High 8 bits
 | ||||
| 
 | ||||
| 	encoded[0] = (IL2P_SYNC_WORD >> 16) & 0xff; | ||||
| 	encoded[1] = (IL2P_SYNC_WORD >> 8) & 0xff; | ||||
| 	encoded[2] = (IL2P_SYNC_WORD) & 0xff; | ||||
|  | @ -4289,6 +4423,24 @@ string * il2p_send_frame(int chan, packet_t pp, int max_fec, int polarity) | |||
| 
 | ||||
| 	elen += IL2P_SYNC_WORD_SIZE; | ||||
| 
 | ||||
| 	// if we are using crc add it now. elen should point to end of data
 | ||||
| 	// crc should be at pp->frame_data[pp->frame_len]
 | ||||
| 
 | ||||
| 	if (il2p_crc[chan]) | ||||
| 	{ | ||||
| 		// The four encoded CRC bytes are arranged :
 | ||||
| 		// | CRC3 | CRC2 | CRC1 | CRC0 |
 | ||||
| 
 | ||||
| 		// CRC3 encoded from high nibble of 16 - bit CRC value (from crc2)
 | ||||
| 		// CRC0 encoded from low nibble of 16 - bit CRC value (from crc1)
 | ||||
| 
 | ||||
| 		encoded[elen++] = Hamming74EncodeTable[crc2 >> 4]; | ||||
| 		encoded[elen++] = Hamming74EncodeTable[crc2 & 0xf]; | ||||
| 		encoded[elen++] = Hamming74EncodeTable[crc1 >> 4]; | ||||
| 		encoded[elen++] = Hamming74EncodeTable[crc1 &0xf]; | ||||
| 	} | ||||
| 
 | ||||
| 
 | ||||
| 	number_of_bits_sent[chan] = 0; | ||||
| 
 | ||||
| 	if (il2p_get_debug() >= 1) { | ||||
|  | @ -4366,7 +4518,7 @@ string * fill_il2p_data(int snd_ch, string * data) | |||
| 	// Call il2p_send_frame to build the bit stream
 | ||||
| 
 | ||||
| 	pp->frame_len = data->Length - 2;					// Included CRC
 | ||||
| 	memcpy(pp->frame_data, data->Data, data->Length); | ||||
| 	memcpy(pp->frame_data, data->Data, data->Length);	// Copy the crc in case we are going to send it
 | ||||
| 
 | ||||
| 	result = il2p_send_frame(snd_ch, pp, 1, 0); | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										24
									
								
								kiss.h
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								kiss.h
									
									
									
									
									
								
							|  | @ -1,24 +0,0 @@ | |||
| 
 | ||||
| /* 
 | ||||
|  * Name:	kiss.h | ||||
|  * | ||||
|  * This is for the pseudo terminal KISS interface. | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| #include "ax25_pad.h"		/* for packet_t */ | ||||
| 
 | ||||
| #include "config.h" | ||||
| 
 | ||||
| #include "kiss_frame.h"		// for struct kissport_status_s | ||||
| 
 | ||||
| 
 | ||||
| void kisspt_init (struct misc_config_s *misc_config); | ||||
| 
 | ||||
| void kisspt_send_rec_packet (int chan, int kiss_cmd, unsigned char *fbuf,  int flen, | ||||
| 		struct kissport_status_s *notused1, int notused2); | ||||
| 
 | ||||
| void kisspt_set_debug (int n); | ||||
| 
 | ||||
| 
 | ||||
| /* end kiss.h */ | ||||
							
								
								
									
										126
									
								
								kiss_frame.h
									
									
									
									
									
								
							
							
						
						
									
										126
									
								
								kiss_frame.h
									
									
									
									
									
								
							|  | @ -1,126 +0,0 @@ | |||
| 
 | ||||
| /* kiss_frame.h */ | ||||
| 
 | ||||
| #ifndef KISS_FRAME_H | ||||
| #define KISS_FRAME_H | ||||
| 
 | ||||
| 
 | ||||
| #include "audio.h"		/* for struct audio_s */ | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * The first byte of a KISS frame has: | ||||
|  *	channel in upper nybble. | ||||
|  *	command in lower nybble. | ||||
|  */ | ||||
| 
 | ||||
| #define KISS_CMD_DATA_FRAME	0 | ||||
| #define KISS_CMD_TXDELAY	1 | ||||
| #define KISS_CMD_PERSISTENCE	2 | ||||
| #define KISS_CMD_SLOTTIME	3 | ||||
| #define KISS_CMD_TXTAIL		4 | ||||
| #define KISS_CMD_FULLDUPLEX	5 | ||||
| #define KISS_CMD_SET_HARDWARE	6 | ||||
| #define XKISS_CMD_DATA		12	// Not supported. http://he.fi/pub/oh7lzb/bpq/multi-kiss.pdf
 | ||||
| #define XKISS_CMD_POLL		14	// Not supported.
 | ||||
| #define KISS_CMD_END_KISS	15 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * Special characters used by SLIP protocol. | ||||
|  */ | ||||
| 
 | ||||
| #define FEND 0xC0 | ||||
| #define FESC 0xDB | ||||
| #define TFEND 0xDC | ||||
| #define TFESC 0xDD | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| enum kiss_state_e { | ||||
| 	KS_SEARCHING = 0,	/* Looking for FEND to start KISS frame. */ | ||||
| 				/* Must be 0 so we can simply zero whole structure to initialize. */ | ||||
| 	KS_COLLECTING};		/* In process of collecting KISS frame. */ | ||||
| 
 | ||||
| 
 | ||||
| #define MAX_KISS_LEN 2048	/* Spec calls for at least 1024. */ | ||||
| 				/* Might want to make it longer to accommodate */ | ||||
| 				/* maximum packet length. */ | ||||
| 
 | ||||
| #define MAX_NOISE_LEN 100 | ||||
| 
 | ||||
| typedef struct kiss_frame_s { | ||||
| 	 | ||||
| 	enum kiss_state_e state; | ||||
| 
 | ||||
| 	unsigned char kiss_msg[MAX_KISS_LEN]; | ||||
| 				/* Leading FEND is optional. */ | ||||
| 				/* Contains escapes and ending FEND. */ | ||||
| 	int kiss_len; | ||||
| 
 | ||||
| 	unsigned char noise[MAX_NOISE_LEN]; | ||||
| 	int noise_len; | ||||
| 
 | ||||
| } kiss_frame_t; | ||||
| 
 | ||||
| 
 | ||||
| // This is used only for TCPKISS but it put in kissnet.h,
 | ||||
| // there would be a circular dependency between the two header files.
 | ||||
| // Each KISS TCP port has its own status block.
 | ||||
| 
 | ||||
| struct kissport_status_s { | ||||
| 
 | ||||
| 	struct kissport_status_s *pnext;	// To next in list.
 | ||||
| 
 | ||||
| 	volatile int arg2;			// temp for passing second arg into
 | ||||
| 						// kissnet_listen_thread
 | ||||
| 
 | ||||
| 	int tcp_port;				// default 8001
 | ||||
| 
 | ||||
| 	int chan;				// Radio channel for this tcp port.
 | ||||
| 						// -1 for all.
 | ||||
| 
 | ||||
| 	// The default is a limit of 3 client applications at the same time.
 | ||||
| 	// You can increase the limit by changing the line below.
 | ||||
| 	// A larger number consumes more resources so don't go crazy by making it larger than needed.
 | ||||
| 	// TODO:  Should this be moved to direwolf.h so max number of audio devices
 | ||||
| 	// client apps are in the same place?
 | ||||
| 
 | ||||
| #define MAX_NET_CLIENTS 3 | ||||
| 
 | ||||
| 	int client_sock[MAX_NET_CLIENTS]; | ||||
| 				/* File descriptor for socket for */ | ||||
| 				/* communication with client application. */ | ||||
| 				/* Set to -1 if not connected. */ | ||||
| 				/* (Don't use SOCKET type because it is unsigned.) */ | ||||
| 
 | ||||
| 	kiss_frame_t kf[MAX_NET_CLIENTS]; | ||||
| 				/* Accumulated KISS frame and state of decoder. */ | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| #ifndef KISSUTIL | ||||
| void kiss_frame_init (struct audio_s *pa); | ||||
| #endif | ||||
| 
 | ||||
| int kiss_encapsulate (unsigned char *in, int ilen, unsigned char *out); | ||||
| 
 | ||||
| int kiss_unwrap (unsigned char *in, int ilen, unsigned char *out); | ||||
| 
 | ||||
| void kiss_rec_byte (kiss_frame_t *kf, unsigned char ch, int debug, struct kissport_status_s *kps, int client, | ||||
| 			void (*sendfun)(int chan, int kiss_cmd, unsigned char *fbuf, int flen, struct kissport_status_s *onlykps, int onlyclient)); | ||||
| 
 | ||||
| typedef enum fromto_e { FROM_CLIENT=0, TO_CLIENT=1 } fromto_t; | ||||
| 
 | ||||
| void kiss_process_msg (unsigned char *kiss_msg, int kiss_len, int debug, struct kissport_status_s *kps, int client, | ||||
| 			void (*sendfun)(int chan, int kiss_cmd, unsigned char *fbuf, int flen, struct kissport_status_s *onlykps, int onlyclient)); | ||||
| 
 | ||||
| void kiss_debug_print (fromto_t fromto, char *special, unsigned char *pmsg, int msg_len); | ||||
| 
 | ||||
| 
 | ||||
| #endif  // KISS_FRAME_H
 | ||||
| 
 | ||||
| 
 | ||||
| /* end kiss_frame.h */ | ||||
|  | @ -245,7 +245,6 @@ void ProcessKISSFrame(void * socket, UCHAR * Msg, int Len) | |||
| 				Add(&KISS.buffer[Chan], TXMSG); | ||||
| 		} | ||||
| 
 | ||||
| 		 | ||||
| 		return; | ||||
| 
 | ||||
| 	case KISS_DATA: | ||||
|  |  | |||
							
								
								
									
										29
									
								
								kissnet.h
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								kissnet.h
									
									
									
									
									
								
							|  | @ -1,29 +0,0 @@ | |||
| 
 | ||||
| /* 
 | ||||
|  * Name:	kissnet.h | ||||
|  */ | ||||
| 
 | ||||
| #ifndef KISSNET_H | ||||
| #define KISSNET_H | ||||
| 
 | ||||
| #include "ax25_pad.h"		/* for packet_t */ | ||||
| 
 | ||||
| #include "config.h" | ||||
| 
 | ||||
| #include "kiss_frame.h" | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| void kissnet_init (struct misc_config_s *misc_config); | ||||
| 
 | ||||
| void kissnet_send_rec_packet (int chan, int kiss_cmd, unsigned char *fbuf,  int flen, | ||||
| 			struct kissport_status_s *onlykps, int onlyclient); | ||||
| 
 | ||||
| void kiss_net_set_debug (int n); | ||||
| 
 | ||||
| void kissnet_copy (unsigned char *kiss_msg, int kiss_len, int chan, int cmd, struct kissport_status_s *from_kps, int from_client); | ||||
| 
 | ||||
| 
 | ||||
| #endif  // KISSNET_H
 | ||||
| 
 | ||||
| /* end kissnet.h */ | ||||
							
								
								
									
										23
									
								
								kissserial.h
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								kissserial.h
									
									
									
									
									
								
							|  | @ -1,23 +0,0 @@ | |||
| 
 | ||||
| /* 
 | ||||
|  * Name:	kissserial.h | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| #include "ax25_pad.h"		/* for packet_t */ | ||||
| 
 | ||||
| #include "config.h" | ||||
| 
 | ||||
| #include "kiss_frame.h" | ||||
| 
 | ||||
| 
 | ||||
| void kissserial_init (struct misc_config_s *misc_config); | ||||
| 
 | ||||
| void kissserial_send_rec_packet (int chan, int kiss_cmd, unsigned char *fbuf,  int flen, | ||||
| 		struct kissport_status_s *notused1, int notused2); | ||||
| 
 | ||||
| 
 | ||||
| void kissserial_set_debug (int n); | ||||
| 
 | ||||
| 
 | ||||
| /* end kissserial.h */ | ||||
							
								
								
									
										24
									
								
								latlong.h
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								latlong.h
									
									
									
									
									
								
							|  | @ -1,24 +0,0 @@ | |||
| 
 | ||||
| /* latlong.h */ | ||||
| 
 | ||||
| 
 | ||||
| /* Use this value for unknown latitude/longitude or other values. */ | ||||
| 
 | ||||
| #define G_UNKNOWN (-999999) | ||||
| 
 | ||||
| 
 | ||||
| void latitude_to_str (double dlat, int ambiguity, char *slat); | ||||
| void longitude_to_str (double dlong, int ambiguity, char *slong); | ||||
| 
 | ||||
| void latitude_to_comp_str (double dlat, char *clat); | ||||
| void longitude_to_comp_str (double dlon, char *clon); | ||||
| 
 | ||||
| void latitude_to_nmea (double dlat, char *slat, char *hemi); | ||||
| void longitude_to_nmea (double dlong, char *slong, char *hemi); | ||||
| 
 | ||||
| double latitude_from_nmea (char *pstr, char *phemi); | ||||
| double longitude_from_nmea (char *pstr, char *phemi); | ||||
| 
 | ||||
| double ll_distance_km (double lat1, double lon1, double lat2, double lon2); | ||||
| 
 | ||||
| int ll_from_grid_square (char *maidenhead, double *dlat, double *dlon); | ||||
							
								
								
									
										19
									
								
								log.h
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								log.h
									
									
									
									
									
								
							|  | @ -1,19 +0,0 @@ | |||
| 
 | ||||
| /* log.h */ | ||||
| 
 | ||||
| 
 | ||||
| #include "hdlc_rec2.h"		// for retry_t | ||||
| 
 | ||||
| #include "decode_aprs.h"	// for decode_aprs_t | ||||
| 
 | ||||
| #include "ax25_pad.h" | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| void log_init (int daily_names, char *path); | ||||
| 
 | ||||
| void log_write (int chan, decode_aprs_t *A, packet_t pp, alevel_t alevel, retry_t retries); | ||||
| 
 | ||||
| void log_rr_bits (decode_aprs_t *A, packet_t pp); | ||||
| 
 | ||||
| void log_term (void); 	 | ||||
							
								
								
									
										4
									
								
								main.cpp
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								main.cpp
									
									
									
									
									
								
							|  | @ -53,6 +53,8 @@ int main(int argc, char *argv[]) | |||
| 
 | ||||
| 	qDebug() << Title; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 	if (nonGUIMode) | ||||
| 		a = new QCoreApplication(argc, argv); | ||||
| 	else | ||||
|  | @ -60,6 +62,7 @@ int main(int argc, char *argv[]) | |||
| 
 | ||||
| 	getSettings(); | ||||
| 
 | ||||
| 
 | ||||
| 	t = new workerThread; | ||||
| 
 | ||||
| 	if (nonGUIMode == 0) | ||||
|  | @ -85,4 +88,3 @@ int main(int argc, char *argv[]) | |||
| 
 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										276
									
								
								mgn_icon.h
									
									
									
									
									
								
							
							
						
						
									
										276
									
								
								mgn_icon.h
									
									
									
									
									
								
							|  | @ -1,276 +0,0 @@ | |||
| 
 | ||||
| 
 | ||||
| /* 
 | ||||
|  * MGN_icon.h  | ||||
|  * | ||||
|  * Waypoint icon codes for use in the $PMGNWPL sentence. | ||||
|  * | ||||
|  * Derived from Data Transmission Protocol For Magellan Products - version 2.11, March 2003 | ||||
|  * | ||||
|  * http://www.gpsinformation.org/mag-proto-2-11.pdf
 | ||||
|  * | ||||
|  * | ||||
|  * That's 13 years ago.  There should be something newer available but I can't find it. | ||||
|  * | ||||
|  * The is based on the newer models at the time.  Earlier models had shorter incompatible icon lists. | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| #define MGN_crossed_square "a" | ||||
| #define MGN_box "b" | ||||
| #define MGN_house "c" | ||||
| #define MGN_aerial "d" | ||||
| #define MGN_airport "e" | ||||
| #define MGN_amusement_park "f" | ||||
| #define MGN_ATM "g" | ||||
| #define MGN_auto_repair "h" | ||||
| #define MGN_boating "I" | ||||
| #define MGN_camping "j" | ||||
| #define MGN_exit_ramp "k" | ||||
| #define MGN_first_aid "l" | ||||
| #define MGN_nav_aid "m" | ||||
| #define MGN_buoy "n" | ||||
| #define MGN_fuel "o" | ||||
| #define MGN_garden "p" | ||||
| #define MGN_golf "q" | ||||
| #define MGN_hotel "r" | ||||
| #define MGN_hunting_fishing "s" | ||||
| #define MGN_large_city "t" | ||||
| #define MGN_lighthouse "u" | ||||
| #define MGN_major_city "v" | ||||
| #define MGN_marina "w" | ||||
| #define MGN_medium_city "x" | ||||
| #define MGN_museum "y" | ||||
| #define MGN_obstruction "z" | ||||
| #define MGN_park "aa" | ||||
| #define MGN_resort "ab" | ||||
| #define MGN_restaurant "ac" | ||||
| #define MGN_rock "ad" | ||||
| #define MGN_scuba "ae" | ||||
| #define MGN_RV_service "af" | ||||
| #define MGN_shooting "ag" | ||||
| #define MGN_sight_seeing "ah" | ||||
| #define MGN_small_city "ai" | ||||
| #define MGN_sounding "aj" | ||||
| #define MGN_sports_arena "ak" | ||||
| #define MGN_tourist_info "al" | ||||
| #define MGN_truck_service "am" | ||||
| #define MGN_winery "an" | ||||
| #define MGN_wreck "ao" | ||||
| #define MGN_zoo "ap" | ||||
| 
 | ||||
| 
 | ||||
| /*
 | ||||
|  * Mapping from APRS symbols to Magellan. | ||||
|  * | ||||
|  * This is a bit of a challenge because there  | ||||
|  * are no icons for moving objects. | ||||
|  * We can use airport for flying things but  | ||||
|  * what about wheeled transportation devices? | ||||
|  */ | ||||
| 
 | ||||
| // TODO:  NEEDS MORE WORK!!!
 | ||||
| 
 | ||||
| 
 | ||||
| #define MGN_default MGN_crossed_square | ||||
| 
 | ||||
| #define SYMTAB_SIZE 95 | ||||
| 
 | ||||
| static const char mgn_primary_symtab[SYMTAB_SIZE][3] =  { | ||||
| 
 | ||||
| 	MGN_default,		//     00  	 --no-symbol--
 | ||||
| 	MGN_default,		//  !  01  	 Police, Sheriff
 | ||||
| 	MGN_default,		//  "  02  	 reserved  (was rain)
 | ||||
| 	MGN_aerial,		//  #  03  	 DIGI (white center)
 | ||||
| 	MGN_default,		//  $  04  	 PHONE
 | ||||
| 	MGN_aerial,		//  %  05  	 DX CLUSTER
 | ||||
| 	MGN_aerial,		//  &  06  	 HF GATEway
 | ||||
| 	MGN_airport,		//  '  07  	 Small AIRCRAFT
 | ||||
| 	MGN_aerial,		//  (  08  	 Mobile Satellite Station
 | ||||
| 	MGN_default,		//  )  09  	 Wheelchair (handicapped)
 | ||||
| 	MGN_default,		//  *  10  	 SnowMobile
 | ||||
| 	MGN_default,		//  +  11  	 Red Cross
 | ||||
| 	MGN_default,		//  ,  12  	 Boy Scouts
 | ||||
| 	MGN_house,		//  -  13  	 House QTH (VHF)
 | ||||
| 	MGN_default,		//  .  14  	 X
 | ||||
| 	MGN_default,		//  /  15  	 Red Dot
 | ||||
| 	MGN_default,		//  0  16  	 # circle (obsolete)
 | ||||
| 	MGN_default,		//  1  17  	 TBD
 | ||||
| 	MGN_default,		//  2  18  	 TBD
 | ||||
| 	MGN_default,		//  3  19  	 TBD
 | ||||
| 	MGN_default,		//  4  20  	 TBD
 | ||||
| 	MGN_default,		//  5  21  	 TBD
 | ||||
| 	MGN_default,		//  6  22  	 TBD
 | ||||
| 	MGN_default,		//  7  23  	 TBD
 | ||||
| 	MGN_default,		//  8  24  	 TBD
 | ||||
| 	MGN_default,		//  9  25  	 TBD
 | ||||
| 	MGN_default,		//  :  26  	 FIRE
 | ||||
| 	MGN_camping,		//  ;  27  	 Campground (Portable ops)
 | ||||
| 	MGN_default,		//  <  28  	 Motorcycle
 | ||||
| 	MGN_default,		//  =  29  	 RAILROAD ENGINE
 | ||||
| 	MGN_default,		//  >  30  	 CAR
 | ||||
| 	MGN_default,		//  ?  31  	 SERVER for Files
 | ||||
| 	MGN_default,		//  @  32  	 HC FUTURE predict (dot)
 | ||||
| 	MGN_first_aid,		//  A  33  	 Aid Station
 | ||||
| 	MGN_aerial,		//  B  34  	 BBS or PBBS
 | ||||
| 	MGN_boating,		//  C  35  	 Canoe
 | ||||
| 	MGN_default,		//  D  36  	 
 | ||||
| 	MGN_default,		//  E  37  	 EYEBALL (Eye catcher!)
 | ||||
| 	MGN_default,		//  F  38  	 Farm Vehicle (tractor)
 | ||||
| 	MGN_default,		//  G  39  	 Grid Square (6 digit)
 | ||||
| 	MGN_hotel,		//  H  40  	 HOTEL (blue bed symbol)
 | ||||
| 	MGN_aerial,		//  I  41  	 TcpIp on air network stn
 | ||||
| 	MGN_default,		//  J  42  	 
 | ||||
| 	MGN_default,		//  K  43  	 School
 | ||||
| 	MGN_default,		//  L  44  	 PC user
 | ||||
| 	MGN_default,		//  M  45  	 MacAPRS
 | ||||
| 	MGN_aerial,		//  N  46  	 NTS Station
 | ||||
| 	MGN_airport,		//  O  47  	 BALLOON
 | ||||
| 	MGN_default,		//  P  48  	 Police
 | ||||
| 	MGN_default,		//  Q  49  	 TBD
 | ||||
| 	MGN_RV_service,		//  R  50  	 REC. VEHICLE
 | ||||
| 	MGN_airport,		//  S  51  	 SHUTTLE
 | ||||
| 	MGN_default,		//  T  52  	 SSTV
 | ||||
| 	MGN_default,		//  U  53  	 BUS
 | ||||
| 	MGN_default,		//  V  54  	 ATV
 | ||||
| 	MGN_default,		//  W  55  	 National WX Service Site
 | ||||
| 	MGN_default,		//  X  56  	 HELO
 | ||||
| 	MGN_boating,		//  Y  57  	 YACHT (sail)
 | ||||
| 	MGN_default,		//  Z  58  	 WinAPRS
 | ||||
| 	MGN_default,		//  [  59  	 Human/Person (HT)
 | ||||
| 	MGN_default,		//  \  60  	 TRIANGLE(DF station)
 | ||||
| 	MGN_default,		//  ]  61  	 MAIL/PostOffice(was PBBS)
 | ||||
| 	MGN_airport,		//  ^  62  	 LARGE AIRCRAFT
 | ||||
| 	MGN_default,		//  _  63  	 WEATHER Station (blue)
 | ||||
| 	MGN_aerial,		//  `  64  	 Dish Antenna
 | ||||
| 	MGN_default,		//  a  65  	 AMBULANCE
 | ||||
| 	MGN_default,		//  b  66  	 BIKE
 | ||||
| 	MGN_default,		//  c  67  	 Incident Command Post
 | ||||
| 	MGN_default,		//  d  68  	 Fire dept
 | ||||
| 	MGN_zoo,		//  e  69  	 HORSE (equestrian)
 | ||||
| 	MGN_default,		//  f  70  	 FIRE TRUCK
 | ||||
| 	MGN_airport,		//  g  71  	 Glider
 | ||||
| 	MGN_default,		//  h  72  	 HOSPITAL
 | ||||
| 	MGN_default,		//  i  73  	 IOTA (islands on the air)
 | ||||
| 	MGN_default,		//  j  74  	 JEEP
 | ||||
| 	MGN_default,		//  k  75  	 TRUCK
 | ||||
| 	MGN_default,		//  l  76  	 Laptop
 | ||||
| 	MGN_aerial,		//  m  77  	 Mic-E Repeater
 | ||||
| 	MGN_default,		//  n  78  	 Node (black bulls-eye)
 | ||||
| 	MGN_default,		//  o  79  	 EOC
 | ||||
| 	MGN_zoo,		//  p  80  	 ROVER (puppy, or dog)
 | ||||
| 	MGN_default,		//  q  81  	 GRID SQ shown above 128 m
 | ||||
| 	MGN_aerial,		//  r  82  	 Repeater
 | ||||
| 	MGN_default,		//  s  83  	 SHIP (pwr boat)
 | ||||
| 	MGN_default,		//  t  84  	 TRUCK STOP
 | ||||
| 	MGN_default,		//  u  85  	 TRUCK (18 wheeler)
 | ||||
| 	MGN_default,		//  v  86  	 VAN
 | ||||
| 	MGN_default,		//  w  87  	 WATER station
 | ||||
| 	MGN_aerial,		//  x  88  	 xAPRS (Unix)
 | ||||
| 	MGN_aerial,		//  y  89  	 YAGI @ QTH
 | ||||
| 	MGN_default,		//  z  90  	 TBD
 | ||||
| 	MGN_default,		//  {  91  	 
 | ||||
| 	MGN_default,		//  |  92  	 TNC Stream Switch
 | ||||
| 	MGN_default,		//  }  93  	 
 | ||||
| 	MGN_default };		//  ~  94  	 TNC Stream Switch
 | ||||
| 
 | ||||
| 
 | ||||
| static const char mgn_alternate_symtab[SYMTAB_SIZE][3] =  { | ||||
| 
 | ||||
| 	MGN_default,		//     00  	 --no-symbol--
 | ||||
| 	MGN_default,		//  !  01  	 EMERGENCY (!)
 | ||||
| 	MGN_default,		//  "  02  	 reserved
 | ||||
| 	MGN_aerial,		//  #  03  	 OVERLAY DIGI (green star)
 | ||||
| 	MGN_ATM,		//  $  04  	 Bank or ATM  (green box)
 | ||||
| 	MGN_default,		//  %  05  	 Power Plant with overlay
 | ||||
| 	MGN_aerial,		//  &  06  	 I=Igte IGate R=RX T=1hopTX 2=2hopTX
 | ||||
| 	MGN_default,		//  '  07  	 Crash (& now Incident sites)
 | ||||
| 	MGN_default,		//  (  08  	 CLOUDY (other clouds w ovrly)
 | ||||
| 	MGN_aerial,		//  )  09  	 Firenet MEO, MODIS Earth Obs.
 | ||||
| 	MGN_default,		//  *  10  	 SNOW (& future ovrly codes)
 | ||||
| 	MGN_default,		//  +  11  	 Church
 | ||||
| 	MGN_default,		//  ,  12  	 Girl Scouts
 | ||||
| 	MGN_house,		//  -  13  	 House (H=HF) (O = Op Present)
 | ||||
| 	MGN_default,		//  .  14  	 Ambiguous (Big Question mark)
 | ||||
| 	MGN_default,		//  /  15  	 Waypoint Destination
 | ||||
| 	MGN_default,		//  0  16  	 CIRCLE (E/I/W=IRLP/Echolink/WIRES)
 | ||||
| 	MGN_default,		//  1  17  	 
 | ||||
| 	MGN_default,		//  2  18  	 
 | ||||
| 	MGN_default,		//  3  19  	
 | ||||
| 	MGN_default,		//  4  20  
 | ||||
| 	MGN_default,		//  5  21 
 | ||||
| 	MGN_default,		//  6  22
 | ||||
| 	MGN_default,		//  7  23
 | ||||
| 	MGN_aerial,		//  8  24  	 802.11 or other network node
 | ||||
| 	MGN_fuel,		//  9  25  	 Gas Station (blue pump)
 | ||||
| 	MGN_default,		//  :  26  	 Hail (& future ovrly codes)
 | ||||
| 	MGN_park,		//  ;  27  	 Park/Picnic area
 | ||||
| 	MGN_default,		//  <  28  	 ADVISORY (one WX flag)
 | ||||
| 	MGN_default,		//  =  29  	 APRStt Touchtone (DTMF users)
 | ||||
| 	MGN_default,		//  >  30  	 OVERLAID CAR
 | ||||
| 	MGN_tourist_info,	//  ?  31  	 INFO Kiosk  (Blue box with ?)
 | ||||
| 	MGN_default,		//  @  32  	 HURRICANE/Trop-Storm
 | ||||
| 	MGN_box,		//  A  33  	 overlayBOX DTMF & RFID & XO
 | ||||
| 	MGN_default,		//  B  34  	 Blwng Snow (& future codes)
 | ||||
| 	MGN_boating,		//  C  35  	 Coast Guard
 | ||||
| 	MGN_default,		//  D  36  	 Drizzle (proposed APRStt)
 | ||||
| 	MGN_default,		//  E  37  	 Smoke (& other vis codes)
 | ||||
| 	MGN_default,		//  F  38  	 Freezng rain (&future codes)
 | ||||
| 	MGN_default,		//  G  39  	 Snow Shwr (& future ovrlys)
 | ||||
| 	MGN_default,		//  H  40  	 Haze (& Overlay Hazards)
 | ||||
| 	MGN_default,		//  I  41  	 Rain Shower
 | ||||
| 	MGN_default,		//  J  42  	 Lightning (& future ovrlys)
 | ||||
| 	MGN_default,		//  K  43  	 Kenwood HT (W)
 | ||||
| 	MGN_lighthouse,		//  L  44  	 Lighthouse
 | ||||
| 	MGN_default,		//  M  45  	 MARS (A=Army,N=Navy,F=AF)
 | ||||
| 	MGN_buoy,		//  N  46  	 Navigation Buoy
 | ||||
| 	MGN_airport,		//  O  47  	 Rocket
 | ||||
| 	MGN_default,		//  P  48  	 Parking
 | ||||
| 	MGN_default,		//  Q  49  	 QUAKE
 | ||||
| 	MGN_restaurant,		//  R  50  	 Restaurant
 | ||||
| 	MGN_aerial,		//  S  51  	 Satellite/Pacsat
 | ||||
| 	MGN_default,		//  T  52  	 Thunderstorm
 | ||||
| 	MGN_default,		//  U  53  	 SUNNY
 | ||||
| 	MGN_nav_aid,		//  V  54  	 VORTAC Nav Aid
 | ||||
| 	MGN_default,		//  W  55  	 # NWS site (NWS options)
 | ||||
| 	MGN_default,		//  X  56  	 Pharmacy Rx (Apothicary)
 | ||||
| 	MGN_aerial,		//  Y  57  	 Radios and devices
 | ||||
| 	MGN_default,		//  Z  58  	 
 | ||||
| 	MGN_default,		//  [  59  	 W.Cloud (& humans w Ovrly)
 | ||||
| 	MGN_default,		//  \  60  	 New overlayable GPS symbol
 | ||||
| 	MGN_default,		//  ]  61  	 
 | ||||
| 	MGN_airport,		//  ^  62  	 # Aircraft (shows heading)
 | ||||
| 	MGN_default,		//  _  63  	 # WX site (green digi)
 | ||||
| 	MGN_default,		//  `  64  	 Rain (all types w ovrly)
 | ||||
| 	MGN_aerial,		//  a  65  	 ARRL, ARES, WinLINK
 | ||||
| 	MGN_default,		//  b  66  	 Blwng Dst/Snd (& others)
 | ||||
| 	MGN_default,		//  c  67  	 CD triangle RACES/SATERN/etc
 | ||||
| 	MGN_default,		//  d  68  	 DX spot by callsign
 | ||||
| 	MGN_default,		//  e  69  	 Sleet (& future ovrly codes)
 | ||||
| 	MGN_default,		//  f  70  	 Funnel Cloud
 | ||||
| 	MGN_default,		//  g  71  	 Gale Flags
 | ||||
| 	MGN_default,		//  h  72  	 Store. or HAMFST Hh=HAM store
 | ||||
| 	MGN_box,		//  i  73  	 BOX or points of Interest
 | ||||
| 	MGN_default,		//  j  74  	 WorkZone (Steam Shovel)
 | ||||
| 	MGN_default,		//  k  75  	 Special Vehicle SUV,ATV,4x4
 | ||||
| 	MGN_default,		//  l  76  	 Areas      (box,circles,etc)
 | ||||
| 	MGN_default,		//  m  77  	 Value Sign (3 digit display)
 | ||||
| 	MGN_default,		//  n  78  	 OVERLAY TRIANGLE
 | ||||
| 	MGN_default,		//  o  79  	 small circle
 | ||||
| 	MGN_default,		//  p  80  	 Prtly Cldy (& future ovrlys)
 | ||||
| 	MGN_default,		//  q  81  	 
 | ||||
| 	MGN_default,		//  r  82  	 Restrooms
 | ||||
| 	MGN_default,		//  s  83  	 OVERLAY SHIP/boat (top view)
 | ||||
| 	MGN_default,		//  t  84  	 Tornado
 | ||||
| 	MGN_default,		//  u  85  	 OVERLAID TRUCK
 | ||||
| 	MGN_default,		//  v  86  	 OVERLAID Van
 | ||||
| 	MGN_default,		//  w  87  	 Flooding
 | ||||
| 	MGN_wreck,		//  x  88  	 Wreck or Obstruction ->X<-
 | ||||
| 	MGN_default,		//  y  89  	 Skywarn
 | ||||
| 	MGN_default,		//  z  90  	 OVERLAID Shelter
 | ||||
| 	MGN_default,		//  {  91  	 Fog (& future ovrly codes)
 | ||||
| 	MGN_default,		//  |  92  	 TNC Stream Switch
 | ||||
| 	MGN_default,		//  }  93  	 
 | ||||
| 	MGN_default };		//  ~  94  	 TNC Stream Switch
 | ||||
| 
 | ||||
							
								
								
									
										20
									
								
								mheard.h
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								mheard.h
									
									
									
									
									
								
							|  | @ -1,20 +0,0 @@ | |||
| 
 | ||||
| 
 | ||||
| /* mheard.h */ | ||||
| 
 | ||||
| #include "decode_aprs.h"	// for decode_aprs_t | ||||
| 
 | ||||
| 
 | ||||
| void mheard_init (int debug); | ||||
| 
 | ||||
| void mheard_save_rf (int chan, decode_aprs_t *A, packet_t pp, alevel_t alevel, retry_t retries); | ||||
| 
 | ||||
| void mheard_save_is (char *ptext); | ||||
| 
 | ||||
| int mheard_count (int max_hops, int time_limit); | ||||
| 
 | ||||
| int mheard_was_recently_nearby (char *role, char *callsign, int time_limit, int max_hops, double dlat, double dlon, double km); | ||||
| 
 | ||||
| void mheard_set_msp (char *callsign, int num); | ||||
| 
 | ||||
| int mheard_get_msp (char *callsign); | ||||
							
								
								
									
										8
									
								
								morse.h
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								morse.h
									
									
									
									
									
								
							|  | @ -1,8 +0,0 @@ | |||
| /* morse.h */ | ||||
| 
 | ||||
| int morse_init (struct audio_s *audio_config_p, int amp) ; | ||||
| 
 | ||||
| int morse_send (int chan, char *str, int wpm, int txdelay, int txtail); | ||||
| 
 | ||||
| #define MORSE_DEFAULT_WPM 10 | ||||
| 
 | ||||
|  | @ -1,24 +0,0 @@ | |||
| /* multi_modem.h */ | ||||
| 
 | ||||
| #ifndef MULTI_MODEM_H | ||||
| #define MULTI_MODEM 1 | ||||
| 
 | ||||
| /* Needed for typedef retry_t. */ | ||||
| #include "hdlc_rec2.h" | ||||
| 
 | ||||
| /* Needed for struct audio_s */ | ||||
| #include "audio.h" | ||||
| 
 | ||||
| 
 | ||||
| void multi_modem_init (struct audio_s *pmodem);  | ||||
| 
 | ||||
| void multi_modem_process_sample (int c, int audio_sample); | ||||
| 
 | ||||
| int multi_modem_get_dc_average (int chan); | ||||
| 
 | ||||
| // Deprecated.  Replace with ...packet
 | ||||
| void multi_modem_process_rec_frame (int chan, int subchan, int slice, unsigned char *fbuf, int flen, alevel_t alevel, retry_t retries, int is_fx25); | ||||
| 
 | ||||
| void multi_modem_process_rec_packet (int chan, int subchan, int slice, packet_t pp, alevel_t alevel, retry_t retries, int is_fx25); | ||||
| 
 | ||||
| #endif | ||||
							
								
								
									
										13
									
								
								pfilter.h
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								pfilter.h
									
									
									
									
									
								
							|  | @ -1,13 +0,0 @@ | |||
| 
 | ||||
| /* pfilter.h */ | ||||
| 
 | ||||
| 
 | ||||
| #include "igate.h"		// for igate_config_s | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| void pfilter_init (struct igate_config_s *p_igate_config, int debug_level); | ||||
| 
 | ||||
| int pfilter (int from_chan, int to_chan, char *filter, packet_t pp, int is_aprs); | ||||
| 
 | ||||
| int is_telem_metadata (char *infop); | ||||
							
								
								
									
										26
									
								
								ptt.h
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								ptt.h
									
									
									
									
									
								
							|  | @ -1,26 +0,0 @@ | |||
| 
 | ||||
| 
 | ||||
| #ifndef PTT_H | ||||
| #define PTT_H 1 | ||||
| 
 | ||||
| 
 | ||||
| #include "audio.h"	/* for struct audio_s and definitions for octype values */ | ||||
| 
 | ||||
| 
 | ||||
| void ptt_set_debug(int debug); | ||||
| 
 | ||||
| void ptt_init (struct audio_s *p_modem); | ||||
| 
 | ||||
| void ptt_set (int octype, int chan, int ptt);  | ||||
| 
 | ||||
| void ptt_term (void); | ||||
| 
 | ||||
| int get_input (int it, int chan); | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| /* end ptt.h */ | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										6
									
								
								recv.h
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								recv.h
									
									
									
									
									
								
							|  | @ -1,6 +0,0 @@ | |||
| 
 | ||||
| /* recv.h */ | ||||
| 
 | ||||
| void recv_init (struct audio_s *pa); | ||||
| 
 | ||||
| void recv_process (void); | ||||
							
								
								
									
										15
									
								
								redecode.h
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								redecode.h
									
									
									
									
									
								
							|  | @ -1,15 +0,0 @@ | |||
| 
 | ||||
| 
 | ||||
| #ifndef REDECODE_H | ||||
| #define REDECODE_H 1 | ||||
| 
 | ||||
| #include "rrbb.h"	 | ||||
| 
 | ||||
| 
 | ||||
| extern void redecode_init (struct audio_s *p_audio_config); | ||||
| 
 | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| /* end redecode.h */ | ||||
| 
 | ||||
							
								
								
									
										94
									
								
								rpack.h
									
									
									
									
									
								
							
							
						
						
									
										94
									
								
								rpack.h
									
									
									
									
									
								
							|  | @ -1,94 +0,0 @@ | |||
| 
 | ||||
| /*------------------------------------------------------------------
 | ||||
|  * | ||||
|  * File:        rpack.h | ||||
|  * | ||||
|  * Purpose:   	Definition of Garmin Rino message format. | ||||
|  *		 | ||||
|  * References:	http://www.radio-active.net.au/web3/APRS/Resources/RINO
 | ||||
|  * | ||||
|  *		http://www.radio-active.net.au/web3/APRS/Resources/RINO/OnAir
 | ||||
|  * | ||||
|  *---------------------------------------------------------------*/ | ||||
| 
 | ||||
| 
 | ||||
| #ifndef RPACK_H | ||||
| #define RPACK_H 1 | ||||
| 
 | ||||
| 
 | ||||
| #define RPACK_FRAME_LEN 168 | ||||
| 
 | ||||
| 
 | ||||
| #ifdef RPACK_C		/* Expose private details */ | ||||
| 
 | ||||
| 
 | ||||
|   | ||||
| // Transmission order is LSB first. 
 | ||||
| 
 | ||||
| struct __attribute__((__packed__)) rpack_s { | ||||
| 
 | ||||
| 	int lat;		// Latitude.
 | ||||
| 				// Signed integer.  Scaled by 2**30/90.
 | ||||
| 
 | ||||
| 	int lon;		// Longitude.  Same encoding.
 | ||||
| 
 | ||||
| 	char unknown1;		// Unproven theory: altitude.	
 | ||||
| 	char unknown2;		 | ||||
| 
 | ||||
| 	unsigned name0:6;	// 10 character name.
 | ||||
| 	unsigned name1:6;	// Bit packing is implementation dependent.
 | ||||
| 	unsigned name2:6;	// Should rewrite to be more portable.
 | ||||
| 	unsigned name3:6; | ||||
| 	unsigned name4:6; | ||||
| 	unsigned name5:6; | ||||
| 	unsigned name6:6; | ||||
| 	unsigned name7:6; | ||||
| 	unsigned name8:6; | ||||
| 	unsigned name9:6; | ||||
| 
 | ||||
| 	unsigned symbol:5;	 | ||||
| 
 | ||||
| 	unsigned unknown3:7;		 | ||||
| 				 | ||||
| 	 | ||||
| //	unsigned crc:16;	// Safe bet this is CRC for error checking.
 | ||||
| 
 | ||||
| 	unsigned char crc1; | ||||
| 	unsigned char crc2; | ||||
| 
 | ||||
| 	char dummy[3];		// Total size should be 24 bytes if no gaps.
 | ||||
| 
 | ||||
| }; | ||||
| 
 | ||||
| #else			/* Show only public interface.  */ | ||||
| 
 | ||||
| 
 | ||||
| struct rpack_s { | ||||
| 	char stuff[24]; | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| void rpack_set_bit (struct rpack_s *rp, int position, int value); | ||||
| 
 | ||||
| int rpack_is_valid (struct rpack_s *rp); | ||||
| 
 | ||||
| int rpack_get_bit (struct rpack_s *rp, int position); | ||||
| 
 | ||||
| double rpack_get_lat (struct rpack_s *rp); | ||||
| 
 | ||||
| double rpack_get_lon (struct rpack_s *rp); | ||||
| 
 | ||||
| int rpack_get_symbol (struct rpack_s *rp); | ||||
| 
 | ||||
| void rpack_get_name (struct rpack_s *rp, char *str); | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| /* end rpack.h */ | ||||
| 	 | ||||
							
								
								
									
										92
									
								
								rrbb.h
									
									
									
									
									
								
							
							
						
						
									
										92
									
								
								rrbb.h
									
									
									
									
									
								
							|  | @ -1,92 +0,0 @@ | |||
| 
 | ||||
| #ifndef RRBB_H | ||||
| 
 | ||||
| #define RRBB_H | ||||
| 
 | ||||
| 
 | ||||
| #define FASTER13 1		// Don't pack 8 samples per byte.
 | ||||
| 
 | ||||
| 
 | ||||
| //typedef short slice_t;
 | ||||
| 
 | ||||
| 
 | ||||
| /* 
 | ||||
|  * Maximum size (in bytes) of an AX.25 frame including the 2 octet FCS.  | ||||
|  */ | ||||
| 
 | ||||
| #define MAX_FRAME_LEN ((AX25_MAX_PACKET_LEN) + 2)	 | ||||
| 
 | ||||
| /*
 | ||||
|  * Maximum number of bits in AX.25 frame excluding the flags. | ||||
|  * Adequate for extreme case of bit stuffing after every 5 bits | ||||
|  * which could never happen. | ||||
|  */ | ||||
| 
 | ||||
| #define MAX_NUM_BITS (MAX_FRAME_LEN * 8 * 6 / 5) | ||||
| 
 | ||||
| typedef struct rrbb_s { | ||||
| 	int magic1; | ||||
| 	struct rrbb_s* nextp;	/* Next pointer to maintain a queue. */ | ||||
| 
 | ||||
| 	int chan;		/* Radio channel from which it was received. */ | ||||
| 	int subchan;		/* Which modem when more than one per channel. */ | ||||
| 	int slice;		/* Which slicer. */ | ||||
| 
 | ||||
| 	alevel_t alevel;	/* Received audio level at time of frame capture. */ | ||||
| 	unsigned int len;	/* Current number of samples in array. */ | ||||
| 
 | ||||
| 	int is_scrambled;	/* Is data scrambled G3RUH / K9NG style? */ | ||||
| 	int descram_state;	/* Descrambler state before first data bit of frame. */ | ||||
| 	int prev_descram;	/* Previous descrambled bit. */ | ||||
| 
 | ||||
| 	unsigned char fdata[MAX_NUM_BITS]; | ||||
| 
 | ||||
| 	int magic2; | ||||
| } *rrbb_t; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| rrbb_t rrbb_new (int chan, int subchan, int slice, int is_scrambled, int descram_state, int prev_descram); | ||||
| 
 | ||||
| void rrbb_clear (rrbb_t b, int is_scrambled, int descram_state, int prev_descram); | ||||
| 
 | ||||
| 
 | ||||
| static inline /*__attribute__((always_inline))*/ void rrbb_append_bit (rrbb_t b, const unsigned char val) | ||||
| { | ||||
| 	if (b->len >= MAX_NUM_BITS) { | ||||
| 	  return;	/* Silently discard if full. */ | ||||
| 	} | ||||
| 	b->fdata[b->len] = val; | ||||
| 	b->len++; | ||||
| } | ||||
| 
 | ||||
| static inline /*__attribute__((always_inline))*/ unsigned char rrbb_get_bit (const rrbb_t b, const int ind) | ||||
| { | ||||
| 	return (b->fdata[ind]); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| void rrbb_chop8 (rrbb_t b); | ||||
| 
 | ||||
| int rrbb_get_len (rrbb_t b); | ||||
| 
 | ||||
| //void rrbb_flip_bit (rrbb_t b, unsigned int ind);
 | ||||
| 
 | ||||
| void rrbb_delete (rrbb_t b); | ||||
| 
 | ||||
| void rrbb_set_nextp (rrbb_t b, rrbb_t np); | ||||
| rrbb_t rrbb_get_nextp (rrbb_t b); | ||||
| 
 | ||||
| int rrbb_get_chan (rrbb_t b); | ||||
| int rrbb_get_subchan (rrbb_t b); | ||||
| int rrbb_get_slice (rrbb_t b); | ||||
| 
 | ||||
| void rrbb_set_audio_level (rrbb_t b, alevel_t alevel); | ||||
| alevel_t rrbb_get_audio_level (rrbb_t b); | ||||
| 
 | ||||
| int rrbb_get_is_scrambled (rrbb_t b); | ||||
| int rrbb_get_descram_state (rrbb_t b); | ||||
| int rrbb_get_prev_descram (rrbb_t b); | ||||
| 
 | ||||
| 
 | ||||
| #endif | ||||
|  | @ -1,32 +0,0 @@ | |||
| /* serial_port.h */ | ||||
| 
 | ||||
| 
 | ||||
| #ifndef SERIAL_PORT_H | ||||
| #define SERIAL_PORT_H 1 | ||||
| 
 | ||||
| 
 | ||||
| #if __WIN32__ | ||||
| 
 | ||||
| #include <stdlib.h> | ||||
| 
 | ||||
| typedef HANDLE MYFDTYPE; | ||||
| #define MYFDERROR INVALID_HANDLE_VALUE | ||||
| 
 | ||||
| #else | ||||
| 
 | ||||
| typedef int MYFDTYPE; | ||||
| #define MYFDERROR (-1) | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| 
 | ||||
| extern MYFDTYPE serial_port_open (char *devicename, int baud); | ||||
| 
 | ||||
| extern int serial_port_write (MYFDTYPE fd, char *str, int len); | ||||
| 
 | ||||
| extern int serial_port_get1 (MYFDTYPE fd); | ||||
| 
 | ||||
| extern void serial_port_close (MYFDTYPE fd); | ||||
| 
 | ||||
| 
 | ||||
| #endif | ||||
							
								
								
									
										32
									
								
								server.h
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								server.h
									
									
									
									
									
								
							|  | @ -1,32 +0,0 @@ | |||
| 
 | ||||
| /* 
 | ||||
|  * Name:	server.h | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| #include "ax25_pad.h"		/* for packet_t */ | ||||
| 
 | ||||
| #include "config.h" | ||||
| 
 | ||||
| 
 | ||||
| void server_set_debug (int n); | ||||
| 
 | ||||
| void server_init (struct audio_s *audio_config_p, struct misc_config_s *misc_config); | ||||
| 
 | ||||
| void server_send_rec_packet (int chan, packet_t pp, unsigned char *fbuf,  int flen); | ||||
| 
 | ||||
| void server_send_monitored (int chan, packet_t pp, int own_xmit); | ||||
| 
 | ||||
| int server_callsign_registered_by_client (char *callsign); | ||||
| 
 | ||||
| 
 | ||||
| void server_link_established (int chan, int client, char *remote_call, char *own_call, int incoming); | ||||
| 
 | ||||
| void server_link_terminated (int chan, int client, char *remote_call, char *own_call, int timeout); | ||||
| 
 | ||||
| void server_rec_conn_data (int chan, int client, char *remote_call, char *own_call, int pid, char *data_ptr, int data_len); | ||||
| 
 | ||||
| void server_outstanding_frames_reply (int chan, int client, char *own_call, char *remote_call, int count); | ||||
| 
 | ||||
| 
 | ||||
| /* end server.h */ | ||||
							
								
								
									
										15
									
								
								sm_main.c
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								sm_main.c
									
									
									
									
									
								
							|  | @ -27,7 +27,6 @@ void make_core_BPF(UCHAR snd_ch, short freq, short width); | |||
| void make_core_TXBPF(UCHAR snd_ch, float freq, float width); | ||||
| void make_core_INTR(UCHAR snd_ch); | ||||
| void make_core_LPF(UCHAR snd_ch, short width); | ||||
| void wf_pointer(int snd_ch); | ||||
| void dw9600ProcessSample(int snd_ch, short Sample); | ||||
| void init_RUH48(int snd_ch); | ||||
| void init_RUH96(int snd_ch); | ||||
|  | @ -65,11 +64,8 @@ int TXPort = 8884; | |||
| 
 | ||||
| BOOL Firstwaterfall = 1; | ||||
| BOOL Secondwaterfall = 1; | ||||
| 
 | ||||
| int multiCore = FALSE; | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| BOOL MinOnStart  =  0; | ||||
| //RS TReedSolomon;
 | ||||
| //  Form1 TForm1;
 | ||||
|  | @ -728,7 +724,7 @@ void init_speed(int snd_ch) | |||
| 	  form1.show_freq_a; | ||||
| 	  form1.show_freq_b; | ||||
| 	  */ | ||||
| 	wf_pointer(snd_ch); | ||||
| 	NeedWaterfallHeaders = TRUE; | ||||
| 
 | ||||
| 	CheckPSKWindows(); | ||||
| } | ||||
|  | @ -863,6 +859,8 @@ void runModemthread(void * param) | |||
| 
 | ||||
| // I think this processes a buffer of samples
 | ||||
| 
 | ||||
| int Toggle = 0; | ||||
| 
 | ||||
| void BufferFull(short * Samples, int nSamples)			// These are Stereo Samples
 | ||||
| { | ||||
| 	word i, i1, j; | ||||
|  | @ -1064,6 +1062,8 @@ void BufferFull(short * Samples, int nSamples)			// These are Stereo Samples | |||
| 
 | ||||
| 		// Collect samples for both channels if needed
 | ||||
| 
 | ||||
| 		Toggle++; | ||||
| 
 | ||||
| 		Needed = FFTSize - fftCount; | ||||
| 
 | ||||
| 		if (Needed <= rx_bufsize) | ||||
|  | @ -1076,6 +1076,7 @@ void BufferFull(short * Samples, int nSamples)			// These are Stereo Samples | |||
| 				data1 += 2; | ||||
| 			} | ||||
| 
 | ||||
| 			if ((Toggle & 1) || (UsingBothChannels == 0)) | ||||
| 				doWaterfall(FirstWaterfallChan); | ||||
| 
 | ||||
| 			if (data2) | ||||
|  | @ -1085,9 +1086,13 @@ void BufferFull(short * Samples, int nSamples)			// These are Stereo Samples | |||
| 					*ptr2++ = *data2; | ||||
| 					data2 += 2; | ||||
| 				} | ||||
| 				if (((Toggle & 1) == 0)) | ||||
| 					doWaterfall(1); | ||||
| 			} | ||||
| 
 | ||||
| 			if (Firstwaterfall || Secondwaterfall) | ||||
| 				displayWaterfall(); | ||||
| 
 | ||||
| 			remainingSamples = rx_bufsize - Needed; | ||||
| 			fftCount = 0; | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										19
									
								
								symbols.h
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								symbols.h
									
									
									
									
									
								
							|  | @ -1,19 +0,0 @@ | |||
| 
 | ||||
| /* symbols.h */ | ||||
| 
 | ||||
| void symbols_init (void); | ||||
| 
 | ||||
| void symbols_list (void); | ||||
| 
 | ||||
| void symbols_from_dest_or_src (char dti, char *src, char *dest, char *symtab, char *symbol); | ||||
| 
 | ||||
| int symbols_into_dest (char symtab, char symbol, char *dest); | ||||
| 
 | ||||
| void symbols_get_description (char symtab, char symbol, char *description, size_t desc_size); | ||||
| 
 | ||||
| int symbols_code_from_description (char overlay, char *description, char *symtab, char *symbol); | ||||
| 
 | ||||
| void symbols_to_tones (char symtab, char symbol, char *tones, size_t tonessize); | ||||
| 
 | ||||
| 
 | ||||
| /* end symbols.h */ | ||||
							
								
								
									
										15
									
								
								telemetry.h
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								telemetry.h
									
									
									
									
									
								
							|  | @ -1,15 +0,0 @@ | |||
| 
 | ||||
| 
 | ||||
| /* telemetry.h */ | ||||
| 
 | ||||
| void telemetry_data_original (char *station, char *info, int quiet, char *output, size_t outputsize, char *comment, size_t commentsize); | ||||
|   | ||||
| void telemetry_data_base91 (char *station, char *cdata, char *output, size_t outputsize); | ||||
|   | ||||
| void telemetry_name_message (char *station, char *msg); | ||||
|   | ||||
| void telemetry_unit_label_message (char *station, char *msg); | ||||
| 
 | ||||
| void telemetry_coefficents_message (char *station, char *msg, int quiet); | ||||
| 
 | ||||
| void telemetry_bit_sense_message (char *station, char *msg, int quiet); | ||||
							
								
								
									
										41
									
								
								tq.h
									
									
									
									
									
								
							
							
						
						
									
										41
									
								
								tq.h
									
									
									
									
									
								
							|  | @ -1,41 +0,0 @@ | |||
| 
 | ||||
| /*------------------------------------------------------------------
 | ||||
|  * | ||||
|  * Module:      tq.h | ||||
|  * | ||||
|  * Purpose:   	Transmit queue - hold packets for transmission until the channel is clear. | ||||
|  *		 | ||||
|  *---------------------------------------------------------------*/ | ||||
| 
 | ||||
| #ifndef TQ_H | ||||
| #define TQ_H 1 | ||||
| 
 | ||||
| #include "ax25_pad.h" | ||||
| #include "audio.h" | ||||
| 
 | ||||
| #define TQ_NUM_PRIO 2				/* Number of priorities. */ | ||||
| 
 | ||||
| #define TQ_PRIO_0_HI 0 | ||||
| #define TQ_PRIO_1_LO 1 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| void tq_init (struct audio_s *audio_config_p); | ||||
| 
 | ||||
| void tq_append (int chan, int prio, packet_t pp); | ||||
| 
 | ||||
| void lm_data_request (int chan, int prio, packet_t pp); | ||||
| 
 | ||||
| void lm_seize_request (int chan); | ||||
| 
 | ||||
| void tq_wait_while_empty (int chan); | ||||
| 
 | ||||
| packet_t tq_remove (int chan, int prio); | ||||
| 
 | ||||
| packet_t tq_peek (int chan, int prio); | ||||
| 
 | ||||
| int tq_count (int chan, int prio, char *source, char *dest, int bytes); | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| /* end tq.h */ | ||||
							
								
								
									
										38
									
								
								tt_text.h
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								tt_text.h
									
									
									
									
									
								
							|  | @ -1,38 +0,0 @@ | |||
| 
 | ||||
| /* tt_text.h */ | ||||
| 
 | ||||
| 
 | ||||
| /* Encode normal human readable to DTMF representation. */ | ||||
| 
 | ||||
| int tt_text_to_multipress (const char *text, int quiet, char *buttons); | ||||
| 
 | ||||
| int tt_text_to_two_key (const char *text, int quiet, char *buttons); | ||||
| 
 | ||||
| int tt_text_to_call10 (const char *text, int quiet, char *buttons); | ||||
| 
 | ||||
| int tt_text_to_mhead (const char *text, int quiet, char *buttons, size_t buttonsiz); | ||||
| 
 | ||||
| int tt_text_to_satsq (const char *text, int quiet, char *buttons, size_t buttonsiz); | ||||
| 
 | ||||
| int tt_text_to_ascii2d (const char *text, int quiet, char *buttons); | ||||
| 
 | ||||
| 
 | ||||
| /* Decode DTMF to normal human readable form. */ | ||||
| 
 | ||||
| int tt_multipress_to_text (const char *buttons, int quiet, char *text); | ||||
| 
 | ||||
| int tt_two_key_to_text (const char *buttons, int quiet, char *text); | ||||
| 
 | ||||
| int tt_call10_to_text (const char *buttons, int quiet, char *text); | ||||
| 
 | ||||
| int tt_call5_suffix_to_text (const char *buttons, int quiet, char *text); | ||||
| 
 | ||||
| int tt_mhead_to_text (const char *buttons, int quiet, char *text, size_t textsiz); | ||||
| 
 | ||||
| int tt_satsq_to_text (const char *buttons, int quiet, char *text); | ||||
| 
 | ||||
| int tt_ascii2d_to_text (const char *buttons, int quiet, char *text); | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| /* end tt_text.h */ | ||||
							
								
								
									
										15
									
								
								tt_user.h
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								tt_user.h
									
									
									
									
									
								
							|  | @ -1,15 +0,0 @@ | |||
| 
 | ||||
| /* tt_user.h */ | ||||
| 
 | ||||
| 
 | ||||
| #include "audio.h" | ||||
| 
 | ||||
| void tt_user_init (struct audio_s *p_audio_config, struct tt_config_s *p); | ||||
| 
 | ||||
| int tt_user_heard (char *callsign, int ssid, char overlay, char symbol, char *loc_text, double latitude,  | ||||
| 		double longitude, int ambiguity, char *freq, char *ctcss, char *comment, char mic_e, char *dao); | ||||
| 
 | ||||
| int tt_3char_suffix_search (char *suffix, char *callsign); | ||||
| 
 | ||||
| void tt_user_background (void); | ||||
| void tt_user_dump (void); | ||||
							
								
								
									
										21
									
								
								version.h
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								version.h
									
									
									
									
									
								
							|  | @ -1,21 +0,0 @@ | |||
| 
 | ||||
| /* Dire Wolf version 1.6 */ | ||||
| 
 | ||||
| // Put in destination field to identify the equipment used.
 | ||||
| 
 | ||||
| #define APP_TOCALL "APDW"		// Assigned by WB4APR in tocalls.txt
 | ||||
| 
 | ||||
| // This now comes from compile command line options.
 | ||||
| 
 | ||||
| //#define MAJOR_VERSION 1
 | ||||
| //#define MINOR_VERSION 6
 | ||||
| //#define EXTRA_VERSION "Beta Test"
 | ||||
| 
 | ||||
| 
 | ||||
| // For user-defined data format.
 | ||||
| // APRS protocol spec Chapter 18 and http://www.aprs.org/aprs11/expfmts.txt
 | ||||
| 
 | ||||
| #define USER_DEF_USER_ID 'D'		// user id D for direwolf
 | ||||
| 
 | ||||
| #define USER_DEF_TYPE_AIS 'A'		// data type A for AIS NMEA sentence
 | ||||
| #define USER_DEF_TYPE_EAS 'E'		// data type E for EAS broadcasts
 | ||||
							
								
								
									
										24
									
								
								waypoint.h
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								waypoint.h
									
									
									
									
									
								
							|  | @ -1,24 +0,0 @@ | |||
| 
 | ||||
| /* 
 | ||||
|  * Name:	waypoint.h | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| #include "ax25_pad.h"		/* for packet_t */ | ||||
| 
 | ||||
| #include "config.h"		/* for struct misc_config_s */ | ||||
| 
 | ||||
| 
 | ||||
| void waypoint_init (struct misc_config_s *misc_config); | ||||
| 
 | ||||
| void waypoint_set_debug (int n); | ||||
| 
 | ||||
| void waypoint_send_sentence (char *wname_in, double dlat, double dlong, char symtab, char symbol,  | ||||
| 			float alt, float course, float speed, char *comment_in); | ||||
| 
 | ||||
| void waypoint_send_ais (char *sentence); | ||||
| 
 | ||||
| void waypoint_term (); | ||||
| 
 | ||||
| 
 | ||||
| /* end waypoint.h */ | ||||
							
								
								
									
										32
									
								
								xid.h
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								xid.h
									
									
									
									
									
								
							|  | @ -1,32 +0,0 @@ | |||
| 
 | ||||
| 
 | ||||
| /* xid.h */ | ||||
| 
 | ||||
| 
 | ||||
| #include "ax25_pad.h"		// for enum ax25_modulo_e | ||||
| 
 | ||||
| 
 | ||||
| struct xid_param_s { | ||||
| 
 | ||||
| 	int full_duplex; | ||||
| 	 | ||||
| 	// Order is important because negotiation keeps the lower value of
 | ||||
| 	// REJ  (srej_none),  SREJ (default without negotiation), Multi-SREJ (if both agree).
 | ||||
| 
 | ||||
| 	enum srej_e { srej_none=0, srej_single=1, srej_multi=2, srej_not_specified=3 } srej; | ||||
| 
 | ||||
| 	enum ax25_modulo_e modulo; | ||||
| 
 | ||||
| 	int i_field_length_rx;	/* In bytes.  XID has it in bits. */ | ||||
| 
 | ||||
| 	int window_size_rx; | ||||
| 
 | ||||
| 	int ack_timer;		/* "T1" in mSec. */ | ||||
| 
 | ||||
| 	int retries;		/* "N1" */ | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| int xid_parse (unsigned char *info, int info_len, struct xid_param_s *result, char *desc, int desc_size); | ||||
| 
 | ||||
| int xid_encode (struct xid_param_s *param, unsigned char *info, cmdres_t cr); | ||||
							
								
								
									
										27
									
								
								xmit.h
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								xmit.h
									
									
									
									
									
								
							|  | @ -1,27 +0,0 @@ | |||
| 
 | ||||
| 
 | ||||
| #ifndef XMIT_H | ||||
| #define XMIT_H 1 | ||||
| 
 | ||||
| #include "audio.h"	/* for struct audio_s */ | ||||
| 
 | ||||
| 
 | ||||
| extern void xmit_init (struct audio_s *p_modem, int debug_xmit_packet); | ||||
| 
 | ||||
| extern void xmit_set_txdelay (int channel, int value); | ||||
| 
 | ||||
| extern void xmit_set_persist (int channel, int value); | ||||
| 
 | ||||
| extern void xmit_set_slottime (int channel, int value); | ||||
| 
 | ||||
| extern void xmit_set_txtail (int channel, int value); | ||||
| 
 | ||||
| extern void xmit_set_fulldup (int channel, int value); | ||||
| 
 | ||||
| 
 | ||||
| extern int xmit_speak_it (char *script, int c, char *msg); | ||||
| 
 | ||||
| #endif | ||||
| 
 | ||||
| /* end xmit.h */ | ||||
| 
 | ||||
		Loading…
	
		Reference in a new issue
	
	 Dave Hibberd
						Dave Hibberd