initial commit

This commit is contained in:
ezratl 2018-06-04 17:35:22 -04:00
parent ca631192f6
commit 279a8cb5cc
25 changed files with 5225 additions and 0 deletions

152
.cproject Normal file
View File

@ -0,0 +1,152 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
<storageModule moduleId="org.eclipse.cdt.core.settings">
<cconfiguration id="org.eclipse.cdt.msvc.exe.debug.1269692248">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="org.eclipse.cdt.msvc.exe.debug.1269692248" moduleId="org.eclipse.cdt.core.settings" name="Debug">
<externalSettings/>
<extensions>
<extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" description="" id="org.eclipse.cdt.msvc.exe.debug.1269692248" name="Debug" parent="org.eclipse.cdt.msvc.exe.debug">
<folderInfo id="org.eclipse.cdt.msvc.exe.debug.1269692248." name="/" resourcePath="">
<toolChain id="cdt.managedbuild.toolchain.gnu.mingw.base.1844325428" name="MinGW GCC" superClass="cdt.managedbuild.toolchain.gnu.mingw.base">
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.PE" id="cdt.managedbuild.target.gnu.platform.mingw.base.729717436" name="Debug Platform" osList="win32" superClass="cdt.managedbuild.target.gnu.platform.mingw.base"/>
<builder buildPath="${workspace_loc:/PiScan}/Debug" id="cdt.managedbuild.tool.gnu.builder.mingw.base.350386915" keepEnvironmentInBuildfile="false" name="CDT Internal Builder" superClass="cdt.managedbuild.tool.gnu.builder.mingw.base"/>
<tool id="cdt.managedbuild.tool.gnu.assembler.mingw.base.1978254852" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.mingw.base">
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.1600420711" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
</tool>
<tool id="cdt.managedbuild.tool.gnu.archiver.mingw.base.1296063352" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.mingw.base"/>
<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.mingw.base.1512875702" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.mingw.base">
<option id="gnu.cpp.compiler.option.optimization.level.686636409" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/>
<option id="gnu.cpp.compiler.option.debugging.level.1502636174" name="Debug Level" superClass="gnu.cpp.compiler.option.debugging.level" value="gnu.cpp.compiler.debugging.level.max" valueType="enumerated"/>
</tool>
<tool id="cdt.managedbuild.tool.gnu.c.compiler.mingw.base.588778588" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.mingw.base">
<option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.option.optimization.level.1620383574" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" valueType="enumerated"/>
<option id="gnu.c.compiler.option.debugging.level.1472931725" name="Debug Level" superClass="gnu.c.compiler.option.debugging.level" value="gnu.c.debugging.level.max" valueType="enumerated"/>
<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.2026632253" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
</tool>
<tool id="cdt.managedbuild.tool.gnu.c.linker.mingw.base.1436114147" name="MinGW C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.mingw.base">
<inputType id="cdt.managedbuild.tool.gnu.c.linker.input.279730097" superClass="cdt.managedbuild.tool.gnu.c.linker.input">
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
</inputType>
</tool>
<tool id="cdt.managedbuild.tool.gnu.cpp.linker.mingw.base.1226747069" name="MinGW C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.mingw.base"/>
</toolChain>
</folderInfo>
<sourceEntries>
<entry excluding="tests" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="tests"/>
</sourceEntries>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
</cconfiguration>
<cconfiguration id="org.eclipse.cdt.msvc.exe.release.1257106539">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="org.eclipse.cdt.msvc.exe.release.1257106539" moduleId="org.eclipse.cdt.core.settings" name="Release">
<externalSettings/>
<extensions>
<extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>
<extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release" description="" id="org.eclipse.cdt.msvc.exe.release.1257106539" name="Release" parent="org.eclipse.cdt.msvc.exe.release">
<folderInfo id="org.eclipse.cdt.msvc.exe.release.1257106539." name="/" resourcePath="">
<toolChain id="org.eclipse.cdt.msvc.toolchain.exe.release.1578959370" name="Microsoft Visual C++" superClass="org.eclipse.cdt.msvc.toolchain.exe.release">
<targetPlatform id="org.eclipse.cdt.msvc.targetPlatform.exe.release.564544038" superClass="org.eclipse.cdt.msvc.targetPlatform.exe.release"/>
<builder buildPath="${workspace_loc:/PiScan}/Release" id="org.eclipse.cdt.msvc.builder.1827392905" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="CDT Internal Builder" superClass="org.eclipse.cdt.msvc.builder"/>
<tool id="org.eclipse.cdt.msvc.cl.c.exe.release.2010414816" name="C Compiler (cl)" superClass="org.eclipse.cdt.msvc.cl.c.exe.release">
<option id="org.eclipse.cdt.msvc.cl.option.optimization.526281005" name="Optimization" superClass="org.eclipse.cdt.msvc.cl.option.optimization"/>
<option id="org.eclipse.cdt.msvc.cl.option.debugFormat.1409909211" name="Debug Information Format" superClass="org.eclipse.cdt.msvc.cl.option.debugFormat"/>
<inputType id="org.eclipse.cdt.msvc.cl.inputType.c.909856244" superClass="org.eclipse.cdt.msvc.cl.inputType.c"/>
</tool>
<tool id="org.eclipse.cdt.msvc.cl.exe.release.671589545" name="C++ Compiler (cl)" superClass="org.eclipse.cdt.msvc.cl.exe.release">
<option id="org.eclipse.cdt.msvc.cl.option.optimization.1680624972" name="Optimization" superClass="org.eclipse.cdt.msvc.cl.option.optimization"/>
<option id="org.eclipse.cdt.msvc.cl.option.debugFormat.1426624844" name="Debug Information Format" superClass="org.eclipse.cdt.msvc.cl.option.debugFormat"/>
</tool>
<tool id="org.eclipse.cdt.msvc.rc.exe.release.1356646353" name="Resource Compiler (rc)" superClass="org.eclipse.cdt.msvc.rc.exe.release">
<inputType id="org.eclipse.cdt.msvc.rc.inputType.116051672" superClass="org.eclipse.cdt.msvc.rc.inputType"/>
</tool>
<tool id="org.eclipse.cdt.msvc.link.exe.release.2021917065" name="Linker (link)" superClass="org.eclipse.cdt.msvc.link.exe.release">
<inputType id="org.eclipse.cdt.msvc.link.inputType.1112679524" superClass="org.eclipse.cdt.msvc.link.inputType"/>
</tool>
<tool id="org.eclipse.cdt.msvc.lib.760093122" name="Library Manager (lib)" superClass="org.eclipse.cdt.msvc.lib"/>
</toolChain>
</folderInfo>
<sourceEntries>
<entry excluding="tests" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="tests"/>
</sourceEntries>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
</cconfiguration>
<cconfiguration id="org.eclipse.cdt.msvc.exe.debug.1269692248.1652501512">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="org.eclipse.cdt.msvc.exe.debug.1269692248.1652501512" moduleId="org.eclipse.cdt.core.settings" name="Unit Test">
<externalSettings/>
<extensions>
<extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" description="" id="org.eclipse.cdt.msvc.exe.debug.1269692248.1652501512" name="Unit Test" parent="org.eclipse.cdt.msvc.exe.debug">
<folderInfo id="org.eclipse.cdt.msvc.exe.debug.1269692248.1652501512." name="/" resourcePath="">
<toolChain id="cdt.managedbuild.toolchain.gnu.mingw.base.491521230" name="MinGW GCC" superClass="cdt.managedbuild.toolchain.gnu.mingw.base">
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.PE" id="cdt.managedbuild.target.gnu.platform.mingw.base.1360764793" name="Debug Platform" osList="win32" superClass="cdt.managedbuild.target.gnu.platform.mingw.base"/>
<builder buildPath="${workspace_loc:/PiScan}/Debug" id="cdt.managedbuild.tool.gnu.builder.mingw.base.1422690571" keepEnvironmentInBuildfile="false" name="CDT Internal Builder" superClass="cdt.managedbuild.tool.gnu.builder.mingw.base"/>
<tool id="cdt.managedbuild.tool.gnu.assembler.mingw.base.1709814381" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.mingw.base">
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.664076039" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
</tool>
<tool id="cdt.managedbuild.tool.gnu.archiver.mingw.base.688697597" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.mingw.base"/>
<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.mingw.base.1907299642" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.mingw.base">
<option id="gnu.cpp.compiler.option.optimization.level.1318829421" name="Optimization Level" superClass="gnu.cpp.compiler.option.optimization.level" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/>
<option id="gnu.cpp.compiler.option.debugging.level.1683126504" name="Debug Level" superClass="gnu.cpp.compiler.option.debugging.level" value="gnu.cpp.compiler.debugging.level.max" valueType="enumerated"/>
</tool>
<tool id="cdt.managedbuild.tool.gnu.c.compiler.mingw.base.627603712" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.mingw.base">
<option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.option.optimization.level.1298681086" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" valueType="enumerated"/>
<option id="gnu.c.compiler.option.debugging.level.942825776" name="Debug Level" superClass="gnu.c.compiler.option.debugging.level" value="gnu.c.debugging.level.max" valueType="enumerated"/>
<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1146674144" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
</tool>
<tool id="cdt.managedbuild.tool.gnu.c.linker.mingw.base.814286050" name="MinGW C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.mingw.base">
<inputType id="cdt.managedbuild.tool.gnu.c.linker.input.247875979" superClass="cdt.managedbuild.tool.gnu.c.linker.input">
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
</inputType>
</tool>
<tool id="cdt.managedbuild.tool.gnu.cpp.linker.mingw.base.205916764" name="MinGW C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.mingw.base"/>
</toolChain>
</folderInfo>
<sourceEntries>
<entry excluding="src/tuner.c|src/scanner.c|src/piscan.c|tests" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
<entry excluding="test_tuner_thread.c" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="tests"/>
</sourceEntries>
</configuration>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
</cconfiguration>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<project id="PiScan.org.eclipse.cdt.msvc.projectType.exe.174168727" name="Executable" projectType="org.eclipse.cdt.msvc.projectType.exe"/>
</storageModule>
<storageModule moduleId="scannerConfiguration">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
<scannerConfigBuildInfo instanceId="org.eclipse.cdt.msvc.exe.debug.759942400;org.eclipse.cdt.msvc.exe.debug.759942400.;org.eclipse.cdt.msvc.cl.c.exe.debug.531517175;org.eclipse.cdt.msvc.cl.inputType.c.1417506842">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.msw.build.clScannerInfo"/>
</scannerConfigBuildInfo>
<scannerConfigBuildInfo instanceId="org.eclipse.cdt.msvc.exe.debug.1269692248;org.eclipse.cdt.msvc.exe.debug.1269692248.;org.eclipse.cdt.msvc.cl.c.exe.debug.155781993;org.eclipse.cdt.msvc.cl.inputType.c.805721291">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.msw.build.clScannerInfo"/>
</scannerConfigBuildInfo>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
<storageModule moduleId="refreshScope"/>
<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
</cproject>

63
.gitattributes vendored Normal file
View File

@ -0,0 +1,63 @@
###############################################################################
# Set default behavior to automatically normalize line endings.
###############################################################################
* text=auto
###############################################################################
# Set default behavior for command prompt diff.
#
# This is need for earlier builds of msysgit that does not have it on by
# default for csharp files.
# Note: This is only used by command line
###############################################################################
#*.cs diff=csharp
###############################################################################
# Set the merge driver for project and solution files
#
# Merging from the command prompt will add diff markers to the files if there
# are conflicts (Merging from VS is not affected by the settings below, in VS
# the diff markers are never inserted). Diff markers may cause the following
# file extensions to fail to load in VS. An alternative would be to treat
# these files as binary and thus will always conflict and require user
# intervention with every merge. To do so, just uncomment the entries below
###############################################################################
#*.sln merge=binary
#*.csproj merge=binary
#*.vbproj merge=binary
#*.vcxproj merge=binary
#*.vcproj merge=binary
#*.dbproj merge=binary
#*.fsproj merge=binary
#*.lsproj merge=binary
#*.wixproj merge=binary
#*.modelproj merge=binary
#*.sqlproj merge=binary
#*.wwaproj merge=binary
###############################################################################
# behavior for image files
#
# image files are treated as binary by default.
###############################################################################
#*.jpg binary
#*.png binary
#*.gif binary
###############################################################################
# diff behavior for common document formats
#
# Convert binary document formats to text before diffing them. This feature
# is only available from the command line. Turn it on by uncommenting the
# entries below.
###############################################################################
#*.doc diff=astextplain
#*.DOC diff=astextplain
#*.docx diff=astextplain
#*.DOCX diff=astextplain
#*.dot diff=astextplain
#*.DOT diff=astextplain
#*.pdf diff=astextplain
#*.PDF diff=astextplain
#*.rtf diff=astextplain
#*.RTF diff=astextplain

243
.gitignore vendored Normal file
View File

@ -0,0 +1,243 @@
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
[Xx]64/
[Xx]86/
[Bb]uild/
bld/
[Bb]in/
[Oo]bj/
# Visual Studio 2015 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUNIT
*.VisualState.xml
TestResult.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# DNX
project.lock.json
artifacts/
*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# JustCode is a .NET coding add-in
.JustCode
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# TODO: Un-comment the next line if you do not want to checkin
# your web deploy settings because they may include unencrypted
# passwords
#*.pubxml
*.publishproj
# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/packages/*
# except build/, which is used as an MSBuild target.
!**/packages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/packages/repositories.config
# NuGet v3's project.json files produces more ignoreable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directory
AppPackages/
BundleArtifacts/
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!*.[Cc]ache/
# Others
ClientBin/
[Ss]tyle[Cc]op.*
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.pfx
*.publishsettings
node_modules/
orleans.codegen.cs
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
# SQL Server files
*.mdf
*.ldf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# LightSwitch generated files
GeneratedArtifacts/
ModelManifest.xml
# Paket dependency manager
.paket/paket.exe
# FAKE - F# Make
.fake/
/Unit Test/

26
.project Normal file
View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>PiScan</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
<triggers>clean,full,incremental,</triggers>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
<triggers>full,incremental,</triggers>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.cdt.core.cnature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
</natures>
</projectDescription>

View File

@ -0,0 +1,21 @@
eclipse.preferences.version=1
environment/buildEnvironmentInclude/org.eclipse.cdt.msvc.exe.debug.1269692248.1652501512/CPATH/delimiter=;
environment/buildEnvironmentInclude/org.eclipse.cdt.msvc.exe.debug.1269692248.1652501512/CPATH/operation=remove
environment/buildEnvironmentInclude/org.eclipse.cdt.msvc.exe.debug.1269692248.1652501512/C_INCLUDE_PATH/delimiter=;
environment/buildEnvironmentInclude/org.eclipse.cdt.msvc.exe.debug.1269692248.1652501512/C_INCLUDE_PATH/operation=remove
environment/buildEnvironmentInclude/org.eclipse.cdt.msvc.exe.debug.1269692248.1652501512/append=true
environment/buildEnvironmentInclude/org.eclipse.cdt.msvc.exe.debug.1269692248.1652501512/appendContributed=true
environment/buildEnvironmentInclude/org.eclipse.cdt.msvc.exe.debug.1269692248/CPATH/delimiter=;
environment/buildEnvironmentInclude/org.eclipse.cdt.msvc.exe.debug.1269692248/CPATH/operation=remove
environment/buildEnvironmentInclude/org.eclipse.cdt.msvc.exe.debug.1269692248/C_INCLUDE_PATH/delimiter=;
environment/buildEnvironmentInclude/org.eclipse.cdt.msvc.exe.debug.1269692248/C_INCLUDE_PATH/operation=remove
environment/buildEnvironmentInclude/org.eclipse.cdt.msvc.exe.debug.1269692248/append=true
environment/buildEnvironmentInclude/org.eclipse.cdt.msvc.exe.debug.1269692248/appendContributed=true
environment/buildEnvironmentLibrary/org.eclipse.cdt.msvc.exe.debug.1269692248.1652501512/LIBRARY_PATH/delimiter=;
environment/buildEnvironmentLibrary/org.eclipse.cdt.msvc.exe.debug.1269692248.1652501512/LIBRARY_PATH/operation=remove
environment/buildEnvironmentLibrary/org.eclipse.cdt.msvc.exe.debug.1269692248.1652501512/append=true
environment/buildEnvironmentLibrary/org.eclipse.cdt.msvc.exe.debug.1269692248.1652501512/appendContributed=true
environment/buildEnvironmentLibrary/org.eclipse.cdt.msvc.exe.debug.1269692248/LIBRARY_PATH/delimiter=;
environment/buildEnvironmentLibrary/org.eclipse.cdt.msvc.exe.debug.1269692248/LIBRARY_PATH/operation=remove
environment/buildEnvironmentLibrary/org.eclipse.cdt.msvc.exe.debug.1269692248/append=true
environment/buildEnvironmentLibrary/org.eclipse.cdt.msvc.exe.debug.1269692248/appendContributed=true

BIN
Test profile 1.sp Normal file

Binary file not shown.

BIN
profiles/Test profile 1.sp Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

0
src/PiScan.vcproj Normal file
View File

View File

@ -0,0 +1,576 @@
/* $Id: drv_MatrixOrbitalGX.c 975 2009-02-27 18:50:20Z abbas $
* $URL: https://ssl.bulix.org/svn/lcd4linux/trunk/drv_MatrixOrbitalGX.c $
*
* driver for Matrix Orbital GX Series Graphic(240x64) displays from matrixorbital.com
*
* Copyright (C) 2009 Abbas Kosan <abbaskosan@gmail.com>
* Copyright (C) 2005, 2006, 2007 The LCD4Linux Team
* <lcd4linux-devel@users.sourceforge.net>
*
* This file is part of LCD4Linux.
*
* LCD4Linux is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* LCD4Linux is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
*/
/*
* MODIFIED for use in PiScan
*/
/*
*
* exported fuctions:
*
* struct DRIVER drv_MatrixOrbitalGX
*
*/
//#include "config.h"
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
//#include <termios.h>
//#include <fcntl.h>
//#include <sys/ioctl.h>
//#include <sys/time.h>
#include <usb.h>
/*
#include "debug.h"
#include "cfg.h"
#include "qprintf.h"
#include "udelay.h"
#include "plugin.h"
#include "widget.h"
#include "widget_text.h"
#include "widget_icon.h"
#include "widget_bar.h"
#include "drv.h"
#include "drv_generic_graphic.h"
*/
#define MatrixOrbitalGX_VENDOR 0x1b3d
#define MatrixOrbitalGX_DEVICE_1 0x000a
#define MatrixOrbitalGX_DEVICE_2 0x000b
#define MatrixOrbitalGX_DEVICE_3 0x000c
/********Matrix Orbital GX Series*********/
#define INTERFACE_ 0
#define BULK_OUT_ENDPOINT 0x05
#define BULK_IN_ENDPOINT 0x82
#define SCREEN_H 64
#define SCREEN_W 240
#define SCREEN_SIZE (SCREEN_H * SCREEN_W)
/*****************************************/
#if 1
#define DEBUG(x) debug("%s(): %s", __FUNCTION__, x);
#else
#define DEBUG(x)
#endif
static char Name[] = "MatrixOrbitalGX";
static unsigned char *MOGX_framebuffer;
/* used to display white text on blue background or inverse */
static unsigned char invert = 0x00;
static unsigned char backlight_RGB = 0;
static usb_dev_handle *lcd_dev;
/*
int mygetch(void)
{
struct termios oldt, newt;
int ch;
tcgetattr( STDIN_FILENO, &oldt );
newt = oldt;
newt.c_lflag &= ~( ICANON | ECHO );
tcsetattr( STDIN_FILENO, TCSANOW, &newt );
ch = getchar();
tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
return ch;
}
*/
/****************************************/
/*** hardware dependant functions ***/
/****************************************/
static int drv_MOGX_open(void)
{
struct usb_bus *busses, *bus;
struct usb_device *dev;
char driver[1024];
char product[1024];
char manufacturer[1024];
char serialnumber[1024];
int ret;
lcd_dev = NULL;
info("%s: scanning for Matrix Orbital GX Series LCD...", Name);
usb_set_debug(0);
usb_init();
usb_find_busses();
usb_find_devices();
busses = usb_get_busses();
for (bus = busses; bus; bus = bus->next) {
for (dev = bus->devices; dev; dev = dev->next) {
if ((dev->descriptor.idVendor == MatrixOrbitalGX_VENDOR) &&
((dev->descriptor.idProduct == MatrixOrbitalGX_DEVICE_1) ||
(dev->descriptor.idProduct == MatrixOrbitalGX_DEVICE_2) ||
(dev->descriptor.idProduct == MatrixOrbitalGX_DEVICE_3))) {
/* At the moment, I have information for only this LCD */
if (dev->descriptor.idProduct == MatrixOrbitalGX_DEVICE_2)
backlight_RGB = 0;
info("%s: found Matrix Orbital GX Series LCD on bus %s device %s", Name, bus->dirname, dev->filename);
lcd_dev = usb_open(dev);
ret = usb_get_driver_np(lcd_dev, 0, driver, sizeof(driver));
if (ret == 0) {
info("%s: interface 0 already claimed by '%s'", Name, driver);
info("%s: attempting to detach driver...", Name);
if (usb_detach_kernel_driver_np(lcd_dev, 0) < 0) {
error("%s: usb_detach_kernel_driver_np() failed!", Name);
return -1;
}
}
usb_set_configuration(lcd_dev, 1);
usleep(100);
if (usb_claim_interface(lcd_dev, 0) < 0) {
error("%s: usb_claim_interface() failed!", Name);
return -1;
}
usb_set_altinterface(lcd_dev, 0);
usb_get_string_simple(lcd_dev, dev->descriptor.iProduct, product, sizeof(product));
usb_get_string_simple(lcd_dev, dev->descriptor.iManufacturer, manufacturer, sizeof(manufacturer));
usb_get_string_simple(lcd_dev, dev->descriptor.iSerialNumber, serialnumber, sizeof(serialnumber));
info("%s: Manufacturer='%s' Product='%s' SerialNumber='%s'", Name, manufacturer, product, serialnumber);
return 0;
}
}
}
error("%s: could not find a Matrix Orbital GX Series LCD", Name);
return -1;
}
static void drv_MOGX_send(const unsigned char *data, const unsigned int size)
{
int __attribute__ ((unused)) ret;
//unsigned char rcv_buffer[64] = "";
ret = usb_bulk_write(lcd_dev, BULK_OUT_ENDPOINT, (char *) data, size, 1000);
//info("%s written %d bytes\n", __FUNCTION__, ret);
//ret = usb_bulk_read(lcd_dev, BULK_IN_ENDPOINT, (char *) rcv_buffer,64,1000);
//printf("\nReply : ");
//for (i=0;i<ret;i++)
//printf("%3x",rcv_buffer[i]);
}
static int drv_MOGX_close(void)
{
/* close whatever port you've opened */
usb_release_interface(lcd_dev, 0);
usb_close(lcd_dev);
return 0;
}
/* Send framebuffer to lcd */
static void drv_MOGX_update_lcd()
{
unsigned char cmd[3852] = { 0x38, 0x46, 0x42, 0x46, 0x50, 0x00, 0x00, 0x07, 0x80, 0xff, 0xff };
/*
index : index of pixel_byte in cmd[]
bit : pixel of each pixel_byte
x : index of pixel in framebuffer
pixel_byte : each 8 pixel in framebuffer = 1 byte
*/
int index, bit, x = 0;
unsigned int cmd_length = 0;
unsigned char pixel_byte;
//info("In %s\n", __FUNCTION__);
for (index = 0; index < (SCREEN_SIZE / 8); index++) {
pixel_byte = 0x00;
for (bit = 7; bit >= 0; bit--) {
if (MOGX_framebuffer[x] ^ invert)
pixel_byte |= (1 << bit);
else
pixel_byte &= ~(1 << bit);
x++;
}
if (pixel_byte == 0xc0) {
cmd[11 + cmd_length] = 0xdb;
cmd_length++;
cmd[11 + cmd_length] = 0xdc;
cmd_length++;
} else if (pixel_byte == 0xdb) {
cmd[11 + cmd_length] = 0xdb;
cmd_length++;
cmd[11 + cmd_length] = 0xdd;
cmd_length++;
} else {
cmd[11 + cmd_length] = pixel_byte;
cmd_length++;
}
}
/* finish command */
cmd[11 + cmd_length] = 0xc0;
//info("In %s - %s \n", __FUNCTION__, cmd_img);
/* send command which includes framebuffer */
drv_MOGX_send(cmd, cmd_length + 12);
}
static void drv_MOGX_blit(const int row, const int col, const int height, const int width)
{
int r, c;
for (r = row; r < row + height; r++) {
for (c = col; c < col + width; c++)
MOGX_framebuffer[r * SCREEN_W + c] = drv_generic_graphic_black(r, c);
}
drv_MOGX_update_lcd();
}
void drv_MOGX_clear(void)
{
//info("In %s\n", __FUNCTION__);
memset(MOGX_framebuffer, 0x00, SCREEN_SIZE);
/* clear the screen */
drv_MOGX_update_lcd();
}
/* TODO : I am not sure for contrast function (command)
Don't try to adjust contrast until contrast function is checked and fixed
*/
/*
static int drv_MOGX_contrast(int contrast)
{
unsigned char cmd[11] = {0x18,0x4c,0x43,0x53,0x43,0x00,0x00,0x00,0x01,0x00,0xc0};
// adjust limits according to the display
if (contrast < 0)
contrast = 0;
if (contrast > 255)
contrast = 255;
// send contrast command
cmd[9] = contrast;
drv_MOGX_send(cmd, 11);
return contrast;
}
*/
/* backlight function used in plugin */
static int drv_MOGX_backlight(int backlight)
{
unsigned char cmd[13] = { 0x18, 0x4c, 0x43, 0x53, 0x48, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xc0 };
if (backlight < 0)
backlight = 0;
if (backlight >= 255)
backlight = 255;
cmd[10] = backlight;
drv_MOGX_send(cmd, 13);
return backlight;
}
/* backlightRGB function used in plugin */
static int drv_MOGX_backlightRGB(int backlight_R, int backlight_G, int backlight_B)
{
/*
TODO : Function should be tested for three color LCD
*/
//unsigned char cmd1[11] = {0x18,0x4c,0x43,0x53,0x42,0x00,0x00,0x00,0x01,0xff,0xc0};
unsigned char cmd2[13] = { 0x18, 0x4c, 0x43, 0x53, 0x48, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0xc0 };
if (backlight_R < 0)
backlight_R = 0;
if (backlight_R >= 255)
backlight_R = 255;
if (backlight_G < 0)
backlight_G = 0;
if (backlight_G >= 255)
backlight_G = 255;
if (backlight_B < 0)
backlight_B = 0;
if (backlight_B >= 255)
backlight_B = 255;
//cmd1[9] = backlight;
cmd2[9] = backlight_R;
cmd2[10] = backlight_G;
cmd2[11] = backlight_B;
//drv_MOGX_send(cmd1, 11);
drv_MOGX_send(cmd2, 13);
return backlight_R + backlight_G + backlight_B;
}
/* start graphic display */
static int drv_MOGX_start(const char *section, const __attribute__ ((unused))
int quiet)
{
char *s;
int value1, value2, value3;
/* read display size from config */
s = cfg_get(section, "Size", NULL);
if (s == NULL || *s == '\0') {
error("%s: no '%s.Size' entry from %s", Name, section, cfg_source());
return -1;
}
DROWS = -1;
DCOLS = -1;
if (sscanf(s, "%dx%d", &DCOLS, &DROWS) != 2 || DCOLS < 1 || DROWS < 1) {
error("%s: bad %s.Size '%s' from %s", Name, section, s, cfg_source());
return -1;
}
s = cfg_get(section, "Font", "6x8");
if (s == NULL || *s == '\0') {
error("%s: no '%s.Font' entry from %s", Name, section, cfg_source());
return -1;
}
XRES = -1;
YRES = -1;
if (sscanf(s, "%dx%d", &XRES, &YRES) != 2 || XRES < 1 || YRES < 1) {
error("%s: bad %s.Font '%s' from %s", Name, section, s, cfg_source());
return -1;
}
/* Fixme: provider other fonts someday... */
if (XRES != 6 && YRES != 8) {
error("%s: bad Font '%s' from %s (only 6x8 at the moment)", Name, s, cfg_source());
return -1;
}
if (cfg_number(section, "Invert", 0, 0, 1, &value1) > 0)
if (value1 > 0) {
info("%s: Display is inverted", Name);
invert = 0x01;
}
/* open communication with the display */
if (drv_MOGX_open() < 0) {
return -1;
}
/* Init framebuffer buffer */
MOGX_framebuffer = (unsigned char *) malloc(SCREEN_SIZE * sizeof(unsigned char));
if (!MOGX_framebuffer) {
error("%s: framebuffer could not be allocated: malloc() failed", Name);
return -1;
}
memset(MOGX_framebuffer, 0x00, SCREEN_SIZE);
//info("%s framebuffer zeroed", __FUNCTION__);
/* TODO : I am not sure for contrast function (command)
Don't try to adjust contrast until contrast function is checked and fixed
*/
/*
if (cfg_number(section, "Contrast", 0, 0, 255, &value1) > 0) {
info("%s: Setting contrast to %d", Name, value1);
drv_MOGX_contrast(value1);
}
*/
/* if lcd has three color backlight call the backlightRGB function */
if (backlight_RGB) {
if ((cfg_number(section, "Backlight_R", 0, 0, 255, &value1) > 0) &&
(cfg_number(section, "Backlight_G", 0, 0, 255, &value2) > 0) &&
(cfg_number(section, "Backlight_B", 0, 0, 255, &value3) > 0)) {
info("%s: Setting backlight to %d,%d,%d (RGB)", Name, value1, value2, value3);
drv_MOGX_backlightRGB(value1, value2, value3);
}
} else {
if ((cfg_number(section, "Backlight", 0, 0, 255, &value1) > 0)) {
info("%s: Setting backlight to %d", Name, value1);
drv_MOGX_backlight(value1);
}
}
//info("In %s\n", __FUNCTION__);
return 0;
}
/****************************************/
/*** plugins ***/
/****************************************/
/* TODO : I am not sure for contrast function (command)
Don't try to adjust contrast until contrast function is checked and fixed
*/
/*
static void plugin_contrast(RESULT * result, RESULT * arg1)
{
double contrast;
contrast = drv_MOGX_contrast(R2N(arg1));
SetResult(&result, R_NUMBER, &contrast);
}
*/
/*
static void plugin_backlight(RESULT * result, RESULT * arg1)
{
double backlight;
backlight = drv_MOGX_backlight(R2N(arg1));
SetResult(&result, R_NUMBER, &backlight);
}
static void plugin_backlightRGB(RESULT * result, RESULT * arg1, RESULT * arg2, RESULT * arg3)
{
double backlight;
backlight = drv_MOGX_backlightRGB(R2N(arg1), R2N(arg2), R2N(arg3));
SetResult(&result, R_NUMBER, &backlight);
}
*/
/****************************************/
/*** widget callbacks ***/
/****************************************/
/* using drv_generic_text_draw(W) */
/* using drv_generic_text_icon_draw(W) */
/* using drv_generic_text_bar_draw(W) */
/* using drv_generic_gpio_draw(W) */
/****************************************/
/*** exported functions ***/
/****************************************/
/* list models */
int drv_MOGX_list(void)
{
printf("Matrix Orbital GX Series driver");
return 0;
}
/* initialize driver & display */
int drv_MOGX_init(const char *section, const int quiet)
{
int ret;
//info("%s: %s", Name, "$Rev: 2$");
//info("Matrix Orbital GX Series LCD initialization\n");
/* real worker functions */
// drv_generic_graphic_real_blit = drv_MOGX_blit;
/* start display */
if ((ret = drv_MOGX_start(section, quiet)) != 0)
return ret;
/* initialize generic graphic driver */
/* if ((ret = drv_generic_graphic_init(section, Name)) != 0)
return ret;
*/
/* if (!quiet) {
char buffer[40];
qprintf(buffer, sizeof(buffer), "%s %dx%d", Name, DCOLS, DROWS);
if (drv_generic_graphic_greet(buffer, "http://www.matrixorbital.com")) {
sleep(3);
drv_generic_graphic_clear();
}
}
*/
/* register plugins */
/* TODO : I am not sure for contrast function (command)
Don't try to adjust contrast until contrast function is checked and fixed
*/
//AddFunction("LCD::contrast", 1, plugin_contrast);
/* if (backlight_RGB)
AddFunction("LCD::backlightRGB", 3, plugin_backlightRGB);
else
AddFunction("LCD::backlight", 1, plugin_backlight);
*/
//info("In %s\n", __FUNCTION__);
memset(MOGX_framebuffer, 0x00, SCREEN_SIZE);
//DEBUG("zeroed");
return 0;
}
/* close driver & display */
int drv_MOGX_quit(const __attribute__ ((unused))
int quiet)
{
info("%s: shutting down.", Name);
/* clear display */
drv_MOGX_clear();
drv_generic_graphic_quit();
//debug("closing connection");
drv_MOGX_close();
if (MOGX_framebuffer) {
free(MOGX_framebuffer);
}
return (0);
}
/* use this one for a graphic display */
/*DRIVER drv_MatrixOrbitalGX = {
.name = Name,
.list = drv_MOGX_list,
.init = drv_MOGX_init,
.quit = drv_MOGX_quit,
};
*/

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,5 @@
// Font data for Lucida Console 16pt
extern const uint_8 lucidaConsole_16ptBitmaps[];
extern const FONT_INFO lucidaConsole_16ptFontInfo;
extern const FONT_CHAR_INFO lucidaConsole_16ptDescriptors[];

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,5 @@
// Font data for Lucida Console 8pt
extern const uint_8 lucidaConsole_8ptBitmaps[];
extern const FONT_INFO lucidaConsole_8ptFontInfo;
extern const FONT_CHAR_INFO lucidaConsole_8ptDescriptors[];

View File

@ -0,0 +1,8 @@
/*
* graphic_lcd.c
*
* Created on: Jun 3, 2018
* Author: kidsr
*/

34
src/piscan.c Normal file
View File

@ -0,0 +1,34 @@
/*
* piscan.c
*
* Created on: May 30, 2018
* Author: Ezra Taimuty-Loomis
*/
/* includes */
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
//#include <librtlsdr.h>
//TODO revise or replace this dependency
#include "../../rtl-sdr/src/rtl_fm.c"
#include "scanner.h"
#include "scan_tree.h"
#include "tuner.h"
/* defines */
/* global variable declarations */
/* function declarations */
/* main function */
int main(void){
return 0;
}

151
src/scan_tree.c Normal file
View File

@ -0,0 +1,151 @@
/*
* scan_tree.c
*
* Created on: May 31, 2018
* Author: Ezra Taimuty-Loomis
*/
/*
* Definitions for the scan tree data structure
*/
/* Includes */
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <stdio.h>
#include <time.h>
#include <io.h>
#include <errno.h>
//#include "../../rtl-sdr/src/rtl_fm.c"
#include "scan_tree.h"
/* Definitions */
const char *getSysType(enum system_type type){
switch(type){
case ANALOG: return "Analog";
case P25: return "P25";
case DMR: return "DMR";
default: return "";
}
}
const char *getMode(enum modulation mode){
switch(mode){
case FM: return "FM";
case NFM: return "NFM";
case AM: return "AM";
case USB: return "USB";
case LSB: return "LSB";
case RAW: return "RAW";
default: return "";
}
}
//typedef struct channel_fm {
// char mode[] = "FM";
// struct channel chan;
// void (*mode_demod)(struct demod_state*) = &fm_demod;
// //chan.mode_demod = &fm_demod;
//};
//
//typedef struct channel_nfm {
// char mode[] = "FM";
// struct channel chan;
// void (*mode_demod)(struct demod_state*) = &fm_demod;
//};
//
//typedef struct channel_am {
// char mode[] = "AM";
// struct channel chan;
// void (*mode_demod)(struct demod_state*) = &am_demod;
//};
/* Methods */
int system_save(struct system *sys, char prf_dir[]){
char *sys_path = malloc(sizeof(*prf_dir) + MAX_TAG_LENGTH + 2);
memset(sys_path, 0, sizeof(*prf_dir) + MAX_TAG_LENGTH + 2);
strcat(sys_path, prf_dir);
strcat(sys_path, "/");
strcat(sys_path, sys->tag);
mkdir(sys_path);
char *sys_filename = malloc(sizeof(*sys_path) + sizeof(SYS_FILE_EXT) + 1);
memset(sys_filename, 0, sizeof(*sys_path) + sizeof(SYS_FILE_EXT) + 1);
strcat(sys_filename, sys_path);
strcat(sys_filename, SYS_FILE_EXT);
fprintf(stdout, "\tOpening \"%s\"", sys_filename);
FILE *outfile = fopen(sys_filename, "w");
if (outfile == NULL) {
fprintf(stderr, "File open error\n");
return 0;
}
fwrite(sys, sizeof(struct system), 1, outfile);
fclose(outfile);
free(sys_path);
free(sys_filename);
return 0;
}
int scan_profile_load(struct scan_profile *sp, char dir[]){
return 0;
}
int scan_profile_save(struct scan_profile *sp, char dir[]) {
int err = mkdir(dir);
if (err != 0) {
fprintf(stderr, "Could not make directory \"%s\": code %i\n", dir, err);
if (err == EEXIST)
fprintf(stderr, "\tDirectory already exists\n");
//else return 0;
}
char *sp_path = malloc(sizeof(*dir) + MAX_TAG_LENGTH + 1);
memset(sp_path, 0, sizeof(*dir) + MAX_TAG_LENGTH + 1);
strcat(sp_path, dir);
strcat(sp_path, sp->name);
err = mkdir(sp_path);
if (err != 0) {
fprintf(stderr, "Could not make directory \"%s\": code %i\n", sp_path, err);
if (err == EEXIST)
fprintf(stderr, "\tDirectory already exists\n");
//else return 0;
}
char *sp_filename = malloc(sizeof(*sp_path) + sizeof(SP_FILE_EXT) + 1);
memset(sp_filename, 0, sizeof(*sp_path) + sizeof(SP_FILE_EXT) + 1);
strcat(sp_filename, sp_path);
strcat(sp_filename, SP_FILE_EXT);
fprintf(stdout, "Opening file \"%s\"\n", sp_filename);
FILE *outfile = fopen(sp_filename, "w");
if (outfile == NULL) {
fprintf(stderr, "File open error\n");
return 0;
}
err = fwrite(sp, sizeof(struct scan_profile), 1, outfile);
for(int i = 0; i < sp->num_systems; i++)
system_save(&sp->systems[i], sp_path);
fclose(outfile);
free(sp_path);
free(sp_filename);
return err;
}

69
src/scan_tree.h Normal file
View File

@ -0,0 +1,69 @@
/*
* scan_tree.h
*
* Created on: Jun 2, 2018
* Author: kidsr
*/
#ifndef SCAN_TREE_H_
#define SCAN_TREE_H_
#include <time.h>
//#include "scan_tree.c"
#define MAX_TAG_LENGTH 32
#define MAX_FILENAME_LENGTH MAX_TAG_LENGTH + 4
#define SP_FILE_EXT ".sp"
#define SYS_FILE_EXT ".scn"
#define CHAN_FILE_EXT ".chan"
enum system_type {
ANALOG = 0,
P25,
DMR
};
const char *getSysType(enum system_type type);
enum modulation {
FM = 0,
NFM,
AM,
USB,
LSB,
RAW
};
const char *getMode(enum modulation mode);
typedef struct channel {
char *tag;
uint32_t freq;
enum modulation mode;
int delay_enabled;
time_t sigloss_start_time;
//void (*mode_demod)(struct demod_state*);
} channel_t;
typedef struct entry {
char *tag;
} entry_t;
typedef struct system {
char *tag;
enum system_type type;
int channel_count;
channel_t **channels;
void (*scan)(struct system*);
} system_t;
struct scan_profile {
char *name;
struct system *systems;
int num_systems;
};
int scan_profile_load(struct scan_profile *sp, char dir[]);
int scan_profile_save(struct scan_profile *sp, char dir[]);
#endif /* SCAN_TREE_H_ */

66
src/scanner.c Normal file
View File

@ -0,0 +1,66 @@
/*
* scanner.c
*
* Created on: May 31, 2018
* Author: Ezra Taimuty-Loomis
*/
/*
* Implementation of scanning procedures for each system type
*/
/* Includes */
#include <stdlib.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include "../../rtl-sdr/src/rtl_fm.c"
#include "../../rtl-sdr/include/rtl-sdr.h"
#include "scan_tree.h"
#include "scanner.h"
/* Constants */
#define SCAN_DELAY_TIMEOUT 2000 //2000ms timeout
/* Global variables */
/* Methods */
void analog_scan(const struct system *sys, struct tuning_interface *tuner){
for(int cur = 0; cur < sys->channel_count; cur++) {
// TODO code for updating interface
fprintf(stderr, "Scanning %s\n", sys->tag);
// TODO thread sync
tuner->dongle->freq = sys->channels[cur].freq;
switch(sys->channels[cur].mode){
case AM:
tuner->demod->mode_demod = &am_demod;
break;
case NFM:
case FM:
default:
tuner->demod->mode_demod = &fm_demod;
break;
}
while(!tuner->tuned);
//if(tuner->demod->)
}
}
void p25_scan(struct system *sys){
// TODO for future implementation
}
void dmr_scan(struct system *sys){
// TODO for future implementation
//struct tuning_interface ti;
}

15
src/scanner.h Normal file
View File

@ -0,0 +1,15 @@
/*
* scanner.h
*
* Created on: Jun 3, 2018
* Author: kidsr
*/
#ifndef SRC_SCANNER_H_
#define SRC_SCANNER_H_
void analog_scan(const struct system *sys, struct tuning_interface *tuner);
void p25_scan(struct system *sys);
void dmr_scan(struct system *sys);
#endif /* SRC_SCANNER_H_ */

8
src/tuner.c Normal file
View File

@ -0,0 +1,8 @@
/*
* tuner.c
*
* Created on: Jun 2, 2018
* Author: kidsr
*/
#include "tuner.h"

27
src/tuner.h Normal file
View File

@ -0,0 +1,27 @@
/*
* tuner.h
*
* Created on: Jun 3, 2018
* Author: kidsr
*/
#ifndef SRC_TUNER_H_
#define SRC_TUNER_H_
#include <pthread.h>
#include "../../rtl-sdr/src/rtl_fm.c"
#include "../../rtl-sdr/include/rtl-sdr.h"
typedef struct tuning_interface {
int ready = 0;
int tuned = 0;
struct dongle_state *dongle;
struct demod_state *demod;
//struct agc_state *agc;
struct controller_state *controller;
struct output_state *output;
pthread_t thread;
}tuner_t;
#endif /* SRC_TUNER_H_ */

102
tests/test_scan_tree.c Normal file
View File

@ -0,0 +1,102 @@
/*
* test_scan_tree.c
*
* Created on: Jun 2, 2018
* Author: Ezra Taimuty-Loomis
*/
/*
* Program to test scan tree implementation
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include "../src/scan_tree.h"
struct scan_profile generated_profile;
struct scan_profile loaded_profile;
char test_directory[] = "./profiles/";
void init_test_sys_1(struct system *sys){
fprintf(stdout, "Initializing system 1\n");
sys->tag = "Analog system 1";
sys->type = ANALOG;
sys->channel_count = 0;
sys->channels = malloc(10 * sizeof(struct channel*));
uint32_t freq = 470000000;
for(int i = 0; i < 10; i++){
sys->channels[i] = malloc(sizeof(struct channel));
char num[3];
sys->channels[i]->tag = malloc(16 * sizeof(char) + 1);
memset(sys->channels[i]->tag, 0, 16 * sizeof(char) + 1);
itoa(i, num, 10);
strcat(sys->channels[i]->tag, "Channel ");
strcat(sys->channels[i]->tag, num);
//sys->channels[i]->tag = out;
sys->channels[i]->freq = freq;
sys->channels[i]->delay_enabled = i % 2;
sys->channels[i]->mode = i % 3;
sys->channel_count++;
freq += 12500;
}
}
void init_test_prf(struct scan_profile *sp){
fprintf(stdout, "Initializing test profile\n");
sp->name = "Test profile 1";
struct system sys1;
init_test_sys_1(&sys1);
fprintf(stdout, "System 1 initialized\n");
sp->num_systems = 1;
sp->systems = malloc(1 * sizeof(struct system));
sp->systems[0] = sys1;
}
void print_analog_sys(struct system *sys){
fprintf(stdout, "System: %s\n\tType: %s\n\tChannels:\n", sys->tag, getSysType(sys->type));
for(int i = 0; i < sys->channel_count; i++){
fprintf(stdout, "\t\t%i: %s\n", i, sys->channels[i]->tag);
fprintf(stdout, "\t\t\t%lfMHz\n\t\t\tMode: %s\n\t\t\tDelay: %i\n",
(sys->channels[i]->freq/1000000.0),
getMode(sys->channels[i]->mode),
sys->channels[i]->delay_enabled);
}
}
int main(void){
init_test_prf(&generated_profile);
fprintf(stdout, "Profile initialized\nPrinting systems\n");
for(int i = 0; i < generated_profile.num_systems; i++){
switch(generated_profile.systems[i].type){
case P25:
break;
case DMR:
break;
case ANALOG:
default:
print_analog_sys(&generated_profile.systems[i]);
}
}
fprintf(stdout, "Saving file\n");
if(scan_profile_save(&generated_profile, test_directory))
fprintf(stdout, "Saved successfully\n");
fprintf(stdout, "Loading scan file\n");
scan_profile_load(&loaded_profile, test_directory);
system("pause");
return 0;
}

33
tests/test_tuner_thread.c Normal file
View File

@ -0,0 +1,33 @@
/*
* test_tuner_thread.c
*
* Created on: May 30, 2018
* Author: Ezra Taimuty-Loomis
*/
/*
* program to test tuner + demod control implementation
* will be mirrored in main source after designing here
*/
/* includes */
#include <stdlib.h>
#include <stdio.h>
//TODO revise or replace this dependency
#include "../../rtl-sdr/src/rtl_fm.c"
/* defines */
/* global variable declarations */
//struct tuning_interface tuner;
/* function declarations */
int main(void){
return 0;
}